swish/commit

Generated files.

authorJan Wielemaker
Thu Apr 25 13:45:13 2019 +0200
committerJan Wielemaker
Thu Apr 25 13:45:13 2019 +0200
commit7e5d8e15153d494cbea4c12f97db3181bcadb268
tree0abe55e4fb26b8c6be54caf59ff0e27d9284b82b
parent6e8472ff2bf45cd29a1ccfd3a7ea9956abd376b4
Diff style: patch stat
diff --git a/web/js/swish-min.js b/web/js/swish-min.js
index a8e5a9f..0f22ec2 100644
--- a/web/js/swish-min.js
+++ b/web/js/swish-min.js
@@ -1,25 +1,25 @@
 if(function(t,e){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(t,e){"use strict";function n(t,e,n){var i,r=(e=e||at).createElement("script");if(r.text=t,n)for(i in xt)n[i]&&(r[i]=n[i]);e.head.appendChild(r).parentNode.removeChild(r)}function i(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?dt[ft.call(t)]||"object":typeof t}function r(t){var e=!!t&&"length"in t&&t.length,n=i(t);return!yt(t)&&!bt(t)&&("array"===n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function o(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}function a(t,e,n){return yt(e)?wt.grep(t,function(t,i){return!!e.call(t,i,t)!==n}):e.nodeType?wt.grep(t,function(t){return t===e!==n}):"string"!=typeof e?wt.grep(t,function(t){return ht.call(e,t)>-1!==n}):wt.filter(e,t,n)}function s(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}function l(t){var e={};return wt.each(t.match(Dt)||[],function(t,n){e[n]=!0}),e}function c(t){return t}function u(t){throw t}function h(t,e,n,i){var r;try{t&&yt(r=t.promise)?r.call(t).done(e).fail(n):t&&yt(r=t.then)?r.call(t,e,n):e.apply(void 0,[t].slice(i))}catch(t){n.apply(void 0,[t])}}function d(){at.removeEventListener("DOMContentLoaded",d),t.removeEventListener("load",d),wt.ready()}function f(t,e){return e.toUpperCase()}function p(t){return t.replace(It,"ms-").replace(Ft,f)}function g(){this.expando=wt.expando+g.uid++}function m(t){return"true"===t||"false"!==t&&("null"===t?null:t===+t+""?+t:Vt.test(t)?JSON.parse(t):t)}function v(t,e,n){var i;if(void 0===n&&1===t.nodeType)if(i="data-"+e.replace(qt,"-$&").toLowerCase(),"string"==typeof(n=t.getAttribute(i))){try{n=m(n)}catch(t){}zt.set(t,e,n)}else n=void 0;return n}function y(t,e,n,i){var r,o,a=20,s=i?function(){return i.cur()}:function(){return wt.css(t,e,"")},l=s(),c=n&&n[3]||(wt.cssNumber[e]?"":"px"),u=(wt.cssNumber[e]||"px"!==c&&+l)&&Gt.exec(wt.css(t,e));if(u&&u[3]!==c){for(l/=2,c=c||u[3],u=+l||1;a--;)wt.style(t,e,u+c),(1-o)*(1-(o=s()/l||.5))<=0&&(a=0),u/=o;u*=2,wt.style(t,e,u+c),n=n||[]}return n&&(u=+u||+l||0,r=n[1]?u+(n[1]+1)*n[2]:+n[2],i&&(i.unit=c,i.start=u,i.end=r)),r}function b(t){var e,n=t.ownerDocument,i=t.nodeName,r=Xt[i];return r||(e=n.body.appendChild(n.createElement(i)),r=wt.css(e,"display"),e.parentNode.removeChild(e),"none"===r&&(r="block"),Xt[i]=r,r)}function x(t,e){for(var n,i,r=[],o=0,a=t.length;o<a;o++)(i=t[o]).style&&(n=i.style.display,e?("none"===n&&(r[o]=Ht.get(i,"display")||null,r[o]||(i.style.display="")),""===i.style.display&&Wt(i)&&(r[o]=b(i))):"none"!==n&&(r[o]="none",Ht.set(i,"display",n)));for(o=0;o<a;o++)null!=r[o]&&(t[o].style.display=r[o]);return t}function w(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[],void 0===e||e&&o(t,e)?wt.merge([t],n):n}function _(t,e){for(var n=0,i=t.length;n<i;n++)Ht.set(t[n],"globalEval",!e||Ht.get(e[n],"globalEval"))}function S(t,e,n,r,o){for(var a,s,l,c,u,h,d=e.createDocumentFragment(),f=[],p=0,g=t.length;p<g;p++)if((a=t[p])||0===a)if("object"===i(a))wt.merge(f,a.nodeType?[a]:a);else if(Jt.test(a)){for(s=s||d.appendChild(e.createElement("div")),l=(Qt.exec(a)||["",""])[1].toLowerCase(),c=Kt[l]||Kt._default,s.innerHTML=c[1]+wt.htmlPrefilter(a)+c[2],h=c[0];h--;)s=s.lastChild;wt.merge(f,s.childNodes),(s=d.firstChild).textContent=""}else f.push(e.createTextNode(a));for(d.textContent="",p=0;a=f[p++];)if(r&&wt.inArray(a,r)>-1)o&&o.push(a);else if(u=wt.contains(a.ownerDocument,a),s=w(d.appendChild(a),"script"),u&&_(s),n)for(h=0;a=s[h++];)Zt.test(a.type||"")&&n.push(a);return d}function C(){return!0}function T(){return!1}function k(){try{return at.activeElement}catch(t){}}function A(t,e,n,i,r,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(i=i||n,n=void 0);for(s in e)A(t,s,n,i,e[s],o);return t}if(null==i&&null==r?(r=n,i=n=void 0):null==r&&("string"==typeof n?(r=i,i=void 0):(r=i,i=n,n=void 0)),!1===r)r=T;else if(!r)return t;return 1===o&&(a=r,(r=function(t){return wt().off(t),a.apply(this,arguments)}).guid=a.guid||(a.guid=wt.guid++)),t.each(function(){wt.event.add(this,e,r,i,n)})}function M(t,e){return o(t,"table")&&o(11!==e.nodeType?e:e.firstChild,"tr")?wt(t).children("tbody")[0]||t:t}function E(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function L(t){return"true/"===(t.type||"").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute("type"),t}function P(t,e){var n,i,r,o,a,s,l,c;if(1===e.nodeType){if(Ht.hasData(t)&&(o=Ht.access(t),a=Ht.set(e,o),c=o.events)){delete a.handle,a.events={};for(r in c)for(n=0,i=c[r].length;n<i;n++)wt.event.add(e,r,c[r][n])}zt.hasData(t)&&(s=zt.access(t),l=wt.extend({},s),zt.set(e,l))}}function D(t,e){var n=e.nodeName.toLowerCase();"input"===n&&Yt.test(t.type)?e.checked=t.checked:"input"!==n&&"textarea"!==n||(e.defaultValue=t.defaultValue)}function N(t,e,i,r){e=ct.apply([],e);var o,a,s,l,c,u,h=0,d=t.length,f=d-1,p=e[0],g=yt(p);if(g||d>1&&"string"==typeof p&&!vt.checkClone&&ae.test(p))return t.each(function(n){var o=t.eq(n);g&&(e[0]=p.call(this,n,o.html())),N(o,e,i,r)});if(d&&(o=S(e,t[0].ownerDocument,!1,t,r),a=o.firstChild,1===o.childNodes.length&&(o=a),a||r)){for(l=(s=wt.map(w(o,"script"),E)).length;h<d;h++)c=o,h!==f&&(c=wt.clone(c,!0,!0),l&&wt.merge(s,w(c,"script"))),i.call(t[h],c,h);if(l)for(u=s[s.length-1].ownerDocument,wt.map(s,L),h=0;h<l;h++)c=s[h],Zt.test(c.type||"")&&!Ht.access(c,"globalEval")&&wt.contains(u,c)&&(c.src&&"module"!==(c.type||"").toLowerCase()?wt._evalUrl&&wt._evalUrl(c.src):n(c.textContent.replace(se,""),u,c))}return t}function O(t,e,n){for(var i,r=e?wt.filter(e,t):t,o=0;null!=(i=r[o]);o++)n||1!==i.nodeType||wt.cleanData(w(i)),i.parentNode&&(n&&wt.contains(i.ownerDocument,i)&&_(w(i,"script")),i.parentNode.removeChild(i));return t}function R(t,e,n){var i,r,o,a,s=t.style;return(n=n||ce(t))&&(""!==(a=n.getPropertyValue(e)||n[e])||wt.contains(t.ownerDocument,t)||(a=wt.style(t,e)),!vt.pixelBoxStyles()&&le.test(a)&&ue.test(e)&&(i=s.width,r=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=i,s.minWidth=r,s.maxWidth=o)),void 0!==a?a+"":a}function I(t,e){return{get:function(){if(!t())return(this.get=e).apply(this,arguments);delete this.get}}}function F(t){if(t in me)return t;for(var e=t[0].toUpperCase()+t.slice(1),n=ge.length;n--;)if((t=ge[n]+e)in me)return t}function j(t){var e=wt.cssProps[t];return e||(e=wt.cssProps[t]=F(t)||t),e}function H(t,e,n){var i=Gt.exec(e);return i?Math.max(0,i[2]-(n||0))+(i[3]||"px"):e}function z(t,e,n,i,r,o){var a="width"===e?1:0,s=0,l=0;if(n===(i?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=wt.css(t,n+$t[a],!0,r)),i?("content"===n&&(l-=wt.css(t,"padding"+$t[a],!0,r)),"margin"!==n&&(l-=wt.css(t,"border"+$t[a]+"Width",!0,r))):(l+=wt.css(t,"padding"+$t[a],!0,r),"padding"!==n?l+=wt.css(t,"border"+$t[a]+"Width",!0,r):s+=wt.css(t,"border"+$t[a]+"Width",!0,r));return!i&&o>=0&&(l+=Math.max(0,Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-o-l-s-.5))),l}function V(t,e,n){var i=ce(t),r=R(t,e,i),o="border-box"===wt.css(t,"boxSizing",!1,i),a=o;if(le.test(r)){if(!n)return r;r="auto"}return a=a&&(vt.boxSizingReliable()||r===t.style[e]),("auto"===r||!parseFloat(r)&&"inline"===wt.css(t,"display",!1,i))&&(r=t["offset"+e[0].toUpperCase()+e.slice(1)],a=!0),(r=parseFloat(r)||0)+z(t,e,n||(o?"border":"content"),a,i,r)+"px"}function q(t,e,n,i,r){return new q.prototype.init(t,e,n,i,r)}function B(){ye&&(!1===at.hidden&&t.requestAnimationFrame?t.requestAnimationFrame(B):t.setTimeout(B,wt.fx.interval),wt.fx.tick())}function G(){return t.setTimeout(function(){ve=void 0}),ve=Date.now()}function $(t,e){var n,i=0,r={height:t};for(e=e?1:0;i<4;i+=2-e)r["margin"+(n=$t[i])]=r["padding"+n]=t;return e&&(r.opacity=r.width=t),r}function W(t,e,n){for(var i,r=(Y.tweeners[e]||[]).concat(Y.tweeners["*"]),o=0,a=r.length;o<a;o++)if(i=r[o].call(n,e,t))return i}function U(t,e,n){var i,r,o,a,s,l,c,u,h="width"in e||"height"in e,d=this,f={},p=t.style,g=t.nodeType&&Wt(t),m=Ht.get(t,"fxshow");n.queue||(null==(a=wt._queueHooks(t,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,d.always(function(){d.always(function(){a.unqueued--,wt.queue(t,"fx").length||a.empty.fire()})}));for(i in e)if(r=e[i],be.test(r)){if(delete e[i],o=o||"toggle"===r,r===(g?"hide":"show")){if("show"!==r||!m||void 0===m[i])continue;g=!0}f[i]=m&&m[i]||wt.style(t,i)}if((l=!wt.isEmptyObject(e))||!wt.isEmptyObject(f)){h&&1===t.nodeType&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],null==(c=m&&m.display)&&(c=Ht.get(t,"display")),"none"===(u=wt.css(t,"display"))&&(c?u=c:(x([t],!0),c=t.style.display||c,u=wt.css(t,"display"),x([t]))),("inline"===u||"inline-block"===u&&null!=c)&&"none"===wt.css(t,"float")&&(l||(d.done(function(){p.display=c}),null==c&&(u=p.display,c="none"===u?"":u)),p.display="inline-block")),n.overflow&&(p.overflow="hidden",d.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]})),l=!1;for(i in f)l||(m?"hidden"in m&&(g=m.hidden):m=Ht.access(t,"fxshow",{display:c}),o&&(m.hidden=!g),g&&x([t],!0),d.done(function(){g||x([t]),Ht.remove(t,"fxshow");for(i in f)wt.style(t,i,f[i])})),l=W(g?m[i]:0,i,d),i in m||(m[i]=l.start,g&&(l.end=l.start,l.start=0))}}function X(t,e){var n,i,r,o,a;for(n in t)if(i=p(n),r=e[i],o=t[n],Array.isArray(o)&&(r=o[1],o=t[n]=o[0]),n!==i&&(t[i]=o,delete t[n]),(a=wt.cssHooks[i])&&"expand"in a){o=a.expand(o),delete t[i];for(n in o)n in t||(t[n]=o[n],e[n]=r)}else e[i]=r}function Y(t,e,n){var i,r,o=0,a=Y.prefilters.length,s=wt.Deferred().always(function(){delete l.elem}),l=function(){if(r)return!1;for(var e=ve||G(),n=Math.max(0,c.startTime+c.duration-e),i=1-(n/c.duration||0),o=0,a=c.tweens.length;o<a;o++)c.tweens[o].run(i);return s.notifyWith(t,[c,i,n]),i<1&&a?n:(a||s.notifyWith(t,[c,1,0]),s.resolveWith(t,[c]),!1)},c=s.promise({elem:t,props:wt.extend({},e),opts:wt.extend(!0,{specialEasing:{},easing:wt.easing._default},n),originalProperties:e,originalOptions:n,startTime:ve||G(),duration:n.duration,tweens:[],createTween:function(e,n){var i=wt.Tween(t,c.opts,e,n,c.opts.specialEasing[e]||c.opts.easing);return c.tweens.push(i),i},stop:function(e){var n=0,i=e?c.tweens.length:0;if(r)return this;for(r=!0;n<i;n++)c.tweens[n].run(1);return e?(s.notifyWith(t,[c,1,0]),s.resolveWith(t,[c,e])):s.rejectWith(t,[c,e]),this}}),u=c.props;for(X(u,c.opts.specialEasing);o<a;o++)if(i=Y.prefilters[o].call(c,t,u,c.opts))return yt(i.stop)&&(wt._queueHooks(c.elem,c.opts.queue).stop=i.stop.bind(i)),i;return wt.map(u,W,c),yt(c.opts.start)&&c.opts.start.call(t,c),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always),wt.fx.timer(wt.extend(l,{elem:t,anim:c,queue:c.opts.queue})),c}function Q(t){return(t.match(Dt)||[]).join(" ")}function Z(t){return t.getAttribute&&t.getAttribute("class")||""}function K(t){return Array.isArray(t)?t:"string"==typeof t?t.match(Dt)||[]:[]}function J(t,e,n,r){var o;if(Array.isArray(e))wt.each(e,function(e,i){n||Pe.test(t)?r(t,i):J(t+"["+("object"==typeof i&&null!=i?e:"")+"]",i,n,r)});else if(n||"object"!==i(e))r(t,e);else for(o in e)J(t+"["+o+"]",e[o],n,r)}function tt(t){return function(e,n){"string"!=typeof e&&(n=e,e="*");var i,r=0,o=e.toLowerCase().match(Dt)||[];if(yt(n))for(;i=o[r++];)"+"===i[0]?(i=i.slice(1)||"*",(t[i]=t[i]||[]).unshift(n)):(t[i]=t[i]||[]).push(n)}}function et(t,e,n,i){function r(s){var l;return o[s]=!0,wt.each(t[s]||[],function(t,s){var c=s(e,n,i);return"string"!=typeof c||a||o[c]?a?!(l=c):void 0:(e.dataTypes.unshift(c),r(c),!1)}),l}var o={},a=t===Be;return r(e.dataTypes[0])||!o["*"]&&r("*")}function nt(t,e){var n,i,r=wt.ajaxSettings.flatOptions||{};for(n in e)void 0!==e[n]&&((r[n]?t:i||(i={}))[n]=e[n]);return i&&wt.extend(!0,t,i),t}function it(t,e,n){for(var i,r,o,a,s=t.contents,l=t.dataTypes;"*"===l[0];)l.shift(),void 0===i&&(i=t.mimeType||e.getResponseHeader("Content-Type"));if(i)for(r in s)if(s[r]&&s[r].test(i)){l.unshift(r);break}if(l[0]in n)o=l[0];else{for(r in n){if(!l[0]||t.converters[r+" "+l[0]]){o=r;break}a||(a=r)}o=o||a}if(o)return o!==l[0]&&l.unshift(o),n[o]}function rt(t,e,n,i){var r,o,a,s,l,c={},u=t.dataTypes.slice();if(u[1])for(a in t.converters)c[a.toLowerCase()]=t.converters[a];for(o=u.shift();o;)if(t.responseFields[o]&&(n[t.responseFields[o]]=e),!l&&i&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),l=o,o=u.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(!(a=c[l+" "+o]||c["* "+o]))for(r in c)if((s=r.split(" "))[1]===o&&(a=c[l+" "+s[0]]||c["* "+s[0]])){!0===a?a=c[r]:!0!==c[r]&&(o=s[0],u.unshift(s[1]));break}if(!0!==a)if(a&&t.throws)e=a(e);else try{e=a(e)}catch(t){return{state:"parsererror",error:a?t:"No conversion from "+l+" to "+o}}}return{state:"success",data:e}}var ot=[],at=t.document,st=Object.getPrototypeOf,lt=ot.slice,ct=ot.concat,ut=ot.push,ht=ot.indexOf,dt={},ft=dt.toString,pt=dt.hasOwnProperty,gt=pt.toString,mt=gt.call(Object),vt={},yt=function(t){return"function"==typeof t&&"number"!=typeof t.nodeType},bt=function(t){return null!=t&&t===t.window},xt={type:!0,src:!0,noModule:!0},wt=function(t,e){return new wt.fn.init(t,e)},_t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;wt.fn=wt.prototype={jquery:"3.3.1",constructor:wt,length:0,toArray:function(){return lt.call(this)},get:function(t){return null==t?lt.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=wt.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return wt.each(this,t)},map:function(t){return this.pushStack(wt.map(this,function(e,n){return t.call(e,n,e)}))},slice:function(){return this.pushStack(lt.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n<e?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:ut,sort:ot.sort,splice:ot.splice},wt.extend=wt.fn.extend=function(){var t,e,n,i,r,o,a=arguments[0]||{},s=1,l=arguments.length,c=!1;for("boolean"==typeof a&&(c=a,a=arguments[s]||{},s++),"object"==typeof a||yt(a)||(a={}),s===l&&(a=this,s--);s<l;s++)if(null!=(t=arguments[s]))for(e in t)n=a[e],a!==(i=t[e])&&(c&&i&&(wt.isPlainObject(i)||(r=Array.isArray(i)))?(r?(r=!1,o=n&&Array.isArray(n)?n:[]):o=n&&wt.isPlainObject(n)?n:{},a[e]=wt.extend(c,o,i)):void 0!==i&&(a[e]=i));return a},wt.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isPlainObject:function(t){var e,n;return!(!t||"[object Object]"!==ft.call(t)||(e=st(t))&&("function"!=typeof(n=pt.call(e,"constructor")&&e.constructor)||gt.call(n)!==mt))},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},globalEval:function(t){n(t)},each:function(t,e){var n,i=0;if(r(t))for(n=t.length;i<n&&!1!==e.call(t[i],i,t[i]);i++);else for(i in t)if(!1===e.call(t[i],i,t[i]))break;return t},trim:function(t){return null==t?"":(t+"").replace(_t,"")},makeArray:function(t,e){var n=e||[];return null!=t&&(r(Object(t))?wt.merge(n,"string"==typeof t?[t]:t):ut.call(n,t)),n},inArray:function(t,e,n){return null==e?-1:ht.call(e,t,n)},merge:function(t,e){for(var n=+e.length,i=0,r=t.length;i<n;i++)t[r++]=e[i];return t.length=r,t},grep:function(t,e,n){for(var i=[],r=0,o=t.length,a=!n;r<o;r++)!e(t[r],r)!==a&&i.push(t[r]);return i},map:function(t,e,n){var i,o,a=0,s=[];if(r(t))for(i=t.length;a<i;a++)null!=(o=e(t[a],a,n))&&s.push(o);else for(a in t)null!=(o=e(t[a],a,n))&&s.push(o);return ct.apply([],s)},guid:1,support:vt}),"function"==typeof Symbol&&(wt.fn[Symbol.iterator]=ot[Symbol.iterator]),wt.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(t,e){dt["[object "+e+"]"]=e.toLowerCase()});var St=function(t){function e(t,e,n,i){var r,o,a,s,l,u,d,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(!i&&((e?e.ownerDocument||e:H)!==P&&L(e),e=e||P,N)){if(11!==p&&(l=gt.exec(t)))if(r=l[1]){if(9===p){if(!(a=e.getElementById(r)))return n;if(a.id===r)return n.push(a),n}else if(f&&(a=f.getElementById(r))&&F(e,a)&&a.id===r)return n.push(a),n}else{if(l[2])return Q.apply(n,e.getElementsByTagName(t)),n;if((r=l[3])&&x.getElementsByClassName&&e.getElementsByClassName)return Q.apply(n,e.getElementsByClassName(r)),n}if(x.qsa&&!G[t+" "]&&(!O||!O.test(t))){if(1!==p)f=e,d=t;else if("object"!==e.nodeName.toLowerCase()){for((s=e.getAttribute("id"))?s=s.replace(bt,xt):e.setAttribute("id",s=j),o=(u=C(t)).length;o--;)u[o]="#"+s+" "+h(u[o]);d=u.join(","),f=mt.test(t)&&c(e.parentNode)||e}if(d)try{return Q.apply(n,f.querySelectorAll(d)),n}catch(t){}finally{s===j&&e.removeAttribute("id")}}}return k(t.replace(ot,"$1"),e,n,i)}function n(){function t(n,i){return e.push(n+" ")>w.cacheLength&&delete t[e.shift()],t[n+" "]=i}var e=[];return t}function i(t){return t[j]=!0,t}function r(t){var e=P.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function o(t,e){for(var n=t.split("|"),i=n.length;i--;)w.attrHandle[n[i]]=e}function a(t,e){var n=e&&t,i=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(i)return i;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function s(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&&_t(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function l(t){return i(function(e){return e=+e,i(function(n,i){for(var r,o=t([],n.length,e),a=o.length;a--;)n[r=o[a]]&&(n[r]=!(i[r]=n[r]))})})}function c(t){return t&&void 0!==t.getElementsByTagName&&t}function u(){}function h(t){for(var e=0,n=t.length,i="";e<n;e++)i+=t[e].value;return i}function d(t,e,n){var i=e.dir,r=e.next,o=r||i,a=n&&"parentNode"===o,s=V++;return e.first?function(e,n,r){for(;e=e[i];)if(1===e.nodeType||a)return t(e,n,r);return!1}:function(e,n,l){var c,u,h,d=[z,s];if(l){for(;e=e[i];)if((1===e.nodeType||a)&&t(e,n,l))return!0}else for(;e=e[i];)if(1===e.nodeType||a)if(h=e[j]||(e[j]={}),u=h[e.uniqueID]||(h[e.uniqueID]={}),r&&r===e.nodeName.toLowerCase())e=e[i]||e;else{if((c=u[o])&&c[0]===z&&c[1]===s)return d[2]=c[2];if(u[o]=d,d[2]=t(e,n,l))return!0}return!1}}function f(t){return t.length>1?function(e,n,i){for(var r=t.length;r--;)if(!t[r](e,n,i))return!1;return!0}:t[0]}function p(t,n,i){for(var r=0,o=n.length;r<o;r++)e(t,n[r],i);return i}function g(t,e,n,i,r){for(var o,a=[],s=0,l=t.length,c=null!=e;s<l;s++)(o=t[s])&&(n&&!n(o,i,r)||(a.push(o),c&&e.push(s)));return a}function m(t,e,n,r,o,a){return r&&!r[j]&&(r=m(r)),o&&!o[j]&&(o=m(o,a)),i(function(i,a,s,l){var c,u,h,d=[],f=[],m=a.length,v=i||p(e||"*",s.nodeType?[s]:s,[]),y=!t||!i&&e?v:g(v,d,t,s,l),b=n?o||(i?t:m||r)?[]:a:y;if(n&&n(y,b,s,l),r)for(c=g(b,f),r(c,[],s,l),u=c.length;u--;)(h=c[u])&&(b[f[u]]=!(y[f[u]]=h));if(i){if(o||t){if(o){for(c=[],u=b.length;u--;)(h=b[u])&&c.push(y[u]=h);o(null,b=[],c,l)}for(u=b.length;u--;)(h=b[u])&&(c=o?K(i,h):d[u])>-1&&(i[c]=!(a[c]=h))}}else b=g(b===a?b.splice(m,b.length):b),o?o(null,a,b,l):Q.apply(a,b)})}function v(t){for(var e,n,i,r=t.length,o=w.relative[t[0].type],a=o||w.relative[" "],s=o?1:0,l=d(function(t){return t===e},a,!0),c=d(function(t){return K(e,t)>-1},a,!0),u=[function(t,n,i){var r=!o&&(i||n!==A)||((e=n).nodeType?l(t,n,i):c(t,n,i));return e=null,r}];s<r;s++)if(n=w.relative[t[s].type])u=[d(f(u),n)];else{if((n=w.filter[t[s].type].apply(null,t[s].matches))[j]){for(i=++s;i<r&&!w.relative[t[i].type];i++);return m(s>1&&f(u),s>1&&h(t.slice(0,s-1).concat({value:" "===t[s-2].type?"*":""})).replace(ot,"$1"),n,s<i&&v(t.slice(s,i)),i<r&&v(t=t.slice(i)),i<r&&h(t))}u.push(n)}return f(u)}function y(t,n){var r=n.length>0,o=t.length>0,a=function(i,a,s,l,c){var u,h,d,f=0,p="0",m=i&&[],v=[],y=A,b=i||o&&w.find.TAG("*",c),x=z+=null==y?1:Math.random()||.1,_=b.length;for(c&&(A=a===P||a||c);p!==_&&null!=(u=b[p]);p++){if(o&&u){for(h=0,a||u.ownerDocument===P||(L(u),s=!N);d=t[h++];)if(d(u,a||P,s)){l.push(u);break}c&&(z=x)}r&&((u=!d&&u)&&f--,i&&m.push(u))}if(f+=p,r&&p!==f){for(h=0;d=n[h++];)d(m,v,a,s);if(i){if(f>0)for(;p--;)m[p]||v[p]||(v[p]=X.call(l));v=g(v)}Q.apply(l,v),c&&!i&&v.length>0&&f+n.length>1&&e.uniqueSort(l)}return c&&(z=x,A=y),m};return r?i(a):a}var b,x,w,_,S,C,T,k,A,M,E,L,P,D,N,O,R,I,F,j="sizzle"+1*new Date,H=t.document,z=0,V=0,q=n(),B=n(),G=n(),$=function(t,e){return t===e&&(E=!0),0},W={}.hasOwnProperty,U=[],X=U.pop,Y=U.push,Q=U.push,Z=U.slice,K=function(t,e){for(var n=0,i=t.length;n<i;n++)if(t[n]===e)return n;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",tt="[\\x20\\t\\r\\n\\f]",et="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",nt="\\["+tt+"*("+et+")(?:"+tt+"*([*^$|!~]?=)"+tt+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+et+"))|)"+tt+"*\\]",it=":("+et+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+nt+")*)|.*)\\)|)",rt=new RegExp(tt+"+","g"),ot=new RegExp("^"+tt+"+|((?:^|[^\\\\])(?:\\\\.)*)"+tt+"+$","g"),at=new RegExp("^"+tt+"*,"+tt+"*"),st=new RegExp("^"+tt+"*([>+~]|"+tt+")"+tt+"*"),lt=new RegExp("="+tt+"*([^\\]'\"]*?)"+tt+"*\\]","g"),ct=new RegExp(it),ut=new RegExp("^"+et+"$"),ht={ID:new RegExp("^#("+et+")"),CLASS:new RegExp("^\\.("+et+")"),TAG:new RegExp("^("+et+"|[*])"),ATTR:new RegExp("^"+nt),PSEUDO:new RegExp("^"+it),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+tt+"*(even|odd|(([+-]|)(\\d*)n|)"+tt+"*(?:([+-]|)"+tt+"*(\\d+)|))"+tt+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+tt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+tt+"*((?:-\\d)?\\d*)"+tt+"*\\)|)(?=[^-]|$)","i")},dt=/^(?:input|select|textarea|button)$/i,ft=/^h\d$/i,pt=/^[^{]+\{\s*\[native \w/,gt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,mt=/[+~]/,vt=new RegExp("\\\\([\\da-f]{1,6}"+tt+"?|("+tt+")|.)","ig"),yt=function(t,e,n){var i="0x"+e-65536;return i!==i||n?e:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},bt=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,xt=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},wt=function(){L()},_t=d(function(t){return!0===t.disabled&&("form"in t||"label"in t)},{dir:"parentNode",next:"legend"});try{Q.apply(U=Z.call(H.childNodes),H.childNodes),U[H.childNodes.length].nodeType}catch(t){Q={apply:U.length?function(t,e){Y.apply(t,Z.call(e))}:function(t,e){for(var n=t.length,i=0;t[n++]=e[i++];);t.length=n-1}}}x=e.support={},S=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},L=e.setDocument=function(t){var e,n,i=t?t.ownerDocument||t:H;return i!==P&&9===i.nodeType&&i.documentElement?(P=i,D=P.documentElement,N=!S(P),H!==P&&(n=P.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",wt,!1):n.attachEvent&&n.attachEvent("onunload",wt)),x.attributes=r(function(t){return t.className="i",!t.getAttribute("className")}),x.getElementsByTagName=r(function(t){return t.appendChild(P.createComment("")),!t.getElementsByTagName("*").length}),x.getElementsByClassName=pt.test(P.getElementsByClassName),x.getById=r(function(t){return D.appendChild(t).id=j,!P.getElementsByName||!P.getElementsByName(j).length}),x.getById?(w.filter.ID=function(t){var e=t.replace(vt,yt);return function(t){return t.getAttribute("id")===e}},w.find.ID=function(t,e){if(void 0!==e.getElementById&&N){var n=e.getElementById(t);return n?[n]:[]}}):(w.filter.ID=function(t){var e=t.replace(vt,yt);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return n&&n.value===e}},w.find.ID=function(t,e){if(void 0!==e.getElementById&&N){var n,i,r,o=e.getElementById(t);if(o){if((n=o.getAttributeNode("id"))&&n.value===t)return[o];for(r=e.getElementsByName(t),i=0;o=r[i++];)if((n=o.getAttributeNode("id"))&&n.value===t)return[o]}return[]}}),w.find.TAG=x.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):x.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,i=[],r=0,o=e.getElementsByTagName(t);if("*"===t){for(;n=o[r++];)1===n.nodeType&&i.push(n);return i}return o},w.find.CLASS=x.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&N)return e.getElementsByClassName(t)},R=[],O=[],(x.qsa=pt.test(P.querySelectorAll))&&(r(function(t){D.appendChild(t).innerHTML="<a id='"+j+"'></a><select id='"+j+"-\r\\' msallowcapture=''><option selected=''></option></select>",t.querySelectorAll("[msallowcapture^='']").length&&O.push("[*^$]="+tt+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||O.push("\\["+tt+"*(?:value|"+J+")"),t.querySelectorAll("[id~="+j+"-]").length||O.push("~="),t.querySelectorAll(":checked").length||O.push(":checked"),t.querySelectorAll("a#"+j+"+*").length||O.push(".#.+[+~]")}),r(function(t){t.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var e=P.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&O.push("name"+tt+"*[*^$|!~]?="),2!==t.querySelectorAll(":enabled").length&&O.push(":enabled",":disabled"),D.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&O.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),O.push(",.*:")})),(x.matchesSelector=pt.test(I=D.matches||D.webkitMatchesSelector||D.mozMatchesSelector||D.oMatchesSelector||D.msMatchesSelector))&&r(function(t){x.disconnectedMatch=I.call(t,"*"),I.call(t,"[s!='']:x"),R.push("!=",it)}),O=O.length&&new RegExp(O.join("|")),R=R.length&&new RegExp(R.join("|")),e=pt.test(D.compareDocumentPosition),F=e||pt.test(D.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,i=e&&e.parentNode;return t===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):t.compareDocumentPosition&&16&t.compareDocumentPosition(i)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},$=e?function(t,e){if(t===e)return E=!0,0;var n=!t.compareDocumentPosition-!e.compareDocumentPosition;return n||(1&(n=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!x.sortDetached&&e.compareDocumentPosition(t)===n?t===P||t.ownerDocument===H&&F(H,t)?-1:e===P||e.ownerDocument===H&&F(H,e)?1:M?K(M,t)-K(M,e):0:4&n?-1:1)}:function(t,e){if(t===e)return E=!0,0;var n,i=0,r=t.parentNode,o=e.parentNode,s=[t],l=[e];if(!r||!o)return t===P?-1:e===P?1:r?-1:o?1:M?K(M,t)-K(M,e):0;if(r===o)return a(t,e);for(n=t;n=n.parentNode;)s.unshift(n);for(n=e;n=n.parentNode;)l.unshift(n);for(;s[i]===l[i];)i++;return i?a(s[i],l[i]):s[i]===H?-1:l[i]===H?1:0},P):P},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==P&&L(t),n=n.replace(lt,"='$1']"),x.matchesSelector&&N&&!G[n+" "]&&(!R||!R.test(n))&&(!O||!O.test(n)))try{var i=I.call(t,n);if(i||x.disconnectedMatch||t.document&&11!==t.document.nodeType)return i}catch(t){}return e(n,P,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==P&&L(t),F(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==P&&L(t);var n=w.attrHandle[e.toLowerCase()],i=n&&W.call(w.attrHandle,e.toLowerCase())?n(t,e,!N):void 0;return void 0!==i?i:x.attributes||!N?t.getAttribute(e):(i=t.getAttributeNode(e))&&i.specified?i.value:null},e.escape=function(t){return(t+"").replace(bt,xt)},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,n=[],i=0,r=0;if(E=!x.detectDuplicates,M=!x.sortStable&&t.slice(0),t.sort($),E){for(;e=t[r++];)e===t[r]&&(i=n.push(r));for(;i--;)t.splice(n[i],1)}return M=null,t},_=e.getText=function(t){var e,n="",i=0,r=t.nodeType;if(r){if(1===r||9===r||11===r){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=_(t)}else if(3===r||4===r)return t.nodeValue}else for(;e=t[i++];)n+=_(e);return n},(w=e.selectors={cacheLength:50,createPseudo:i,match:ht,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(vt,yt),t[3]=(t[3]||t[4]||t[5]||"").replace(vt,yt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return ht.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&ct.test(n)&&(e=C(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(vt,yt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=q[t+" "];return e||(e=new RegExp("(^|"+tt+")"+t+"("+tt+"|$)"))&&q(t,function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(t,n,i){return function(r){var o=e.attr(r,t);return null==o?"!="===n:!n||(o+="","="===n?o===i:"!="===n?o!==i:"^="===n?i&&0===o.indexOf(i):"*="===n?i&&o.indexOf(i)>-1:"$="===n?i&&o.slice(-i.length)===i:"~="===n?(" "+o.replace(rt," ")+" ").indexOf(i)>-1:"|="===n&&(o===i||o.slice(0,i.length+1)===i+"-"))}},CHILD:function(t,e,n,i,r){var o="nth"!==t.slice(0,3),a="last"!==t.slice(-4),s="of-type"===e;return 1===i&&0===r?function(t){return!!t.parentNode}:function(e,n,l){var c,u,h,d,f,p,g=o!==a?"nextSibling":"previousSibling",m=e.parentNode,v=s&&e.nodeName.toLowerCase(),y=!l&&!s,b=!1;if(m){if(o){for(;g;){for(d=e;d=d[g];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=g="only"===t&&!p&&"nextSibling"}return!0}if(p=[a?m.firstChild:m.lastChild],a&&y){for(b=(f=(c=(u=(h=(d=m)[j]||(d[j]={}))[d.uniqueID]||(h[d.uniqueID]={}))[t]||[])[0]===z&&c[1])&&c[2],d=f&&m.childNodes[f];d=++f&&d&&d[g]||(b=f=0)||p.pop();)if(1===d.nodeType&&++b&&d===e){u[t]=[z,f,b];break}}else if(y&&(b=f=(c=(u=(h=(d=e)[j]||(d[j]={}))[d.uniqueID]||(h[d.uniqueID]={}))[t]||[])[0]===z&&c[1]),!1===b)for(;(d=++f&&d&&d[g]||(b=f=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++b||(y&&((u=(h=d[j]||(d[j]={}))[d.uniqueID]||(h[d.uniqueID]={}))[t]=[z,b]),d!==e)););return(b-=r)===i||b%i==0&&b/i>=0}}},PSEUDO:function(t,n){var r,o=w.pseudos[t]||w.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return o[j]?o(n):o.length>1?(r=[t,t,"",n],w.setFilters.hasOwnProperty(t.toLowerCase())?i(function(t,e){for(var i,r=o(t,n),a=r.length;a--;)t[i=K(t,r[a])]=!(e[i]=r[a])}):function(t){return o(t,0,r)}):o}},pseudos:{not:i(function(t){var e=[],n=[],r=T(t.replace(ot,"$1"));return r[j]?i(function(t,e,n,i){for(var o,a=r(t,null,i,[]),s=t.length;s--;)(o=a[s])&&(t[s]=!(e[s]=o))}):function(t,i,o){return e[0]=t,r(e,null,o,n),e[0]=null,!n.pop()}}),has:i(function(t){return function(n){return e(t,n).length>0}}),contains:i(function(t){return t=t.replace(vt,yt),function(e){return(e.textContent||e.innerText||_(e)).indexOf(t)>-1}}),lang:i(function(t){return ut.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(vt,yt).toLowerCase(),function(e){var n;do{if(n=N?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(n=n.toLowerCase())===t||0===n.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===D},focus:function(t){return t===P.activeElement&&(!P.hasFocus||P.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:s(!1),disabled:s(!0),checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){
 for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!w.pseudos.empty(t)},header:function(t){return ft.test(t.nodeName)},input:function(t){return dt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:l(function(){return[0]}),last:l(function(t,e){return[e-1]}),eq:l(function(t,e,n){return[n<0?n+e:n]}),even:l(function(t,e){for(var n=0;n<e;n+=2)t.push(n);return t}),odd:l(function(t,e){for(var n=1;n<e;n+=2)t.push(n);return t}),lt:l(function(t,e,n){for(var i=n<0?n+e:n;--i>=0;)t.push(i);return t}),gt:l(function(t,e,n){for(var i=n<0?n+e:n;++i<e;)t.push(i);return t})}}).pseudos.nth=w.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[b]=function(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}(b);for(b in{submit:!0,reset:!0})w.pseudos[b]=function(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}(b);return u.prototype=w.filters=w.pseudos,w.setFilters=new u,C=e.tokenize=function(t,n){var i,r,o,a,s,l,c,u=B[t+" "];if(u)return n?0:u.slice(0);for(s=t,l=[],c=w.preFilter;s;){i&&!(r=at.exec(s))||(r&&(s=s.slice(r[0].length)||s),l.push(o=[])),i=!1,(r=st.exec(s))&&(i=r.shift(),o.push({value:i,type:r[0].replace(ot," ")}),s=s.slice(i.length));for(a in w.filter)!(r=ht[a].exec(s))||c[a]&&!(r=c[a](r))||(i=r.shift(),o.push({value:i,type:a,matches:r}),s=s.slice(i.length));if(!i)break}return n?s.length:s?e.error(t):B(t,l).slice(0)},T=e.compile=function(t,e){var n,i=[],r=[],o=G[t+" "];if(!o){for(e||(e=C(t)),n=e.length;n--;)(o=v(e[n]))[j]?i.push(o):r.push(o);(o=G(t,y(r,i))).selector=t}return o},k=e.select=function(t,e,n,i){var r,o,a,s,l,u="function"==typeof t&&t,d=!i&&C(t=u.selector||t);if(n=n||[],1===d.length){if((o=d[0]=d[0].slice(0)).length>2&&"ID"===(a=o[0]).type&&9===e.nodeType&&N&&w.relative[o[1].type]){if(!(e=(w.find.ID(a.matches[0].replace(vt,yt),e)||[])[0]))return n;u&&(e=e.parentNode),t=t.slice(o.shift().value.length)}for(r=ht.needsContext.test(t)?0:o.length;r--&&(a=o[r],!w.relative[s=a.type]);)if((l=w.find[s])&&(i=l(a.matches[0].replace(vt,yt),mt.test(o[0].type)&&c(e.parentNode)||e))){if(o.splice(r,1),!(t=i.length&&h(o)))return Q.apply(n,i),n;break}}return(u||T(t,d))(i,e,!N,n,!e||mt.test(t)&&c(e.parentNode)||e),n},x.sortStable=j.split("").sort($).join("")===j,x.detectDuplicates=!!E,L(),x.sortDetached=r(function(t){return 1&t.compareDocumentPosition(P.createElement("fieldset"))}),r(function(t){return t.innerHTML="<a href='#'></a>","#"===t.firstChild.getAttribute("href")})||o("type|href|height|width",function(t,e,n){if(!n)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),x.attributes&&r(function(t){return t.innerHTML="<input/>",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||o("value",function(t,e,n){if(!n&&"input"===t.nodeName.toLowerCase())return t.defaultValue}),r(function(t){return null==t.getAttribute("disabled")})||o(J,function(t,e,n){var i;if(!n)return!0===t[e]?e.toLowerCase():(i=t.getAttributeNode(e))&&i.specified?i.value:null}),e}(t);wt.find=St,wt.expr=St.selectors,wt.expr[":"]=wt.expr.pseudos,wt.uniqueSort=wt.unique=St.uniqueSort,wt.text=St.getText,wt.isXMLDoc=St.isXML,wt.contains=St.contains,wt.escapeSelector=St.escape;var Ct=function(t,e,n){for(var i=[],r=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(r&&wt(t).is(n))break;i.push(t)}return i},Tt=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},kt=wt.expr.match.needsContext,At=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;wt.filter=function(t,e,n){var i=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===i.nodeType?wt.find.matchesSelector(i,t)?[i]:[]:wt.find.matches(t,wt.grep(e,function(t){return 1===t.nodeType}))},wt.fn.extend({find:function(t){var e,n,i=this.length,r=this;if("string"!=typeof t)return this.pushStack(wt(t).filter(function(){for(e=0;e<i;e++)if(wt.contains(r[e],this))return!0}));for(n=this.pushStack([]),e=0;e<i;e++)wt.find(t,r[e],n);return i>1?wt.uniqueSort(n):n},filter:function(t){return this.pushStack(a(this,t||[],!1))},not:function(t){return this.pushStack(a(this,t||[],!0))},is:function(t){return!!a(this,"string"==typeof t&&kt.test(t)?wt(t):t||[],!1).length}});var Mt,Et=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(wt.fn.init=function(t,e,n){var i,r;if(!t)return this;if(n=n||Mt,"string"==typeof t){if(!(i="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:Et.exec(t))||!i[1]&&e)return!e||e.jquery?(e||n).find(t):this.constructor(e).find(t);if(i[1]){if(e=e instanceof wt?e[0]:e,wt.merge(this,wt.parseHTML(i[1],e&&e.nodeType?e.ownerDocument||e:at,!0)),At.test(i[1])&&wt.isPlainObject(e))for(i in e)yt(this[i])?this[i](e[i]):this.attr(i,e[i]);return this}return(r=at.getElementById(i[2]))&&(this[0]=r,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):yt(t)?void 0!==n.ready?n.ready(t):t(wt):wt.makeArray(t,this)}).prototype=wt.fn,Mt=wt(at);var Lt=/^(?:parents|prev(?:Until|All))/,Pt={children:!0,contents:!0,next:!0,prev:!0};wt.fn.extend({has:function(t){var e=wt(t,this),n=e.length;return this.filter(function(){for(var t=0;t<n;t++)if(wt.contains(this,e[t]))return!0})},closest:function(t,e){var n,i=0,r=this.length,o=[],a="string"!=typeof t&&wt(t);if(!kt.test(t))for(;i<r;i++)for(n=this[i];n&&n!==e;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&wt.find.matchesSelector(n,t))){o.push(n);break}return this.pushStack(o.length>1?wt.uniqueSort(o):o)},index:function(t){return t?"string"==typeof t?ht.call(wt(t),this[0]):ht.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(wt.uniqueSort(wt.merge(this.get(),wt(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),wt.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return Ct(t,"parentNode")},parentsUntil:function(t,e,n){return Ct(t,"parentNode",n)},next:function(t){return s(t,"nextSibling")},prev:function(t){return s(t,"previousSibling")},nextAll:function(t){return Ct(t,"nextSibling")},prevAll:function(t){return Ct(t,"previousSibling")},nextUntil:function(t,e,n){return Ct(t,"nextSibling",n)},prevUntil:function(t,e,n){return Ct(t,"previousSibling",n)},siblings:function(t){return Tt((t.parentNode||{}).firstChild,t)},children:function(t){return Tt(t.firstChild)},contents:function(t){return o(t,"iframe")?t.contentDocument:(o(t,"template")&&(t=t.content||t),wt.merge([],t.childNodes))}},function(t,e){wt.fn[t]=function(n,i){var r=wt.map(this,e,n);return"Until"!==t.slice(-5)&&(i=n),i&&"string"==typeof i&&(r=wt.filter(i,r)),this.length>1&&(Pt[t]||wt.uniqueSort(r),Lt.test(t)&&r.reverse()),this.pushStack(r)}});var Dt=/[^\x20\t\r\n\f]+/g;wt.Callbacks=function(t){t="string"==typeof t?l(t):wt.extend({},t);var e,n,r,o,a=[],s=[],c=-1,u=function(){for(o=o||t.once,r=e=!0;s.length;c=-1)for(n=s.shift();++c<a.length;)!1===a[c].apply(n[0],n[1])&&t.stopOnFalse&&(c=a.length,n=!1);t.memory||(n=!1),e=!1,o&&(a=n?[]:"")},h={add:function(){return a&&(n&&!e&&(c=a.length-1,s.push(n)),function e(n){wt.each(n,function(n,r){yt(r)?t.unique&&h.has(r)||a.push(r):r&&r.length&&"string"!==i(r)&&e(r)})}(arguments),n&&!e&&u()),this},remove:function(){return wt.each(arguments,function(t,e){for(var n;(n=wt.inArray(e,a,n))>-1;)a.splice(n,1),n<=c&&c--}),this},has:function(t){return t?wt.inArray(t,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return o=s=[],a=n="",this},disabled:function(){return!a},lock:function(){return o=s=[],n||e||(a=n=""),this},locked:function(){return!!o},fireWith:function(t,n){return o||(n=[t,(n=n||[]).slice?n.slice():n],s.push(n),e||u()),this},fire:function(){return h.fireWith(this,arguments),this},fired:function(){return!!r}};return h},wt.extend({Deferred:function(e){var n=[["notify","progress",wt.Callbacks("memory"),wt.Callbacks("memory"),2],["resolve","done",wt.Callbacks("once memory"),wt.Callbacks("once memory"),0,"resolved"],["reject","fail",wt.Callbacks("once memory"),wt.Callbacks("once memory"),1,"rejected"]],i="pending",r={state:function(){return i},always:function(){return o.done(arguments).fail(arguments),this},catch:function(t){return r.then(null,t)},pipe:function(){var t=arguments;return wt.Deferred(function(e){wt.each(n,function(n,i){var r=yt(t[i[4]])&&t[i[4]];o[i[1]](function(){var t=r&&r.apply(this,arguments);t&&yt(t.promise)?t.promise().progress(e.notify).done(e.resolve).fail(e.reject):e[i[0]+"With"](this,r?[t]:arguments)})}),t=null}).promise()},then:function(e,i,r){function o(e,n,i,r){return function(){var s=this,l=arguments,h=function(){var t,h;if(!(e<a)){if((t=i.apply(s,l))===n.promise())throw new TypeError("Thenable self-resolution");h=t&&("object"==typeof t||"function"==typeof t)&&t.then,yt(h)?r?h.call(t,o(a,n,c,r),o(a,n,u,r)):(a++,h.call(t,o(a,n,c,r),o(a,n,u,r),o(a,n,c,n.notifyWith))):(i!==c&&(s=void 0,l=[t]),(r||n.resolveWith)(s,l))}},d=r?h:function(){try{h()}catch(t){wt.Deferred.exceptionHook&&wt.Deferred.exceptionHook(t,d.stackTrace),e+1>=a&&(i!==u&&(s=void 0,l=[t]),n.rejectWith(s,l))}};e?d():(wt.Deferred.getStackHook&&(d.stackTrace=wt.Deferred.getStackHook()),t.setTimeout(d))}}var a=0;return wt.Deferred(function(t){n[0][3].add(o(0,t,yt(r)?r:c,t.notifyWith)),n[1][3].add(o(0,t,yt(e)?e:c)),n[2][3].add(o(0,t,yt(i)?i:u))}).promise()},promise:function(t){return null!=t?wt.extend(t,r):r}},o={};return wt.each(n,function(t,e){var a=e[2],s=e[5];r[e[1]]=a.add,s&&a.add(function(){i=s},n[3-t][2].disable,n[3-t][3].disable,n[0][2].lock,n[0][3].lock),a.add(e[3].fire),o[e[0]]=function(){return o[e[0]+"With"](this===o?void 0:this,arguments),this},o[e[0]+"With"]=a.fireWith}),r.promise(o),e&&e.call(o,o),o},when:function(t){var e=arguments.length,n=e,i=Array(n),r=lt.call(arguments),o=wt.Deferred(),a=function(t){return function(n){i[t]=this,r[t]=arguments.length>1?lt.call(arguments):n,--e||o.resolveWith(i,r)}};if(e<=1&&(h(t,o.done(a(n)).resolve,o.reject,!e),"pending"===o.state()||yt(r[n]&&r[n].then)))return o.then();for(;n--;)h(r[n],a(n),o.reject);return o.promise()}});var Nt=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;wt.Deferred.exceptionHook=function(e,n){t.console&&t.console.warn&&e&&Nt.test(e.name)&&t.console.warn("jQuery.Deferred exception: "+e.message,e.stack,n)},wt.readyException=function(e){t.setTimeout(function(){throw e})};var Ot=wt.Deferred();wt.fn.ready=function(t){return Ot.then(t).catch(function(t){wt.readyException(t)}),this},wt.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--wt.readyWait:wt.isReady)||(wt.isReady=!0,!0!==t&&--wt.readyWait>0||Ot.resolveWith(at,[wt]))}}),wt.ready.then=Ot.then,"complete"===at.readyState||"loading"!==at.readyState&&!at.documentElement.doScroll?t.setTimeout(wt.ready):(at.addEventListener("DOMContentLoaded",d),t.addEventListener("load",d));var Rt=function(t,e,n,r,o,a,s){var l=0,c=t.length,u=null==n;if("object"===i(n)){o=!0;for(l in n)Rt(t,e,l,n[l],!0,a,s)}else if(void 0!==r&&(o=!0,yt(r)||(s=!0),u&&(s?(e.call(t,r),e=null):(u=e,e=function(t,e,n){return u.call(wt(t),n)})),e))for(;l<c;l++)e(t[l],n,s?r:r.call(t[l],l,e(t[l],n)));return o?t:u?e.call(t):c?e(t[0],n):a},It=/^-ms-/,Ft=/-([a-z])/g,jt=function(t){return 1===t.nodeType||9===t.nodeType||!+t.nodeType};g.uid=1,g.prototype={cache:function(t){var e=t[this.expando];return e||(e={},jt(t)&&(t.nodeType?t[this.expando]=e:Object.defineProperty(t,this.expando,{value:e,configurable:!0}))),e},set:function(t,e,n){var i,r=this.cache(t);if("string"==typeof e)r[p(e)]=n;else for(i in e)r[p(i)]=e[i];return r},get:function(t,e){return void 0===e?this.cache(t):t[this.expando]&&t[this.expando][p(e)]},access:function(t,e,n){return void 0===e||e&&"string"==typeof e&&void 0===n?this.get(t,e):(this.set(t,e,n),void 0!==n?n:e)},remove:function(t,e){var n,i=t[this.expando];if(void 0!==i){if(void 0!==e){n=(e=Array.isArray(e)?e.map(p):(e=p(e))in i?[e]:e.match(Dt)||[]).length;for(;n--;)delete i[e[n]]}(void 0===e||wt.isEmptyObject(i))&&(t.nodeType?t[this.expando]=void 0:delete t[this.expando])}},hasData:function(t){var e=t[this.expando];return void 0!==e&&!wt.isEmptyObject(e)}};var Ht=new g,zt=new g,Vt=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,qt=/[A-Z]/g;wt.extend({hasData:function(t){return zt.hasData(t)||Ht.hasData(t)},data:function(t,e,n){return zt.access(t,e,n)},removeData:function(t,e){zt.remove(t,e)},_data:function(t,e,n){return Ht.access(t,e,n)},_removeData:function(t,e){Ht.remove(t,e)}}),wt.fn.extend({data:function(t,e){var n,i,r,o=this[0],a=o&&o.attributes;if(void 0===t){if(this.length&&(r=zt.get(o),1===o.nodeType&&!Ht.get(o,"hasDataAttrs"))){for(n=a.length;n--;)a[n]&&0===(i=a[n].name).indexOf("data-")&&(i=p(i.slice(5)),v(o,i,r[i]));Ht.set(o,"hasDataAttrs",!0)}return r}return"object"==typeof t?this.each(function(){zt.set(this,t)}):Rt(this,function(e){var n;if(o&&void 0===e){if(void 0!==(n=zt.get(o,t)))return n;if(void 0!==(n=v(o,t)))return n}else this.each(function(){zt.set(this,t,e)})},null,e,arguments.length>1,null,!0)},removeData:function(t){return this.each(function(){zt.remove(this,t)})}}),wt.extend({queue:function(t,e,n){var i;if(t)return e=(e||"fx")+"queue",i=Ht.get(t,e),n&&(!i||Array.isArray(n)?i=Ht.access(t,e,wt.makeArray(n)):i.push(n)),i||[]},dequeue:function(t,e){e=e||"fx";var n=wt.queue(t,e),i=n.length,r=n.shift(),o=wt._queueHooks(t,e),a=function(){wt.dequeue(t,e)};"inprogress"===r&&(r=n.shift(),i--),r&&("fx"===e&&n.unshift("inprogress"),delete o.stop,r.call(t,a,o)),!i&&o&&o.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return Ht.get(t,n)||Ht.access(t,n,{empty:wt.Callbacks("once memory").add(function(){Ht.remove(t,[e+"queue",n])})})}}),wt.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.length<n?wt.queue(this[0],t):void 0===e?this:this.each(function(){var n=wt.queue(this,t,e);wt._queueHooks(this,t),"fx"===t&&"inprogress"!==n[0]&&wt.dequeue(this,t)})},dequeue:function(t){return this.each(function(){wt.dequeue(this,t)})},clearQueue:function(t){return this.queue(t||"fx",[])},promise:function(t,e){var n,i=1,r=wt.Deferred(),o=this,a=this.length,s=function(){--i||r.resolveWith(o,[o])};for("string"!=typeof t&&(e=t,t=void 0),t=t||"fx";a--;)(n=Ht.get(o[a],t+"queueHooks"))&&n.empty&&(i++,n.empty.add(s));return s(),r.promise(e)}});var Bt=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Gt=new RegExp("^(?:([+-])=|)("+Bt+")([a-z%]*)$","i"),$t=["Top","Right","Bottom","Left"],Wt=function(t,e){return"none"===(t=e||t).style.display||""===t.style.display&&wt.contains(t.ownerDocument,t)&&"none"===wt.css(t,"display")},Ut=function(t,e,n,i){var r,o,a={};for(o in e)a[o]=t.style[o],t.style[o]=e[o];r=n.apply(t,i||[]);for(o in e)t.style[o]=a[o];return r},Xt={};wt.fn.extend({show:function(){return x(this,!0)},hide:function(){return x(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){Wt(this)?wt(this).show():wt(this).hide()})}});var Yt=/^(?:checkbox|radio)$/i,Qt=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,Zt=/^$|^module$|\/(?:java|ecma)script/i,Kt={option:[1,"<select multiple='multiple'>","</select>"],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,"",""]};Kt.optgroup=Kt.option,Kt.tbody=Kt.tfoot=Kt.colgroup=Kt.caption=Kt.thead,Kt.th=Kt.td;var Jt=/<|&#?\w+;/;!function(){var t=at.createDocumentFragment().appendChild(at.createElement("div")),e=at.createElement("input");e.setAttribute("type","radio"),e.setAttribute("checked","checked"),e.setAttribute("name","t"),t.appendChild(e),vt.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="<textarea>x</textarea>",vt.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var te=at.documentElement,ee=/^key/,ne=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ie=/^([^.]*)(?:\.(.+)|)/;wt.event={global:{},add:function(t,e,n,i,r){var o,a,s,l,c,u,h,d,f,p,g,m=Ht.get(t);if(m)for(n.handler&&(n=(o=n).handler,r=o.selector),r&&wt.find.matchesSelector(te,r),n.guid||(n.guid=wt.guid++),(l=m.events)||(l=m.events={}),(a=m.handle)||(a=m.handle=function(e){return void 0!==wt&&wt.event.triggered!==e.type?wt.event.dispatch.apply(t,arguments):void 0}),c=(e=(e||"").match(Dt)||[""]).length;c--;)f=g=(s=ie.exec(e[c])||[])[1],p=(s[2]||"").split(".").sort(),f&&(h=wt.event.special[f]||{},f=(r?h.delegateType:h.bindType)||f,h=wt.event.special[f]||{},u=wt.extend({type:f,origType:g,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&wt.expr.match.needsContext.test(r),namespace:p.join(".")},o),(d=l[f])||((d=l[f]=[]).delegateCount=0,h.setup&&!1!==h.setup.call(t,i,p,a)||t.addEventListener&&t.addEventListener(f,a)),h.add&&(h.add.call(t,u),u.handler.guid||(u.handler.guid=n.guid)),r?d.splice(d.delegateCount++,0,u):d.push(u),wt.event.global[f]=!0)},remove:function(t,e,n,i,r){var o,a,s,l,c,u,h,d,f,p,g,m=Ht.hasData(t)&&Ht.get(t);if(m&&(l=m.events)){for(c=(e=(e||"").match(Dt)||[""]).length;c--;)if(s=ie.exec(e[c])||[],f=g=s[1],p=(s[2]||"").split(".").sort(),f){for(h=wt.event.special[f]||{},d=l[f=(i?h.delegateType:h.bindType)||f]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=d.length;o--;)u=d[o],!r&&g!==u.origType||n&&n.guid!==u.guid||s&&!s.test(u.namespace)||i&&i!==u.selector&&("**"!==i||!u.selector)||(d.splice(o,1),u.selector&&d.delegateCount--,h.remove&&h.remove.call(t,u));a&&!d.length&&(h.teardown&&!1!==h.teardown.call(t,p,m.handle)||wt.removeEvent(t,f,m.handle),delete l[f])}else for(f in l)wt.event.remove(t,f+e[c],n,i,!0);wt.isEmptyObject(l)&&Ht.remove(t,"handle events")}},dispatch:function(t){var e,n,i,r,o,a,s=wt.event.fix(t),l=new Array(arguments.length),c=(Ht.get(this,"events")||{})[s.type]||[],u=wt.event.special[s.type]||{};for(l[0]=s,e=1;e<arguments.length;e++)l[e]=arguments[e];if(s.delegateTarget=this,!u.preDispatch||!1!==u.preDispatch.call(this,s)){for(a=wt.event.handlers.call(this,s,c),e=0;(r=a[e++])&&!s.isPropagationStopped();)for(s.currentTarget=r.elem,n=0;(o=r.handlers[n++])&&!s.isImmediatePropagationStopped();)s.rnamespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(i=((wt.event.special[o.origType]||{}).handle||o.handler).apply(r.elem,l))&&!1===(s.result=i)&&(s.preventDefault(),s.stopPropagation()));return u.postDispatch&&u.postDispatch.call(this,s),s.result}},handlers:function(t,e){var n,i,r,o,a,s=[],l=e.delegateCount,c=t.target;if(l&&c.nodeType&&!("click"===t.type&&t.button>=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==t.type||!0!==c.disabled)){for(o=[],a={},n=0;n<l;n++)void 0===a[r=(i=e[n]).selector+" "]&&(a[r]=i.needsContext?wt(r,this).index(c)>-1:wt.find(r,this,null,[c]).length),a[r]&&o.push(i);o.length&&s.push({elem:c,handlers:o})}return c=this,l<e.length&&s.push({elem:c,handlers:e.slice(l)}),s},addProp:function(t,e){Object.defineProperty(wt.Event.prototype,t,{enumerable:!0,configurable:!0,get:yt(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(t){return t[wt.expando]?t:new wt.Event(t)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==k()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===k()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&o(this,"input"))return this.click(),!1},_default:function(t){return o(t.target,"a")}},beforeunload:{postDispatch:function(t){void 0!==t.result&&t.originalEvent&&(t.originalEvent.returnValue=t.result)}}}},wt.removeEvent=function(t,e,n){t.removeEventListener&&t.removeEventListener(e,n)},wt.Event=function(t,e){if(!(this instanceof wt.Event))return new wt.Event(t,e);t&&t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&&!1===t.returnValue?C:T,this.target=t.target&&3===t.target.nodeType?t.target.parentNode:t.target,this.currentTarget=t.currentTarget,this.relatedTarget=t.relatedTarget):this.type=t,e&&wt.extend(this,e),this.timeStamp=t&&t.timeStamp||Date.now(),this[wt.expando]=!0},wt.Event.prototype={constructor:wt.Event,isDefaultPrevented:T,isPropagationStopped:T,isImmediatePropagationStopped:T,isSimulated:!1,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=C,t&&!this.isSimulated&&t.preventDefault()},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=C,t&&!this.isSimulated&&t.stopPropagation()},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=C,t&&!this.isSimulated&&t.stopImmediatePropagation(),this.stopPropagation()}},wt.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,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:function(t){var e=t.button;return null==t.which&&ee.test(t.type)?null!=t.charCode?t.charCode:t.keyCode:!t.which&&void 0!==e&&ne.test(t.type)?1&e?1:2&e?3:4&e?2:0:t.which}},wt.event.addProp),wt.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(t,e){wt.event.special[t]={delegateType:e,bindType:e,handle:function(t){var n,i=this,r=t.relatedTarget,o=t.handleObj;return r&&(r===i||wt.contains(i,r))||(t.type=o.origType,n=o.handler.apply(this,arguments),t.type=e),n}}}),wt.fn.extend({on:function(t,e,n,i){return A(this,t,e,n,i)},one:function(t,e,n,i){return A(this,t,e,n,i,1)},off:function(t,e,n){var i,r;if(t&&t.preventDefault&&t.handleObj)return i=t.handleObj,wt(t.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof t){for(r in t)this.off(r,e,t[r]);return this}return!1!==e&&"function"!=typeof e||(n=e,e=void 0),!1===n&&(n=T),this.each(function(){wt.event.remove(this,t,n,e)})}});var re=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,oe=/<script|<style|<link/i,ae=/checked\s*(?:[^=]|=\s*.checked.)/i,se=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;wt.extend({htmlPrefilter:function(t){return t.replace(re,"<$1></$2>")},clone:function(t,e,n){var i,r,o,a,s=t.cloneNode(!0),l=wt.contains(t.ownerDocument,t);if(!(vt.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||wt.isXMLDoc(t)))for(a=w(s),i=0,r=(o=w(t)).length;i<r;i++)D(o[i],a[i]);if(e)if(n)for(o=o||w(t),a=a||w(s),i=0,r=o.length;i<r;i++)P(o[i],a[i]);else P(t,s);return(a=w(s,"script")).length>0&&_(a,!l&&w(t,"script")),s},cleanData:function(t){for(var e,n,i,r=wt.event.special,o=0;void 0!==(n=t[o]);o++)if(jt(n)){if(e=n[Ht.expando]){if(e.events)for(i in e.events)r[i]?wt.event.remove(n,i):wt.removeEvent(n,i,e.handle);n[Ht.expando]=void 0}n[zt.expando]&&(n[zt.expando]=void 0)}}}),wt.fn.extend({detach:function(t){return O(this,t,!0)},remove:function(t){return O(this,t)},text:function(t){return Rt(this,function(t){return void 0===t?wt.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return N(this,arguments,function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||M(this,t).appendChild(t)})},prepend:function(){return N(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=M(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return N(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return N(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(wt.cleanData(w(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return wt.clone(this,t,e)})},html:function(t){return Rt(this,function(t){var e=this[0]||{},n=0,i=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!oe.test(t)&&!Kt[(Qt.exec(t)||["",""])[1].toLowerCase()]){t=wt.htmlPrefilter(t);try{for(;n<i;n++)1===(e=this[n]||{}).nodeType&&(wt.cleanData(w(e,!1)),e.innerHTML=t);e=0}catch(t){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=[];return N(this,arguments,function(e){var n=this.parentNode;wt.inArray(this,t)<0&&(wt.cleanData(w(this)),n&&n.replaceChild(e,this))},t)}}),wt.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,e){wt.fn[t]=function(t){for(var n,i=[],r=wt(t),o=r.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),wt(r[a])[e](n),ut.apply(i,n.get());return this.pushStack(i)}});var le=new RegExp("^("+Bt+")(?!px)[a-z%]+$","i"),ce=function(e){var n=e.ownerDocument.defaultView;return n&&n.opener||(n=t),n.getComputedStyle(e)},ue=new RegExp($t.join("|"),"i");!function(){function e(){if(c){l.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",c.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",te.appendChild(l).appendChild(c);var e=t.getComputedStyle(c);i="1%"!==e.top,s=12===n(e.marginLeft),c.style.right="60%",a=36===n(e.right),r=36===n(e.width),c.style.position="absolute",o=36===c.offsetWidth||"absolute",te.removeChild(l),c=null}}function n(t){return Math.round(parseFloat(t))}var i,r,o,a,s,l=at.createElement("div"),c=at.createElement("div");c.style&&(c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",vt.clearCloneStyle="content-box"===c.style.backgroundClip,wt.extend(vt,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),a},pixelPosition:function(){return e(),i},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),o}}))}();var he=/^(none|table(?!-c[ea]).+)/,de=/^--/,fe={position:"absolute",visibility:"hidden",display:"block"},pe={letterSpacing:"0",fontWeight:"400"},ge=["Webkit","Moz","ms"],me=at.createElement("div").style;wt.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=R(t,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,n,i){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var r,o,a,s=p(e),l=de.test(e),c=t.style;if(l||(e=j(s)),a=wt.cssHooks[e]||wt.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(r=a.get(t,!1,i))?r:c[e];"string"==(o=typeof n)&&(r=Gt.exec(n))&&r[1]&&(n=y(t,e,r),o="number"),null!=n&&n===n&&("number"===o&&(n+=r&&r[3]||(wt.cssNumber[s]?"":"px")),vt.clearCloneStyle||""!==n||0!==e.indexOf("background")||(c[e]="inherit"),a&&"set"in a&&void 0===(n=a.set(t,n,i))||(l?c.setProperty(e,n):c[e]=n))}},css:function(t,e,n,i){var r,o,a,s=p(e);return de.test(e)||(e=j(s)),(a=wt.cssHooks[e]||wt.cssHooks[s])&&"get"in a&&(r=a.get(t,!0,n)),void 0===r&&(r=R(t,e,i)),"normal"===r&&e in pe&&(r=pe[e]),""===n||n?(o=parseFloat(r),!0===n||isFinite(o)?o||0:r):r}}),wt.each(["height","width"],function(t,e){wt.cssHooks[e]={get:function(t,n,i){if(n)return!he.test(wt.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?V(t,e,i):Ut(t,fe,function(){return V(t,e,i)})},set:function(t,n,i){var r,o=ce(t),a="border-box"===wt.css(t,"boxSizing",!1,o),s=i&&z(t,e,i,a,o);return a&&vt.scrollboxSize()===o.position&&(s-=Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-parseFloat(o[e])-z(t,e,"border",!1,o)-.5)),s&&(r=Gt.exec(n))&&"px"!==(r[3]||"px")&&(t.style[e]=n,n=wt.css(t,e)),H(t,n,s)}}}),wt.cssHooks.marginLeft=I(vt.reliableMarginLeft,function(t,e){if(e)return(parseFloat(R(t,"marginLeft"))||t.getBoundingClientRect().left-Ut(t,{marginLeft:0},function(){return t.getBoundingClientRect().left}))+"px"}),wt.each({margin:"",padding:"",border:"Width"},function(t,e){wt.cssHooks[t+e]={expand:function(n){for(var i=0,r={},o="string"==typeof n?n.split(" "):[n];i<4;i++)r[t+$t[i]+e]=o[i]||o[i-2]||o[0];return r}},"margin"!==t&&(wt.cssHooks[t+e].set=H)}),wt.fn.extend({css:function(t,e){return Rt(this,function(t,e,n){var i,r,o={},a=0;if(Array.isArray(e)){for(i=ce(t),r=e.length;a<r;a++)o[e[a]]=wt.css(t,e[a],!1,i);return o}return void 0!==n?wt.style(t,e,n):wt.css(t,e)},t,e,arguments.length>1)}}),wt.Tween=q,q.prototype={constructor:q,init:function(t,e,n,i,r,o){this.elem=t,this.prop=n,this.easing=r||wt.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=i,this.unit=o||(wt.cssNumber[n]?"":"px")},cur:function(){var t=q.propHooks[this.prop];return t&&t.get?t.get(this):q.propHooks._default.get(this)},run:function(t){var e,n=q.propHooks[this.prop];return this.options.duration?this.pos=e=wt.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):q.propHooks._default.set(this),this}},q.prototype.init.prototype=q.prototype,q.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=wt.css(t.elem,t.prop,""))&&"auto"!==e?e:0},set:function(t){wt.fx.step[t.prop]?wt.fx.step[t.prop](t):1!==t.elem.nodeType||null==t.elem.style[wt.cssProps[t.prop]]&&!wt.cssHooks[t.prop]?t.elem[t.prop]=t.now:wt.style(t.elem,t.prop,t.now+t.unit)}}},q.propHooks.scrollTop=q.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},wt.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},wt.fx=q.prototype.init,wt.fx.step={};var ve,ye,be=/^(?:toggle|show|hide)$/,xe=/queueHooks$/;wt.Animation=wt.extend(Y,{tweeners:{"*":[function(t,e){var n=this.createTween(t,e);return y(n.elem,t,Gt.exec(e),n),n}]},tweener:function(t,e){yt(t)?(e=t,t=["*"]):t=t.match(Dt);for(var n,i=0,r=t.length;i<r;i++)n=t[i],Y.tweeners[n]=Y.tweeners[n]||[],Y.tweeners[n].unshift(e)},prefilters:[U],prefilter:function(t,e){e?Y.prefilters.unshift(t):Y.prefilters.push(t)}}),wt.speed=function(t,e,n){var i=t&&"object"==typeof t?wt.extend({},t):{complete:n||!n&&e||yt(t)&&t,duration:t,easing:n&&e||e&&!yt(e)&&e};return wt.fx.off?i.duration=0:"number"!=typeof i.duration&&(i.duration in wt.fx.speeds?i.duration=wt.fx.speeds[i.duration]:i.duration=wt.fx.speeds._default),null!=i.queue&&!0!==i.queue||(i.queue="fx"),i.old=i.complete,i.complete=function(){yt(i.old)&&i.old.call(this),i.queue&&wt.dequeue(this,i.queue)},i},wt.fn.extend({fadeTo:function(t,e,n,i){return this.filter(Wt).css("opacity",0).show().end().animate({opacity:e},t,n,i)},animate:function(t,e,n,i){var r=wt.isEmptyObject(t),o=wt.speed(e,n,i),a=function(){var e=Y(this,wt.extend({},t),o);(r||Ht.get(this,"finish"))&&e.stop(!0)};return a.finish=a,r||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(t,e,n){var i=function(t){var e=t.stop;delete t.stop,e(n)};return"string"!=typeof t&&(n=e,e=t,t=void 0),e&&!1!==t&&this.queue(t||"fx",[]),this.each(function(){var e=!0,r=null!=t&&t+"queueHooks",o=wt.timers,a=Ht.get(this);if(r)a[r]&&a[r].stop&&i(a[r]);else for(r in a)a[r]&&a[r].stop&&xe.test(r)&&i(a[r]);for(r=o.length;r--;)o[r].elem!==this||null!=t&&o[r].queue!==t||(o[r].anim.stop(n),e=!1,o.splice(r,1));!e&&n||wt.dequeue(this,t)})},finish:function(t){return!1!==t&&(t=t||"fx"),this.each(function(){
-var e,n=Ht.get(this),i=n[t+"queue"],r=n[t+"queueHooks"],o=wt.timers,a=i?i.length:0;for(n.finish=!0,wt.queue(this,t,[]),r&&r.stop&&r.stop.call(this,!0),e=o.length;e--;)o[e].elem===this&&o[e].queue===t&&(o[e].anim.stop(!0),o.splice(e,1));for(e=0;e<a;e++)i[e]&&i[e].finish&&i[e].finish.call(this);delete n.finish})}}),wt.each(["toggle","show","hide"],function(t,e){var n=wt.fn[e];wt.fn[e]=function(t,i,r){return null==t||"boolean"==typeof t?n.apply(this,arguments):this.animate($(e,!0),t,i,r)}}),wt.each({slideDown:$("show"),slideUp:$("hide"),slideToggle:$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,e){wt.fn[t]=function(t,n,i){return this.animate(e,t,n,i)}}),wt.timers=[],wt.fx.tick=function(){var t,e=0,n=wt.timers;for(ve=Date.now();e<n.length;e++)(t=n[e])()||n[e]!==t||n.splice(e--,1);n.length||wt.fx.stop(),ve=void 0},wt.fx.timer=function(t){wt.timers.push(t),wt.fx.start()},wt.fx.interval=13,wt.fx.start=function(){ye||(ye=!0,B())},wt.fx.stop=function(){ye=null},wt.fx.speeds={slow:600,fast:200,_default:400},wt.fn.delay=function(e,n){return e=wt.fx?wt.fx.speeds[e]||e:e,n=n||"fx",this.queue(n,function(n,i){var r=t.setTimeout(n,e);i.stop=function(){t.clearTimeout(r)}})},function(){var t=at.createElement("input"),e=at.createElement("select").appendChild(at.createElement("option"));t.type="checkbox",vt.checkOn=""!==t.value,vt.optSelected=e.selected,(t=at.createElement("input")).value="t",t.type="radio",vt.radioValue="t"===t.value}();var we,_e=wt.expr.attrHandle;wt.fn.extend({attr:function(t,e){return Rt(this,wt.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each(function(){wt.removeAttr(this,t)})}}),wt.extend({attr:function(t,e,n){var i,r,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===t.getAttribute?wt.prop(t,e,n):(1===o&&wt.isXMLDoc(t)||(r=wt.attrHooks[e.toLowerCase()]||(wt.expr.match.bool.test(e)?we:void 0)),void 0!==n?null===n?void wt.removeAttr(t,e):r&&"set"in r&&void 0!==(i=r.set(t,n,e))?i:(t.setAttribute(e,n+""),n):r&&"get"in r&&null!==(i=r.get(t,e))?i:null==(i=wt.find.attr(t,e))?void 0:i)},attrHooks:{type:{set:function(t,e){if(!vt.radioValue&&"radio"===e&&o(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,i=0,r=e&&e.match(Dt);if(r&&1===t.nodeType)for(;n=r[i++];)t.removeAttribute(n)}}),we={set:function(t,e,n){return!1===e?wt.removeAttr(t,n):t.setAttribute(n,n),n}},wt.each(wt.expr.match.bool.source.match(/\w+/g),function(t,e){var n=_e[e]||wt.find.attr;_e[e]=function(t,e,i){var r,o,a=e.toLowerCase();return i||(o=_e[a],_e[a]=r,r=null!=n(t,e,i)?a:null,_e[a]=o),r}});var Se=/^(?:input|select|textarea|button)$/i,Ce=/^(?:a|area)$/i;wt.fn.extend({prop:function(t,e){return Rt(this,wt.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[wt.propFix[t]||t]})}}),wt.extend({prop:function(t,e,n){var i,r,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&wt.isXMLDoc(t)||(e=wt.propFix[e]||e,r=wt.propHooks[e]),void 0!==n?r&&"set"in r&&void 0!==(i=r.set(t,n,e))?i:t[e]=n:r&&"get"in r&&null!==(i=r.get(t,e))?i:t[e]},propHooks:{tabIndex:{get:function(t){var e=wt.find.attr(t,"tabindex");return e?parseInt(e,10):Se.test(t.nodeName)||Ce.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),vt.optSelected||(wt.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),wt.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){wt.propFix[this.toLowerCase()]=this}),wt.fn.extend({addClass:function(t){var e,n,i,r,o,a,s,l=0;if(yt(t))return this.each(function(e){wt(this).addClass(t.call(this,e,Z(this)))});if((e=K(t)).length)for(;n=this[l++];)if(r=Z(n),i=1===n.nodeType&&" "+Q(r)+" "){for(a=0;o=e[a++];)i.indexOf(" "+o+" ")<0&&(i+=o+" ");r!==(s=Q(i))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,i,r,o,a,s,l=0;if(yt(t))return this.each(function(e){wt(this).removeClass(t.call(this,e,Z(this)))});if(!arguments.length)return this.attr("class","");if((e=K(t)).length)for(;n=this[l++];)if(r=Z(n),i=1===n.nodeType&&" "+Q(r)+" "){for(a=0;o=e[a++];)for(;i.indexOf(" "+o+" ")>-1;)i=i.replace(" "+o+" "," ");r!==(s=Q(i))&&n.setAttribute("class",s)}return this},toggleClass:function(t,e){var n=typeof t,i="string"===n||Array.isArray(t);return"boolean"==typeof e&&i?e?this.addClass(t):this.removeClass(t):yt(t)?this.each(function(n){wt(this).toggleClass(t.call(this,n,Z(this),e),e)}):this.each(function(){var e,r,o,a;if(i)for(r=0,o=wt(this),a=K(t);e=a[r++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else void 0!==t&&"boolean"!==n||((e=Z(this))&&Ht.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===t?"":Ht.get(this,"__className__")||""))})},hasClass:function(t){var e,n,i=0;for(e=" "+t+" ";n=this[i++];)if(1===n.nodeType&&(" "+Q(Z(n))+" ").indexOf(e)>-1)return!0;return!1}});var Te=/\r/g;wt.fn.extend({val:function(t){var e,n,i,r=this[0];return arguments.length?(i=yt(t),this.each(function(n){var r;1===this.nodeType&&(null==(r=i?t.call(this,n,wt(this).val()):t)?r="":"number"==typeof r?r+="":Array.isArray(r)&&(r=wt.map(r,function(t){return null==t?"":t+""})),(e=wt.valHooks[this.type]||wt.valHooks[this.nodeName.toLowerCase()])&&"set"in e&&void 0!==e.set(this,r,"value")||(this.value=r))})):r?(e=wt.valHooks[r.type]||wt.valHooks[r.nodeName.toLowerCase()])&&"get"in e&&void 0!==(n=e.get(r,"value"))?n:"string"==typeof(n=r.value)?n.replace(Te,""):null==n?"":n:void 0}}),wt.extend({valHooks:{option:{get:function(t){var e=wt.find.attr(t,"value");return null!=e?e:Q(wt.text(t))}},select:{get:function(t){var e,n,i,r=t.options,a=t.selectedIndex,s="select-one"===t.type,l=s?null:[],c=s?a+1:r.length;for(i=a<0?c:s?a:0;i<c;i++)if(((n=r[i]).selected||i===a)&&!n.disabled&&(!n.parentNode.disabled||!o(n.parentNode,"optgroup"))){if(e=wt(n).val(),s)return e;l.push(e)}return l},set:function(t,e){for(var n,i,r=t.options,o=wt.makeArray(e),a=r.length;a--;)((i=r[a]).selected=wt.inArray(wt.valHooks.option.get(i),o)>-1)&&(n=!0);return n||(t.selectedIndex=-1),o}}}}),wt.each(["radio","checkbox"],function(){wt.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=wt.inArray(wt(t).val(),e)>-1}},vt.checkOn||(wt.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})}),vt.focusin="onfocusin"in t;var ke=/^(?:focusinfocus|focusoutblur)$/,Ae=function(t){t.stopPropagation()};wt.extend(wt.event,{trigger:function(e,n,i,r){var o,a,s,l,c,u,h,d,f=[i||at],p=pt.call(e,"type")?e.type:e,g=pt.call(e,"namespace")?e.namespace.split("."):[];if(a=d=s=i=i||at,3!==i.nodeType&&8!==i.nodeType&&!ke.test(p+wt.event.triggered)&&(p.indexOf(".")>-1&&(p=(g=p.split(".")).shift(),g.sort()),c=p.indexOf(":")<0&&"on"+p,e=e[wt.expando]?e:new wt.Event(p,"object"==typeof e&&e),e.isTrigger=r?2:3,e.namespace=g.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),n=null==n?[e]:wt.makeArray(n,[e]),h=wt.event.special[p]||{},r||!h.trigger||!1!==h.trigger.apply(i,n))){if(!r&&!h.noBubble&&!bt(i)){for(l=h.delegateType||p,ke.test(l+p)||(a=a.parentNode);a;a=a.parentNode)f.push(a),s=a;s===(i.ownerDocument||at)&&f.push(s.defaultView||s.parentWindow||t)}for(o=0;(a=f[o++])&&!e.isPropagationStopped();)d=a,e.type=o>1?l:h.bindType||p,(u=(Ht.get(a,"events")||{})[e.type]&&Ht.get(a,"handle"))&&u.apply(a,n),(u=c&&a[c])&&u.apply&&jt(a)&&(e.result=u.apply(a,n),!1===e.result&&e.preventDefault());return e.type=p,r||e.isDefaultPrevented()||h._default&&!1!==h._default.apply(f.pop(),n)||!jt(i)||c&&yt(i[p])&&!bt(i)&&((s=i[c])&&(i[c]=null),wt.event.triggered=p,e.isPropagationStopped()&&d.addEventListener(p,Ae),i[p](),e.isPropagationStopped()&&d.removeEventListener(p,Ae),wt.event.triggered=void 0,s&&(i[c]=s)),e.result}},simulate:function(t,e,n){var i=wt.extend(new wt.Event,n,{type:t,isSimulated:!0});wt.event.trigger(i,null,e)}}),wt.fn.extend({trigger:function(t,e){return this.each(function(){wt.event.trigger(t,e,this)})},triggerHandler:function(t,e){var n=this[0];if(n)return wt.event.trigger(t,e,n,!0)}}),vt.focusin||wt.each({focus:"focusin",blur:"focusout"},function(t,e){var n=function(t){wt.event.simulate(e,t.target,wt.event.fix(t))};wt.event.special[e]={setup:function(){var i=this.ownerDocument||this,r=Ht.access(i,e);r||i.addEventListener(t,n,!0),Ht.access(i,e,(r||0)+1)},teardown:function(){var i=this.ownerDocument||this,r=Ht.access(i,e)-1;r?Ht.access(i,e,r):(i.removeEventListener(t,n,!0),Ht.remove(i,e))}}});var Me=t.location,Ee=Date.now(),Le=/\?/;wt.parseXML=function(e){var n;if(!e||"string"!=typeof e)return null;try{n=(new t.DOMParser).parseFromString(e,"text/xml")}catch(t){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||wt.error("Invalid XML: "+e),n};var Pe=/\[\]$/,De=/\r?\n/g,Ne=/^(?:submit|button|image|reset|file)$/i,Oe=/^(?:input|select|textarea|keygen)/i;wt.param=function(t,e){var n,i=[],r=function(t,e){var n=yt(e)?e():e;i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(t)||t.jquery&&!wt.isPlainObject(t))wt.each(t,function(){r(this.name,this.value)});else for(n in t)J(n,t[n],e,r);return i.join("&")},wt.fn.extend({serialize:function(){return wt.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=wt.prop(this,"elements");return t?wt.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!wt(this).is(":disabled")&&Oe.test(this.nodeName)&&!Ne.test(t)&&(this.checked||!Yt.test(t))}).map(function(t,e){var n=wt(this).val();return null==n?null:Array.isArray(n)?wt.map(n,function(t){return{name:e.name,value:t.replace(De,"\r\n")}}):{name:e.name,value:n.replace(De,"\r\n")}}).get()}});var Re=/%20/g,Ie=/#.*$/,Fe=/([?&])_=[^&]*/,je=/^(.*?):[ \t]*([^\r\n]*)$/gm,He=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ze=/^(?:GET|HEAD)$/,Ve=/^\/\//,qe={},Be={},Ge="*/".concat("*"),$e=at.createElement("a");$e.href=Me.href,wt.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Me.href,type:"GET",isLocal:He.test(Me.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ge,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":wt.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?nt(nt(t,wt.ajaxSettings),e):nt(wt.ajaxSettings,t)},ajaxPrefilter:tt(qe),ajaxTransport:tt(Be),ajax:function(e,n){function i(e,n,i,s){var c,d,f,x,w,_=n;u||(u=!0,l&&t.clearTimeout(l),r=void 0,a=s||"",S.readyState=e>0?4:0,c=e>=200&&e<300||304===e,i&&(x=it(p,S,i)),x=rt(p,x,S,c),c?(p.ifModified&&((w=S.getResponseHeader("Last-Modified"))&&(wt.lastModified[o]=w),(w=S.getResponseHeader("etag"))&&(wt.etag[o]=w)),204===e||"HEAD"===p.type?_="nocontent":304===e?_="notmodified":(_=x.state,d=x.data,c=!(f=x.error))):(f=_,!e&&_||(_="error",e<0&&(e=0))),S.status=e,S.statusText=(n||_)+"",c?v.resolveWith(g,[d,_,S]):v.rejectWith(g,[S,_,f]),S.statusCode(b),b=void 0,h&&m.trigger(c?"ajaxSuccess":"ajaxError",[S,p,c?d:f]),y.fireWith(g,[S,_]),h&&(m.trigger("ajaxComplete",[S,p]),--wt.active||wt.event.trigger("ajaxStop")))}"object"==typeof e&&(n=e,e=void 0),n=n||{};var r,o,a,s,l,c,u,h,d,f,p=wt.ajaxSetup({},n),g=p.context||p,m=p.context&&(g.nodeType||g.jquery)?wt(g):wt.event,v=wt.Deferred(),y=wt.Callbacks("once memory"),b=p.statusCode||{},x={},w={},_="canceled",S={readyState:0,getResponseHeader:function(t){var e;if(u){if(!s)for(s={};e=je.exec(a);)s[e[1].toLowerCase()]=e[2];e=s[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return u?a:null},setRequestHeader:function(t,e){return null==u&&(t=w[t.toLowerCase()]=w[t.toLowerCase()]||t,x[t]=e),this},overrideMimeType:function(t){return null==u&&(p.mimeType=t),this},statusCode:function(t){var e;if(t)if(u)S.always(t[S.status]);else for(e in t)b[e]=[b[e],t[e]];return this},abort:function(t){var e=t||_;return r&&r.abort(e),i(0,e),this}};if(v.promise(S),p.url=((e||p.url||Me.href)+"").replace(Ve,Me.protocol+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=(p.dataType||"*").toLowerCase().match(Dt)||[""],null==p.crossDomain){c=at.createElement("a");try{c.href=p.url,c.href=c.href,p.crossDomain=$e.protocol+"//"+$e.host!=c.protocol+"//"+c.host}catch(t){p.crossDomain=!0}}if(p.data&&p.processData&&"string"!=typeof p.data&&(p.data=wt.param(p.data,p.traditional)),et(qe,p,n,S),u)return S;(h=wt.event&&p.global)&&0==wt.active++&&wt.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!ze.test(p.type),o=p.url.replace(Ie,""),p.hasContent?p.data&&p.processData&&0===(p.contentType||"").indexOf("application/x-www-form-urlencoded")&&(p.data=p.data.replace(Re,"+")):(f=p.url.slice(o.length),p.data&&(p.processData||"string"==typeof p.data)&&(o+=(Le.test(o)?"&":"?")+p.data,delete p.data),!1===p.cache&&(o=o.replace(Fe,"$1"),f=(Le.test(o)?"&":"?")+"_="+Ee+++f),p.url=o+f),p.ifModified&&(wt.lastModified[o]&&S.setRequestHeader("If-Modified-Since",wt.lastModified[o]),wt.etag[o]&&S.setRequestHeader("If-None-Match",wt.etag[o])),(p.data&&p.hasContent&&!1!==p.contentType||n.contentType)&&S.setRequestHeader("Content-Type",p.contentType),S.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Ge+"; q=0.01":""):p.accepts["*"]);for(d in p.headers)S.setRequestHeader(d,p.headers[d]);if(p.beforeSend&&(!1===p.beforeSend.call(g,S,p)||u))return S.abort();if(_="abort",y.add(p.complete),S.done(p.success),S.fail(p.error),r=et(Be,p,n,S)){if(S.readyState=1,h&&m.trigger("ajaxSend",[S,p]),u)return S;p.async&&p.timeout>0&&(l=t.setTimeout(function(){S.abort("timeout")},p.timeout));try{u=!1,r.send(x,i)}catch(t){if(u)throw t;i(-1,t)}}else i(-1,"No Transport");return S},getJSON:function(t,e,n){return wt.get(t,e,n,"json")},getScript:function(t,e){return wt.get(t,void 0,e,"script")}}),wt.each(["get","post"],function(t,e){wt[e]=function(t,n,i,r){return yt(n)&&(r=r||i,i=n,n=void 0),wt.ajax(wt.extend({url:t,type:e,dataType:r,data:n,success:i},wt.isPlainObject(t)&&t))}}),wt._evalUrl=function(t){return wt.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},wt.fn.extend({wrapAll:function(t){var e;return this[0]&&(yt(t)&&(t=t.call(this[0])),e=wt(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this},wrapInner:function(t){return yt(t)?this.each(function(e){wt(this).wrapInner(t.call(this,e))}):this.each(function(){var e=wt(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=yt(t);return this.each(function(n){wt(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(t){return this.parent(t).not("body").each(function(){wt(this).replaceWith(this.childNodes)}),this}}),wt.expr.pseudos.hidden=function(t){return!wt.expr.pseudos.visible(t)},wt.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},wt.ajaxSettings.xhr=function(){try{return new t.XMLHttpRequest}catch(t){}};var We={0:200,1223:204},Ue=wt.ajaxSettings.xhr();vt.cors=!!Ue&&"withCredentials"in Ue,vt.ajax=Ue=!!Ue,wt.ajaxTransport(function(e){var n,i;if(vt.cors||Ue&&!e.crossDomain)return{send:function(r,o){var a,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)s[a]=e.xhrFields[a];e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||r["X-Requested-With"]||(r["X-Requested-With"]="XMLHttpRequest");for(a in r)s.setRequestHeader(a,r[a]);n=function(t){return function(){n&&(n=i=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===t?s.abort():"error"===t?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(We[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),i=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=i:s.onreadystatechange=function(){4===s.readyState&&t.setTimeout(function(){n&&i()})},n=n("abort");try{s.send(e.hasContent&&e.data||null)}catch(t){if(n)throw t}},abort:function(){n&&n()}}}),wt.ajaxPrefilter(function(t){t.crossDomain&&(t.contents.script=!1)}),wt.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return wt.globalEval(t),t}}}),wt.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")}),wt.ajaxTransport("script",function(t){if(t.crossDomain){var e,n;return{send:function(i,r){e=wt("<script>").prop({charset:t.scriptCharset,src:t.url}).on("load error",n=function(t){e.remove(),n=null,t&&r("error"===t.type?404:200,t.type)}),at.head.appendChild(e[0])},abort:function(){n&&n()}}}});var Xe=[],Ye=/(=)\?(?=&|$)|\?\?/;wt.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=Xe.pop()||wt.expando+"_"+Ee++;return this[t]=!0,t}}),wt.ajaxPrefilter("json jsonp",function(e,n,i){var r,o,a,s=!1!==e.jsonp&&(Ye.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ye.test(e.data)&&"data");if(s||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=yt(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(Ye,"$1"+r):!1!==e.jsonp&&(e.url+=(Le.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return a||wt.error(r+" was not called"),a[0]},e.dataTypes[0]="json",o=t[r],t[r]=function(){a=arguments},i.always(function(){void 0===o?wt(t).removeProp(r):t[r]=o,e[r]&&(e.jsonpCallback=n.jsonpCallback,Xe.push(r)),a&&yt(o)&&o(a[0]),a=o=void 0}),"script"}),vt.createHTMLDocument=function(){var t=at.implementation.createHTMLDocument("").body;return t.innerHTML="<form></form><form></form>",2===t.childNodes.length}(),wt.parseHTML=function(t,e,n){if("string"!=typeof t)return[];"boolean"==typeof e&&(n=e,e=!1);var i,r,o;return e||(vt.createHTMLDocument?((i=(e=at.implementation.createHTMLDocument("")).createElement("base")).href=at.location.href,e.head.appendChild(i)):e=at),r=At.exec(t),o=!n&&[],r?[e.createElement(r[1])]:(r=S([t],e,o),o&&o.length&&wt(o).remove(),wt.merge([],r.childNodes))},wt.fn.load=function(t,e,n){var i,r,o,a=this,s=t.indexOf(" ");return s>-1&&(i=Q(t.slice(s)),t=t.slice(0,s)),yt(e)?(n=e,e=void 0):e&&"object"==typeof e&&(r="POST"),a.length>0&&wt.ajax({url:t,type:r||"GET",dataType:"html",data:e}).done(function(t){o=arguments,a.html(i?wt("<div>").append(wt.parseHTML(t)).find(i):t)}).always(n&&function(t,e){a.each(function(){n.apply(this,o||[t.responseText,e,t])})}),this},wt.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){wt.fn[e]=function(t){return this.on(e,t)}}),wt.expr.pseudos.animated=function(t){return wt.grep(wt.timers,function(e){return t===e.elem}).length},wt.offset={setOffset:function(t,e,n){var i,r,o,a,s,l,c=wt.css(t,"position"),u=wt(t),h={};"static"===c&&(t.style.position="relative"),s=u.offset(),o=wt.css(t,"top"),l=wt.css(t,"left"),("absolute"===c||"fixed"===c)&&(o+l).indexOf("auto")>-1?(a=(i=u.position()).top,r=i.left):(a=parseFloat(o)||0,r=parseFloat(l)||0),yt(e)&&(e=e.call(t,n,wt.extend({},s))),null!=e.top&&(h.top=e.top-s.top+a),null!=e.left&&(h.left=e.left-s.left+r),"using"in e?e.using.call(t,h):u.css(h)}},wt.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){wt.offset.setOffset(this,t,e)});var e,n,i=this[0];return i?i.getClientRects().length?(e=i.getBoundingClientRect(),n=i.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var t,e,n,i=this[0],r={top:0,left:0};if("fixed"===wt.css(i,"position"))e=i.getBoundingClientRect();else{for(e=this.offset(),n=i.ownerDocument,t=i.offsetParent||n.documentElement;t&&(t===n.body||t===n.documentElement)&&"static"===wt.css(t,"position");)t=t.parentNode;t&&t!==i&&1===t.nodeType&&((r=wt(t).offset()).top+=wt.css(t,"borderTopWidth",!0),r.left+=wt.css(t,"borderLeftWidth",!0))}return{top:e.top-r.top-wt.css(i,"marginTop",!0),left:e.left-r.left-wt.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent;t&&"static"===wt.css(t,"position");)t=t.offsetParent;return t||te})}}),wt.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,e){var n="pageYOffset"===e;wt.fn[t]=function(i){return Rt(this,function(t,i,r){var o;if(bt(t)?o=t:9===t.nodeType&&(o=t.defaultView),void 0===r)return o?o[e]:t[i];o?o.scrollTo(n?o.pageXOffset:r,n?r:o.pageYOffset):t[i]=r},t,i,arguments.length)}}),wt.each(["top","left"],function(t,e){wt.cssHooks[e]=I(vt.pixelPosition,function(t,n){if(n)return n=R(t,e),le.test(n)?wt(t).position()[e]+"px":n})}),wt.each({Height:"height",Width:"width"},function(t,e){wt.each({padding:"inner"+t,content:e,"":"outer"+t},function(n,i){wt.fn[i]=function(r,o){var a=arguments.length&&(n||"boolean"!=typeof r),s=n||(!0===r||!0===o?"margin":"border");return Rt(this,function(e,n,r){var o;return bt(e)?0===i.indexOf("outer")?e["inner"+t]:e.document.documentElement["client"+t]:9===e.nodeType?(o=e.documentElement,Math.max(e.body["scroll"+t],o["scroll"+t],e.body["offset"+t],o["offset"+t],o["client"+t])):void 0===r?wt.css(e,n,s):wt.style(e,n,r,s)},e,a?r:void 0,a)}})}),wt.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(t,e){wt.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),wt.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),wt.fn.extend({bind:function(t,e,n){return this.on(t,null,e,n)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,n,i){return this.on(e,t,n,i)},undelegate:function(t,e,n){return 1===arguments.length?this.off(t,"**"):this.off(e,t||"**",n)}}),wt.proxy=function(t,e){var n,i,r;if("string"==typeof e&&(n=t[e],e=t,t=n),yt(t))return i=lt.call(arguments,2),r=function(){return t.apply(e||this,i.concat(lt.call(arguments)))},r.guid=t.guid=t.guid||wt.guid++,r},wt.holdReady=function(t){t?wt.readyWait++:wt.ready(!0)},wt.isArray=Array.isArray,wt.parseJSON=JSON.parse,wt.nodeName=o,wt.isFunction=yt,wt.isWindow=bt,wt.camelCase=p,wt.type=i,wt.now=Date.now,wt.isNumeric=function(t){var e=wt.type(t);return("number"===e||"string"===e)&&!isNaN(t-parseFloat(t))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return wt});var Qe=t.jQuery,Ze=t.$;return wt.noConflict=function(e){return t.$===wt&&(t.$=Ze),e&&t.jQuery===wt&&(t.jQuery=Qe),wt},e||(t.jQuery=t.$=wt),wt}),define("config",["jquery"],function(t){function e(t){"undefined"!=typeof Storage&&window.swish.config_hash&&localStorage.setItem(i,JSON.stringify({hash:window.swish.config_hash,config:t}))}var n,i="SWISHCONFIG";return n||(n=function(){if("undefined"!=typeof Storage&&window.swish.config_hash){var t;if((t=localStorage.getItem(i))&&(value=JSON.parse(t),value.hash==window.swish.config_hash))return value.config}}())||t.ajax("swish_config.json",{dataType:"json",async:!1,success:function(t){n=t,e(n)},error:function(){alert("Failed to fetch configuration from server")}}),n}),define("preferences",["jquery"],function(t){function e(){var t=localStorage.getItem("notagain")||"[]";try{data=JSON.parse(t),"object"!=typeof data&&(data=[])}catch(t){data=[]}return data}var n="undefined"!=typeof Storage,i={},r={},o={persistent:function(){return n},setNotAgain:function(t){if(n){var i=e();i.indexOf(t)<0&&(i.push(t),localStorage.setItem("notagain",JSON.stringify(i)))}},notagain:function(t){if(n){return e().indexOf(t)>=0}return!1},broadcast:function(e,n){var i;if(void 0==r.name)i=".swish-event-receiver";else{if(null==r.name)return;i=r.name}t(i).trigger("preference",{name:e,value:n})},setVal:function(t,e){n&&localStorage.setItem(t,JSON.stringify(e)),this.broadcast(t,e)},setDefault:function(t,e){i[t]=e},setInform:function(t,e){r[t]=e},getVal:function(t){if(n){var e;if(e=localStorage.getItem(t))return value=JSON.parse(e),value}return i[t]},setDocVal:function(t,e,n){var i=o.getVal(t)||{};i[e]=n,o.setVal(t,i)},getDocVal:function(t,e,n){var i=o.getVal(t)||{};return void 0===i[e]?n:i[e]}};return o}),define("links",["jquery","config","modal"],function(t,e,n){var i={PlDoc:function(e,n){if(e){var i=function(t){var e,n={};if((e=t.indexOf(":"))>0&&(n.module=t.substring(0,e),t=t.slice(e+1)),(e=t.indexOf("/"))>0&&(n.name=t.substring(0,e),"/"==t.charAt(e+1)?n.arity=parseInt(t.slice(e+2))+2:n.arity=parseInt(t.slice(e+1)),!isNaN(n.arity)))return n}(decodeURIComponent(e));if(i)return t(n.target).closest("#ajaxModal").modal("hide"),t(".swish-event-receiver").trigger("pldoc",i),n.preventDefault(),!0}return!1},runQueryLink:function(e,i){function r(t){for(var e=0;e<l.length;e++)if(l[e].toLowerCase()==t.toLowerCase())return l[e];h.push(t)}var o=e.closest(".notebook"),a=e.data("query"),s=o.find('.nb-cell[name="'+a+'"]');if(s){var l=t().prologEditor("variables",s.nbCell("text"),!0),c="",u={},h=[];t.each(e.data(),function(t,e){var n;"query"!==t&&(n=r(t))&&(""!=c&&(c+=", "),c+=n+" = ("+e+")")}),h.length>0&&n.feedback({owner:o,type:"warning",duration:3e3,html:"The variables <b>"+h.join(", ")+"</b> do not appear in query <b>"+a+"</b>"}),""!=c&&(u.bindings=c),s.nbCell("run",u)}},followLink:function(n){function r(){a=!0,n.preventDefault(),t(n.target).closest("#ajaxModal").modal("hide")}var o=t(n.target).closest("a"),a=!1;if(o.attr("href")){var s,l=e.http.locations.swish+"p/",c=e.http.locations.swish+"example/",u=o.attr("href");if(u.startsWith(l)&&!u.match(/#/))r(),file=u.slice(l.length),t(n.target).closest(".swish").swish("playFile",file);else if(o.hasClass("store"))r(),s.alert("File does not appear to come from gitty store?");else if(o.hasClass("file")||u.startsWith(c)&&!u.match(/#/))r(),t(n.target).closest(".swish").swish("playURL",{url:u});else if(o.hasClass("builtin")&&u.match(/predicate=/))a=i.PlDoc(u.split("predicate=").pop(),n);else if(u.match(/object=/))a=i.PlDoc(u.split("object=").pop(),n);else if(1==(s=t(n.target).closest("#ajaxModal")).length&&u.match(/#/)){var h,d=u.split("#").pop();1==(h=s.find("#"+d)).length&&(a=!0,n.preventDefault(),s.animate({scrollTop:h.position().top},2e3))}a||(n.preventDefault(),window.open(u,"_blank"))}else o.data("query")&&i.runQueryLink(o,n)}};return i}),define("utils",["jquery"],function(t){var e=[],n={htmlEncode:function(t){return t?document.createElement("a").appendChild(document.createTextNode(t)).parentNode.innerHTML:""},loadCSS:function(t){if(-1==e.indexOf(t)){var n=document.createElement("link");n.rel="stylesheet",n.type="text/css",n.media="screen",n.href=t,document.getElementsByTagName("head")[0].appendChild(n),e.push(t)}},generateUUID:function(){var t=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var n=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"==e?n:7&n|8).toString(16)})},flash:function(t){t.addClass("flash"),setTimeout(function(){t.removeClass("flash")},1500)},ago:function(t){var e=(new Date).getTime()/1e3-t;return e<20?"just now":e<60?"less then a minute ago":(e=Math.round(e/60))<120?e+" minutes ago":(e=Math.round(e/60))<48?e+" hours ago":(e=Math.round(e/24))<360?e+" days ago":(e=Math.round(e/365))+" years ago"},basename:function(t){return t?t.split("/").pop():null}};return"function"!=typeof String.prototype.startsWith&&(String.prototype.startsWith=function(t){return 0===this.lastIndexOf(t,0)}),n}),function(t){function e(){for(var t=document.createElement(arguments[0]),e=1;e<arguments.length;e++){var i=arguments[e];if(null!==i&&void 0!==i)if(1===i.nodeType)t.appendChild(i);else if(""===i||i&&i.charCodeAt&&i.substr||0===i||i&&i.toExponential&&i.toFixed)t.appendChild(document.createTextNode(i));else if(1===e&&"object"==typeof i){for(var r in i)if(i.hasOwnProperty(r)){var o=i[r];if(null!==o&&void 0!==o){r=r.toLowerCase(),r=n[r]||r;var a="o"===r.charAt(0)&&"n"===r.charAt(1);a?(void 0===i.href&&"onclick"===r&&t.setAttribute("href","#"),t[r]=o):"style"===r&&t.style.setAttribute?t.style.setAttribute("cssText",o):"className"===r||"htmlFor"===r?t[r]=o:t.setAttribute(r,o)}}}else if("[object Array]"===Object.prototype.toString.call(i))for(var s=0;s<i.length;s++){var l=i[s];1===l.nodeType&&t.appendChild(l)}}return t.appendTo=function(t){return 1===t.nodeType&&1===this.nodeType&&t.appendChild(this),this},t}var n={acceptcharset:"acceptCharset",accesskey:"accessKey",allowtransparency:"allowTransparency",bgcolor:"bgColor",cellpadding:"cellPadding",cellspacing:"cellSpacing",class:"className",classname:"className",colspan:"colSpan",csstext:"style",defaultchecked:"defaultChecked",defaultselected:"defaultSelected",defaultvalue:"defaultValue",for:"htmlFor",frameborder:"frameBorder",hspace:"hSpace",htmlfor:"htmlFor",longdesc:"longDesc",maxlength:"maxLength",marginwidth:"marginWidth",marginheight:"marginHeight",noresize:"noResize",noshade:"noShade",readonly:"readOnly",rowspan:"rowSpan",tabindex:"tabIndex",valign:"vAlign",vspace:"vSpace"};e.registerElement=function(t,n){e[t]||(e[t]=function(){var i=e("div",{class:t});return n.apply(i,Array.prototype.slice.call(arguments)),i})};for(var i=["acronym","applet","basefont","big","center","dir","font","frame","frameset","noframes","strike","tt","u","xmp"],r=["a","abbr","address","area","article","aside","audio","b","base","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","command","datalist","dd","del","details","dfn","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","keygen","kbd","label","legend","li","link","map","mark","menu","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","picture","param","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","ul","var","video","wbr"].concat(i),o=0;o<r.length;o++)e[r[o]]=function(t){return function(){return e.apply(this,[t].concat(Array.prototype.slice.call(arguments)))}}(r[o]);if("undefined"!=typeof module&&module.exports)module.exports=e;else{var a=t.$||{};a.el=e,t.$=a}}(this),define("laconic",["jquery"],function(){}),define("version",["jquery","config","utils","laconic"],function(t,e,n){!function(t){var i={_init:function(n){return n=n||{},this.each(function(){var i=t(this),r={};e.http.locations.versions&&(i.append(t.el.div({class:"version"},t.el.div({class:"v-swish"}),t.el.div({class:"v-changelog"},t.el.table()),t.el.div({class:"v-prolog"}))),i.version("update"),n.commit&&i.version("changelog",n)),i.data("version",r)})},update:function(){e.http.locations.versions&&(elem=this,t.get(e.http.locations.versions,function(e){if(!e.swish||!e.prolog)return void console.log(e);var n;n=elem.hasClass("v-compact")?t.el.a({title:"View recent changes"},e.swish.version):t.el.span(e.swish.version),elem.find(".v-swish").append(t.el.span(t.el.a({class:"v-product",href:"https://swish.swi-prolog.org"},"SWISH")," version ",n)),elem.find(".v-prolog").append(t.el.span("Running on ",t.el.a({class:"v-product",href:"http://www.swi-prolog.org/"},e.prolog.brand)," version "+e.prolog.version)),elem.hasClass("v-compact")&&t(n).on("click",function(t){
-if(elem.hasClass("v-compact"))return elem.version("versionDetails"),t.preventDefault(),!1})}))},versionDetails:function(){var t=this.closest(".modal-body");t&&(this.closest(".modal-content").find("h2").html("SWISH ChangeLog"),this.detach(),t.empty(),t.append(this),this.removeClass("v-compact"),this.version("changelog"))},changelog:function(n){var i=this;n=n||{};var r={};r.show=n.show||"all",n.commit?r.commit=n.commit:r.last=n.last||20,this.find(".v-changelog > table").html(""),t.get(e.http.locations.changelog,r,function(t){for(var e=0;e<t.changelog.length;e++)i.version("addChange",t.changelog[e],e)})},addChange:function(e,n){var i=t.el.td({class:"v-description",colspan:3});t(i).html(e.message);var r=n%2==0?"even":"odd";this.find(".v-changelog > table").append(t.el.tr({class:"v-change-header "+r},t.el.td({class:"v-author"},e.author),t.el.td({class:"v-commit"},e.commit.slice(0,7)),t.el.td({class:"v-date"},e.committer_date_relative)),t.el.tr({class:"v-change-body "+r},i))},checkForUpdates:function(){function i(t){var e={commit:t.commit,date:t.date};localStorage.setItem("last-version",JSON.stringify(e))}if(e.http.locations.versions){var r=localStorage.getItem("last-version");if(r&&(last=JSON.parse(r))&&last.commit){var o="SWISH updates since "+n.ago(last.date||0);t.get(e.http.locations.changes,{commit:last.commit},function(e){e.changes&&t("#swish-updates").css("display","inline-block").attr("title","SWISH has received "+e.changes+" updates\nClick for details").on("click",function(n){t(n.target).closest(".swish").swish("showUpdates",{title:o,commit:last.commit,show:"tagged"}),i(e),t("#swish-updates").hide()})})}else t.get(e.http.locations.changes,function(t){i(t)})}}};t.fn.version=function(e){return i[e]?i[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.version"):i._init.apply(this,arguments)}}(jQuery)}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";var e=jQuery.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||3<e[0])throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(),function(t){"use strict";t.fn.emulateTransitionEnd=function(e){var n=!1,i=this;return t(this).one("bsTransitionEnd",function(){n=!0}),setTimeout(function(){n||t(i).trigger(t.support.transition.end)},e),this},t(function(){t.support.transition=function(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(t){"use strict";var e='[data-dismiss="alert"]',n=function(n){t(n).on("click",e,this.close)};n.VERSION="3.4.1",n.TRANSITION_DURATION=150,n.prototype.close=function(e){function i(){a.detach().trigger("closed.bs.alert").remove()}var r=t(this),o=r.attr("data-target");o||(o=(o=r.attr("href"))&&o.replace(/.*(?=#[^\s]*$)/,"")),o="#"===o?[]:o;var a=t(document).find(o);e&&e.preventDefault(),a.length||(a=r.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(n.TRANSITION_DURATION):i())};var i=t.fn.alert;t.fn.alert=function(e){return this.each(function(){var i=t(this),r=i.data("bs.alert");r||i.data("bs.alert",r=new n(this)),"string"==typeof e&&r[e].call(i)})},t.fn.alert.Constructor=n,t.fn.alert.noConflict=function(){return t.fn.alert=i,this},t(document).on("click.bs.alert.data-api",e,n.prototype.close)}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.button"),o="object"==typeof e&&e;r||i.data("bs.button",r=new n(this,o)),"toggle"==e?r.toggle():e&&r.setState(e)})}var n=function(e,i){this.$element=t(e),this.options=t.extend({},n.DEFAULTS,i),this.isLoading=!1};n.VERSION="3.4.1",n.DEFAULTS={loadingText:"loading..."},n.prototype.setState=function(e){var n="disabled",i=this.$element,r=i.is("input")?"val":"html",o=i.data();e+="Text",null==o.resetText&&i.data("resetText",i[r]()),setTimeout(t.proxy(function(){i[r](null==o[e]?this.options[e]:o[e]),"loadingText"==e?(this.isLoading=!0,i.addClass(n).attr(n,n).prop(n,!0)):this.isLoading&&(this.isLoading=!1,i.removeClass(n).removeAttr(n).prop(n,!1))},this),0)},n.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var n=this.$element.find("input");"radio"==n.prop("type")?(n.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==n.prop("type")&&(n.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),n.prop("checked",this.$element.hasClass("active")),t&&n.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=e,t.fn.button.Constructor=n,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(n){var i=t(n.target).closest(".btn");e.call(i,"toggle"),t(n.target).is('input[type="radio"], input[type="checkbox"]')||(n.preventDefault(),i.is("input,button")?i.trigger("focus"):i.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.carousel"),o=t.extend({},n.DEFAULTS,i.data(),"object"==typeof e&&e),a="string"==typeof e?e:o.slide;r||i.data("bs.carousel",r=new n(this,o)),"number"==typeof e?r.to(e):a?r[a]():o.interval&&r.pause().cycle()})}var n=function(e,n){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};n.VERSION="3.4.1",n.TRANSITION_DURATION=600,n.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},n.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},n.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},n.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},n.prototype.getItemForDirection=function(t,e){var n=this.getItemIndex(e);if(("prev"==t&&0===n||"next"==t&&n==this.$items.length-1)&&!this.options.wrap)return e;var i=(n+("prev"==t?-1:1))%this.$items.length;return this.$items.eq(i)},n.prototype.to=function(t){var e=this,n=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):n==t?this.pause().cycle():this.slide(n<t?"next":"prev",this.$items.eq(t))},n.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},n.prototype.next=function(){if(!this.sliding)return this.slide("next")},n.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},n.prototype.slide=function(e,i){var r=this.$element.find(".item.active"),o=i||this.getItemForDirection(e,r),a=this.interval,s="next"==e?"left":"right",l=this;if(o.hasClass("active"))return this.sliding=!1;var c=o[0],u=t.Event("slide.bs.carousel",{relatedTarget:c,direction:s});if(this.$element.trigger(u),!u.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var h=t(this.$indicators.children()[this.getItemIndex(o)]);h&&h.addClass("active")}var d=t.Event("slid.bs.carousel",{relatedTarget:c,direction:s});return t.support.transition&&this.$element.hasClass("slide")?(o.addClass(e),"object"==typeof o&&o.length&&o[0].offsetWidth,r.addClass(s),o.addClass(s),r.one("bsTransitionEnd",function(){o.removeClass([e,s].join(" ")).addClass("active"),r.removeClass(["active",s].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(d)},0)}).emulateTransitionEnd(n.TRANSITION_DURATION)):(r.removeClass("active"),o.addClass("active"),this.sliding=!1,this.$element.trigger(d)),a&&this.cycle(),this}};var i=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=n,t.fn.carousel.noConflict=function(){return t.fn.carousel=i,this};var r=function(n){var i=t(this),r=i.attr("href");r&&(r=r.replace(/.*(?=#[^\s]+$)/,""));var o=i.attr("data-target")||r,a=t(document).find(o);if(a.hasClass("carousel")){var s=t.extend({},a.data(),i.data()),l=i.attr("data-slide-to");l&&(s.interval=!1),e.call(a,s),l&&a.data("bs.carousel").to(l),n.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",r).on("click.bs.carousel.data-api","[data-slide-to]",r),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var n=t(this);e.call(n,n.data())})})}(jQuery),function(t){"use strict";function e(e){var n,i=e.attr("data-target")||(n=e.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return t(document).find(i)}function n(e){return this.each(function(){var n=t(this),r=n.data("bs.collapse"),o=t.extend({},i.DEFAULTS,n.data(),"object"==typeof e&&e);!r&&o.toggle&&/show|hide/.test(e)&&(o.toggle=!1),r||n.data("bs.collapse",r=new i(this,o)),"string"==typeof e&&r[e]()})}var i=function(e,n){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,n),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};i.VERSION="3.4.1",i.TRANSITION_DURATION=350,i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,r=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(r&&r.length&&(e=r.data("bs.collapse"))&&e.transitioning)){var o=t.Event("show.bs.collapse");if(this.$element.trigger(o),!o.isDefaultPrevented()){r&&r.length&&(n.call(r,"hide"),e||r.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var s=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return s.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(s,this)).emulateTransitionEnd(i.TRANSITION_DURATION)[a](this.$element[0][l])}}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var r=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!t.support.transition)return r.call(this);this.$element[n](0).one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(i.TRANSITION_DURATION)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},i.prototype.getParent=function(){return t(document).find(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(n,i){var r=t(i);this.addAriaAndCollapsedClass(e(r),r)},this)).end()},i.prototype.addAriaAndCollapsedClass=function(t,e){var n=t.hasClass("in");t.attr("aria-expanded",n),e.toggleClass("collapsed",!n).attr("aria-expanded",n)};var r=t.fn.collapse;t.fn.collapse=n,t.fn.collapse.Constructor=i,t.fn.collapse.noConflict=function(){return t.fn.collapse=r,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(i){var r=t(this);r.attr("data-target")||i.preventDefault();var o=e(r),a=o.data("bs.collapse")?"toggle":r.data();n.call(o,a)})}(jQuery),function(t){"use strict";function e(e){var n=e.attr("data-target");n||(n=(n=e.attr("href"))&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var i="#"!==n?t(document).find(n):null;return i&&i.length?i:e.parent()}function n(n){n&&3===n.which||(t(".dropdown-backdrop").remove(),t(i).each(function(){var i=t(this),r=e(i),o={relatedTarget:this};r.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&t.contains(r[0],n.target)||(r.trigger(n=t.Event("hide.bs.dropdown",o)),n.isDefaultPrevented()||(i.attr("aria-expanded","false"),r.removeClass("open").trigger(t.Event("hidden.bs.dropdown",o)))))}))}var i='[data-toggle="dropdown"]',r=function(e){t(e).on("click.bs.dropdown",this.toggle)};r.VERSION="3.4.1",r.prototype.toggle=function(i){var r=t(this);if(!r.is(".disabled, :disabled")){var o=e(r),a=o.hasClass("open");if(n(),!a){"ontouchstart"in document.documentElement&&!o.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",n);var s={relatedTarget:this};if(o.trigger(i=t.Event("show.bs.dropdown",s)),i.isDefaultPrevented())return;r.trigger("focus").attr("aria-expanded","true"),o.toggleClass("open").trigger(t.Event("shown.bs.dropdown",s))}return!1}},r.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var r=t(this);if(n.preventDefault(),n.stopPropagation(),!r.is(".disabled, :disabled")){var o=e(r),a=o.hasClass("open");if(!a&&27!=n.which||a&&27==n.which)return 27==n.which&&o.find(i).trigger("focus"),r.trigger("click");var s=o.find(".dropdown-menu li:not(.disabled):visible a");if(s.length){var l=s.index(n.target);38==n.which&&0<l&&l--,40==n.which&&l<s.length-1&&l++,~l||(l=0),s.eq(l).trigger("focus")}}}};var o=t.fn.dropdown;t.fn.dropdown=function(e){return this.each(function(){var n=t(this),i=n.data("bs.dropdown");i||n.data("bs.dropdown",i=new r(this)),"string"==typeof e&&i[e].call(n)})},t.fn.dropdown.Constructor=r,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=o,this},t(document).on("click.bs.dropdown.data-api",n).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",i,r.prototype.toggle).on("keydown.bs.dropdown.data-api",i,r.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",r.prototype.keydown)}(jQuery),function(t){"use strict";function e(e,i){return this.each(function(){var r=t(this),o=r.data("bs.modal"),a=t.extend({},n.DEFAULTS,r.data(),"object"==typeof e&&e);o||r.data("bs.modal",o=new n(this,a)),"string"==typeof e?o[e](i):a.show&&o.show(i)})}var n=function(e,n){this.options=n,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.fixedContent=".navbar-fixed-top, .navbar-fixed-bottom",this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};n.VERSION="3.4.1",n.TRANSITION_DURATION=300,n.BACKDROP_TRANSITION_DURATION=150,n.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},n.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},n.prototype.show=function(e){var i=this,r=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(r),this.isShown||r.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){i.$element.one("mouseup.dismiss.bs.modal",function(e){t(e.target).is(i.$element)&&(i.ignoreBackdropClick=!0)})}),this.backdrop(function(){var r=t.support.transition&&i.$element.hasClass("fade");i.$element.parent().length||i.$element.appendTo(i.$body),i.$element.show().scrollTop(0),i.adjustDialog(),r&&i.$element[0].offsetWidth,i.$element.addClass("in"),i.enforceFocus();var o=t.Event("shown.bs.modal",{relatedTarget:e});r?i.$dialog.one("bsTransitionEnd",function(){i.$element.trigger("focus").trigger(o)}).emulateTransitionEnd(n.TRANSITION_DURATION):i.$element.trigger("focus").trigger(o)}))},n.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(n.TRANSITION_DURATION):this.hideModal())},n.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},n.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},n.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},n.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},n.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},n.prototype.backdrop=function(e){var i=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var o=t.support.transition&&r;if(this.$backdrop=t(document.createElement("div")).addClass("modal-backdrop "+r).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy(function(t){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;o?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var a=function(){i.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",a).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):a()}else e&&e()},n.prototype.handleUpdate=function(){this.adjustDialog()},n.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},n.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},n.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},n.prototype.setScrollbar=function(){var e=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"";var n=this.scrollbarWidth;this.bodyIsOverflowing&&(this.$body.css("padding-right",e+n),t(this.fixedContent).each(function(e,i){var r=i.style.paddingRight,o=t(i).css("padding-right");t(i).data("padding-right",r).css("padding-right",parseFloat(o)+n+"px")}))},n.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad),t(this.fixedContent).each(function(e,n){var i=t(n).data("padding-right");t(n).removeData("padding-right"),n.style.paddingRight=i||""})},n.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var i=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=n,t.fn.modal.noConflict=function(){return t.fn.modal=i,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(n){var i=t(this),r=i.attr("href"),o=i.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,""),a=t(document).find(o),s=a.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(r)&&r},a.data(),i.data());i.is("a")&&n.preventDefault(),a.one("show.bs.modal",function(t){t.isDefaultPrevented()||a.one("hidden.bs.modal",function(){i.is(":visible")&&i.trigger("focus")})}),e.call(a,s,this)})}(jQuery),function(t){"use strict";function e(e,n){var i=e.nodeName.toLowerCase();if(-1!==t.inArray(i,n))return-1===t.inArray(i,r)||Boolean(e.nodeValue.match(a)||e.nodeValue.match(s));for(var o=t(n).filter(function(t,e){return e instanceof RegExp}),l=0,c=o.length;l<c;l++)if(i.match(o[l]))return!0;return!1}function n(n,i,r){if(0===n.length)return n;if(r&&"function"==typeof r)return r(n);if(!document.implementation||!document.implementation.createHTMLDocument)return n;var o=document.implementation.createHTMLDocument("sanitization");o.body.innerHTML=n;for(var a=t.map(i,function(t,e){return e}),s=t(o.body).find("*"),l=0,c=s.length;l<c;l++){var u=s[l],h=u.nodeName.toLowerCase();if(-1!==t.inArray(h,a))for(var d=t.map(u.attributes,function(t){return t}),f=[].concat(i["*"]||[],i[h]||[]),p=0,g=d.length;p<g;p++)e(d[p],f)||u.removeAttribute(d[p].nodeName);else u.parentNode.removeChild(u)}return o.body.innerHTML}var i=["sanitize","whiteList","sanitizeFn"],r=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],o={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},a=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:\/?#]*(?:[\/?#]|$))/gi,s=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i,l=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",t,e)};l.VERSION="3.4.1",l.TRANSITION_DURATION=150,l.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:o},l.prototype.init=function(e,n,i){if(this.enabled=!0,this.type=e,this.$element=t(n),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&t(document).find(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var r=this.options.trigger.split(" "),o=r.length;o--;){var a=r[o];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var s="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(s+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},l.prototype.getDefaults=function(){return l.DEFAULTS},l.prototype.getOptions=function(e){var r=this.$element.data();for(var o in r)r.hasOwnProperty(o)&&-1!==t.inArray(o,i)&&delete r[o];return(e=t.extend({},this.getDefaults(),r,e)).delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e.sanitize&&(e.template=n(e.template,e.whiteList,e.sanitizeFn)),e},l.prototype.getDelegateOptions=function(){var e={},n=this.getDefaults();return this._options&&t.each(this._options,function(t,i){n[t]!=i&&(e[t]=i)}),e},l.prototype.enter=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusin"==e.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState)n.hoverState="in";else{if(clearTimeout(n.timeout),n.hoverState="in",!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout(function(){"in"==n.hoverState&&n.show()},n.options.delay.show)}},l.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},l.prototype.leave=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusout"==e.type?"focus":"hover"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState="out",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout(function(){"out"==n.hoverState&&n.hide()},n.options.delay.hide)}},l.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var n=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!n)return;var i=this,r=this.tip(),o=this.getUID(this.type);this.setContent(),r.attr("id",o),this.$element.attr("aria-describedby",o),this.options.animation&&r.addClass("fade");var a="function"==typeof this.options.placement?this.options.placement.call(this,r[0],this.$element[0]):this.options.placement,s=/\s?auto?\s?/i,c=s.test(a);c&&(a=a.replace(s,"")||"top"),r.detach().css({top:0,left:0,display:"block"}).addClass(a).data("bs."+this.type,this),this.options.container?r.appendTo(t(document).find(this.options.container)):r.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var u=this.getPosition(),h=r[0].offsetWidth,d=r[0].offsetHeight;if(c){var f=a,p=this.getPosition(this.$viewport);a="bottom"==a&&u.bottom+d>p.bottom?"top":"top"==a&&u.top-d<p.top?"bottom":"right"==a&&u.right+h>p.width?"left":"left"==a&&u.left-h<p.left?"right":a,r.removeClass(f).addClass(a)}var g=this.getCalculatedOffset(a,u,h,d);this.applyPlacement(g,a);var m=function(){var t=i.hoverState;i.$element.trigger("shown.bs."+i.type),i.hoverState=null,"out"==t&&i.leave(i)};t.support.transition&&this.$tip.hasClass("fade")?r.one("bsTransitionEnd",m).emulateTransitionEnd(l.TRANSITION_DURATION):m()}},l.prototype.applyPlacement=function(e,n){var i=this.tip(),r=i[0].offsetWidth,o=i[0].offsetHeight,a=parseInt(i.css("margin-top"),10),s=parseInt(i.css("margin-left"),10);isNaN(a)&&(a=0),isNaN(s)&&(s=0),e.top+=a,e.left+=s,t.offset.setOffset(i[0],t.extend({using:function(t){i.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),i.addClass("in");var l=i[0].offsetWidth,c=i[0].offsetHeight;"top"==n&&c!=o&&(e.top=e.top+o-c);var u=this.getViewportAdjustedDelta(n,e,l,c);u.left?e.left+=u.left:e.top+=u.top;var h=/top|bottom/.test(n),d=h?2*u.left-r+l:2*u.top-o+c,f=h?"offsetWidth":"offsetHeight";i.offset(e),this.replaceArrow(d,i[0][f],h)},l.prototype.replaceArrow=function(t,e,n){this.arrow().css(n?"left":"top",50*(1-t/e)+"%").css(n?"top":"left","")},l.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();this.options.html?(this.options.sanitize&&(e=n(e,this.options.whiteList,this.options.sanitizeFn)),t.find(".tooltip-inner").html(e)):t.find(".tooltip-inner").text(e),t.removeClass("fade in top bottom left right")},l.prototype.hide=function(e){function n(){"in"!=i.hoverState&&r.detach(),i.$element&&i.$element.removeAttr("aria-describedby").trigger("hidden.bs."+i.type),e&&e()}var i=this,r=t(this.$tip),o=t.Event("hide.bs."+this.type);if(this.$element.trigger(o),!o.isDefaultPrevented())return r.removeClass("in"),t.support.transition&&r.hasClass("fade")?r.one("bsTransitionEnd",n).emulateTransitionEnd(l.TRANSITION_DURATION):n(),this.hoverState=null,this},l.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},l.prototype.hasContent=function(){return this.getTitle()},l.prototype.getPosition=function(e){var n=(e=e||this.$element)[0],i="BODY"==n.tagName,r=n.getBoundingClientRect();null==r.width&&(r=t.extend({},r,{width:r.right-r.left,height:r.bottom-r.top}));var o=window.SVGElement&&n instanceof window.SVGElement,a=i?{top:0,left:0}:o?null:e.offset(),s={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},l=i?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},r,s,l,a)},l.prototype.getCalculatedOffset=function(t,e,n,i){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-n/2}:"top"==t?{top:e.top-i,left:e.left+e.width/2-n/2}:"left"==t?{top:e.top+e.height/2-i/2,left:e.left-n}:{top:e.top+e.height/2-i/2,left:e.left+e.width}},l.prototype.getViewportAdjustedDelta=function(t,e,n,i){var r={top:0,left:0};if(!this.$viewport)return r;var o=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var s=e.top-o-a.scroll,l=e.top+o-a.scroll+i;s<a.top?r.top=a.top-s:l>a.top+a.height&&(r.top=a.top+a.height-l)}else{var c=e.left-o,u=e.left+o+n;c<a.left?r.left=a.left-c:u>a.right&&(r.left=a.left+a.width-u)}return r},l.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},l.prototype.getUID=function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},l.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},l.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},l.prototype.enable=function(){this.enabled=!0},l.prototype.disable=function(){this.enabled=!1},l.prototype.toggleEnabled=function(){this.enabled=!this.enabled},
-l.prototype.toggle=function(e){var n=this;e&&((n=t(e.currentTarget).data("bs."+this.type))||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n))),e?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},l.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})},l.prototype.sanitizeHtml=function(t){return n(t,this.options.whiteList,this.options.sanitizeFn)};var c=t.fn.tooltip;t.fn.tooltip=function(e){return this.each(function(){var n=t(this),i=n.data("bs.tooltip"),r="object"==typeof e&&e;!i&&/destroy|hide/.test(e)||(i||n.data("bs.tooltip",i=new l(this,r)),"string"==typeof e&&i[e]())})},t.fn.tooltip.Constructor=l,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=c,this}}(jQuery),function(t){"use strict";var e=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");e.VERSION="3.4.1",e.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),((e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype)).constructor=e).prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),n=this.getContent();if(this.options.html){var i=typeof n;this.options.sanitize&&(e=this.sanitizeHtml(e),"string"===i&&(n=this.sanitizeHtml(n))),t.find(".popover-title").html(e),t.find(".popover-content").children().detach().end()["string"===i?"html":"append"](n)}else t.find(".popover-title").text(e),t.find(".popover-content").children().detach().end().text(n);t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},e.prototype.hasContent=function(){return this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var n=t.fn.popover;t.fn.popover=function(n){return this.each(function(){var i=t(this),r=i.data("bs.popover"),o="object"==typeof n&&n;!r&&/destroy|hide/.test(n)||(r||i.data("bs.popover",r=new e(this,o)),"string"==typeof n&&r[n]())})},t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=n,this}}(jQuery),function(t){"use strict";function e(n,i){this.$body=t(document.body),this.$scrollElement=t(t(n).is(document.body)?window:n),this.options=t.extend({},e.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each(function(){var i=t(this),r=i.data("bs.scrollspy"),o="object"==typeof n&&n;r||i.data("bs.scrollspy",r=new e(this,o)),"string"==typeof n&&r[n]()})}e.VERSION="3.4.1",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,n="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(n="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),r=e.data("target")||e.attr("href"),o=/^#./.test(r)&&t(r);return o&&o.length&&o.is(":visible")&&[[o[n]().top+i,r]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),i=this.options.offset+n-this.$scrollElement.height(),r=this.offsets,o=this.targets,a=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),i<=e)return a!=(t=o[o.length-1])&&this.activate(t);if(a&&e<r[0])return this.activeTarget=null,this.clear();for(t=r.length;t--;)a!=o[t]&&e>=r[t]&&(void 0===r[t+1]||e<r[t+1])&&this.activate(o[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var n=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',i=t(n).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var i=t.fn.scrollspy;t.fn.scrollspy=n,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=i,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);n.call(e,e.data())})})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.tab");r||i.data("bs.tab",r=new n(this)),"string"==typeof e&&r[e]()})}var n=function(e){this.element=t(e)};n.VERSION="3.4.1",n.TRANSITION_DURATION=150,n.prototype.show=function(){var e=this.element,n=e.closest("ul:not(.dropdown-menu)"),i=e.data("target");if(i||(i=(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var r=n.find(".active:last a"),o=t.Event("hide.bs.tab",{relatedTarget:e[0]}),a=t.Event("show.bs.tab",{relatedTarget:r[0]});if(r.trigger(o),e.trigger(a),!a.isDefaultPrevented()&&!o.isDefaultPrevented()){var s=t(document).find(i);this.activate(e.closest("li"),n),this.activate(s,s.parent(),function(){r.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:r[0]})})}}},n.prototype.activate=function(e,i,r){function o(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),s?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),r&&r()}var a=i.find("> .active"),s=r&&t.support.transition&&(a.length&&a.hasClass("fade")||!!i.find("> .fade").length);a.length&&s?a.one("bsTransitionEnd",o).emulateTransitionEnd(n.TRANSITION_DURATION):o(),a.removeClass("in")};var i=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=n,t.fn.tab.noConflict=function(){return t.fn.tab=i,this};var r=function(n){n.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',r).on("click.bs.tab.data-api",'[data-toggle="pill"]',r)}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.affix"),o="object"==typeof e&&e;r||i.data("bs.affix",r=new n(this,o)),"string"==typeof e&&r[e]()})}var n=function(e,i){this.options=t.extend({},n.DEFAULTS,i);var r=this.options.target===n.DEFAULTS.target?t(this.options.target):t(document).find(this.options.target);this.$target=r.on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};n.VERSION="3.4.1",n.RESET="affix affix-top affix-bottom",n.DEFAULTS={offset:0,target:window},n.prototype.getState=function(t,e,n,i){var r=this.$target.scrollTop(),o=this.$element.offset(),a=this.$target.height();if(null!=n&&"top"==this.affixed)return r<n&&"top";if("bottom"==this.affixed)return null!=n?!(r+this.unpin<=o.top)&&"bottom":!(r+a<=t-i)&&"bottom";var s=null==this.affixed,l=s?r:o.top;return null!=n&&r<=n?"top":null!=i&&t-i<=l+(s?a:e)&&"bottom"},n.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(n.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},n.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},n.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),i=this.options.offset,r=i.top,o=i.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof i&&(o=r=i),"function"==typeof r&&(r=i.top(this.$element)),"function"==typeof o&&(o=i.bottom(this.$element));var s=this.getState(a,e,r,o);if(this.affixed!=s){null!=this.unpin&&this.$element.css("top","");var l="affix"+(s?"-"+s:""),c=t.Event(l+".bs.affix");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=s,this.unpin="bottom"==s?this.getPinnedOffset():null,this.$element.removeClass(n.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==s&&this.$element.offset({top:a-e-o})}};var i=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=n,t.fn.affix.noConflict=function(){return t.fn.affix=i,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var n=t(this),i=n.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),e.call(n,i)})})}(jQuery),define("bootstrap",["jquery"],function(){}),define("modal",["jquery","config","preferences","links","form","version","laconic","bootstrap"],function(t,e,n,i,r){!function(t){function o(e){e.hasClass("modal")||(e=e.closest(".modal")),e.find("[data-notagain]").each(function(){if(t(this).prop("checked"))return n.setNotAgain(t(this).attr("data-notagain")),!1})}function a(){var e=t.el.button({type:"button",class:"close","data-dismiss":"modal"});return t(e).html("&times;").on("click",function(e){e.preventDefault(),o(t(e.target))}),e}function s(e){return e.notagain&&n.persistent()?t.el.label(t.el.input({type:"checkbox","data-notagain":e.notagain,name:"dismiss"})," Don't show again!"):""}function l(){t(this).find(".tm-input").each(function(){var e=t(this),n=e.data("prefilled"),i={};n&&(i.prefilled=n),e.tagsManager(i)})}var c={_init:function(e){return this.each(function(){var e=t(this);e.addClass("swish-event-receiver"),e.on("help",function(t,n){e.swishModal("showHelp",n)}),e.on("pldoc",function(t,n){e.swishModal("showPlDoc",n)}),e.on("form",function(t,n){e.swishModal("showForm",n)}),e.on("dialog",function(t,n){e.swishModal("show",n)}),e.on("error",function(t,n){e.swishModal("show",n)}),e.on("alert",function(t,n){e.swishModal("show",{title:"<span class='glyphicon glyphicon-warning-sign'></span>",body:n})}),e.on("ajaxError",function(t,n){e.swishModal("showAjaxError",n)}),e.on("feedback",function(t,n){e.swishModal("feedback",n)}),e.on("show",function(t,n){e.swishModal("show",n)}),e.on("server_form",function(t,n){e.swishModal("server_form",n)})})},showHelp:function(i){var r=this;i.notagain&&n.notagain(i.notagain)||t.ajax({url:e.http.locations.help+"/"+i.file,dataType:"html",success:function(e){var n=t("<div>");n.html(e),r.swishModal("show",t.extend({title:n.find("title").text(),body:n},i))}})},showForm:function(n){var i=this;t.ajax({url:e.http.locations.form+"/"+n.file,dataType:"html",success:function(e){var r=t("<div>");r.html(e),i.swishModal("show",t.extend({title:r.find("legend").text(),body:r},n))}})},showPlDoc:function(t){function n(t){var n="("+t.name+")/"+t.arity;return t.module&&(n=t.module+":"+n),e.http.locations.pldoc_doc_for+"?header=false&object="+encodeURIComponent(n)}function i(t,e){return t.parents("div.modal-dialog").addClass("swish-embedded-manual"),"<iframe class='swish-embedded-manual' onload='javascript:resizeIframe(this);' src='"+e+"'></iframe>"}var r={title:"SWI-Prolog manual",body:function(){return i(this,n(t))}};return this.swishModal("show",r)},show:function(e){var r=t.el.div({class:"modal-body"}),c=t.el.h2(),u=t.el.div({class:"modal-content"},t.el.div({class:"modal-header"},s(e),a(),c),r),h=t.el.div({class:"modal fade",id:"ajaxModal",tabindex:-1,role:"dialog"},t.el.div({class:"modal-dialog"},u));if(e.notagain&&n.persistent()&&t(u).append(t.el.div({class:"modal-footer"},s(e))),r=t(r),"function"==typeof e.body){var d=e.body.call(r);d&&r.append(d)}else r.html(e.body);return t(c).html(e.title),t(h).modal({show:!0}).on("click","a",i.followLink).on("shown.bs.modal",function(){l(),t(this).find(".swish-versions").version()}).on("hidden.bs.modal",function(){e.onclose&&e.onclose(),o(t(this)),t(this).remove()}),this},server_form:function(e){var n=t(this);return void 0===r&&(r=require("form")),this.swishModal("show",{title:e.title,body:function(){elem=t(this),t.ajax({url:e.url,data:e.data,success:function(t){elem.append(t)},error:function(t){n.swishModal("showAjaxError",t)}}),elem.on("click","button[data-action]",function(i){var o=t(i.target).closest("form"),a=r.serializeAsObject(o,!0),s=t(i.target).closest("button");return 0==s.data("form_data")?t.ajax({url:s.data("action"),success:function(t){return s.closest(".modal").modal("hide"),e.onreply&&e.onreply.call(s[0],t),i.preventDefault(),!1},error:function(t){n.swishModal("showAjaxError",t)}}):t.ajax({url:s.data("action"),data:JSON.stringify(a),dataType:"json",contentType:"application/json",type:"POST",success:function(t){if("success"==t.status)return s.closest(".modal").modal("hide"),e.onreply&&e.onreply.call(s[0],t),i.preventDefault(),!1;"error"==t.status?r.formError(o,t.error):alert("Updated failed: "+JSON.serializeAsObject(t))},error:function(t){n.swishModal("showAjaxError",t)}}),i.preventDefault(),!1})}})},showAjaxError:function(e){var n=t.el.div();t(n).html(e.responseText);var i=t(n).find("h1"),r=i.text()||"Server error";i.remove();var o={title:r,body:n};this.swishModal("show",o)},feedback:function(e){var n=t.el.div({class:"feedback "+e.type||""});return t(n).html(e.html),t(e.owner||"body").append(n),setTimeout(function(){t(n).hide(400,function(){t(n).remove()})},e.duration||1500),this}};window.resizeIframe=function(t){t.style.height=0,t.style.height=t.contentWindow.document.body.scrollHeight+20+"px"},t.fn.swishModal=function(e){return c[e]?c[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.swishModal"):c._init.apply(this,arguments)}}(jQuery);var o=1;return{ajaxError:function(e){t(".swish-event-receiver").trigger("ajaxError",e)},feedback:function(e){t(".swish-event-receiver").trigger("feedback",e)},alert:function(e){t(".swish-event-receiver").trigger("alert",e)},help:function(e){t(".swish-event-receiver").trigger("help",e)},show:function(e){t(".swish-event-receiver").trigger("show",e)},server_form:function(e){t(".swish-event-receiver").trigger("server_form",e)},notify:function(e,n){var i="ntf-"+(n.wsid||o++),r=t.el.div({class:"notification notify-arrow",id:i}),a=e.offset();if(t("body").append(r),n.html?t(r).html(n.html):n.dom&&t(r).append(n.dom),t(r).css({left:a.left+e.width()-t(r).outerWidth()+15,top:a.top+e.height()+12}).on("click",function(){t(r).remove()}).show(n.fadeIn||400),0!==n.time){var s=n.time;s||(s=e.hasClass("myself")?1e3:5e3),setTimeout(function(){t(r).hide(n.fadeOut||400,function(){t("#"+i).remove(),n.onremove&&n.onremove(n),e.chat("unnotify",n.wsid)})},s)}}}}),function(t){"use strict";var e={prefilled:null,CapitalizeFirstLetter:!1,preventSubmitOnEnter:!0,isClearInputOnEsc:!0,externalTagId:!1,prefillIdFieldName:"Id",prefillValueFieldName:"Value",AjaxPush:null,AjaxPushAllTags:null,AjaxPushParameters:null,delimiters:[9,13,44],backspace:[8],maxTags:0,hiddenTagListName:null,hiddenTagListId:null,replace:!0,output:null,deleteTagsOnBackspace:!0,tagsContainer:null,tagCloseIcon:"x",tagClass:"",validator:null,onlyTagList:!1,tagList:null,fillInputOnTagRemove:!1},n={pushTag:function(e,n,r){var o,a,s,l,c,u,h,d,f,p,g,m=t(this),v=m.data("opts"),y=m.data("tlis"),b=m.data("tlid");if((e=i.trimTag(e,v.delimiterChars))&&!(e.length<=0)){if(v.onlyTagList&&void 0!==v.tagList&&v.tagList){var x=v.tagList;t.each(x,function(t,e){x[t]=e.toLowerCase()});if(-1===t.inArray(e.toLowerCase(),x))return}if(v.CapitalizeFirstLetter&&e.length>1&&(e=e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()),v.validator&&!v.validator(e))return void m.trigger("tm:invalid",e);if(!(v.maxTags>0&&y.length>=v.maxTags)){if(o=!1,a=jQuery.map(y,function(t){return t.toLowerCase()}),c=t.inArray(e.toLowerCase(),a),-1!==c&&(o=!0),o)if(m.trigger("tm:duplicated",e),v.blinkClass)for(var w=0;w<6;++w)t("#"+m.data("tm_rndid")+"_"+b[c]).queue(function(e){t(this).toggleClass(v.blinkClass),e()}).delay(100);else t("#"+m.data("tm_rndid")+"_"+b[c]).stop().animate({backgroundColor:v.blinkBGColor_1},100).animate({backgroundColor:v.blinkBGColor_2},100).animate({backgroundColor:v.blinkBGColor_1},100).animate({backgroundColor:v.blinkBGColor_2},100).animate({backgroundColor:v.blinkBGColor_1},100).animate({backgroundColor:v.blinkBGColor_2},100);else!0===v.externalTagId?(void 0===r&&t.error("externalTagId is not passed for tag -"+e),l=r):(s=Math.max.apply(null,b),s=s===-1/0?0:s,l=++s),n||m.trigger("tm:pushing",[e,l]),y.push(e),b.push(l),n||null!==v.AjaxPush&&null==v.AjaxPushAllTags&&-1===t.inArray(e,v.prefilled)&&t.post(v.AjaxPush,t.extend({tag:e},v.AjaxPushParameters)),u=m.data("tm_rndid")+"_"+l,h=m.data("tm_rndid")+"_Remover_"+l,d=t("<span/>").text(e).html(),f='<span class="'+i.tagClasses.call(m)+'" id="'+u+'">',f+="<span>"+d+"</span>",f+='<a href="#" class="tm-tag-remove" id="'+h+'" TagIdToRemove="'+l+'">',f+=v.tagCloseIcon+"</a></span> ",p=t(f),null!==v.tagsContainer?t(v.tagsContainer).append(p):b.length>1?(g=m.siblings("#"+m.data("tm_rndid")+"_"+b[b.length-2]),g.after(p)):m.before(p),p.find("#"+h).on("click",m,function(e){e.preventDefault();var n=parseInt(t(this).attr("TagIdToRemove"));i.spliceTag.call(m,n,e.data)}),i.refreshHiddenTagList.call(m),n||m.trigger("tm:pushed",[e,l]),i.showOrHide.call(m);m.val("")}}},popTag:function(){var e,n,r=t(this),o=r.data("tlis"),a=r.data("tlid");a.length>0&&(e=a.pop(),n=o[o.length-1],r.trigger("tm:popping",[n,e]),o.pop(),t("#"+r.data("tm_rndid")+"_"+e).remove(),i.refreshHiddenTagList.call(r),r.trigger("tm:popped",[n,e]))},empty:function(){for(var e,n=t(this),r=n.data("tlis"),o=n.data("tlid");o.length>0;)e=o.pop(),r.pop(),t("#"+n.data("tm_rndid")+"_"+e).remove(),i.refreshHiddenTagList.call(n);n.trigger("tm:emptied",null),i.showOrHide.call(n)},tags:function(){return this.data("tlis")}},i={showOrHide:function(){var t=this,e=t.data("opts"),n=t.data("tlis");e.maxTags>0&&n.length<e.maxTags&&(t.show(),t.trigger("tm:show")),e.maxTags>0&&n.length>=e.maxTags&&(t.hide(),t.trigger("tm:hide"))},tagClasses:function(){var e,n=t(this),i=n.data("opts"),r=i.tagBaseClass,o=i.inputBaseClass;return e=r,n.attr("class")&&t.each(n.attr("class").split(" "),function(t,n){-1!==n.indexOf(o+"-")&&(e+=" "+r+n.substring(o.length))}),e+=i.tagClass?" "+i.tagClass:""},trimTag:function(e,n){var i;for(e=t.trim(e),i=0;i<e.length&&-1===t.inArray(e.charCodeAt(i),n);i++);return e.substring(0,i)},refreshHiddenTagList:function(){var e=t(this),n=e.data("tlis"),i=e.data("lhiddenTagList");i&&t(i).val(n.join(e.data("opts").baseDelimiter)).change(),e.trigger("tm:refresh",n.join(e.data("opts").baseDelimiter))},killEvent:function(t){t.cancelBubble=!0,t.returnValue=!1,t.stopPropagation(),t.preventDefault()},keyInArray:function(e,n){return-1!==t.inArray(e.which,n)},applyDelimiter:function(e){var i=t(this);n.pushTag.call(i,t(this).val()),e.preventDefault()},prefill:function(e){var i=t(this),r=i.data("opts");t.each(e,function(t,e){!0===r.externalTagId?n.pushTag.call(i,e[r.prefillValueFieldName],!0,e[r.prefillIdFieldName]):n.pushTag.call(i,e,!0)})},pushAllTags:function(e,n){var i=t(this),r=i.data("opts"),o=i.data("tlis");r.AjaxPushAllTags&&("tm:pushed"===e.type&&-1!==t.inArray(n,r.prefilled)||t.post(r.AjaxPush,t.extend({tags:o.join(r.baseDelimiter)},r.AjaxPushParameters)))},spliceTag:function(e){var n,r=this,o=r.data("tlis"),a=r.data("tlid"),s=t.inArray(e,a);-1!==s&&(n=o[s],r.trigger("tm:splicing",[n,e]),t("#"+r.data("tm_rndid")+"_"+e).remove(),o.splice(s,1),a.splice(s,1),i.refreshHiddenTagList.call(r),r.trigger("tm:spliced",[n,e])),i.showOrHide.call(r)},init:function(r){var o,a,s=t.extend({},e,r);return s.hiddenTagListName=null===s.hiddenTagListName?"hidden-"+this.attr("name"):s.hiddenTagListName,o=s.delimeters||s.delimiters,a=[9,13,17,18,19,37,38,39,40],s.delimiterChars=[],s.delimiterKeys=[],t.each(o,function(e,n){-1!==t.inArray(n,a)?s.delimiterKeys.push(n):s.delimiterChars.push(n)}),s.baseDelimiter=String.fromCharCode(s.delimiterChars[0]||44),s.tagBaseClass="tm-tag",s.inputBaseClass="tm-input",t.isFunction(s.validator)||(s.validator=null),this.each(function(){var e=t(this),r="",o="",a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";if(e.data("tagManager"))return!1;e.data("tagManager",!0);for(var l=0;l<5;l++)o+=a.charAt(Math.floor(Math.random()*a.length));if(e.data("tm_rndid",o),e.data("opts",s).data("tlis",[]).data("tlid",[]),null===s.output?(r=t("<input/>",{type:"hidden",name:s.hiddenTagListName}),e.after(r),e.data("lhiddenTagList",r)):e.data("lhiddenTagList",t(s.output)),s.AjaxPushAllTags&&(e.on("tm:spliced",i.pushAllTags),e.on("tm:popped",i.pushAllTags),e.on("tm:pushed",i.pushAllTags)),e.on("focus keypress",function(e){t(this).popover&&t(this).popover("hide")}),s.isClearInputOnEsc&&e.on("keyup",function(e){27===e.which&&(t(this).val(""),i.killEvent(e))}),e.on("keypress",function(t){i.keyInArray(t,s.delimiterChars)&&i.applyDelimiter.call(e,t)}),e.on("keydown",function(t){13===t.which&&s.preventSubmitOnEnter&&i.killEvent(t),i.keyInArray(t,s.delimiterKeys)&&i.applyDelimiter.call(e,t)}),s.deleteTagsOnBackspace&&e.on("keydown",function(r){i.keyInArray(r,s.backspace)&&t(this).val().length<=0&&(n.popTag.call(e),i.killEvent(r))}),s.fillInputOnTagRemove&&e.on("tm:popped",function(e,n){t(this).val(n)}),e.change(function(t){/webkit/.test(navigator.userAgent.toLowerCase())||e.focus(),i.killEvent(t)}),null!==s.prefilled)"object"==typeof s.prefilled?i.prefill.call(e,s.prefilled):"string"==typeof s.prefilled?i.prefill.call(e,s.prefilled.split(s.baseDelimiter)):"function"==typeof s.prefilled&&i.prefill.call(e,s.prefilled());else if(null!==s.output){if(t(s.output)&&t(s.output).val()){t(s.output)}i.prefill.call(e,t(s.output).val().split(s.baseDelimiter))}}),this}};t.fn.tagsManager=function(e){var r=t(this);return 0 in this?n[e]?n[e].apply(r,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?(t.error("Method "+e+" does not exist."),!1):i.init.apply(this,arguments):this}}(jQuery),define("tagmanager",["jquery"],function(){}),define("form",["jquery","config","modal","laconic","tagmanager"],function(t,e,n){function i(t){return void 0===t&&(t=u),"col-xs-"+(12-t)}function r(e,n,i){return i=i||u,t.el.label({class:"control-label col-xs-"+i,for:e},n)}function o(e,n){var i={name:e,type:"checkbox"};return n=n||{},n.checked&&(i.checked="checked"),n.title&&(i.title=n.title),t.el.input(i)}function a(e,n){var i={name:e,type:"text",class:"form-control"};return n=n||{},n.placeholder&&(i.placeholder=n.placeholder),n.title&&(i.title=n.title),n.value&&(i.value=n.value),n.disabled&&(i.disabled=n.disabled),n.readonly&&(i.readonly=n.readonly),n.type&&(i.type=n.type),t.el.input(i)}function s(e,n,i){var r={name:e,type:"text",class:"tm-input tag-list"};n&&(r.placeholder=n);var o=t.el.input(r);return i&&t(o).data("prefilled",i),o}function l(e,n){var i={name:e,class:"form-control"};return n=n||{},n.placeholder&&(i.placeholder=n.placeholder),t.el.textarea(i,n.value||"")}function c(e,n,i){var r=t(t.el.select({class:"form-control",name:e}));i=i||{};for(var o=0;o<n.length;o++)!function(e){if("string"==typeof e)e==i.value?r.append(t.el.option({selected:"selected"},e)):r.append(t.el.option(e));else{var n={value:e.value};e.value==i.value&&(n.selected="selected"),r.append(t.el.option(n,e.label))}}(n[o]);return r[0]}var u=3,h={serializeAsObject:function(e,n){var i=e.serializeArray(),r=[],o={};e.find("div.checkboxes.array").each(function(){var e=t(this),n=[];e.find("input:checked").each(function(){var e=t(this).attr("name");n.push(e)}),e.find("input").each(function(){var e=t(this).attr("name");r.push(e)}),o[e.attr("name")]=n});for(var a=0;a<i.length;a++){var s,l=i[a].name,c=i[a].value,u=e.find('[name="'+l+'"]'),h=u.prop("type");(s=u.data("json-value"))?o[l]=s:""==c&&1!=n||("hidden"==h&&0==l.indexOf("hidden-")?(l=l.slice("hidden-".length),void 0==o[l]?o[l]=c.split(","):o[l]=c.split(",").concat(o[l])):"text"==h&&u.hasClass("tag-list")?""!=c&&(void 0!==o[l]?o[l].push(c):o[l]=[c]):"number"==h?o[l]=parseInt(c):"checkbox"==h?-1==r.indexOf(l)&&(o[l]="on"==c):o[l]=c)}return e.find("[type=checkbox]").each(function(){var e=t(this),n=e.prop("name");1!=e.prop("disabled")&&void 0===o[n]&&-1==r.indexOf(n)&&(o[n]=!1)}),o},formError:function(t,e){if(t.find(".has-error").removeClass("has-error"),t.find(".help-block.with-errors").remove(),e)if("form_error"==e.code||"input_error"==e.code){errors=e.data.split("\n");for(var i=0;i<errors.length;i++){var r=errors[i].split(/:\s*(.*)?/);h.fieldError(t,r[0],r[1])}}else n.alert(e.data)},fieldError:function(e,n,i){var r=e.find("input[name="+n+"]");if(r.length>0){var o=r.closest(".form-group");r.parent().hasClass("input-group")&&(r=r.parent()),o.addClass("has-error"),r.after(t.el.p({class:"help-block with-errors"},i))}else alert("Missing value for "+n)},showDialog:function(e){t(".swish-event-receiver").trigger("dialog",e)},formBroadcast:function(e,n){t(".swish-event-receiver").trigger(e,n)},dyn_clear:function(e,n){e.find('.has-clear input[type="text"]').on("input propertychange",function(){var e=t(this),n=Boolean(e.val());e.siblings(".form-control-clear").toggleClass("hidden",!n)}).trigger("propertychange"),e.find(".form-control-clear").click(function(){var e=t(this).siblings('input[type="text"]');e.val("").trigger("propertychange").focus(),n&&n.call(e)})},fields:{fileName:function(n,s,l,c){var u,h,d,f="(leave empty for generated random name)",p=e.swish.community_examples&&void 0!=l;u=p?"Public | Example | name":"Public | name";var g=t.el.div({class:"form-group"},r("name",u),t.el.div({class:i()},t.el.div({class:"input-group"},t.el.span({class:"input-group-addon",title:"If checked, other users can find this program"},o("public",{checked:s})),p?t.el.span({class:"input-group-addon",title:"If checked, add to examples menu"},o("example",{checked:l})):void 0,d=a("name",{placeholder:"Name "+f,title:"Public name of your program",value:n,disabled:c}),n?h=t.el.span({class:"input-group-btn"},t.el.button({class:"btn btn-success",type:"button"},"Fork")):void 0)));return h&&t(h).on("click",function(){var e=t(d).closest("form").find(".btn.btn-primary");t(d).attr("placeholder","Fork as "+f),t(d).val(""),e.text(e.text().replace("Update","Fork"))}),g},title:function(e){return t.el.div({class:"form-group"},r("title","Title"),t.el.div({class:i()},a("title",{placeholder:"Descriptive title",value:e})))},author:function(e,n){var o={placeholder:"Your name",value:e};return e&&n&&(o.readonly=!0,o.title="Verified author name"),t.el.div({class:"form-group"},r("author","Author"),t.el.div({class:i()},a("author",o)))},link:function(e){var n={readonly:!0,title:"Permalink",value:e};return t.el.div({class:"form-group"},r("link","Link"),t.el.div({class:i()},a("link",n)))},date:function(e,n,o){return o=o||r,t.el.div({class:"form-group"},r(o,n),t.el.div({class:i()},a(o,{disabled:!0,value:new Date(1e3*e).toLocaleString()})))},description:function(e){return t.el.div({class:"form-group"},r("description","Description"),t.el.div({class:i()},l("description",{value:e})))},commit_message:function(e){return t.el.div({class:"form-group"},r("commit_message","Changes"),t.el.div({class:i()},l("commit_message",{value:e,placeholder:"Describe your changes here"})))},description:function(e){return t.el.div({class:"form-group"},r("description","Description"),t.el.div({class:i()},l("description",{value:e,placeholder:"Description"})))},tags:function(e){return t.el.div({class:"form-group"},r("tags","Tags"),t.el.div({class:i()},s("tags","Tags help finding this code",e)))},modify:function(t,e){function n(n,r){i.push({name:n,label:r,value:-1!=t.indexOf(n),readonly:!e})}var i=[],r={name:"modify",label:"Can save new version",type:"array"};return n("any","Anyone"),n("login","Logged in users"),n("owner","Only me"),r.title=e?"Specify who can save an updated version of this file":"Only logged in users and owners can set permissions",h.fields.checkboxes(i,r)},follow:function(t){return h.fields.checkboxes([{name:"follow",label:"Follow this document",value:!!t,readonly:!t}],{name:"options",label:"",title:"Notify about activity (updates, chat)\nRequires being logged in with valid email"})},projection:function(e){return t.el.div({class:"form-group"},r("projection","Projection"),t.el.div({class:i()},a("projection",{placeholder:"Columns",value:e})))},csvFormat:function(e,n){return e=e||["prolog"],n=n||e[0],1==e.length?t.el.input({type:"hidden",name:"format",value:e[0]}):t.el.div({class:"form-group"},r("format","Format"),t.el.div({class:i()},c("format",e,{value:n})))},limit:function(e,n){return t.el.div({class:"form-group"},r("name","Distinct | limit"),t.el.div({class:i()},t.el.div({class:"input-group"},t.el.span({class:"input-group-addon",title:"If checked only return distinct results"},o("distinct",{checked:n})),a("limit",{placeholder:"Maximum result count (blank for unlimited)",title:"Limit results",value:e}))))},checkboxes:function(e,n){var i;n=t.extend({name:"options",label:"Options",col:u},n||{});var o={class:"checkboxes col-xs-"+(12-n.col),name:n.name};n.title&&(o.title=n.title),n.type&&(o.class+=" "+n.type);for(var a=t.el.div({class:"form-group"},r(n.name,n.label,n.col),i=t.el.div(o)),s=0;s<e.length;s++){var l=e[s],c={type:"checkbox",name:l.name,autocomplete:"false"};l.value&&(c.checked="checked"),l.readonly&&(c.disabled="disabled"),t(i).append(t.el.label({class:"checkbox-inline"},t.el.input(c),l.label))}return a},chunk:function(e){return t.el.div({class:"form-group"},r("count","Initial solutions",3),t.el.div({class:"col-xs-9"},t.el.div({class:"input-group"},a("chunk",{title:"Initial number of solutions",type:"number",value:e}))))},name:function(e,n){return n=n||3,t.el.div({class:"form-group"},r("name","Name",n),t.el.div({class:"col-xs-"+(12-n)},a("name",{placeholder:"Name",value:e})))},filename:function(e,n){return n=n||3,t.el.div({class:"form-group"},r("filename","File name",n),t.el.div({class:"col-xs-"+(12-n)},a("filename",{placeholder:"File name",value:e})))},hidden:function(e,n){if(void 0!==n)return t.el.input({type:"hidden",name:e,value:n})},buttons:function(e){e=e||{};var n=e.label||"Save program",i=e.offset||u,r=t.el.button({name:"save",class:"btn btn-primary"},n);return t(r).on("click",function(n){var i=t(n.target).parents("form")[0],r=h.serializeAsObject(t(i));return e.action(n,r),t(n.target).parents(".modal").modal("hide"),n.preventDefault(),!1}),t.el.div({class:"form-group"},t.el.div({class:"col-xs-offset-"+i+" col-xs-"+(12-i)},r,t.el.button({name:"cancel",class:"btn btn-danger","data-dismiss":"modal"},"Cancel")))},radio:function(e,n,i){var r=t.el.div({class:"btn-group","data-toggle":"buttons"});i=i||"radio";for(var o=0;o<n.length;o++){var a="btn btn-default btn-xs";n[o].active&&(a+=" active");var s={type:i,name:e,autocomplete:"off",value:n[o].value},l={class:a};n[o].title&&(l.title=n[o].title),t(r).append(t.el.label(l,t.el.input(s),n[o].label))}return r}},widgets:{glyphIcon:function(e){return t.el.span({class:"glyphicon glyphicon-"+e})},typeIcon:function(e){return t.el.span({class:"dropdown-icon type-icon "+e})},glyphIconButton:function(e,n){var i={class:"btn",type:"button"};return n.action&&(i["data-action"]=n.action),n.title&&(i.title=n.title),n.class&&(i.class+=" "+n.class),t.el.button(i,h.widgets.glyphIcon(e))},dropdownButton:function(e,n){n||(n={});var i=n.divClass,r=n.ulClass,o=t.el.div({
-class:"btn-group dropdown"+(i?" "+i:"")},t.el.button({class:"dropdown-toggle","data-toggle":"dropdown"},e),t.el.ul({class:"dropdown-menu"+(r?" "+r:"")}));return n.actions&&h.widgets.populateMenu(t(o),n.client,n.actions),o},populateMenu:function(e,n,i){function r(e,i){var r=t(i).data("action");r&&r.call(n,i)}var o=e.find(".dropdown-menu"),a=o.data("menu")||{};for(var s in i)i.hasOwnProperty(s)&&function(e,n){if(void 0!==n)if(0==e.indexOf("--"))o.append(t.el.li({class:"divider"}));else{var i=t.el.a(e);t(i).data("action",n),o.append(t.el.li(i))}}(s,i[s]);return a.bound||(a.bound=!0,o.on("click","a",function(t){r(t,this)})),o.data("menu",a),e}}};return h}),define("history",["jquery","preferences","form","utils"],function(t,e,n,i){var r={push:function(t){if(window.location.pathname!=t.url){var e={location:t.url,reason:t.reason};window.history.pushState(e,"",t.url),document.title="SWISH -- "+(t.url?i.basename(t.url):"SWI-Prolog for SHaring")}},pop:function(t){},recentMaxLength:10,addRecent:function(t){for(var n=e.getVal("recentDocuments")||[],i=0;i<n.length;i++)if(function(t,e){return t.type==e.type&&t.id==e.id}(t,n[i])){n.splice(i,1);break}for(;n.length+1>r.recentMaxLength;)n.pop();n.splice(0,0,t),e.setVal("recentDocuments",n)},openRecent:function(t,e){return r.openRecent[e.st_type](t,e)},updateRecentUL:function(){var i=t(this),r=e.getVal("recentDocuments")||[];i.html("");for(var o=0;o<r.length;o++){var a=r[o];if(a.id){var s=t.el.a(n.widgets.typeIcon(a.id.split(".").pop()),a.label||a.id);t(s).data("document",a),i.append(t.el.li(s))}}}};return r.openRecent.gitty=function(e,n){t(e.target).parents(".swish").swish("playFile",n.id)},window.onpopstate=r.pop,r}),define("svgavatar",["jquery","laconic"],function(){!function(t){var e={_init:function(e){return this.each(function(){var e=t(this),n={};e.data("svgavatar",n)})},setAVappearanceByUserID:function(e){return t(this).each(function(){var n=t(this),i=2097151&e;n.svgavatar("selectAppearance","hair",7&i),n.svgavatar("setFill","hair",["#000000","#CC4400","#FFFF22","#9f220B"][i>>3&3]),n.svgavatar("selectAppearance","body",i>>5&3),n.svgavatar("setFill","body",["#95D155","#19A6BA","#F03C9B","#0B061F"][i>>7&3]),n.svgavatar("selectAppearance","eyes",i>>9&7),n.svgavatar("selectAppearance","nose",i>>11&3),n.svgavatar("selectAppearance","mouth",i>>13&7)})},selectAppearance:function(e,n){t(this).find("#"+e+" g").css("display","none"),t(this).find("#"+e+" g:nth-child("+n+")").css("display","inherit")},setFill:function(e,n){return t(this).each(function(){t(this).find("#"+e+" [fill]").attr("fill",n)})}};t.fn.svgavatar=function(n){return e[n]?e[n].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof n&&n?void t.error("Method "+n+" does not exist on jQuery.svgavatar"):e._init.apply(this,arguments)}}(jQuery)}),define("chat",["jquery","config","preferences","form","modal","utils","svgavatar"],function(t,e,n,i,r,o){function a(e){var n;if(e.avatar){var i=/(.*\.svg)#(\d+)$/.exec(e.avatar);if(i&&i[2]){var o=parseInt(i[2],10),a=i[1];n=t.el.span({class:"avatar svg"}),s[a]?(t(n).svg_images[a],t(n).svgavatar("setAVappearanceByUserID",o)):t.ajax({url:e.avatar,type:"GET",dataType:"text",success:function(e){t(n).html(e),s[a]=e,t(n).svgavatar("setAVappearanceByUserID",o)},error:function(t){r.ajaxError(t)}})}else n=t.el.img({class:"avatar",src:e.avatar})}else n=t.el.span({class:"avatar glyphicon glyphicon-user"});return t.el.div({class:"avatar-container"},n)}!function(t){function s(e,r){r=r||{};var o,s,l=r.name;l||"self"!=r.role||(l="Me"),l||(l=e);var c=t.el.li({class:"dropdown user",id:e,title:l},s=t.el.a({class:"dropdown-toggle avatar","data-toggle":"dropdown"},a(r)),o=t.el.ul({class:"dropdown-menu pull-right",title:""}));if("self"==r.role){t(s).append(t.el.b({class:"caret"}));var u=t.el.input({type:"text",placeholder:"Nick name",value:r.name||"",title:"Nick name"});o.append(t.el.li(u)),t(u).keypress(function(e){if(13==e.which){var i=t(u).val().trim();""!=i&&(t("#chat").trigger("send",{type:"set-nick-name",name:i}),n.setVal("nick-name",i)),t(u).closest(".dropdown.open").removeClass("open")}}),i.widgets.populateMenu(t(c),t("#chat"),{}),o.append(t.el.li({class:"divider"}))}return c}function l(){return(new Date).getTime()}var c=1e4,u=null,h={_init:function(n){return this.each(function(){var n=t(this),i={};n.data("chat",i),n.on("click",function(e){var i=t(e.target).closest("li.user");1==i.length&&n.chat("unnotify",i.attr("id"))}),n.on("send",function(t,e){n.chat("send",e)}),t(window).bind("beforeunload",function(){n.chat("disconnect")}),e.swish.chat&&n.chat("connect")})},connect:function(){function t(t,i){var r=n.getVal(i);r&&("anon-avatar"==i&&(r=-1==r.indexOf("#")?e.http.locations.avatar+r.split("/").pop():e.http.locations.swish+"icons/"+r.split("/").pop()),o+=a+t+"="+encodeURIComponent(r),a="&")}var i=this,r=this.data("chat"),o=window.location.host+e.http.locations.swish_chat,a="?",s=window.location.protocol.replace("http","ws");if(r.connection&&3!=r.connection.readyState)return this;t("avatar","anon-avatar"),t("nickname","nick-name"),r.reconnect&&(o+=a+"reconnect="+encodeURIComponent(r.reconnect),a="&");try{r.connection=new WebSocket(s+"//"+o,["v1.chat.swish.swi-prolog.org"])}catch(t){return void i.chat("userCount",void 0)}r.connection.onerror=function(t){i.chat("userCount",void 0)},r.connection.onclose=function(t){null==u?(c*=2)>3e5&&(c=3e5):l()-u>3e5?c=1e4:(c*=2)>3e5&&(c=3e5),setTimeout(function(){i.chat("connect")},c)},r.connection.onmessage=function(t){var e=JSON.parse(t.data);e.origin=t.origin,e.type?i.chat(e.type,e):console.log(t)},r.connection.onopen=function(){}},empty_queue:function(){for(var t=this.data("chat");t.queue&&t.queue.length>0&&1==t.connection.readyState;){var e=t.queue.shift();t.connection.send(e)}},disconnect:function(){var t=this.data("chat");return t.connection&&(this.chat("send",{type:"unload"}),t.connection.onclose=function(){},t.connection.close(),t.connection=void 0),this},send:function(t){var e=this.data("chat");if(e&&e.connection){var n=JSON.stringify(t);1!=e.connection.readyState?(e.queue?e.queue.push(n):e.queue=[n],this.chat("connect")):e.connection.send(n)}return this},subscribe:function(t,e){var n={type:"subscribe",channel:t};e&&(n.sub_channel=e),this.chat("send",n)},unsubscribe:function(t,e){var n={type:"unsubscribe",channel:t};sub_channel&&(n.sub_channel=sub_channel),this.chat("send",n)},welcome:function(e){var i=this.data("chat");i.wsid&&i.wsid!=e.wsid&&this.html(""),i.wsid=e.wsid,i.reconnect=e.reconnect,e.avatar&&"generated"==e.avatar_source&&n.setVal("anon-avatar",e.avatar),e.role="self";var r=this.chat("addUser",e);t(r).addClass("myself"),this.chat("userCount",e.visitors),u=l(),e.check_login?t("#login").login("update","check"):t(".sourcelist").trigger("login"),t(".storage").storage("chat_status"),this.chat("empty_queue")},userCount:function(e){var n=t("#user-count");void 0==e?n.parent().hide():(n.parent().show(),n.text(e))},gazers:function(t){if(t.gazers)for(var e=0;e<t.gazers.length;e++){var n=t.gazers[e];this.chat("addUser",n),n.file&&this.chat("addUserFile",n.wsid,n.file)}},profile:function(e){var i=this.data("chat"),r=t("#"+e.wsid);r.children("a").html("").append(a(e)),e.avatar&&(t("*[data-userid="+e.wsid+"] img.avatar").attr("src",e.avatar),"generated"==e.avatar_source&&n.setVal("anon-avatar",e.avatar)),e.name&&(r.prop("title",e.name),"set-nick-name"==e.reason&&(e.html="Named <i>"+o.htmlEncode(e.name)+"</i>",this.chat("notifyUser",e))),i.wsid==e.wsid&&t(".sourcelist").trigger("login")},rejoined:function(e){var n=t("#"+e.wsid);this.chat("lost",n,!1),e.visitors&&this.chat("userCount",e.visitors)},joined:function(t){t.visitors&&this.chat("userCount",t.visitors)},session_closed:function(){t("#login").login("update","session-closed")},notify:function(t){this.chat("notifyUser",t)},"chat-message":function(n){var i=t("div.chatroom").chatroom("rooms",n.docid);t(".storage").storage("chat_message",n),n.docid=="gitty:"+e.swish.hangout&&t("#broadcast-bell").chatbell("chat-message",n),i.length>0?(i.chatroom("add",n),n.displayed=!0):t("#"+n.user.id).length>0&&(msg=t.extend({},n),msg.wsid=n.user.id,msg.html="Wants to chat",this.chat("notifyUser",msg))},forbidden:function(t){r.alert(t.message||"Action is forbidden")},read_until:function(t,e){n.setDocVal(t,"chatBar",e)},broadcast_room:function(){return this.closest(".swish").find(".storage").storage("match",{file:e.swish.hangout})},notifyUser:function(t){var n=this;(function(t){return("opened"==t.event||"closed"==t.event)&&t.event_argv&&t.event_argv[0]==e.swish.hangout})(t)&&!this.chat("broadcast_room")&&(t.create_user=!1);var i=this.chat("addUser",t);i&&i.length>0&&(t.onremove=function(){n.chat("unnotify",t.wsid)},r.notify(i,t),this.chat("updateFiles",t))},unnotify:function(e){return t("#"+e).hasClass("removed")&&this.chat("removeUser",e),this},updateFiles:function(e){function n(){return e.event_argv[0]}var i=t(this).data("chat");if("opened"==e.event)this.chat("addUserFile",e.wsid,n());else if("closed"==e.event){var r=e.wsid==i.wsid?void 0:e.wsid;this.chat("removeUserFile",r,n(),!0)}},addUser:function(e){var n=t("#"+e.wsid);if(0==n.length){if(0==e.create_user)return null;n=t(s(e.wsid,e)),this.prepend(n)}else this.chat("lost",n,!1);return n},removeUser:function(e){"string"==typeof e&&(e={wsid:e}),void 0!==e.visitors&&this.chat("userCount",e.visitors);var n=t("#"+e.wsid);return 0==n.length?this:("close"!=e.reason?t("#ntf-"+e.wsid).length>0?n.addClass("removed"):n.hide(400,function(){this.remove()}):this.chat("lost",n,!0),this)},lost:function(e,n){n?e.addClass("lost"):e.removeClass("lost"),e.each(function(){var i=t(this);if(n)i.data("lost-timer",setTimeout(function(){e.hasClass("lost")&&e.remove()},6e4));else{var r=i.data("lost-timer");r&&(clearTimeout(r),i.data("lost-timer",void 0))}})},user_info:function(e){var n=t(this),i={};if((!e||e.indexOf("id")>=0)&&(i.id=n.attr("id")),!e||e.indexOf("name")>=0){var r=n.prop("title");r&&"Me"!==r&&(i.name=r)}return(!e||e.indexOf("avatar")>=0)&&(i.avatar=n.find("img.avatar").attr("src")),i},users:function(e){var n=[],i={users:n};return this.find("li.user[id]").each(function(){var r=t(this),o=r.hasClass("myself"),a=r.chat("user_info",o?void 0:e);o&&(i.self=t.extend({},a),a.is_self=!0),n.push(a)}),i},self:function(t){return this.find("li.user.myself[id]").chat("user_info",t)},addUserFile:function(e,n){var i,r=t("#"+e),o=r.find("ul.dropdown-menu");if(o.find("li.file").each(function(){if(t(this).data("file")==n)return i=this,!1}),void 0==i){var a=n.split(".").pop();o.append(t.el.li({class:"file","data-file":n,title:"Shared file"},t.el.a(t.el.span({class:"dropdown-icon type-icon "+a}),n)))}return this},removeUserFile:function(e,n,i){function r(e){var r=e.children("ul.dropdown-menu");r.find("li.file").each(function(){if(t(this).data("file")==n)return t(this).remove(),i&&!e.hasClass("myself")&&0==r.find("li.file").length&&o.chat("removeUser",e.attr("id")),!1})}var o=this;e?r(t("#"+e)):this.children().each(function(){r(t(this))})}};t.fn.chat=function(e){return h[e]?h[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.chat"):h._init.apply(this,arguments)}}(jQuery);var s={};return{avatar:a}}),function(t,e){var n=0,i=null,r=[],o=null;t.fn.split=function(e){function a(t){if("number"==typeof t)return t;if("string"==typeof t){var e=t.match(/^([0-9\.]+)(px|%)$/);if(e){if("px"==e[2])return+e[1];if("vertical"==u.orientation)return f*+e[1]/100;if("horizontal"==u.orientation)return p*+e[1]/100}}}var s=this.data("splitter");if(s)return s;var l,c,u=t.extend({limit:100,orientation:"horizontal",position:"50%",invisible:!1,onDragStart:t.noop,onDragEnd:t.noop,onDrag:t.noop},e||{});this.settings=u;var h,d=this.children();"vertical"==u.orientation?(l=d.first().addClass("left_panel"),c=l.next().addClass("right_panel"),h="vsplitter"):"horizontal"==u.orientation&&(l=d.first().addClass("top_panel"),c=l.next().addClass("bottom_panel"),h="hsplitter"),u.invisible&&(h+=" splitter-invisible");var f=this.width(),p=this.height(),g=n++;this.addClass("splitter_panel");var m,v=t("<div/>").addClass(h).bind("mouseenter touchstart",function(){i=g}).bind("mouseleave touchend",function(){i=null}).insertAfter(l),y=t.extend(this,{refresh:function(){var t=this.width(),e=this.height();f==t&&p==e||(f=this.width(),p=this.height(),y.position(m))},position:function(){return"vertical"==u.orientation?function(t,e){if(void 0===t)return m;m=a(t);var n=v.width(),i=n/2;if(u.invisible){var r=l.width(m).outerWidth();c.width(y.width()-r),v.css("left",r-i)}else{var r=l.width(m-i).outerWidth();c.width(y.width()-r-n),v.css("left",r)}return e||y.find(".splitter_panel").trigger("splitter.resize"),y}:"horizontal"==u.orientation?function(t,e){if(void 0===t)return m;m=a(t);var n=v.height(),i=n/2;if(u.invisible){var r=l.height(m).outerHeight();c.height(y.height()-r),v.css("top",r-i)}else{var r=l.height(m-i).outerHeight();c.height(y.height()-r-n),v.css("top",r)}return e||y.find(".splitter_panel").trigger("splitter.resize"),y}:t.noop}(),orientation:u.orientation,limit:u.limit,isActive:function(){return i===g},destroy:function(){y.removeClass("splitter_panel"),v.unbind("mouseenter"),v.unbind("mouseleave"),v.unbind("touchstart"),v.unbind("touchmove"),v.unbind("touchend"),v.unbind("touchleave"),v.unbind("touchcancel"),"vertical"==u.orientation?(l.removeClass("left_panel"),c.removeClass("right_panel")):"horizontal"==u.orientation&&(l.removeClass("top_panel"),c.removeClass("bottom_panel")),y.unbind("splitter.resize"),y.find(".splitter_panel").trigger("splitter.resize"),r[g]=null,v.remove();for(var e=!1,i=r.length;i--;)if(null!==r[i]){e=!0;break}e||(t(document.documentElement).unbind(".splitter"),t(window).unbind("resize.splitter"),y.data("splitter",null),r=[],n=0)}});y.bind("splitter.resize",function(t){var e=y.position();"vertical"==y.orientation&&e>y.width()?e=y.width()-y.limit-1:"horizontal"==y.orientation&&e>y.height()&&(e=y.height()-y.limit-1),e<y.limit&&(e=y.limit+1),y.position(e,!0)});var b;return"vertical"==u.orientation?b=b>f-u.limit?f-u.limit:a(u.position):"horizontal"==u.orientation&&(b=b>p-u.limit?p-u.limit:a(u.position)),b<u.limit&&(b=u.limit),y.position(b,!0),0==r.length&&(t(window).bind("resize.splitter",function(){t.each(r,function(t,e){e&&e.refresh()})}),t(document.documentElement).bind("mousedown.splitter touchstart.splitter",function(e){if(null!==i)return o=r[i],t('<div class="splitterMask"></div>').css("cursor",o.children().eq(1).css("cursor")).insertAfter(o),o.settings.onDragStart(e),!1}).bind("mouseup.splitter touchend.splitter touchleave.splitter touchcancel.splitter",function(e){o&&(t(".splitterMask").remove(),o.settings.onDragEnd(e),o=null)}).bind("mousemove.splitter touchmove.splitter",function(t){if(null!==o){var e=o.limit,n=o.offset();if("vertical"==o.orientation){var i=t.pageX;t.originalEvent&&t.originalEvent.changedTouches&&(i=t.originalEvent.changedTouches[0].pageX);var r=i-n.left;r<=o.limit?r=o.limit+1:r>=o.width()-e&&(r=o.width()-e-1),r>o.limit&&r<o.width()-e&&(o.position(r,!0),o.find(".splitter_panel").trigger("splitter.resize"),t.preventDefault())}else if("horizontal"==o.orientation){var a=t.pageY;t.originalEvent&&t.originalEvent.changedTouches&&(a=t.originalEvent.changedTouches[0].pageY);var s=a-n.top;s<=o.limit?s=o.limit+1:s>=o.height()-e&&(s=o.height()-e-1),s>o.limit&&s<o.height()-e&&(o.position(s,!0),o.find(".splitter_panel").trigger("splitter.resize"),t.preventDefault())}o.settings.onDrag(t)}})),r.push(y),y.data("splitter",y),y}}(jQuery),define("splitter",["jquery"],function(){}),define("pane",["jquery","splitter"],function(){!function(t){function e(e){var n=e.children();return{splitter:e.split(),first:t(n[0]).children()[0],second:t(n[2]).children()[0]}}function n(t){return"horizontal"==t?"vertical":"horizontal"}var i={_init:function(e){return this.each(function(){var e=t(this),n=e.hasClass("horizontal")?"vertical":"horizontal",i=e.attr("data-split"),r=e.children();i=i||"50%",r.each(function(){t(this).wrap('<div class="pane-wrapper"></div>')}),e.addClass("pane-container"),e.split({orientation:n,position:i,limit:10,onDragStart:function(){e.tile("resize_start")},onDrag:function(t){r.trigger("pane.resize")},onDragEnd:function(){e.tile("resize_save")}}),e.tile("resize_save"),e.on("fullscreen",function(t,n){e.tile("resize")})})},resize_start:function(){return this.each(function(){var n=t(this),i=e(n);n.find(".reactive-size").trigger("reactive-resize-start",i.splitter.orientation)})},resize_save:function(){return this.each(function(){var n,i,r=t(this),o=e(r);"horizontal"==o.splitter.orientation?(n=r.height(),i=t(o.first).height()):(n=r.width(),i=t(o.first).width());var a=Math.round(100*i/n)+"%";o.splitter.resizestart=a}),this.find(".reactive-size").trigger("reactive-resize"),this},resize:function(){return this.each(function(){var e=t(this),n=e.split();n.resizestart&&(n.position(n.resizestart),n.settings.onDrag(e))})},split:function(e,i,r,o){i=i||"below";var a,s=this,l="above"==i||"below"==i?"horizontal":"vertical",c=s.wrap('<div class="pane-container tile "'+n(l)+"></div>").parent();if(c.is(":visible")||(a=c.closest(".tab-pane"),a.addClass("active")),void 0==r?r=50:r<10?r=10:r>90&&(r=90),o&&"horizontal"==l){var u=this.height();u*r/100<o&&o<.9*u&&(r=100*o/u)}"above"==i||"left"==i?c.prepend(e):(r=100-r,c.append(e));var h=t(s).add(e);return h.wrap('<div class="pane-wrapper"></div>'),c.split({orientation:l,position:r+"%",limit:10,onDragStart:function(){c.tile("resize_start")},onDrag:function(){h.trigger("pane.resize")},onDragEnd:function(){c.tile("resize_save")}}),c.tile("resize_save"),h.trigger("pane.resize"),a&&a.removeClass("active"),c},close:function(){var t=this,e=t.closest(".pane-container");e.split().destroy(),t.parent().remove(),e.children().first().children().first().unwrap().unwrap()}};t.fn.tile=function(e){return i[e]?i[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.tile"):i._init.apply(this,arguments)}}(jQuery)}),function(t,e){"function"==typeof define&&define.amd?define("bloodhound",["jquery"],function(n){return t.Bloodhound=e(n)}):"object"==typeof exports?module.exports=e(require("jquery")):t.Bloodhound=e(jQuery)}(this,function(t){var e=function(){"use strict";return{isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:t.isArray,isFunction:t.isFunction,isObject:t.isPlainObject,isUndefined:function(t){return void 0===t},isElement:function(t){return!(!t||1!==t.nodeType)},isJQuery:function(e){return e instanceof t},toStr:function(t){return e.isUndefined(t)||null===t?"":t+""},bind:t.proxy,each:function(e,n){function i(t,e){return n(e,t)}t.each(e,i)},map:t.map,filter:t.grep,every:function(e,n){var i=!0;return e?(t.each(e,function(t,r){if(!(i=n.call(null,r,t,e)))return!1}),!!i):i},some:function(e,n){var i=!1;return e?(t.each(e,function(t,r){if(i=n.call(null,r,t,e))return!1}),!!i):i},mixin:t.extend,identity:function(t){return t},clone:function(e){return t.extend(!0,{},e)},getIdGenerator:function(){var t=0;return function(){return t++}},templatify:function(e){function n(){return String(e)}return t.isFunction(e)?e:n},defer:function(t){setTimeout(t,0)},debounce:function(t,e,n){var i,r;return function(){var o,a,s=this,l=arguments;return o=function(){i=null,n||(r=t.apply(s,l))},a=n&&!i,clearTimeout(i),i=setTimeout(o,e),a&&(r=t.apply(s,l)),r}},throttle:function(t,e){var n,i,r,o,a,s;return a=0,s=function(){a=new Date,r=null,o=t.apply(n,i)},function(){var l=new Date,c=e-(l-a);return n=this,i=arguments,c<=0?(clearTimeout(r),r=null,a=l,o=t.apply(n,i)):r||(r=setTimeout(s,c)),o}},stringify:function(t){return e.isString(t)?t:JSON.stringify(t)},noop:function(){}}}(),n="0.11.1",i=function(){"use strict";function t(t){return t=e.toStr(t),t?t.split(/\s+/):[]}function n(t){return t=e.toStr(t),t?t.split(/\W+/):[]}function i(t){return function(n){return n=e.isArray(n)?n:[].slice.call(arguments,0),function(i){var r=[];return e.each(n,function(n){r=r.concat(t(e.toStr(i[n])))}),r}}}return{nonword:n,whitespace:t,obj:{nonword:i(n),whitespace:i(t)}}}(),r=function(){"use strict";function n(n){this.maxSize=e.isNumber(n)?n:100,this.reset(),this.maxSize<=0&&(this.set=this.get=t.noop)}function i(){this.head=this.tail=null}function r(t,e){this.key=t,this.val=e,this.prev=this.next=null}return e.mixin(n.prototype,{set:function(t,e){var n,i=this.list.tail;this.size>=this.maxSize&&(this.list.remove(i),delete this.hash[i.key],this.size--),(n=this.hash[t])?(n.val=e,this.list.moveToFront(n)):(n=new r(t,e),this.list.add(n),this.hash[t]=n,this.size++)},get:function(t){var e=this.hash[t];if(e)return this.list.moveToFront(e),e.val},reset:function(){this.size=0,this.hash={},this.list=new i}}),e.mixin(i.prototype,{add:function(t){this.head&&(t.next=this.head,this.head.prev=t),this.head=t,this.tail=this.tail||t},remove:function(t){t.prev?t.prev.next=t.next:this.head=t.next,t.next?t.next.prev=t.prev:this.tail=t.prev},moveToFront:function(t){this.remove(t),this.add(t)}}),n}(),o=function(){"use strict";function n(t,n){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=new RegExp("^"+e.escapeRegExChars(this.prefix)),this.ls=n||s,!this.ls&&this._noop()}function i(){return(new Date).getTime()}function r(t){return JSON.stringify(e.isUndefined(t)?null:t)}function o(e){return t.parseJSON(e)}function a(t){var e,n,i=[],r=s.length;for(e=0;e<r;e++)(n=s.key(e)).match(t)&&i.push(n.replace(t,""));return i}var s;try{s=window.localStorage,s.setItem("~~~","!"),s.removeItem("~~~")}catch(t){s=null}return e.mixin(n.prototype,{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},_noop:function(){this.get=this.set=this.remove=this.clear=this.isExpired=e.noop},_safeSet:function(t,e){try{this.ls.setItem(t,e)}catch(t){"QuotaExceededError"===t.name&&(this.clear(),this._noop())}},get:function(t){return this.isExpired(t)&&this.remove(t),o(this.ls.getItem(this._prefix(t)))},set:function(t,n,o){return e.isNumber(o)?this._safeSet(this._ttlKey(t),r(i()+o)):this.ls.removeItem(this._ttlKey(t)),this._safeSet(this._prefix(t),r(n))},remove:function(t){return this.ls.removeItem(this._ttlKey(t)),this.ls.removeItem(this._prefix(t)),this},clear:function(){var t,e=a(this.keyMatcher);for(t=e.length;t--;)this.remove(e[t]);return this},isExpired:function(t){var n=o(this.ls.getItem(this._ttlKey(t)));return!!(e.isNumber(n)&&i()>n)}}),n}(),a=function(){"use strict";function n(t){t=t||{},this.cancelled=!1,this.lastReq=null,this._send=t.transport,this._get=t.limiter?t.limiter(this._get):this._get,this._cache=!1===t.cache?new r(0):s}var i=0,o={},a=6,s=new r(10);return n.setMaxPendingRequests=function(t){a=t},n.resetCache=function(){s.reset()},e.mixin(n.prototype,{_fingerprint:function(e){return e=e||{},e.url+e.type+t.param(e.data||{})},_get:function(t,e){function n(t){e(null,t),u._cache.set(l,t)}function r(){e(!0)}function s(){i--,delete o[l],u.onDeckRequestArgs&&(u._get.apply(u,u.onDeckRequestArgs),u.onDeckRequestArgs=null)}var l,c,u=this;l=this._fingerprint(t),this.cancelled||l!==this.lastReq||((c=o[l])?c.done(n).fail(r):i<a?(i++,o[l]=this._send(t).done(n).fail(r).always(s)):this.onDeckRequestArgs=[].slice.call(arguments,0))},get:function(n,i){var r,o;i=i||t.noop,n=e.isString(n)?{url:n}:n||{},o=this._fingerprint(n),this.cancelled=!1,this.lastReq=o,(r=this._cache.get(o))?i(null,r):this._get(n,i)},cancel:function(){this.cancelled=!0}}),n}(),s=window.SearchIndex=function(){"use strict";function n(n){n=n||{},n.datumTokenizer&&n.queryTokenizer||t.error("datumTokenizer and queryTokenizer are both required"),this.identify=n.identify||e.stringify,this.datumTokenizer=n.datumTokenizer,this.queryTokenizer=n.queryTokenizer,this.reset()}function i(t){return t=e.filter(t,function(t){return!!t}),t=e.map(t,function(t){return t.toLowerCase()})}function r(){var t={};return t[l]=[],t[s]={},t}function o(t){for(var e={},n=[],i=0,r=t.length;i<r;i++)e[t[i]]||(e[t[i]]=!0,n.push(t[i]));return n}function a(t,e){var n=0,i=0,r=[];t=t.sort(),e=e.sort();for(var o=t.length,a=e.length;n<o&&i<a;)t[n]<e[i]?n++:t[n]>e[i]?i++:(r.push(t[n]),n++,i++);return r}var s="c",l="i";return e.mixin(n.prototype,{bootstrap:function(t){this.datums=t.datums,this.trie=t.trie},add:function(t){var n=this;t=e.isArray(t)?t:[t],e.each(t,function(t){var o,a;n.datums[o=n.identify(t)]=t,a=i(n.datumTokenizer(t)),e.each(a,function(t){var e,i,a;for(e=n.trie,i=t.split("");a=i.shift();)e=e[s][a]||(e[s][a]=r()),e[l].push(o)})})},get:function(t){var n=this;return e.map(t,function(t){return n.datums[t]})},search:function(t){var n,r,c=this;return n=i(this.queryTokenizer(t)),e.each(n,function(t){var e,n,i,o;if(r&&0===r.length)return!1;for(e=c.trie,n=t.split("");e&&(i=n.shift());)e=e[s][i];if(!e||0!==n.length)return r=[],!1;o=e[l].slice(0),r=r?a(r,o):o}),r?e.map(o(r),function(t){return c.datums[t]}):[]},all:function(){var t=[];for(var e in this.datums)t.push(this.datums[e]);return t},reset:function(){this.datums={},this.trie=r()},serialize:function(){return{datums:this.datums,trie:this.trie}}}),n}(),l=function(){"use strict";function t(t){this.url=t.url,this.ttl=t.ttl,this.cache=t.cache,this.prepare=t.prepare,this.transform=t.transform,this.transport=t.transport,this.thumbprint=t.thumbprint,this.storage=new o(t.cacheKey)}var n;return n={data:"data",protocol:"protocol",thumbprint:"thumbprint"},e.mixin(t.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},store:function(t){this.cache&&(this.storage.set(n.data,t,this.ttl),this.storage.set(n.protocol,location.protocol,this.ttl),this.storage.set(n.thumbprint,this.thumbprint,this.ttl))},fromCache:function(){var t,e={};return this.cache?(e.data=this.storage.get(n.data),e.protocol=this.storage.get(n.protocol),e.thumbprint=this.storage.get(n.thumbprint),t=e.thumbprint!==this.thumbprint||e.protocol!==location.protocol,e.data&&!t?e.data:null):null},fromNetwork:function(t){function e(){t(!0)}function n(e){t(null,r.transform(e))}var i,r=this;t&&(i=this.prepare(this._settings()),this.transport(i).fail(e).done(n))},clear:function(){return this.storage.clear(),this}}),t}(),c=function(){"use strict";function t(t){this.url=t.url,this.prepare=t.prepare,this.transform=t.transform,this.transport=new a({cache:t.cache,limiter:t.limiter,transport:t.transport})}return e.mixin(t.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},get:function(t,e){function n(t,n){e(t?[]:r.transform(n))}var i,r=this;if(e)return t=t||"",i=this.prepare(t,this._settings()),this.transport.get(i,n)},cancelLastRequest:function(){this.transport.cancel()}}),t}(),u=function(){"use strict";function i(i){var r;return i?(r={url:null,ttl:864e5,cache:!0,cacheKey:null,thumbprint:"",prepare:e.identity,transform:e.identity,transport:null},i=e.isString(i)?{url:i}:i,i=e.mixin(r,i),!i.url&&t.error("prefetch requires url to be set"),i.transform=i.filter||i.transform,i.cacheKey=i.cacheKey||i.url,i.thumbprint=n+i.thumbprint,i.transport=i.transport?s(i.transport):t.ajax,i):null}function r(n){var i;if(n)return i={url:null,cache:!0,prepare:null,replace:null,wildcard:null,limiter:null,rateLimitBy:"debounce",rateLimitWait:300,transform:e.identity,transport:null},n=e.isString(n)?{url:n}:n,n=e.mixin(i,n),!n.url&&t.error("remote requires url to be set"),n.transform=n.filter||n.transform,n.prepare=o(n),n.limiter=a(n),n.transport=n.transport?s(n.transport):t.ajax,delete n.replace,delete n.wildcard,delete n.rateLimitBy,delete n.rateLimitWait,n}function o(t){function e(t,e){return e.url=o(e.url,t),e}function n(t,e){return e.url=e.url.replace(a,encodeURIComponent(t)),e}function i(t,e){return e}var r,o,a;return r=t.prepare,o=t.replace,a=t.wildcard,r||(r=o?e:t.wildcard?n:i)}function a(t){var n,i,r;return n=t.limiter,i=t.rateLimitBy,r=t.rateLimitWait,n||(n=/^throttle$/i.test(i)?function(t){return function(n){return e.throttle(n,t)}}(r):function(t){return function(n){return e.debounce(n,t)}}(r)),n}function s(n){return function(i){function r(t){e.defer(function(){a.resolve(t)})}function o(t){e.defer(function(){a.reject(t)})}var a=t.Deferred();return n(i,r,o),a}}return function(n){var o,a;return o={initialize:!0,identify:e.stringify,datumTokenizer:null,queryTokenizer:null,sufficient:5,sorter:null,local:[],prefetch:null,remote:null},n=e.mixin(o,n||{}),!n.datumTokenizer&&t.error("datumTokenizer is required"),!n.queryTokenizer&&t.error("queryTokenizer is required"),a=n.sorter,n.sorter=a?function(t){return t.sort(a)}:e.identity,n.local=e.isFunction(n.local)?n.local():n.local,n.prefetch=i(n.prefetch),n.remote=r(n.remote),n}}();return function(){"use strict";function n(t){t=u(t),this.sorter=t.sorter,this.identify=t.identify,this.sufficient=t.sufficient,this.local=t.local,this.remote=t.remote?new c(t.remote):null,this.prefetch=t.prefetch?new l(t.prefetch):null,this.index=new s({identify:this.identify,datumTokenizer:t.datumTokenizer,queryTokenizer:t.queryTokenizer}),!1!==t.initialize&&this.initialize()}var r;return r=window&&window.Bloodhound,n.noConflict=function(){return window&&(window.Bloodhound=r),n},n.tokenizers=i,e.mixin(n.prototype,{__ttAdapter:function(){function t(t,e,i){return n.search(t,e,i)}function e(t,e){return n.search(t,e)}var n=this;return this.remote?t:e},_loadPrefetch:function(){function e(t,e){if(t)return n.reject();r.add(e),r.prefetch.store(r.index.serialize()),n.resolve()}var n,i,r=this;return n=t.Deferred(),this.prefetch?(i=this.prefetch.fromCache())?(this.index.bootstrap(i),n.resolve()):this.prefetch.fromNetwork(e):n.resolve(),n.promise()},_initialize:function(){function t(){e.add(e.local)}var e=this;return this.clear(),(this.initPromise=this._loadPrefetch()).done(t),this.initPromise},initialize:function(t){return!this.initPromise||t?this._initialize():this.initPromise},add:function(t){return this.index.add(t),this},get:function(t){return t=e.isArray(t)?t:[].slice.call(arguments),this.index.get(t)},search:function(t,n,i){function r(t){var n=[];e.each(t,function(t){!e.some(o,function(e){return a.identify(t)===a.identify(e)})&&n.push(t)}),i&&i(n)}var o,a=this;return o=this.sorter(this.index.search(t)),n(this.remote?o.slice():o),this.remote&&o.length<this.sufficient?this.remote.get(t,r):this.remote&&this.remote.cancelLastRequest(),this},all:function(){return this.index.all()},clear:function(){return this.index.reset(),this},clearPrefetchCache:function(){return this.prefetch&&this.prefetch.clear(),this},clearRemoteCache:function(){return a.resetCache(),this},ttAdapter:function(){return this.__ttAdapter()}}),n}()}),function(t,e){"function"==typeof define&&define.amd?define("typeahead.js",["jquery"],function(t){return e(t)}):"object"==typeof exports?module.exports=e(require("jquery")):e(jQuery)}(0,function(t){var e=function(){"use strict";return{isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:t.isArray,isFunction:t.isFunction,isObject:t.isPlainObject,isUndefined:function(t){return void 0===t},isElement:function(t){return!(!t||1!==t.nodeType)},isJQuery:function(e){return e instanceof t},toStr:function(t){return e.isUndefined(t)||null===t?"":t+""},bind:t.proxy,each:function(e,n){function i(t,e){return n(e,t)}t.each(e,i)},map:t.map,filter:t.grep,every:function(e,n){var i=!0;return e?(t.each(e,function(t,r){if(!(i=n.call(null,r,t,e)))return!1}),!!i):i},some:function(e,n){var i=!1;return e?(t.each(e,function(t,r){if(i=n.call(null,r,t,e))return!1}),!!i):i
-},mixin:t.extend,identity:function(t){return t},clone:function(e){return t.extend(!0,{},e)},getIdGenerator:function(){var t=0;return function(){return t++}},templatify:function(e){function n(){return String(e)}return t.isFunction(e)?e:n},defer:function(t){setTimeout(t,0)},debounce:function(t,e,n){var i,r;return function(){var o,a,s=this,l=arguments;return o=function(){i=null,n||(r=t.apply(s,l))},a=n&&!i,clearTimeout(i),i=setTimeout(o,e),a&&(r=t.apply(s,l)),r}},throttle:function(t,e){var n,i,r,o,a,s;return a=0,s=function(){a=new Date,r=null,o=t.apply(n,i)},function(){var l=new Date,c=e-(l-a);return n=this,i=arguments,c<=0?(clearTimeout(r),r=null,a=l,o=t.apply(n,i)):r||(r=setTimeout(s,c)),o}},stringify:function(t){return e.isString(t)?t:JSON.stringify(t)},noop:function(){}}}(),n=function(){"use strict";function t(t){var a,s;return s=e.mixin({},o,t),a={css:r(),classes:s,html:n(s),selectors:i(s)},{css:a.css,html:a.html,classes:a.classes,selectors:a.selectors,mixin:function(t){e.mixin(t,a)}}}function n(t){return{wrapper:'<span class="'+t.wrapper+'"></span>',menu:'<div class="'+t.menu+'"></div>'}}function i(t){var n={};return e.each(t,function(t,e){n[e]="."+t}),n}function r(){var t={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},menu:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:" 0"}};return e.isMsie()&&e.mixin(t.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),t}var o={wrapper:"twitter-typeahead",input:"tt-input",hint:"tt-hint",menu:"tt-menu",dataset:"tt-dataset",suggestion:"tt-suggestion",selectable:"tt-selectable",empty:"tt-empty",open:"tt-open",cursor:"tt-cursor",highlight:"tt-highlight"};return t}(),i=function(){"use strict";function n(e){e&&e.el||t.error("EventBus initialized without el"),this.$el=t(e.el)}var i,r;return i="typeahead:",r={render:"rendered",cursorchange:"cursorchanged",select:"selected",autocomplete:"autocompleted"},e.mixin(n.prototype,{_trigger:function(e,n){var r;return r=t.Event(i+e),(n=n||[]).unshift(r),this.$el.trigger.apply(this.$el,n),r},before:function(t){var e,n;return e=[].slice.call(arguments,1),n=this._trigger("before"+t,e),n.isDefaultPrevented()},trigger:function(t){var e;this._trigger(t,[].slice.call(arguments,1)),(e=r[t])&&this._trigger(e,[].slice.call(arguments,1))}}),n}(),r=function(){"use strict";function t(t,e,n,i){var r;if(!n)return this;for(e=e.split(s),n=i?a(n,i):n,this._callbacks=this._callbacks||{};r=e.shift();)this._callbacks[r]=this._callbacks[r]||{sync:[],async:[]},this._callbacks[r][t].push(n);return this}function e(e,n,i){return t.call(this,"async",e,n,i)}function n(e,n,i){return t.call(this,"sync",e,n,i)}function i(t){var e;if(!this._callbacks)return this;for(t=t.split(s);e=t.shift();)delete this._callbacks[e];return this}function r(t){var e,n,i,r,a;if(!this._callbacks)return this;for(t=t.split(s),i=[].slice.call(arguments,1);(e=t.shift())&&(n=this._callbacks[e]);)r=o(n.sync,this,[e].concat(i)),a=o(n.async,this,[e].concat(i)),r()&&l(a);return this}function o(t,e,n){function i(){for(var i,r=0,o=t.length;!i&&r<o;r+=1)i=!1===t[r].apply(e,n);return!i}return i}function a(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}var s=/\s+/,l=function(){return window.setImmediate?function(t){setImmediate(function(){t()})}:function(t){setTimeout(function(){t()},0)}}();return{onSync:n,onAsync:e,off:i,trigger:r}}(),o=function(t){"use strict";function n(t,n,i){for(var r,o=[],a=0,s=t.length;a<s;a++)o.push(e.escapeRegExChars(t[a]));return r=i?"\\b("+o.join("|")+")\\b":"("+o.join("|")+")",n?new RegExp(r):new RegExp(r,"i")}var i={node:null,pattern:null,tagName:"strong",className:null,wordsOnly:!1,caseSensitive:!1};return function(r){function o(e){var n,i,o;return(n=s.exec(e.data))&&(o=t.createElement(r.tagName),r.className&&(o.className=r.className),i=e.splitText(n.index),i.splitText(n[0].length),o.appendChild(i.cloneNode(!0)),e.parentNode.replaceChild(o,i)),!!n}function a(t,e){for(var n,i=0;i<t.childNodes.length;i++)n=t.childNodes[i],3===n.nodeType?i+=e(n)?1:0:a(n,e)}var s;r=e.mixin({},i,r),r.node&&r.pattern&&(r.pattern=e.isArray(r.pattern)?r.pattern:[r.pattern],s=n(r.pattern,r.caseSensitive,r.wordsOnly),a(r.node,o))}}(window.document),a=function(){"use strict";function n(n,r){n=n||{},n.input||t.error("input is missing"),r.mixin(this),this.$hint=t(n.hint),this.$input=t(n.input),this.query=this.$input.val(),this.queryWhenFocused=this.hasFocus()?this.query:null,this.$overflowHelper=i(this.$input),this._checkLanguageDirection(),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=e.noop)}function i(e){return t('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}function o(t,e){return n.normalizeQuery(t)===n.normalizeQuery(e)}function a(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}var s;return s={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"},n.normalizeQuery=function(t){return e.toStr(t).replace(/^\s*/g,"").replace(/\s{2,}/g," ")},e.mixin(n.prototype,r,{_onBlur:function(){this.resetInputValue(),this.trigger("blurred")},_onFocus:function(){this.queryWhenFocused=this.query,this.trigger("focused")},_onKeydown:function(t){var e=s[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._setQuery(this.getInputValue()),this.clearHintIfInvalid(),this._checkLanguageDirection()},_managePreventDefault:function(t,e){var n;switch(t){case"up":case"down":n=!a(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;switch(t){case"tab":n=!a(e);break;default:n=!0}return n},_checkLanguageDirection:function(){var t=(this.$input.css("direction")||"ltr").toLowerCase();this.dir!==t&&(this.dir=t,this.$hint.attr("dir",t),this.trigger("langDirChanged",t))},_setQuery:function(t,e){var n,i;n=o(t,this.query),i=!!n&&this.query.length!==t.length,this.query=t,e||n?!e&&i&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},bind:function(){var t,n,i,r,o=this;return t=e.bind(this._onBlur,this),n=e.bind(this._onFocus,this),i=e.bind(this._onKeydown,this),r=e.bind(this._onInput,this),this.$input.on("blur.tt",t).on("focus.tt",n).on("keydown.tt",i),!e.isMsie()||e.isMsie()>9?this.$input.on("input.tt",r):this.$input.on("keydown.tt keypress.tt cut.tt paste.tt",function(t){s[t.which||t.keyCode]||e.defer(e.bind(o._onInput,o,t))}),this},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getLangDir:function(){return this.dir},getQuery:function(){return this.query||""},setQuery:function(t,e){this.setInputValue(t),this._setQuery(t,e)},hasQueryChangedSinceLastFocus:function(){return this.query!==this.queryWhenFocused},getInputValue:function(){return this.$input.val()},setInputValue:function(t){this.$input.val(t),this.clearHintIfInvalid(),this._checkLanguageDirection()},resetInputValue:function(){this.setInputValue(this.query)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n,i;t=this.getInputValue(),e=this.getHint(),n=t!==e&&0===e.indexOf(t),!(i=""!==t&&n&&!this.hasOverflow())&&this.clearHint()},hasFocus:function(){return this.$input.is(":focus")},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,n,i;return t=this.$input.val().length,n=this.$input[0].selectionStart,e.isNumber(n)?n===t:!document.selection||(i=document.selection.createRange(),i.moveStart("character",-t),t===i.text.length)},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$overflowHelper.remove(),this.$hint=this.$input=this.$overflowHelper=t("<div>")}}),n}(),s=function(){"use strict";function n(n,r){n=n||{},n.templates=n.templates||{},n.templates.notFound=n.templates.notFound||n.templates.empty,n.source||t.error("missing source"),n.node||t.error("missing node"),n.name&&!s(n.name)&&t.error("invalid dataset name: "+n.name),r.mixin(this),this.highlight=!!n.highlight,this.name=n.name||c(),this.limit=n.limit||5,this.displayFn=i(n.display||n.displayKey),this.templates=a(n.templates,this.displayFn),this.source=n.source.__ttAdapter?n.source.__ttAdapter():n.source,this.async=e.isUndefined(n.async)?this.source.length>2:!!n.async,this._resetLastSuggestion(),this.$el=t(n.node).addClass(this.classes.dataset).addClass(this.classes.dataset+"-"+this.name)}function i(t){function n(e){return e[t]}return t=t||e.stringify,e.isFunction(t)?t:n}function a(n,i){function r(e){return t("<div>").text(i(e))}return{notFound:n.notFound&&e.templatify(n.notFound),pending:n.pending&&e.templatify(n.pending),header:n.header&&e.templatify(n.header),footer:n.footer&&e.templatify(n.footer),suggestion:n.suggestion||r}}function s(t){return/^[_a-zA-Z0-9-]+$/.test(t)}var l,c;return l={val:"tt-selectable-display",obj:"tt-selectable-object"},c=e.getIdGenerator(),n.extractData=function(e){var n=t(e);return n.data(l.obj)?{val:n.data(l.val)||"",obj:n.data(l.obj)||null}:null},e.mixin(n.prototype,r,{_overwrite:function(t,e){e=e||[],e.length?this._renderSuggestions(t,e):this.async&&this.templates.pending?this._renderPending(t):!this.async&&this.templates.notFound?this._renderNotFound(t):this._empty(),this.trigger("rendered",this.name,e,!1)},_append:function(t,e){e=e||[],e.length&&this.$lastSuggestion.length?this._appendSuggestions(t,e):e.length?this._renderSuggestions(t,e):!this.$lastSuggestion.length&&this.templates.notFound&&this._renderNotFound(t),this.trigger("rendered",this.name,e,!0)},_renderSuggestions:function(t,e){var n;n=this._getSuggestionsFragment(t,e),this.$lastSuggestion=n.children().last(),this.$el.html(n).prepend(this._getHeader(t,e)).append(this._getFooter(t,e))},_appendSuggestions:function(t,e){var n,i;n=this._getSuggestionsFragment(t,e),i=n.children().last(),this.$lastSuggestion.after(n),this.$lastSuggestion=i},_renderPending:function(t){var e=this.templates.pending;this._resetLastSuggestion(),e&&this.$el.html(e({query:t,dataset:this.name}))},_renderNotFound:function(t){var e=this.templates.notFound;this._resetLastSuggestion(),e&&this.$el.html(e({query:t,dataset:this.name}))},_empty:function(){this.$el.empty(),this._resetLastSuggestion()},_getSuggestionsFragment:function(n,i){var r,a=this;return r=document.createDocumentFragment(),e.each(i,function(e){var i,o;o=a._injectQuery(n,e),i=t(a.templates.suggestion(o)).data(l.obj,e).data(l.val,a.displayFn(e)).addClass(a.classes.suggestion+" "+a.classes.selectable),r.appendChild(i[0])}),this.highlight&&o({className:this.classes.highlight,node:r,pattern:n}),t(r)},_getFooter:function(t,e){return this.templates.footer?this.templates.footer({query:t,suggestions:e,dataset:this.name}):null},_getHeader:function(t,e){return this.templates.header?this.templates.header({query:t,suggestions:e,dataset:this.name}):null},_resetLastSuggestion:function(){this.$lastSuggestion=t()},_injectQuery:function(t,n){return e.isObject(n)?e.mixin({_query:t},n):n},update:function(e){function n(t){a||(a=!0,t=(t||[]).slice(0,r.limit),s=t.length,r._overwrite(e,t),s<r.limit&&r.async&&r.trigger("asyncRequested",e))}function i(n){n=n||[],!o&&s<r.limit&&(r.cancel=t.noop,s+=n.length,r._append(e,n.slice(0,r.limit-s)),r.async&&r.trigger("asyncReceived",e))}var r=this,o=!1,a=!1,s=0;this.cancel(),this.cancel=function(){o=!0,r.cancel=t.noop,r.async&&r.trigger("asyncCanceled",e)},this.source(e,n,i),!a&&n([])},cancel:t.noop,clear:function(){this._empty(),this.cancel(),this.trigger("cleared")},isEmpty:function(){return this.$el.is(":empty")},destroy:function(){this.$el=t("<div>")}}),n}(),l=function(){"use strict";function n(n,i){function r(e){var n=o.$node.find(e.node).first();return e.node=n.length?n:t("<div>").appendTo(o.$node),new s(e,i)}var o=this;n=n||{},n.node||t.error("node is required"),i.mixin(this),this.$node=t(n.node),this.query=null,this.datasets=e.map(n.datasets,r)}return e.mixin(n.prototype,r,{_onSelectableClick:function(e){this.trigger("selectableClicked",t(e.currentTarget))},_onRendered:function(t,e,n,i){this.$node.toggleClass(this.classes.empty,this._allDatasetsEmpty()),this.trigger("datasetRendered",e,n,i)},_onCleared:function(){this.$node.toggleClass(this.classes.empty,this._allDatasetsEmpty()),this.trigger("datasetCleared")},_propagate:function(){this.trigger.apply(this,arguments)},_allDatasetsEmpty:function(){function t(t){return t.isEmpty()}return e.every(this.datasets,t)},_getSelectables:function(){return this.$node.find(this.selectors.selectable)},_removeCursor:function(){var t=this.getActiveSelectable();t&&t.removeClass(this.classes.cursor)},_ensureVisible:function(t){var e,n,i,r;e=t.position().top,n=e+t.outerHeight(!0),i=this.$node.scrollTop(),r=this.$node.height()+parseInt(this.$node.css("paddingTop"),10)+parseInt(this.$node.css("paddingBottom"),10),e<0?this.$node.scrollTop(i+e):r<n&&this.$node.scrollTop(i+(n-r))},bind:function(){var t,n=this;return t=e.bind(this._onSelectableClick,this),this.$node.on("click.tt",this.selectors.selectable,t),e.each(this.datasets,function(t){t.onSync("asyncRequested",n._propagate,n).onSync("asyncCanceled",n._propagate,n).onSync("asyncReceived",n._propagate,n).onSync("rendered",n._onRendered,n).onSync("cleared",n._onCleared,n)}),this},isOpen:function(){return this.$node.hasClass(this.classes.open)},open:function(){this.$node.addClass(this.classes.open)},close:function(){this.$node.removeClass(this.classes.open),this._removeCursor()},setLanguageDirection:function(t){this.$node.attr("dir",t)},selectableRelativeToCursor:function(t){var e,n,i,r;return n=this.getActiveSelectable(),e=this._getSelectables(),i=n?e.index(n):-1,r=i+t,r=(r+1)%(e.length+1)-1,r=r<-1?e.length-1:r,-1===r?null:e.eq(r)},setCursor:function(t){this._removeCursor(),(t=t&&t.first())&&(t.addClass(this.classes.cursor),this._ensureVisible(t))},getSelectableData:function(t){return t&&t.length?s.extractData(t):null},getActiveSelectable:function(){var t=this._getSelectables().filter(this.selectors.cursor).first();return t.length?t:null},getTopSelectable:function(){var t=this._getSelectables().first();return t.length?t:null},update:function(t){function n(e){e.update(t)}var i=t!==this.query;return i&&(this.query=t,e.each(this.datasets,n)),i},empty:function(){function t(t){t.clear()}e.each(this.datasets,t),this.query=null,this.$node.addClass(this.classes.empty)},destroy:function(){function n(t){t.destroy()}this.$node.off(".tt"),this.$node=t("<div>"),e.each(this.datasets,n)}}),n}(),c=function(){"use strict";function t(){l.apply(this,[].slice.call(arguments,0))}var n=l.prototype;return e.mixin(t.prototype,l.prototype,{open:function(){return!this._allDatasetsEmpty()&&this._show(),n.open.apply(this,[].slice.call(arguments,0))},close:function(){return this._hide(),n.close.apply(this,[].slice.call(arguments,0))},_onRendered:function(){return this._allDatasetsEmpty()?this._hide():this.isOpen()&&this._show(),n._onRendered.apply(this,[].slice.call(arguments,0))},_onCleared:function(){return this._allDatasetsEmpty()?this._hide():this.isOpen()&&this._show(),n._onCleared.apply(this,[].slice.call(arguments,0))},setLanguageDirection:function(t){return this.$node.css("ltr"===t?this.css.ltr:this.css.rtl),n.setLanguageDirection.apply(this,[].slice.call(arguments,0))},_hide:function(){this.$node.hide()},_show:function(){this.$node.css("display","block")}}),t}(),u=function(){"use strict";function n(n,r){var o,a,s,l,c,u,h,d,f,p,g;n=n||{},n.input||t.error("missing input"),n.menu||t.error("missing menu"),n.eventBus||t.error("missing event bus"),r.mixin(this),this.eventBus=n.eventBus,this.minLength=e.isNumber(n.minLength)?n.minLength:1,this.input=n.input,this.menu=n.menu,this.enabled=!0,this.active=!1,this.input.hasFocus()&&this.activate(),this.dir=this.input.getLangDir(),this._hacks(),this.menu.bind().onSync("selectableClicked",this._onSelectableClicked,this).onSync("asyncRequested",this._onAsyncRequested,this).onSync("asyncCanceled",this._onAsyncCanceled,this).onSync("asyncReceived",this._onAsyncReceived,this).onSync("datasetRendered",this._onDatasetRendered,this).onSync("datasetCleared",this._onDatasetCleared,this),o=i(this,"activate","open","_onFocused"),a=i(this,"deactivate","_onBlurred"),s=i(this,"isActive","isOpen","_onEnterKeyed"),l=i(this,"isActive","isOpen","_onTabKeyed"),c=i(this,"isActive","_onEscKeyed"),u=i(this,"isActive","open","_onUpKeyed"),h=i(this,"isActive","open","_onDownKeyed"),d=i(this,"isActive","isOpen","_onLeftKeyed"),f=i(this,"isActive","isOpen","_onRightKeyed"),p=i(this,"_openIfActive","_onQueryChanged"),g=i(this,"_openIfActive","_onWhitespaceChanged"),this.input.bind().onSync("focused",o,this).onSync("blurred",a,this).onSync("enterKeyed",s,this).onSync("tabKeyed",l,this).onSync("escKeyed",c,this).onSync("upKeyed",u,this).onSync("downKeyed",h,this).onSync("leftKeyed",d,this).onSync("rightKeyed",f,this).onSync("queryChanged",p,this).onSync("whitespaceChanged",g,this).onSync("langDirChanged",this._onLangDirChanged,this)}function i(t){var n=[].slice.call(arguments,1);return function(){var i=[].slice.call(arguments);e.each(n,function(e){return t[e].apply(t,i)})}}return e.mixin(n.prototype,{_hacks:function(){var n,i;n=this.input.$input||t("<div>"),i=this.menu.$node||t("<div>"),n.on("blur.tt",function(t){var r,o,a;r=document.activeElement,o=i.is(r),a=i.has(r).length>0,e.isMsie()&&(o||a)&&(t.preventDefault(),t.stopImmediatePropagation(),e.defer(function(){n.focus()}))}),i.on("mousedown.tt",function(t){t.preventDefault()})},_onSelectableClicked:function(t,e){this.select(e)},_onDatasetCleared:function(){this._updateHint()},_onDatasetRendered:function(t,e,n,i){this._updateHint(),this.eventBus.trigger("render",n,i,e)},_onAsyncRequested:function(t,e,n){this.eventBus.trigger("asyncrequest",n,e)},_onAsyncCanceled:function(t,e,n){this.eventBus.trigger("asynccancel",n,e)},_onAsyncReceived:function(t,e,n){this.eventBus.trigger("asyncreceive",n,e)},_onFocused:function(){this._minLengthMet()&&this.menu.update(this.input.getQuery())},_onBlurred:function(){this.input.hasQueryChangedSinceLastFocus()&&this.eventBus.trigger("change",this.input.getQuery())},_onEnterKeyed:function(t,e){var n;(n=this.menu.getActiveSelectable())&&this.select(n)&&e.preventDefault()},_onTabKeyed:function(t,e){var n;(n=this.menu.getActiveSelectable())?this.select(n)&&e.preventDefault():(n=this.menu.getTopSelectable())&&this.autocomplete(n)&&e.preventDefault()},_onEscKeyed:function(){this.close()},_onUpKeyed:function(){this.moveCursor(-1)},_onDownKeyed:function(){this.moveCursor(1)},_onLeftKeyed:function(){"rtl"===this.dir&&this.input.isCursorAtEnd()&&this.autocomplete(this.menu.getTopSelectable())},_onRightKeyed:function(){"ltr"===this.dir&&this.input.isCursorAtEnd()&&this.autocomplete(this.menu.getTopSelectable())},_onQueryChanged:function(t,e){this._minLengthMet(e)?this.menu.update(e):this.menu.empty()},_onWhitespaceChanged:function(){this._updateHint()},_onLangDirChanged:function(t,e){this.dir!==e&&(this.dir=e,this.menu.setLanguageDirection(e))},_openIfActive:function(){this.isActive()&&this.open()},_minLengthMet:function(t){return t=e.isString(t)?t:this.input.getQuery()||"",t.length>=this.minLength},_updateHint:function(){var t,n,i,r,o,s,l;t=this.menu.getTopSelectable(),n=this.menu.getSelectableData(t),i=this.input.getInputValue(),!n||e.isBlankString(i)||this.input.hasOverflow()?this.input.clearHint():(r=a.normalizeQuery(i),o=e.escapeRegExChars(r),s=new RegExp("^(?:"+o+")(.+$)","i"),(l=s.exec(n.val))&&this.input.setHint(i+l[1]))},isEnabled:function(){return this.enabled},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},isActive:function(){return this.active},activate:function(){return!!this.isActive()||!(!this.isEnabled()||this.eventBus.before("active"))&&(this.active=!0,this.eventBus.trigger("active"),!0)},deactivate:function(){return!this.isActive()||!this.eventBus.before("idle")&&(this.active=!1,this.close(),this.eventBus.trigger("idle"),!0)},isOpen:function(){return this.menu.isOpen()},open:function(){return this.isOpen()||this.eventBus.before("open")||(this.menu.open(),this._updateHint(),this.eventBus.trigger("open")),this.isOpen()},close:function(){return this.isOpen()&&!this.eventBus.before("close")&&(this.menu.close(),this.input.clearHint(),this.input.resetInputValue(),this.eventBus.trigger("close")),!this.isOpen()},setVal:function(t){this.input.setQuery(e.toStr(t))},getVal:function(){return this.input.getQuery()},select:function(t){var e=this.menu.getSelectableData(t);return!(!e||this.eventBus.before("select",e.obj))&&(this.input.setQuery(e.val,!0),this.eventBus.trigger("select",e.obj),this.close(),!0)},autocomplete:function(t){var e,n;return e=this.input.getQuery(),n=this.menu.getSelectableData(t),!(!(n&&e!==n.val)||this.eventBus.before("autocomplete",n.obj))&&(this.input.setQuery(n.val),this.eventBus.trigger("autocomplete",n.obj),!0)},moveCursor:function(t){var e,n,i,r;return e=this.input.getQuery(),n=this.menu.selectableRelativeToCursor(t),i=this.menu.getSelectableData(n),r=i?i.obj:null,!(this._minLengthMet()&&this.menu.update(e))&&!this.eventBus.before("cursorchange",r)&&(this.menu.setCursor(n),i?this.input.setInputValue(i.val):(this.input.resetInputValue(),this._updateHint()),this.eventBus.trigger("cursorchange",r),!0)},destroy:function(){this.input.destroy(),this.menu.destroy()}}),n}();!function(){"use strict";function r(e,n){e.each(function(){var e,i=t(this);(e=i.data(g.typeahead))&&n(e,i)})}function o(t,e){return t.clone().addClass(e.classes.hint).removeData().css(e.css.hint).css(h(t)).prop("readonly",!0).removeAttr("id name placeholder required").attr({autocomplete:"off",spellcheck:"false",tabindex:-1})}function s(t,e){t.data(g.attrs,{dir:t.attr("dir"),autocomplete:t.attr("autocomplete"),spellcheck:t.attr("spellcheck"),style:t.attr("style")}),t.addClass(e.classes.input).attr({autocomplete:"off",spellcheck:!1});try{!t.attr("dir")&&t.attr("dir","auto")}catch(t){}return t}function h(t){return{backgroundAttachment:t.css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")}}function d(t){var n,i;n=t.data(g.www),i=t.parent().filter(n.selectors.wrapper),e.each(t.data(g.attrs),function(n,i){e.isUndefined(n)?t.removeAttr(i):t.attr(i,n)}),t.removeData(g.typeahead).removeData(g.www).removeData(g.attr).removeClass(n.classes.input),i.length&&(t.detach().insertAfter(i),i.remove())}function f(n){var i,r;return i=e.isJQuery(n)||e.isElement(n),r=i?t(n).first():[],r.length?r:null}var p,g,m;p=t.fn.typeahead,g={www:"tt-www",attrs:"tt-attrs",typeahead:"tt-typeahead"},m={initialize:function(r,h){function d(){var n,d,m,v,y,b,x,w,_,S,C;e.each(h,function(t){t.highlight=!!r.highlight}),n=t(this),d=t(p.html.wrapper),m=f(r.hint),v=f(r.menu),y=!1!==r.hint&&!m,b=!1!==r.menu&&!v,y&&(m=o(n,p)),b&&(v=t(p.html.menu).css(p.css.menu)),m&&m.val(""),n=s(n,p),(y||b)&&(d.css(p.css.wrapper),n.css(y?p.css.input:p.css.inputWithNoHint),n.wrap(d).parent().prepend(y?m:null).append(b?v:null)),C=b?c:l,x=new i({el:n}),w=new a({hint:m,input:n},p),_=new C({node:v,datasets:h},p),S=new u({input:w,menu:_,eventBus:x,minLength:r.minLength},p),n.data(g.www,p),n.data(g.typeahead,S)}var p;return h=e.isArray(h)?h:[].slice.call(arguments,1),r=r||{},p=n(r.classNames),this.each(d)},isEnabled:function(){var t;return r(this.first(),function(e){t=e.isEnabled()}),t},enable:function(){return r(this,function(t){t.enable()}),this},disable:function(){return r(this,function(t){t.disable()}),this},isActive:function(){var t;return r(this.first(),function(e){t=e.isActive()}),t},activate:function(){return r(this,function(t){t.activate()}),this},deactivate:function(){return r(this,function(t){t.deactivate()}),this},isOpen:function(){var t;return r(this.first(),function(e){t=e.isOpen()}),t},open:function(){return r(this,function(t){t.open()}),this},close:function(){return r(this,function(t){t.close()}),this},select:function(e){var n=!1,i=t(e);return r(this.first(),function(t){n=t.select(i)}),n},autocomplete:function(e){var n=!1,i=t(e);return r(this.first(),function(t){n=t.autocomplete(i)}),n},moveCursor:function(t){var e=!1;return r(this.first(),function(n){e=n.moveCursor(t)}),e},val:function(t){var e;return arguments.length?(r(this,function(e){e.setVal(t)}),this):(r(this.first(),function(t){e=t.getVal()}),e)},destroy:function(){return r(this,function(t,e){d(e),t.destroy()}),this}},t.fn.typeahead=function(t){return m[t]?m[t].apply(this,[].slice.call(arguments,1)):m.initialize.apply(this,arguments)},t.fn.typeahead.noConflict=function(){return t.fn.typeahead=p,this}}()}),define("typeahead",["jquery"],function(t){return function(){var e;return e=function(t){return require.s.contexts._.registry["typeahead.js"].factory(t)},e.apply(t,arguments)}}(this)),define("search",["jquery","config","utils","bloodhound","typeahead"],function(t,e,n,i){!function(t){function r(e,n){var e=e.replace("%QUERY",encodeURIComponent(n)),i=t("label.active > input[name=smatch]").val();return i&&(e+="&match="+i),e}var o={_init:function(o){return o=o||{},this.each(function(){function a(t){return(t.tags||[]).push(t.name)}function s(t){var e='<div class="tt-match file type-icon '+function(t){return t.split(".").pop()}(t.name)+'"><span class="tt-label">'+n.htmlEncode(function(t){return t.split(".").slice(0,-1).join(".")}(t.name));if(t.tags){e+='<span class="tt-tags">';for(var i=0;i<t.tags.length;i++){var r=t.tags[i];e+='<span class="tt-tag">'+n.htmlEncode(r)+"</span>"}e+="</span>"}return t.title&&(e+='<div class="tt-title file">'+n.htmlEncode(t.title)+"</div>"),e+="</div>"}function l(t){var e="";if(t.file!=x||t.alias!=w){var i=t.file.split(".").pop();x=t.file,w=t.alias,e='<div class="tt-file-header type-icon '+i+'"><span class="tt-path-file">'+n.htmlEncode(t.file)+"</span></div>"}return e+p(t)}function c(t){return i.tokenizers.whitespace(t.text)}function u(t){var e="";return t.file==x&&t.alias==w||(x=t.file,w=t.alias,e='<div class="tt-file-header type-icon '+t.ext+'"><span class="tt-path-alias">'+n.htmlEncode(t.alias)+'</span>(<span class="tt-path-file">'+n.htmlEncode(t.file)+")</span></div>"),t.text&&(e+=p(t)),e}function h(t,n){for(var i=e.swish.templates,r=[],o=t.split(" "),a=[],s=0;s<o.length;s++)a.push({prefix:o[s],regex:new RegExp("_"+o[s])});for(var s=0;s<i.length;s++){var l=i[s];if(void 0!==l.arity){for(var c=0,u=!0;c<a.length&&u;c++)l.name.startsWith(a[c].prefix)||l.name.match(a[c].regex)||(u=!1);u&&r.push(l)}}n(r)}function d(t){var e='<div class="tt-match predicate';return t.type&&(e+=" "+t.type),t.mode&&(e+='" title="'+t.mode),e+='"><span class="tt-label">'+n.htmlEncode(t.name)+"/"+t.arity+"</span>",t.iso&&(e+='<span class="tt-tags">',t.iso&&(e+='<span class="tt-tag">ISO</span>'),e+="</span>"),t.summary&&(e+='<div class="tt-title file">'+n.htmlEncode(t.summary)+"</div>"),e+="</div>",e+="</div>"}function f(e,n){if(m=e,e.length<2)return[];var i=[],r=new RegExp("\\b"+e,"g");S=r,t(".prolog-editor").each(function(){for(var e=this,n=t(e).prologEditor("search",r,{max:7}),o=0;o<n.length;o++)n[o].editor=e,n[o].regex=S,i.push(n[o])}),n(i)}function p(t){var e,i=t.text;return(e=i.search(S))>20&&(i="..."+i.slice(e-17)),i.length>80&&(i=i.substring(0,80)),'<div class="tt-match source"><span class="tt-line"><span class="tt-lineno">'+t.line+'</span><span class="tt-text">'+n.htmlEncode(i)+"</span></span></div>"}function g(t){return'<div class="tt-match user">'+function(t){return t.avatar?'<img class="avatar" src="'+encodeURI(t.avatar)+'">':""}(t)+'<span class="tt-label">'+n.htmlEncode(t.name)+"</span></div>"}var m,v=t(this),y=new i({name:"files",remote:{url:e.http.locations.swish_typeahead+"?set=file&q=%QUERY",wildcard:"%QUERY"},datumTokenizer:a,queryTokenizer:i.tokenizers.whitespace});y.initialize();var b=new i({name:"store_content",limit:20,cache:!1,remote:{url:e.http.locations.swish_typeahead+"?set=store_content&q=%QUERY",replace:r},datumTokenizer:c,queryTokenizer:i.tokenizers.whitespace});b.initialize();var x=null,w=null,_=new i({name:"source",limit:15,cache:!1,query_cache_length:1,remote:{url:e.http.locations.swish_typeahead+"?set=sources&q=%QUERY",replace:r},datumTokenizer:c,queryTokenizer:i.tokenizers.whitespace});_.initialize();var S,C=new i({name:"users",limit:20,cache:!1,remote:{url:e.http.locations.swish_typeahead+"?set=user&q=%QUERY",replace:r},datumTokenizer:c,queryTokenizer:i.tokenizers.whitespace});C.initialize();var T={source:{name:"source",display:"text",source:f,templates:{suggestion:p}},sources:{name:"sources",display:"file",source:_.ttAdapter(),templates:{suggestion:u},limit:15},files:{name:"files",display:"name",source:y.ttAdapter(),templates:{suggestion:s}},store_content:{name:"store_content",display:"file",source:b.ttAdapter(),templates:{suggestion:l}},predicates:{name:"predicates",display:function(t){return t.name+"/"+t.arity},source:h,templates:{suggestion:d}},users:{name:"users",display:"name",source:C.ttAdapter(),templates:{suggestion:g}}},k=T.sources.source;T.sources.source=function(t,e){return x=null,w=null,S=new RegExp(RegExp.escape(t)),k(t,e)},v.typeahead({minLength:2,highlight:!0},function(t){for(var e=[],n=t.replace(/\s+/g," ").split(" "),i=0;i<n.length;i++)e.push(T[n[i]]);return e}(v.data("search-in"))).on("typeahead:selected typeahead:autocompleted",function(e,n){if(0==o.search)v.data("json-value",n);else if("store"==n.type)n.query&&(n.regex=new RegExp(RegExp.escape(n.query),"g"),n.showAllMatches=!0),t(e.target).closest(".swish").swish("playFile",n);else if(void 0!==n.arity)t(".swish-event-receiver").trigger("pldoc",n);else if(void 0!==n.editor&&void 0!==n.line)t(n.editor).prologEditor("gotoLine",n.line,{regex:n.regex,showAllMatches:!0});else if(void 0!==n.alias){var i=encodeURI("/"+n.alias+"/"+n.file+"."+n.ext),r={url:i,line:n.line};n.query&&(r.regex=new RegExp(RegExp.escape(n.query),"g"),r.showAllMatches=!0),t(e.target).closest(".swish").swish("playURL",r)}else v.data("json-value",n),console.log(v.data("json-value"))}),0!=o.search&&v.closest("form").submit(function(t){var e=v.data("json-value"),n=v.val();return e&&e.datum&&e.datum.label==n||(e=n),v.val(""),v.data("json-value",null),v.search("search",e),!1})})},search:function(t){alert("Full search not yet implemented\nPlease select from auto completion list")}};t.fn.search=function(e){return o[e]?o[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.search"):o._init.apply(this,arguments)}}(jQuery),RegExp.escape=function(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}}),function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define("cm/lib/codemirror",e):t.CodeMirror=e()}(this,function(){"use strict";function t(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}function e(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firstChild);return t}function n(t,n){return e(t).appendChild(n)}function i(t,e,n,i){var r=document.createElement(t);if(n&&(r.className=n),i&&(r.style.cssText=i),
-"string"==typeof e)r.appendChild(document.createTextNode(e));else if(e)for(var o=0;o<e.length;++o)r.appendChild(e[o]);return r}function r(t,e,n,r){var o=i(t,e,n,r);return o.setAttribute("role","presentation"),o}function o(t,e){if(3==e.nodeType&&(e=e.parentNode),t.contains)return t.contains(e);do{if(11==e.nodeType&&(e=e.host),e==t)return!0}while(e=e.parentNode)}function a(){var t;try{t=document.activeElement}catch(e){t=document.body||null}for(;t&&t.shadowRoot&&t.shadowRoot.activeElement;)t=t.shadowRoot.activeElement;return t}function s(e,n){var i=e.className;t(n).test(i)||(e.className+=(i?" ":"")+n)}function l(e,n){for(var i=e.split(" "),r=0;r<i.length;r++)i[r]&&!t(i[r]).test(n)&&(n+=" "+i[r]);return n}function c(t){var e=Array.prototype.slice.call(arguments,1);return function(){return t.apply(null,e)}}function u(t,e,n){e||(e={});for(var i in t)!t.hasOwnProperty(i)||!1===n&&e.hasOwnProperty(i)||(e[i]=t[i]);return e}function h(t,e,n,i,r){null==e&&-1==(e=t.search(/[^\s\u00a0]/))&&(e=t.length);for(var o=i||0,a=r||0;;){var s=t.indexOf("\t",o);if(s<0||s>=e)return a+(e-o);a+=s-o,a+=n-a%n,o=s+1}}function d(t,e){for(var n=0;n<t.length;++n)if(t[n]==e)return n;return-1}function f(t,e,n){for(var i=0,r=0;;){var o=t.indexOf("\t",i);-1==o&&(o=t.length);var a=o-i;if(o==t.length||r+a>=e)return i+Math.min(a,e-r);if(r+=o-i,r+=n-r%n,i=o+1,r>=e)return i}}function p(t){for(;Xa.length<=t;)Xa.push(g(Xa)+" ");return Xa[t]}function g(t){return t[t.length-1]}function m(t,e){for(var n=[],i=0;i<t.length;i++)n[i]=e(t[i],i);return n}function v(t,e,n){for(var i=0,r=n(e);i<t.length&&n(t[i])<=r;)i++;t.splice(i,0,e)}function y(){}function b(t,e){var n;return Object.create?n=Object.create(t):(y.prototype=t,n=new y),e&&u(e,n),n}function x(t){return/\w/.test(t)||t>"€"&&(t.toUpperCase()!=t.toLowerCase()||Ya.test(t))}function w(t,e){return e?!!(e.source.indexOf("\\w")>-1&&x(t))||e.test(t):x(t)}function _(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;return!0}function S(t){return t.charCodeAt(0)>=768&&Qa.test(t)}function C(t,e,n){for(;(n<0?e>0:e<t.length)&&S(t.charAt(e));)e+=n;return e}function T(t,e,n){for(var i=e>n?-1:1;;){if(e==n)return e;var r=(e+n)/2,o=i<0?Math.ceil(r):Math.floor(r);if(o==e)return t(o)?e:n;t(o)?n=o:e=o+i}}function k(t,e,n){var o=this;this.input=n,o.scrollbarFiller=i("div",null,"CodeMirror-scrollbar-filler"),o.scrollbarFiller.setAttribute("cm-not-content","true"),o.gutterFiller=i("div",null,"CodeMirror-gutter-filler"),o.gutterFiller.setAttribute("cm-not-content","true"),o.lineDiv=r("div",null,"CodeMirror-code"),o.selectionDiv=i("div",null,null,"position: relative; z-index: 1"),o.cursorDiv=i("div",null,"CodeMirror-cursors"),o.measure=i("div",null,"CodeMirror-measure"),o.lineMeasure=i("div",null,"CodeMirror-measure"),o.lineSpace=r("div",[o.measure,o.lineMeasure,o.selectionDiv,o.cursorDiv,o.lineDiv],null,"position: relative; outline: none");var a=r("div",[o.lineSpace],"CodeMirror-lines");o.mover=i("div",[a],null,"position: relative"),o.sizer=i("div",[o.mover],"CodeMirror-sizer"),o.sizerWidth=null,o.heightForcer=i("div",null,null,"position: absolute; height: "+Ba+"px; width: 1px;"),o.gutters=i("div",null,"CodeMirror-gutters"),o.lineGutter=null,o.scroller=i("div",[o.sizer,o.heightForcer,o.gutters],"CodeMirror-scroll"),o.scroller.setAttribute("tabIndex","-1"),o.wrapper=i("div",[o.scrollbarFiller,o.gutterFiller,o.scroller],"CodeMirror"),ba&&xa<8&&(o.gutters.style.zIndex=-1,o.scroller.style.paddingRight=0),wa||ga&&La||(o.scroller.draggable=!0),t&&(t.appendChild?t.appendChild(o.wrapper):t(o.wrapper)),o.viewFrom=o.viewTo=e.first,o.reportedViewFrom=o.reportedViewTo=e.first,o.view=[],o.renderedView=null,o.externalMeasured=null,o.viewOffset=0,o.lastWrapHeight=o.lastWrapWidth=0,o.updateLineNumbers=null,o.nativeBarWidth=o.barHeight=o.barWidth=0,o.scrollbarsClipped=!1,o.lineNumWidth=o.lineNumInnerWidth=o.lineNumChars=null,o.alignWidgets=!1,o.cachedCharWidth=o.cachedTextHeight=o.cachedPaddingH=null,o.maxLine=null,o.maxLineLength=0,o.maxLineChanged=!1,o.wheelDX=o.wheelDY=o.wheelStartX=o.wheelStartY=null,o.shift=!1,o.selForContextMenu=null,o.activeTouch=null,n.init(o)}function A(t,e){if((e-=t.first)<0||e>=t.size)throw new Error("There is no line "+(e+t.first)+" in the document.");for(var n=t;!n.lines;)for(var i=0;;++i){var r=n.children[i],o=r.chunkSize();if(e<o){n=r;break}e-=o}return n.lines[e]}function M(t,e,n){var i=[],r=e.line;return t.iter(e.line,n.line+1,function(t){var o=t.text;r==n.line&&(o=o.slice(0,n.ch)),r==e.line&&(o=o.slice(e.ch)),i.push(o),++r}),i}function E(t,e,n){var i=[];return t.iter(e,n,function(t){i.push(t.text)}),i}function L(t,e){var n=e-t.height;if(n)for(var i=t;i;i=i.parent)i.height+=n}function P(t){if(null==t.parent)return null;for(var e=t.parent,n=d(e.lines,t),i=e.parent;i;e=i,i=i.parent)for(var r=0;i.children[r]!=e;++r)n+=i.children[r].chunkSize();return n+e.first}function D(t,e){var n=t.first;t:do{for(var i=0;i<t.children.length;++i){var r=t.children[i],o=r.height;if(e<o){t=r;continue t}e-=o,n+=r.chunkSize()}return n}while(!t.lines);for(var a=0;a<t.lines.length;++a){var s=t.lines[a],l=s.height;if(e<l)break;e-=l}return n+a}function N(t,e){return e>=t.first&&e<t.first+t.size}function O(t,e){return String(t.lineNumberFormatter(e+t.firstLineNumber))}function R(t,e,n){if(void 0===n&&(n=null),!(this instanceof R))return new R(t,e,n);this.line=t,this.ch=e,this.sticky=n}function I(t,e){return t.line-e.line||t.ch-e.ch}function F(t,e){return t.sticky==e.sticky&&0==I(t,e)}function j(t){return R(t.line,t.ch)}function H(t,e){return I(t,e)<0?e:t}function z(t,e){return I(t,e)<0?t:e}function V(t,e){return Math.max(t.first,Math.min(e,t.first+t.size-1))}function q(t,e){if(e.line<t.first)return R(t.first,0);var n=t.first+t.size-1;return e.line>n?R(n,A(t,n).text.length):B(e,A(t,e.line).text.length)}function B(t,e){var n=t.ch;return null==n||n>e?R(t.line,e):n<0?R(t.line,0):t}function G(t,e){for(var n=[],i=0;i<e.length;i++)n[i]=q(t,e[i]);return n}function $(){Za=!0}function W(){Ka=!0}function U(t,e,n){this.marker=t,this.from=e,this.to=n}function X(t,e){if(t)for(var n=0;n<t.length;++n){var i=t[n];if(i.marker==e)return i}}function Y(t,e){for(var n,i=0;i<t.length;++i)t[i]!=e&&(n||(n=[])).push(t[i]);return n}function Q(t,e){t.markedSpans=t.markedSpans?t.markedSpans.concat([e]):[e],e.marker.attachLine(t)}function Z(t,e,n){var i;if(t)for(var r=0;r<t.length;++r){var o=t[r],a=o.marker,s=null==o.from||(a.inclusiveLeft?o.from<=e:o.from<e);if(s||o.from==e&&"bookmark"==a.type&&(!n||!o.marker.insertLeft)){var l=null==o.to||(a.inclusiveRight?o.to>=e:o.to>e);(i||(i=[])).push(new U(a,o.from,l?null:o.to))}}return i}function K(t,e,n){var i;if(t)for(var r=0;r<t.length;++r){var o=t[r],a=o.marker,s=null==o.to||(a.inclusiveRight?o.to>=e:o.to>e);if(s||o.from==e&&"bookmark"==a.type&&(!n||o.marker.insertLeft)){var l=null==o.from||(a.inclusiveLeft?o.from<=e:o.from<e);(i||(i=[])).push(new U(a,l?null:o.from-e,null==o.to?null:o.to-e))}}return i}function J(t,e){if(e.full)return null;var n=N(t,e.from.line)&&A(t,e.from.line).markedSpans,i=N(t,e.to.line)&&A(t,e.to.line).markedSpans;if(!n&&!i)return null;var r=e.from.ch,o=e.to.ch,a=0==I(e.from,e.to),s=Z(n,r,a),l=K(i,o,a),c=1==e.text.length,u=g(e.text).length+(c?r:0);if(s)for(var h=0;h<s.length;++h){var d=s[h];if(null==d.to){var f=X(l,d.marker);f?c&&(d.to=null==f.to?null:f.to+u):d.to=r}}if(l)for(var p=0;p<l.length;++p){var m=l[p];if(null!=m.to&&(m.to+=u),null==m.from){var v=X(s,m.marker);v||(m.from=u,c&&(s||(s=[])).push(m))}else m.from+=u,c&&(s||(s=[])).push(m)}s&&(s=tt(s)),l&&l!=s&&(l=tt(l));var y=[s];if(!c){var b,x=e.text.length-2;if(x>0&&s)for(var w=0;w<s.length;++w)null==s[w].to&&(b||(b=[])).push(new U(s[w].marker,null,null));for(var _=0;_<x;++_)y.push(b);y.push(l)}return y}function tt(t){for(var e=0;e<t.length;++e){var n=t[e];null!=n.from&&n.from==n.to&&!1!==n.marker.clearWhenEmpty&&t.splice(e--,1)}return t.length?t:null}function et(t,e,n){var i=null;if(t.iter(e.line,n.line+1,function(t){if(t.markedSpans)for(var e=0;e<t.markedSpans.length;++e){var n=t.markedSpans[e].marker;!n.readOnly||i&&-1!=d(i,n)||(i||(i=[])).push(n)}}),!i)return null;for(var r=[{from:e,to:n}],o=0;o<i.length;++o)for(var a=i[o],s=a.find(0),l=0;l<r.length;++l){var c=r[l];if(!(I(c.to,s.from)<0||I(c.from,s.to)>0)){var u=[l,1],h=I(c.from,s.from),f=I(c.to,s.to);(h<0||!a.inclusiveLeft&&!h)&&u.push({from:c.from,to:s.from}),(f>0||!a.inclusiveRight&&!f)&&u.push({from:s.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}function nt(t){var e=t.markedSpans;if(e){for(var n=0;n<e.length;++n)e[n].marker.detachLine(t);t.markedSpans=null}}function it(t,e){if(e){for(var n=0;n<e.length;++n)e[n].marker.attachLine(t);t.markedSpans=e}}function rt(t){return t.inclusiveLeft?-1:0}function ot(t){return t.inclusiveRight?1:0}function at(t,e){var n=t.lines.length-e.lines.length;if(0!=n)return n;var i=t.find(),r=e.find(),o=I(i.from,r.from)||rt(t)-rt(e);if(o)return-o;var a=I(i.to,r.to)||ot(t)-ot(e);return a||e.id-t.id}function st(t,e){var n,i=Ka&&t.markedSpans;if(i)for(var r=void 0,o=0;o<i.length;++o)r=i[o],r.marker.collapsed&&null==(e?r.from:r.to)&&(!n||at(n,r.marker)<0)&&(n=r.marker);return n}function lt(t){return st(t,!0)}function ct(t){return st(t,!1)}function ut(t,e){var n,i=Ka&&t.markedSpans;if(i)for(var r=0;r<i.length;++r){var o=i[r];o.marker.collapsed&&(null==o.from||o.from<e)&&(null==o.to||o.to>e)&&(!n||at(n,o.marker)<0)&&(n=o.marker)}return n}function ht(t,e,n,i,r){var o=A(t,e),a=Ka&&o.markedSpans;if(a)for(var s=0;s<a.length;++s){var l=a[s];if(l.marker.collapsed){var c=l.marker.find(0),u=I(c.from,n)||rt(l.marker)-rt(r),h=I(c.to,i)||ot(l.marker)-ot(r);if(!(u>=0&&h<=0||u<=0&&h>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?I(c.to,n)>=0:I(c.to,n)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?I(c.from,i)<=0:I(c.from,i)<0)))return!0}}}function dt(t){for(var e;e=lt(t);)t=e.find(-1,!0).line;return t}function ft(t){for(var e;e=ct(t);)t=e.find(1,!0).line;return t}function pt(t){for(var e,n;e=ct(t);)t=e.find(1,!0).line,(n||(n=[])).push(t);return n}function gt(t,e){var n=A(t,e),i=dt(n);return n==i?e:P(i)}function mt(t,e){if(e>t.lastLine())return e;var n,i=A(t,e);if(!vt(t,i))return e;for(;n=ct(i);)i=n.find(1,!0).line;return P(i)+1}function vt(t,e){var n=Ka&&e.markedSpans;if(n)for(var i=void 0,r=0;r<n.length;++r)if(i=n[r],i.marker.collapsed){if(null==i.from)return!0;if(!i.marker.widgetNode&&0==i.from&&i.marker.inclusiveLeft&&yt(t,e,i))return!0}}function yt(t,e,n){if(null==n.to){var i=n.marker.find(1,!0);return yt(t,i.line,X(i.line.markedSpans,n.marker))}if(n.marker.inclusiveRight&&n.to==e.text.length)return!0;for(var r=void 0,o=0;o<e.markedSpans.length;++o)if(r=e.markedSpans[o],r.marker.collapsed&&!r.marker.widgetNode&&r.from==n.to&&(null==r.to||r.to!=n.from)&&(r.marker.inclusiveLeft||n.marker.inclusiveRight)&&yt(t,e,r))return!0}function bt(t){t=dt(t);for(var e=0,n=t.parent,i=0;i<n.lines.length;++i){var r=n.lines[i];if(r==t)break;e+=r.height}for(var o=n.parent;o;n=o,o=n.parent)for(var a=0;a<o.children.length;++a){var s=o.children[a];if(s==n)break;e+=s.height}return e}function xt(t){if(0==t.height)return 0;for(var e,n=t.text.length,i=t;e=lt(i);){var r=e.find(0,!0);i=r.from.line,n+=r.from.ch-r.to.ch}for(i=t;e=ct(i);){var o=e.find(0,!0);n-=i.text.length-o.from.ch,i=o.to.line,n+=i.text.length-o.to.ch}return n}function wt(t){var e=t.display,n=t.doc;e.maxLine=A(n,n.first),e.maxLineLength=xt(e.maxLine),e.maxLineChanged=!0,n.iter(function(t){var n=xt(t);n>e.maxLineLength&&(e.maxLineLength=n,e.maxLine=t)})}function _t(t,e,n,i){if(!t)return i(e,n,"ltr",0);for(var r=!1,o=0;o<t.length;++o){var a=t[o];(a.from<n&&a.to>e||e==n&&a.to==e)&&(i(Math.max(a.from,e),Math.min(a.to,n),1==a.level?"rtl":"ltr",o),r=!0)}r||i(e,n,"ltr")}function St(t,e,n){var i;Ja=null;for(var r=0;r<t.length;++r){var o=t[r];if(o.from<e&&o.to>e)return r;o.to==e&&(o.from!=o.to&&"before"==n?i=r:Ja=r),o.from==e&&(o.from!=o.to&&"before"!=n?i=r:Ja=r)}return null!=i?i:Ja}function Ct(t,e){var n=t.order;return null==n&&(n=t.order=ts(t.text,e)),n}function Tt(t,e){return t._handlers&&t._handlers[e]||es}function kt(t,e,n){if(t.removeEventListener)t.removeEventListener(e,n,!1);else if(t.detachEvent)t.detachEvent("on"+e,n);else{var i=t._handlers,r=i&&i[e];if(r){var o=d(r,n);o>-1&&(i[e]=r.slice(0,o).concat(r.slice(o+1)))}}}function At(t,e){var n=Tt(t,e);if(n.length)for(var i=Array.prototype.slice.call(arguments,2),r=0;r<n.length;++r)n[r].apply(null,i)}function Mt(t,e,n){return"string"==typeof e&&(e={type:e,preventDefault:function(){this.defaultPrevented=!0}}),At(t,n||e.type,t,e),Ot(e)||e.codemirrorIgnore}function Et(t){var e=t._handlers&&t._handlers.cursorActivity;if(e)for(var n=t.curOp.cursorActivityHandlers||(t.curOp.cursorActivityHandlers=[]),i=0;i<e.length;++i)-1==d(n,e[i])&&n.push(e[i])}function Lt(t,e){return Tt(t,e).length>0}function Pt(t){t.prototype.on=function(t,e){ns(this,t,e)},t.prototype.off=function(t,e){kt(this,t,e)}}function Dt(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function Nt(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}function Ot(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.returnValue}function Rt(t){Dt(t),Nt(t)}function It(t){return t.target||t.srcElement}function Ft(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?e=3:4&t.button&&(e=2)),Pa&&t.ctrlKey&&1==e&&(e=3),e}function jt(t){if(null==Va){var e=i("span","​");n(t,i("span",[e,document.createTextNode("x")])),0!=t.firstChild.offsetHeight&&(Va=e.offsetWidth<=1&&e.offsetHeight>2&&!(ba&&xa<8))}var r=Va?i("span","​"):i("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return r.setAttribute("cm-text",""),r}function Ht(t){if(null!=qa)return qa;var i=n(t,document.createTextNode("AخA")),r=Ra(i,0,1).getBoundingClientRect(),o=Ra(i,1,2).getBoundingClientRect();return e(t),!(!r||r.left==r.right)&&(qa=o.right-r.right<3)}function zt(t){if(null!=ss)return ss;var e=n(t,i("span","x")),r=e.getBoundingClientRect(),o=Ra(e,0,1).getBoundingClientRect();return ss=Math.abs(r.left-o.left)>1}function Vt(t,e){arguments.length>2&&(e.dependencies=Array.prototype.slice.call(arguments,2)),ls[t]=e}function qt(t,e){cs[t]=e}function Bt(t){if("string"==typeof t&&cs.hasOwnProperty(t))t=cs[t];else if(t&&"string"==typeof t.name&&cs.hasOwnProperty(t.name)){var e=cs[t.name];"string"==typeof e&&(e={name:e}),t=b(e,t),t.name=e.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return Bt("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return Bt("application/json")}return"string"==typeof t?{name:t}:t||{name:"null"}}function Gt(t,e){e=Bt(e);var n=ls[e.name];if(!n)return Gt(t,"text/plain");var i=n(t,e);if(us.hasOwnProperty(e.name)){var r=us[e.name];for(var o in r)r.hasOwnProperty(o)&&(i.hasOwnProperty(o)&&(i["_"+o]=i[o]),i[o]=r[o])}if(i.name=e.name,e.helperType&&(i.helperType=e.helperType),e.modeProps)for(var a in e.modeProps)i[a]=e.modeProps[a];return i}function $t(t,e){u(e,us.hasOwnProperty(t)?us[t]:us[t]={})}function Wt(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e);var n={};for(var i in e){var r=e[i];r instanceof Array&&(r=r.concat([])),n[i]=r}return n}function Ut(t,e){for(var n;t.innerMode&&(n=t.innerMode(e))&&n.mode!=t;)e=n.state,t=n.mode;return n||{mode:t,state:e}}function Xt(t,e,n){return!t.startState||t.startState(e,n)}function Yt(t,e,n,i){var r=[t.state.modeGen],o={};ie(t,e.text,t.doc.mode,n,function(t,e){return r.push(t,e)},o,i);for(var a=n.state,s=0;s<t.state.overlays.length;++s)!function(i){n.baseTokens=r;var s=t.state.overlays[i],l=1,c=0;n.state=!0,ie(t,e.text,s.mode,n,function(t,e){for(var n=l;c<t;){var i=r[l];i>t&&r.splice(l,1,t,r[l+1],i),l+=2,c=Math.min(t,i)}if(e)if(s.opaque)r.splice(n,l-n,t,"overlay "+e),l=n+2;else for(;n<l;n+=2){var o=r[n+1];r[n+1]=(o?o+" ":"")+"overlay "+e}},o),n.state=a,n.baseTokens=null,n.baseTokenPos=1}(s);return{styles:r,classes:o.bgClass||o.textClass?o:null}}function Qt(t,e,n){if(!e.styles||e.styles[0]!=t.state.modeGen){var i=Zt(t,P(e)),r=e.text.length>t.options.maxHighlightLength&&Wt(t.doc.mode,i.state),o=Yt(t,e,i);r&&(i.state=r),e.stateAfter=i.save(!r),e.styles=o.styles,o.classes?e.styleClasses=o.classes:e.styleClasses&&(e.styleClasses=null),n===t.doc.highlightFrontier&&(t.doc.modeFrontier=Math.max(t.doc.modeFrontier,++t.doc.highlightFrontier))}return e.styles}function Zt(t,e,n){var i=t.doc,r=t.display;if(!i.mode.startState)return new fs(i,!0,e);var o=re(t,e,n),a=o>i.first&&A(i,o-1).stateAfter,s=a?fs.fromSaved(i,a,o):new fs(i,Xt(i.mode),o);return i.iter(o,e,function(n){Kt(t,n.text,s);var i=s.line;n.stateAfter=i==e-1||i%5==0||i>=r.viewFrom&&i<r.viewTo?s.save():null,s.nextLine()}),n&&(i.modeFrontier=s.line),s}function Kt(t,e,n,i){var r=t.doc.mode,o=new hs(e,t.options.tabSize,n);for(o.start=o.pos=i||0,""==e&&Jt(r,n.state);!o.eol();)te(r,o,n.state),o.start=o.pos}function Jt(t,e){if(t.blankLine)return t.blankLine(e);if(t.innerMode){var n=Ut(t,e);return n.mode.blankLine?n.mode.blankLine(n.state):void 0}}function te(t,e,n,i){for(var r=0;r<10;r++){i&&(i[0]=Ut(t,n).mode);var o=t.token(e,n);if(e.pos>e.start)return o}throw new Error("Mode "+t.name+" failed to advance stream.")}function ee(t,e,n,i){var r,o=t.doc,a=o.mode;e=q(o,e);var s,l=A(o,e.line),c=Zt(t,e.line,n),u=new hs(l.text,t.options.tabSize,c);for(i&&(s=[]);(i||u.pos<e.ch)&&!u.eol();)u.start=u.pos,r=te(a,u,c.state),i&&s.push(new ps(u,r,Wt(o.mode,c.state)));return i?s:new ps(u,r,c.state)}function ne(t,e){if(t)for(;;){var n=t.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!n)break;t=t.slice(0,n.index)+t.slice(n.index+n[0].length);var i=n[1]?"bgClass":"textClass";null==e[i]?e[i]=n[2]:new RegExp("(?:^|s)"+n[2]+"(?:$|s)").test(e[i])||(e[i]+=" "+n[2])}return t}function ie(t,e,n,i,r,o,a){var s=n.flattenSpans;null==s&&(s=t.options.flattenSpans);var l,c=0,u=null,h=new hs(e,t.options.tabSize,i),d=t.options.addModeClass&&[null];for(""==e&&ne(Jt(n,i.state),o);!h.eol();){if(h.pos>t.options.maxHighlightLength?(s=!1,a&&Kt(t,e,i,h.pos),h.pos=e.length,l=null):l=ne(te(n,h,i.state,d),o),d){var f=d[0].name;f&&(l="m-"+(l?f+" "+l:f))}if(!s||u!=l){for(;c<h.start;)c=Math.min(h.start,c+5e3),r(c,u);u=l}h.start=h.pos}for(;c<h.pos;){var p=Math.min(h.pos,c+5e3);r(p,u),c=p}}function re(t,e,n){for(var i,r,o=t.doc,a=n?-1:e-(t.doc.mode.innerMode?1e3:100),s=e;s>a;--s){if(s<=o.first)return o.first;var l=A(o,s-1),c=l.stateAfter;if(c&&(!n||s+(c instanceof ds?c.lookAhead:0)<=o.modeFrontier))return s;var u=h(l.text,null,t.options.tabSize);(null==r||i>u)&&(r=s-1,i=u)}return r}function oe(t,e){if(t.modeFrontier=Math.min(t.modeFrontier,e),!(t.highlightFrontier<e-10)){for(var n=t.first,i=e-1;i>n;i--){var r=A(t,i).stateAfter;if(r&&(!(r instanceof ds)||i+r.lookAhead<e)){n=i+1;break}}t.highlightFrontier=Math.min(t.highlightFrontier,n)}}function ae(t,e,n,i){t.text=e,t.stateAfter&&(t.stateAfter=null),t.styles&&(t.styles=null),null!=t.order&&(t.order=null),nt(t),it(t,n);var r=i?i(t):1;r!=t.height&&L(t,r)}function se(t){t.parent=null,nt(t)}function le(t,e){if(!t||/^\s*$/.test(t))return null;var n=e.addModeClass?ys:vs;return n[t]||(n[t]=t.replace(/\S+/g,"cm-$&"))}function ce(t,e){var n=r("span",null,null,wa?"padding-right: .1px":null),i={pre:r("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:t,trailingSpace:!1,splitSpaces:t.getOption("lineWrapping")};e.measure={};for(var o=0;o<=(e.rest?e.rest.length:0);o++){var a=o?e.rest[o-1]:e.line,s=void 0;i.pos=0,i.addToken=he,Ht(t.display.measure)&&(s=Ct(a,t.doc.direction))&&(i.addToken=fe(i.addToken,s)),i.map=[];ge(a,i,Qt(t,a,e!=t.display.externalMeasured&&P(a))),a.styleClasses&&(a.styleClasses.bgClass&&(i.bgClass=l(a.styleClasses.bgClass,i.bgClass||"")),a.styleClasses.textClass&&(i.textClass=l(a.styleClasses.textClass,i.textClass||""))),0==i.map.length&&i.map.push(0,0,i.content.appendChild(jt(t.display.measure))),0==o?(e.measure.map=i.map,e.measure.cache={}):((e.measure.maps||(e.measure.maps=[])).push(i.map),(e.measure.caches||(e.measure.caches=[])).push({}))}if(wa){var c=i.content.lastChild;(/\bcm-tab\b/.test(c.className)||c.querySelector&&c.querySelector(".cm-tab"))&&(i.content.className="cm-tab-wrap-hack")}return At(t,"renderLine",t,e.line,i.pre),i.pre.className&&(i.textClass=l(i.pre.className,i.textClass||"")),i}function ue(t){var e=i("span","•","cm-invalidchar");return e.title="\\u"+t.charCodeAt(0).toString(16),e.setAttribute("aria-label",e.title),e}function he(t,e,n,r,o,a,s){if(e){var l,c=t.splitSpaces?de(e,t.trailingSpace):e,u=t.cm.state.specialChars,h=!1;if(u.test(e)){l=document.createDocumentFragment();for(var d=0;;){u.lastIndex=d;var f=u.exec(e),g=f?f.index-d:e.length-d;if(g){var m=document.createTextNode(c.slice(d,d+g));ba&&xa<9?l.appendChild(i("span",[m])):l.appendChild(m),t.map.push(t.pos,t.pos+g,m),t.col+=g,t.pos+=g}if(!f)break;d+=g+1;var v=void 0;if("\t"==f[0]){var y=t.cm.options.tabSize,b=y-t.col%y;v=l.appendChild(i("span",p(b),"cm-tab")),v.setAttribute("role","presentation"),v.setAttribute("cm-text","\t"),t.col+=b}else"\r"==f[0]||"\n"==f[0]?(v=l.appendChild(i("span","\r"==f[0]?"␍":"␤","cm-invalidchar")),v.setAttribute("cm-text",f[0]),t.col+=1):(v=t.cm.options.specialCharPlaceholder(f[0]),v.setAttribute("cm-text",f[0]),ba&&xa<9?l.appendChild(i("span",[v])):l.appendChild(v),t.col+=1);t.map.push(t.pos,t.pos+1,v),t.pos++}}else t.col+=e.length,l=document.createTextNode(c),t.map.push(t.pos,t.pos+e.length,l),ba&&xa<9&&(h=!0),t.pos+=e.length;if(t.trailingSpace=32==c.charCodeAt(e.length-1),n||r||o||h||a){var x=n||"";r&&(x+=r),o&&(x+=o);var w=i("span",[l],x,a);if(s)for(var _ in s)s.hasOwnProperty(_)&&"style"!=_&&"class"!=_&&w.setAttribute(_,s[_]);return t.content.appendChild(w)}t.content.appendChild(l)}}function de(t,e){if(t.length>1&&!/  /.test(t))return t;for(var n=e,i="",r=0;r<t.length;r++){var o=t.charAt(r);" "!=o||!n||r!=t.length-1&&32!=t.charCodeAt(r+1)||(o=" "),i+=o,n=" "==o}return i}function fe(t,e){return function(n,i,r,o,a,s,l){r=r?r+" cm-force-border":"cm-force-border";for(var c=n.pos,u=c+i.length;;){for(var h=void 0,d=0;d<e.length&&(h=e[d],!(h.to>c&&h.from<=c));d++);if(h.to>=u)return t(n,i,r,o,a,s,l);t(n,i.slice(0,h.to-c),r,o,null,s,l),o=null,i=i.slice(h.to-c),c=h.to}}}function pe(t,e,n,i){var r=!i&&n.widgetNode;r&&t.map.push(t.pos,t.pos+e,r),!i&&t.cm.display.input.needsContentAttribute&&(r||(r=t.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",n.id)),r&&(t.cm.display.input.setUneditable(r),t.content.appendChild(r)),t.pos+=e,t.trailingSpace=!1}function ge(t,e,n){var i=t.markedSpans,r=t.text,o=0;if(i)for(var a,s,l,c,u,h,d,f=r.length,p=0,g=1,m="",v=0;;){if(v==p){l=c=u=s="",d=null,h=null,v=1/0;for(var y=[],b=void 0,x=0;x<i.length;++x){var w=i[x],_=w.marker;if("bookmark"==_.type&&w.from==p&&_.widgetNode)y.push(_);else if(w.from<=p&&(null==w.to||w.to>p||_.collapsed&&w.to==p&&w.from==p)){if(null!=w.to&&w.to!=p&&v>w.to&&(v=w.to,c=""),_.className&&(l+=" "+_.className),_.css&&(s=(s?s+";":"")+_.css),_.startStyle&&w.from==p&&(u+=" "+_.startStyle),_.endStyle&&w.to==v&&(b||(b=[])).push(_.endStyle,w.to),_.title&&((d||(d={})).title=_.title),_.attributes)for(var S in _.attributes)(d||(d={}))[S]=_.attributes[S];_.collapsed&&(!h||at(h.marker,_)<0)&&(h=w)}else w.from>p&&v>w.from&&(v=w.from)}if(b)for(var C=0;C<b.length;C+=2)b[C+1]==v&&(c+=" "+b[C]);if(!h||h.from==p)for(var T=0;T<y.length;++T)pe(e,0,y[T]);if(h&&(h.from||0)==p){if(pe(e,(null==h.to?f+1:h.to)-p,h.marker,null==h.from),null==h.to)return;h.to==p&&(h=!1)}}if(p>=f)break;for(var k=Math.min(f,v);;){if(m){var A=p+m.length;if(!h){var M=A>k?m.slice(0,k-p):m;e.addToken(e,M,a?a+l:l,u,p+M.length==v?c:"",s,d)}if(A>=k){m=m.slice(k-p),p=k;break}p=A,u=""}m=r.slice(o,o=n[g++]),a=le(n[g++],e.cm.options)}}else for(var E=1;E<n.length;E+=2)e.addToken(e,r.slice(o,o=n[E]),le(n[E+1],e.cm.options))}function me(t,e,n){this.line=e,this.rest=pt(e),this.size=this.rest?P(g(this.rest))-n+1:1,this.node=this.text=null,this.hidden=vt(t,e)}function ve(t,e,n){for(var i,r=[],o=e;o<n;o=i){var a=new me(t.doc,A(t.doc,o),o);i=o+a.size,r.push(a)}return r}function ye(t){bs?bs.ops.push(t):t.ownsGroup=bs={ops:[t],delayedCallbacks:[]}}function be(t){var e=t.delayedCallbacks,n=0;do{for(;n<e.length;n++)e[n].call(null);for(var i=0;i<t.ops.length;i++){var r=t.ops[i];if(r.cursorActivityHandlers)for(;r.cursorActivityCalled<r.cursorActivityHandlers.length;)r.cursorActivityHandlers[r.cursorActivityCalled++].call(null,r.cm)}}while(n<e.length)}function xe(t,e){var n=t.ownsGroup;if(n)try{be(n)}finally{bs=null,e(n)}}function we(t,e){var n=Tt(t,e);if(n.length){var i,r=Array.prototype.slice.call(arguments,2);bs?i=bs.delayedCallbacks:xs?i=xs:(i=xs=[],setTimeout(_e,0));for(var o=0;o<n.length;++o)!function(t){i.push(function(){return n[t].apply(null,r)})}(o)}}function _e(){var t=xs;xs=null;for(var e=0;e<t.length;++e)t[e]()}function Se(t,e,n,i){for(var r=0;r<e.changes.length;r++){var o=e.changes[r];"text"==o?Ae(t,e):"gutter"==o?Ee(t,e,n,i):"class"==o?Me(t,e):"widget"==o&&Le(t,e,i)}e.changes=null}function Ce(t){return t.node==t.text&&(t.node=i("div",null,null,"position: relative"),t.text.parentNode&&t.text.parentNode.replaceChild(t.node,t.text),t.node.appendChild(t.text),ba&&xa<8&&(t.node.style.zIndex=2)),t.node}function Te(t,e){var n=e.bgClass?e.bgClass+" "+(e.line.bgClass||""):e.line.bgClass;if(n&&(n+=" CodeMirror-linebackground"),e.background)n?e.background.className=n:(e.background.parentNode.removeChild(e.background),e.background=null);else if(n){var r=Ce(e);e.background=r.insertBefore(i("div",null,n),r.firstChild),t.display.input.setUneditable(e.background)}}function ke(t,e){var n=t.display.externalMeasured;return n&&n.line==e.line?(t.display.externalMeasured=null,e.measure=n.measure,n.built):ce(t,e)}function Ae(t,e){var n=e.text.className,i=ke(t,e);e.text==e.node&&(e.node=i.pre),e.text.parentNode.replaceChild(i.pre,e.text),e.text=i.pre,i.bgClass!=e.bgClass||i.textClass!=e.textClass?(e.bgClass=i.bgClass,e.textClass=i.textClass,Me(t,e)):n&&(e.text.className=n)}function Me(t,e){Te(t,e),e.line.wrapClass?Ce(e).className=e.line.wrapClass:e.node!=e.text&&(e.node.className="");var n=e.textClass?e.textClass+" "+(e.line.textClass||""):e.line.textClass;e.text.className=n||""}function Ee(t,e,n,r){if(e.gutter&&(e.node.removeChild(e.gutter),e.gutter=null),e.gutterBackground&&(e.node.removeChild(e.gutterBackground),e.gutterBackground=null),e.line.gutterClass){var o=Ce(e);e.gutterBackground=i("div",null,"CodeMirror-gutter-background "+e.line.gutterClass,"left: "+(t.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+"px; width: "+r.gutterTotalWidth+"px"),t.display.input.setUneditable(e.gutterBackground),o.insertBefore(e.gutterBackground,e.text)}var a=e.line.gutterMarkers;if(t.options.lineNumbers||a){var s=Ce(e),l=e.gutter=i("div",null,"CodeMirror-gutter-wrapper","left: "+(t.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+"px");if(t.display.input.setUneditable(l),s.insertBefore(l,e.text),e.line.gutterClass&&(l.className+=" "+e.line.gutterClass),!t.options.lineNumbers||a&&a["CodeMirror-linenumbers"]||(e.lineNumber=l.appendChild(i("div",O(t.options,n),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+r.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+t.display.lineNumInnerWidth+"px"))),a)for(var c=0;c<t.options.gutters.length;++c){var u=t.options.gutters[c],h=a.hasOwnProperty(u)&&a[u];h&&l.appendChild(i("div",[h],"CodeMirror-gutter-elt","left: "+r.gutterLeft[u]+"px; width: "+r.gutterWidth[u]+"px"))}}}function Le(t,e,n){e.alignable&&(e.alignable=null);for(var i=e.node.firstChild,r=void 0;i;i=r)r=i.nextSibling,"CodeMirror-linewidget"==i.className&&e.node.removeChild(i);De(t,e,n)}function Pe(t,e,n,i){var r=ke(t,e);return e.text=e.node=r.pre,r.bgClass&&(e.bgClass=r.bgClass),r.textClass&&(e.textClass=r.textClass),Me(t,e),Ee(t,e,n,i),De(t,e,i),e.node}function De(t,e,n){if(Ne(t,e.line,e,n,!0),e.rest)for(var i=0;i<e.rest.length;i++)Ne(t,e.rest[i],e,n,!1)}function Ne(t,e,n,r,o){if(e.widgets)for(var a=Ce(n),s=0,l=e.widgets;s<l.length;++s){var c=l[s],u=i("div",[c.node],"CodeMirror-linewidget");c.handleMouseEvents||u.setAttribute("cm-ignore-events","true"),Oe(c,u,n,r),t.display.input.setUneditable(u),o&&c.above?a.insertBefore(u,n.gutter||n.text):a.appendChild(u),we(c,"redraw")}}function Oe(t,e,n,i){if(t.noHScroll){(n.alignable||(n.alignable=[])).push(e);var r=i.wrapperWidth;e.style.left=i.fixedPos+"px",t.coverGutter||(r-=i.gutterTotalWidth,e.style.paddingLeft=i.gutterTotalWidth+"px"),e.style.width=r+"px"}t.coverGutter&&(e.style.zIndex=5,e.style.position="relative",t.noHScroll||(e.style.marginLeft=-i.gutterTotalWidth+"px"))}function Re(t){if(null!=t.height)return t.height;var e=t.doc.cm;if(!e)return 0;if(!o(document.body,t.node)){var r="position: relative;";t.coverGutter&&(r+="margin-left: -"+e.display.gutters.offsetWidth+"px;"),t.noHScroll&&(r+="width: "+e.display.wrapper.clientWidth+"px;"),n(e.display.measure,i("div",[t.node],null,r))}return t.height=t.node.parentNode.offsetHeight}function Ie(t,e){for(var n=It(e);n!=t.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&"true"==n.getAttribute("cm-ignore-events")||n.parentNode==t.sizer&&n!=t.mover)return!0}function Fe(t){return t.lineSpace.offsetTop}function je(t){return t.mover.offsetHeight-t.lineSpace.offsetHeight}function He(t){if(t.cachedPaddingH)return t.cachedPaddingH;var e=n(t.measure,i("pre","x")),r=window.getComputedStyle?window.getComputedStyle(e):e.currentStyle,o={left:parseInt(r.paddingLeft),right:parseInt(r.paddingRight)};return isNaN(o.left)||isNaN(o.right)||(t.cachedPaddingH=o),o}function ze(t){return Ba-t.display.nativeBarWidth}function Ve(t){return t.display.scroller.clientWidth-ze(t)-t.display.barWidth}function qe(t){return t.display.scroller.clientHeight-ze(t)-t.display.barHeight}function Be(t,e,n){var i=t.options.lineWrapping,r=i&&Ve(t);if(!e.measure.heights||i&&e.measure.width!=r){var o=e.measure.heights=[];if(i){e.measure.width=r;for(var a=e.text.firstChild.getClientRects(),s=0;s<a.length-1;s++){var l=a[s],c=a[s+1];Math.abs(l.bottom-c.bottom)>2&&o.push((l.bottom+c.top)/2-n.top)}}o.push(n.bottom-n.top)}}function Ge(t,e,n){if(t.line==e)return{map:t.measure.map,cache:t.measure.cache};for(var i=0;i<t.rest.length;i++)if(t.rest[i]==e)return{map:t.measure.maps[i],cache:t.measure.caches[i]};for(var r=0;r<t.rest.length;r++)if(P(t.rest[r])>n)return{map:t.measure.maps[r],cache:t.measure.caches[r],before:!0}}function $e(t,e){e=dt(e);var i=P(e),r=t.display.externalMeasured=new me(t.doc,e,i);r.lineN=i;var o=r.built=ce(t,r);return r.text=o.pre,n(t.display.lineMeasure,o.pre),r}function We(t,e,n,i){return Ye(t,Xe(t,e),n,i)}function Ue(t,e){if(e>=t.display.viewFrom&&e<t.display.viewTo)return t.display.view[An(t,e)];var n=t.display.externalMeasured;return n&&e>=n.lineN&&e<n.lineN+n.size?n:void 0}function Xe(t,e){var n=P(e),i=Ue(t,n);i&&!i.text?i=null:i&&i.changes&&(Se(t,i,n,_n(t)),t.curOp.forceUpdate=!0),i||(i=$e(t,e));var r=Ge(i,e,n);return{line:e,view:i,rect:null,map:r.map,cache:r.cache,before:r.before,hasHeights:!1}}function Ye(t,e,n,i,r){e.before&&(n=-1);var o,a=n+(i||"");return e.cache.hasOwnProperty(a)?o=e.cache[a]:(e.rect||(e.rect=e.view.text.getBoundingClientRect()),e.hasHeights||(Be(t,e.view,e.rect),e.hasHeights=!0),o=Ke(t,e,n,i),o.bogus||(e.cache[a]=o)),{left:o.left,right:o.right,top:r?o.rtop:o.top,bottom:r?o.rbottom:o.bottom}}function Qe(t,e,n){for(var i,r,o,a,s,l,c=0;c<t.length;c+=3)if(s=t[c],l=t[c+1],e<s?(r=0,o=1,a="left"):e<l?(r=e-s,o=r+1):(c==t.length-3||e==l&&t[c+3]>e)&&(o=l-s,r=o-1,e>=l&&(a="right")),null!=r){if(i=t[c+2],s==l&&n==(i.insertLeft?"left":"right")&&(a=n),"left"==n&&0==r)for(;c&&t[c-2]==t[c-3]&&t[c-1].insertLeft;)i=t[2+(c-=3)],a="left";if("right"==n&&r==l-s)for(;c<t.length-3&&t[c+3]==t[c+4]&&!t[c+5].insertLeft;)i=t[(c+=3)+2],a="right";break}return{node:i,start:r,end:o,collapse:a,coverStart:s,coverEnd:l}}function Ze(t,e){var n=ws;if("left"==e)for(var i=0;i<t.length&&(n=t[i]).left==n.right;i++);else for(var r=t.length-1;r>=0&&(n=t[r]).left==n.right;r--);return n}function Ke(t,e,n,i){var r,o=Qe(e.map,n,i),a=o.node,s=o.start,l=o.end,c=o.collapse;if(3==a.nodeType){for(var u=0;u<4;u++){for(;s&&S(e.line.text.charAt(o.coverStart+s));)--s
-;for(;o.coverStart+l<o.coverEnd&&S(e.line.text.charAt(o.coverStart+l));)++l;if(r=ba&&xa<9&&0==s&&l==o.coverEnd-o.coverStart?a.parentNode.getBoundingClientRect():Ze(Ra(a,s,l).getClientRects(),i),r.left||r.right||0==s)break;l=s,s-=1,c="right"}ba&&xa<11&&(r=Je(t.display.measure,r))}else{s>0&&(c=i="right");var h;r=t.options.lineWrapping&&(h=a.getClientRects()).length>1?h["right"==i?h.length-1:0]:a.getBoundingClientRect()}if(ba&&xa<9&&!s&&(!r||!r.left&&!r.right)){var d=a.parentNode.getClientRects()[0];r=d?{left:d.left,right:d.left+wn(t.display),top:d.top,bottom:d.bottom}:ws}for(var f=r.top-e.rect.top,p=r.bottom-e.rect.top,g=(f+p)/2,m=e.view.measure.heights,v=0;v<m.length-1&&!(g<m[v]);v++);var y=v?m[v-1]:0,b=m[v],x={left:("right"==c?r.right:r.left)-e.rect.left,right:("left"==c?r.left:r.right)-e.rect.left,top:y,bottom:b};return r.left||r.right||(x.bogus=!0),t.options.singleCursorHeightPerLine||(x.rtop=f,x.rbottom=p),x}function Je(t,e){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!zt(t))return e;var n=screen.logicalXDPI/screen.deviceXDPI,i=screen.logicalYDPI/screen.deviceYDPI;return{left:e.left*n,right:e.right*n,top:e.top*i,bottom:e.bottom*i}}function tn(t){if(t.measure&&(t.measure.cache={},t.measure.heights=null,t.rest))for(var e=0;e<t.rest.length;e++)t.measure.caches[e]={}}function en(t){t.display.externalMeasure=null,e(t.display.lineMeasure);for(var n=0;n<t.display.view.length;n++)tn(t.display.view[n])}function nn(t){en(t),t.display.cachedCharWidth=t.display.cachedTextHeight=t.display.cachedPaddingH=null,t.options.lineWrapping||(t.display.maxLineChanged=!0),t.display.lineNumChars=null}function rn(){return Sa&&Ea?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function on(){return Sa&&Ea?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function an(t){var e=0;if(t.widgets)for(var n=0;n<t.widgets.length;++n)t.widgets[n].above&&(e+=Re(t.widgets[n]));return e}function sn(t,e,n,i,r){if(!r){var o=an(e);n.top+=o,n.bottom+=o}if("line"==i)return n;i||(i="local");var a=bt(e);if("local"==i?a+=Fe(t.display):a-=t.display.viewOffset,"page"==i||"window"==i){var s=t.display.lineSpace.getBoundingClientRect();a+=s.top+("window"==i?0:on());var l=s.left+("window"==i?0:rn());n.left+=l,n.right+=l}return n.top+=a,n.bottom+=a,n}function ln(t,e,n){if("div"==n)return e;var i=e.left,r=e.top;if("page"==n)i-=rn(),r-=on();else if("local"==n||!n){var o=t.display.sizer.getBoundingClientRect();i+=o.left,r+=o.top}var a=t.display.lineSpace.getBoundingClientRect();return{left:i-a.left,top:r-a.top}}function cn(t,e,n,i,r){return i||(i=A(t.doc,e.line)),sn(t,i,We(t,i,e.ch,r),n)}function un(t,e,n,i,r,o){function a(e,a){var s=Ye(t,r,e,a?"right":"left",o);return a?s.left=s.right:s.right=s.left,sn(t,i,s,n)}function s(t,e,n){var i=l[e],r=1==i.level;return a(n?t-1:t,r!=n)}i=i||A(t.doc,e.line),r||(r=Xe(t,i));var l=Ct(i,t.doc.direction),c=e.ch,u=e.sticky;if(c>=i.text.length?(c=i.text.length,u="before"):c<=0&&(c=0,u="after"),!l)return a("before"==u?c-1:c,"before"==u);var h=St(l,c,u),d=Ja,f=s(c,h,"before"==u);return null!=d&&(f.other=s(c,d,"before"!=u)),f}function hn(t,e){var n=0;e=q(t.doc,e),t.options.lineWrapping||(n=wn(t.display)*e.ch);var i=A(t.doc,e.line),r=bt(i)+Fe(t.display);return{left:n,right:n,top:r,bottom:r+i.height}}function dn(t,e,n,i,r){var o=R(t,e,n);return o.xRel=r,i&&(o.outside=!0),o}function fn(t,e,n){var i=t.doc;if((n+=t.display.viewOffset)<0)return dn(i.first,0,null,!0,-1);var r=D(i,n),o=i.first+i.size-1;if(r>o)return dn(i.first+i.size-1,A(i,o).text.length,null,!0,1);e<0&&(e=0);for(var a=A(i,r);;){var s=vn(t,a,r,e,n),l=ut(a,s.ch+(s.xRel>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==r)return c;a=A(i,r=c.line)}}function pn(t,e,n,i){i-=an(e);var r=e.text.length,o=T(function(e){return Ye(t,n,e-1).bottom<=i},r,0);return r=T(function(e){return Ye(t,n,e).top>i},o,r),{begin:o,end:r}}function gn(t,e,n,i){return n||(n=Xe(t,e)),pn(t,e,n,sn(t,e,Ye(t,n,i),"line").top)}function mn(t,e,n,i){return!(t.bottom<=n)&&(t.top>n||(i?t.left:t.right)>e)}function vn(t,e,n,i,r){r-=bt(e);var o=Xe(t,e),a=an(e),s=0,l=e.text.length,c=!0,u=Ct(e,t.doc.direction);if(u){var h=(t.options.lineWrapping?bn:yn)(t,e,n,o,u,i,r);c=1!=h.level,s=c?h.from:h.to-1,l=c?h.to:h.from-1}var d,f,p=null,g=null,m=T(function(e){var n=Ye(t,o,e);return n.top+=a,n.bottom+=a,!!mn(n,i,r,!1)&&(n.top<=r&&n.left<=i&&(p=e,g=n),!0)},s,l),v=!1;if(g){var y=i-g.left<g.right-i,b=y==c;m=p+(b?0:1),f=b?"after":"before",d=y?g.left:g.right}else{c||m!=l&&m!=s||m++,f=0==m?"after":m==e.text.length?"before":Ye(t,o,m-(c?1:0)).bottom+a<=r==c?"after":"before";var x=un(t,R(n,m,f),"line",e,o);d=x.left,v=r<x.top||r>=x.bottom}return m=C(e.text,m,1),dn(n,m,f,v,i-d)}function yn(t,e,n,i,r,o,a){var s=T(function(s){var l=r[s],c=1!=l.level;return mn(un(t,R(n,c?l.to:l.from,c?"before":"after"),"line",e,i),o,a,!0)},0,r.length-1),l=r[s];if(s>0){var c=1!=l.level,u=un(t,R(n,c?l.from:l.to,c?"after":"before"),"line",e,i);mn(u,o,a,!0)&&u.top>a&&(l=r[s-1])}return l}function bn(t,e,n,i,r,o,a){var s=pn(t,e,i,a),l=s.begin,c=s.end;/\s/.test(e.text.charAt(c-1))&&c--;for(var u=null,h=null,d=0;d<r.length;d++){var f=r[d];if(!(f.from>=c||f.to<=l)){var p=1!=f.level,g=Ye(t,i,p?Math.min(c,f.to)-1:Math.max(l,f.from)).right,m=g<o?o-g+1e9:g-o;(!u||h>m)&&(u=f,h=m)}}return u||(u=r[r.length-1]),u.from<l&&(u={from:l,to:u.to,level:u.level}),u.to>c&&(u={from:u.from,to:c,level:u.level}),u}function xn(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(null==ms){ms=i("pre");for(var r=0;r<49;++r)ms.appendChild(document.createTextNode("x")),ms.appendChild(i("br"));ms.appendChild(document.createTextNode("x"))}n(t.measure,ms);var o=ms.offsetHeight/50;return o>3&&(t.cachedTextHeight=o),e(t.measure),o||1}function wn(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e=i("span","xxxxxxxxxx"),r=i("pre",[e]);n(t.measure,r);var o=e.getBoundingClientRect(),a=(o.right-o.left)/10;return a>2&&(t.cachedCharWidth=a),a||10}function _n(t){for(var e=t.display,n={},i={},r=e.gutters.clientLeft,o=e.gutters.firstChild,a=0;o;o=o.nextSibling,++a)n[t.options.gutters[a]]=o.offsetLeft+o.clientLeft+r,i[t.options.gutters[a]]=o.clientWidth;return{fixedPos:Sn(e),gutterTotalWidth:e.gutters.offsetWidth,gutterLeft:n,gutterWidth:i,wrapperWidth:e.wrapper.clientWidth}}function Sn(t){return t.scroller.getBoundingClientRect().left-t.sizer.getBoundingClientRect().left}function Cn(t){var e=xn(t.display),n=t.options.lineWrapping,i=n&&Math.max(5,t.display.scroller.clientWidth/wn(t.display)-3);return function(r){if(vt(t.doc,r))return 0;var o=0;if(r.widgets)for(var a=0;a<r.widgets.length;a++)r.widgets[a].height&&(o+=r.widgets[a].height);return n?o+(Math.ceil(r.text.length/i)||1)*e:o+e}}function Tn(t){var e=t.doc,n=Cn(t);e.iter(function(t){var e=n(t);e!=t.height&&L(t,e)})}function kn(t,e,n,i){var r=t.display;if(!n&&"true"==It(e).getAttribute("cm-not-content"))return null;var o,a,s=r.lineSpace.getBoundingClientRect();try{o=e.clientX-s.left,a=e.clientY-s.top}catch(e){return null}var l,c=fn(t,o,a);if(i&&1==c.xRel&&(l=A(t.doc,c.line).text).length==c.ch){var u=h(l,l.length,t.options.tabSize)-l.length;c=R(c.line,Math.max(0,Math.round((o-He(t.display).left)/wn(t.display))-u))}return c}function An(t,e){if(e>=t.display.viewTo)return null;if((e-=t.display.viewFrom)<0)return null;for(var n=t.display.view,i=0;i<n.length;i++)if((e-=n[i].size)<0)return i}function Mn(t){t.display.input.showSelection(t.display.input.prepareSelection())}function En(t,e){void 0===e&&(e=!0);for(var n=t.doc,i={},r=i.cursors=document.createDocumentFragment(),o=i.selection=document.createDocumentFragment(),a=0;a<n.sel.ranges.length;a++)if(e||a!=n.sel.primIndex){var s=n.sel.ranges[a];if(!(s.from().line>=t.display.viewTo||s.to().line<t.display.viewFrom)){var l=s.empty();(l||t.options.showCursorWhenSelecting)&&Ln(t,s.head,r),l||Dn(t,s,o)}}return i}function Ln(t,e,n){var r=un(t,e,"div",null,null,!t.options.singleCursorHeightPerLine),o=n.appendChild(i("div"," ","CodeMirror-cursor"));if(o.style.left=r.left+"px",o.style.top=r.top+"px",o.style.height=Math.max(0,r.bottom-r.top)*t.options.cursorHeight+"px",r.other){var a=n.appendChild(i("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));a.style.display="",a.style.left=r.other.left+"px",a.style.top=r.other.top+"px",a.style.height=.85*(r.other.bottom-r.other.top)+"px"}}function Pn(t,e){return t.top-e.top||t.left-e.left}function Dn(t,e,n){function r(t,e,n,r){e<0&&(e=0),e=Math.round(e),r=Math.round(r),l.appendChild(i("div",null,"CodeMirror-selected","position: absolute; left: "+t+"px;\n                             top: "+e+"px; width: "+(null==n?h-t:n)+"px;\n                             height: "+(r-e)+"px"))}function o(e,n,i){function o(n,i){return cn(t,R(e,n),"div",f,i)}function a(e,n,i){var r=gn(t,f,null,e),a="ltr"==n==("after"==i)?"left":"right";return o("after"==i?r.begin:r.end-(/\s/.test(f.text.charAt(r.end-1))?2:1),a)[a]}var l,c,f=A(s,e),p=f.text.length,g=Ct(f,s.direction);return _t(g,n||0,null==i?p:i,function(t,e,s,f){var m="ltr"==s,v=o(t,m?"left":"right"),y=o(e-1,m?"right":"left"),b=null==n&&0==t,x=null==i&&e==p,w=0==f,_=!g||f==g.length-1;if(y.top-v.top<=3){var S=(d?b:x)&&w,C=(d?x:b)&&_,T=S?u:(m?v:y).left,k=C?h:(m?y:v).right;r(T,v.top,k-T,v.bottom)}else{var A,M,E,L;m?(A=d&&b&&w?u:v.left,M=d?h:a(t,s,"before"),E=d?u:a(e,s,"after"),L=d&&x&&_?h:y.right):(A=d?a(t,s,"before"):u,M=!d&&b&&w?h:v.right,E=!d&&x&&_?u:y.left,L=d?a(e,s,"after"):h),r(A,v.top,M-A,v.bottom),v.bottom<y.top&&r(u,v.bottom,null,y.top),r(E,y.top,L-E,y.bottom)}(!l||Pn(v,l)<0)&&(l=v),Pn(y,l)<0&&(l=y),(!c||Pn(v,c)<0)&&(c=v),Pn(y,c)<0&&(c=y)}),{start:l,end:c}}var a=t.display,s=t.doc,l=document.createDocumentFragment(),c=He(t.display),u=c.left,h=Math.max(a.sizerWidth,Ve(t)-a.sizer.offsetLeft)-c.right,d="ltr"==s.direction,f=e.from(),p=e.to();if(f.line==p.line)o(f.line,f.ch,p.ch);else{var g=A(s,f.line),m=A(s,p.line),v=dt(g)==dt(m),y=o(f.line,f.ch,v?g.text.length+1:null).end,b=o(p.line,v?0:null,p.ch).start;v&&(y.top<b.top-2?(r(y.right,y.top,null,y.bottom),r(u,b.top,b.left,b.bottom)):r(y.right,y.top,b.left-y.right,y.bottom)),y.bottom<b.top&&r(u,y.bottom,null,b.top)}n.appendChild(l)}function Nn(t){if(t.state.focused){var e=t.display;clearInterval(e.blinker);var n=!0;e.cursorDiv.style.visibility="",t.options.cursorBlinkRate>0?e.blinker=setInterval(function(){return e.cursorDiv.style.visibility=(n=!n)?"":"hidden"},t.options.cursorBlinkRate):t.options.cursorBlinkRate<0&&(e.cursorDiv.style.visibility="hidden")}}function On(t){t.state.focused||(t.display.input.focus(),In(t))}function Rn(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1,Fn(t))},100)}function In(t,e){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1),"nocursor"!=t.options.readOnly&&(t.state.focused||(At(t,"focus",t,e),t.state.focused=!0,s(t.display.wrapper,"CodeMirror-focused"),t.curOp||t.display.selForContextMenu==t.doc.sel||(t.display.input.reset(),wa&&setTimeout(function(){return t.display.input.reset(!0)},20)),t.display.input.receivedFocus()),Nn(t))}function Fn(t,e){t.state.delayingBlurEvent||(t.state.focused&&(At(t,"blur",t,e),t.state.focused=!1,ja(t.display.wrapper,"CodeMirror-focused")),clearInterval(t.display.blinker),setTimeout(function(){t.state.focused||(t.display.shift=!1)},150))}function jn(t){for(var e=t.display,n=e.lineDiv.offsetTop,i=0;i<e.view.length;i++){var r=e.view[i],o=t.options.lineWrapping,a=void 0,s=0;if(!r.hidden){if(ba&&xa<8){var l=r.node.offsetTop+r.node.offsetHeight;a=l-n,n=l}else{var c=r.node.getBoundingClientRect();a=c.bottom-c.top,!o&&r.text.firstChild&&(s=r.text.firstChild.getBoundingClientRect().right-c.left-1)}var u=r.line.height-a;if((u>.005||u<-.005)&&(L(r.line,a),Hn(r.line),r.rest))for(var h=0;h<r.rest.length;h++)Hn(r.rest[h]);if(s>t.display.sizerWidth){var d=Math.ceil(s/wn(t.display));d>t.display.maxLineLength&&(t.display.maxLineLength=d,t.display.maxLine=r.line,t.display.maxLineChanged=!0)}}}}function Hn(t){if(t.widgets)for(var e=0;e<t.widgets.length;++e){var n=t.widgets[e],i=n.node.parentNode;i&&(n.height=i.offsetHeight)}}function zn(t,e,n){var i=n&&null!=n.top?Math.max(0,n.top):t.scroller.scrollTop;i=Math.floor(i-Fe(t));var r=n&&null!=n.bottom?n.bottom:i+t.wrapper.clientHeight,o=D(e,i),a=D(e,r);if(n&&n.ensure){var s=n.ensure.from.line,l=n.ensure.to.line;s<o?(o=s,a=D(e,bt(A(e,s))+t.wrapper.clientHeight)):Math.min(l,e.lastLine())>=a&&(o=D(e,bt(A(e,l))-t.wrapper.clientHeight),a=l)}return{from:o,to:Math.max(a,o+1)}}function Vn(t){var e=t.display,n=e.view;if(e.alignWidgets||e.gutters.firstChild&&t.options.fixedGutter){for(var i=Sn(e)-e.scroller.scrollLeft+t.doc.scrollLeft,r=e.gutters.offsetWidth,o=i+"px",a=0;a<n.length;a++)if(!n[a].hidden){t.options.fixedGutter&&(n[a].gutter&&(n[a].gutter.style.left=o),n[a].gutterBackground&&(n[a].gutterBackground.style.left=o));var s=n[a].alignable;if(s)for(var l=0;l<s.length;l++)s[l].style.left=o}t.options.fixedGutter&&(e.gutters.style.left=i+r+"px")}}function qn(t){if(!t.options.lineNumbers)return!1;var e=t.doc,n=O(t.options,e.first+e.size-1),r=t.display;if(n.length!=r.lineNumChars){var o=r.measure.appendChild(i("div",[i("div",n)],"CodeMirror-linenumber CodeMirror-gutter-elt")),a=o.firstChild.offsetWidth,s=o.offsetWidth-a;return r.lineGutter.style.width="",r.lineNumInnerWidth=Math.max(a,r.lineGutter.offsetWidth-s)+1,r.lineNumWidth=r.lineNumInnerWidth+s,r.lineNumChars=r.lineNumInnerWidth?n.length:-1,r.lineGutter.style.width=r.lineNumWidth+"px",Ni(t),!0}return!1}function Bn(t,e){if(!Mt(t,"scrollCursorIntoView")){var n=t.display,r=n.sizer.getBoundingClientRect(),o=null;if(e.top+r.top<0?o=!0:e.bottom+r.top>(window.innerHeight||document.documentElement.clientHeight)&&(o=!1),null!=o&&!Aa){var a=i("div","​",null,"position: absolute;\n                         top: "+(e.top-n.viewOffset-Fe(t.display))+"px;\n                         height: "+(e.bottom-e.top+ze(t)+n.barHeight)+"px;\n                         left: "+e.left+"px; width: "+Math.max(2,e.right-e.left)+"px;");t.display.lineSpace.appendChild(a),a.scrollIntoView(o),t.display.lineSpace.removeChild(a)}}}function Gn(t,e,n,i){null==i&&(i=0);var r;t.options.lineWrapping||e!=n||(e=e.ch?R(e.line,"before"==e.sticky?e.ch-1:e.ch,"after"):e,n="before"==e.sticky?R(e.line,e.ch+1,"before"):e);for(var o=0;o<5;o++){var a=!1,s=un(t,e),l=n&&n!=e?un(t,n):s;r={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-i,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+i};var c=Wn(t,r),u=t.doc.scrollTop,h=t.doc.scrollLeft;if(null!=c.scrollTop&&(Jn(t,c.scrollTop),Math.abs(t.doc.scrollTop-u)>1&&(a=!0)),null!=c.scrollLeft&&(ei(t,c.scrollLeft),Math.abs(t.doc.scrollLeft-h)>1&&(a=!0)),!a)break}return r}function $n(t,e){var n=Wn(t,e);null!=n.scrollTop&&Jn(t,n.scrollTop),null!=n.scrollLeft&&ei(t,n.scrollLeft)}function Wn(t,e){var n=t.display,i=xn(t.display);e.top<0&&(e.top=0);var r=t.curOp&&null!=t.curOp.scrollTop?t.curOp.scrollTop:n.scroller.scrollTop,o=qe(t),a={};e.bottom-e.top>o&&(e.bottom=e.top+o);var s=t.doc.height+je(n),l=e.top<i,c=e.bottom>s-i;if(e.top<r)a.scrollTop=l?0:e.top;else if(e.bottom>r+o){var u=Math.min(e.top,(c?s:e.bottom)-o);u!=r&&(a.scrollTop=u)}var h=t.curOp&&null!=t.curOp.scrollLeft?t.curOp.scrollLeft:n.scroller.scrollLeft,d=Ve(t)-(t.options.fixedGutter?n.gutters.offsetWidth:0),f=e.right-e.left>d;return f&&(e.right=e.left+d),e.left<10?a.scrollLeft=0:e.left<h?a.scrollLeft=Math.max(0,e.left-(f?0:10)):e.right>d+h-3&&(a.scrollLeft=e.right+(f?0:10)-d),a}function Un(t,e){null!=e&&(Zn(t),t.curOp.scrollTop=(null==t.curOp.scrollTop?t.doc.scrollTop:t.curOp.scrollTop)+e)}function Xn(t){Zn(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:e,margin:t.options.cursorScrollMargin}}function Yn(t,e,n){null==e&&null==n||Zn(t),null!=e&&(t.curOp.scrollLeft=e),null!=n&&(t.curOp.scrollTop=n)}function Qn(t,e){Zn(t),t.curOp.scrollToPos=e}function Zn(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;Kn(t,hn(t,e.from),hn(t,e.to),e.margin)}}function Kn(t,e,n,i){var r=Wn(t,{left:Math.min(e.left,n.left),top:Math.min(e.top,n.top)-i,right:Math.max(e.right,n.right),bottom:Math.max(e.bottom,n.bottom)+i});Yn(t,r.scrollLeft,r.scrollTop)}function Jn(t,e){Math.abs(t.doc.scrollTop-e)<2||(ga||Pi(t,{top:e}),ti(t,e,!0),ga&&Pi(t),Ci(t,100))}function ti(t,e,n){e=Math.min(t.display.scroller.scrollHeight-t.display.scroller.clientHeight,e),(t.display.scroller.scrollTop!=e||n)&&(t.doc.scrollTop=e,t.display.scrollbars.setScrollTop(e),t.display.scroller.scrollTop!=e&&(t.display.scroller.scrollTop=e))}function ei(t,e,n,i){e=Math.min(e,t.display.scroller.scrollWidth-t.display.scroller.clientWidth),(n?e==t.doc.scrollLeft:Math.abs(t.doc.scrollLeft-e)<2)&&!i||(t.doc.scrollLeft=e,Vn(t),t.display.scroller.scrollLeft!=e&&(t.display.scroller.scrollLeft=e),t.display.scrollbars.setScrollLeft(e))}function ni(t){var e=t.display,n=e.gutters.offsetWidth,i=Math.round(t.doc.height+je(t.display));return{clientHeight:e.scroller.clientHeight,viewHeight:e.wrapper.clientHeight,scrollWidth:e.scroller.scrollWidth,clientWidth:e.scroller.clientWidth,viewWidth:e.wrapper.clientWidth,barLeft:t.options.fixedGutter?n:0,docHeight:i,scrollHeight:i+ze(t)+e.barHeight,nativeBarWidth:e.nativeBarWidth,gutterWidth:n}}function ii(t,e){e||(e=ni(t));var n=t.display.barWidth,i=t.display.barHeight;ri(t,e);for(var r=0;r<4&&n!=t.display.barWidth||i!=t.display.barHeight;r++)n!=t.display.barWidth&&t.options.lineWrapping&&jn(t),ri(t,ni(t)),n=t.display.barWidth,i=t.display.barHeight}function ri(t,e){var n=t.display,i=n.scrollbars.update(e);n.sizer.style.paddingRight=(n.barWidth=i.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=i.bottom)+"px",n.heightForcer.style.borderBottom=i.bottom+"px solid transparent",i.right&&i.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=i.bottom+"px",n.scrollbarFiller.style.width=i.right+"px"):n.scrollbarFiller.style.display="",i.bottom&&t.options.coverGutterNextToScrollbar&&t.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=i.bottom+"px",n.gutterFiller.style.width=e.gutterWidth+"px"):n.gutterFiller.style.display=""}function oi(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&ja(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new Cs[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),ns(e,"mousedown",function(){t.state.focused&&setTimeout(function(){return t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,n){"horizontal"==n?ei(t,e):Jn(t,e)},t),t.display.scrollbars.addClass&&s(t.display.wrapper,t.display.scrollbars.addClass)}function ai(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ts},ye(t.curOp)}function si(t){var e=t.curOp;e&&xe(e,function(t){for(var e=0;e<t.ops.length;e++)t.ops[e].cm.curOp=null;li(t)})}function li(t){for(var e=t.ops,n=0;n<e.length;n++)ci(e[n]);for(var i=0;i<e.length;i++)ui(e[i]);for(var r=0;r<e.length;r++)hi(e[r]);for(var o=0;o<e.length;o++)di(e[o]);for(var a=0;a<e.length;a++)fi(e[a])}function ci(t){var e=t.cm,n=e.display;ki(e),t.updateMaxLine&&wt(e),t.mustUpdate=t.viewChanged||t.forceUpdate||null!=t.scrollTop||t.scrollToPos&&(t.scrollToPos.from.line<n.viewFrom||t.scrollToPos.to.line>=n.viewTo)||n.maxLineChanged&&e.options.lineWrapping,t.update=t.mustUpdate&&new ks(e,t.mustUpdate&&{top:t.scrollTop,ensure:t.scrollToPos},t.forceUpdate)}function ui(t){t.updatedDisplay=t.mustUpdate&&Ei(t.cm,t.update)}function hi(t){var e=t.cm,n=e.display;t.updatedDisplay&&jn(e),t.barMeasure=ni(e),n.maxLineChanged&&!e.options.lineWrapping&&(t.adjustWidthTo=We(e,n.maxLine,n.maxLine.text.length).left+3,e.display.sizerWidth=t.adjustWidthTo,t.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+t.adjustWidthTo+ze(e)+e.display.barWidth),t.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+t.adjustWidthTo-Ve(e))),(t.updatedDisplay||t.selectionChanged)&&(t.preparedSelection=n.input.prepareSelection())}function di(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style.minWidth=t.adjustWidthTo+"px",t.maxScrollLeft<e.doc.scrollLeft&&ei(e,Math.min(e.display.scroller.scrollLeft,t.maxScrollLeft),!0),e.display.maxLineChanged=!1);var n=t.focus&&t.focus==a();t.preparedSelection&&e.display.input.showSelection(t.preparedSelection,n),(t.updatedDisplay||t.startHeight!=e.doc.height)&&ii(e,t.barMeasure),t.updatedDisplay&&Oi(e,t.barMeasure),t.selectionChanged&&Nn(e),e.state.focused&&t.updateInput&&e.display.input.reset(t.typing),n&&On(t.cm)}function fi(t){var e=t.cm,n=e.display,i=e.doc;if(t.updatedDisplay&&Li(e,t.update),null==n.wheelStartX||null==t.scrollTop&&null==t.scrollLeft&&!t.scrollToPos||(n.wheelStartX=n.wheelStartY=null),null!=t.scrollTop&&ti(e,t.scrollTop,t.forceScroll),null!=t.scrollLeft&&ei(e,t.scrollLeft,!0,!0),t.scrollToPos){Bn(e,Gn(e,q(i,t.scrollToPos.from),q(i,t.scrollToPos.to),t.scrollToPos.margin))}var r=t.maybeHiddenMarkers,o=t.maybeUnhiddenMarkers;if(r)for(var a=0;a<r.length;++a)r[a].lines.length||At(r[a],"hide");if(o)for(var s=0;s<o.length;++s)o[s].lines.length&&At(o[s],"unhide");n.wrapper.offsetHeight&&(i.scrollTop=e.display.scroller.scrollTop),t.changeObjs&&At(e,"changes",e,t.changeObjs),t.update&&t.update.finish()}function pi(t,e){if(t.curOp)return e();ai(t);try{return e()}finally{si(t)}}function gi(t,e){return function(){if(t.curOp)return e.apply(t,arguments);ai(t);try{return e.apply(t,arguments)}finally{si(t)}}}function mi(t){return function(){if(this.curOp)return t.apply(this,arguments);ai(this);try{return t.apply(this,arguments)}finally{si(this)}}}function vi(t){return function(){var e=this.cm;if(!e||e.curOp)return t.apply(this,arguments);ai(e);try{return t.apply(this,arguments)}finally{si(e)}}}function yi(t,e,n,i){null==e&&(e=t.doc.first),null==n&&(n=t.doc.first+t.doc.size),i||(i=0);var r=t.display;if(i&&n<r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>e)&&(r.updateLineNumbers=e),t.curOp.viewChanged=!0,e>=r.viewTo)Ka&&gt(t.doc,e)<r.viewTo&&xi(t);else if(n<=r.viewFrom)Ka&&mt(t.doc,n+i)>r.viewFrom?xi(t):(r.viewFrom+=i,r.viewTo+=i);else if(e<=r.viewFrom&&n>=r.viewTo)xi(t);else if(e<=r.viewFrom){var o=wi(t,n,n+i,1);o?(r.view=r.view.slice(o.index),r.viewFrom=o.lineN,r.viewTo+=i):xi(t)}else if(n>=r.viewTo){var a=wi(t,e,e,-1);a?(r.view=r.view.slice(0,a.index),r.viewTo=a.lineN):xi(t)}else{var s=wi(t,e,e,-1),l=wi(t,n,n+i,1);s&&l?(r.view=r.view.slice(0,s.index).concat(ve(t,s.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=i):xi(t)}var c=r.externalMeasured;c&&(n<c.lineN?c.lineN+=i:e<c.lineN+c.size&&(r.externalMeasured=null))}function bi(t,e,n){t.curOp.viewChanged=!0;var i=t.display,r=t.display.externalMeasured;if(r&&e>=r.lineN&&e<r.lineN+r.size&&(i.externalMeasured=null),!(e<i.viewFrom||e>=i.viewTo)){var o=i.view[An(t,e)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==d(a,n)&&a.push(n)}}}function xi(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display.view=[],t.display.viewOffset=0}function wi(t,e,n,i){var r,o=An(t,e),a=t.display.view;if(!Ka||n==t.doc.first+t.doc.size)return{index:o,lineN:n};for(var s=t.display.viewFrom,l=0;l<o;l++)s+=a[l].size;if(s!=e){if(i>0){if(o==a.length-1)return null;r=s+a[o].size-e,o++}else r=s-e;e+=r,n+=r}for(;gt(t.doc,n)!=n;){if(o==(i<0?0:a.length-1))return null;n+=i*a[o-(i<0?1:0)].size,o+=i}return{index:o,lineN:n}}function _i(t,e,n){var i=t.display;0==i.view.length||e>=i.viewTo||n<=i.viewFrom?(i.view=ve(t,e,n),i.viewFrom=e):(i.viewFrom>e?i.view=ve(t,e,i.viewFrom).concat(i.view):i.viewFrom<e&&(i.view=i.view.slice(An(t,e))),i.viewFrom=e,i.viewTo<n?i.view=i.view.concat(ve(t,i.viewTo,n)):i.viewTo>n&&(i.view=i.view.slice(0,An(t,n)))),i.viewTo=n}function Si(t){for(var e=t.display.view,n=0,i=0;i<e.length;i++){var r=e[i];r.hidden||r.node&&!r.changes||++n}return n}function Ci(t,e){t.doc.highlightFrontier<t.display.viewTo&&t.state.highlight.set(e,c(Ti,t))}function Ti(t){var e=t.doc;if(!(e.highlightFrontier>=t.display.viewTo)){var n=+new Date+t.options.workTime,i=Zt(t,e.highlightFrontier),r=[];e.iter(i.line,Math.min(e.first+e.size,t.display.viewTo+500),function(o){if(i.line>=t.display.viewFrom){var a=o.styles,s=o.text.length>t.options.maxHighlightLength?Wt(e.mode,i.state):null,l=Yt(t,o,i,!0);s&&(i.state=s),o.styles=l.styles;var c=o.styleClasses,u=l.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var h=!a||a.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),d=0;!h&&d<a.length;++d)h=a[d]!=o.styles[d];h&&r.push(i.line),o.stateAfter=i.save(),i.nextLine()}else o.text.length<=t.options.maxHighlightLength&&Kt(t,o.text,i),o.stateAfter=i.line%5==0?i.save():null,i.nextLine();if(+new Date>n)return Ci(t,t.options.workDelay),!0}),e.highlightFrontier=i.line,e.modeFrontier=Math.max(e.modeFrontier,i.line),r.length&&pi(t,function(){for(var e=0;e<r.length;e++)bi(t,r[e],"text")})}}function ki(t){var e=t.display;!e.scrollbarsClipped&&e.scroller.offsetWidth&&(e.nativeBarWidth=e.scroller.offsetWidth-e.scroller.clientWidth,e.heightForcer.style.height=ze(t)+"px",e.sizer.style.marginBottom=-e.nativeBarWidth+"px",e.sizer.style.borderRightWidth=ze(t)+"px",e.scrollbarsClipped=!0)}function Ai(t){if(t.hasFocus())return null;var e=a();if(!e||!o(t.display.lineDiv,e))return null;var n={activeElt:e};if(window.getSelection){var i=window.getSelection();i.anchorNode&&i.extend&&o(t.display.lineDiv,i.anchorNode)&&(n.anchorNode=i.anchorNode,n.anchorOffset=i.anchorOffset,n.focusNode=i.focusNode,n.focusOffset=i.focusOffset)}return n}function Mi(t){if(t&&t.activeElt&&t.activeElt!=a()&&(t.activeElt.focus(),t.anchorNode&&o(document.body,t.anchorNode)&&o(document.body,t.focusNode))){var e=window.getSelection(),n=document.createRange();n.setEnd(t.anchorNode,t.anchorOffset),n.collapse(!1),e.removeAllRanges(),e.addRange(n),e.extend(t.focusNode,t.focusOffset)}}function Ei(t,n){var i=t.display,r=t.doc;if(n.editorIsHidden)return xi(t),!1;if(!n.force&&n.visible.from>=i.viewFrom&&n.visible.to<=i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo)&&i.renderedView==i.view&&0==Si(t))return!1;qn(t)&&(xi(t),n.dims=_n(t));var o=r.first+r.size,a=Math.max(n.visible.from-t.options.viewportMargin,r.first),s=Math.min(o,n.visible.to+t.options.viewportMargin);i.viewFrom<a&&a-i.viewFrom<20&&(a=Math.max(r.first,i.viewFrom)),i.viewTo>s&&i.viewTo-s<20&&(s=Math.min(o,i.viewTo)),Ka&&(a=gt(t.doc,a),s=mt(t.doc,s));var l=a!=i.viewFrom||s!=i.viewTo||i.lastWrapHeight!=n.wrapperHeight||i.lastWrapWidth!=n.wrapperWidth;_i(t,a,s),i.viewOffset=bt(A(t.doc,i.viewFrom)),t.display.mover.style.top=i.viewOffset+"px";var c=Si(t);if(!l&&0==c&&!n.force&&i.renderedView==i.view&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo))return!1;var u=Ai(t);return c>4&&(i.lineDiv.style.display="none"),Di(t,i.updateLineNumbers,n.dims),c>4&&(i.lineDiv.style.display=""),i.renderedView=i.view,Mi(u),e(i.cursorDiv),e(i.selectionDiv),i.gutters.style.height=i.sizer.style.minHeight=0,l&&(i.lastWrapHeight=n.wrapperHeight,i.lastWrapWidth=n.wrapperWidth,Ci(t,400)),i.updateLineNumbers=null,!0}function Li(t,e){for(var n=e.viewport,i=!0;(i&&t.options.lineWrapping&&e.oldDisplayWidth!=Ve(t)||(n&&null!=n.top&&(n={top:Math.min(t.doc.height+je(t.display)-qe(t),n.top)}),e.visible=zn(t.display,t.doc,n),!(e.visible.from>=t.display.viewFrom&&e.visible.to<=t.display.viewTo)))&&Ei(t,e);i=!1){jn(t);var r=ni(t);Mn(t),ii(t,r),Oi(t,r),e.force=!1}e.signal(t,"update",t),t.display.viewFrom==t.display.reportedViewFrom&&t.display.viewTo==t.display.reportedViewTo||(e.signal(t,"viewportChange",t,t.display.viewFrom,t.display.viewTo),t.display.reportedViewFrom=t.display.viewFrom,t.display.reportedViewTo=t.display.viewTo)}function Pi(t,e){var n=new ks(t,e);if(Ei(t,n)){jn(t),Li(t,n);var i=ni(t);Mn(t),ii(t,i),Oi(t,i),n.finish()}}function Di(t,n,i){function r(e){var n=e.nextSibling;return wa&&Pa&&t.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),n}for(var o=t.display,a=t.options.lineNumbers,s=o.lineDiv,l=s.firstChild,c=o.view,u=o.viewFrom,h=0;h<c.length;h++){var f=c[h];if(f.hidden);else if(f.node&&f.node.parentNode==s){for(;l!=f.node;)l=r(l);var p=a&&null!=n&&n<=u&&f.lineNumber;f.changes&&(d(f.changes,"gutter")>-1&&(p=!1),Se(t,f,u,i)),p&&(e(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(O(t.options,u)))),l=f.node.nextSibling}else{var g=Pe(t,f,u,i);s.insertBefore(g,l)}u+=f.size}for(;l;)l=r(l)}function Ni(t){var e=t.display.gutters.offsetWidth;t.display.sizer.style.marginLeft=e+"px"}function Oi(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.display.heightForcer.style.top=e.docHeight+"px",t.display.gutters.style.height=e.docHeight+t.display.barHeight+ze(t)+"px"}function Ri(t){var n=t.display.gutters,r=t.options.gutters;e(n);for(var o=0;o<r.length;++o){var a=r[o],s=n.appendChild(i("div",null,"CodeMirror-gutter "+a));"CodeMirror-linenumbers"==a&&(t.display.lineGutter=s,s.style.width=(t.display.lineNumWidth||1)+"px")}n.style.display=o?"":"none",Ni(t)}function Ii(t){var e=d(t.gutters,"CodeMirror-linenumbers");-1==e&&t.lineNumbers?t.gutters=t.gutters.concat(["CodeMirror-linenumbers"]):e>-1&&!t.lineNumbers&&(t.gutters=t.gutters.slice(0),t.gutters.splice(e,1))}function Fi(t){var e=t.wheelDeltaX,n=t.wheelDeltaY;return null==e&&t.detail&&t.axis==t.HORIZONTAL_AXIS&&(e=t.detail),null==n&&t.detail&&t.axis==t.VERTICAL_AXIS?n=t.detail:null==n&&(n=t.wheelDelta),{x:e,y:n}}function ji(t){var e=Fi(t);return e.x*=Ms,e.y*=Ms,e}function Hi(t,e){var n=Fi(e),i=n.x,r=n.y,o=t.display,a=o.scroller,s=a.scrollWidth>a.clientWidth,l=a.scrollHeight>a.clientHeight;if(i&&s||r&&l){if(r&&Pa&&wa)t:for(var c=e.target,u=o.view;c!=a;c=c.parentNode)for(var h=0;h<u.length;h++)if(u[h].node==c){t.display.currentWheelTarget=c;break t}if(i&&!ga&&!Ca&&null!=Ms)return r&&l&&Jn(t,Math.max(0,a.scrollTop+r*Ms)),ei(t,Math.max(0,a.scrollLeft+i*Ms)),(!r||r&&l)&&Dt(e),void(o.wheelStartX=null);if(r&&null!=Ms){var d=r*Ms,f=t.doc.scrollTop,p=f+o.wrapper.clientHeight;d<0?f=Math.max(0,f+d-50):p=Math.min(t.doc.height,p+d+50),Pi(t,{top:f,bottom:p})}As<20&&(null==o.wheelStartX?(o.wheelStartX=a.scrollLeft,o.wheelStartY=a.scrollTop,o.wheelDX=i,o.wheelDY=r,setTimeout(function(){if(null!=o.wheelStartX){var t=a.scrollLeft-o.wheelStartX,e=a.scrollTop-o.wheelStartY,n=e&&o.wheelDY&&e/o.wheelDY||t&&o.wheelDX&&t/o.wheelDX;o.wheelStartX=o.wheelStartY=null,n&&(Ms=(Ms*As+n)/(As+1),++As)}},200)):(o.wheelDX+=i,o.wheelDY+=r))}}function zi(t,e,n){var i=t&&t.options.selectionsMayTouch,r=e[n];e.sort(function(t,e){return I(t.from(),e.from())}),n=d(e,r);for(var o=1;o<e.length;o++){var a=e[o],s=e[o-1],l=I(s.to(),a.from());if(i&&!a.empty()?l>0:l>=0){var c=z(s.from(),a.from()),u=H(s.to(),a.to()),h=s.empty()?a.from()==a.head:s.from()==s.head;o<=n&&--n,e.splice(--o,2,new Ls(h?u:c,h?c:u))}}return new Es(e,n)}function Vi(t,e){return new Es([new Ls(t,e||t)],0)}function qi(t){return t.text?R(t.from.line+t.text.length-1,g(t.text).length+(1==t.text.length?t.from.ch:0)):t.to}function Bi(t,e){if(I(t,e.from)<0)return t;if(I(t,e.to)<=0)return qi(e);var n=t.line+e.text.length-(e.to.line-e.from.line)-1,i=t.ch;return t.line==e.to.line&&(i+=qi(e).ch-e.to.ch),R(n,i)}function Gi(t,e){for(var n=[],i=0;i<t.sel.ranges.length;i++){var r=t.sel.ranges[i];n.push(new Ls(Bi(r.anchor,e),Bi(r.head,e)))}return zi(t.cm,n,t.sel.primIndex)}function $i(t,e,n){return t.line==e.line?R(n.line,t.ch-e.ch+n.ch):R(n.line+(t.line-e.line),t.ch)}function Wi(t,e,n){for(var i=[],r=R(t.first,0),o=r,a=0;a<e.length;a++){var s=e[a],l=$i(s.from,r,o),c=$i(qi(s),r,o);if(r=s.to,o=c,"around"==n){var u=t.sel.ranges[a],h=I(u.head,u.anchor)<0;i[a]=new Ls(h?c:l,h?l:c)}else i[a]=new Ls(l,l)}
-return new Es(i,t.sel.primIndex)}function Ui(t){t.doc.mode=Gt(t.options,t.doc.modeOption),Xi(t)}function Xi(t){t.doc.iter(function(t){t.stateAfter&&(t.stateAfter=null),t.styles&&(t.styles=null)}),t.doc.modeFrontier=t.doc.highlightFrontier=t.doc.first,Ci(t,100),t.state.modeGen++,t.curOp&&yi(t)}function Yi(t,e){return 0==e.from.ch&&0==e.to.ch&&""==g(e.text)&&(!t.cm||t.cm.options.wholeLineUpdateBefore)}function Qi(t,e,n,i){function r(t){return n?n[t]:null}function o(t,n,r){ae(t,n,r,i),we(t,"change",t,e)}function a(t,e){for(var n=[],o=t;o<e;++o)n.push(new gs(c[o],r(o),i));return n}var s=e.from,l=e.to,c=e.text,u=A(t,s.line),h=A(t,l.line),d=g(c),f=r(c.length-1),p=l.line-s.line;if(e.full)t.insert(0,a(0,c.length)),t.remove(c.length,t.size-c.length);else if(Yi(t,e)){var m=a(0,c.length-1);o(h,h.text,f),p&&t.remove(s.line,p),m.length&&t.insert(s.line,m)}else if(u==h)if(1==c.length)o(u,u.text.slice(0,s.ch)+d+u.text.slice(l.ch),f);else{var v=a(1,c.length-1);v.push(new gs(d+u.text.slice(l.ch),f,i)),o(u,u.text.slice(0,s.ch)+c[0],r(0)),t.insert(s.line+1,v)}else if(1==c.length)o(u,u.text.slice(0,s.ch)+c[0]+h.text.slice(l.ch),r(0)),t.remove(s.line+1,p);else{o(u,u.text.slice(0,s.ch)+c[0],r(0)),o(h,d+h.text.slice(l.ch),f);var y=a(1,c.length-1);p>1&&t.remove(s.line+1,p-1),t.insert(s.line+1,y)}we(t,"change",t,e)}function Zi(t,e,n){function i(t,r,o){if(t.linked)for(var a=0;a<t.linked.length;++a){var s=t.linked[a];if(s.doc!=r){var l=o&&s.sharedHist;n&&!l||(e(s.doc,l),i(s.doc,t,l))}}}i(t,null,!0)}function Ki(t,e){if(e.cm)throw new Error("This document is already in use.");t.doc=e,e.cm=t,Tn(t),Ui(t),Ji(t),t.options.lineWrapping||wt(t),t.options.mode=e.modeOption,yi(t)}function Ji(t){("rtl"==t.doc.direction?s:ja)(t.display.lineDiv,"CodeMirror-rtl")}function tr(t){pi(t,function(){Ji(t),yi(t)})}function er(t){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=t||1}function nr(t,e){var n={from:j(e.from),to:qi(e),text:M(t,e.from,e.to)};return cr(t,n,e.from.line,e.to.line+1),Zi(t,function(t){return cr(t,n,e.from.line,e.to.line+1)},!0),n}function ir(t){for(;t.length;){if(!g(t).ranges)break;t.pop()}}function rr(t,e){return e?(ir(t.done),g(t.done)):t.done.length&&!g(t.done).ranges?g(t.done):t.done.length>1&&!t.done[t.done.length-2].ranges?(t.done.pop(),g(t.done)):void 0}function or(t,e,n,i){var r=t.history;r.undone.length=0;var o,a,s=+new Date;if((r.lastOp==i||r.lastOrigin==e.origin&&e.origin&&("+"==e.origin.charAt(0)&&r.lastModTime>s-(t.cm?t.cm.options.historyEventDelay:500)||"*"==e.origin.charAt(0)))&&(o=rr(r,r.lastOp==i)))a=g(o.changes),0==I(e.from,e.to)&&0==I(e.from,a.to)?a.to=qi(e):o.changes.push(nr(t,e));else{var l=g(r.done);for(l&&l.ranges||lr(t.sel,r.done),o={changes:[nr(t,e)],generation:r.generation},r.done.push(o);r.done.length>r.undoDepth;)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(n),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=s,r.lastOp=r.lastSelOp=i,r.lastOrigin=r.lastSelOrigin=e.origin,a||At(t,"historyAdded")}function ar(t,e,n,i){var r=e.charAt(0);return"*"==r||"+"==r&&n.ranges.length==i.ranges.length&&n.somethingSelected()==i.somethingSelected()&&new Date-t.history.lastSelTime<=(t.cm?t.cm.options.historyEventDelay:500)}function sr(t,e,n,i){var r=t.history,o=i&&i.origin;n==r.lastSelOp||o&&r.lastSelOrigin==o&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==o||ar(t,o,g(r.done),e))?r.done[r.done.length-1]=e:lr(e,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=o,r.lastSelOp=n,i&&!1!==i.clearRedo&&ir(r.undone)}function lr(t,e){var n=g(e);n&&n.ranges&&n.equals(t)||e.push(t)}function cr(t,e,n,i){var r=e["spans_"+t.id],o=0;t.iter(Math.max(t.first,n),Math.min(t.first+t.size,i),function(n){n.markedSpans&&((r||(r=e["spans_"+t.id]={}))[o]=n.markedSpans),++o})}function ur(t){if(!t)return null;for(var e,n=0;n<t.length;++n)t[n].marker.explicitlyCleared?e||(e=t.slice(0,n)):e&&e.push(t[n]);return e?e.length?e:null:t}function hr(t,e){var n=e["spans_"+t.id];if(!n)return null;for(var i=[],r=0;r<e.text.length;++r)i.push(ur(n[r]));return i}function dr(t,e){var n=hr(t,e),i=J(t,e);if(!n)return i;if(!i)return n;for(var r=0;r<n.length;++r){var o=n[r],a=i[r];if(o&&a)t:for(var s=0;s<a.length;++s){for(var l=a[s],c=0;c<o.length;++c)if(o[c].marker==l.marker)continue t;o.push(l)}else a&&(n[r]=a)}return n}function fr(t,e,n){for(var i=[],r=0;r<t.length;++r){var o=t[r];if(o.ranges)i.push(n?Es.prototype.deepCopy.call(o):o);else{var a=o.changes,s=[];i.push({changes:s});for(var l=0;l<a.length;++l){var c=a[l],u=void 0;if(s.push({from:c.from,to:c.to,text:c.text}),e)for(var h in c)(u=h.match(/^spans_(\d+)$/))&&d(e,Number(u[1]))>-1&&(g(s)[h]=c[h],delete c[h])}}}return i}function pr(t,e,n,i){if(i){var r=t.anchor;if(n){var o=I(e,r)<0;o!=I(n,r)<0?(r=e,e=n):o!=I(e,n)<0&&(e=n)}return new Ls(r,e)}return new Ls(n||e,e)}function gr(t,e,n,i,r){null==r&&(r=t.cm&&(t.cm.display.shift||t.extend)),wr(t,new Es([pr(t.sel.primary(),e,n,r)],0),i)}function mr(t,e,n){for(var i=[],r=t.cm&&(t.cm.display.shift||t.extend),o=0;o<t.sel.ranges.length;o++)i[o]=pr(t.sel.ranges[o],e[o],null,r);wr(t,zi(t.cm,i,t.sel.primIndex),n)}function vr(t,e,n,i){var r=t.sel.ranges.slice(0);r[e]=n,wr(t,zi(t.cm,r,t.sel.primIndex),i)}function yr(t,e,n,i){wr(t,Vi(e,n),i)}function br(t,e,n){var i={ranges:e.ranges,update:function(e){var n=this;this.ranges=[];for(var i=0;i<e.length;i++)n.ranges[i]=new Ls(q(t,e[i].anchor),q(t,e[i].head))},origin:n&&n.origin};return At(t,"beforeSelectionChange",t,i),t.cm&&At(t.cm,"beforeSelectionChange",t.cm,i),i.ranges!=e.ranges?zi(t.cm,i.ranges,i.ranges.length-1):e}function xr(t,e,n){var i=t.history.done,r=g(i);r&&r.ranges?(i[i.length-1]=e,_r(t,e,n)):wr(t,e,n)}function wr(t,e,n){_r(t,e,n),sr(t,t.sel,t.cm?t.cm.curOp.id:NaN,n)}function _r(t,e,n){(Lt(t,"beforeSelectionChange")||t.cm&&Lt(t.cm,"beforeSelectionChange"))&&(e=br(t,e,n)),Sr(t,Tr(t,e,n&&n.bias||(I(e.primary().head,t.sel.primary().head)<0?-1:1),!0)),n&&!1===n.scroll||!t.cm||Xn(t.cm)}function Sr(t,e){e.equals(t.sel)||(t.sel=e,t.cm&&(t.cm.curOp.updateInput=1,t.cm.curOp.selectionChanged=!0,Et(t.cm)),we(t,"cursorActivity",t))}function Cr(t){Sr(t,Tr(t,t.sel,null,!1))}function Tr(t,e,n,i){for(var r,o=0;o<e.ranges.length;o++){var a=e.ranges[o],s=e.ranges.length==t.sel.ranges.length&&t.sel.ranges[o],l=Ar(t,a.anchor,s&&s.anchor,n,i),c=Ar(t,a.head,s&&s.head,n,i);(r||l!=a.anchor||c!=a.head)&&(r||(r=e.ranges.slice(0,o)),r[o]=new Ls(l,c))}return r?zi(t.cm,r,e.primIndex):e}function kr(t,e,n,i,r){var o=A(t,e.line);if(o.markedSpans)for(var a=0;a<o.markedSpans.length;++a){var s=o.markedSpans[a],l=s.marker;if((null==s.from||(l.inclusiveLeft?s.from<=e.ch:s.from<e.ch))&&(null==s.to||(l.inclusiveRight?s.to>=e.ch:s.to>e.ch))){if(r&&(At(l,"beforeCursorEnter"),l.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!l.atomic)continue;if(n){var c=l.find(i<0?1:-1),u=void 0;if((i<0?l.inclusiveRight:l.inclusiveLeft)&&(c=Mr(t,c,-i,c&&c.line==e.line?o:null)),c&&c.line==e.line&&(u=I(c,n))&&(i<0?u<0:u>0))return kr(t,c,e,i,r)}var h=l.find(i<0?-1:1);return(i<0?l.inclusiveLeft:l.inclusiveRight)&&(h=Mr(t,h,i,h.line==e.line?o:null)),h?kr(t,h,e,i,r):null}}return e}function Ar(t,e,n,i,r){var o=i||1,a=kr(t,e,n,o,r)||!r&&kr(t,e,n,o,!0)||kr(t,e,n,-o,r)||!r&&kr(t,e,n,-o,!0);return a||(t.cantEdit=!0,R(t.first,0))}function Mr(t,e,n,i){return n<0&&0==e.ch?e.line>t.first?q(t,R(e.line-1)):null:n>0&&e.ch==(i||A(t,e.line)).text.length?e.line<t.first+t.size-1?R(e.line+1,0):null:new R(e.line,e.ch+n)}function Er(t){t.setSelection(R(t.firstLine(),0),R(t.lastLine()),$a)}function Lr(t,e,n){var i={canceled:!1,from:e.from,to:e.to,text:e.text,origin:e.origin,cancel:function(){return i.canceled=!0}};return n&&(i.update=function(e,n,r,o){e&&(i.from=q(t,e)),n&&(i.to=q(t,n)),r&&(i.text=r),void 0!==o&&(i.origin=o)}),At(t,"beforeChange",t,i),t.cm&&At(t.cm,"beforeChange",t.cm,i),i.canceled?(t.cm&&(t.cm.curOp.updateInput=2),null):{from:i.from,to:i.to,text:i.text,origin:i.origin}}function Pr(t,e,n){if(t.cm){if(!t.cm.curOp)return gi(t.cm,Pr)(t,e,n);if(t.cm.state.suppressEdits)return}if(!(Lt(t,"beforeChange")||t.cm&&Lt(t.cm,"beforeChange"))||(e=Lr(t,e,!0))){var i=Za&&!n&&et(t,e.from,e.to);if(i)for(var r=i.length-1;r>=0;--r)Dr(t,{from:i[r].from,to:i[r].to,text:r?[""]:e.text,origin:e.origin});else Dr(t,e)}}function Dr(t,e){if(1!=e.text.length||""!=e.text[0]||0!=I(e.from,e.to)){var n=Gi(t,e);or(t,e,n,t.cm?t.cm.curOp.id:NaN),Rr(t,e,n,J(t,e));var i=[];Zi(t,function(t,n){n||-1!=d(i,t.history)||(zr(t.history,e),i.push(t.history)),Rr(t,e,null,J(t,e))})}}function Nr(t,e,n){var i=t.cm&&t.cm.state.suppressEdits;if(!i||n){for(var r,o=t.history,a=t.sel,s="undo"==e?o.done:o.undone,l="undo"==e?o.undone:o.done,c=0;c<s.length&&(r=s[c],n?!r.ranges||r.equals(t.sel):r.ranges);c++);if(c!=s.length){for(o.lastOrigin=o.lastSelOrigin=null;;){if(r=s.pop(),!r.ranges){if(i)return void s.push(r);break}if(lr(r,l),n&&!r.equals(t.sel))return void wr(t,r,{clearRedo:!1});a=r}var u=[];lr(a,l),l.push({changes:u,generation:o.generation}),o.generation=r.generation||++o.maxGeneration;for(var h=Lt(t,"beforeChange")||t.cm&&Lt(t.cm,"beforeChange"),f=r.changes.length-1;f>=0;--f){var p=function(n){var i=r.changes[n];if(i.origin=e,h&&!Lr(t,i,!1))return s.length=0,{};u.push(nr(t,i));var o=n?Gi(t,i):g(s);Rr(t,i,o,dr(t,i)),!n&&t.cm&&t.cm.scrollIntoView({from:i.from,to:qi(i)});var a=[];Zi(t,function(t,e){e||-1!=d(a,t.history)||(zr(t.history,i),a.push(t.history)),Rr(t,i,null,dr(t,i))})}(f);if(p)return p.v}}}}function Or(t,e){if(0!=e&&(t.first+=e,t.sel=new Es(m(t.sel.ranges,function(t){return new Ls(R(t.anchor.line+e,t.anchor.ch),R(t.head.line+e,t.head.ch))}),t.sel.primIndex),t.cm)){yi(t.cm,t.first,t.first-e,e);for(var n=t.cm.display,i=n.viewFrom;i<n.viewTo;i++)bi(t.cm,i,"gutter")}}function Rr(t,e,n,i){if(t.cm&&!t.cm.curOp)return gi(t.cm,Rr)(t,e,n,i);if(e.to.line<t.first)return void Or(t,e.text.length-1-(e.to.line-e.from.line));if(!(e.from.line>t.lastLine())){if(e.from.line<t.first){var r=e.text.length-1-(t.first-e.from.line);Or(t,r),e={from:R(t.first,0),to:R(e.to.line+r,e.to.ch),text:[g(e.text)],origin:e.origin}}var o=t.lastLine();e.to.line>o&&(e={from:e.from,to:R(o,A(t,o).text.length),text:[e.text[0]],origin:e.origin}),e.removed=M(t,e.from,e.to),n||(n=Gi(t,e)),t.cm?Ir(t.cm,e,i):Qi(t,e,i),_r(t,n,$a)}}function Ir(t,e,n){var i=t.doc,r=t.display,o=e.from,a=e.to,s=!1,l=o.line;t.options.lineWrapping||(l=P(dt(A(i,o.line))),i.iter(l,a.line+1,function(t){if(t==r.maxLine)return s=!0,!0})),i.sel.contains(e.from,e.to)>-1&&Et(t),Qi(i,e,n,Cn(t)),t.options.lineWrapping||(i.iter(l,o.line+e.text.length,function(t){var e=xt(t);e>r.maxLineLength&&(r.maxLine=t,r.maxLineLength=e,r.maxLineChanged=!0,s=!1)}),s&&(t.curOp.updateMaxLine=!0)),oe(i,o.line),Ci(t,400);var c=e.text.length-(a.line-o.line)-1;e.full?yi(t):o.line!=a.line||1!=e.text.length||Yi(t.doc,e)?yi(t,o.line,a.line+1,c):bi(t,o.line,"text");var u=Lt(t,"changes"),h=Lt(t,"change");if(h||u){var d={from:o,to:a,text:e.text,removed:e.removed,origin:e.origin};h&&we(t,"change",t,d),u&&(t.curOp.changeObjs||(t.curOp.changeObjs=[])).push(d)}t.display.selForContextMenu=null}function Fr(t,e,n,i,r){var o;i||(i=n),I(i,n)<0&&(o=[i,n],n=o[0],i=o[1]),"string"==typeof e&&(e=t.splitLines(e)),Pr(t,{from:n,to:i,text:e,origin:r})}function jr(t,e,n,i){n<t.line?t.line+=i:e<t.line&&(t.line=e,t.ch=0)}function Hr(t,e,n,i){for(var r=0;r<t.length;++r){var o=t[r],a=!0;if(o.ranges){o.copied||(o=t[r]=o.deepCopy(),o.copied=!0);for(var s=0;s<o.ranges.length;s++)jr(o.ranges[s].anchor,e,n,i),jr(o.ranges[s].head,e,n,i)}else{for(var l=0;l<o.changes.length;++l){var c=o.changes[l];if(n<c.from.line)c.from=R(c.from.line+i,c.from.ch),c.to=R(c.to.line+i,c.to.ch);else if(e<=c.to.line){a=!1;break}}a||(t.splice(0,r+1),r=0)}}}function zr(t,e){var n=e.from.line,i=e.to.line,r=e.text.length-(i-n)-1;Hr(t.done,n,i,r),Hr(t.undone,n,i,r)}function Vr(t,e,n,i){var r=e,o=e;return"number"==typeof e?o=A(t,V(t,e)):r=P(e),null==r?null:(i(o,r)&&t.cm&&bi(t.cm,r,n),o)}function qr(t){var e=this;this.lines=t,this.parent=null;for(var n=0,i=0;i<t.length;++i)t[i].parent=e,n+=t[i].height;this.height=n}function Br(t){var e=this;this.children=t;for(var n=0,i=0,r=0;r<t.length;++r){var o=t[r];n+=o.chunkSize(),i+=o.height,o.parent=e}this.size=n,this.height=i,this.parent=null}function Gr(t,e,n){bt(e)<(t.curOp&&t.curOp.scrollTop||t.doc.scrollTop)&&Un(t,n)}function $r(t,e,n,i){var r=new Ps(t,n,i),o=t.cm;return o&&r.noHScroll&&(o.display.alignWidgets=!0),Vr(t,e,"widget",function(e){var n=e.widgets||(e.widgets=[]);if(null==r.insertAt?n.push(r):n.splice(Math.min(n.length-1,Math.max(0,r.insertAt)),0,r),r.line=e,o&&!vt(t,e)){var i=bt(e)<t.scrollTop;L(e,e.height+Re(r)),i&&Un(o,r.height),o.curOp.forceUpdate=!0}return!0}),o&&we(o,"lineWidgetAdded",o,r,"number"==typeof e?e:P(e)),r}function Wr(t,e,n,i,o){if(i&&i.shared)return Ur(t,e,n,i,o);if(t.cm&&!t.cm.curOp)return gi(t.cm,Wr)(t,e,n,i,o);var a=new Ns(t,o),s=I(e,n);if(i&&u(i,a,!1),s>0||0==s&&!1!==a.clearWhenEmpty)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=r("span",[a.replacedWith],"CodeMirror-widget"),i.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),i.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(ht(t,e.line,e,n,a)||e.line!=n.line&&ht(t,n.line,e,n,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");W()}a.addToHistory&&or(t,{from:e,to:n,origin:"markText"},t.sel,NaN);var l,c=e.line,h=t.cm;if(t.iter(c,n.line+1,function(t){h&&a.collapsed&&!h.options.lineWrapping&&dt(t)==h.display.maxLine&&(l=!0),a.collapsed&&c!=e.line&&L(t,0),Q(t,new U(a,c==e.line?e.ch:null,c==n.line?n.ch:null)),++c}),a.collapsed&&t.iter(e.line,n.line+1,function(e){vt(t,e)&&L(e,0)}),a.clearOnEnter&&ns(a,"beforeCursorEnter",function(){return a.clear()}),a.readOnly&&($(),(t.history.done.length||t.history.undone.length)&&t.clearHistory()),a.collapsed&&(a.id=++Ds,a.atomic=!0),h){if(l&&(h.curOp.updateMaxLine=!0),a.collapsed)yi(h,e.line,n.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var d=e.line;d<=n.line;d++)bi(h,d,"text");a.atomic&&Cr(h.doc),we(h,"markerAdded",h,a)}return a}function Ur(t,e,n,i,r){i=u(i),i.shared=!1;var o=[Wr(t,e,n,i,r)],a=o[0],s=i.widgetNode;return Zi(t,function(t){s&&(i.widgetNode=s.cloneNode(!0)),o.push(Wr(t,q(t,e),q(t,n),i,r));for(var l=0;l<t.linked.length;++l)if(t.linked[l].isParent)return;a=g(o)}),new Os(o,a)}function Xr(t){return t.findMarks(R(t.first,0),t.clipPos(R(t.lastLine())),function(t){return t.parent})}function Yr(t,e){for(var n=0;n<e.length;n++){var i=e[n],r=i.find(),o=t.clipPos(r.from),a=t.clipPos(r.to);if(I(o,a)){var s=Wr(t,o,a,i.primary,i.primary.type);i.markers.push(s),s.parent=i}}}function Qr(t){for(var e=0;e<t.length;e++)!function(e){var n=t[e],i=[n.primary.doc];Zi(n.primary.doc,function(t){return i.push(t)});for(var r=0;r<n.markers.length;r++){var o=n.markers[r];-1==d(i,o.doc)&&(o.parent=null,n.markers.splice(r--,1))}}(e)}function Zr(t){var e=this;if(to(e),!Mt(e,t)&&!Ie(e.display,t)){Dt(t),ba&&(Fs=+new Date);var n=kn(e,t,!0),i=t.dataTransfer.files;if(n&&!e.isReadOnly())if(i&&i.length&&window.FileReader&&window.File)for(var r=i.length,o=Array(r),a=0,s=0;s<r;++s)!function(t,i){if(!e.options.allowDropFileTypes||-1!=d(e.options.allowDropFileTypes,t.type)){var s=new FileReader;s.onload=gi(e,function(){var t=s.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(t)&&(t=""),o[i]=t,++a==r){n=q(e.doc,n);var l={from:n,to:n,text:e.doc.splitLines(o.join(e.doc.lineSeparator())),origin:"paste"};Pr(e.doc,l),xr(e.doc,Vi(n,qi(l)))}}),s.readAsText(t)}}(i[s],s);else{if(e.state.draggingText&&e.doc.sel.contains(n)>-1)return e.state.draggingText(t),void setTimeout(function(){return e.display.input.focus()},20);try{var l=t.dataTransfer.getData("Text");if(l){var c;if(e.state.draggingText&&!e.state.draggingText.copy&&(c=e.listSelections()),_r(e.doc,Vi(n,n)),c)for(var u=0;u<c.length;++u)Fr(e.doc,"",c[u].anchor,c[u].head,"drag");e.replaceSelection(l,"around","paste"),e.display.input.focus()}}catch(t){}}}}function Kr(t,e){if(ba&&(!t.state.draggingText||+new Date-Fs<100))return void Rt(e);if(!Mt(t,e)&&!Ie(t.display,e)&&(e.dataTransfer.setData("Text",t.getSelection()),e.dataTransfer.effectAllowed="copyMove",e.dataTransfer.setDragImage&&!Ta)){var n=i("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",Ca&&(n.width=n.height=1,t.display.wrapper.appendChild(n),n._top=n.offsetTop),e.dataTransfer.setDragImage(n,0,0),Ca&&n.parentNode.removeChild(n)}}function Jr(t,e){var r=kn(t,e);if(r){var o=document.createDocumentFragment();Ln(t,r,o),t.display.dragCursor||(t.display.dragCursor=i("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),t.display.lineSpace.insertBefore(t.display.dragCursor,t.display.cursorDiv)),n(t.display.dragCursor,o)}}function to(t){t.display.dragCursor&&(t.display.lineSpace.removeChild(t.display.dragCursor),t.display.dragCursor=null)}function eo(t){if(document.getElementsByClassName){for(var e=document.getElementsByClassName("CodeMirror"),n=[],i=0;i<e.length;i++){var r=e[i].CodeMirror;r&&n.push(r)}n.length&&n[0].operation(function(){for(var e=0;e<n.length;e++)t(n[e])})}}function no(){js||(io(),js=!0)}function io(){var t;ns(window,"resize",function(){null==t&&(t=setTimeout(function(){t=null,eo(ro)},100))}),ns(window,"blur",function(){return eo(Fn)})}function ro(t){var e=t.display;e.cachedCharWidth=e.cachedTextHeight=e.cachedPaddingH=null,e.scrollbarsClipped=!1,t.setSize()}function oo(t){var e=t.split(/-(?!$)/);t=e[e.length-1];for(var n,i,r,o,a=0;a<e.length-1;a++){var s=e[a];if(/^(cmd|meta|m)$/i.test(s))o=!0;else if(/^a(lt)?$/i.test(s))n=!0;else if(/^(c|ctrl|control)$/i.test(s))i=!0;else{if(!/^s(hift)?$/i.test(s))throw new Error("Unrecognized modifier name: "+s);r=!0}}return n&&(t="Alt-"+t),i&&(t="Ctrl-"+t),o&&(t="Cmd-"+t),r&&(t="Shift-"+t),t}function ao(t){var e={};for(var n in t)if(t.hasOwnProperty(n)){var i=t[n];if(/^(name|fallthrough|(de|at)tach)$/.test(n))continue;if("..."==i){delete t[n];continue}for(var r=m(n.split(" "),oo),o=0;o<r.length;o++){var a=void 0,s=void 0;o==r.length-1?(s=r.join(" "),a=i):(s=r.slice(0,o+1).join(" "),a="...");var l=e[s];if(l){if(l!=a)throw new Error("Inconsistent bindings for "+s)}else e[s]=a}delete t[n]}for(var c in e)t[c]=e[c];return t}function so(t,e,n,i){e=ho(e);var r=e.call?e.call(t,i):e[t];if(!1===r)return"nothing";if("..."===r)return"multi";if(null!=r&&n(r))return"handled";if(e.fallthrough){if("[object Array]"!=Object.prototype.toString.call(e.fallthrough))return so(t,e.fallthrough,n,i);for(var o=0;o<e.fallthrough.length;o++){var a=so(t,e.fallthrough[o],n,i);if(a)return a}}}function lo(t){var e="string"==typeof t?t:Hs[t.keyCode];return"Ctrl"==e||"Alt"==e||"Shift"==e||"Mod"==e}function co(t,e,n){var i=t;return e.altKey&&"Alt"!=i&&(t="Alt-"+t),(Ia?e.metaKey:e.ctrlKey)&&"Ctrl"!=i&&(t="Ctrl-"+t),(Ia?e.ctrlKey:e.metaKey)&&"Cmd"!=i&&(t="Cmd-"+t),!n&&e.shiftKey&&"Shift"!=i&&(t="Shift-"+t),t}function uo(t,e){if(Ca&&34==t.keyCode&&t.char)return!1;var n=Hs[t.keyCode];return null!=n&&!t.altGraphKey&&(3==t.keyCode&&t.code&&(n=t.code),co(n,t,e))}function ho(t){return"string"==typeof t?Bs[t]:t}function fo(t,e){for(var n=t.doc.sel.ranges,i=[],r=0;r<n.length;r++){for(var o=e(n[r]);i.length&&I(o.from,g(i).to)<=0;){var a=i.pop();if(I(a.from,o.from)<0){o.from=a.from;break}}i.push(o)}pi(t,function(){for(var e=i.length-1;e>=0;e--)Fr(t.doc,"",i[e].from,i[e].to,"+delete");Xn(t)})}function po(t,e,n){var i=C(t.text,e+n,n);return i<0||i>t.text.length?null:i}function go(t,e,n){var i=po(t,e.ch,n);return null==i?null:new R(e.line,i,n<0?"after":"before")}function mo(t,e,n,i,r){if(t){var o=Ct(n,e.doc.direction);if(o){var a,s=r<0?g(o):o[0],l=r<0==(1==s.level),c=l?"after":"before";if(s.level>0||"rtl"==e.doc.direction){var u=Xe(e,n);a=r<0?n.text.length-1:0;var h=Ye(e,u,a).top;a=T(function(t){return Ye(e,u,t).top==h},r<0==(1==s.level)?s.from:s.to-1,a),"before"==c&&(a=po(n,a,1))}else a=r<0?s.to:s.from;return new R(i,a,c)}}return new R(i,r<0?n.text.length:0,r<0?"before":"after")}function vo(t,e,n,i){var r=Ct(e,t.doc.direction);if(!r)return go(e,n,i);n.ch>=e.text.length?(n.ch=e.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=St(r,n.ch,n.sticky),a=r[o];if("ltr"==t.doc.direction&&a.level%2==0&&(i>0?a.to>n.ch:a.from<n.ch))return go(e,n,i);var s,l=function(t,n){return po(e,t instanceof R?t.ch:t,n)},c=function(n){return t.options.lineWrapping?(s=s||Xe(t,e),gn(t,e,s,n)):{begin:0,end:e.text.length}},u=c("before"==n.sticky?l(n,-1):n.ch);if("rtl"==t.doc.direction||1==a.level){var h=1==a.level==i<0,d=l(n,h?1:-1);if(null!=d&&(h?d<=a.to&&d<=u.end:d>=a.from&&d>=u.begin)){var f=h?"before":"after";return new R(n.line,d,f)}}var p=function(t,e,i){for(var o=function(t,e){return e?new R(n.line,l(t,1),"before"):new R(n.line,t,"after")};t>=0&&t<r.length;t+=e){var a=r[t],s=e>0==(1!=a.level),c=s?i.begin:l(i.end,-1);if(a.from<=c&&c<a.to)return o(c,s);if(c=s?a.from:l(a.to,-1),i.begin<=c&&c<i.end)return o(c,s)}},g=p(o+i,i,u);if(g)return g;var m=i>0?u.end:l(u.begin,-1);return null==m||i>0&&m==e.text.length||!(g=p(i>0?0:r.length-1,i,c(m)))?null:g}function yo(t,e){var n=A(t.doc,e),i=dt(n);return i!=n&&(e=P(i)),mo(!0,t,i,e,1)}function bo(t,e){var n=A(t.doc,e),i=ft(n);return i!=n&&(e=P(i)),mo(!0,t,n,e,-1)}function xo(t,e){var n=yo(t,e.line),i=A(t.doc,n.line),r=Ct(i,t.doc.direction);if(!r||0==r[0].level){var o=Math.max(0,i.text.search(/\S/)),a=e.line==n.line&&e.ch<=o&&e.ch;return R(n.line,a?0:o,n.sticky)}return n}function wo(t,e,n){if("string"==typeof e&&!(e=Gs[e]))return!1;t.display.input.ensurePolled();var i=t.display.shift,r=!1;try{t.isReadOnly()&&(t.state.suppressEdits=!0),n&&(t.display.shift=!1),r=e(t)!=Ga}finally{t.display.shift=i,t.state.suppressEdits=!1}return r}function _o(t,e,n){for(var i=0;i<t.state.keyMaps.length;i++){var r=so(e,t.state.keyMaps[i],n,t);if(r)return r}return t.options.extraKeys&&so(e,t.options.extraKeys,n,t)||so(e,t.options.keyMap,n,t)}function So(t,e,n,i){var r=t.state.keySeq;if(r){if(lo(e))return"handled";if(/\'$/.test(e)?t.state.keySeq=null:$s.set(50,function(){t.state.keySeq==r&&(t.state.keySeq=null,t.display.input.reset())}),Co(t,r+" "+e,n,i))return!0}return Co(t,e,n,i)}function Co(t,e,n,i){var r=_o(t,e,i);return"multi"==r&&(t.state.keySeq=e),"handled"==r&&we(t,"keyHandled",t,e,n),"handled"!=r&&"multi"!=r||(Dt(n),Nn(t)),!!r}function To(t,e){var n=uo(e,!0);return!!n&&(e.shiftKey&&!t.state.keySeq?So(t,"Shift-"+n,e,function(e){return wo(t,e,!0)})||So(t,n,e,function(e){if("string"==typeof e?/^go[A-Z]/.test(e):e.motion)return wo(t,e)}):So(t,n,e,function(e){return wo(t,e)}))}function ko(t,e,n){return So(t,"'"+n+"'",e,function(e){return wo(t,e,!0)})}function Ao(t){var e=this;if(e.curOp.focus=a(),!Mt(e,t)){ba&&xa<11&&27==t.keyCode&&(t.returnValue=!1);var n=t.keyCode;e.display.shift=16==n||t.shiftKey;var i=To(e,t);Ca&&(Ws=i?n:null,!i&&88==n&&!as&&(Pa?t.metaKey:t.ctrlKey)&&e.replaceSelection("",null,"cut")),18!=n||/\bCodeMirror-crosshair\b/.test(e.display.lineDiv.className)||Mo(e)}}function Mo(t){function e(t){18!=t.keyCode&&t.altKey||(ja(n,"CodeMirror-crosshair"),kt(document,"keyup",e),kt(document,"mouseover",e))}var n=t.display.lineDiv;s(n,"CodeMirror-crosshair"),ns(document,"keyup",e),ns(document,"mouseover",e)}function Eo(t){16==t.keyCode&&(this.doc.sel.shift=!1),Mt(this,t)}function Lo(t){var e=this;if(!(Ie(e.display,t)||Mt(e,t)||t.ctrlKey&&!t.altKey||Pa&&t.metaKey)){var n=t.keyCode,i=t.charCode;if(Ca&&n==Ws)return Ws=null,void Dt(t);if(!Ca||t.which&&!(t.which<10)||!To(e,t)){var r=String.fromCharCode(null==i?n:i);"\b"!=r&&(ko(e,t,r)||e.display.input.onKeyPress(t))}}}function Po(t,e){var n=+new Date;return Ys&&Ys.compare(n,t,e)?(Xs=Ys=null,"triple"):Xs&&Xs.compare(n,t,e)?(Ys=new Us(n,t,e),Xs=null,"double"):(Xs=new Us(n,t,e),Ys=null,"single")}function Do(t){var e=this,n=e.display;if(!(Mt(e,t)||n.activeTouch&&n.input.supportsTouch())){if(n.input.ensurePolled(),n.shift=t.shiftKey,Ie(n,t))return void(wa||(n.scroller.draggable=!1,setTimeout(function(){return n.scroller.draggable=!0},100)));if(!Vo(e,t)){var i=kn(e,t),r=Ft(t),o=i?Po(i,r):"single";window.focus(),1==r&&e.state.selectingText&&e.state.selectingText(t),i&&No(e,r,i,o,t)||(1==r?i?Ro(e,i,o,t):It(t)==n.scroller&&Dt(t):2==r?(i&&gr(e.doc,i),setTimeout(function(){return n.input.focus()},20)):3==r&&(Fa?e.display.input.onContextMenu(t):Rn(e)))}}}function No(t,e,n,i,r){var o="Click";return"double"==i?o="Double"+o:"triple"==i&&(o="Triple"+o),o=(1==e?"Left":2==e?"Middle":"Right")+o,So(t,co(o,r),r,function(e){if("string"==typeof e&&(e=Gs[e]),!e)return!1;var i=!1;try{t.isReadOnly()&&(t.state.suppressEdits=!0),i=e(t,n)!=Ga}finally{t.state.suppressEdits=!1}return i})}function Oo(t,e,n){var i=t.getOption("configureMouse"),r=i?i(t,e,n):{};if(null==r.unit){var o=Da?n.shiftKey&&n.metaKey:n.altKey;r.unit=o?"rectangle":"single"==e?"char":"double"==e?"word":"line"}return(null==r.extend||t.doc.extend)&&(r.extend=t.doc.extend||n.shiftKey),null==r.addNew&&(r.addNew=Pa?n.metaKey:n.ctrlKey),null==r.moveOnDrag&&(r.moveOnDrag=!(Pa?n.altKey:n.ctrlKey)),r}function Ro(t,e,n,i){ba?setTimeout(c(On,t),0):t.curOp.focus=a();var r,o=Oo(t,n,i),s=t.doc.sel;t.options.dragDrop&&is&&!t.isReadOnly()&&"single"==n&&(r=s.contains(e))>-1&&(I((r=s.ranges[r]).from(),e)<0||e.xRel>0)&&(I(r.to(),e)>0||e.xRel<0)?Io(t,i,e,o):jo(t,i,e,o)}function Io(t,e,n,i){var r=t.display,o=!1,a=gi(t,function(e){wa&&(r.scroller.draggable=!1),t.state.draggingText=!1,kt(r.wrapper.ownerDocument,"mouseup",a),kt(r.wrapper.ownerDocument,"mousemove",s),kt(r.scroller,"dragstart",l),kt(r.scroller,"drop",a),o||(Dt(e),i.addNew||gr(t.doc,n,null,null,i.extend),wa||ba&&9==xa?setTimeout(function(){r.wrapper.ownerDocument.body.focus(),r.input.focus()},20):r.input.focus())}),s=function(t){o=o||Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)>=10},l=function(){return o=!0};wa&&(r.scroller.draggable=!0),t.state.draggingText=a,a.copy=!i.moveOnDrag,r.scroller.dragDrop&&r.scroller.dragDrop(),ns(r.wrapper.ownerDocument,"mouseup",a),ns(r.wrapper.ownerDocument,"mousemove",s),ns(r.scroller,"dragstart",l),ns(r.scroller,"drop",a),Rn(t),setTimeout(function(){return r.input.focus()},20)}function Fo(t,e,n){if("char"==n)return new Ls(e,e);if("word"==n)return t.findWordAt(e);if("line"==n)return new Ls(R(e.line,0),q(t.doc,R(e.line+1,0)));var i=n(t,e);return new Ls(i.from,i.to)}function jo(t,e,n,i){function r(e){if(0!=I(v,e))if(v=e,"rectangle"==i.unit){for(var r=[],o=t.options.tabSize,a=h(A(c,n.line).text,n.ch,o),s=h(A(c,e.line).text,e.ch,o),l=Math.min(a,s),g=Math.max(a,s),m=Math.min(n.line,e.line),y=Math.min(t.lastLine(),Math.max(n.line,e.line));m<=y;m++){var b=A(c,m).text,x=f(b,l,o);l==g?r.push(new Ls(R(m,x),R(m,x))):b.length>x&&r.push(new Ls(R(m,x),R(m,f(b,g,o))))}r.length||r.push(new Ls(n,n)),wr(c,zi(t,p.ranges.slice(0,d).concat(r),d),{origin:"*mouse",scroll:!1}),t.scrollIntoView(e)}else{var w,_=u,S=Fo(t,e,i.unit),C=_.anchor;I(S.anchor,C)>0?(w=S.head,C=z(_.from(),S.anchor)):(w=S.anchor,C=H(_.to(),S.head));var T=p.ranges.slice(0);T[d]=Ho(t,new Ls(q(c,C),w)),wr(c,zi(t,T,d),Wa)}}function o(e){var n=++b,s=kn(t,e,!0,"rectangle"==i.unit);if(s)if(0!=I(s,v)){t.curOp.focus=a(),r(s);var u=zn(l,c);(s.line>=u.to||s.line<u.from)&&setTimeout(gi(t,function(){b==n&&o(e)}),150)}else{var h=e.clientY<y.top?-20:e.clientY>y.bottom?20:0;h&&setTimeout(gi(t,function(){b==n&&(l.scroller.scrollTop+=h,o(e))}),50)}}function s(e){t.state.selectingText=!1,b=1/0,Dt(e),l.input.focus(),kt(l.wrapper.ownerDocument,"mousemove",x),kt(l.wrapper.ownerDocument,"mouseup",w),c.history.lastSelOrigin=null}var l=t.display,c=t.doc;Dt(e);var u,d,p=c.sel,g=p.ranges;if(i.addNew&&!i.extend?(d=c.sel.contains(n),u=d>-1?g[d]:new Ls(n,n)):(u=c.sel.primary(),d=c.sel.primIndex),"rectangle"==i.unit)i.addNew||(u=new Ls(n,n)),n=kn(t,e,!0,!0),d=-1;else{var m=Fo(t,n,i.unit);u=i.extend?pr(u,m.anchor,m.head,i.extend):m}i.addNew?-1==d?(d=g.length,wr(c,zi(t,g.concat([u]),d),{scroll:!1,origin:"*mouse"})):g.length>1&&g[d].empty()&&"char"==i.unit&&!i.extend?(wr(c,zi(t,g.slice(0,d).concat(g.slice(d+1)),0),{scroll:!1,origin:"*mouse"}),p=c.sel):vr(c,d,u,Wa):(d=0,wr(c,new Es([u],0),Wa),p=c.sel);var v=n,y=l.wrapper.getBoundingClientRect(),b=0,x=gi(t,function(t){0!==t.buttons&&Ft(t)?o(t):s(t)}),w=gi(t,s);t.state.selectingText=w,ns(l.wrapper.ownerDocument,"mousemove",x),ns(l.wrapper.ownerDocument,"mouseup",w)}function Ho(t,e){var n=e.anchor,i=e.head,r=A(t.doc,n.line);if(0==I(n,i)&&n.sticky==i.sticky)return e;var o=Ct(r);if(!o)return e;var a=St(o,n.ch,n.sticky),s=o[a];if(s.from!=n.ch&&s.to!=n.ch)return e;var l=a+(s.from==n.ch==(1!=s.level)?0:1);if(0==l||l==o.length)return e;var c;if(i.line!=n.line)c=(i.line-n.line)*("ltr"==t.doc.direction?1:-1)>0;else{var u=St(o,i.ch,i.sticky),h=u-a||(i.ch-n.ch)*(1==s.level?-1:1);c=u==l-1||u==l?h<0:h>0}var d=o[l+(c?-1:0)],f=c==(1==d.level),p=f?d.from:d.to,g=f?"after":"before";return n.ch==p&&n.sticky==g?e:new Ls(new R(n.line,p,g),i)}function zo(t,e,n,i){var r,o;if(e.touches)r=e.touches[0].clientX,o=e.touches[0].clientY;else try{r=e.clientX,o=e.clientY}catch(e){return!1}if(r>=Math.floor(t.display.gutters.getBoundingClientRect().right))return!1;i&&Dt(e);var a=t.display,s=a.lineDiv.getBoundingClientRect();if(o>s.bottom||!Lt(t,n))return Ot(e);o-=s.top-a.viewOffset;for(var l=0;l<t.options.gutters.length;++l){var c=a.gutters.childNodes[l];if(c&&c.getBoundingClientRect().right>=r){return At(t,n,t,D(t.doc,o),t.options.gutters[l],e),Ot(e)}}}function Vo(t,e){return zo(t,e,"gutterClick",!0)}function qo(t,e){Ie(t.display,e)||Bo(t,e)||Mt(t,e,"contextmenu")||Fa||t.display.input.onContextMenu(e)}function Bo(t,e){return!!Lt(t,"gutterContextMenu")&&zo(t,e,"gutterContextMenu",!1)}function Go(t){t.display.wrapper.className=t.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+t.options.theme.replace(/(^|\s)\s*/g," cm-s-"),nn(t)}function $o(t){Ri(t),yi(t),Vn(t)}function Wo(t,e,n){if(!e!=!(n&&n!=Qs)){var i=t.display.dragFunctions,r=e?ns:kt;r(t.display.scroller,"dragstart",i.start),r(t.display.scroller,"dragenter",i.enter),r(t.display.scroller,"dragover",i.over),r(t.display.scroller,"dragleave",i.leave),r(t.display.scroller,"drop",i.drop)}}function Uo(t){t.options.lineWrapping?(s(t.display.wrapper,"CodeMirror-wrap"),t.display.sizer.style.minWidth="",t.display.sizerWidth=null):(ja(t.display.wrapper,"CodeMirror-wrap"),wt(t)),Tn(t),yi(t),nn(t),setTimeout(function(){return ii(t)},100)}function Xo(t,e){var n=this;if(!(this instanceof Xo))return new Xo(t,e);this.options=e=e?u(e):{},u(Zs,e,!1),Ii(e);var i=e.value;"string"==typeof i?i=new Is(i,e.mode,null,e.lineSeparator,e.direction):e.mode&&(i.modeOption=e.mode),this.doc=i;var r=new Xo.inputStyles[e.inputStyle](this),o=this.display=new k(t,i,r);o.wrapper.CodeMirror=this,Ri(this),Go(this),e.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),oi(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new za,keySeq:null,specialChars:null},e.autofocus&&!La&&o.input.focus(),ba&&xa<11&&setTimeout(function(){return n.display.input.reset(!0)},20),Yo(this),no(),ai(this),this.curOp.forceUpdate=!0,Ki(this,i),e.autofocus&&!La||this.hasFocus()?setTimeout(c(In,this),20):Fn(this);for(var a in Ks)Ks.hasOwnProperty(a)&&Ks[a](n,e[a],Qs);qn(this),e.finishInit&&e.finishInit(this);for(var s=0;s<Js.length;++s)Js[s](n);si(this),wa&&e.lineWrapping&&"optimizelegibility"==getComputedStyle(o.lineDiv).textRendering&&(o.lineDiv.style.textRendering="auto")}function Yo(t){function e(){r.activeTouch&&(o=setTimeout(function(){return r.activeTouch=null},1e3),a=r.activeTouch,a.end=+new Date)}function n(t){if(1!=t.touches.length)return!1;var e=t.touches[0];return e.radiusX<=1&&e.radiusY<=1}function i(t,e){if(null==e.left)return!0;var n=e.left-t.left,i=e.top-t.top;return n*n+i*i>400}var r=t.display;ns(r.scroller,"mousedown",gi(t,Do)),ba&&xa<11?ns(r.scroller,"dblclick",gi(t,function(e){if(!Mt(t,e)){
-var n=kn(t,e);if(n&&!Vo(t,e)&&!Ie(t.display,e)){Dt(e);var i=t.findWordAt(n);gr(t.doc,i.anchor,i.head)}}})):ns(r.scroller,"dblclick",function(e){return Mt(t,e)||Dt(e)}),ns(r.scroller,"contextmenu",function(e){return qo(t,e)});var o,a={end:0};ns(r.scroller,"touchstart",function(e){if(!Mt(t,e)&&!n(e)&&!Vo(t,e)){r.input.ensurePolled(),clearTimeout(o);var i=+new Date;r.activeTouch={start:i,moved:!1,prev:i-a.end<=300?a:null},1==e.touches.length&&(r.activeTouch.left=e.touches[0].pageX,r.activeTouch.top=e.touches[0].pageY)}}),ns(r.scroller,"touchmove",function(){r.activeTouch&&(r.activeTouch.moved=!0)}),ns(r.scroller,"touchend",function(n){var o=r.activeTouch;if(o&&!Ie(r,n)&&null!=o.left&&!o.moved&&new Date-o.start<300){var a,s=t.coordsChar(r.activeTouch,"page");a=!o.prev||i(o,o.prev)?new Ls(s,s):!o.prev.prev||i(o,o.prev.prev)?t.findWordAt(s):new Ls(R(s.line,0),q(t.doc,R(s.line+1,0))),t.setSelection(a.anchor,a.head),t.focus(),Dt(n)}e()}),ns(r.scroller,"touchcancel",e),ns(r.scroller,"scroll",function(){r.scroller.clientHeight&&(Jn(t,r.scroller.scrollTop),ei(t,r.scroller.scrollLeft,!0),At(t,"scroll",t))}),ns(r.scroller,"mousewheel",function(e){return Hi(t,e)}),ns(r.scroller,"DOMMouseScroll",function(e){return Hi(t,e)}),ns(r.wrapper,"scroll",function(){return r.wrapper.scrollTop=r.wrapper.scrollLeft=0}),r.dragFunctions={enter:function(e){Mt(t,e)||Rt(e)},over:function(e){Mt(t,e)||(Jr(t,e),Rt(e))},start:function(e){return Kr(t,e)},drop:gi(t,Zr),leave:function(e){Mt(t,e)||to(t)}};var s=r.input.getField();ns(s,"keyup",function(e){return Eo.call(t,e)}),ns(s,"keydown",gi(t,Ao)),ns(s,"keypress",gi(t,Lo)),ns(s,"focus",function(e){return In(t,e)}),ns(s,"blur",function(e){return Fn(t,e)})}function Qo(t,e,n,i){var r,o=t.doc;null==n&&(n="add"),"smart"==n&&(o.mode.indent?r=Zt(t,e).state:n="prev");var a=t.options.tabSize,s=A(o,e),l=h(s.text,null,a);s.stateAfter&&(s.stateAfter=null);var c,u=s.text.match(/^\s*/)[0];if(i||/\S/.test(s.text)){if("smart"==n&&((c=o.mode.indent(r,s.text.slice(u.length),s.text))==Ga||c>150)){if(!i)return;n="prev"}}else c=0,n="not";"prev"==n?c=e>o.first?h(A(o,e-1).text,null,a):0:"add"==n?c=l+t.options.indentUnit:"subtract"==n?c=l-t.options.indentUnit:"number"==typeof n&&(c=l+n),c=Math.max(0,c);var d="",f=0;if(t.options.indentWithTabs)for(var g=Math.floor(c/a);g;--g)f+=a,d+="\t";if(f<c&&(d+=p(c-f)),d!=u)return Fr(o,d,R(e,0),R(e,u.length),"+input"),s.stateAfter=null,!0;for(var m=0;m<o.sel.ranges.length;m++){var v=o.sel.ranges[m];if(v.head.line==e&&v.head.ch<u.length){var y=R(e,u.length);vr(o,m,new Ls(y,y));break}}}function Zo(t){tl=t}function Ko(t,e,n,i,r){var o=t.doc;t.display.shift=!1,i||(i=o.sel);var a=+new Date-200,s="paste"==r||t.state.pasteIncoming>a,l=rs(e),c=null;if(s&&i.ranges.length>1)if(tl&&tl.text.join("\n")==e){if(i.ranges.length%tl.text.length==0){c=[];for(var u=0;u<tl.text.length;u++)c.push(o.splitLines(tl.text[u]))}}else l.length==i.ranges.length&&t.options.pasteLinesPerSelection&&(c=m(l,function(t){return[t]}));for(var h=t.curOp.updateInput,d=i.ranges.length-1;d>=0;d--){var f=i.ranges[d],p=f.from(),v=f.to();f.empty()&&(n&&n>0?p=R(p.line,p.ch-n):t.state.overwrite&&!s?v=R(v.line,Math.min(A(o,v.line).text.length,v.ch+g(l).length)):s&&tl&&tl.lineWise&&tl.text.join("\n")==e&&(p=v=R(p.line,0)));var y={from:p,to:v,text:c?c[d%c.length]:l,origin:r||(s?"paste":t.state.cutIncoming>a?"cut":"+input")};Pr(t.doc,y),we(t,"inputRead",t,y)}e&&!s&&ta(t,e),Xn(t),t.curOp.updateInput<2&&(t.curOp.updateInput=h),t.curOp.typing=!0,t.state.pasteIncoming=t.state.cutIncoming=-1}function Jo(t,e){var n=t.clipboardData&&t.clipboardData.getData("Text");if(n)return t.preventDefault(),e.isReadOnly()||e.options.disableInput||pi(e,function(){return Ko(e,n,0,null,"paste")}),!0}function ta(t,e){if(t.options.electricChars&&t.options.smartIndent)for(var n=t.doc.sel,i=n.ranges.length-1;i>=0;i--){var r=n.ranges[i];if(!(r.head.ch>100||i&&n.ranges[i-1].head.line==r.head.line)){var o=t.getModeAt(r.head),a=!1;if(o.electricChars){for(var s=0;s<o.electricChars.length;s++)if(e.indexOf(o.electricChars.charAt(s))>-1){a=Qo(t,r.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(A(t.doc,r.head.line).text.slice(0,r.head.ch))&&(a=Qo(t,r.head.line,"smart"));a&&we(t,"electricInput",t,r.head.line)}}}function ea(t){for(var e=[],n=[],i=0;i<t.doc.sel.ranges.length;i++){var r=t.doc.sel.ranges[i].head.line,o={anchor:R(r,0),head:R(r+1,0)};n.push(o),e.push(t.getRange(o.anchor,o.head))}return{text:e,ranges:n}}function na(t,e,n,i){t.setAttribute("autocorrect",!!n),t.setAttribute("autocapitalize",!!i),t.setAttribute("spellcheck",!!e)}function ia(){var t=i("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),e=i("div",[t],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return wa?t.style.width="1000px":t.setAttribute("wrap","off"),Ma&&(t.style.border="1px solid black"),na(t),e}function ra(t,e,n,i,r){function o(){var i=e.line+n;return!(i<t.first||i>=t.first+t.size)&&(e=new R(i,e.ch,e.sticky),c=A(t,i))}function a(i){var a;if(null==(a=r?vo(t.cm,c,e,n):go(c,e,n))){if(i||!o())return!1;e=mo(r,t.cm,c,e.line,n)}else e=a;return!0}var s=e,l=n,c=A(t,e.line);if("char"==i)a();else if("column"==i)a(!0);else if("word"==i||"group"==i)for(var u=null,h="group"==i,d=t.cm&&t.cm.getHelper(e,"wordChars"),f=!0;!(n<0)||a(!f);f=!1){var p=c.text.charAt(e.ch)||"\n",g=w(p,d)?"w":h&&"\n"==p?"n":!h||/\s/.test(p)?null:"p";if(!h||f||g||(g="s"),u&&u!=g){n<0&&(n=1,a(),e.sticky="after");break}if(g&&(u=g),n>0&&!a(!f))break}var m=Ar(t,e,s,l,!0);return F(s,m)&&(m.hitSide=!0),m}function oa(t,e,n,i){var r,o=t.doc,a=e.left;if("page"==i){var s=Math.min(t.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),l=Math.max(s-.5*xn(t.display),3);r=(n>0?e.bottom:e.top)+n*l}else"line"==i&&(r=n>0?e.bottom+3:e.top-3);for(var c;c=fn(t,a,r),c.outside;){if(n<0?r<=0:r>=o.height){c.hitSide=!0;break}r+=5*n}return c}function aa(t,e){var n=Ue(t,e.line);if(!n||n.hidden)return null;var i=A(t.doc,e.line),r=Ge(n,i,e.line),o=Ct(i,t.doc.direction),a="left";if(o){a=St(o,e.ch)%2?"right":"left"}var s=Qe(r.map,e.ch,a);return s.offset="right"==s.collapse?s.end:s.start,s}function sa(t){for(var e=t;e;e=e.parentNode)if(/CodeMirror-gutter-wrapper/.test(e.className))return!0;return!1}function la(t,e){return e&&(t.bad=!0),t}function ca(t,e,n,i,r){function o(t){return function(e){return e.id==t}}function a(){u&&(c+=h,d&&(c+=h),u=d=!1)}function s(t){t&&(a(),c+=t)}function l(e){if(1==e.nodeType){var n=e.getAttribute("cm-text");if(n)return void s(n);var c,f=e.getAttribute("cm-marker");if(f){var p=t.findMarks(R(i,0),R(r+1,0),o(+f));return void(p.length&&(c=p[0].find(0))&&s(M(t.doc,c.from,c.to).join(h)))}if("false"==e.getAttribute("contenteditable"))return;var g=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;g&&a();for(var m=0;m<e.childNodes.length;m++)l(e.childNodes[m]);/^(pre|p)$/i.test(e.nodeName)&&(d=!0),g&&(u=!0)}else 3==e.nodeType&&s(e.nodeValue.replace(/\u200b/g,"").replace(/\u00a0/g," "))}for(var c="",u=!1,h=t.doc.lineSeparator(),d=!1;l(e),e!=n;)e=e.nextSibling,d=!1;return c}function ua(t,e,n){var i;if(e==t.display.lineDiv){if(!(i=t.display.lineDiv.childNodes[n]))return la(t.clipPos(R(t.display.viewTo-1)),!0);e=null,n=0}else for(i=e;;i=i.parentNode){if(!i||i==t.display.lineDiv)return null;if(i.parentNode&&i.parentNode==t.display.lineDiv)break}for(var r=0;r<t.display.view.length;r++){var o=t.display.view[r];if(o.node==i)return ha(o,e,n)}}function ha(t,e,n){function i(e,n,i){for(var r=-1;r<(h?h.length:0);r++)for(var o=r<0?u.map:h[r],a=0;a<o.length;a+=3){var s=o[a+2];if(s==e||s==n){var l=P(r<0?t.line:t.rest[r]),c=o[a]+i;return(i<0||s!=e)&&(c=o[a+(i?1:0)]),R(l,c)}}}var r=t.text.firstChild,a=!1;if(!e||!o(r,e))return la(R(P(t.line),0),!0);if(e==r&&(a=!0,e=r.childNodes[n],n=0,!e)){var s=t.rest?g(t.rest):t.line;return la(R(P(s),s.text.length),a)}var l=3==e.nodeType?e:null,c=e;for(l||1!=e.childNodes.length||3!=e.firstChild.nodeType||(l=e.firstChild,n&&(n=l.nodeValue.length));c.parentNode!=r;)c=c.parentNode;var u=t.measure,h=u.maps,d=i(l,c,n);if(d)return la(d,a);for(var f=c.nextSibling,p=l?l.nodeValue.length-n:0;f;f=f.nextSibling){if(d=i(f,f.firstChild,0))return la(R(d.line,d.ch-p),a);p+=f.textContent.length}for(var m=c.previousSibling,v=n;m;m=m.previousSibling){if(d=i(m,m.firstChild,-1))return la(R(d.line,d.ch+v),a);v+=m.textContent.length}}function da(t,e){function n(){t.value=l.getValue()}if(e=e?u(e):{},e.value=t.value,!e.tabindex&&t.tabIndex&&(e.tabindex=t.tabIndex),!e.placeholder&&t.placeholder&&(e.placeholder=t.placeholder),null==e.autofocus){var i=a();e.autofocus=i==t||null!=t.getAttribute("autofocus")&&i==document.body}var r;if(t.form&&(ns(t.form,"submit",n),!e.leaveSubmitMethodAlone)){var o=t.form;r=o.submit;try{var s=o.submit=function(){n(),o.submit=r,o.submit(),o.submit=s}}catch(t){}}e.finishInit=function(e){e.save=n,e.getTextArea=function(){return t},e.toTextArea=function(){e.toTextArea=isNaN,n(),t.parentNode.removeChild(e.getWrapperElement()),t.style.display="",t.form&&(kt(t.form,"submit",n),"function"==typeof t.form.submit&&(t.form.submit=r))}},t.style.display="none";var l=Xo(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},e);return l}var fa=navigator.userAgent,pa=navigator.platform,ga=/gecko\/\d/i.test(fa),ma=/MSIE \d/.test(fa),va=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(fa),ya=/Edge\/(\d+)/.exec(fa),ba=ma||va||ya,xa=ba&&(ma?document.documentMode||6:+(ya||va)[1]),wa=!ya&&/WebKit\//.test(fa),_a=wa&&/Qt\/\d+\.\d+/.test(fa),Sa=!ya&&/Chrome\//.test(fa),Ca=/Opera\//.test(fa),Ta=/Apple Computer/.test(navigator.vendor),ka=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(fa),Aa=/PhantomJS/.test(fa),Ma=!ya&&/AppleWebKit/.test(fa)&&/Mobile\/\w+/.test(fa),Ea=/Android/.test(fa),La=Ma||Ea||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(fa),Pa=Ma||/Mac/.test(pa),Da=/\bCrOS\b/.test(fa),Na=/win/i.test(pa),Oa=Ca&&fa.match(/Version\/(\d*\.\d*)/);Oa&&(Oa=Number(Oa[1])),Oa&&Oa>=15&&(Ca=!1,wa=!0);var Ra,Ia=Pa&&(_a||Ca&&(null==Oa||Oa<12.11)),Fa=ga||ba&&xa>=9,ja=function(e,n){var i=e.className,r=t(n).exec(i);if(r){var o=i.slice(r.index+r[0].length);e.className=i.slice(0,r.index)+(o?r[1]+o:"")}};Ra=document.createRange?function(t,e,n,i){var r=document.createRange();return r.setEnd(i||t,n),r.setStart(t,e),r}:function(t,e,n){var i=document.body.createTextRange();try{i.moveToElementText(t.parentNode)}catch(t){return i}return i.collapse(!0),i.moveEnd("character",n),i.moveStart("character",e),i};var Ha=function(t){t.select()};Ma?Ha=function(t){t.selectionStart=0,t.selectionEnd=t.value.length}:ba&&(Ha=function(t){try{t.select()}catch(t){}});var za=function(){this.id=null};za.prototype.set=function(t,e){clearTimeout(this.id),this.id=setTimeout(e,t)};var Va,qa,Ba=30,Ga={toString:function(){return"CodeMirror.Pass"}},$a={scroll:!1},Wa={origin:"*mouse"},Ua={origin:"+move"},Xa=[""],Ya=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Qa=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,Za=!1,Ka=!1,Ja=null,ts=function(){function t(t){return t<=247?n.charAt(t):1424<=t&&t<=1524?"R":1536<=t&&t<=1785?i.charAt(t-1536):1774<=t&&t<=2220?"r":8192<=t&&t<=8203?"w":8204==t?"b":"L"}function e(t,e,n){this.level=t,this.from=e,this.to=n}var n="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",i="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111",r=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,o=/[stwN]/,a=/[LRr]/,s=/[Lb1n]/,l=/[1n]/;return function(n,i){var c="ltr"==i?"L":"R";if(0==n.length||"ltr"==i&&!r.test(n))return!1;for(var u=n.length,h=[],d=0;d<u;++d)h.push(t(n.charCodeAt(d)));for(var f=0,p=c;f<u;++f){var m=h[f];"m"==m?h[f]=p:p=m}for(var v=0,y=c;v<u;++v){var b=h[v];"1"==b&&"r"==y?h[v]="n":a.test(b)&&(y=b,"r"==b&&(h[v]="R"))}for(var x=1,w=h[0];x<u-1;++x){var _=h[x];"+"==_&&"1"==w&&"1"==h[x+1]?h[x]="1":","!=_||w!=h[x+1]||"1"!=w&&"n"!=w||(h[x]=w),w=_}for(var S=0;S<u;++S){var C=h[S];if(","==C)h[S]="N";else if("%"==C){var T=void 0;for(T=S+1;T<u&&"%"==h[T];++T);for(var k=S&&"!"==h[S-1]||T<u&&"1"==h[T]?"1":"N",A=S;A<T;++A)h[A]=k;S=T-1}}for(var M=0,E=c;M<u;++M){var L=h[M];"L"==E&&"1"==L?h[M]="L":a.test(L)&&(E=L)}for(var P=0;P<u;++P)if(o.test(h[P])){var D=void 0;for(D=P+1;D<u&&o.test(h[D]);++D);for(var N="L"==(P?h[P-1]:c),O="L"==(D<u?h[D]:c),R=N==O?N?"L":"R":c,I=P;I<D;++I)h[I]=R;P=D-1}for(var F,j=[],H=0;H<u;)if(s.test(h[H])){var z=H;for(++H;H<u&&s.test(h[H]);++H);j.push(new e(0,z,H))}else{var V=H,q=j.length;for(++H;H<u&&"L"!=h[H];++H);for(var B=V;B<H;)if(l.test(h[B])){V<B&&j.splice(q,0,new e(1,V,B));var G=B;for(++B;B<H&&l.test(h[B]);++B);j.splice(q,0,new e(2,G,B)),V=B}else++B;V<H&&j.splice(q,0,new e(1,V,H))}return"ltr"==i&&(1==j[0].level&&(F=n.match(/^\s+/))&&(j[0].from=F[0].length,j.unshift(new e(0,0,F[0].length))),1==g(j).level&&(F=n.match(/\s+$/))&&(g(j).to-=F[0].length,j.push(new e(0,u-F[0].length,u)))),"rtl"==i?j.reverse():j}}(),es=[],ns=function(t,e,n){if(t.addEventListener)t.addEventListener(e,n,!1);else if(t.attachEvent)t.attachEvent("on"+e,n);else{var i=t._handlers||(t._handlers={});i[e]=(i[e]||es).concat(n)}},is=function(){if(ba&&xa<9)return!1;var t=i("div");return"draggable"in t||"dragDrop"in t}(),rs=3!="\n\nb".split(/\n/).length?function(t){for(var e=0,n=[],i=t.length;e<=i;){var r=t.indexOf("\n",e);-1==r&&(r=t.length);var o=t.slice(e,"\r"==t.charAt(r-1)?r-1:r),a=o.indexOf("\r");-1!=a?(n.push(o.slice(0,a)),e+=a+1):(n.push(o),e=r+1)}return n}:function(t){return t.split(/\r\n?|\n/)},os=window.getSelection?function(t){try{return t.selectionStart!=t.selectionEnd}catch(t){return!1}}:function(t){var e;try{e=t.ownerDocument.selection.createRange()}catch(t){}return!(!e||e.parentElement()!=t)&&0!=e.compareEndPoints("StartToEnd",e)},as=function(){var t=i("div");return"oncopy"in t||(t.setAttribute("oncopy","return;"),"function"==typeof t.oncopy)}(),ss=null,ls={},cs={},us={},hs=function(t,e,n){this.pos=this.start=0,this.string=t,this.tabSize=e||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};hs.prototype.eol=function(){return this.pos>=this.string.length},hs.prototype.sol=function(){return this.pos==this.lineStart},hs.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},hs.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},hs.prototype.eat=function(t){var e=this.string.charAt(this.pos);if("string"==typeof t?e==t:e&&(t.test?t.test(e):t(e)))return++this.pos,e},hs.prototype.eatWhile=function(t){for(var e=this.pos;this.eat(t););return this.pos>e},hs.prototype.eatSpace=function(){for(var t=this,e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++t.pos;return this.pos>e},hs.prototype.skipToEnd=function(){this.pos=this.string.length},hs.prototype.skipTo=function(t){var e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0},hs.prototype.backUp=function(t){this.pos-=t},hs.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=h(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?h(this.string,this.lineStart,this.tabSize):0)},hs.prototype.indentation=function(){return h(this.string,null,this.tabSize)-(this.lineStart?h(this.string,this.lineStart,this.tabSize):0)},hs.prototype.match=function(t,e,n){if("string"!=typeof t){var i=this.string.slice(this.pos).match(t);return i&&i.index>0?null:(i&&!1!==e&&(this.pos+=i[0].length),i)}var r=function(t){return n?t.toLowerCase():t};if(r(this.string.substr(this.pos,t.length))==r(t))return!1!==e&&(this.pos+=t.length),!0},hs.prototype.current=function(){return this.string.slice(this.start,this.pos)},hs.prototype.hideFirstChars=function(t,e){this.lineStart+=t;try{return e()}finally{this.lineStart-=t}},hs.prototype.lookAhead=function(t){var e=this.lineOracle;return e&&e.lookAhead(t)},hs.prototype.baseToken=function(){var t=this.lineOracle;return t&&t.baseToken(this.pos)};var ds=function(t,e){this.state=t,this.lookAhead=e},fs=function(t,e,n,i){this.state=e,this.doc=t,this.line=n,this.maxLookAhead=i||0,this.baseTokens=null,this.baseTokenPos=1};fs.prototype.lookAhead=function(t){var e=this.doc.getLine(this.line+t);return null!=e&&t>this.maxLookAhead&&(this.maxLookAhead=t),e},fs.prototype.baseToken=function(t){var e=this;if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=t;)e.baseTokenPos+=2;var n=this.baseTokens[this.baseTokenPos+1];return{type:n&&n.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-t}},fs.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},fs.fromSaved=function(t,e,n){return e instanceof ds?new fs(t,Wt(t.mode,e.state),n,e.lookAhead):new fs(t,Wt(t.mode,e),n)},fs.prototype.save=function(t){var e=!1!==t?Wt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ds(e,this.maxLookAhead):e};var ps=function(t,e,n){this.start=t.start,this.end=t.pos,this.string=t.current(),this.type=e||null,this.state=n},gs=function(t,e,n){this.text=t,it(this,e),this.height=n?n(this):1};gs.prototype.lineNo=function(){return P(this)},Pt(gs);var ms,vs={},ys={},bs=null,xs=null,ws={left:0,right:0,top:0,bottom:0},_s=function(t,e,n){this.cm=n;var r=this.vert=i("div",[i("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),o=this.horiz=i("div",[i("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=o.tabIndex=-1,t(r),t(o),ns(r,"scroll",function(){r.clientHeight&&e(r.scrollTop,"vertical")}),ns(o,"scroll",function(){o.clientWidth&&e(o.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,ba&&xa<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};_s.prototype.update=function(t){var e=t.scrollWidth>t.clientWidth+1,n=t.scrollHeight>t.clientHeight+1,i=t.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=e?i+"px":"0";var r=t.viewHeight-(e?i:0);this.vert.firstChild.style.height=Math.max(0,t.scrollHeight-t.clientHeight+r)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(e){this.horiz.style.display="block",this.horiz.style.right=n?i+"px":"0",this.horiz.style.left=t.barLeft+"px";var o=t.viewWidth-t.barLeft-(n?i:0);this.horiz.firstChild.style.width=Math.max(0,t.scrollWidth-t.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&t.clientHeight>0&&(0==i&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?i:0,bottom:e?i:0}},_s.prototype.setScrollLeft=function(t){this.horiz.scrollLeft!=t&&(this.horiz.scrollLeft=t),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},_s.prototype.setScrollTop=function(t){this.vert.scrollTop!=t&&(this.vert.scrollTop=t),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},_s.prototype.zeroWidthHack=function(){var t=Pa&&!ka?"12px":"18px";this.horiz.style.height=this.vert.style.width=t,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new za,this.disableVert=new za},_s.prototype.enableZeroWidthBar=function(t,e,n){function i(){var r=t.getBoundingClientRect();("vert"==n?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1))!=t?t.style.pointerEvents="none":e.set(1e3,i)}t.style.pointerEvents="auto",e.set(1e3,i)},_s.prototype.clear=function(){var t=this.horiz.parentNode;t.removeChild(this.horiz),t.removeChild(this.vert)};var Ss=function(){};Ss.prototype.update=function(){return{bottom:0,right:0}},Ss.prototype.setScrollLeft=function(){},Ss.prototype.setScrollTop=function(){},Ss.prototype.clear=function(){};var Cs={native:_s,null:Ss},Ts=0,ks=function(t,e,n){var i=t.display;this.viewport=e,this.visible=zn(i,t.doc,e),this.editorIsHidden=!i.wrapper.offsetWidth,this.wrapperHeight=i.wrapper.clientHeight,this.wrapperWidth=i.wrapper.clientWidth,this.oldDisplayWidth=Ve(t),this.force=n,this.dims=_n(t),this.events=[]};ks.prototype.signal=function(t,e){Lt(t,e)&&this.events.push(arguments)},ks.prototype.finish=function(){for(var t=this,e=0;e<this.events.length;e++)At.apply(null,t.events[e])};var As=0,Ms=null;ba?Ms=-.53:ga?Ms=15:Sa?Ms=-.7:Ta&&(Ms=-1/3);var Es=function(t,e){this.ranges=t,this.primIndex=e};Es.prototype.primary=function(){return this.ranges[this.primIndex]},Es.prototype.equals=function(t){var e=this;if(t==this)return!0;if(t.primIndex!=this.primIndex||t.ranges.length!=this.ranges.length)return!1;for(var n=0;n<this.ranges.length;n++){var i=e.ranges[n],r=t.ranges[n];if(!F(i.anchor,r.anchor)||!F(i.head,r.head))return!1}return!0},Es.prototype.deepCopy=function(){for(var t=this,e=[],n=0;n<this.ranges.length;n++)e[n]=new Ls(j(t.ranges[n].anchor),j(t.ranges[n].head));return new Es(e,this.primIndex)},Es.prototype.somethingSelected=function(){for(var t=this,e=0;e<this.ranges.length;e++)if(!t.ranges[e].empty())return!0;return!1},Es.prototype.contains=function(t,e){var n=this;e||(e=t);for(var i=0;i<this.ranges.length;i++){var r=n.ranges[i];if(I(e,r.from())>=0&&I(t,r.to())<=0)return i}return-1};var Ls=function(t,e){this.anchor=t,this.head=e};Ls.prototype.from=function(){return z(this.anchor,this.head)},Ls.prototype.to=function(){return H(this.anchor,this.head)},Ls.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},qr.prototype={chunkSize:function(){return this.lines.length},removeInner:function(t,e){for(var n=this,i=t,r=t+e;i<r;++i){var o=n.lines[i];n.height-=o.height,se(o),we(o,"delete")}this.lines.splice(t,e)},collapse:function(t){t.push.apply(t,this.lines)},insertInner:function(t,e,n){var i=this;this.height+=n,this.lines=this.lines.slice(0,t).concat(e).concat(this.lines.slice(t));for(var r=0;r<e.length;++r)e[r].parent=i},iterN:function(t,e,n){for(var i=this,r=t+e;t<r;++t)if(n(i.lines[t]))return!0}},Br.prototype={chunkSize:function(){return this.size},removeInner:function(t,e){var n=this;this.size-=e;for(var i=0;i<this.children.length;++i){var r=n.children[i],o=r.chunkSize();if(t<o){var a=Math.min(e,o-t),s=r.height;if(r.removeInner(t,a),n.height-=s-r.height,o==a&&(n.children.splice(i--,1),r.parent=null),0==(e-=a))break;t=0}else t-=o}if(this.size-e<25&&(this.children.length>1||!(this.children[0]instanceof qr))){var l=[];this.collapse(l),this.children=[new qr(l)],this.children[0].parent=this}},collapse:function(t){for(var e=this,n=0;n<this.children.length;++n)e.children[n].collapse(t)},insertInner:function(t,e,n){var i=this;this.size+=e.length,this.height+=n;for(var r=0;r<this.children.length;++r){var o=i.children[r],a=o.chunkSize();if(t<=a){if(o.insertInner(t,e,n),o.lines&&o.lines.length>50){for(var s=o.lines.length%25+25,l=s;l<o.lines.length;){var c=new qr(o.lines.slice(l,l+=25));o.height-=c.height,i.children.splice(++r,0,c),c.parent=i}o.lines=o.lines.slice(0,s),i.maybeSpill()}break}t-=a}},maybeSpill:function(){if(!(this.children.length<=10)){var t=this;do{var e=t.children.splice(t.children.length-5,5),n=new Br(e);if(t.parent){t.size-=n.size,t.height-=n.height;var i=d(t.parent.children,t);t.parent.children.splice(i+1,0,n)}else{var r=new Br(t.children);r.parent=t,t.children=[r,n],t=r}n.parent=t.parent}while(t.children.length>10);t.parent.maybeSpill()}},iterN:function(t,e,n){for(var i=this,r=0;r<this.children.length;++r){var o=i.children[r],a=o.chunkSize();if(t<a){var s=Math.min(e,a-t);if(o.iterN(t,s,n))return!0;if(0==(e-=s))break;t=0}else t-=a}}};var Ps=function(t,e,n){var i=this;if(n)for(var r in n)n.hasOwnProperty(r)&&(i[r]=n[r]);this.doc=t,this.node=e};Ps.prototype.clear=function(){var t=this,e=this.doc.cm,n=this.line.widgets,i=this.line,r=P(i);if(null!=r&&n){for(var o=0;o<n.length;++o)n[o]==t&&n.splice(o--,1);n.length||(i.widgets=null);var a=Re(this);L(i,Math.max(0,i.height-a)),e&&(pi(e,function(){Gr(e,i,-a),bi(e,r,"widget")}),we(e,"lineWidgetCleared",e,this,r))}},Ps.prototype.changed=function(){var t=this,e=this.height,n=this.doc.cm,i=this.line;this.height=null;var r=Re(this)-e;r&&(vt(this.doc,i)||L(i,i.height+r),n&&pi(n,function(){n.curOp.forceUpdate=!0,Gr(n,i,r),we(n,"lineWidgetChanged",n,t,P(i))}))},Pt(Ps);var Ds=0,Ns=function(t,e){this.lines=[],this.type=e,this.doc=t,this.id=++Ds};Ns.prototype.clear=function(){var t=this;if(!this.explicitlyCleared){var e=this.doc.cm,n=e&&!e.curOp;if(n&&ai(e),Lt(this,"clear")){var i=this.find();i&&we(this,"clear",i.from,i.to)}for(var r=null,o=null,a=0;a<this.lines.length;++a){var s=t.lines[a],l=X(s.markedSpans,t);e&&!t.collapsed?bi(e,P(s),"text"):e&&(null!=l.to&&(o=P(s)),null!=l.from&&(r=P(s))),s.markedSpans=Y(s.markedSpans,l),null==l.from&&t.collapsed&&!vt(t.doc,s)&&e&&L(s,xn(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var c=0;c<this.lines.length;++c){var u=dt(t.lines[c]),h=xt(u);h>e.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=h,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&yi(e,r,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Cr(e.doc)),e&&we(e,"markerCleared",e,this,r,o),n&&si(e),this.parent&&this.parent.clear()}},Ns.prototype.find=function(t,e){var n=this;null==t&&"bookmark"==this.type&&(t=1);for(var i,r,o=0;o<this.lines.length;++o){var a=n.lines[o],s=X(a.markedSpans,n);if(null!=s.from&&(i=R(e?a:P(a),s.from),-1==t))return i;if(null!=s.to&&(r=R(e?a:P(a),s.to),1==t))return r}return i&&{from:i,to:r}},Ns.prototype.changed=function(){var t=this,e=this.find(-1,!0),n=this,i=this.doc.cm;e&&i&&pi(i,function(){var r=e.line,o=P(e.line),a=Ue(i,o);if(a&&(tn(a),i.curOp.selectionChanged=i.curOp.forceUpdate=!0),i.curOp.updateMaxLine=!0,!vt(n.doc,r)&&null!=n.height){var s=n.height;n.height=null;var l=Re(n)-s;l&&L(r,r.height+l)}we(i,"markerChanged",i,t)})},Ns.prototype.attachLine=function(t){if(!this.lines.length&&this.doc.cm){var e=this.doc.cm.curOp;e.maybeHiddenMarkers&&-1!=d(e.maybeHiddenMarkers,this)||(e.maybeUnhiddenMarkers||(e.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(t)},Ns.prototype.detachLine=function(t){if(this.lines.splice(d(this.lines,t),1),!this.lines.length&&this.doc.cm){var e=this.doc.cm.curOp;(e.maybeHiddenMarkers||(e.maybeHiddenMarkers=[])).push(this)}},Pt(Ns);var Os=function(t,e){var n=this;this.markers=t,this.primary=e;for(var i=0;i<t.length;++i)t[i].parent=n};Os.prototype.clear=function(){var t=this;if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)t.markers[e].clear();we(this,"clear")}},Os.prototype.find=function(t,e){return this.primary.find(t,e)},Pt(Os);var Rs=0,Is=function(t,e,n,i,r){if(!(this instanceof Is))return new Is(t,e,n,i,r);null==n&&(n=0),Br.call(this,[new qr([new gs("",null)])]),this.first=n,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=n;var o=R(n,0);this.sel=Vi(o),this.history=new er(null),this.id=++Rs,this.modeOption=e,this.lineSep=i,this.direction="rtl"==r?"rtl":"ltr",this.extend=!1,"string"==typeof t&&(t=this.splitLines(t)),Qi(this,{from:o,to:o,text:t}),wr(this,Vi(o),$a)};Is.prototype=b(Br.prototype,{constructor:Is,iter:function(t,e,n){n?this.iterN(t-this.first,e-t,n):this.iterN(this.first,this.first+this.size,t)},insert:function(t,e){for(var n=0,i=0;i<e.length;++i)n+=e[i].height;this.insertInner(t-this.first,e,n)},remove:function(t,e){this.removeInner(t-this.first,e)},getValue:function(t){var e=E(this,this.first,this.first+this.size);return!1===t?e:e.join(t||this.lineSeparator())},setValue:vi(function(t){var e=R(this.first,0),n=this.first+this.size-1;Pr(this,{from:e,to:R(n,A(this,n).text.length),text:this.splitLines(t),origin:"setValue",full:!0},!0),this.cm&&Yn(this.cm,0,0),wr(this,Vi(e),$a)}),replaceRange:function(t,e,n,i){e=q(this,e),n=n?q(this,n):e,Fr(this,t,e,n,i)},getRange:function(t,e,n){var i=M(this,q(this,t),q(this,e));return!1===n?i:i.join(n||this.lineSeparator())},getLine:function(t){var e=this.getLineHandle(t);return e&&e.text},getLineHandle:function(t){if(N(this,t))return A(this,t)},getLineNumber:function(t){return P(t)},getLineHandleVisualStart:function(t){return"number"==typeof t&&(t=A(this,t)),dt(t)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(t){return q(this,t)},getCursor:function(t){var e=this.sel.primary();return null==t||"head"==t?e.head:"anchor"==t?e.anchor:"end"==t||"to"==t||!1===t?e.to():e.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:vi(function(t,e,n){yr(this,q(this,"number"==typeof t?R(t,e||0):t),null,n)}),setSelection:vi(function(t,e,n){yr(this,q(this,t),q(this,e||t),n)}),extendSelection:vi(function(t,e,n){gr(this,q(this,t),e&&q(this,e),n)}),extendSelections:vi(function(t,e){mr(this,G(this,t),e)}),extendSelectionsBy:vi(function(t,e){mr(this,G(this,m(this.sel.ranges,t)),e)}),setSelections:vi(function(t,e,n){var i=this;if(t.length){for(var r=[],o=0;o<t.length;o++)r[o]=new Ls(q(i,t[o].anchor),q(i,t[o].head));null==e&&(e=Math.min(t.length-1,this.sel.primIndex)),wr(this,zi(this.cm,r,e),n)}}),addSelection:vi(function(t,e,n){var i=this.sel.ranges.slice(0);i.push(new Ls(q(this,t),q(this,e||t))),wr(this,zi(this.cm,i,i.length-1),n)}),getSelection:function(t){for(var e,n=this,i=this.sel.ranges,r=0;r<i.length;r++){var o=M(n,i[r].from(),i[r].to());e=e?e.concat(o):o}return!1===t?e:e.join(t||this.lineSeparator())},getSelections:function(t){for(var e=this,n=[],i=this.sel.ranges,r=0;r<i.length;r++){var o=M(e,i[r].from(),i[r].to());!1!==t&&(o=o.join(t||e.lineSeparator())),n[r]=o}return n},replaceSelection:function(t,e,n){for(var i=[],r=0;r<this.sel.ranges.length;r++)i[r]=t
-;this.replaceSelections(i,e,n||"+input")},replaceSelections:vi(function(t,e,n){for(var i=this,r=[],o=this.sel,a=0;a<o.ranges.length;a++){var s=o.ranges[a];r[a]={from:s.from(),to:s.to(),text:i.splitLines(t[a]),origin:n}}for(var l=e&&"end"!=e&&Wi(this,r,e),c=r.length-1;c>=0;c--)Pr(i,r[c]);l?xr(this,l):this.cm&&Xn(this.cm)}),undo:vi(function(){Nr(this,"undo")}),redo:vi(function(){Nr(this,"redo")}),undoSelection:vi(function(){Nr(this,"undo",!0)}),redoSelection:vi(function(){Nr(this,"redo",!0)}),setExtending:function(t){this.extend=t},getExtending:function(){return this.extend},historySize:function(){for(var t=this.history,e=0,n=0,i=0;i<t.done.length;i++)t.done[i].ranges||++e;for(var r=0;r<t.undone.length;r++)t.undone[r].ranges||++n;return{undo:e,redo:n}},clearHistory:function(){this.history=new er(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(t){return t&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(t){return this.history.generation==(t||this.cleanGeneration)},getHistory:function(){return{done:fr(this.history.done),undone:fr(this.history.undone)}},setHistory:function(t){var e=this.history=new er(this.history.maxGeneration);e.done=fr(t.done.slice(0),null,!0),e.undone=fr(t.undone.slice(0),null,!0)},setGutterMarker:vi(function(t,e,n){return Vr(this,t,"gutter",function(t){var i=t.gutterMarkers||(t.gutterMarkers={});return i[e]=n,!n&&_(i)&&(t.gutterMarkers=null),!0})}),clearGutter:vi(function(t){var e=this;this.iter(function(n){n.gutterMarkers&&n.gutterMarkers[t]&&Vr(e,n,"gutter",function(){return n.gutterMarkers[t]=null,_(n.gutterMarkers)&&(n.gutterMarkers=null),!0})})}),lineInfo:function(t){var e;if("number"==typeof t){if(!N(this,t))return null;if(e=t,!(t=A(this,t)))return null}else if(null==(e=P(t)))return null;return{line:e,handle:t,text:t.text,gutterMarkers:t.gutterMarkers,textClass:t.textClass,bgClass:t.bgClass,wrapClass:t.wrapClass,widgets:t.widgets}},addLineClass:vi(function(e,n,i){return Vr(this,e,"gutter"==n?"gutter":"class",function(e){var r="text"==n?"textClass":"background"==n?"bgClass":"gutter"==n?"gutterClass":"wrapClass";if(e[r]){if(t(i).test(e[r]))return!1;e[r]+=" "+i}else e[r]=i;return!0})}),removeLineClass:vi(function(e,n,i){return Vr(this,e,"gutter"==n?"gutter":"class",function(e){var r="text"==n?"textClass":"background"==n?"bgClass":"gutter"==n?"gutterClass":"wrapClass",o=e[r];if(!o)return!1;if(null==i)e[r]=null;else{var a=o.match(t(i));if(!a)return!1;var s=a.index+a[0].length;e[r]=o.slice(0,a.index)+(a.index&&s!=o.length?" ":"")+o.slice(s)||null}return!0})}),addLineWidget:vi(function(t,e,n){return $r(this,t,e,n)}),removeLineWidget:function(t){t.clear()},markText:function(t,e,n){return Wr(this,q(this,t),q(this,e),n,n&&n.type||"range")},setBookmark:function(t,e){var n={replacedWith:e&&(null==e.nodeType?e.widget:e),insertLeft:e&&e.insertLeft,clearWhenEmpty:!1,shared:e&&e.shared,handleMouseEvents:e&&e.handleMouseEvents};return t=q(this,t),Wr(this,t,t,n,"bookmark")},findMarksAt:function(t){t=q(this,t);var e=[],n=A(this,t.line).markedSpans;if(n)for(var i=0;i<n.length;++i){var r=n[i];(null==r.from||r.from<=t.ch)&&(null==r.to||r.to>=t.ch)&&e.push(r.marker.parent||r.marker)}return e},findMarks:function(t,e,n){t=q(this,t),e=q(this,e);var i=[],r=t.line;return this.iter(t.line,e.line+1,function(o){var a=o.markedSpans;if(a)for(var s=0;s<a.length;s++){var l=a[s];null!=l.to&&r==t.line&&t.ch>=l.to||null==l.from&&r!=t.line||null!=l.from&&r==e.line&&l.from>=e.ch||n&&!n(l.marker)||i.push(l.marker.parent||l.marker)}++r}),i},getAllMarks:function(){var t=[];return this.iter(function(e){var n=e.markedSpans;if(n)for(var i=0;i<n.length;++i)null!=n[i].from&&t.push(n[i].marker)}),t},posFromIndex:function(t){var e,n=this.first,i=this.lineSeparator().length;return this.iter(function(r){var o=r.text.length+i;if(o>t)return e=t,!0;t-=o,++n}),q(this,R(n,e))},indexFromPos:function(t){t=q(this,t);var e=t.ch;if(t.line<this.first||t.ch<0)return 0;var n=this.lineSeparator().length;return this.iter(this.first,t.line,function(t){e+=t.text.length+n}),e},copy:function(t){var e=new Is(E(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return e.scrollTop=this.scrollTop,e.scrollLeft=this.scrollLeft,e.sel=this.sel,e.extend=!1,t&&(e.history.undoDepth=this.history.undoDepth,e.setHistory(this.getHistory())),e},linkedDoc:function(t){t||(t={});var e=this.first,n=this.first+this.size;null!=t.from&&t.from>e&&(e=t.from),null!=t.to&&t.to<n&&(n=t.to);var i=new Is(E(this,e,n),t.mode||this.modeOption,e,this.lineSep,this.direction);return t.sharedHist&&(i.history=this.history),(this.linked||(this.linked=[])).push({doc:i,sharedHist:t.sharedHist}),i.linked=[{doc:this,isParent:!0,sharedHist:t.sharedHist}],Yr(i,Xr(this)),i},unlinkDoc:function(t){var e=this;if(t instanceof Xo&&(t=t.doc),this.linked)for(var n=0;n<this.linked.length;++n){var i=e.linked[n];if(i.doc==t){e.linked.splice(n,1),t.unlinkDoc(e),Qr(Xr(e));break}}if(t.history==this.history){var r=[t.id];Zi(t,function(t){return r.push(t.id)},!0),t.history=new er(null),t.history.done=fr(this.history.done,r),t.history.undone=fr(this.history.undone,r)}},iterLinkedDocs:function(t){Zi(this,t)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(t){return this.lineSep?t.split(this.lineSep):rs(t)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:vi(function(t){"rtl"!=t&&(t="ltr"),t!=this.direction&&(this.direction=t,this.iter(function(t){return t.order=null}),this.cm&&tr(this.cm))})}),Is.prototype.eachLine=Is.prototype.iter;for(var Fs=0,js=!1,Hs={3:"Pause",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",127:"Delete",145:"ScrollLock",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},zs=0;zs<10;zs++)Hs[zs+48]=Hs[zs+96]=String(zs);for(var Vs=65;Vs<=90;Vs++)Hs[Vs]=String.fromCharCode(Vs);for(var qs=1;qs<=12;qs++)Hs[qs+111]=Hs[qs+63235]="F"+qs;var Bs={};Bs.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Bs.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Bs.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Bs.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Bs.default=Pa?Bs.macDefault:Bs.pcDefault;var Gs={selectAll:Er,singleSelection:function(t){return t.setSelection(t.getCursor("anchor"),t.getCursor("head"),$a)},killLine:function(t){return fo(t,function(e){if(e.empty()){var n=A(t.doc,e.head.line).text.length;return e.head.ch==n&&e.head.line<t.lastLine()?{from:e.head,to:R(e.head.line+1,0)}:{from:e.head,to:R(e.head.line,n)}}return{from:e.from(),to:e.to()}})},deleteLine:function(t){return fo(t,function(e){return{from:R(e.from().line,0),to:q(t.doc,R(e.to().line+1,0))}})},delLineLeft:function(t){return fo(t,function(t){return{from:R(t.from().line,0),to:t.from()}})},delWrappedLineLeft:function(t){return fo(t,function(e){var n=t.charCoords(e.head,"div").top+5;return{from:t.coordsChar({left:0,top:n},"div"),to:e.from()}})},delWrappedLineRight:function(t){return fo(t,function(e){var n=t.charCoords(e.head,"div").top+5,i=t.coordsChar({left:t.display.lineDiv.offsetWidth+100,top:n},"div");return{from:e.from(),to:i}})},undo:function(t){return t.undo()},redo:function(t){return t.redo()},undoSelection:function(t){return t.undoSelection()},redoSelection:function(t){return t.redoSelection()},goDocStart:function(t){return t.extendSelection(R(t.firstLine(),0))},goDocEnd:function(t){return t.extendSelection(R(t.lastLine()))},goLineStart:function(t){return t.extendSelectionsBy(function(e){return yo(t,e.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(t){return t.extendSelectionsBy(function(e){return xo(t,e.head)},{origin:"+move",bias:1})},goLineEnd:function(t){return t.extendSelectionsBy(function(e){return bo(t,e.head.line)},{origin:"+move",bias:-1})},goLineRight:function(t){return t.extendSelectionsBy(function(e){var n=t.cursorCoords(e.head,"div").top+5;return t.coordsChar({left:t.display.lineDiv.offsetWidth+100,top:n},"div")},Ua)},goLineLeft:function(t){return t.extendSelectionsBy(function(e){var n=t.cursorCoords(e.head,"div").top+5;return t.coordsChar({left:0,top:n},"div")},Ua)},goLineLeftSmart:function(t){return t.extendSelectionsBy(function(e){var n=t.cursorCoords(e.head,"div").top+5,i=t.coordsChar({left:0,top:n},"div");return i.ch<t.getLine(i.line).search(/\S/)?xo(t,e.head):i},Ua)},goLineUp:function(t){return t.moveV(-1,"line")},goLineDown:function(t){return t.moveV(1,"line")},goPageUp:function(t){return t.moveV(-1,"page")},goPageDown:function(t){return t.moveV(1,"page")},goCharLeft:function(t){return t.moveH(-1,"char")},goCharRight:function(t){return t.moveH(1,"char")},goColumnLeft:function(t){return t.moveH(-1,"column")},goColumnRight:function(t){return t.moveH(1,"column")},goWordLeft:function(t){return t.moveH(-1,"word")},goGroupRight:function(t){return t.moveH(1,"group")},goGroupLeft:function(t){return t.moveH(-1,"group")},goWordRight:function(t){return t.moveH(1,"word")},delCharBefore:function(t){return t.deleteH(-1,"char")},delCharAfter:function(t){return t.deleteH(1,"char")},delWordBefore:function(t){return t.deleteH(-1,"word")},delWordAfter:function(t){return t.deleteH(1,"word")},delGroupBefore:function(t){return t.deleteH(-1,"group")},delGroupAfter:function(t){return t.deleteH(1,"group")},indentAuto:function(t){return t.indentSelection("smart")},indentMore:function(t){return t.indentSelection("add")},indentLess:function(t){return t.indentSelection("subtract")},insertTab:function(t){return t.replaceSelection("\t")},insertSoftTab:function(t){for(var e=[],n=t.listSelections(),i=t.options.tabSize,r=0;r<n.length;r++){var o=n[r].from(),a=h(t.getLine(o.line),o.ch,i);e.push(p(i-a%i))}t.replaceSelections(e)},defaultTab:function(t){t.somethingSelected()?t.indentSelection("add"):t.execCommand("insertTab")},transposeChars:function(t){return pi(t,function(){for(var e=t.listSelections(),n=[],i=0;i<e.length;i++)if(e[i].empty()){var r=e[i].head,o=A(t.doc,r.line).text;if(o)if(r.ch==o.length&&(r=new R(r.line,r.ch-1)),r.ch>0)r=new R(r.line,r.ch+1),t.replaceRange(o.charAt(r.ch-1)+o.charAt(r.ch-2),R(r.line,r.ch-2),r,"+transpose");else if(r.line>t.doc.first){var a=A(t.doc,r.line-1).text;a&&(r=new R(r.line,1),t.replaceRange(o.charAt(0)+t.doc.lineSeparator()+a.charAt(a.length-1),R(r.line-1,a.length-1),r,"+transpose"))}n.push(new Ls(r,r))}t.setSelections(n)})},newlineAndIndent:function(t){return pi(t,function(){for(var e=t.listSelections(),n=e.length-1;n>=0;n--)t.replaceRange(t.doc.lineSeparator(),e[n].anchor,e[n].head,"+input");e=t.listSelections();for(var i=0;i<e.length;i++)t.indentLine(e[i].from().line,null,!0);Xn(t)})},openLine:function(t){return t.replaceSelection("\n","start")},toggleOverwrite:function(t){return t.toggleOverwrite()}},$s=new za,Ws=null,Us=function(t,e,n){this.time=t,this.pos=e,this.button=n};Us.prototype.compare=function(t,e,n){return this.time+400>t&&0==I(e,this.pos)&&n==this.button};var Xs,Ys,Qs={toString:function(){return"CodeMirror.Init"}},Zs={},Ks={};Xo.defaults=Zs,Xo.optionHandlers=Ks;var Js=[];Xo.defineInitHook=function(t){return Js.push(t)};var tl=null,el=function(t){this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new za,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};el.prototype.init=function(t){function e(t){if(!Mt(r,t)){if(r.somethingSelected())Zo({lineWise:!1,text:r.getSelections()}),"cut"==t.type&&r.replaceSelection("",null,"cut");else{if(!r.options.lineWiseCopyCut)return;var e=ea(r);Zo({lineWise:!0,text:e.text}),"cut"==t.type&&r.operation(function(){r.setSelections(e.ranges,0,$a),r.replaceSelection("",null,"cut")})}if(t.clipboardData){t.clipboardData.clearData();var n=tl.text.join("\n");if(t.clipboardData.setData("Text",n),t.clipboardData.getData("Text")==n)return void t.preventDefault()}var a=ia(),s=a.firstChild;r.display.lineSpace.insertBefore(a,r.display.lineSpace.firstChild),s.value=tl.text.join("\n");var l=document.activeElement;Ha(s),setTimeout(function(){r.display.lineSpace.removeChild(a),l.focus(),l==o&&i.showPrimarySelection()},50)}}var n=this,i=this,r=i.cm,o=i.div=t.lineDiv;na(o,r.options.spellcheck,r.options.autocorrect,r.options.autocapitalize),ns(o,"paste",function(t){Mt(r,t)||Jo(t,r)||xa<=11&&setTimeout(gi(r,function(){return n.updateFromDOM()}),20)}),ns(o,"compositionstart",function(t){n.composing={data:t.data,done:!1}}),ns(o,"compositionupdate",function(t){n.composing||(n.composing={data:t.data,done:!1})}),ns(o,"compositionend",function(t){n.composing&&(t.data!=n.composing.data&&n.readFromDOMSoon(),n.composing.done=!0)}),ns(o,"touchstart",function(){return i.forceCompositionEnd()}),ns(o,"input",function(){n.composing||n.readFromDOMSoon()}),ns(o,"copy",e),ns(o,"cut",e)},el.prototype.prepareSelection=function(){var t=En(this.cm,!1);return t.focus=this.cm.state.focused,t},el.prototype.showSelection=function(t,e){t&&this.cm.display.view.length&&((t.focus||e)&&this.showPrimarySelection(),this.showMultipleSelections(t))},el.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},el.prototype.showPrimarySelection=function(){var t=this.getSelection(),e=this.cm,n=e.doc.sel.primary(),i=n.from(),r=n.to();if(e.display.viewTo==e.display.viewFrom||i.line>=e.display.viewTo||r.line<e.display.viewFrom)return void t.removeAllRanges();var o=ua(e,t.anchorNode,t.anchorOffset),a=ua(e,t.focusNode,t.focusOffset);if(!o||o.bad||!a||a.bad||0!=I(z(o,a),i)||0!=I(H(o,a),r)){var s=e.display.view,l=i.line>=e.display.viewFrom&&aa(e,i)||{node:s[0].measure.map[2],offset:0},c=r.line<e.display.viewTo&&aa(e,r);if(!c){var u=s[s.length-1].measure,h=u.maps?u.maps[u.maps.length-1]:u.map;c={node:h[h.length-1],offset:h[h.length-2]-h[h.length-3]}}if(!l||!c)return void t.removeAllRanges();var d,f=t.rangeCount&&t.getRangeAt(0);try{d=Ra(l.node,l.offset,c.offset,c.node)}catch(t){}d&&(!ga&&e.state.focused?(t.collapse(l.node,l.offset),d.collapsed||(t.removeAllRanges(),t.addRange(d))):(t.removeAllRanges(),t.addRange(d)),f&&null==t.anchorNode?t.addRange(f):ga&&this.startGracePeriod()),this.rememberSelection()}},el.prototype.startGracePeriod=function(){var t=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){t.gracePeriod=!1,t.selectionChanged()&&t.cm.operation(function(){return t.cm.curOp.selectionChanged=!0})},20)},el.prototype.showMultipleSelections=function(t){n(this.cm.display.cursorDiv,t.cursors),n(this.cm.display.selectionDiv,t.selection)},el.prototype.rememberSelection=function(){var t=this.getSelection();this.lastAnchorNode=t.anchorNode,this.lastAnchorOffset=t.anchorOffset,this.lastFocusNode=t.focusNode,this.lastFocusOffset=t.focusOffset},el.prototype.selectionInEditor=function(){var t=this.getSelection();if(!t.rangeCount)return!1;var e=t.getRangeAt(0).commonAncestorContainer;return o(this.div,e)},el.prototype.focus=function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())},el.prototype.blur=function(){this.div.blur()},el.prototype.getField=function(){return this.div},el.prototype.supportsTouch=function(){return!0},el.prototype.receivedFocus=function(){function t(){e.cm.state.focused&&(e.pollSelection(),e.polling.set(e.cm.options.pollInterval,t))}var e=this;this.selectionInEditor()?this.pollSelection():pi(this.cm,function(){return e.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,t)},el.prototype.selectionChanged=function(){var t=this.getSelection();return t.anchorNode!=this.lastAnchorNode||t.anchorOffset!=this.lastAnchorOffset||t.focusNode!=this.lastFocusNode||t.focusOffset!=this.lastFocusOffset},el.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var t=this.getSelection(),e=this.cm;if(Ea&&Sa&&this.cm.options.gutters.length&&sa(t.anchorNode))return this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var n=ua(e,t.anchorNode,t.anchorOffset),i=ua(e,t.focusNode,t.focusOffset);n&&i&&pi(e,function(){wr(e.doc,Vi(n,i),$a),(n.bad||i.bad)&&(e.curOp.selectionChanged=!0)})}}},el.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var t=this.cm,e=t.display,n=t.doc.sel.primary(),i=n.from(),r=n.to();if(0==i.ch&&i.line>t.firstLine()&&(i=R(i.line-1,A(t.doc,i.line-1).length)),r.ch==A(t.doc,r.line).text.length&&r.line<t.lastLine()&&(r=R(r.line+1,0)),i.line<e.viewFrom||r.line>e.viewTo-1)return!1;var o,a,s;i.line==e.viewFrom||0==(o=An(t,i.line))?(a=P(e.view[0].line),s=e.view[0].node):(a=P(e.view[o].line),s=e.view[o-1].node.nextSibling);var l,c,u=An(t,r.line);if(u==e.view.length-1?(l=e.viewTo-1,c=e.lineDiv.lastChild):(l=P(e.view[u+1].line)-1,c=e.view[u+1].node.previousSibling),!s)return!1;for(var h=t.doc.splitLines(ca(t,s,c,a,l)),d=M(t.doc,R(a,0),R(l,A(t.doc,l).text.length));h.length>1&&d.length>1;)if(g(h)==g(d))h.pop(),d.pop(),l--;else{if(h[0]!=d[0])break;h.shift(),d.shift(),a++}for(var f=0,p=0,m=h[0],v=d[0],y=Math.min(m.length,v.length);f<y&&m.charCodeAt(f)==v.charCodeAt(f);)++f;for(var b=g(h),x=g(d),w=Math.min(b.length-(1==h.length?f:0),x.length-(1==d.length?f:0));p<w&&b.charCodeAt(b.length-p-1)==x.charCodeAt(x.length-p-1);)++p;if(1==h.length&&1==d.length&&a==i.line)for(;f&&f>i.ch&&b.charCodeAt(b.length-p-1)==x.charCodeAt(x.length-p-1);)f--,p++;h[h.length-1]=b.slice(0,b.length-p).replace(/^\u200b+/,""),h[0]=h[0].slice(f).replace(/\u200b+$/,"");var _=R(a,f),S=R(l,d.length?g(d).length-p:0);return h.length>1||h[0]||I(_,S)?(Fr(t.doc,h,_,S,"+input"),!0):void 0},el.prototype.ensurePolled=function(){this.forceCompositionEnd()},el.prototype.reset=function(){this.forceCompositionEnd()},el.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},el.prototype.readFromDOMSoon=function(){var t=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(t.readDOMTimeout=null,t.composing){if(!t.composing.done)return;t.composing=null}t.updateFromDOM()},80))},el.prototype.updateFromDOM=function(){var t=this;!this.cm.isReadOnly()&&this.pollContent()||pi(this.cm,function(){return yi(t.cm)})},el.prototype.setUneditable=function(t){t.contentEditable="false"},el.prototype.onKeyPress=function(t){0==t.charCode||this.composing||(t.preventDefault(),this.cm.isReadOnly()||gi(this.cm,Ko)(this.cm,String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),0))},el.prototype.readOnlyChanged=function(t){this.div.contentEditable=String("nocursor"!=t)},el.prototype.onContextMenu=function(){},el.prototype.resetPosition=function(){},el.prototype.needsContentAttribute=!0;var nl=function(t){this.cm=t,this.prevInput="",this.pollingFast=!1,this.polling=new za,this.hasSelection=!1,this.composing=null};nl.prototype.init=function(t){function e(t){if(!Mt(r,t)){if(r.somethingSelected())Zo({lineWise:!1,text:r.getSelections()});else{if(!r.options.lineWiseCopyCut)return;var e=ea(r);Zo({lineWise:!0,text:e.text}),"cut"==t.type?r.setSelections(e.ranges,null,$a):(i.prevInput="",o.value=e.text.join("\n"),Ha(o))}"cut"==t.type&&(r.state.cutIncoming=+new Date)}}var n=this,i=this,r=this.cm;this.createField(t);var o=this.textarea;t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),Ma&&(o.style.width="0px"),ns(o,"input",function(){ba&&xa>=9&&n.hasSelection&&(n.hasSelection=null),i.poll()}),ns(o,"paste",function(t){Mt(r,t)||Jo(t,r)||(r.state.pasteIncoming=+new Date,i.fastPoll())}),ns(o,"cut",e),ns(o,"copy",e),ns(t.scroller,"paste",function(e){if(!Ie(t,e)&&!Mt(r,e)){if(!o.dispatchEvent)return r.state.pasteIncoming=+new Date,void i.focus();var n=new Event("paste");n.clipboardData=e.clipboardData,o.dispatchEvent(n)}}),ns(t.lineSpace,"selectstart",function(e){Ie(t,e)||Dt(e)}),ns(o,"compositionstart",function(){var t=r.getCursor("from");i.composing&&i.composing.range.clear(),i.composing={start:t,range:r.markText(t,r.getCursor("to"),{className:"CodeMirror-composing"})}}),ns(o,"compositionend",function(){i.composing&&(i.poll(),i.composing.range.clear(),i.composing=null)})},nl.prototype.createField=function(t){this.wrapper=ia(),this.textarea=this.wrapper.firstChild},nl.prototype.prepareSelection=function(){var t=this.cm,e=t.display,n=t.doc,i=En(t);if(t.options.moveInputWithCursor){var r=un(t,n.sel.primary().head,"div"),o=e.wrapper.getBoundingClientRect(),a=e.lineDiv.getBoundingClientRect();i.teTop=Math.max(0,Math.min(e.wrapper.clientHeight-10,r.top+a.top-o.top)),i.teLeft=Math.max(0,Math.min(e.wrapper.clientWidth-10,r.left+a.left-o.left))}return i},nl.prototype.showSelection=function(t){var e=this.cm,i=e.display;n(i.cursorDiv,t.cursors),n(i.selectionDiv,t.selection),null!=t.teTop&&(this.wrapper.style.top=t.teTop+"px",this.wrapper.style.left=t.teLeft+"px")},nl.prototype.reset=function(t){if(!this.contextMenuPending&&!this.composing){var e=this.cm;if(e.somethingSelected()){this.prevInput="";var n=e.getSelection();this.textarea.value=n,e.state.focused&&Ha(this.textarea),ba&&xa>=9&&(this.hasSelection=n)}else t||(this.prevInput=this.textarea.value="",ba&&xa>=9&&(this.hasSelection=null))}},nl.prototype.getField=function(){return this.textarea},nl.prototype.supportsTouch=function(){return!1},nl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!La||a()!=this.textarea))try{this.textarea.focus()}catch(t){}},nl.prototype.blur=function(){this.textarea.blur()},nl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},nl.prototype.receivedFocus=function(){this.slowPoll()},nl.prototype.slowPoll=function(){var t=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){t.poll(),t.cm.state.focused&&t.slowPoll()})},nl.prototype.fastPoll=function(){function t(){n.poll()||e?(n.pollingFast=!1,n.slowPoll()):(e=!0,n.polling.set(60,t))}var e=!1,n=this;n.pollingFast=!0,n.polling.set(20,t)},nl.prototype.poll=function(){var t=this,e=this.cm,n=this.textarea,i=this.prevInput;if(this.contextMenuPending||!e.state.focused||os(n)&&!i&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=n.value;if(r==i&&!e.somethingSelected())return!1;if(ba&&xa>=9&&this.hasSelection===r||Pa&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var o=r.charCodeAt(0);if(8203!=o||i||(i="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var a=0,s=Math.min(i.length,r.length);a<s&&i.charCodeAt(a)==r.charCodeAt(a);)++a;return pi(e,function(){Ko(e,r.slice(a),i.length-a,null,t.composing?"*compose":null),r.length>1e3||r.indexOf("\n")>-1?n.value=t.prevInput="":t.prevInput=r,t.composing&&(t.composing.range.clear(),t.composing.range=e.markText(t.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},nl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},nl.prototype.onKeyPress=function(){ba&&xa>=9&&(this.hasSelection=null),this.fastPoll()},nl.prototype.onContextMenu=function(t){function e(){if(null!=a.selectionStart){var t=r.somethingSelected(),e="​"+(t?a.value:"");a.value="⇚",a.value=e,i.prevInput=t?"":"​",a.selectionStart=1,a.selectionEnd=e.length,o.selForContextMenu=r.doc.sel}}function n(){if(i.contextMenuPending==n&&(i.contextMenuPending=!1,i.wrapper.style.cssText=u,a.style.cssText=c,ba&&xa<9&&o.scrollbars.setScrollTop(o.scroller.scrollTop=l),null!=a.selectionStart)){(!ba||ba&&xa<9)&&e();var t=0,s=function(){o.selForContextMenu==r.doc.sel&&0==a.selectionStart&&a.selectionEnd>0&&"​"==i.prevInput?gi(r,Er)(r):t++<10?o.detectingSelectAll=setTimeout(s,500):(o.selForContextMenu=null,o.input.reset())};o.detectingSelectAll=setTimeout(s,200)}}var i=this,r=i.cm,o=r.display,a=i.textarea;i.contextMenuPending&&i.contextMenuPending();var s=kn(r,t),l=o.scroller.scrollTop;if(s&&!Ca){r.options.resetSelectionOnContextMenu&&-1==r.doc.sel.contains(s)&&gi(r,wr)(r.doc,Vi(s),$a);var c=a.style.cssText,u=i.wrapper.style.cssText,h=i.wrapper.offsetParent.getBoundingClientRect();i.wrapper.style.cssText="position: static",a.style.cssText="position: absolute; width: 30px; height: 30px;\n      top: "+(t.clientY-h.top-5)+"px; left: "+(t.clientX-h.left-5)+"px;\n      z-index: 1000; background: "+(ba?"rgba(255, 255, 255, .05)":"transparent")+";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var d;if(wa&&(d=window.scrollY),o.input.focus(),wa&&window.scrollTo(null,d),o.input.reset(),r.somethingSelected()||(a.value=i.prevInput=" "),i.contextMenuPending=n,o.selForContextMenu=r.doc.sel,clearTimeout(o.detectingSelectAll),ba&&xa>=9&&e(),Fa){Rt(t);var f=function(){kt(window,"mouseup",f),setTimeout(n,20)};ns(window,"mouseup",f)}else setTimeout(n,50)}},nl.prototype.readOnlyChanged=function(t){t||this.reset(),this.textarea.disabled="nocursor"==t},nl.prototype.setUneditable=function(){},nl.prototype.needsContentAttribute=!1,function(t){function e(e,i,r,o){t.defaults[e]=i,r&&(n[e]=o?function(t,e,n){n!=Qs&&r(t,e,n)}:r)}var n=t.optionHandlers;t.defineOption=e,t.Init=Qs,e("value","",function(t,e){return t.setValue(e)},!0),e("mode",null,function(t,e){t.doc.modeOption=e,Ui(t)},!0),e("indentUnit",2,Ui,!0),e("indentWithTabs",!1),e("smartIndent",!0),e("tabSize",4,function(t){Xi(t),nn(t),yi(t)},!0),e("lineSeparator",null,function(t,e){if(t.doc.lineSep=e,e){var n=[],i=t.doc.first;t.doc.iter(function(t){for(var r=0;;){var o=t.text.indexOf(e,r);if(-1==o)break;r=o+e.length,n.push(R(i,o))}i++});for(var r=n.length-1;r>=0;r--)Fr(t.doc,e,n[r],R(n[r].line,n[r].ch+e.length))}}),e("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(t,e,n){t.state.specialChars=new RegExp(e.source+(e.test("\t")?"":"|\t"),"g"),n!=Qs&&t.refresh()}),e("specialCharPlaceholder",ue,function(t){return t.refresh()},!0),e("electricChars",!0),e("inputStyle",La?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),e("spellcheck",!1,function(t,e){return t.getInputField().spellcheck=e},!0),e("autocorrect",!1,function(t,e){return t.getInputField().autocorrect=e},!0),e("autocapitalize",!1,function(t,e){return t.getInputField().autocapitalize=e},!0),e("rtlMoveVisually",!Na),e("wholeLineUpdateBefore",!0),e("theme","default",function(t){Go(t),$o(t)},!0),e("keyMap","default",function(t,e,n){var i=ho(e),r=n!=Qs&&ho(n);r&&r.detach&&r.detach(t,i),i.attach&&i.attach(t,r||null)}),e("extraKeys",null),e("configureMouse",null),e("lineWrapping",!1,Uo,!0),e("gutters",[],function(t){Ii(t.options),$o(t)},!0),e("fixedGutter",!0,function(t,e){t.display.gutters.style.left=e?Sn(t.display)+"px":"0",t.refresh()},!0),e("coverGutterNextToScrollbar",!1,function(t){return ii(t)},!0),e("scrollbarStyle","native",function(t){oi(t),ii(t),t.display.scrollbars.setScrollTop(t.doc.scrollTop),t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)},!0),e("lineNumbers",!1,function(t){Ii(t.options),$o(t)},!0),e("firstLineNumber",1,$o,!0),e("lineNumberFormatter",function(t){return t},$o,!0),e("showCursorWhenSelecting",!1,Mn,!0),e("resetSelectionOnContextMenu",!0),e("lineWiseCopyCut",!0),e("pasteLinesPerSelection",!0),e("selectionsMayTouch",!1),e("readOnly",!1,function(t,e){"nocursor"==e&&(Fn(t),t.display.input.blur()),t.display.input.readOnlyChanged(e)}),e("disableInput",!1,function(t,e){e||t.display.input.reset()},!0),e("dragDrop",!0,Wo),e("allowDropFileTypes",null),e("cursorBlinkRate",530),e("cursorScrollMargin",0),e("cursorHeight",1,Mn,!0),e("singleCursorHeightPerLine",!0,Mn,!0),e("workTime",100),e("workDelay",100),e("flattenSpans",!0,Xi,!0),e("addModeClass",!1,Xi,!0),e("pollInterval",100),e("undoDepth",200,function(t,e){return t.doc.history.undoDepth=e}),e("historyEventDelay",1250),e("viewportMargin",10,function(t){return t.refresh()},!0),e("maxHighlightLength",1e4,Xi,!0),e("moveInputWithCursor",!0,function(t,e){e||t.display.input.resetPosition()}),e("tabindex",null,function(t,e){return t.display.input.getField().tabIndex=e||""}),e("autofocus",null),e("direction","ltr",function(t,e){return t.doc.setDirection(e)},!0),e("phrases",null)}(Xo),function(t){var e=t.optionHandlers,n=t.helpers={};t.prototype={constructor:t,focus:function(){window.focus(),this.display.input.focus()},setOption:function(t,n){var i=this.options,r=i[t];i[t]==n&&"mode"!=t||(i[t]=n,e.hasOwnProperty(t)&&gi(this,e[t])(this,n,r),At(this,"optionChange",this,t))},getOption:function(t){return this.options[t]},getDoc:function(){return this.doc},addKeyMap:function(t,e){this.state.keyMaps[e?"push":"unshift"](ho(t))},removeKeyMap:function(t){for(var e=this.state.keyMaps,n=0;n<e.length;++n)if(e[n]==t||e[n].name==t)return e.splice(n,1),!0},addOverlay:mi(function(e,n){var i=e.token?e:t.getMode(this.options,e);if(i.startState)throw new Error("Overlays may not be stateful.");v(this.state.overlays,{mode:i,modeSpec:e,opaque:n&&n.opaque,priority:n&&n.priority||0},function(t){return t.priority}),this.state.modeGen++,yi(this)}),removeOverlay:mi(function(t){for(var e=this,n=this.state.overlays,i=0;i<n.length;++i){var r=n[i].modeSpec;if(r==t||"string"==typeof t&&r.name==t)return n.splice(i,1),e.state.modeGen++,void yi(e)}}),indentLine:mi(function(t,e,n){"string"!=typeof e&&"number"!=typeof e&&(e=null==e?this.options.smartIndent?"smart":"prev":e?"add":"subtract"),N(this.doc,t)&&Qo(this,t,e,n)}),indentSelection:mi(function(t){for(var e=this,n=this.doc.sel.ranges,i=-1,r=0;r<n.length;r++){var o=n[r]
-;if(o.empty())o.head.line>i&&(Qo(e,o.head.line,t,!0),i=o.head.line,r==e.doc.sel.primIndex&&Xn(e));else{var a=o.from(),s=o.to(),l=Math.max(i,a.line);i=Math.min(e.lastLine(),s.line-(s.ch?0:1))+1;for(var c=l;c<i;++c)Qo(e,c,t);var u=e.doc.sel.ranges;0==a.ch&&n.length==u.length&&u[r].from().ch>0&&vr(e.doc,r,new Ls(a,u[r].to()),$a)}}}),getTokenAt:function(t,e){return ee(this,t,e)},getLineTokens:function(t,e){return ee(this,R(t),e,!0)},getTokenTypeAt:function(t){t=q(this.doc,t);var e,n=Qt(this,A(this.doc,t.line)),i=0,r=(n.length-1)/2,o=t.ch;if(0==o)e=n[2];else for(;;){var a=i+r>>1;if((a?n[2*a-1]:0)>=o)r=a;else{if(!(n[2*a+1]<o)){e=n[2*a+2];break}i=a+1}}var s=e?e.indexOf("overlay "):-1;return s<0?e:0==s?null:e.slice(0,s-1)},getModeAt:function(e){var n=this.doc.mode;return n.innerMode?t.innerMode(n,this.getTokenAt(e).state).mode:n},getHelper:function(t,e){return this.getHelpers(t,e)[0]},getHelpers:function(t,e){var i=this,r=[];if(!n.hasOwnProperty(e))return r;var o=n[e],a=this.getModeAt(t);if("string"==typeof a[e])o[a[e]]&&r.push(o[a[e]]);else if(a[e])for(var s=0;s<a[e].length;s++){var l=o[a[e][s]];l&&r.push(l)}else a.helperType&&o[a.helperType]?r.push(o[a.helperType]):o[a.name]&&r.push(o[a.name]);for(var c=0;c<o._global.length;c++){var u=o._global[c];u.pred(a,i)&&-1==d(r,u.val)&&r.push(u.val)}return r},getStateAfter:function(t,e){var n=this.doc;return t=V(n,null==t?n.first+n.size-1:t),Zt(this,t+1,e).state},cursorCoords:function(t,e){var n,i=this.doc.sel.primary();return n=null==t?i.head:"object"==typeof t?q(this.doc,t):t?i.from():i.to(),un(this,n,e||"page")},charCoords:function(t,e){return cn(this,q(this.doc,t),e||"page")},coordsChar:function(t,e){return t=ln(this,t,e||"page"),fn(this,t.left,t.top)},lineAtHeight:function(t,e){return t=ln(this,{top:t,left:0},e||"page").top,D(this.doc,t+this.display.viewOffset)},heightAtLine:function(t,e,n){var i,r=!1;if("number"==typeof t){var o=this.doc.first+this.doc.size-1;t<this.doc.first?t=this.doc.first:t>o&&(t=o,r=!0),i=A(this.doc,t)}else i=t;return sn(this,i,{top:0,left:0},e||"page",n||r).top+(r?this.doc.height-bt(i):0)},defaultTextHeight:function(){return xn(this.display)},defaultCharWidth:function(){return wn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(t,e,n,i,r){var o=this.display;t=un(this,q(this.doc,t));var a=t.bottom,s=t.left;if(e.style.position="absolute",e.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(e),o.sizer.appendChild(e),"over"==i)a=t.top;else if("above"==i||"near"==i){var l=Math.max(o.wrapper.clientHeight,this.doc.height),c=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==i||t.bottom+e.offsetHeight>l)&&t.top>e.offsetHeight?a=t.top-e.offsetHeight:t.bottom+e.offsetHeight<=l&&(a=t.bottom),s+e.offsetWidth>c&&(s=c-e.offsetWidth)}e.style.top=a+"px",e.style.left=e.style.right="","right"==r?(s=o.sizer.clientWidth-e.offsetWidth,e.style.right="0px"):("left"==r?s=0:"middle"==r&&(s=(o.sizer.clientWidth-e.offsetWidth)/2),e.style.left=s+"px"),n&&$n(this,{left:s,top:a,right:s+e.offsetWidth,bottom:a+e.offsetHeight})},triggerOnKeyDown:mi(Ao),triggerOnKeyPress:mi(Lo),triggerOnKeyUp:Eo,triggerOnMouseDown:mi(Do),execCommand:function(t){if(Gs.hasOwnProperty(t))return Gs[t].call(null,this)},triggerElectric:mi(function(t){ta(this,t)}),findPosH:function(t,e,n,i){var r=this,o=1;e<0&&(o=-1,e=-e);for(var a=q(this.doc,t),s=0;s<e&&(a=ra(r.doc,a,o,n,i),!a.hitSide);++s);return a},moveH:mi(function(t,e){var n=this;this.extendSelectionsBy(function(i){return n.display.shift||n.doc.extend||i.empty()?ra(n.doc,i.head,t,e,n.options.rtlMoveVisually):t<0?i.from():i.to()},Ua)}),deleteH:mi(function(t,e){var n=this.doc.sel,i=this.doc;n.somethingSelected()?i.replaceSelection("",null,"+delete"):fo(this,function(n){var r=ra(i,n.head,t,e,!1);return t<0?{from:r,to:n.head}:{from:n.head,to:r}})}),findPosV:function(t,e,n,i){var r=this,o=1,a=i;e<0&&(o=-1,e=-e);for(var s=q(this.doc,t),l=0;l<e;++l){var c=un(r,s,"div");if(null==a?a=c.left:c.left=a,s=oa(r,c,o,n),s.hitSide)break}return s},moveV:mi(function(t,e){var n=this,i=this.doc,r=[],o=!this.display.shift&&!i.extend&&i.sel.somethingSelected();if(i.extendSelectionsBy(function(a){if(o)return t<0?a.from():a.to();var s=un(n,a.head,"div");null!=a.goalColumn&&(s.left=a.goalColumn),r.push(s.left);var l=oa(n,s,t,e);return"page"==e&&a==i.sel.primary()&&Un(n,cn(n,l,"div").top-s.top),l},Ua),r.length)for(var a=0;a<i.sel.ranges.length;a++)i.sel.ranges[a].goalColumn=r[a]}),findWordAt:function(t){var e=this.doc,n=A(e,t.line).text,i=t.ch,r=t.ch;if(n){var o=this.getHelper(t,"wordChars");"before"!=t.sticky&&r!=n.length||!i?++r:--i;for(var a=n.charAt(i),s=w(a,o)?function(t){return w(t,o)}:/\s/.test(a)?function(t){return/\s/.test(t)}:function(t){return!/\s/.test(t)&&!w(t)};i>0&&s(n.charAt(i-1));)--i;for(;r<n.length&&s(n.charAt(r));)++r}return new Ls(R(t.line,i),R(t.line,r))},toggleOverwrite:function(t){null!=t&&t==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?s(this.display.cursorDiv,"CodeMirror-overwrite"):ja(this.display.cursorDiv,"CodeMirror-overwrite"),At(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==a()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:mi(function(t,e){Yn(this,t,e)}),getScrollInfo:function(){var t=this.display.scroller;return{left:t.scrollLeft,top:t.scrollTop,height:t.scrollHeight-ze(this)-this.display.barHeight,width:t.scrollWidth-ze(this)-this.display.barWidth,clientHeight:qe(this),clientWidth:Ve(this)}},scrollIntoView:mi(function(t,e){null==t?(t={from:this.doc.sel.primary().head,to:null},null==e&&(e=this.options.cursorScrollMargin)):"number"==typeof t?t={from:R(t,0),to:null}:null==t.from&&(t={from:t,to:null}),t.to||(t.to=t.from),t.margin=e||0,null!=t.from.line?Qn(this,t):Kn(this,t.from,t.to,t.margin)}),setSize:mi(function(t,e){var n=this,i=function(t){return"number"==typeof t||/^\d+$/.test(String(t))?t+"px":t};null!=t&&(this.display.wrapper.style.width=i(t)),null!=e&&(this.display.wrapper.style.height=i(e)),this.options.lineWrapping&&en(this);var r=this.display.viewFrom;this.doc.iter(r,this.display.viewTo,function(t){if(t.widgets)for(var e=0;e<t.widgets.length;e++)if(t.widgets[e].noHScroll){bi(n,r,"widget");break}++r}),this.curOp.forceUpdate=!0,At(this,"refresh",this)}),operation:function(t){return pi(this,t)},startOperation:function(){return ai(this)},endOperation:function(){return si(this)},refresh:mi(function(){var t=this.display.cachedTextHeight;yi(this),this.curOp.forceUpdate=!0,nn(this),Yn(this,this.doc.scrollLeft,this.doc.scrollTop),Ni(this),(null==t||Math.abs(t-xn(this.display))>.5)&&Tn(this),At(this,"refresh",this)}),swapDoc:mi(function(t){var e=this.doc;return e.cm=null,Ki(this,t),nn(this),this.display.input.reset(),Yn(this,t.scrollLeft,t.scrollTop),this.curOp.forceScroll=!0,we(this,"swapDoc",this,e),e}),phrase:function(t){var e=this.options.phrases;return e&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:t},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Pt(t),t.registerHelper=function(e,i,r){n.hasOwnProperty(e)||(n[e]=t[e]={_global:[]}),n[e][i]=r},t.registerGlobalHelper=function(e,i,r,o){t.registerHelper(e,i,o),n[e]._global.push({pred:r,val:o})}}(Xo);var il="iter insert remove copy getEditor constructor".split(" ");for(var rl in Is.prototype)Is.prototype.hasOwnProperty(rl)&&d(il,rl)<0&&(Xo.prototype[rl]=function(t){return function(){return t.apply(this.doc,arguments)}}(Is.prototype[rl]));return Pt(Is),Xo.inputStyles={textarea:nl,contenteditable:el},Xo.defineMode=function(t){Xo.defaults.mode||"null"==t||(Xo.defaults.mode=t),Vt.apply(this,arguments)},Xo.defineMIME=qt,Xo.defineMode("null",function(){return{token:function(t){return t.skipToEnd()}}}),Xo.defineMIME("text/plain","null"),Xo.defineExtension=function(t,e){Xo.prototype[t]=e},Xo.defineDocExtension=function(t,e){Is.prototype[t]=e},Xo.fromTextArea=da,function(t){t.off=kt,t.on=ns,t.wheelEventPixels=ji,t.Doc=Is,t.splitLines=rs,t.countColumn=h,t.findColumn=f,t.isWordChar=x,t.Pass=Ga,t.signal=At,t.Line=gs,t.changeEnd=qi,t.scrollbarModel=Cs,t.Pos=R,t.cmpPos=I,t.modes=ls,t.mimeModes=cs,t.resolveMode=Bt,t.getMode=Gt,t.modeExtensions=us,t.extendMode=$t,t.copyState=Wt,t.startState=Xt,t.innerMode=Ut,t.commands=Gs,t.keyMap=Bs,t.keyName=uo,t.isModifierKey=lo,t.lookupKey=so,t.normalizeKeyMap=ao,t.StringStream=hs,t.SharedTextMarker=Os,t.TextMarker=Ns,t.LineWidget=Ps,t.e_preventDefault=Dt,t.e_stopPropagation=Nt,t.e_stop=Rt,t.addClass=s,t.contains=o,t.rmClass=ja,t.keyNames=Hs}(Xo),Xo.version="5.44.0",Xo}),define("chatroom",["jquery","form","cm/lib/codemirror","utils","config","modal","links","chat","laconic"],function(t,e,n,i,r,o,a,s){!function(t){function l(e,i){var r=t.el.pre({class:"cm-s-prolog"});n.runMode(i,"prolog",r),e.attr("title",t.el.div(r).innerHTML),e.data("html",!0),e.data("placement","bottom"),e.data("trigger","hover"),e.tooltip()}function c(t,n,i){return e.widgets.glyphIconButton(t,{class:"btn-xs "+n,title:i})}function u(t){for(var e=[{regex:/[a-z][a-zA-Z0-9_]*\/[0-9]/g,func:function(t){return'<a class="builtin" href="/pldoc/man?predicate='+t+'">'+t+"</a>"}},{regex:/[a-zA-Z0-9_-]+\.(pl|swinb)\b/g,func:function(t){return'<a class="builtin" href="'+r.http.locations.web_storage+t+'">'+t+"</a>"}},{regex:/`(.)`/g,func:function(t,e){return"<code>"+e+"</code>"}},{regex:/`([\w\[\{\(][^`]*[\w\]\}\)])`/g,func:function(t,e){return"<code>"+e+"</code>"}},{delim:"\\*",a:"\\*\\b",z:"\\b\\*",tag:"b"},{delim:"__",a:"\\b__",z:"__\\b",tag:"b"},{delim:"_",a:"\\b_",z:"_\\b",tag:"i"}],n=0;n<e.length;n++){var i=e[n];i.regex?t=t.replace(i.regex,i.func):i.delim&&(t=t.replace(RegExp(i.a+"([^"+i.delim+"]+)"+i.z,"g"),function(t){return function(e,n){return"<"+t+">"+n+"</"+t+">"}}(i.tag)))}return t}var h=0,d={_init:function(n){return this.each(function(){var i,s,l,c,u=t(this),d={messages:[]},f="gitty:"+r.swish.hangout;d.docid=n.docid,u.data("chatroom",d),u.addClass("chatroom each-minute swish-event-receiver"),i=t.el.div({class:"btn-group dropup"},s=t.el.button({type:"button",class:"btn btn-primary btn-xs"},"Send"),t.el.button({type:"button",class:"btn btn-info btn-xs dropdown-toggle","data-toggle":"dropdown","aria-haspopup":!0,"aria-expanded":!1},t.el.span({class:"caret"})),ul=t.el.ul({class:"dropdown-menu pull-right"})),c=t.el.textarea({placeholder:"Type chat message here ..."}),u.append(t.el.div({class:"chat-conversation"},t.el.div({class:"chat-outer-wrapper"},t.el.div({class:"chat-inner-wrapper"},t.el.div({class:"chat-content-wrapper"},t.el.div({class:"chat-stretch"}),t.el.div({class:"chat-content"}))))),l=t.el.span({class:"glyphicon menu glyphicon-remove-circle"}),t.el.div({class:"chat-input"},t.el.table({class:"chat-input"},t.el.tr(t.el.td({class:"chat-text"},c),t.el.td({class:"chat-send"},i))))),t(s).on("click",function(){u.chatroom("send")}),e.widgets.populateMenu(t(i),u,{"Include my query":function(){var e=t(".prolog-query-editor").queryEditor("getQuery");""!=e.trim()?this.chatroom("send",{payload:[{type:"query",query:e}]}):o.alert("Your query editor is empty")}}),n.docid!=f&&e.widgets.populateMenu(t(i),u,{"Broadcast to hangout":function(){this.chatroom("send",{broadcast:"gitty:"+r.swish.hangout})}}),t(l).on("click",function(){u.tile("close")}),n.oneline?t(c).keypress(function(t){if(13==t.which)return u.chatroom("send"),t.preventDefault(),!1}):t(c).on("keyup",function(){var e,n=t(this);0!=n.scrollTop()&&(e=n.height())<500&&(e+=parseFloat(n.css("line-height")),n.animate({height:e},200,function(){u.chatroom("scrollToBottom")}))}),n.docid==f&&t(c).focus(function(){if(""==t(c).val()){var e=(new Date).getTime();e-h>3e5&&(h=e,o.help({file:"hangout.html",notagain:"hangout"}))}}),u.on("click",".chat-message button",function(e){var n,i=t(e.target).closest("button");return(n=i.data("commit"))?u.closest(".swish").swish("playFile",n):(n=i.data("diff"))&&u.chatroom("diff",n),e.preventDefault(),!1}),u.on("click",".chat-content a",a.followLink),u.on("pane.resize",function(){u.chatroom("scrollToBottom",!0)}),u.on("minute",function(){u.chatroom("update_time")}),u.on("activate-tab",function(){u.chatroom("read_until")}),t(c).height(parseFloat(t(c).css("line-height"))+5),u.chatroom("load_from_server")})},close:function(){return this.tile("close")},send:function(e){e=e||{};var n=this.data("chatroom"),a={type:"chat-message"},s=this.find("textarea");a.text=s.val().trim();var l=e.payload||[],c=!1,u=this.chatroom("storage").storage("getSelection"),h="gitty:"+r.swish.hangout;u&&l.push({type:"selection",selection:u});for(var d=0;d<l.length;d++)if("about"!=l[d].type){c=!0;break}e.broadcast||n.docid==h||0!=n.messages.length||(e.broadcast=h),""!=a.text||c?(a.uuid=i.generateUUID(),a.payload=l,a.docid=e.docid||n.docid,e.class&&(a.class=e.class),1==e.clear?this.chatroom("clear"):n.clear=a.uuid,t("#chat").chat("send",a),e.broadcast&&(a.payload.unshift({type:"about",docid:n.docid}),a.docid=e.broadcast,t("#chat").chat("send",a))):e.payload||o.alert("No message to send")},storage:function(){return this.closest(".tab-pane").find(".storage")},is_self:function(e){var n=e.user||{},i=r.swish.user||{},o=t("#chat").chat("self");return n.id&&n.id==o.id||n.avatar&&n.avatar==o.avatar||n.profile_id&&n.profile_id==i.profile_id},read_until:function(e){var n;void 0==e&&(n=this.data("chatroom"))&&n.messages.length>0&&(e=n.messages[n.messages.length-1]),e&&(t("#chat").chat("read_until",e.docid,e.time),t(".chat-bell").chatbell("read_until",e.docid,e.time))},render:function(e){var n=e.user||{};r.swish.user;if(void 0===e.is_self&&(e.is_self=this.chatroom("is_self",e)),elem=t(t.el.div({class:"chat-message"+(e.is_self?" self":""),"data-userid":n.wsid})),!e.is_self&&n.avatar&&elem.append(s.avatar(n)),elem.append(t.el.span({class:"chat-sender"},e.is_self?"Me":n.name)),e.time){var o=new Date(1e3*e.time).toLocaleString();elem.append(t.el.span({class:"chat-time",title:o},"(",i.ago(e.time),") ")),elem.data("time",e.time)}if(e.payload)for(var a=0;a<e.payload.length;a++){var l=e.payload[a];f[l.type]?f[l.type].call(elem,l):console.log(l)}var c;if(e.html?c=e.html:e.text&&(c=t(t.el.span(e.text)).html(),c=u(c)),c){var h=t.el.span({class:"chat-message html"});t(h).html(c),elem.append(h)}return elem},add:function(t,e){var n=this.data("chatroom");if(t.docid==n.docid){var i;void 0==e&&(e=this.is(":visible")),void 0==t.is_self&&(t.is_self=this.chatroom("is_self",t)),n.messages.push(t),i=this.chatroom("render",t),this.find(".chat-content").append(i),this.chatroom("scrollToBottom"),e&&this.chatroom("read_until",t)}return t.uuid&&t.uuid==n.clear&&this.chatroom("clear"),this},clear:function(){var t=this.find("textarea");t.val(""),t.height(parseFloat(t.css("line-height")+5))},load_from_server:function(e){var n=this.data("chatroom"),i=t(this);return t.get(r.http.locations.chat_messages,{docid:n.docid},function(t){if(0==t.length)e?i.chatroom("close"):n.docid!="gitty:"+r.swish.hangout&&o.help({file:"newchat.html",notagain:"newchat"});else for(var a=0;a<t.length;a++)i.chatroom("add",t[a],a==t.length-1)}).fail(function(t,e,n){o.ajaxError(t)}),this},update_time:function(){return this.find(".chat-message").each(function(){var e,n=t(this);(e=n.data("time"))&&n.find(".chat-time").text("("+i.ago(e)+") ")})},diff:function(n){function i(t){o.ajaxError(t)}t.ajax({url:r.http.locations.web_storage+n.from,data:{format:"raw"},success:function(o){t.ajax({url:r.http.locations.web_storage+n.to,data:{format:"raw"},success:function(i){function r(){var e=t.el.div();this.append(e),t(e).diff({base:o,head:i,baseName:n.name+" (before)",headName:n.name+" (after)"}),this.parents("div.modal-dialog").addClass("modal-wide")}e.showDialog({title:"Update differences",body:r})},error:i})},error:i})},docid:function(t,e){var n=this.data("chatroom");n.docid!=t&&(this.find(".chat-content").html(""),n.docid=t,this.chatroom("load_from_server",e))},rooms:function(e){var n=[];return this.each(function(){t(this).data("chatroom").docid==e&&n.push(this)}),t(n)},scrollToBottom:function(e){return this.each(function(){var n=t(this);scroll=n.find("div.chat-inner-wrapper"),wrap=scroll.find("div.chat-content-wrapper"),content=wrap.find("div.chat-content");var i=content[0].scrollHeight,r=wrap.height()-i-8;(r>0||!0!==e)&&(wrap.find("div.chat-stretch").height(r>0?r:0),scroll.scrollTop(i))}),this}},f={selection:function(n){var i=t().storage("getSelectionLabel",n.selection),r=t(t.el.button({class:"btn btn-xs btn-primary"},i+" ",e.widgets.glyphIcon("eye-open")));r.on("click",function(e){t(e.target).chatroom("storage").storage("restoreSelection",n.selection)}),this.append(" ",r," ")},query:function(n){var r=t(t.el.button({class:"btn btn-xs btn-primary"},"Query ",e.widgets.glyphIcon("download")));r.on("click",function(){var e=t(".prolog-query-editor");e.queryEditor("setQuery",n.query),i.flash(e.find(".CodeMirror"))}),l(r,n.query),this.append(" ",r," ")},update:function(e){var n,i,r;this.append(" ",t.el.span({class:"update"},n=c("play","btn-primary","Open old version"),i=c("zoom-in","btn-info","View changes"),r=c("play","btn-primary","Open new version"))," "),t(n).data("commit",e.previous),t(i).data("diff",{from:e.previous,to:e.commit,name:e.name}),t(r).data("commit",e.commit)},about:function(e){var n=e.docid.replace("gitty:","");this.append(" ",t.el.a({href:r.http.locations.web_storage+n,class:"store btn btn-primary btn-xs"},n)," ")}};t.fn.chatroom=function(e){return d[e]?d[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.chatroom"):d._init.apply(this,arguments)}}(jQuery)}),define("chatbell",["jquery","form","modal","config","preferences","laconic","chatroom"],function(t,e,n,i,r){!function(t){var o={_init:function(n){return n=n||{},this.each(function(){var i=t(this),r=t.extend({},n);r.docid=n.docid||i.data("document"),i.data("chatbell",r),i.addClass("chat-bell"),i.attr("title","Messages available"),i.append(e.widgets.glyphIcon("bell"),t.el.span({class:"chat-bell-count"},"-")),i.chatbell("update")})},chats:function(t){function e(){i.text("-"),r.removeClass("chat-available chat-alert"),r.attr("title",n.empty_title||"No messages available")}var n=this.data("chatbell"),i=this.find(".chat-bell-count"),r=this;if(void 0==t)delete n.docid,delete n.count,delete n.total,e();else{var o=void 0==t.count?t.total:t.count;t.docid&&(n.docid=t.docid),t.count&&(n.count=t.count),t.total&&(n.total=t.total),t.total>0?(this.addClass("chat-available"),o>0?(i.text(o),this.addClass("chat-alert"),this.attr("title",o+" new messages")):(i.text(t.total),this.removeClass("chat-alert"),this.attr("title",t.total+" old messages"))):e()}return this},"chats++":function(t){var e=this.data("chatbell");return void 0!=e.total?e.total++:e.total=1,void 0!=e.count&&e.count++,void 0!=t&&(e.docid=t),e.total&&this.chatbell("chats",{total:e.total,count:e.count}),this},update:function(e){var n=this.data("chatbell");if(e=e||{},void 0!=e.total&&void 0!=e.count)this.chatbell("chats",e);else{var o=e.docid||n.docid,a=r.getDocVal(o,"chatBar",0);if(o&&(a||void 0==e.total)){var s=t(this);t.get(i.http.locations.chat_status,{docid:o,after:a},function(t){s.chatbell("chats",t)})}else void 0!=e.total&&this.chatbell("chats",e)}return this},read_until:function(e,n){return this.each(function(){var n=t(this),i=n.data("chatbell");i.docid==e&&i.total&&n.chatbell("chats",{total:i.total,count:0})})},"chat-message":function(t){if(void 0==t.is_self&&(t.is_self=this.chatroom("is_self",t)),this.chatbell("chats++"),!t.is_self){var e=this.chatroom("render",t),i={dom:e};n.notify(this,i)}}};t.fn.chatbell=function(e){return o[e]?o[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.chatbell"):o._init.apply(this,arguments)}}(jQuery)}),define("sourcelist",["jquery","config","form","modal","laconic"],function(t,e,n,i){!function(t){function r(t,e){if(void 0!=e){e.offset=e.offset||0,e.limit=e.limit||10;for(var n=t.length-1;n>=0;n--){var i=t[n];if(function(t){var n=t.query;if(e.q==n.q&&e.offset>=n.offset&&(e.offset+e.limit<=n.offset+t.matches.length||n.offset+t.matches.length==t.total))return n}(i))return i}}}function o(t,e){var n=e.query;n.offset=n.offset||0,n.limit=n.limit||10;for(var i=t.length-1;i>=0;i--){var r=t[i],o=r.query;if(o.q==n.q&&o.offset+r.matches.length==n.offset){for(var i=0;i<e.matches.length;i++)r.matches.push(e.matches[i]);return}}t.push(e)}var a,s="sourcelist",l={q:e.swish.default_query||""},c=[],u=[],h=0,d={_init:function(e){return this.each(function(){var e=t(this),n={};e.data(s,n),e[s]("fill",void 0,l),e[s]("check_cache"),e[s]("update",l),e.on("login",function(){e[s]("check_cache")&&e[s]("update",l)})})},check_cache:function(){var e=t("#login").login("get_profile",["display_name","avatar"]);return a&&a.display_name==e.display_name&&a.avatar==e.avatar?(a||(a=e),!1):(c=[],a=e,!0)},update:function(n){var l,d=this;this[s]("check_cache"),(l=r(c,n))?t.ajax({url:e.http.locations.source_modified,dataType:"json",success:function(t){t.modified<l.modified+10?d.sourcelist("fill",l,n):(c=[],d[s]("update",n))},error:function(t){i.ajaxError(t)}}):(n=n||{},t.extend(n,a),n.q=n.q||"",n.offset=n.offset||0,n.limit=n.limit||10,n.qid=h++,u.push(n),d[s]("busy",!0),t.ajax({url:e.http.locations.source_list,data:n,dataType:"json",success:function(t){t.query=n,u.pop(),0==u.length&&d[s]("busy",!1),o(c,t),d.sourcelist("fill",t,n)},error:function(t){u.pop(),i.ajaxError(t)}}))},page:function(e){var n=this.data(s);if(n&&n.page){var i=t.extend({},n.page.query);switch(void 0==i.offset&&(i.offset=0),e){case"first":i.offset=0;break;case"prev":i.offset-=n.page.size;break;case"next":i.offset+=n.page.size;break;case"last":i.offset=function(t,e){return Math.floor((t+(e-1))/e)*e}(n.page.total,n.page.size)-n.page.size;break;default:return}i.offset=Math.max(0,i.offset),this[s]("update",i)}},fill:function(e,i){function r(e){return t.el.th(e)}var o,a=this.data(s);if(!a)return this;e&&(l=i,a.page={query:i,offset:i.offset,size:i.limit,total:e.total}),o=this.find("tbody"),0==o.length?(this.append(t.el.div({class:"search-form input-group"}),t.el.div({class:"search-results"},table=t.el.table({class:"table table-striped table-hover table-condensed"},t.el.thead(t.el.tr(r("Type"),r("Name"),r("Tags"),r("User"),r("Modified"))),o=t.el.tbody()),t.el.div({class:"search-no-results"}),t.el.div({class:"loading search"})),t.el.div({class:"search-footer"})),this[s]("search_form"),o=t(o),o.on("click","tr",function(e){var n=t(e.target).closest("tr");t("body").swish("playFile",{file:n.attr("data-name")})})):t(o).html("");var c=this.find("input.search");if(c.is(":focus")||(c.val(e?e.query.q:i?i.q:""),c.trigger("propertychange",!1)),e){var u=i.offset-e.query.offset,h=Math.min(u+i.limit,e.matches.length);for(u<h?t(table).show():t(table).hide();u<h;u++){var d=e.matches[u],f=d.name.split(".").pop(),p=d.name.slice(0,-(f.length+1)),g=t.el.td({class:"tags"});(d.tags||[]).forEach(function(e){t(g).append(t.el.span({class:"tag"},e))}),o.append(t.el.tr({"data-name":d.name},t.el.td(n.widgets.typeIcon(f)),t.el.td(p),g,t.el.td(d.author),t.el.td(function(t){var e=new Date(1e3*t),n=e.toISOString();return n.slice(0,10)+" "+n.slice(11,19)}(d.time))))}this[s]("search_footer",e,i)}},search_footer:function(e,r){function o(t,e,i){return c.action=t,c.class="btn-primary "+e,n.widgets.glyphIconButton(i,c)}var a=this.find("div.search-footer"),l=this.find("div.search-no-results"),c={};0==a.find(".f-total").length&&(a.append(o("first","backward","fast-backward"),o("prev","backward","step-backward"),t.el.button({class:"btn btn-default"},t.el.span({class:"f-from"}),t.el.label("to"),t.el.span({class:"f-to"}),t.el.label("from"),t.el.span({class:"f-total"})),o("next","forward","step-forward"),o("last","forward","fast-forward")),a.on("click","button",function(e){var n=t(e.target).closest("button"),i=n.data("action");i&&n.closest("div.sourcelist")[s]("page",i)}));var u=Math.min(r.offset+r.limit,e.total);if(0==e.total){if(0==l.find("div").length){var h;l.append(t.el.div(t.el.span({class:"no-search-results-warning"},n.widgets.glyphIcon("alert")," No matching files"),t.el.br(),"If you are a new user you may",t.el.ul(t.el.li("Use the Examples menu from the navigation bar"),t.el.li("Use the Program or Notebook button above")),t.el.div(h=t.el.a({href:"#"},"help on search")))),t(h).on("click",function(){console.log("help"),i.help({file:"sourcelist.html"})})}l.show(),a.hide()}else l.hide(),r.offset>0||u<e.total?(a.show(),0==r.offset?a.find(".backward").attr("disabled","disabled"):a.find(".backward").removeAttr("disabled"),u>=e.total?a.find(".forward").attr("disabled","disabled"):a.find(".forward").removeAttr("disabled"),a.find(".f-from").text(""+r.offset),a.find(".f-to").text(""+u),a.find(".f-total").text(""+e.total)):a.hide()},search_form:function(){function e(e,i){for(var r,o=t.el.div({class:"btn-group"},t.el.button({type:"button",class:"btn btn-default dropdown-toggle","data-toggle":"dropdown","aria-haspopup":!0,"aria-expanded":!1},e," ",t.el.span({class:"caret"})),r=t.el.ul({class:"dropdown-menu"})),a=0;a<i.length;a++)t(r).append(t.el.li(function(e){var i;return"string"==typeof e?t.el.a({"data-tag":e},e):(i=e.i?t.el.a({"data-tag":e.t,"data-value":e.v},n.widgets.typeIcon(e.i)," "+e.l):t.el.a({"data-tag":e.t,"data-value":e.v},e.l),t(i).data("quote",void 0==e.q?'"':e.q),i)}(i[a])));return o}function i(t){l.tmo&&(clearTimeout(l.tmo),l.tmo=void 0),1==t&&(t=1e3),t&&(l.tmo=setTimeout(o,t))}function o(t){t&&t.preventDefault(),i();var e=u.find("input").val();return u[s]("update",{q:e}),!1}var a,l=this.data(s),u=this,h=this.find("div.search-form");h.append(t.el.div({class:"form-group has-feedback has-clear"},t.el.input({type:"text",class:"form-control search",placeholder:"Find files"}),t.el.span({class:"form-control-clear glyphicon glyphicon-remove form-control-feedback hidden"})),t.el.div({class:"input-group-btn"},e("Filter",[{t:"user",l:"My files",v:"me",q:'"'},{t:"user",l:"By user",v:"",q:'"'},{t:"user",l:"By user (regex)",v:"",q:"/"},{t:"tag",l:"By tag",v:"",q:'"'},{t:"tag",l:"By tag (regex)",v:"",q:"/"},{t:"name",l:"By name",v:"",q:'"'},{t:"name",l:"By name (regex)",v:"",q:"/"}]),e("Type",[{t:"type",l:"Program",i:"pl",v:"pl",q:""},{t:"type",l:"Notebook",i:"swinb",v:"swinb",q:""},{t:"type",l:"Permalink",i:"lnk",v:"lnk",q:""}]),a=t.el.button({class:"btn btn-default",type:"submit"},t.el.i({class:"glyphicon glyphicon-search"})))),n.dyn_clear(h,o),h.on("click","a",function(e){var n=t(e.target).closest("a");!function(t,e,n){var i=h.find("input"),r=i.val(),a=t+":"+n+(e||"")+n;r=""==r.trim()?a:e&&RegExp("\\b"+t+":").test(r)?r.replace(RegExp("\\b"+t+':(\\S*|\\s*"[^"]*")'),a):r.trim()+" "+a,i.val(r).trigger("propertychange"),(e||"tag"==t)&&o()}(n.data("tag"),n.data("value"),n.data("quote"))}),t(a).on("click",function(t){return o(t)});var d=u.find("input");d.keydown(function(t){if(13==t.which)return o(t)}).on("input propertychange",function(t,e){0!=e&&i(r(c,d.val())?200:!0)})},busy:function(t){var e=this.find("div.loading");t?e.show():e.hide()}};t.fn.sourcelist=function(e){return d[e]?d[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery."+s):d._init.apply(this,arguments)}}(jQuery)}),define("tabbed",["jquery","form","config","preferences","modal","laconic","search","chatbell","sourcelist"],function(t,e,n,i,r){var o={tabTypes:{},type:function(t){var e=t.split(".").pop();for(var n in o.tabTypes)if(o.tabTypes.hasOwnProperty(n)&&o.tabTypes[n].dataType==e)return o.tabTypes[n]}};return o.tabTypes.permalink={dataType:"lnk",typeName:"program",label:"Program",create:function(e,n){t(e).addClass("prolog-editor").prologEditor(t.extend({save:!0},n)).prologEditor("makeCurrent")}},function(t){function a(e,n,i){t(e).wrap('<div role="tabpanel" class="tab-pane" id="'+n+'"></div>');var r=t(e).parent();return i&&r.addClass("active"),r}function s(e,n){var i=t.el.span({class:"glyphicon glyphicon-"+e});return n&&t(i).addClass(n),i}function l(){return"tabbed-tab-"+u++}function c(t){if(n.swish.profiles)for(var e=0;e<n.swish.profiles.length;e++)if(n.swish.profiles[e].value==t)return n.swish.profiles[e]}var u=0,h={_init:function(e){return e=e||{},this.each(function(){var n=t(this),i={};i.newTab=e.newTab,i.tabTypes=e.tabTypes||o.tabTypes,n.data("tabbed",i),n.addClass("tabbed unloadable"),n.tabbed("makeTabbed"),n.on("trace-location",function(t,e){n.tabbed("showTracePort",e)}),n.on("data-is-clean",function(e,i){var r=t(e.target).closest(".tab-pane"),o=n.tabbed("navTab",r.attr("id"));o&&(i?o.removeClass("data-dirty"):o.addClass("data-dirty"))}),n.on("unload",function(t){if(t.target==n[0]&&n.closest(".swish").swish("preserve_state")){var e=n.tabbed("getState");localStorage.setItem("tabs",JSON.stringify(e))}}),n.on("restore",function(t){var e;if(t.target==n[0]){try{var i=localStorage.getItem("tabs");i&&(e=JSON.parse(i))}catch(t){}e&&"object"==typeof e&&n.tabbed("setState",e)}}),n.on("preference",function(t,e){"preserve-state"==e.name&&0==e.value&&localStorage.removeItem("tabs")})})},makeTabbed:function(){var e=this.children(),n=t.el.ul({class:"nav nav-tabs",role:"tablist"}),i=t.el.div({class:"tab-content"});this.prepend(i),this.prepend(n),t(n).on("click","span.xclose",function(e){var n=t(e.target).parent().attr("data-id");t(e.target).parents(".tabbed").first().tabbed("removeTab",n),e.preventDefault()}),t(n).on("click","a",function(e){t(e.target).closest("a").tab("show"),e.preventDefault()});for(var r=0;r<e.length;r++){var o=t(e[r]),c=l(),u=o.attr("data-label")||"Unknown",h="disabled"!=o.attr("data-close"),d=r==e.length-1,f=this.tabbed("tabLabel",c,u,h);d&&t(f).addClass("active"),t(n).append(f),t(i).append(a(t(e[r]),c,d))}var p=t.el.a({class:"tab-new compact",title:"Open a new tab"},s("plus"));t(n).append(t.el.li({class:"tab-new",role:"presentation"},p)),t(p).on("click",function(e){return t(e.target).parents(".tabbed").first().tabbed("newTab"),e.preventDefault(),!1}),t(n).on("shown.bs.tab","a",function(e){var n=t(e.target).data("id");t("#"+n+" .swish-event-receiver").trigger("activate-tab"),t("#"+n+" .storage").storage("activate")}),0==this.tabbed("navContent").children().length&&this.tabbed("newTab")},newTab:function(e,n){var i=this.data("tabbed");if(void 0==e)if(i.newTab)e=i.newTab();else{var r;e=this.tabbed("tabSelect"),t(e).append(this.tabbed("profileForm"),t.el.hr(),r=t.el.div({class:"sourcelist"})),t(r).sourcelist()}return void 0==n&&(n=!0),this.tabbed("addTab",e,{active:n,close:!0})},getState:function(){var t=this.tabbed("get_ordered_storage").storage("getState");return t.pathname=window.location.pathname,t.time=(new Date).getTime(),t},setState:function(t){for(var e=this.find(".storage").length>0,n=0;n<t.tabs.length;n++){var i=t.tabs[n];this.tabbed("restoreTab",i,e)}},restoreTab:function(e,i){function o(t,e){e.data&&t.find(".storage").storage("setValue",{data:e.data,role:"source"}),e.chatroom&&t.find(".storage").storage("chat",e.chatroom)}var a,s=this;e.query=null,e.noHistory=!0;var l=this.find(".storage").storage("match",e);if(l?(l.data("storage").url=e.url,a=l.closest(".tab-pane"),s.tabbed("move_right",a)):a=void 0,l)o(a,e);else if(l);else{var c,u=this.find("div.tabbed-select"),h='<div class="restore-tab">Restoring '+(e.file||e.url)+" ...</div>";if(u.length>0)c=u.first().closest(".tab-pane"),c.html(h);else{var d=!i&&Boolean(e.active);c=s.tabbed("newTab",t(h),d)}if("gitty"==e.st_type){var f=n.http.locations.web_storage+e.file;t.ajax({url:f,type:"GET",data:{format:"json"},success:function(t){t.url=f,t.st_type="gitty",t.noHistory=!0,s.tabbed("setSource",c,t)||(console.log("Failed to restore",e.file),s.tabbed("removeTab",a.attr("id"))),o(c,e),!i&&c.hasClass("active")&&c.find(".storage").storage("activate")},error:function(t){r.ajaxError(t)}})}else e.url?t.ajax({url:e.url,type:"GET",
-data:{format:"json"},success:function(t){var n;if("string"==typeof t)n={data:t},n.st_type="external";else{if("object"!=typeof t||"string"!=typeof t.data)return void alert("Invalid data");n=t,n.st_type="filesys"}n.noHistory=!0,n.url=e.url,s.tabbed("setSource",c,n)||(console.log("Failed to restore",e.url),s.tabbed("removeTab",c.attr("id"))),o(c,e),!i&&c.hasClass("active")&&c.find(".storage").storage("activate")},error:function(t){r.ajaxError(t)}}):console.log("Cannot restore ",e)}},tabFromSource:function(e){function n(){var n=r.tabbed("newTab",t("<span></span>"));r.tabbed("setSource",n,e)||r.tabbed("removeTab",n.attr("id"))}var r=this,o=this.find("div.tabbed-select");if("string"==typeof e&&(e={data:e}),o.length>0){var a=o.first().closest(".tab-pane");this.tabbed("show",a.attr("id")),this.tabbed("setSource",a,e)}else if(e.newTab||i.getVal("new-tab"))n();else{var a;this.find(".storage").each(function(n,i){if(t(i).storage("setSource",e))return a=t(i).closest(".tab-pane"),!1}),a?this.tabbed("show",a.attr("id")):n()}return this},setSource:function(e,n){if("object"==typeof n&&(n.meta&&n.meta.name||n.url)){var i=n.meta&&n.meta.name?n.meta.name:n.url,r=o.type(i),a=t.el.div(),s={};return n.noHistory&&(s.noHistory=!0),e.html(""),e.tabbed("title",r.label,r.dataType),e.append(a),r.create(a,s),t(a).storage("setSource",n),!0}return!1},showTracePort:function(e){if(e&&e.source&&e.source.file){var n,i,r,o=e.source.file;if(n=function(){if(o.startsWith("pengine://"))return o.split("/")[2]}())r=this.find(".prolog-editor").filter(function(e,i){return t(i).prologEditor("pengine",{has:n})});else if((i=function(){if(o.startsWith("swish://"))return o.slice("swish://".length)}())&&!(r=this.find(".storage").storage("match",{file:i})))return this.closest(".swish").swish("playFile",{file:i,newTab:!0,noHistory:!0,prompt:e}),this;r&&r.prologEditor("showTracePort",e)}return this},addTab:function(e,n){var i=this.tabbed("navTabs"),r=l(),o=a(e,r,n.active);this.tabbed("navContent").append(o);var s=this.tabbed("tabLabel",r,"New tab",close,"select"),c=i.find("a.tab-new");return 1==c.length?t(s).insertBefore(c.first().parent()):i.append(s),n.active&&t(s).find("a").first().tab("show"),o},removeTab:function(e){var n,i=this.tabbed("navTabs").find("a[data-id='"+e+"']").parent(),r=t("#"+e);0!=r.find(".storage").storage("unload","closetab")&&(r.is(":visible")&&(n=i.prev()||i.next()),i.remove(),r.find(".prolog-runner").prologRunner("close"),r.find(".storage").storage("close"),r.remove(),n&&n.length>0?n.find("a").first().tab("show"):0==this.tabbed("navContent").children().length&&this.tabbed("newTab"),t(".storage").storage("chat_status",!0))},show:function(e){var n=this.tabbed("navTab",e);n&&n.tab("show"),t(".storage").storage("chat_status",!0)},move_right:function(t){var e,n=this.find(">ul");e="string"==typeof t?t:t.attr("id"),n.find("a[data-id="+e+"]").closest("li").insertBefore(n.children().last())},tabLabel:function(e,n,i,r){var o,a;i&&(o=s("remove","xclose"),t(o).attr("title","Close tab")),r=r||"pl";var l=t.el.a({class:"compact",href:"#"+e,"data-id":e},t.el.span({class:"tab-icon type-icon "+r}),t.el.span({class:"tab-dirty",title:"Tab is modified. See File/Save and Edit/View changes"}),a=t.el.a({class:"tab-chat"}),t.el.span({class:"tab-title"},n),o),c=t.el.li({role:"presentation"},l);return t(a).chatbell().on("click",function(e){var n=t(e.target).closest("a.compact").data("id");return t("#"+n).find(".storage").storage("chat"),!1}),c},anchor:function(){var t=this.closest(".tab-pane");if(0!=t.length){var e=t.closest(".tabbed"),n=t.attr("id");return e.tabbed("navTabs").find("a[data-id="+n+"]")}},get_ordered_storage:function(){var e=this,n=[];return this.find(">ul>li").each(function(){var i=t(this).find(">a").data("id");e.find(">div.tab-content>div[id="+i+"] .storage").each(function(){n.push(this)})}),t(n)},title:function(t,e){var n=this.tabbed("anchor");if(n&&(n.find(".tab-title").text(t),e)){var i=n.find(".tab-icon");i.removeClass(),i.addClass("tab-icon type-icon "+e)}return this},chats:function(t){var e=this.tabbed("anchor");return e&&e.find(".chat-bell").chatbell("update",t),this},"chats++":function(t){var e=this.tabbed("anchor");return e&&e.find(".chat-bell").chatbell("chats++",t),this},tabSelect:function(){var e=this.data("tabbed"),n=t.el.div({class:"tabbed-select"},t.el.div({class:"tabbed-create"},t.el.label({class:"tabbed-left"},"Create a "),g=t.el.div({class:"btn-group",role:"group"}),t.el.label({class:"tabbed-right"},"here"))),a=[];for(var s in e.tabTypes)e.tabTypes.hasOwnProperty(s)&&e.tabTypes[s].order&&a.push(s);a.sort(function(t,n){return e.tabTypes[t].order-e.tabTypes[n].order});for(var l=0;l<a.length;l++){var c=e.tabTypes[a[l]];t(g).append(t.el.button({type:"button",class:"btn btn-primary","data-type":c.typeName,"data-ext":c.dataType},c.label))}return t(g).on("click",".btn",function(e){var n=t(e.target).data("type"),r=t(e.target).closest(".tab-pane"),a=t.el.div(),s=t.extend({},o.tabTypes[n]),l=r.find("label.active > input[name=profile]").val();l&&(s.profile=l,s.value=r.tabbed("profileValue",l,o.tabTypes[n].dataType),void 0!=s.value&&i.setVal("default-profile",l)),r.html(""),r.tabbed("title",s.label,s.dataType),r.append(a),o.tabTypes[n].create(a,s)}),t(g).addClass("swish-event-receiver"),t(g).on("download save fileInfo print",function(e){if(t(e.target).closest(".tab-pane").is(":visible")){var n={download:"you wish to download",save:"you wish to save",print:"you wish to print",fileInfo:"for which you want details"};r.alert("Please activate the tab "+n[e.type]),e.stopPropagation()}}),t(g).on("profile-selected",function(e,n){t(e.target).find("button").each(function(){t(this).prop("disabled",n.type.indexOf(t(this).data("ext"))<0)})}),n},searchForm:function(){var n=t.el.form({class:"search-sources"},t.el.label({class:"control-label"},"Open source file containing"),t.el.div({class:"input-group"},t.el.input({type:"text",class:"form-control search",placeholder:"Search sources","data-search-in":"sources store_content"}),t.el.div({class:"input-group-btn"},t.el.button({class:"btn btn-default",type:"submit"},t.el.i({class:"glyphicon glyphicon-search"})))),t.el.div({class:"input-group"},e.fields.radio("smatch",[{label:"Start of line",value:"sol"},{label:"Start of word",value:"sow",active:!0},{label:"Anywhere",value:"anywhere"}])));return t(n).find("input.search").search(),n},sourceList:function(){},profileForm:function(){if(n.swish.profiles&&n.swish.profiles.length>0){for(var r,o=0;o<n.swish.profiles.length;o++)delete n.swish.profiles[o].active;if(r=i.getVal("default-profile"))for(var o=0;o<n.swish.profiles.length;o++)n.swish.profiles[o].value==r&&(n.swish.profiles[o].active=!0);else n.swish.profiles[0].active=!0;var a=t.el.div({class:"tabbed-profile"},t.el.label({class:"tabbed-left"},"based on"),t.el.div({class:"input-group select-profile"},e.fields.radio("profile",n.swish.profiles)),t.el.label({class:"tabbed-right"},"profile"));return t(a).on("click",function(e){var n=t(e.target).find("input").val(),i=c(n);t(e.target).closest(".tab-pane").find(".tabbed-create .btn-group").trigger("profile-selected",i)}),a}},profileValue:function(e,i){var o=n.http.locations.swish+"profile/"+e+"."+i;return t.ajax({url:o,type:"GET",data:{format:"raw"},async:!1,error:function(t){r.ajaxError(t)}}).responseText},navTabs:function(){return this.find("ul.nav-tabs").first()},navTab:function(t){var e=this.find("ul.nav-tabs").first().find("a[data-id='"+t+"']");if(e.length>0)return e},navContent:function(){return this.find("div.tab-content").first()}};t.fn.tabbed=function(e){return h[e]?h[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.tabbed"):h._init.apply(this,arguments)}}(jQuery),o}),define("prolog",["jquery","config","form","preferences"],function(t,e,n,i){var r={downloadCSV:function(o,a,s){function l(e,n){return t.el.input({type:"hidden",name:e,value:n})}function c(){var s=t.el.form({class:"form-horizontal"},n.fields.projection(f.join(",")),n.fields.csvFormat(e.swish.csv_formats,i.getVal("csvFormat")),n.fields.limit("10 000",!1),n.fields.filename(p,2),n.fields.buttons({label:"Download CSV",action:function(t,n){return t.preventDefault(),e.swish.csv_formats.length>1&&i.setVal("csvFormat",n.format),r.downloadCSV(o,a,n),!1}}));this.append(s)}if(s=s||{},s.disposition=s.disposition||s.filename||"swish-results.csv",s.projection){var u,h=s.format||"prolog";if(s.distinct&&(o="distinct(["+s.projection+"],("+o+"))"),s.limit){var d=parseInt(s.limit.replace(/[ _]/g,""));if("number"!=typeof d)return alert("Not an integer: ",s.limit),!1;o="limit("+d+",("+o+"))"}u=t.el.form({method:"POST",action:e.http.locations.pengines+"/create",target:"_blank"},l("format","csv"),l("chunk","10"),l("solutions","all"),l("disposition",s.disposition),l("application","swish"),l("ask",o),l("src_text",a),l("template",h+"("+s.projection+")")),console.log(u),t("body").append(u),u.submit(),t(u).remove()}else{var f=t().prologEditor("variables",o),p=s.disposition;p.indexOf(".")<0&&(p+=".csv"),n.showDialog({title:"Download query results as CSV",body:c})}return this},trimFullStop:function(t){return t.replace(/\.\s*$/m,"")},options:{application:"swish",chunk:5}};return t.swish=function(t){for(var e in r.options)r.options.hasOwnProperty(e)&&!t.hasOwnProperty(e)&&(t[e]=r.options[e]);return new Pengine(t)},r}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/addon/hint/templates-hint",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){function e(t,e){return t.slice(0,e.length).toUpperCase()==e.toUpperCase()}function n(t){}function i(){this.marked=[],this.selectableMarkers=[],this.varIndex=-1}function r(t){return t._templateStack?t._templateStack.length:0}function o(t){this.name=t.name,this.description=t.description,this.text=t.text,t.varTemplates&&(this.varTemplates=t.varTemplates),null!=t.template?this.source=t.template:null!=t.tokens&&(this._tokens=t.tokens)}function a(t){for(var e=[],n=!1,i=null,r="",o=0;o<t.length;o++){var a=t.charAt(o);if("\n"==a)""!=r&&e.push(r),r="",e.push(a),i=null;else{var s=!0;if(n)"}"==a&&(n=!1,s=!1,"cursor"==r?e.push({cursor:!0}):"line_selection"==r?e.push({line_selection:!0}):e.push({variable:r}),r="");else if("$"==a&&o+1<=t.length){o++;var l=t.charAt(o);"{"==l&&(n=!0,s=!1,""!=r&&e.push(r),r="")}s&&"$"!=i?(r+=a,i=a):i=null}}return""!=r&&e.push(r),e}function s(t,e){var n=t.findMarksAt(e.from);if(n)for(var i=0;i<n.length;i++){var r=n[i];if(r._templateVar)return r}return null}function l(t,e){var n=t._templateState;if(e.origin&&n&&!n.updating)try{n.updating=!0;var i=s(t,e);if(null==i)f(t);else for(var r=i.find(),o=t.getRange(r.from,r.to),a=0;a<n.marked.length;a++){var l=n.marked[a];if(l!=i&&l._templateVar==i._templateVar){var c=l.find();t.replaceRange(o,c.from,c.to)}}}finally{n.updating=!1}}function c(t){n("template","endCompletion()",r(t)),r(t)&&f(t,!0)}function u(t,e){var n=t._templateState;if(n.selectableMarkers.length>0){if(++n.varIndex>=n.selectableMarkers.length){if(e)return void d(t);n.varIndex=0}var i=n.selectableMarkers[n.varIndex],r=i.find();t.setSelection(r.from,r.to);for(var o=(i._templateVar,0);o<n.marked.length;o++){var a=n.marked[o];a==i?(a.className="",a.startStyle="",a.endStyle=""):a._templateVar==i._templateVar?(a.className="CodeMirror-templates-variable-selected",a.startStyle="",a.endStyle=""):(a.className="CodeMirror-templates-variable",a.startStyle="CodeMirror-templates-variable-start",a.endStyle="CodeMirror-templates-variable-end")}t.refresh()}else d(t)}function h(e){function n(t,e){return t.ch==e.ch&&t.line==e.line}var i=e._templateState,r=i.selectableMarkers[i.varIndex],o={state:i};e._hintTemplateMarker&&(o.marker=e._hintTemplateMarker),e._templateStack||(e._templateStack=[]),e._templateStack.push(o),delete e._templateState,e._hintTemplateMarker=r;var a=r.find(),s=e.listSelections();1==s.length&&n(s[0].anchor,a.from)&&n(s[0].head,a.to)&&e.replaceRange("☰",a.from,a.to),t.commands.autocomplete(e)}function d(t){var e=t._templateState.cursor;if(null!=e){var n=e.find();null!=n&&t.setSelection(n,n)}f(t)}function f(t,e){var i=t._templateState;if(i){n("template","Uninstall, clearing: ",i.marked.length);for(var r=0;r<i.marked.length;r++)i.marked[r].clear();null!=i.cursor&&i.cursor.clear(),i.marked.length=0,i.selectableMarkers.length=0}else n("template","Uninstall, no state");if(t._templateStack&&t._templateStack.length>0){n("template","Popping from level",t._templateStack.length);var o=t._templateStack.pop();i=t._templateState=o.state,e&&t._hintTemplateMarker&&function(){n("template","Canceled?");for(var e=0;e<i.marked.length;e++){var r=i.marked[e];if(r==t._hintTemplateMarker){var o=r.find();o&&"☰"==t.getRange(o.from,o.to)&&t.replaceRange(r._templateVar,o.from,o.to)}}}(),o.marker?t._hintTemplateMarker=o.marker:delete t._hintTemplateMarker}else n("template","Leaving template mode"),t.off("change",l),t.off("endCompletion",c),t.removeKeyMap(m),delete t._templateState,delete t._hintTemplateMarker}var p=[],g=t.Pos;t.templatesHint={};var m={Tab:u,Enter:function(t){u(t,!0)},Esc:f,"Ctrl-Space":h};o.prototype.tokens=function(){return null==this._tokens&&(this._tokens=a(this.source)),this._tokens},o.prototype.content=function(){if(null==this._content){for(var t=this.tokens(),e="",n=0;n<t.length;n++){var i=t[n];"string"==typeof i?e+=i:i.variable&&(e+=i.variable)}this._content=e}return this._content},o.prototype.insert=function(t,e){var o=this,a=r(t);if(n("template","Insert, nested",a,"template",o),(t._templateState||a)&&(n("template","Uninstall from insert()",a),f(t)),o.text)return void t.replaceRange(o.text,e.from,e.to);var s=new i;t._templateState=s;for(var h=this.tokens(),d="",p=e.from.line,v=e.from.ch,y=[],b=[],x=null,w=0;w<h.length;w++){var _=h[w];if("string"==typeof _)d+=_,"\n"==_?(p++,v=0):v+=_.length;else if(_.variable){d+=_.variable;var S=g(p,v),C=g(p,v+_.variable.length),T=0!=b[_.variable];v+=_.variable.length,y.push({from:S,to:C,variable:_.variable,selectable:T}),b[_.variable]=!1}else _.cursor&&(x=g(p,v))}var S=e.from,C=e.to,k=S.line;t.replaceRange(d,S,C);for(var w=0;w<y.length;w++){var A=y[w],S=A.from,C=A.to,M=t.markText(S,C,{className:"CodeMirror-templates-variable",startStyle:"CodeMirror-templates-variable-start",endStyle:"CodeMirror-templates-variable-end",inclusiveLeft:!0,inclusiveRight:!0,clearWhenEmpty:!1,_templateVar:A.variable,_templates:function(t){if(o.varTemplates&&o.varTemplates[t])return o.varTemplates[t]}(A.variable)});s.marked.push(M),1==A.selectable&&s.selectableMarkers.push(M)}null!=x&&(s.cursor=t.setBookmark(x));for(var E=d.split("\n"),L=1;L<E.length;L++){var P=k+L;t.indentLine(P)}a||(t.on("change",l),n("template","Installing endCompletion"),t.on("endCompletion",c),t.addKeyMap(m)),u(t,!0)},t.templatesHint.getCompletions=function(n,i,r){var o=n.doc.mode.name,a=p[o];if(a)for(var s=0;s<a.length;s++){var l=a[s];if(e(l.name,r)){var c=l.name;l.description&&(c+="- "+l.description);var u="CodeMirror-hint-template";l.className&&(u=l.className);var h={className:u,text:c,template:l};h.data=h,h.hint=function(t,e,n){n.template.insert(t,e)},h.info=function(e){var i=e.template.content();if(t.runMode){var r=document.createElement("div");return r.className="cm-s-default",n.options&&n.options.theme&&(r.className="cm-s-"+n.options.theme),t.runMode(i,n.getMode().name,r),r}return i},i.push(h)}}},t.templatesHint.Template=o,t.templatesHint.addTemplates=function(t){var e=t.context;if(e){var n=p[e];n||(n=[],p[e]=n),t.templates.forEach(function(t){n.push(new o(t))})}}}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/mode/prolog/prolog-template-hint",["../../lib/codemirror","../../addon/hint/templates-hint","jquery","config","laconic"],t):t(CodeMirror)}(function(t,e,n,i){"use strict";function r(t){var e=this,i=["template","displayText","text",{from:"summary",to:"description"},"className","varTemplates"];if("string"==typeof t)this.displayText=t,this.text=t;else{for(var r=0;r<i.length;r++){var o=i[r];"string"==typeof o?t[o]&&(this[o]=t[o]):t[o.from]&&(this[o.to]=t[o.from])}t.mode&&function(t){var n=/[-+?:^@!]*([A-Z][A-Za-z_0-9]*)/g,i=/\bis\s+(det|nondet|semidet|fail|multi)$/;if(e.template||(e.template=t.replace(n,"$${$1}").replace(i,""),e.template.match(/\${cursor}/)||(e.template+="${cursor}")),e.displayText||(e.displayText=t),!e.varTemplates){var r=t.match(/:[A-Z][A-Za-z_0-9]*/g);if(r&&r.length>0){for(var o={},a=0;a<r.length;a++)o[r[a].substring(1)]=l;e.varTemplates=o}}}(t.mode),t.classes&&(t.className=t.classes.join(" "))}this.render=function(t,e,i){n(t).append(i.displayText)},this.info=function(t){return t.description}}function o(e,n,i){function o(t,e){return t.slice(0,e.length)==e}var a=n.token.string,s=[],c=l;e._hintTemplateMarker&&("☰"==a&&(a=""),c=e._hintTemplateMarker._templates);var u=a.length>0&&!a.match(/\w/);if(c)for(var h=0;h<c.length;h++){var d=c[h];if("string"==typeof d)o(d,a)&&s.push(new r(d));else{var f=["name","mode","template","text"];if(u)d.name&&d.name.indexOf(a)>=0&&s.push(new r(d));else for(var p=0;p<f.length;p++)if(d[f[p]]){o(d[f[p]],a)&&s.push(new r(d));break}}}if(0==s.length)for(var g=t.hint.anyword,m=""==a&&e._hintTemplateMarker?{word:/[A-Z][A-Za-z0-9_]*/}:i,v=g(e,m),h=0;h<v.list.length;h++)s.push(new r(v.list[h]));return{list:s,from:n.position.from,to:n.position.to}}function a(e,n,i){var r=s(e),a=o(e,r,i);t.attachContextInfo(a),n(a)}function s(e){var n=e.getCursor(),i=e.getTokenAt(n);return"prolog"!=t.innerMode(e.getMode(),i.state).mode.name?null:{token:i,position:{from:new t.Pos(n.line,i.start),to:new t.Pos(n.line,i.end)}}}var l=i.swish.templates||[];return r.prototype.hint=function(e,n,i){new t.templatesHint.Template(this).insert(e,n)},a.async=!0,t.registerHelper("hint","prologTemplate",a),{getHints:a,getState:s}}),define("gitty",["jquery","config","form","modal","laconic"],function(t,e,n,i){function r(e,n){function i(t){(e[t]||n[t])&&e[t]!=n[t]&&(r[t]={from:e[t],to:n[t]})}var r={};return i("author"),i("title"),i("data"),i("public"),i("example"),i("name"),(d=a(e.tags,n.tags))&&(r.tags=d),t.isEmptyObject(r)?null:r}function o(e,n){var i={};for(var r in e)if(e.hasOwnProperty(r)){switch(typeof e[r]){case"object":if(t.isArray(e[r])&&!a(e[r],n[r]))continue;break;case"string":case"boolean":if(n[r]==e[r])continue}i[r]=e[r]}return i}function a(e,n){function i(t,e){for(var n=[],i=0;i<e.length;i++)t.indexOf(e[i])<0&&n.push(e[i]);return n}var r,o={};return e=e||[],n=n||[],(r=i(e,n)).length>0&&(o.added=r),(r=i(n,e)).length>0&&(o.deleted=r),t.isEmptyObject(o)?null:o}return function(t){var o={_init:function(e){return this.each(function(){function n(e,n,i,r){var o={role:"presentation"},a=[];return n&&a.push("active"),r&&a.push("disabled"),a!=[]&&(o.class=a.join(" ")),t.el.li(o,t.el.a({href:"#"+i,"data-toggle":"tab"},e))}var i,r=t(this),o=r.data("gitty")||{},a=e.meta;o.commits=[],o.commits[a.commit]=a,o.commit=a.commit,o.editor=e.editor,henabled=!Boolean(a.previous),i=t(t.el.div({class:"tab-content"})),r.append(t.el.ul({class:"nav nav-tabs"},n("Meta data",!0,"gitty-meta-data"),n("History",!1,"gitty-history",henabled),n("Changes",!1,"gitty-diff",henabled))),r.append(i),i.append(t.el.div({class:"tab-pane fade in active gitty-meta-data",id:"gitty-meta-data"})),r.find('[href="#gitty-meta-data"]').on("show.bs.tab",function(t){r.gitty("showMetaData")}),i.append(t.el.div({class:"tab-pane fade gitty-history",id:"gitty-history"})),r.find('[href="#gitty-history"]').on("show.bs.tab",function(t){r.gitty("showHistory")}),i.append(t.el.div({class:"tab-pane fade gitty-diff",id:"gitty-diff"})),r.find('[href="#gitty-diff"]').on("show.bs.tab",function(t){r.gitty("showDiff")}),r.data("gitty",o),r.gitty("showMetaData")})},title:function(e){var n=t.el.span("File ",t.el.span({class:"filename"},e.name));return"HEAD"!=e.symbolic&&e.commit&&t(n).append("@",t.el.span({class:"sha1 abbrev"},e.commit.substring(0,7))),n},showMetaData:function(){return this.each(function(){var e,i=t(this),r=i.data("gitty"),o=i.find(".gitty-meta-data"),a=r.commits[r.commit];r.metaData!=r.commit&&(r.metaData=r.commit,o.html(""),e=t.el.form({class:"form-horizontal"},n.fields.fileName(a.name,a.public,a.example,!0),n.fields.title(a.title),n.fields.author(a.author),n.fields.date(a.time,"Date","date"),n.fields.tags(a.tags)),"HEAD"==a.symbolic&&t(e).append(n.fields.buttons({label:"Update meta data",action:function(t,e){return r.editor.storage("save",e,"only-meta-data"),!1}})),o.append(e))})},showHistory:function(r){return this.each(function(){var o,a=t(this),s=a.data("gitty"),l=a.find(".gitty-history"),c=s.commits[s.commit];if(!s.history){r=r||{},r.depth||(r.depth=100),l.html(""),l.append(t.el.div({class:"gitty-history-table"},t.el.table({class:"table table-striped table-condensed gitty-history","data-click-to-select":!0,"data-single-select":!0},t.el.tr(t.el.th("Comment"),t.el.th("Date"),t.el.th("User"),t.el.th("Changed")),t.el.tbody()))),o=n.widgets.glyphIconButton("play",{title:"Open the highlighted version in SWISH",class:"btn-primary"}),l.append(o),t(o).on("click",function(e){var n=a.find("tr.success");if(1==n.length){var i=n.data("commit");"HEAD"==s.commits[i].symbolic?file=s.commits[i].name:file=i,a.parents(".swish").swish("playFile",file),t("#ajaxModal").modal("hide")}return!1});var u=e.http.locations.web_storage+encodeURI(c.name);t.ajax({url:u,contentType:"application/json",type:"GET",data:{format:"history",depth:r.depth,to:s.commit},success:function(t){a.gitty("fillHistoryTable",t),s.history=s.commit},error:function(t){i.ajaxError(jqXHR)}})}})},fillHistoryTable:function(e){for(var n=this,i=this.data("gitty"),o=this.find(".table.gitty-history tbody"),a=e.history?e.history:e,s=0;s<a.length;s++){var l=a[s];i.commits[l.commit]||(i.commits[l.commit]=l)}e.skipped&&o.append(t.el.tr(t.el.td({class:"skipped-commits",colspan:4},"(Skipped "+e.skipped+" commits)")));for(var s=0;s<a.length;s++){var c,l=a[s];if(s==a.length-1&&l.previous&&!i.commit[l.previous])break;var u={"data-commit":l.commit};i.commit==l.commit&&(u.class="success"),c=t.el.tr(u,l.commit_message?t.el.td({class:"commit-message"},l.commit_message):t.el.td({class:"commit-message no-comment"},"No comment"),t.el.td({class:"date"},new Date(1e3*l.time).toLocaleString()),t.el.td({class:"author"},l.author||"No author"),t.el.td({class:"changes"},function(e){var n,o,a=t.el.span();if(e.previous){if((n=i.commits[e.previous])&&(o=r(e,n))){var s=0;for(var l in o)if(o.hasOwnProperty(l)){var c="name"==l?"forked "+n.name:l;t(a).append(0==s++?void 0:", ",t.el.span({class:"change-type"},c))}}}else t(a).append("initial");return a}(l))),o.append(c)}o.on("click","tr",function(e){var i=t(e.target).parents("tr"),r=i.data("commit");n.gitty("setCommit",r)})},setCommit:function(t){var e=this.data("gitty"),n=this.parent(".modal-content").find("h2");return n.html(""),n.append(this.gitty("title",e.commits[t])),this.find("tr.success").removeClass("success"),this.find("tr[data-commit="+t+"]").addClass("success"),e.commit=t,this},showDiff:function(){return this.each(function(){var n=t(this),r=n.data("gitty");if(r.diff!=r.commit){n.find(".gitty-diff").html("");var o=e.http.locations.web_storage+encodeURI(r.commit);t.ajax({url:o,contentType:"application/json",type:"GET",data:{format:"diff"},success:function(t){n.gitty("fillDiff",t),r.diff=r.commit},error:function(t){i.ajaxError(t)}})}})},fillDiff:function(t){t.tags&&this.gitty("diffTags",t.tags),t.data&&this.gitty("udiffData",t.data)},diffTags:function(e){function n(e,n){o.append(t.el.span({class:"diff-tag "+n},e))}var i=this.find(".gitty-diff"),r=t(t.el.div({class:"diff-tags"},t.el.label("Tags"))),o=t(t.el.span({class:"diff-tags"}));if(r.append(o),e.deleted.length){o.append("Removed: ");for(var a=0;a<e.deleted.length;a++)n(e.deleted[a],"deleted")}if(e.added.length){o.append(e.deleted.length?", ":"","Added: ");for(var a=0;a<e.added.length;a++)n(e.added[a],"added")}return i.append(r),this},udiffData:function(e){for(var n=this.find(".gitty-diff"),i=e.split("\n"),r=t(t.el.pre({class:"udiff"})),o=0;o<i.length;o++){var a=i[o],s={"@":"udiff-hdr"," ":"udiff-ctx","+":"udiff-add","-":"udiff-del"};r.append(t.el.span({class:s[a.charAt(0)]},a),t.el.br())}n.append(r)}};t.fn.gitty=function(e){return o[e]?o[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.gitty"):o._init.apply(this,arguments)}}(jQuery),{diffMeta:r,reduceMeta:o,diffTags:a}});var __whitespace={" ":!0,"\t":!0,"\n":!0,"\f":!0,"\r":!0},difflib={defaultJunkFunction:function(t){return __whitespace.hasOwnProperty(t)},stripLinebreaks:function(t){return t.replace(/^[\n\r]*|[\n\r]*$/g,"")},stringAsLines:function(t){for(var e=t.indexOf("\n"),n=t.indexOf("\r"),i=e>-1&&n>-1||n<0?"\n":"\r",r=t.split(i),o=0;o<r.length;o++)r[o]=difflib.stripLinebreaks(r[o]);return r},__reduce:function(t,e,n){if(null!=n)var i=n,r=0;else{if(!e)return null;var i=e[0],r=1}for(;r<e.length;r++)i=t(i,e[r]);return i},__ntuplecomp:function(t,e){for(var n=Math.max(t.length,e.length),i=0;i<n;i++){if(t[i]<e[i])return-1;if(t[i]>e[i])return 1}return t.length==e.length?0:t.length<e.length?-1:1},__calculate_ratio:function(t,e){return e?2*t/e:1},__isindict:function(t){return function(e){return t.hasOwnProperty(e)}},__dictget:function(t,e,n){return t.hasOwnProperty(e)?t[e]:n},SequenceMatcher:function(t,e,n){this.set_seqs=function(t,e){this.set_seq1(t),this.set_seq2(e)},this.set_seq1=function(t){t!=this.a&&(this.a=t,this.matching_blocks=this.opcodes=null)},this.set_seq2=function(t){t!=this.b&&(this.b=t,this.matching_blocks=this.opcodes=this.fullbcount=null,this.__chain_b())},this.__chain_b=function(){for(var t=this.b,e=t.length,n=this.b2j={},i={},r=0;r<t.length;r++){var o=t[r];if(n.hasOwnProperty(o)){var a=n[o];e>=200&&100*a.length>e?(i[o]=1,delete n[o]):a.push(r)}else n[o]=[r]}for(var o in i)i.hasOwnProperty(o)&&delete n[o];var s=this.isjunk,l={};if(s){for(var o in i)i.hasOwnProperty(o)&&s(o)&&(l[o]=1,delete i[o]);for(var o in n)n.hasOwnProperty(o)&&s(o)&&(l[o]=1,delete n[o])}this.isbjunk=difflib.__isindict(l),this.isbpopular=difflib.__isindict(i)},this.find_longest_match=function(t,e,n,i){for(var r,o=this.a,a=this.b,s=this.b2j,l=this.isbjunk,c=t,u=n,h=0,d=null,f={},p=[],g=t;g<e;g++){var m={},v=difflib.__dictget(s,o[g],p);for(var y in v)if(v.hasOwnProperty(y)){if((d=v[y])<n)continue;if(d>=i)break;m[d]=r=difflib.__dictget(f,d-1,0)+1,r>h&&(c=g-r+1,u=d-r+1,h=r)}f=m}for(;c>t&&u>n&&!l(a[u-1])&&o[c-1]==a[u-1];)c--,u--,h++;for(;c+h<e&&u+h<i&&!l(a[u+h])&&o[c+h]==a[u+h];)h++;for(;c>t&&u>n&&l(a[u-1])&&o[c-1]==a[u-1];)c--,u--,h++;for(;c+h<e&&u+h<i&&l(a[u+h])&&o[c+h]==a[u+h];)h++;return[c,u,h]},this.get_matching_blocks=function(){if(null!=this.matching_blocks)return this.matching_blocks;for(var t,e,n,i,r,o,a,s,l,c=this.a.length,u=this.b.length,h=[[0,c,0,u]],d=[];h.length;)r=h.pop(),t=r[0],e=r[1],n=r[2],i=r[3],l=this.find_longest_match(t,e,n,i),o=l[0],a=l[1],(s=l[2])&&(d.push(l),t<o&&n<a&&h.push([t,o,n,a]),o+s<e&&a+s<i&&h.push([o+s,e,a+s,i]));d.sort(difflib.__ntuplecomp);var f,p,g,m=0,v=0,y=0,b=0,x=[];for(var w in d)d.hasOwnProperty(w)&&(b=d[w],f=b[0],p=b[1],g=b[2],m+y==f&&v+y==p?y+=g:(y&&x.push([m,v,y]),m=f,v=p,y=g));return y&&x.push([m,v,y]),x.push([c,u,0]),this.matching_blocks=x,this.matching_blocks},this.get_opcodes=function(){if(null!=this.opcodes)return this.opcodes;var t=0,e=0,n=[];this.opcodes=n;var i,r,o,a,s,l=this.get_matching_blocks();for(var c in l)l.hasOwnProperty(c)&&(i=l[c],r=i[0],o=i[1],a=i[2],s="",t<r&&e<o?s="replace":t<r?s="delete":e<o&&(s="insert"),s&&n.push([s,t,r,e,o]),t=r+a,e=o+a,a&&n.push(["equal",r,t,o,e]));return n},this.get_grouped_opcodes=function(t){t||(t=3);var e=this.get_opcodes();e||(e=[["equal",0,1,0,1]]);var n,i,r,o,a,s;"equal"==e[0][0]&&(n=e[0],i=n[0],r=n[1],o=n[2],a=n[3],s=n[4],e[0]=[i,Math.max(r,o-t),o,Math.max(a,s-t),s]),"equal"==e[e.length-1][0]&&(n=e[e.length-1],i=n[0],r=n[1],o=n[2],a=n[3],s=n[4],e[e.length-1]=[i,r,Math.min(o,r+t),a,Math.min(s,a+t)]);var l=t+t,c=[],u=[];for(var h in e)e.hasOwnProperty(h)&&(n=e[h],i=n[0],r=n[1],o=n[2],a=n[3],s=n[4],"equal"==i&&o-r>l&&(c.push([i,r,Math.min(o,r+t),a,Math.min(s,a+t)]),u.push(c),c=[],r=Math.max(r,o-t),a=Math.max(a,s-t)),c.push([i,r,o,a,s]));return!c||1==c.length&&"equal"==c[0][0]||u.push(c),u},this.ratio=function(){return matches=difflib.__reduce(function(t,e){return t+e[e.length-1]},this.get_matching_blocks(),0),difflib.__calculate_ratio(matches,this.a.length+this.b.length)},this.quick_ratio=function(){var t,e;if(null==this.fullbcount){this.fullbcount=t={};for(var n=0;n<this.b.length;n++)e=this.b[n],t[e]=difflib.__dictget(t,e,0)+1}t=this.fullbcount;for(var i={},r=difflib.__isindict(i),o=numb=0,n=0;n<this.a.length;n++)e=this.a[n],r(e)?numb=i[e]:numb=difflib.__dictget(t,e,0),i[e]=numb-1,numb>0&&o++;return difflib.__calculate_ratio(o,this.a.length+this.b.length)},this.real_quick_ratio=function(){var t=this.a.length,e=this.b.length;return _calculate_ratio(Math.min(t,e),t+e)},this.isjunk=n||difflib.defaultJunkFunction,this.a=this.b=null,this.set_seqs(t,e)}};define("difflib",function(){}),diffview={buildView:function(t){function e(t,e){var n=document.createElement(t);return n.className=e,n}function n(t,e){var n=document.createElement(t);return n.appendChild(document.createTextNode(e)),n}function i(t,e,n){var i=document.createElement(t);return i.className=e,i.appendChild(document.createTextNode(n)),i}function r(t,r,o,a,s){return r<o?(t.appendChild(n("th",(r+1).toString())),t.appendChild(i("td",s,a[r].replace(/\t/g,"    "))),r+1):(t.appendChild(document.createElement("th")),t.appendChild(e("td","empty")),r)}function o(t,e,r,o,a){t.appendChild(n("th",null==e?"":(e+1).toString())),t.appendChild(n("th",null==r?"":(r+1).toString())),t.appendChild(i("td",a,o[null!=e?e:r].replace(/\t/g,"    ")))}var a=t.baseTextLines,s=t.newTextLines,l=t.opcodes,c=t.baseTextName?t.baseTextName:"Base Text",u=t.newTextName?t.newTextName:"New Text",h=t.contextSize,d=0==t.viewType||1==t.viewType?t.viewType:0;if(null==a)throw"Cannot build diff view; baseTextLines is not defined.";if(null==s)throw"Cannot build diff view; newTextLines is not defined.";if(!l)throw"Canno build diff view; opcodes is not defined.";var f=document.createElement("thead"),p=document.createElement("tr");f.appendChild(p),d?(p.appendChild(document.createElement("th")),p.appendChild(document.createElement("th")),p.appendChild(i("th","texttitle",c+" vs. "+u))):(p.appendChild(document.createElement("th")),p.appendChild(i("th","texttitle",c)),p.appendChild(document.createElement("th")),p.appendChild(i("th","texttitle",u))),f=[f];for(var g,m=[],v=0;v<l.length;v++){code=l[v],change=code[0];for(var y=code[1],b=code[2],x=code[3],w=code[4],_=Math.max(b-y,w-x),S=[],C=[],T=0;T<_;T++){if(h&&l.length>1&&(v>0&&T==h||0==v&&0==T)&&"equal"==change){var k=_-(0==v?1:2)*h;if(k>1){if(S.push(p=document.createElement("tr")),y+=k,x+=k,T+=k-1,p.appendChild(n("th","...")),d||p.appendChild(i("td","skip","")),p.appendChild(n("th","...")),p.appendChild(i("td","skip","")),v+1==l.length)break;continue}}S.push(p=document.createElement("tr")),d?"insert"==change?o(p,null,x++,s,change):"replace"==change?(C.push(g=document.createElement("tr")),y<b&&o(p,y++,null,a,"delete"),x<w&&o(g,null,x++,s,"insert")):"delete"==change?o(p,y++,null,a,change):o(p,y++,x++,a,change):(y=r(p,y,b,a,change),x=r(p,x,w,s,change))}for(var T=0;T<S.length;T++)m.push(S[T]);for(var T=0;T<C.length;T++)m.push(C[T])}m.push(p=i("th","author","diff view generated by ")),p.setAttribute("colspan",d?3:4),p.appendChild(g=n("a","jsdifflib")),g.setAttribute("href","http://github.com/cemerick/jsdifflib"),f.push(p=document.createElement("tbody"));for(var v in m)m.hasOwnProperty(v)&&p.appendChild(m[v]);p=e("table","diff"+(d?" inlinediff":""));for(var v in f)f.hasOwnProperty(v)&&p.appendChild(f[v]);return p}},define("diffview",function(){}),define("diff",["jquery","difflib","diffview"],function(){!function(t){var e={_init:function(e){
-return this.each(function(){var n=difflib.stringAsLines(e.base),i=difflib.stringAsLines(e.head),r=new difflib.SequenceMatcher(n,i),o=r.get_opcodes(),a=void 0==e.contextSize?3:e.contextSize;this.appendChild(diffview.buildView({baseTextLines:n,newTextLines:i,opcodes:o,baseTextName:e.baseName||"Base text",newTextName:e.headName||"Current text",contextSize:a,viewType:t("inline").checked?1:0}))})}};t.fn.diff=function(n){return e[n]?e[n].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof n&&n?void t.error("Method "+n+" does not exist on jQuery.diff"):e._init.apply(this,arguments)}}(jQuery)}),define("storage",["jquery","config","modal","form","gitty","history","tabbed","utils","laconic","diff"],function(t,e,n,i,r,o,a,s){function l(t){return t?t.split(".").slice(0,-1).join("."):null}function c(e){if(e){for(var n=e.split("\n"),i=t(t.el.pre({class:"udiff"})),r=0;r<n.length;r++){var o=n[r],a={"@":"udiff-hdr"," ":"udiff-ctx","+":"udiff-add","-":"udiff-del"};i.append(t.el.span({class:a[o.charAt(0)]},o),t.el.br())}return i}return t(t.el.div({class:"udiff"},"No changes"))}function u(e){function n(e,n){r.append(t.el.span({class:n},e),t.el.br())}for(var i=e.split("\n"),r=t(t.el.pre({class:"udiff"})),o=null,a=0;a<i.length;a++){var s=i[a];"<<<<<<<"==s?(n(s,"edit-conflict-sep"),o="edit-conflict-me"):"edit-conflict-me"==o&&"======="==s?(n(s,"edit-conflict-sep"),o="edit-conflict-them"):"edit-conflict-them"==o&&">>>>>>>"==s?(n(s,"edit-conflict-sep"),o=null):o&&n(s,o)}return r}!function(t){function h(e,n){var i=t.el.table({class:"table table-striped"});t(i).append(t.el.tr(t.el.th("Path"),t.el.td(n.path))),t(i).append(t.el.tr(t.el.th("Modified"),t.el.td(new Date(1e3*n.last_modified).toLocaleString()))),t(i).append(t.el.tr(t.el.th("Loaded"),t.el.td(n.modified_since_loaded?"yes (modified)":n.loaded?"yes":"no"))),e.append(i)}function d(t,e){return"file_exists"==e.error?t+": file exists: "+e.file:JSON.stringify(e)}var f={typeName:"program",is_clean:!0,markClean:function(t){}},p={_init:function(e){return this.each(function(){function n(e,n){var i=t(e.target);if(i.hasClass("storage")&&i.is(":visible")){if("propagate"==i.storage.apply(i,Array.prototype.slice.call(arguments,1)))return}e.stopPropagation()}var i=t(this),r=t.extend({},f,e);i.data("storage",r),i.addClass("storage unloadable"),i.storage("update_tab_title"),i.on("save",function(t,e){n(t,"save",e)}),i.on("download",function(t){n(t,"download")}),i.on("fileInfo",function(t){n(t,"info")}),i.on("diff",function(t){n(t,"diff")}),i.on("revert",function(t){n(t,"revert")}),i.on("reload",function(t){n(t,"reload")}),i.on("chat-about-file",function(t){n(t,"chat")}),i.on("follow-file",function(t){n(t,"follow")}),i.on("activate-tab",function(t){}),i.on("data-is-clean",function(t,e){i.storage("markClean",e)}),i.on("fullscreen",function(t,e){e||i.storage("update_tab_title")}),i.on("unload",function(t,e){e.rc=i.storage("unload","beforeunload",t)}),i.storage("chat",(r.meta||{}).chat||"update")})},supportsType:function(t){var e=this.data("storage"),n=a.tabTypes[e.typeName];if("string"==typeof t&&(t={data:t}),t.meta&&t.meta.name||t.url){var i=t.meta&&t.meta.name?t.meta.name:t.url;if(a.type(i).typeName!=n.typeName)return!1}return!0},setSource:function(n){var i=this.data("storage");if("string"==typeof n&&(n={data:n}),this.storage("supportsType",n))return 0!=this.storage("unload","setSource")&&(n.meta?(i.file=n.meta.name,i.meta=n.meta,i.url=null,"HEAD"==n.meta.symbolic&&(n.url=e.http.locations.web_storage+n.meta.name)):(i.file=null,i.meta=null),i.url=n.url,i.st_type=n.st_type,i.chats=n.chats,i.setValue(n),i.cleanGeneration=i.changeGen(),i.cleanData=i.getValue(),i.cleanCheckpoint=n.cleanCheckpoint||"load",i.markClean(!0),this.storage("update_tab_title"),n.url||(n.url=e.http.locations.swish),n.noHistory||o.push({url:n.url,reason:"load"}),this.storage("chat",n.chat||(n.meta||{}).chat||"update"),t(".storage").storage("chat_status",!0),this)},is_clean:function(){var t=this.data("storage");return t.isClean(t.cleanGeneration)},setValue:function(t){var e=this.data("storage");return e.setValue(t),this.trigger("data-is-clean",e.isClean(e.cleanGeneration)),this},update_tab_title:function(e){return this.each(function(){var n=t(this),i=n.storage("docid");if("chats++"==e)n.tabbed("chats++",i);else{var r,o,c=n.data("storage"),u=c.file||c.url;u&&(r=a.type(u))||(r=a.tabTypes[c.typeName]),u?(o=l(s.basename(u)),c.meta&&"HEAD"!=c.meta.symbolic&&c.meta.commit&&(o+="@"+c.meta.commit.substring(0,7))):o=r.label,i&&c.chats&&(c.chats.docid=i),n.tabbed("title",o,r.dataType),n.tabbed("chats",c.chats)}})},load:function(i){if(i){var r=this;this.data("storage");t.ajax({url:e.http.locations.web_storage+i,dataType:"text",success:function(t){r.storage("setSource",{data:t,meta:{name:i}})},error:function(t){n.ajaxError(jqXHR)}})}return this},revert:function(){var t=this.data("storage");return t.setValue(t.cleanData),t.cleanGeneration=t.changeGen(),t.markClean(!0),this},reload:function(i){var r=this,o=r.data("storage");i=i||o.file;var a=e.http.locations.web_storage+encodeURI(i);return t.ajax({url:a,type:"GET",data:{format:"json"},success:function(e){e.url=a,e.st_type="gitty",e.noHistory=!0,r.storage("setSource",e),t("#chat").trigger("send",{type:"reloaded",file:i,commit:e.meta.commit})},error:function(t){n.ajaxError(t)}}),this},save:function(i,s){var l,c=this.data("storage"),u=a.tabTypes[c.typeName],h=e.http.locations.web_storage,f="POST",p=this;if(("filesys"==c.st_type||"external"==c.st_type)&&c.url)return this.storage("saveURL");if("as"==i)return this.storage("saveAs"),this;if(!c.file||"only-meta-data"!=s&&(i&&i.default||i&&i.name!=c.file)||(h+=encodeURI(c.file),f="PUT"),"only-meta-data"==s){if(t.isEmptyObject(r.reduceMeta(i,c.meta)))return void alert("No change");l={update:"meta-data"}}else if("POST"==f)l={data:c.getValue(),type:u.dataType};else if(c.isClean(c.cleanGeneration)){if(null==r.diffTags(c.meta.tags,i.tags))return void alert("No change")}else l={data:c.getValue(),type:u.dataType};return i&&(l.meta=i),c.meta&&(l.previous=c.meta.commit),t.ajax({url:h,dataType:"json",contentType:"application/json",type:f,data:JSON.stringify(l),success:function(e){e.error?n.alert(d("Could not save",e)):(c.meta&&c.meta.example!=e.meta.example&&p.closest(".swish").trigger("examples-changed"),c.file=e.file,c.meta=e.meta,c.st_type="gitty",c.cleanGeneration=c.changeGen(),c.cleanData=c.getValue(),c.cleanCheckpoint="save",c.markClean(!0),n.feedback({html:"Saved",owner:p}),"POST"==f&&(c.chats={docid:p.storage("docid"),total:0}),p.storage("update_tab_title"),p.storage("chat",(c.meta||{}).chat||"update"),p.storage("load_messages",e.messages||[]),t(".storage").storage("chat_status",!0),o.push({url:e.url,reason:"save"}))},error:function(t,e,i){409==t.status?p.storage("resolveEditConflict",JSON.parse(t.responseText)):403==t.status?n.alert("Permission denied.  Please try a different name"):(alert('Save failed; click "ok" to try again'),p.storage("saveAs"))}}),this},saveAs:function(e){function n(){this.append(t.el.form({class:"form-horizontal"},i.fields.hidden("identity",d.identity),i.fields.hidden("default",s.default),i.fields.hidden("chat",s.chat),d.identity?void 0:i.fields.hidden("avatar",d.avatar),i.fields.fileName(u?null:o.file,s.public,s.example),i.fields.title(s.title),i.fields.author(f,d.identity),c?i.fields.commit_message():void 0,i.fields.tags(s.tags),i.fields.modify(p,r),i.fields.follow(d.email),i.fields.buttons({label:u?"Fork "+h.label:c?"Update "+h.label:"Save "+h.label,action:function(t,e){return l.storage("save",e),!1}})))}var r,o=this.data("storage"),s=o.meta||{},l=this,c=Boolean(o.file),u=o.meta&&"HEAD"!=s.symbolic&&!s.default,h=a.tabTypes[o.typeName],d=t("#login").login("get_profile",["display_name","avatar","email","identity"]),f=d.display_name,p=s.modify;return void 0===s.public&&(s.public=!0),d.identity?p||(p=["login","owner"]):p=["any","login","owner"],r=!!d.identity&&(d.identity==s.identity||!(s.identity||s.user)),e=e||{},i.showDialog({title:e.title?e.title:u?"Fork from "+s.commit.substring(0,7):c?"Save new version":"Save "+h.label+" as",body:n}),this},saveURL:function(){var e=this.data("storage"),i=e.getValue(),r=a.type(e.url)||{},o=this;return e.isClean(e.cleanGeneration)?(alert("No change"),this):(t.ajax({url:e.url,dataType:"json",contentType:r.contentType||"text/plain",type:"PUT",data:i,success:function(t){t.error?n.alert(d("Could not save",t)):(e.cleanGeneration=e.changeGen(),e.cleanData=e.getValue(),e.cleanCheckpoint="save",e.markClean(!0),n.feedback({html:"Saved",owner:o}))},error:function(t){if(403==t.status){var i=e.url;delete e.meta,delete e.st_type,delete e.url,o.storage("saveAs",{title:"<div class='warning'>Could not save to "+i+"</div> Save a copy as"})}else n.ajaxError(t)}}),this)},activate:function(){var t=this.data("storage");return t&&t.url&&o.push({url:t.url,reason:"activate"}),this},getState:function(e){var n={tabs:[]};return this.each(function(){var i,r=t(this),o=r.data("storage"),a=r.meta||{};if((o.file||o.url)&&o.isClean&&o.cleanGeneration){!a.name&&o.file&&(a.name=o.file);var s={file:a.name,st_type:o.st_type,url:o.url};r.storage("getActive")&&(s.active=!0),(i=r.storage("chatroom_size"))&&(s.chatroom=i),n.tabs.push(s),!e&&o.isClean(o.cleanGeneration)||(s.meta=a,s.data=o.getValue())}}),n},restoreLocal:function(t){var e,n=localStorage.getItem("$file$"+t);try{e=JSON.parse(n),"object"!=typeof e&&(e=void 0)}catch(t){e=void 0}e?this.storage("setSource",e):this.storage("reload",t)},resolveEditConflict:function(e){function n(){function n(e,n,i,r){var o={role:"presentation"},a=[];return n&&a.push("active"),r&&a.push("disabled"),a!=[]&&(o.class=a.join(" ")),t.el.li(o,t.el.a({href:"#"+i,"data-toggle":"tab"},e))}function i(e,n){tabs.append(t.el.div({class:"tab-pane fade "+e+" "+n,id:e})),o.find('[href="#'+e+'"]').on("show.bs.tab",function(t){o.storage(e)})}var o=t(this);o.addClass("edit-conflict"),tabs=t(t.el.div({class:"tab-content"})),o.append(t.el.ul({class:"nav nav-tabs"},n("My edits",!0,"merge-my-edits"),n("Their edits",!1,"merge-server-edits"),n("Conflicts",!1,"merge-conflicts"))),o.append(tabs),i("merge-my-edits","in active"),i("merge-server-edits",""),i("merge-conflicts",""),o.data("edit-conflict",e),o.storage("merge-my-edits"),o.append(r=t.el.div({class:"form-group"},t.el.button({name:"merge",class:"btn btn-primary"},"Merge"),t.el.button({name:"discard-my-edits",class:"btn btn-primary"},"Discard my changes"),t.el.button({name:"discard-server-edits",class:"btn btn-primary"},"Discard changes on server"),t.el.button({name:"cancel",class:"btn btn-danger","data-dismiss":"modal"},"Cancel"))),t(r).on("click","button",function(e){return o.storage("editConflictAction",t(e.target).attr("name")),t(e.target).parents(".modal").modal("hide"),e.preventDefault(),!1})}var r;return e.storage=this,i.showDialog({title:"Edit conflict",body:n}),this},"merge-my-edits":function(){var e=t(this).data("edit-conflict");t(this).find(".merge-my-edits").empty().append(c(e.edit.me.data))},"merge-server-edits":function(){var e=t(this).data("edit-conflict");t(this).find(".merge-server-edits").empty().append(c(e.edit.server.data))},"merge-conflicts":function(){var e=t(this).data("edit-conflict"),n=t(this).find(".merge-conflicts");n.empty(),0!=e.patch_status?n.append(u(e.merged)):n.html("No merge conflicts")},editConflictAction:function(e){var n=t(this).data("edit-conflict"),i=t(n.storage).data("storage");if("merge"==e)i.setValue(n.merged),i.meta.commit=n.edit.server.to.commit;else if("discard-my-edits"==e)t(n.storage).storage("reload");else if("discard-server-edits"==e){var i=t(n.storage).data("storage");i.meta.commit=n.edit.server.to.commit}},download:function(){var e=this.data("storage"),n=a.tabTypes[e.typeName],i=e.getValue(),r="data:text/plain;charset=UTF-8,"+encodeURIComponent(i),o=t.el.a({href:r,download:e.file||"swish."+n.dataType});return this.append(o),o.click(),t(o).remove(),this},getData:function(e){var n=[];return e=e||{},this.each(function(){function i(t){r.meta[t]&&(o[t]=r.meta[t])}var r=t(this).data("storage"),o={};if(o.type=r.st_type,r.url&&(o.url=r.url),r.meta&&(i("name"),i("path"),i("modified"),i("loaded"),i("modified_since_loaded"),i("module")),t(this).storage("getActive")&&(o.active=!0),!e.type||e.name&&e.name.split(".").pop()==e.type){if(e.data){var a=r.getValue();o.modified=a!=r.cleanData,(1==e.data||o.modified&&"if_modified"==e.data)&&(o.data=a)}n.push(o)}}),n},match:function(e){for(var n=0;n<this.length;n++){me=t(this[n]);var i=me.data("storage");if(e.file&&e.file==i.file)return me;if(e.url&&e.url==i.url)return me}},expose:function(t){var e=this.closest(".tab-pane");if(1==e.length){return e.closest(".tabbed").tabbed("show",e.attr("id")),t&&n.feedback({html:t,owner:this}),this}},info:function(){function e(){"gitty"==r.st_type?(r.editor=a,this.gitty(r)):"filesys"==r.st_type?h(this,o):r.st_type||this.append(t.el.p("The source is not associated with a file. ","Use ",t.el.b("Save ...")," to save the source with meta information."))}var n,r=this.data("storage"),o=r.meta||{},a=this;return n="gitty"==r.st_type?t().gitty("title",o):"filesys"==r.st_type?"File system -- "+s.basename(o.path):"external"==r.st_type?"External -- "+r.url:"Scratch source",i.showDialog({title:n,body:e}),this},diff:function(){function e(){var e=t.el.div(),i=n.getValue();if(this.append(e),i==n.cleanData)t(e).append(t.el.p("No changes"));else{var o,a=t.el.div({class:"btn-group diff",role:"group"},t.el.button({name:"close","data-dismiss":"modal",class:"btn btn-primary"},"Close"),o=t.el.button({name:"revert",class:"btn btn-danger","data-dismiss":"modal"},"Revert changes"));t(e).diff({base:n.cleanData,head:i,baseName:r[n.cleanCheckpoint]}),this.append(t.el.div({class:"wrapper text-center"},a)),t(o).on("click",function(e){t(".swish-event-receiver").trigger("revert")}),this.parents("div.modal-dialog").addClass("modal-wide")}}var n=this.data("storage"),r={load:"Loaded text",new:"New text",save:"Saved text"};return i.showDialog({title:"Changes since "+r[n.cleanCheckpoint],body:e}),this},getSelection:function(){if(this.hasClass("prolog-editor")){var t=this.prologEditor("getSelection");return t?t[0].selections:null}if(this.hasClass("notebook"))return this.notebook("getSelection");console.log("Don't know how to get selection from",this)},getSelectionLabel:function(t){function e(t){for(var e="",n=0;n<t.length;n++){var i=t[n];""!=e&&(e+=";"),e+="@L"+(i.from.line+1),i.to.line!=i.from.line&&(e+="-"+(i.to.line+1))}return e}if(t[0].selections){for(var n="",i=0;i<t.length;i++){var r=t[i];""!=n&&(n+=","),n+=(r.cell||"")+e(r.selections)}return n}return e(t)},restoreSelection:function(t){return this.hasClass("prolog-editor")?this.prologEditor("restoreSelection",t):this.hasClass("notebook")?this.notebook("restoreSelection",t):void console.log(t)},getActive:function(){return 1==t(this).closest(".tab-pane.active").length},docid:function(t,e){if(e=e||this.data("storage"),!t||t==e.st_type){var n=e.meta||{};if("gitty"==e.st_type)return"gitty:"+n.name;if("filesys"==e.st_type)return"filesys:"+n.path;if("external"==e.st_type)return"url:"+e.url}},chat:function(e){var i=this.data("storage"),r=this.storage("docid","gitty");if(r){var o=this.closest(".tab-pane").find(".chatroom");if(o.length>0)"update"==e?o.chatroom("docid",r,"close"):s.flash(o);else if("update"!=e){o=t(t.el.div({class:"chatroom"}));var a;a="number"==typeof e?e:"large"==e?80:20,o.chatroom({docid:r}),this.tile("split",o,"below",a,150).addClass("chat-container")}}else"update"==e?this.storage("close_chat"):i.st_type?n.alert("The chat facility is only available for user-saved files.<br>You can use the <b>Open hangout</b> menu from the top-right bell to access the hangout room."):n.alert("You can only chat about a saved document.<br>Please save your document and try again.");return this},close_chat:function(){this.closest(".chat-container").find(".chatroom").chatroom("close")},chatroom_size:function(){var t=this.closest(".tab-pane"),e=t.find(".chatroom").closest(".pane-wrapper");if(e.length>0){var n=t.height();return 0==n?20:Math.round(100*e.height()/n)}return!1},chat_message:function(e){return e.displayed||0!=e.create?this.each(function(){var n=t(this);if(e.docid==n.storage("docid")){var i=n.data("storage");i.chats?(void 0!=i.chats.total&&i.chats.total++,void 0!=i.chats.count&&i.chats.count++):i.chats={total:1},n.storage("update_tab_title","chats++")}}):this},load_messages:function(e){for(var i,r=0,o=0,a="",s=0;s<e.length;s++){var l=e[s];if("warning"==l.kind)r++;else{if("error"!=l.kind){if(l.code==i){i=l.data[0];continue}continue}o++}l.html?a+=l.html:a+=t(t.el.div(t.el.pre({class:"msg-"+l.kind},l.data[0]))).html(),this.prologEditor("highlightError",l)}if(o||r){var c;c=t(t.el.div(t.el.p("The following messages where generated while compiling the file.  These messages are inserted in the editor."))).html(),n.alert(c+a)}else i&&n.feedback({html:i,owner:this});return this},follow:function(){var t=this.storage("docid","gitty");t?n.server_form({title:"Follow file options",url:e.http.locations.follow_file_options,data:{docid:t}}):n.alert("Sorry, can only follow files")},unload:function(t,e){var n=this.data("storage");if(n&&(n.meta&&o.addRecent({st_type:"gitty",id:n.meta.name}),n.cleanData&&n.getValue&&n.cleanData!=n.getValue())){if("beforeunload"==t){var i="The source editor has unsaved changes.\nThese will be lost if you leave the page";return e=e||window.event,e&&(e.returnValue=i),i}var i="The source editor has unsaved changes.\nThese will be lost"+("setSource"==t?" if you load a new program":"closetab"==t?" close this tab":"");return confirm(i)}},close:function(){},markClean:function(t){this.data("storage").is_clean=t},chat_status:function(e){var n=[];this.each(function(){var e=t(this).data("storage");if("gitty"==e.st_type&&e.meta&&e.meta.name){var i={file:e.meta.name};e.is_clean||(i.modified=!0),t(this).is(":visible")&&(i.visible=!0),n.push(i)}}),(e||n.length>0)&&t("#chat").trigger("send",{type:"has-open-files",files:n})}};t.fn.storage=function(e){return p[e]?p[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.storage"):p._init.apply(this,arguments)}}(jQuery)}),define("cm/mode/prolog/prolog-ctype",[],function(){function t(t){var i=t.charCodeAt(0),r=Math.floor(i/256);if(r<e){var o=n[r];return"number"==typeof o?o:o.charCodeAt(255&i)}return 0}
+var e,n=Ht.get(this),i=n[t+"queue"],r=n[t+"queueHooks"],o=wt.timers,a=i?i.length:0;for(n.finish=!0,wt.queue(this,t,[]),r&&r.stop&&r.stop.call(this,!0),e=o.length;e--;)o[e].elem===this&&o[e].queue===t&&(o[e].anim.stop(!0),o.splice(e,1));for(e=0;e<a;e++)i[e]&&i[e].finish&&i[e].finish.call(this);delete n.finish})}}),wt.each(["toggle","show","hide"],function(t,e){var n=wt.fn[e];wt.fn[e]=function(t,i,r){return null==t||"boolean"==typeof t?n.apply(this,arguments):this.animate($(e,!0),t,i,r)}}),wt.each({slideDown:$("show"),slideUp:$("hide"),slideToggle:$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,e){wt.fn[t]=function(t,n,i){return this.animate(e,t,n,i)}}),wt.timers=[],wt.fx.tick=function(){var t,e=0,n=wt.timers;for(ve=Date.now();e<n.length;e++)(t=n[e])()||n[e]!==t||n.splice(e--,1);n.length||wt.fx.stop(),ve=void 0},wt.fx.timer=function(t){wt.timers.push(t),wt.fx.start()},wt.fx.interval=13,wt.fx.start=function(){ye||(ye=!0,B())},wt.fx.stop=function(){ye=null},wt.fx.speeds={slow:600,fast:200,_default:400},wt.fn.delay=function(e,n){return e=wt.fx?wt.fx.speeds[e]||e:e,n=n||"fx",this.queue(n,function(n,i){var r=t.setTimeout(n,e);i.stop=function(){t.clearTimeout(r)}})},function(){var t=at.createElement("input"),e=at.createElement("select").appendChild(at.createElement("option"));t.type="checkbox",vt.checkOn=""!==t.value,vt.optSelected=e.selected,(t=at.createElement("input")).value="t",t.type="radio",vt.radioValue="t"===t.value}();var we,_e=wt.expr.attrHandle;wt.fn.extend({attr:function(t,e){return Rt(this,wt.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each(function(){wt.removeAttr(this,t)})}}),wt.extend({attr:function(t,e,n){var i,r,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===t.getAttribute?wt.prop(t,e,n):(1===o&&wt.isXMLDoc(t)||(r=wt.attrHooks[e.toLowerCase()]||(wt.expr.match.bool.test(e)?we:void 0)),void 0!==n?null===n?void wt.removeAttr(t,e):r&&"set"in r&&void 0!==(i=r.set(t,n,e))?i:(t.setAttribute(e,n+""),n):r&&"get"in r&&null!==(i=r.get(t,e))?i:null==(i=wt.find.attr(t,e))?void 0:i)},attrHooks:{type:{set:function(t,e){if(!vt.radioValue&&"radio"===e&&o(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,i=0,r=e&&e.match(Dt);if(r&&1===t.nodeType)for(;n=r[i++];)t.removeAttribute(n)}}),we={set:function(t,e,n){return!1===e?wt.removeAttr(t,n):t.setAttribute(n,n),n}},wt.each(wt.expr.match.bool.source.match(/\w+/g),function(t,e){var n=_e[e]||wt.find.attr;_e[e]=function(t,e,i){var r,o,a=e.toLowerCase();return i||(o=_e[a],_e[a]=r,r=null!=n(t,e,i)?a:null,_e[a]=o),r}});var Se=/^(?:input|select|textarea|button)$/i,Ce=/^(?:a|area)$/i;wt.fn.extend({prop:function(t,e){return Rt(this,wt.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[wt.propFix[t]||t]})}}),wt.extend({prop:function(t,e,n){var i,r,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&wt.isXMLDoc(t)||(e=wt.propFix[e]||e,r=wt.propHooks[e]),void 0!==n?r&&"set"in r&&void 0!==(i=r.set(t,n,e))?i:t[e]=n:r&&"get"in r&&null!==(i=r.get(t,e))?i:t[e]},propHooks:{tabIndex:{get:function(t){var e=wt.find.attr(t,"tabindex");return e?parseInt(e,10):Se.test(t.nodeName)||Ce.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),vt.optSelected||(wt.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),wt.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){wt.propFix[this.toLowerCase()]=this}),wt.fn.extend({addClass:function(t){var e,n,i,r,o,a,s,l=0;if(yt(t))return this.each(function(e){wt(this).addClass(t.call(this,e,Z(this)))});if((e=K(t)).length)for(;n=this[l++];)if(r=Z(n),i=1===n.nodeType&&" "+Q(r)+" "){for(a=0;o=e[a++];)i.indexOf(" "+o+" ")<0&&(i+=o+" ");r!==(s=Q(i))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,i,r,o,a,s,l=0;if(yt(t))return this.each(function(e){wt(this).removeClass(t.call(this,e,Z(this)))});if(!arguments.length)return this.attr("class","");if((e=K(t)).length)for(;n=this[l++];)if(r=Z(n),i=1===n.nodeType&&" "+Q(r)+" "){for(a=0;o=e[a++];)for(;i.indexOf(" "+o+" ")>-1;)i=i.replace(" "+o+" "," ");r!==(s=Q(i))&&n.setAttribute("class",s)}return this},toggleClass:function(t,e){var n=typeof t,i="string"===n||Array.isArray(t);return"boolean"==typeof e&&i?e?this.addClass(t):this.removeClass(t):yt(t)?this.each(function(n){wt(this).toggleClass(t.call(this,n,Z(this),e),e)}):this.each(function(){var e,r,o,a;if(i)for(r=0,o=wt(this),a=K(t);e=a[r++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else void 0!==t&&"boolean"!==n||((e=Z(this))&&Ht.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===t?"":Ht.get(this,"__className__")||""))})},hasClass:function(t){var e,n,i=0;for(e=" "+t+" ";n=this[i++];)if(1===n.nodeType&&(" "+Q(Z(n))+" ").indexOf(e)>-1)return!0;return!1}});var Te=/\r/g;wt.fn.extend({val:function(t){var e,n,i,r=this[0];return arguments.length?(i=yt(t),this.each(function(n){var r;1===this.nodeType&&(null==(r=i?t.call(this,n,wt(this).val()):t)?r="":"number"==typeof r?r+="":Array.isArray(r)&&(r=wt.map(r,function(t){return null==t?"":t+""})),(e=wt.valHooks[this.type]||wt.valHooks[this.nodeName.toLowerCase()])&&"set"in e&&void 0!==e.set(this,r,"value")||(this.value=r))})):r?(e=wt.valHooks[r.type]||wt.valHooks[r.nodeName.toLowerCase()])&&"get"in e&&void 0!==(n=e.get(r,"value"))?n:"string"==typeof(n=r.value)?n.replace(Te,""):null==n?"":n:void 0}}),wt.extend({valHooks:{option:{get:function(t){var e=wt.find.attr(t,"value");return null!=e?e:Q(wt.text(t))}},select:{get:function(t){var e,n,i,r=t.options,a=t.selectedIndex,s="select-one"===t.type,l=s?null:[],c=s?a+1:r.length;for(i=a<0?c:s?a:0;i<c;i++)if(((n=r[i]).selected||i===a)&&!n.disabled&&(!n.parentNode.disabled||!o(n.parentNode,"optgroup"))){if(e=wt(n).val(),s)return e;l.push(e)}return l},set:function(t,e){for(var n,i,r=t.options,o=wt.makeArray(e),a=r.length;a--;)((i=r[a]).selected=wt.inArray(wt.valHooks.option.get(i),o)>-1)&&(n=!0);return n||(t.selectedIndex=-1),o}}}}),wt.each(["radio","checkbox"],function(){wt.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=wt.inArray(wt(t).val(),e)>-1}},vt.checkOn||(wt.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})}),vt.focusin="onfocusin"in t;var ke=/^(?:focusinfocus|focusoutblur)$/,Ae=function(t){t.stopPropagation()};wt.extend(wt.event,{trigger:function(e,n,i,r){var o,a,s,l,c,u,h,d,f=[i||at],p=pt.call(e,"type")?e.type:e,g=pt.call(e,"namespace")?e.namespace.split("."):[];if(a=d=s=i=i||at,3!==i.nodeType&&8!==i.nodeType&&!ke.test(p+wt.event.triggered)&&(p.indexOf(".")>-1&&(p=(g=p.split(".")).shift(),g.sort()),c=p.indexOf(":")<0&&"on"+p,e=e[wt.expando]?e:new wt.Event(p,"object"==typeof e&&e),e.isTrigger=r?2:3,e.namespace=g.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),n=null==n?[e]:wt.makeArray(n,[e]),h=wt.event.special[p]||{},r||!h.trigger||!1!==h.trigger.apply(i,n))){if(!r&&!h.noBubble&&!bt(i)){for(l=h.delegateType||p,ke.test(l+p)||(a=a.parentNode);a;a=a.parentNode)f.push(a),s=a;s===(i.ownerDocument||at)&&f.push(s.defaultView||s.parentWindow||t)}for(o=0;(a=f[o++])&&!e.isPropagationStopped();)d=a,e.type=o>1?l:h.bindType||p,(u=(Ht.get(a,"events")||{})[e.type]&&Ht.get(a,"handle"))&&u.apply(a,n),(u=c&&a[c])&&u.apply&&jt(a)&&(e.result=u.apply(a,n),!1===e.result&&e.preventDefault());return e.type=p,r||e.isDefaultPrevented()||h._default&&!1!==h._default.apply(f.pop(),n)||!jt(i)||c&&yt(i[p])&&!bt(i)&&((s=i[c])&&(i[c]=null),wt.event.triggered=p,e.isPropagationStopped()&&d.addEventListener(p,Ae),i[p](),e.isPropagationStopped()&&d.removeEventListener(p,Ae),wt.event.triggered=void 0,s&&(i[c]=s)),e.result}},simulate:function(t,e,n){var i=wt.extend(new wt.Event,n,{type:t,isSimulated:!0});wt.event.trigger(i,null,e)}}),wt.fn.extend({trigger:function(t,e){return this.each(function(){wt.event.trigger(t,e,this)})},triggerHandler:function(t,e){var n=this[0];if(n)return wt.event.trigger(t,e,n,!0)}}),vt.focusin||wt.each({focus:"focusin",blur:"focusout"},function(t,e){var n=function(t){wt.event.simulate(e,t.target,wt.event.fix(t))};wt.event.special[e]={setup:function(){var i=this.ownerDocument||this,r=Ht.access(i,e);r||i.addEventListener(t,n,!0),Ht.access(i,e,(r||0)+1)},teardown:function(){var i=this.ownerDocument||this,r=Ht.access(i,e)-1;r?Ht.access(i,e,r):(i.removeEventListener(t,n,!0),Ht.remove(i,e))}}});var Me=t.location,Ee=Date.now(),Le=/\?/;wt.parseXML=function(e){var n;if(!e||"string"!=typeof e)return null;try{n=(new t.DOMParser).parseFromString(e,"text/xml")}catch(t){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||wt.error("Invalid XML: "+e),n};var Pe=/\[\]$/,De=/\r?\n/g,Ne=/^(?:submit|button|image|reset|file)$/i,Oe=/^(?:input|select|textarea|keygen)/i;wt.param=function(t,e){var n,i=[],r=function(t,e){var n=yt(e)?e():e;i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(t)||t.jquery&&!wt.isPlainObject(t))wt.each(t,function(){r(this.name,this.value)});else for(n in t)J(n,t[n],e,r);return i.join("&")},wt.fn.extend({serialize:function(){return wt.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=wt.prop(this,"elements");return t?wt.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!wt(this).is(":disabled")&&Oe.test(this.nodeName)&&!Ne.test(t)&&(this.checked||!Yt.test(t))}).map(function(t,e){var n=wt(this).val();return null==n?null:Array.isArray(n)?wt.map(n,function(t){return{name:e.name,value:t.replace(De,"\r\n")}}):{name:e.name,value:n.replace(De,"\r\n")}}).get()}});var Re=/%20/g,Ie=/#.*$/,Fe=/([?&])_=[^&]*/,je=/^(.*?):[ \t]*([^\r\n]*)$/gm,He=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ze=/^(?:GET|HEAD)$/,Ve=/^\/\//,qe={},Be={},Ge="*/".concat("*"),$e=at.createElement("a");$e.href=Me.href,wt.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Me.href,type:"GET",isLocal:He.test(Me.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ge,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":wt.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?nt(nt(t,wt.ajaxSettings),e):nt(wt.ajaxSettings,t)},ajaxPrefilter:tt(qe),ajaxTransport:tt(Be),ajax:function(e,n){function i(e,n,i,s){var c,d,f,x,w,_=n;u||(u=!0,l&&t.clearTimeout(l),r=void 0,a=s||"",S.readyState=e>0?4:0,c=e>=200&&e<300||304===e,i&&(x=it(p,S,i)),x=rt(p,x,S,c),c?(p.ifModified&&((w=S.getResponseHeader("Last-Modified"))&&(wt.lastModified[o]=w),(w=S.getResponseHeader("etag"))&&(wt.etag[o]=w)),204===e||"HEAD"===p.type?_="nocontent":304===e?_="notmodified":(_=x.state,d=x.data,c=!(f=x.error))):(f=_,!e&&_||(_="error",e<0&&(e=0))),S.status=e,S.statusText=(n||_)+"",c?v.resolveWith(g,[d,_,S]):v.rejectWith(g,[S,_,f]),S.statusCode(b),b=void 0,h&&m.trigger(c?"ajaxSuccess":"ajaxError",[S,p,c?d:f]),y.fireWith(g,[S,_]),h&&(m.trigger("ajaxComplete",[S,p]),--wt.active||wt.event.trigger("ajaxStop")))}"object"==typeof e&&(n=e,e=void 0),n=n||{};var r,o,a,s,l,c,u,h,d,f,p=wt.ajaxSetup({},n),g=p.context||p,m=p.context&&(g.nodeType||g.jquery)?wt(g):wt.event,v=wt.Deferred(),y=wt.Callbacks("once memory"),b=p.statusCode||{},x={},w={},_="canceled",S={readyState:0,getResponseHeader:function(t){var e;if(u){if(!s)for(s={};e=je.exec(a);)s[e[1].toLowerCase()]=e[2];e=s[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return u?a:null},setRequestHeader:function(t,e){return null==u&&(t=w[t.toLowerCase()]=w[t.toLowerCase()]||t,x[t]=e),this},overrideMimeType:function(t){return null==u&&(p.mimeType=t),this},statusCode:function(t){var e;if(t)if(u)S.always(t[S.status]);else for(e in t)b[e]=[b[e],t[e]];return this},abort:function(t){var e=t||_;return r&&r.abort(e),i(0,e),this}};if(v.promise(S),p.url=((e||p.url||Me.href)+"").replace(Ve,Me.protocol+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=(p.dataType||"*").toLowerCase().match(Dt)||[""],null==p.crossDomain){c=at.createElement("a");try{c.href=p.url,c.href=c.href,p.crossDomain=$e.protocol+"//"+$e.host!=c.protocol+"//"+c.host}catch(t){p.crossDomain=!0}}if(p.data&&p.processData&&"string"!=typeof p.data&&(p.data=wt.param(p.data,p.traditional)),et(qe,p,n,S),u)return S;(h=wt.event&&p.global)&&0==wt.active++&&wt.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!ze.test(p.type),o=p.url.replace(Ie,""),p.hasContent?p.data&&p.processData&&0===(p.contentType||"").indexOf("application/x-www-form-urlencoded")&&(p.data=p.data.replace(Re,"+")):(f=p.url.slice(o.length),p.data&&(p.processData||"string"==typeof p.data)&&(o+=(Le.test(o)?"&":"?")+p.data,delete p.data),!1===p.cache&&(o=o.replace(Fe,"$1"),f=(Le.test(o)?"&":"?")+"_="+Ee+++f),p.url=o+f),p.ifModified&&(wt.lastModified[o]&&S.setRequestHeader("If-Modified-Since",wt.lastModified[o]),wt.etag[o]&&S.setRequestHeader("If-None-Match",wt.etag[o])),(p.data&&p.hasContent&&!1!==p.contentType||n.contentType)&&S.setRequestHeader("Content-Type",p.contentType),S.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Ge+"; q=0.01":""):p.accepts["*"]);for(d in p.headers)S.setRequestHeader(d,p.headers[d]);if(p.beforeSend&&(!1===p.beforeSend.call(g,S,p)||u))return S.abort();if(_="abort",y.add(p.complete),S.done(p.success),S.fail(p.error),r=et(Be,p,n,S)){if(S.readyState=1,h&&m.trigger("ajaxSend",[S,p]),u)return S;p.async&&p.timeout>0&&(l=t.setTimeout(function(){S.abort("timeout")},p.timeout));try{u=!1,r.send(x,i)}catch(t){if(u)throw t;i(-1,t)}}else i(-1,"No Transport");return S},getJSON:function(t,e,n){return wt.get(t,e,n,"json")},getScript:function(t,e){return wt.get(t,void 0,e,"script")}}),wt.each(["get","post"],function(t,e){wt[e]=function(t,n,i,r){return yt(n)&&(r=r||i,i=n,n=void 0),wt.ajax(wt.extend({url:t,type:e,dataType:r,data:n,success:i},wt.isPlainObject(t)&&t))}}),wt._evalUrl=function(t){return wt.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},wt.fn.extend({wrapAll:function(t){var e;return this[0]&&(yt(t)&&(t=t.call(this[0])),e=wt(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this},wrapInner:function(t){return yt(t)?this.each(function(e){wt(this).wrapInner(t.call(this,e))}):this.each(function(){var e=wt(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=yt(t);return this.each(function(n){wt(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(t){return this.parent(t).not("body").each(function(){wt(this).replaceWith(this.childNodes)}),this}}),wt.expr.pseudos.hidden=function(t){return!wt.expr.pseudos.visible(t)},wt.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},wt.ajaxSettings.xhr=function(){try{return new t.XMLHttpRequest}catch(t){}};var We={0:200,1223:204},Ue=wt.ajaxSettings.xhr();vt.cors=!!Ue&&"withCredentials"in Ue,vt.ajax=Ue=!!Ue,wt.ajaxTransport(function(e){var n,i;if(vt.cors||Ue&&!e.crossDomain)return{send:function(r,o){var a,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)s[a]=e.xhrFields[a];e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||r["X-Requested-With"]||(r["X-Requested-With"]="XMLHttpRequest");for(a in r)s.setRequestHeader(a,r[a]);n=function(t){return function(){n&&(n=i=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===t?s.abort():"error"===t?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(We[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),i=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=i:s.onreadystatechange=function(){4===s.readyState&&t.setTimeout(function(){n&&i()})},n=n("abort");try{s.send(e.hasContent&&e.data||null)}catch(t){if(n)throw t}},abort:function(){n&&n()}}}),wt.ajaxPrefilter(function(t){t.crossDomain&&(t.contents.script=!1)}),wt.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return wt.globalEval(t),t}}}),wt.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")}),wt.ajaxTransport("script",function(t){if(t.crossDomain){var e,n;return{send:function(i,r){e=wt("<script>").prop({charset:t.scriptCharset,src:t.url}).on("load error",n=function(t){e.remove(),n=null,t&&r("error"===t.type?404:200,t.type)}),at.head.appendChild(e[0])},abort:function(){n&&n()}}}});var Xe=[],Ye=/(=)\?(?=&|$)|\?\?/;wt.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=Xe.pop()||wt.expando+"_"+Ee++;return this[t]=!0,t}}),wt.ajaxPrefilter("json jsonp",function(e,n,i){var r,o,a,s=!1!==e.jsonp&&(Ye.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ye.test(e.data)&&"data");if(s||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=yt(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(Ye,"$1"+r):!1!==e.jsonp&&(e.url+=(Le.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return a||wt.error(r+" was not called"),a[0]},e.dataTypes[0]="json",o=t[r],t[r]=function(){a=arguments},i.always(function(){void 0===o?wt(t).removeProp(r):t[r]=o,e[r]&&(e.jsonpCallback=n.jsonpCallback,Xe.push(r)),a&&yt(o)&&o(a[0]),a=o=void 0}),"script"}),vt.createHTMLDocument=function(){var t=at.implementation.createHTMLDocument("").body;return t.innerHTML="<form></form><form></form>",2===t.childNodes.length}(),wt.parseHTML=function(t,e,n){if("string"!=typeof t)return[];"boolean"==typeof e&&(n=e,e=!1);var i,r,o;return e||(vt.createHTMLDocument?((i=(e=at.implementation.createHTMLDocument("")).createElement("base")).href=at.location.href,e.head.appendChild(i)):e=at),r=At.exec(t),o=!n&&[],r?[e.createElement(r[1])]:(r=S([t],e,o),o&&o.length&&wt(o).remove(),wt.merge([],r.childNodes))},wt.fn.load=function(t,e,n){var i,r,o,a=this,s=t.indexOf(" ");return s>-1&&(i=Q(t.slice(s)),t=t.slice(0,s)),yt(e)?(n=e,e=void 0):e&&"object"==typeof e&&(r="POST"),a.length>0&&wt.ajax({url:t,type:r||"GET",dataType:"html",data:e}).done(function(t){o=arguments,a.html(i?wt("<div>").append(wt.parseHTML(t)).find(i):t)}).always(n&&function(t,e){a.each(function(){n.apply(this,o||[t.responseText,e,t])})}),this},wt.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){wt.fn[e]=function(t){return this.on(e,t)}}),wt.expr.pseudos.animated=function(t){return wt.grep(wt.timers,function(e){return t===e.elem}).length},wt.offset={setOffset:function(t,e,n){var i,r,o,a,s,l,c=wt.css(t,"position"),u=wt(t),h={};"static"===c&&(t.style.position="relative"),s=u.offset(),o=wt.css(t,"top"),l=wt.css(t,"left"),("absolute"===c||"fixed"===c)&&(o+l).indexOf("auto")>-1?(a=(i=u.position()).top,r=i.left):(a=parseFloat(o)||0,r=parseFloat(l)||0),yt(e)&&(e=e.call(t,n,wt.extend({},s))),null!=e.top&&(h.top=e.top-s.top+a),null!=e.left&&(h.left=e.left-s.left+r),"using"in e?e.using.call(t,h):u.css(h)}},wt.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){wt.offset.setOffset(this,t,e)});var e,n,i=this[0];return i?i.getClientRects().length?(e=i.getBoundingClientRect(),n=i.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var t,e,n,i=this[0],r={top:0,left:0};if("fixed"===wt.css(i,"position"))e=i.getBoundingClientRect();else{for(e=this.offset(),n=i.ownerDocument,t=i.offsetParent||n.documentElement;t&&(t===n.body||t===n.documentElement)&&"static"===wt.css(t,"position");)t=t.parentNode;t&&t!==i&&1===t.nodeType&&((r=wt(t).offset()).top+=wt.css(t,"borderTopWidth",!0),r.left+=wt.css(t,"borderLeftWidth",!0))}return{top:e.top-r.top-wt.css(i,"marginTop",!0),left:e.left-r.left-wt.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent;t&&"static"===wt.css(t,"position");)t=t.offsetParent;return t||te})}}),wt.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,e){var n="pageYOffset"===e;wt.fn[t]=function(i){return Rt(this,function(t,i,r){var o;if(bt(t)?o=t:9===t.nodeType&&(o=t.defaultView),void 0===r)return o?o[e]:t[i];o?o.scrollTo(n?o.pageXOffset:r,n?r:o.pageYOffset):t[i]=r},t,i,arguments.length)}}),wt.each(["top","left"],function(t,e){wt.cssHooks[e]=I(vt.pixelPosition,function(t,n){if(n)return n=R(t,e),le.test(n)?wt(t).position()[e]+"px":n})}),wt.each({Height:"height",Width:"width"},function(t,e){wt.each({padding:"inner"+t,content:e,"":"outer"+t},function(n,i){wt.fn[i]=function(r,o){var a=arguments.length&&(n||"boolean"!=typeof r),s=n||(!0===r||!0===o?"margin":"border");return Rt(this,function(e,n,r){var o;return bt(e)?0===i.indexOf("outer")?e["inner"+t]:e.document.documentElement["client"+t]:9===e.nodeType?(o=e.documentElement,Math.max(e.body["scroll"+t],o["scroll"+t],e.body["offset"+t],o["offset"+t],o["client"+t])):void 0===r?wt.css(e,n,s):wt.style(e,n,r,s)},e,a?r:void 0,a)}})}),wt.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(t,e){wt.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),wt.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),wt.fn.extend({bind:function(t,e,n){return this.on(t,null,e,n)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,n,i){return this.on(e,t,n,i)},undelegate:function(t,e,n){return 1===arguments.length?this.off(t,"**"):this.off(e,t||"**",n)}}),wt.proxy=function(t,e){var n,i,r;if("string"==typeof e&&(n=t[e],e=t,t=n),yt(t))return i=lt.call(arguments,2),r=function(){return t.apply(e||this,i.concat(lt.call(arguments)))},r.guid=t.guid=t.guid||wt.guid++,r},wt.holdReady=function(t){t?wt.readyWait++:wt.ready(!0)},wt.isArray=Array.isArray,wt.parseJSON=JSON.parse,wt.nodeName=o,wt.isFunction=yt,wt.isWindow=bt,wt.camelCase=p,wt.type=i,wt.now=Date.now,wt.isNumeric=function(t){var e=wt.type(t);return("number"===e||"string"===e)&&!isNaN(t-parseFloat(t))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return wt});var Qe=t.jQuery,Ze=t.$;return wt.noConflict=function(e){return t.$===wt&&(t.$=Ze),e&&t.jQuery===wt&&(t.jQuery=Qe),wt},e||(t.jQuery=t.$=wt),wt}),define("config",["jquery"],function(t){function e(t){"undefined"!=typeof Storage&&window.swish.config_hash&&localStorage.setItem(i,JSON.stringify({hash:window.swish.config_hash,config:t}))}var n,i="SWISHCONFIG";return n||(n=function(){if("undefined"!=typeof Storage&&window.swish.config_hash){var t;if((t=localStorage.getItem(i))&&(value=JSON.parse(t),value.hash==window.swish.config_hash))return value.config}}())||t.ajax("swish_config.json",{dataType:"json",async:!1,success:function(t){n=t,e(n)},error:function(){alert("Failed to fetch configuration from server")}}),n}),define("preferences",["jquery"],function(t){function e(){var t=localStorage.getItem("notagain")||"[]";try{data=JSON.parse(t),"object"!=typeof data&&(data=[])}catch(t){data=[]}return data}var n="undefined"!=typeof Storage,i={},r={},o={persistent:function(){return n},setNotAgain:function(t){if(n){var i=e();i.indexOf(t)<0&&(i.push(t),localStorage.setItem("notagain",JSON.stringify(i)))}},notagain:function(t){if(n){return e().indexOf(t)>=0}return!1},broadcast:function(e,n){var i;if(void 0==r.name)i=".swish-event-receiver";else{if(null==r.name)return;i=r.name}t(i).trigger("preference",{name:e,value:n})},setVal:function(t,e){n&&localStorage.setItem(t,JSON.stringify(e)),this.broadcast(t,e)},setDefault:function(t,e){i[t]=e},setInform:function(t,e){r[t]=e},getVal:function(t){if(n){var e;if(e=localStorage.getItem(t))return value=JSON.parse(e),value}return i[t]},setDocVal:function(t,e,n){var i=o.getVal(t)||{};i[e]=n,o.setVal(t,i)},getDocVal:function(t,e,n){var i=o.getVal(t)||{};return void 0===i[e]?n:i[e]}};return o}),define("links",["jquery","config","modal"],function(t,e,n){var i={PlDoc:function(e,n){if(e){var i=function(t){var e,n={};if((e=t.indexOf(":"))>0&&(n.module=t.substring(0,e),t=t.slice(e+1)),(e=t.indexOf("/"))>0&&(n.name=t.substring(0,e),"/"==t.charAt(e+1)?n.arity=parseInt(t.slice(e+2))+2:n.arity=parseInt(t.slice(e+1)),!isNaN(n.arity)))return n}(decodeURIComponent(e));if(i)return t(n.target).closest("#ajaxModal").modal("hide"),t(".swish-event-receiver").trigger("pldoc",i),n.preventDefault(),!0}return!1},runQueryLink:function(e,i){function r(t){for(var e=0;e<l.length;e++)if(l[e].toLowerCase()==t.toLowerCase())return l[e];h.push(t)}var o=e.closest(".notebook"),a=e.data("query"),s=o.find('.nb-cell[name="'+a+'"]');if(s){var l=t().prologEditor("variables",s.nbCell("text"),{anon:!0}),c="",u={},h=[];t.each(e.data(),function(t,e){var n;"query"!==t&&(n=r(t))&&(""!=c&&(c+=", "),c+=n+" = ("+e+")")}),h.length>0&&n.feedback({owner:o,type:"warning",duration:3e3,html:"The variables <b>"+h.join(", ")+"</b> do not appear in query <b>"+a+"</b>"}),""!=c&&(u.bindings=c),s.nbCell("run",u)}},followLink:function(n){function r(){a=!0,n.preventDefault(),t(n.target).closest("#ajaxModal").modal("hide")}var o=t(n.target).closest("a"),a=!1;if(o.attr("href")){var s,l=e.http.locations.swish+"p/",c=e.http.locations.swish+"example/",u=o.attr("href");if(u.startsWith(l)&&!u.match(/#/))r(),file=u.slice(l.length),t(n.target).closest(".swish").swish("playFile",file);else if(o.hasClass("store"))r(),s.alert("File does not appear to come from gitty store?");else if(o.hasClass("file")||u.startsWith(c)&&!u.match(/#/))r(),t(n.target).closest(".swish").swish("playURL",{url:u});else if(o.hasClass("builtin")&&u.match(/predicate=/))a=i.PlDoc(u.split("predicate=").pop(),n);else if(u.match(/object=/))a=i.PlDoc(u.split("object=").pop(),n);else if(1==(s=t(n.target).closest("#ajaxModal")).length&&u.match(/#/)){var h,d=u.split("#").pop();1==(h=s.find("#"+d)).length&&(a=!0,n.preventDefault(),s.animate({scrollTop:h.position().top},2e3))}a||(n.preventDefault(),window.open(u,"_blank"))}else o.data("query")&&i.runQueryLink(o,n)}};return i}),define("utils",["jquery"],function(t){var e=[],n={htmlEncode:function(t){return t?document.createElement("a").appendChild(document.createTextNode(t)).parentNode.innerHTML:""},loadCSS:function(t){if(-1==e.indexOf(t)){var n=document.createElement("link");n.rel="stylesheet",n.type="text/css",n.media="screen",n.href=t,document.getElementsByTagName("head")[0].appendChild(n),e.push(t)}},generateUUID:function(){var t=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var n=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"==e?n:7&n|8).toString(16)})},flash:function(t){t.addClass("flash"),setTimeout(function(){t.removeClass("flash")},1500)},ago:function(t){var e=(new Date).getTime()/1e3-t;return e<20?"just now":e<60?"less then a minute ago":(e=Math.round(e/60))<120?e+" minutes ago":(e=Math.round(e/60))<48?e+" hours ago":(e=Math.round(e/24))<360?e+" days ago":(e=Math.round(e/365))+" years ago"},basename:function(t){return t?t.split("/").pop():null}};return"function"!=typeof String.prototype.startsWith&&(String.prototype.startsWith=function(t){return 0===this.lastIndexOf(t,0)}),n}),function(t){function e(){for(var t=document.createElement(arguments[0]),e=1;e<arguments.length;e++){var i=arguments[e];if(null!==i&&void 0!==i)if(1===i.nodeType)t.appendChild(i);else if(""===i||i&&i.charCodeAt&&i.substr||0===i||i&&i.toExponential&&i.toFixed)t.appendChild(document.createTextNode(i));else if(1===e&&"object"==typeof i){for(var r in i)if(i.hasOwnProperty(r)){var o=i[r];if(null!==o&&void 0!==o){r=r.toLowerCase(),r=n[r]||r;var a="o"===r.charAt(0)&&"n"===r.charAt(1);a?(void 0===i.href&&"onclick"===r&&t.setAttribute("href","#"),t[r]=o):"style"===r&&t.style.setAttribute?t.style.setAttribute("cssText",o):"className"===r||"htmlFor"===r?t[r]=o:t.setAttribute(r,o)}}}else if("[object Array]"===Object.prototype.toString.call(i))for(var s=0;s<i.length;s++){var l=i[s];1===l.nodeType&&t.appendChild(l)}}return t.appendTo=function(t){return 1===t.nodeType&&1===this.nodeType&&t.appendChild(this),this},t}var n={acceptcharset:"acceptCharset",accesskey:"accessKey",allowtransparency:"allowTransparency",bgcolor:"bgColor",cellpadding:"cellPadding",cellspacing:"cellSpacing",class:"className",classname:"className",colspan:"colSpan",csstext:"style",defaultchecked:"defaultChecked",defaultselected:"defaultSelected",defaultvalue:"defaultValue",for:"htmlFor",frameborder:"frameBorder",hspace:"hSpace",htmlfor:"htmlFor",longdesc:"longDesc",maxlength:"maxLength",marginwidth:"marginWidth",marginheight:"marginHeight",noresize:"noResize",noshade:"noShade",readonly:"readOnly",rowspan:"rowSpan",tabindex:"tabIndex",valign:"vAlign",vspace:"vSpace"};e.registerElement=function(t,n){e[t]||(e[t]=function(){var i=e("div",{class:t});return n.apply(i,Array.prototype.slice.call(arguments)),i})};for(var i=["acronym","applet","basefont","big","center","dir","font","frame","frameset","noframes","strike","tt","u","xmp"],r=["a","abbr","address","area","article","aside","audio","b","base","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","command","datalist","dd","del","details","dfn","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","keygen","kbd","label","legend","li","link","map","mark","menu","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","picture","param","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","ul","var","video","wbr"].concat(i),o=0;o<r.length;o++)e[r[o]]=function(t){return function(){return e.apply(this,[t].concat(Array.prototype.slice.call(arguments)))}}(r[o]);if("undefined"!=typeof module&&module.exports)module.exports=e;else{var a=t.$||{};a.el=e,t.$=a}}(this),define("laconic",["jquery"],function(){}),define("version",["jquery","config","utils","laconic"],function(t,e,n){!function(t){var i={_init:function(n){return n=n||{},this.each(function(){var i=t(this),r={};e.http.locations.versions&&(i.append(t.el.div({class:"version"},t.el.div({class:"v-swish"}),t.el.div({class:"v-changelog"},t.el.table()),t.el.div({class:"v-prolog"}))),i.version("update"),n.commit&&i.version("changelog",n)),i.data("version",r)})},update:function(){e.http.locations.versions&&(elem=this,t.get(e.http.locations.versions,function(e){if(!e.swish||!e.prolog)return void console.log(e);var n;n=elem.hasClass("v-compact")?t.el.a({title:"View recent changes"},e.swish.version):t.el.span(e.swish.version),elem.find(".v-swish").append(t.el.span(t.el.a({class:"v-product",href:"https://swish.swi-prolog.org"},"SWISH")," version ",n)),elem.find(".v-prolog").append(t.el.span("Running on ",t.el.a({class:"v-product",href:"http://www.swi-prolog.org/"},e.prolog.brand)," version "+e.prolog.version)),
+elem.hasClass("v-compact")&&t(n).on("click",function(t){if(elem.hasClass("v-compact"))return elem.version("versionDetails"),t.preventDefault(),!1})}))},versionDetails:function(){var t=this.closest(".modal-body");t&&(this.closest(".modal-content").find("h2").html("SWISH ChangeLog"),this.detach(),t.empty(),t.append(this),this.removeClass("v-compact"),this.version("changelog"))},changelog:function(n){var i=this;n=n||{};var r={};r.show=n.show||"all",n.commit?r.commit=n.commit:r.last=n.last||20,this.find(".v-changelog > table").html(""),t.get(e.http.locations.changelog,r,function(t){for(var e=0;e<t.changelog.length;e++)i.version("addChange",t.changelog[e],e)})},addChange:function(e,n){var i=t.el.td({class:"v-description",colspan:3});t(i).html(e.message);var r=n%2==0?"even":"odd";this.find(".v-changelog > table").append(t.el.tr({class:"v-change-header "+r},t.el.td({class:"v-author"},e.author),t.el.td({class:"v-commit"},e.commit.slice(0,7)),t.el.td({class:"v-date"},e.committer_date_relative)),t.el.tr({class:"v-change-body "+r},i))},checkForUpdates:function(){function i(t){var e={commit:t.commit,date:t.date};localStorage.setItem("last-version",JSON.stringify(e))}if(e.http.locations.versions){var r=localStorage.getItem("last-version");if(r&&(last=JSON.parse(r))&&last.commit){var o="SWISH updates since "+n.ago(last.date||0);t.get(e.http.locations.changes,{commit:last.commit},function(e){e.changes&&t("#swish-updates").css("display","inline-block").attr("title","SWISH has received "+e.changes+" updates\nClick for details").on("click",function(n){t(n.target).closest(".swish").swish("showUpdates",{title:o,commit:last.commit,show:"tagged"}),i(e),t("#swish-updates").hide()})})}else t.get(e.http.locations.changes,function(t){i(t)})}}};t.fn.version=function(e){return i[e]?i[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.version"):i._init.apply(this,arguments)}}(jQuery)}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";var e=jQuery.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||3<e[0])throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(),function(t){"use strict";t.fn.emulateTransitionEnd=function(e){var n=!1,i=this;return t(this).one("bsTransitionEnd",function(){n=!0}),setTimeout(function(){n||t(i).trigger(t.support.transition.end)},e),this},t(function(){t.support.transition=function(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(t){"use strict";var e='[data-dismiss="alert"]',n=function(n){t(n).on("click",e,this.close)};n.VERSION="3.4.1",n.TRANSITION_DURATION=150,n.prototype.close=function(e){function i(){a.detach().trigger("closed.bs.alert").remove()}var r=t(this),o=r.attr("data-target");o||(o=(o=r.attr("href"))&&o.replace(/.*(?=#[^\s]*$)/,"")),o="#"===o?[]:o;var a=t(document).find(o);e&&e.preventDefault(),a.length||(a=r.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(n.TRANSITION_DURATION):i())};var i=t.fn.alert;t.fn.alert=function(e){return this.each(function(){var i=t(this),r=i.data("bs.alert");r||i.data("bs.alert",r=new n(this)),"string"==typeof e&&r[e].call(i)})},t.fn.alert.Constructor=n,t.fn.alert.noConflict=function(){return t.fn.alert=i,this},t(document).on("click.bs.alert.data-api",e,n.prototype.close)}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.button"),o="object"==typeof e&&e;r||i.data("bs.button",r=new n(this,o)),"toggle"==e?r.toggle():e&&r.setState(e)})}var n=function(e,i){this.$element=t(e),this.options=t.extend({},n.DEFAULTS,i),this.isLoading=!1};n.VERSION="3.4.1",n.DEFAULTS={loadingText:"loading..."},n.prototype.setState=function(e){var n="disabled",i=this.$element,r=i.is("input")?"val":"html",o=i.data();e+="Text",null==o.resetText&&i.data("resetText",i[r]()),setTimeout(t.proxy(function(){i[r](null==o[e]?this.options[e]:o[e]),"loadingText"==e?(this.isLoading=!0,i.addClass(n).attr(n,n).prop(n,!0)):this.isLoading&&(this.isLoading=!1,i.removeClass(n).removeAttr(n).prop(n,!1))},this),0)},n.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var n=this.$element.find("input");"radio"==n.prop("type")?(n.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==n.prop("type")&&(n.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),n.prop("checked",this.$element.hasClass("active")),t&&n.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=e,t.fn.button.Constructor=n,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(n){var i=t(n.target).closest(".btn");e.call(i,"toggle"),t(n.target).is('input[type="radio"], input[type="checkbox"]')||(n.preventDefault(),i.is("input,button")?i.trigger("focus"):i.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.carousel"),o=t.extend({},n.DEFAULTS,i.data(),"object"==typeof e&&e),a="string"==typeof e?e:o.slide;r||i.data("bs.carousel",r=new n(this,o)),"number"==typeof e?r.to(e):a?r[a]():o.interval&&r.pause().cycle()})}var n=function(e,n){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};n.VERSION="3.4.1",n.TRANSITION_DURATION=600,n.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},n.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},n.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},n.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},n.prototype.getItemForDirection=function(t,e){var n=this.getItemIndex(e);if(("prev"==t&&0===n||"next"==t&&n==this.$items.length-1)&&!this.options.wrap)return e;var i=(n+("prev"==t?-1:1))%this.$items.length;return this.$items.eq(i)},n.prototype.to=function(t){var e=this,n=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):n==t?this.pause().cycle():this.slide(n<t?"next":"prev",this.$items.eq(t))},n.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},n.prototype.next=function(){if(!this.sliding)return this.slide("next")},n.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},n.prototype.slide=function(e,i){var r=this.$element.find(".item.active"),o=i||this.getItemForDirection(e,r),a=this.interval,s="next"==e?"left":"right",l=this;if(o.hasClass("active"))return this.sliding=!1;var c=o[0],u=t.Event("slide.bs.carousel",{relatedTarget:c,direction:s});if(this.$element.trigger(u),!u.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var h=t(this.$indicators.children()[this.getItemIndex(o)]);h&&h.addClass("active")}var d=t.Event("slid.bs.carousel",{relatedTarget:c,direction:s});return t.support.transition&&this.$element.hasClass("slide")?(o.addClass(e),"object"==typeof o&&o.length&&o[0].offsetWidth,r.addClass(s),o.addClass(s),r.one("bsTransitionEnd",function(){o.removeClass([e,s].join(" ")).addClass("active"),r.removeClass(["active",s].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(d)},0)}).emulateTransitionEnd(n.TRANSITION_DURATION)):(r.removeClass("active"),o.addClass("active"),this.sliding=!1,this.$element.trigger(d)),a&&this.cycle(),this}};var i=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=n,t.fn.carousel.noConflict=function(){return t.fn.carousel=i,this};var r=function(n){var i=t(this),r=i.attr("href");r&&(r=r.replace(/.*(?=#[^\s]+$)/,""));var o=i.attr("data-target")||r,a=t(document).find(o);if(a.hasClass("carousel")){var s=t.extend({},a.data(),i.data()),l=i.attr("data-slide-to");l&&(s.interval=!1),e.call(a,s),l&&a.data("bs.carousel").to(l),n.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",r).on("click.bs.carousel.data-api","[data-slide-to]",r),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var n=t(this);e.call(n,n.data())})})}(jQuery),function(t){"use strict";function e(e){var n,i=e.attr("data-target")||(n=e.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return t(document).find(i)}function n(e){return this.each(function(){var n=t(this),r=n.data("bs.collapse"),o=t.extend({},i.DEFAULTS,n.data(),"object"==typeof e&&e);!r&&o.toggle&&/show|hide/.test(e)&&(o.toggle=!1),r||n.data("bs.collapse",r=new i(this,o)),"string"==typeof e&&r[e]()})}var i=function(e,n){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,n),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};i.VERSION="3.4.1",i.TRANSITION_DURATION=350,i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,r=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(r&&r.length&&(e=r.data("bs.collapse"))&&e.transitioning)){var o=t.Event("show.bs.collapse");if(this.$element.trigger(o),!o.isDefaultPrevented()){r&&r.length&&(n.call(r,"hide"),e||r.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var s=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return s.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(s,this)).emulateTransitionEnd(i.TRANSITION_DURATION)[a](this.$element[0][l])}}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var r=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!t.support.transition)return r.call(this);this.$element[n](0).one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(i.TRANSITION_DURATION)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},i.prototype.getParent=function(){return t(document).find(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(n,i){var r=t(i);this.addAriaAndCollapsedClass(e(r),r)},this)).end()},i.prototype.addAriaAndCollapsedClass=function(t,e){var n=t.hasClass("in");t.attr("aria-expanded",n),e.toggleClass("collapsed",!n).attr("aria-expanded",n)};var r=t.fn.collapse;t.fn.collapse=n,t.fn.collapse.Constructor=i,t.fn.collapse.noConflict=function(){return t.fn.collapse=r,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(i){var r=t(this);r.attr("data-target")||i.preventDefault();var o=e(r),a=o.data("bs.collapse")?"toggle":r.data();n.call(o,a)})}(jQuery),function(t){"use strict";function e(e){var n=e.attr("data-target");n||(n=(n=e.attr("href"))&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var i="#"!==n?t(document).find(n):null;return i&&i.length?i:e.parent()}function n(n){n&&3===n.which||(t(".dropdown-backdrop").remove(),t(i).each(function(){var i=t(this),r=e(i),o={relatedTarget:this};r.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&t.contains(r[0],n.target)||(r.trigger(n=t.Event("hide.bs.dropdown",o)),n.isDefaultPrevented()||(i.attr("aria-expanded","false"),r.removeClass("open").trigger(t.Event("hidden.bs.dropdown",o)))))}))}var i='[data-toggle="dropdown"]',r=function(e){t(e).on("click.bs.dropdown",this.toggle)};r.VERSION="3.4.1",r.prototype.toggle=function(i){var r=t(this);if(!r.is(".disabled, :disabled")){var o=e(r),a=o.hasClass("open");if(n(),!a){"ontouchstart"in document.documentElement&&!o.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",n);var s={relatedTarget:this};if(o.trigger(i=t.Event("show.bs.dropdown",s)),i.isDefaultPrevented())return;r.trigger("focus").attr("aria-expanded","true"),o.toggleClass("open").trigger(t.Event("shown.bs.dropdown",s))}return!1}},r.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var r=t(this);if(n.preventDefault(),n.stopPropagation(),!r.is(".disabled, :disabled")){var o=e(r),a=o.hasClass("open");if(!a&&27!=n.which||a&&27==n.which)return 27==n.which&&o.find(i).trigger("focus"),r.trigger("click");var s=o.find(".dropdown-menu li:not(.disabled):visible a");if(s.length){var l=s.index(n.target);38==n.which&&0<l&&l--,40==n.which&&l<s.length-1&&l++,~l||(l=0),s.eq(l).trigger("focus")}}}};var o=t.fn.dropdown;t.fn.dropdown=function(e){return this.each(function(){var n=t(this),i=n.data("bs.dropdown");i||n.data("bs.dropdown",i=new r(this)),"string"==typeof e&&i[e].call(n)})},t.fn.dropdown.Constructor=r,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=o,this},t(document).on("click.bs.dropdown.data-api",n).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",i,r.prototype.toggle).on("keydown.bs.dropdown.data-api",i,r.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",r.prototype.keydown)}(jQuery),function(t){"use strict";function e(e,i){return this.each(function(){var r=t(this),o=r.data("bs.modal"),a=t.extend({},n.DEFAULTS,r.data(),"object"==typeof e&&e);o||r.data("bs.modal",o=new n(this,a)),"string"==typeof e?o[e](i):a.show&&o.show(i)})}var n=function(e,n){this.options=n,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.fixedContent=".navbar-fixed-top, .navbar-fixed-bottom",this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};n.VERSION="3.4.1",n.TRANSITION_DURATION=300,n.BACKDROP_TRANSITION_DURATION=150,n.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},n.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},n.prototype.show=function(e){var i=this,r=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(r),this.isShown||r.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){i.$element.one("mouseup.dismiss.bs.modal",function(e){t(e.target).is(i.$element)&&(i.ignoreBackdropClick=!0)})}),this.backdrop(function(){var r=t.support.transition&&i.$element.hasClass("fade");i.$element.parent().length||i.$element.appendTo(i.$body),i.$element.show().scrollTop(0),i.adjustDialog(),r&&i.$element[0].offsetWidth,i.$element.addClass("in"),i.enforceFocus();var o=t.Event("shown.bs.modal",{relatedTarget:e});r?i.$dialog.one("bsTransitionEnd",function(){i.$element.trigger("focus").trigger(o)}).emulateTransitionEnd(n.TRANSITION_DURATION):i.$element.trigger("focus").trigger(o)}))},n.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(n.TRANSITION_DURATION):this.hideModal())},n.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},n.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},n.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},n.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},n.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},n.prototype.backdrop=function(e){var i=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var o=t.support.transition&&r;if(this.$backdrop=t(document.createElement("div")).addClass("modal-backdrop "+r).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy(function(t){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;o?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var a=function(){i.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",a).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):a()}else e&&e()},n.prototype.handleUpdate=function(){this.adjustDialog()},n.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},n.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},n.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},n.prototype.setScrollbar=function(){var e=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"";var n=this.scrollbarWidth;this.bodyIsOverflowing&&(this.$body.css("padding-right",e+n),t(this.fixedContent).each(function(e,i){var r=i.style.paddingRight,o=t(i).css("padding-right");t(i).data("padding-right",r).css("padding-right",parseFloat(o)+n+"px")}))},n.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad),t(this.fixedContent).each(function(e,n){var i=t(n).data("padding-right");t(n).removeData("padding-right"),n.style.paddingRight=i||""})},n.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var i=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=n,t.fn.modal.noConflict=function(){return t.fn.modal=i,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(n){var i=t(this),r=i.attr("href"),o=i.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,""),a=t(document).find(o),s=a.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(r)&&r},a.data(),i.data());i.is("a")&&n.preventDefault(),a.one("show.bs.modal",function(t){t.isDefaultPrevented()||a.one("hidden.bs.modal",function(){i.is(":visible")&&i.trigger("focus")})}),e.call(a,s,this)})}(jQuery),function(t){"use strict";function e(e,n){var i=e.nodeName.toLowerCase();if(-1!==t.inArray(i,n))return-1===t.inArray(i,r)||Boolean(e.nodeValue.match(a)||e.nodeValue.match(s));for(var o=t(n).filter(function(t,e){return e instanceof RegExp}),l=0,c=o.length;l<c;l++)if(i.match(o[l]))return!0;return!1}function n(n,i,r){if(0===n.length)return n;if(r&&"function"==typeof r)return r(n);if(!document.implementation||!document.implementation.createHTMLDocument)return n;var o=document.implementation.createHTMLDocument("sanitization");o.body.innerHTML=n;for(var a=t.map(i,function(t,e){return e}),s=t(o.body).find("*"),l=0,c=s.length;l<c;l++){var u=s[l],h=u.nodeName.toLowerCase();if(-1!==t.inArray(h,a))for(var d=t.map(u.attributes,function(t){return t}),f=[].concat(i["*"]||[],i[h]||[]),p=0,g=d.length;p<g;p++)e(d[p],f)||u.removeAttribute(d[p].nodeName);else u.parentNode.removeChild(u)}return o.body.innerHTML}var i=["sanitize","whiteList","sanitizeFn"],r=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],o={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},a=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:\/?#]*(?:[\/?#]|$))/gi,s=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i,l=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",t,e)};l.VERSION="3.4.1",l.TRANSITION_DURATION=150,l.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:o},l.prototype.init=function(e,n,i){if(this.enabled=!0,this.type=e,this.$element=t(n),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&t(document).find(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var r=this.options.trigger.split(" "),o=r.length;o--;){var a=r[o];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var s="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(s+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},l.prototype.getDefaults=function(){return l.DEFAULTS},l.prototype.getOptions=function(e){var r=this.$element.data();for(var o in r)r.hasOwnProperty(o)&&-1!==t.inArray(o,i)&&delete r[o];return(e=t.extend({},this.getDefaults(),r,e)).delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e.sanitize&&(e.template=n(e.template,e.whiteList,e.sanitizeFn)),e},l.prototype.getDelegateOptions=function(){var e={},n=this.getDefaults();return this._options&&t.each(this._options,function(t,i){n[t]!=i&&(e[t]=i)}),e},l.prototype.enter=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusin"==e.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState)n.hoverState="in";else{if(clearTimeout(n.timeout),n.hoverState="in",!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout(function(){"in"==n.hoverState&&n.show()},n.options.delay.show)}},l.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},l.prototype.leave=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusout"==e.type?"focus":"hover"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState="out",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout(function(){"out"==n.hoverState&&n.hide()},n.options.delay.hide)}},l.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var n=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!n)return;var i=this,r=this.tip(),o=this.getUID(this.type);this.setContent(),r.attr("id",o),this.$element.attr("aria-describedby",o),this.options.animation&&r.addClass("fade");var a="function"==typeof this.options.placement?this.options.placement.call(this,r[0],this.$element[0]):this.options.placement,s=/\s?auto?\s?/i,c=s.test(a);c&&(a=a.replace(s,"")||"top"),r.detach().css({top:0,left:0,display:"block"}).addClass(a).data("bs."+this.type,this),this.options.container?r.appendTo(t(document).find(this.options.container)):r.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var u=this.getPosition(),h=r[0].offsetWidth,d=r[0].offsetHeight;if(c){var f=a,p=this.getPosition(this.$viewport);a="bottom"==a&&u.bottom+d>p.bottom?"top":"top"==a&&u.top-d<p.top?"bottom":"right"==a&&u.right+h>p.width?"left":"left"==a&&u.left-h<p.left?"right":a,r.removeClass(f).addClass(a)}var g=this.getCalculatedOffset(a,u,h,d);this.applyPlacement(g,a);var m=function(){var t=i.hoverState;i.$element.trigger("shown.bs."+i.type),i.hoverState=null,"out"==t&&i.leave(i)};t.support.transition&&this.$tip.hasClass("fade")?r.one("bsTransitionEnd",m).emulateTransitionEnd(l.TRANSITION_DURATION):m()}},l.prototype.applyPlacement=function(e,n){var i=this.tip(),r=i[0].offsetWidth,o=i[0].offsetHeight,a=parseInt(i.css("margin-top"),10),s=parseInt(i.css("margin-left"),10);isNaN(a)&&(a=0),isNaN(s)&&(s=0),e.top+=a,e.left+=s,t.offset.setOffset(i[0],t.extend({using:function(t){i.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),i.addClass("in");var l=i[0].offsetWidth,c=i[0].offsetHeight;"top"==n&&c!=o&&(e.top=e.top+o-c);var u=this.getViewportAdjustedDelta(n,e,l,c);u.left?e.left+=u.left:e.top+=u.top;var h=/top|bottom/.test(n),d=h?2*u.left-r+l:2*u.top-o+c,f=h?"offsetWidth":"offsetHeight";i.offset(e),this.replaceArrow(d,i[0][f],h)},l.prototype.replaceArrow=function(t,e,n){this.arrow().css(n?"left":"top",50*(1-t/e)+"%").css(n?"top":"left","")},l.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();this.options.html?(this.options.sanitize&&(e=n(e,this.options.whiteList,this.options.sanitizeFn)),t.find(".tooltip-inner").html(e)):t.find(".tooltip-inner").text(e),t.removeClass("fade in top bottom left right")},l.prototype.hide=function(e){function n(){"in"!=i.hoverState&&r.detach(),i.$element&&i.$element.removeAttr("aria-describedby").trigger("hidden.bs."+i.type),e&&e()}var i=this,r=t(this.$tip),o=t.Event("hide.bs."+this.type);if(this.$element.trigger(o),!o.isDefaultPrevented())return r.removeClass("in"),t.support.transition&&r.hasClass("fade")?r.one("bsTransitionEnd",n).emulateTransitionEnd(l.TRANSITION_DURATION):n(),this.hoverState=null,this},l.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},l.prototype.hasContent=function(){return this.getTitle()},l.prototype.getPosition=function(e){var n=(e=e||this.$element)[0],i="BODY"==n.tagName,r=n.getBoundingClientRect();null==r.width&&(r=t.extend({},r,{width:r.right-r.left,height:r.bottom-r.top}));var o=window.SVGElement&&n instanceof window.SVGElement,a=i?{top:0,left:0}:o?null:e.offset(),s={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},l=i?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},r,s,l,a)},l.prototype.getCalculatedOffset=function(t,e,n,i){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-n/2}:"top"==t?{top:e.top-i,left:e.left+e.width/2-n/2}:"left"==t?{top:e.top+e.height/2-i/2,left:e.left-n}:{top:e.top+e.height/2-i/2,left:e.left+e.width}},l.prototype.getViewportAdjustedDelta=function(t,e,n,i){var r={top:0,left:0};if(!this.$viewport)return r;var o=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var s=e.top-o-a.scroll,l=e.top+o-a.scroll+i;s<a.top?r.top=a.top-s:l>a.top+a.height&&(r.top=a.top+a.height-l)}else{var c=e.left-o,u=e.left+o+n;c<a.left?r.left=a.left-c:u>a.right&&(r.left=a.left+a.width-u)}return r},l.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},l.prototype.getUID=function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},l.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},l.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},l.prototype.enable=function(){this.enabled=!0},l.prototype.disable=function(){this.enabled=!1},
+l.prototype.toggleEnabled=function(){this.enabled=!this.enabled},l.prototype.toggle=function(e){var n=this;e&&((n=t(e.currentTarget).data("bs."+this.type))||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n))),e?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},l.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})},l.prototype.sanitizeHtml=function(t){return n(t,this.options.whiteList,this.options.sanitizeFn)};var c=t.fn.tooltip;t.fn.tooltip=function(e){return this.each(function(){var n=t(this),i=n.data("bs.tooltip"),r="object"==typeof e&&e;!i&&/destroy|hide/.test(e)||(i||n.data("bs.tooltip",i=new l(this,r)),"string"==typeof e&&i[e]())})},t.fn.tooltip.Constructor=l,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=c,this}}(jQuery),function(t){"use strict";var e=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");e.VERSION="3.4.1",e.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),((e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype)).constructor=e).prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),n=this.getContent();if(this.options.html){var i=typeof n;this.options.sanitize&&(e=this.sanitizeHtml(e),"string"===i&&(n=this.sanitizeHtml(n))),t.find(".popover-title").html(e),t.find(".popover-content").children().detach().end()["string"===i?"html":"append"](n)}else t.find(".popover-title").text(e),t.find(".popover-content").children().detach().end().text(n);t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},e.prototype.hasContent=function(){return this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var n=t.fn.popover;t.fn.popover=function(n){return this.each(function(){var i=t(this),r=i.data("bs.popover"),o="object"==typeof n&&n;!r&&/destroy|hide/.test(n)||(r||i.data("bs.popover",r=new e(this,o)),"string"==typeof n&&r[n]())})},t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=n,this}}(jQuery),function(t){"use strict";function e(n,i){this.$body=t(document.body),this.$scrollElement=t(t(n).is(document.body)?window:n),this.options=t.extend({},e.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each(function(){var i=t(this),r=i.data("bs.scrollspy"),o="object"==typeof n&&n;r||i.data("bs.scrollspy",r=new e(this,o)),"string"==typeof n&&r[n]()})}e.VERSION="3.4.1",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,n="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(n="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),r=e.data("target")||e.attr("href"),o=/^#./.test(r)&&t(r);return o&&o.length&&o.is(":visible")&&[[o[n]().top+i,r]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),i=this.options.offset+n-this.$scrollElement.height(),r=this.offsets,o=this.targets,a=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),i<=e)return a!=(t=o[o.length-1])&&this.activate(t);if(a&&e<r[0])return this.activeTarget=null,this.clear();for(t=r.length;t--;)a!=o[t]&&e>=r[t]&&(void 0===r[t+1]||e<r[t+1])&&this.activate(o[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var n=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',i=t(n).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var i=t.fn.scrollspy;t.fn.scrollspy=n,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=i,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);n.call(e,e.data())})})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.tab");r||i.data("bs.tab",r=new n(this)),"string"==typeof e&&r[e]()})}var n=function(e){this.element=t(e)};n.VERSION="3.4.1",n.TRANSITION_DURATION=150,n.prototype.show=function(){var e=this.element,n=e.closest("ul:not(.dropdown-menu)"),i=e.data("target");if(i||(i=(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var r=n.find(".active:last a"),o=t.Event("hide.bs.tab",{relatedTarget:e[0]}),a=t.Event("show.bs.tab",{relatedTarget:r[0]});if(r.trigger(o),e.trigger(a),!a.isDefaultPrevented()&&!o.isDefaultPrevented()){var s=t(document).find(i);this.activate(e.closest("li"),n),this.activate(s,s.parent(),function(){r.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:r[0]})})}}},n.prototype.activate=function(e,i,r){function o(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),s?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),r&&r()}var a=i.find("> .active"),s=r&&t.support.transition&&(a.length&&a.hasClass("fade")||!!i.find("> .fade").length);a.length&&s?a.one("bsTransitionEnd",o).emulateTransitionEnd(n.TRANSITION_DURATION):o(),a.removeClass("in")};var i=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=n,t.fn.tab.noConflict=function(){return t.fn.tab=i,this};var r=function(n){n.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',r).on("click.bs.tab.data-api",'[data-toggle="pill"]',r)}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.affix"),o="object"==typeof e&&e;r||i.data("bs.affix",r=new n(this,o)),"string"==typeof e&&r[e]()})}var n=function(e,i){this.options=t.extend({},n.DEFAULTS,i);var r=this.options.target===n.DEFAULTS.target?t(this.options.target):t(document).find(this.options.target);this.$target=r.on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};n.VERSION="3.4.1",n.RESET="affix affix-top affix-bottom",n.DEFAULTS={offset:0,target:window},n.prototype.getState=function(t,e,n,i){var r=this.$target.scrollTop(),o=this.$element.offset(),a=this.$target.height();if(null!=n&&"top"==this.affixed)return r<n&&"top";if("bottom"==this.affixed)return null!=n?!(r+this.unpin<=o.top)&&"bottom":!(r+a<=t-i)&&"bottom";var s=null==this.affixed,l=s?r:o.top;return null!=n&&r<=n?"top":null!=i&&t-i<=l+(s?a:e)&&"bottom"},n.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(n.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},n.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},n.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),i=this.options.offset,r=i.top,o=i.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof i&&(o=r=i),"function"==typeof r&&(r=i.top(this.$element)),"function"==typeof o&&(o=i.bottom(this.$element));var s=this.getState(a,e,r,o);if(this.affixed!=s){null!=this.unpin&&this.$element.css("top","");var l="affix"+(s?"-"+s:""),c=t.Event(l+".bs.affix");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=s,this.unpin="bottom"==s?this.getPinnedOffset():null,this.$element.removeClass(n.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==s&&this.$element.offset({top:a-e-o})}};var i=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=n,t.fn.affix.noConflict=function(){return t.fn.affix=i,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var n=t(this),i=n.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),e.call(n,i)})})}(jQuery),define("bootstrap",["jquery"],function(){}),define("modal",["jquery","config","preferences","links","form","version","laconic","bootstrap"],function(t,e,n,i,r){!function(t){function o(e){e.hasClass("modal")||(e=e.closest(".modal")),e.find("[data-notagain]").each(function(){if(t(this).prop("checked"))return n.setNotAgain(t(this).attr("data-notagain")),!1})}function a(){var e=t.el.button({type:"button",class:"close","data-dismiss":"modal"});return t(e).html("&times;").on("click",function(e){e.preventDefault(),o(t(e.target))}),e}function s(e){return e.notagain&&n.persistent()?t.el.label(t.el.input({type:"checkbox","data-notagain":e.notagain,name:"dismiss"})," Don't show again!"):""}function l(){t(this).find(".tm-input").each(function(){var e=t(this),n=e.data("prefilled"),i={};n&&(i.prefilled=n),e.tagsManager(i)})}var c={_init:function(e){return this.each(function(){var e=t(this);e.addClass("swish-event-receiver"),e.on("help",function(t,n){e.swishModal("showHelp",n)}),e.on("pldoc",function(t,n){e.swishModal("showPlDoc",n)}),e.on("form",function(t,n){e.swishModal("showForm",n)}),e.on("dialog",function(t,n){e.swishModal("show",n)}),e.on("error",function(t,n){e.swishModal("show",n)}),e.on("alert",function(t,n){e.swishModal("show",{title:"<span class='glyphicon glyphicon-warning-sign'></span>",body:n})}),e.on("ajaxError",function(t,n){e.swishModal("showAjaxError",n)}),e.on("feedback",function(t,n){e.swishModal("feedback",n)}),e.on("show",function(t,n){e.swishModal("show",n)}),e.on("server_form",function(t,n){e.swishModal("server_form",n)})})},showHelp:function(i){var r=this;i.notagain&&n.notagain(i.notagain)||t.ajax({url:e.http.locations.help+"/"+i.file,dataType:"html",success:function(e){var n=t("<div>");n.html(e),r.swishModal("show",t.extend({title:n.find("title").text(),body:n},i))}})},showForm:function(n){var i=this;t.ajax({url:e.http.locations.form+"/"+n.file,dataType:"html",success:function(e){var r=t("<div>");r.html(e),i.swishModal("show",t.extend({title:r.find("legend").text(),body:r},n))}})},showPlDoc:function(t){function n(t){var n="("+t.name+")/"+t.arity;return t.module&&(n=t.module+":"+n),e.http.locations.pldoc_doc_for+"?header=false&object="+encodeURIComponent(n)}function i(t,e){return t.parents("div.modal-dialog").addClass("swish-embedded-manual"),"<iframe class='swish-embedded-manual' onload='javascript:resizeIframe(this);' src='"+e+"'></iframe>"}var r={title:"SWI-Prolog manual",body:function(){return i(this,n(t))}};return this.swishModal("show",r)},show:function(e){var r=t.el.div({class:"modal-body"}),c=t.el.h2(),u=t.el.div({class:"modal-content"},t.el.div({class:"modal-header"},s(e),a(),c),r),h=t.el.div({class:"modal fade",id:"ajaxModal",tabindex:-1,role:"dialog"},t.el.div({class:"modal-dialog"},u));if(e.notagain&&n.persistent()&&t(u).append(t.el.div({class:"modal-footer"},s(e))),r=t(r),"function"==typeof e.body){var d=e.body.call(r);d&&r.append(d)}else r.html(e.body);return t(c).html(e.title),t(h).modal({show:!0}).on("click","a",i.followLink).on("shown.bs.modal",function(){l(),t(this).find(".swish-versions").version()}).on("hidden.bs.modal",function(){e.onclose&&e.onclose(),o(t(this)),t(this).remove()}),this},server_form:function(e){var n=t(this);return void 0===r&&(r=require("form")),this.swishModal("show",{title:e.title,body:function(){elem=t(this),t.ajax({url:e.url,data:e.data,success:function(t){elem.append(t)},error:function(t){n.swishModal("showAjaxError",t)}}),elem.on("click","button[data-action]",function(i){var o=t(i.target).closest("form"),a=r.serializeAsObject(o,!0),s=t(i.target).closest("button");return 0==s.data("form_data")?t.ajax({url:s.data("action"),success:function(t){return s.closest(".modal").modal("hide"),e.onreply&&e.onreply.call(s[0],t),i.preventDefault(),!1},error:function(t){n.swishModal("showAjaxError",t)}}):t.ajax({url:s.data("action"),data:JSON.stringify(a),dataType:"json",contentType:"application/json",type:"POST",success:function(t){if("success"==t.status)return s.closest(".modal").modal("hide"),e.onreply&&e.onreply.call(s[0],t),i.preventDefault(),!1;"error"==t.status?r.formError(o,t.error):alert("Updated failed: "+JSON.serializeAsObject(t))},error:function(t){n.swishModal("showAjaxError",t)}}),i.preventDefault(),!1})}})},showAjaxError:function(e){var n=t.el.div();t(n).html(e.responseText);var i=t(n).find("h1"),r=i.text()||"Server error";i.remove();var o={title:r,body:n};this.swishModal("show",o)},feedback:function(e){var n=t.el.div({class:"feedback "+e.type||""});return t(n).html(e.html),t(e.owner||"body").append(n),setTimeout(function(){t(n).hide(400,function(){t(n).remove()})},e.duration||1500),this}};window.resizeIframe=function(t){t.style.height=0,t.style.height=t.contentWindow.document.body.scrollHeight+20+"px"},t.fn.swishModal=function(e){return c[e]?c[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.swishModal"):c._init.apply(this,arguments)}}(jQuery);var o=1;return{ajaxError:function(e){t(".swish-event-receiver").trigger("ajaxError",e)},feedback:function(e){t(".swish-event-receiver").trigger("feedback",e)},alert:function(e){t(".swish-event-receiver").trigger("alert",e)},help:function(e){t(".swish-event-receiver").trigger("help",e)},show:function(e){t(".swish-event-receiver").trigger("show",e)},server_form:function(e){t(".swish-event-receiver").trigger("server_form",e)},notify:function(e,n){var i="ntf-"+(n.wsid||o++),r=t.el.div({class:"notification notify-arrow",id:i}),a=e.offset();if(t("body").append(r),n.html?t(r).html(n.html):n.dom&&t(r).append(n.dom),t(r).css({left:a.left+e.width()-t(r).outerWidth()+15,top:a.top+e.height()+12}).on("click",function(){t(r).remove()}).show(n.fadeIn||400),0!==n.time){var s=n.time;s||(s=e.hasClass("myself")?1e3:5e3),setTimeout(function(){t(r).hide(n.fadeOut||400,function(){t("#"+i).remove(),n.onremove&&n.onremove(n),e.chat("unnotify",n.wsid)})},s)}}}}),function(t){"use strict";var e={prefilled:null,CapitalizeFirstLetter:!1,preventSubmitOnEnter:!0,isClearInputOnEsc:!0,externalTagId:!1,prefillIdFieldName:"Id",prefillValueFieldName:"Value",AjaxPush:null,AjaxPushAllTags:null,AjaxPushParameters:null,delimiters:[9,13,44],backspace:[8],maxTags:0,hiddenTagListName:null,hiddenTagListId:null,replace:!0,output:null,deleteTagsOnBackspace:!0,tagsContainer:null,tagCloseIcon:"x",tagClass:"",validator:null,onlyTagList:!1,tagList:null,fillInputOnTagRemove:!1},n={pushTag:function(e,n,r){var o,a,s,l,c,u,h,d,f,p,g,m=t(this),v=m.data("opts"),y=m.data("tlis"),b=m.data("tlid");if((e=i.trimTag(e,v.delimiterChars))&&!(e.length<=0)){if(v.onlyTagList&&void 0!==v.tagList&&v.tagList){var x=v.tagList;t.each(x,function(t,e){x[t]=e.toLowerCase()});if(-1===t.inArray(e.toLowerCase(),x))return}if(v.CapitalizeFirstLetter&&e.length>1&&(e=e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()),v.validator&&!v.validator(e))return void m.trigger("tm:invalid",e);if(!(v.maxTags>0&&y.length>=v.maxTags)){if(o=!1,a=jQuery.map(y,function(t){return t.toLowerCase()}),c=t.inArray(e.toLowerCase(),a),-1!==c&&(o=!0),o)if(m.trigger("tm:duplicated",e),v.blinkClass)for(var w=0;w<6;++w)t("#"+m.data("tm_rndid")+"_"+b[c]).queue(function(e){t(this).toggleClass(v.blinkClass),e()}).delay(100);else t("#"+m.data("tm_rndid")+"_"+b[c]).stop().animate({backgroundColor:v.blinkBGColor_1},100).animate({backgroundColor:v.blinkBGColor_2},100).animate({backgroundColor:v.blinkBGColor_1},100).animate({backgroundColor:v.blinkBGColor_2},100).animate({backgroundColor:v.blinkBGColor_1},100).animate({backgroundColor:v.blinkBGColor_2},100);else!0===v.externalTagId?(void 0===r&&t.error("externalTagId is not passed for tag -"+e),l=r):(s=Math.max.apply(null,b),s=s===-1/0?0:s,l=++s),n||m.trigger("tm:pushing",[e,l]),y.push(e),b.push(l),n||null!==v.AjaxPush&&null==v.AjaxPushAllTags&&-1===t.inArray(e,v.prefilled)&&t.post(v.AjaxPush,t.extend({tag:e},v.AjaxPushParameters)),u=m.data("tm_rndid")+"_"+l,h=m.data("tm_rndid")+"_Remover_"+l,d=t("<span/>").text(e).html(),f='<span class="'+i.tagClasses.call(m)+'" id="'+u+'">',f+="<span>"+d+"</span>",f+='<a href="#" class="tm-tag-remove" id="'+h+'" TagIdToRemove="'+l+'">',f+=v.tagCloseIcon+"</a></span> ",p=t(f),null!==v.tagsContainer?t(v.tagsContainer).append(p):b.length>1?(g=m.siblings("#"+m.data("tm_rndid")+"_"+b[b.length-2]),g.after(p)):m.before(p),p.find("#"+h).on("click",m,function(e){e.preventDefault();var n=parseInt(t(this).attr("TagIdToRemove"));i.spliceTag.call(m,n,e.data)}),i.refreshHiddenTagList.call(m),n||m.trigger("tm:pushed",[e,l]),i.showOrHide.call(m);m.val("")}}},popTag:function(){var e,n,r=t(this),o=r.data("tlis"),a=r.data("tlid");a.length>0&&(e=a.pop(),n=o[o.length-1],r.trigger("tm:popping",[n,e]),o.pop(),t("#"+r.data("tm_rndid")+"_"+e).remove(),i.refreshHiddenTagList.call(r),r.trigger("tm:popped",[n,e]))},empty:function(){for(var e,n=t(this),r=n.data("tlis"),o=n.data("tlid");o.length>0;)e=o.pop(),r.pop(),t("#"+n.data("tm_rndid")+"_"+e).remove(),i.refreshHiddenTagList.call(n);n.trigger("tm:emptied",null),i.showOrHide.call(n)},tags:function(){return this.data("tlis")}},i={showOrHide:function(){var t=this,e=t.data("opts"),n=t.data("tlis");e.maxTags>0&&n.length<e.maxTags&&(t.show(),t.trigger("tm:show")),e.maxTags>0&&n.length>=e.maxTags&&(t.hide(),t.trigger("tm:hide"))},tagClasses:function(){var e,n=t(this),i=n.data("opts"),r=i.tagBaseClass,o=i.inputBaseClass;return e=r,n.attr("class")&&t.each(n.attr("class").split(" "),function(t,n){-1!==n.indexOf(o+"-")&&(e+=" "+r+n.substring(o.length))}),e+=i.tagClass?" "+i.tagClass:""},trimTag:function(e,n){var i;for(e=t.trim(e),i=0;i<e.length&&-1===t.inArray(e.charCodeAt(i),n);i++);return e.substring(0,i)},refreshHiddenTagList:function(){var e=t(this),n=e.data("tlis"),i=e.data("lhiddenTagList");i&&t(i).val(n.join(e.data("opts").baseDelimiter)).change(),e.trigger("tm:refresh",n.join(e.data("opts").baseDelimiter))},killEvent:function(t){t.cancelBubble=!0,t.returnValue=!1,t.stopPropagation(),t.preventDefault()},keyInArray:function(e,n){return-1!==t.inArray(e.which,n)},applyDelimiter:function(e){var i=t(this);n.pushTag.call(i,t(this).val()),e.preventDefault()},prefill:function(e){var i=t(this),r=i.data("opts");t.each(e,function(t,e){!0===r.externalTagId?n.pushTag.call(i,e[r.prefillValueFieldName],!0,e[r.prefillIdFieldName]):n.pushTag.call(i,e,!0)})},pushAllTags:function(e,n){var i=t(this),r=i.data("opts"),o=i.data("tlis");r.AjaxPushAllTags&&("tm:pushed"===e.type&&-1!==t.inArray(n,r.prefilled)||t.post(r.AjaxPush,t.extend({tags:o.join(r.baseDelimiter)},r.AjaxPushParameters)))},spliceTag:function(e){var n,r=this,o=r.data("tlis"),a=r.data("tlid"),s=t.inArray(e,a);-1!==s&&(n=o[s],r.trigger("tm:splicing",[n,e]),t("#"+r.data("tm_rndid")+"_"+e).remove(),o.splice(s,1),a.splice(s,1),i.refreshHiddenTagList.call(r),r.trigger("tm:spliced",[n,e])),i.showOrHide.call(r)},init:function(r){var o,a,s=t.extend({},e,r);return s.hiddenTagListName=null===s.hiddenTagListName?"hidden-"+this.attr("name"):s.hiddenTagListName,o=s.delimeters||s.delimiters,a=[9,13,17,18,19,37,38,39,40],s.delimiterChars=[],s.delimiterKeys=[],t.each(o,function(e,n){-1!==t.inArray(n,a)?s.delimiterKeys.push(n):s.delimiterChars.push(n)}),s.baseDelimiter=String.fromCharCode(s.delimiterChars[0]||44),s.tagBaseClass="tm-tag",s.inputBaseClass="tm-input",t.isFunction(s.validator)||(s.validator=null),this.each(function(){var e=t(this),r="",o="",a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";if(e.data("tagManager"))return!1;e.data("tagManager",!0);for(var l=0;l<5;l++)o+=a.charAt(Math.floor(Math.random()*a.length));if(e.data("tm_rndid",o),e.data("opts",s).data("tlis",[]).data("tlid",[]),null===s.output?(r=t("<input/>",{type:"hidden",name:s.hiddenTagListName}),e.after(r),e.data("lhiddenTagList",r)):e.data("lhiddenTagList",t(s.output)),s.AjaxPushAllTags&&(e.on("tm:spliced",i.pushAllTags),e.on("tm:popped",i.pushAllTags),e.on("tm:pushed",i.pushAllTags)),e.on("focus keypress",function(e){t(this).popover&&t(this).popover("hide")}),s.isClearInputOnEsc&&e.on("keyup",function(e){27===e.which&&(t(this).val(""),i.killEvent(e))}),e.on("keypress",function(t){i.keyInArray(t,s.delimiterChars)&&i.applyDelimiter.call(e,t)}),e.on("keydown",function(t){13===t.which&&s.preventSubmitOnEnter&&i.killEvent(t),i.keyInArray(t,s.delimiterKeys)&&i.applyDelimiter.call(e,t)}),s.deleteTagsOnBackspace&&e.on("keydown",function(r){i.keyInArray(r,s.backspace)&&t(this).val().length<=0&&(n.popTag.call(e),i.killEvent(r))}),s.fillInputOnTagRemove&&e.on("tm:popped",function(e,n){t(this).val(n)}),e.change(function(t){/webkit/.test(navigator.userAgent.toLowerCase())||e.focus(),i.killEvent(t)}),null!==s.prefilled)"object"==typeof s.prefilled?i.prefill.call(e,s.prefilled):"string"==typeof s.prefilled?i.prefill.call(e,s.prefilled.split(s.baseDelimiter)):"function"==typeof s.prefilled&&i.prefill.call(e,s.prefilled());else if(null!==s.output){if(t(s.output)&&t(s.output).val()){t(s.output)}i.prefill.call(e,t(s.output).val().split(s.baseDelimiter))}}),this}};t.fn.tagsManager=function(e){var r=t(this);return 0 in this?n[e]?n[e].apply(r,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?(t.error("Method "+e+" does not exist."),!1):i.init.apply(this,arguments):this}}(jQuery),define("tagmanager",["jquery"],function(){}),define("form",["jquery","config","modal","laconic","tagmanager"],function(t,e,n){function i(t){return void 0===t&&(t=u),"col-xs-"+(12-t)}function r(e,n,i){return i=i||u,t.el.label({class:"control-label col-xs-"+i,for:e},n)}function o(e,n){var i={name:e,type:"checkbox"};return n=n||{},n.checked&&(i.checked="checked"),n.title&&(i.title=n.title),t.el.input(i)}function a(e,n){var i={name:e,type:"text",class:"form-control"};return n=n||{},n.placeholder&&(i.placeholder=n.placeholder),n.title&&(i.title=n.title),n.value&&(i.value=n.value),n.disabled&&(i.disabled=n.disabled),n.readonly&&(i.readonly=n.readonly),n.type&&(i.type=n.type),t.el.input(i)}function s(e,n,i){var r={name:e,type:"text",class:"tm-input tag-list"};n&&(r.placeholder=n);var o=t.el.input(r);return i&&t(o).data("prefilled",i),o}function l(e,n){var i={name:e,class:"form-control"};return n=n||{},n.placeholder&&(i.placeholder=n.placeholder),t.el.textarea(i,n.value||"")}function c(e,n,i){var r=t(t.el.select({class:"form-control",name:e}));i=i||{};for(var o=0;o<n.length;o++)!function(e){if("string"==typeof e)e==i.value?r.append(t.el.option({selected:"selected"},e)):r.append(t.el.option(e));else{var n={value:e.value};e.value==i.value&&(n.selected="selected"),r.append(t.el.option(n,e.label))}}(n[o]);return r[0]}var u=3,h={serializeAsObject:function(e,n){var i=e.serializeArray(),r=[],o={};e.find("div.checkboxes.array").each(function(){var e=t(this),n=[];e.find("input:checked").each(function(){var e=t(this).attr("name");n.push(e)}),e.find("input").each(function(){var e=t(this).attr("name");r.push(e)}),o[e.attr("name")]=n});for(var a=0;a<i.length;a++){var s,l=i[a].name,c=i[a].value,u=e.find('[name="'+l+'"]'),h=u.prop("type");(s=u.data("json-value"))?o[l]=s:""==c&&1!=n||("hidden"==h&&0==l.indexOf("hidden-")?(l=l.slice("hidden-".length),void 0==o[l]?o[l]=c.split(","):o[l]=c.split(",").concat(o[l])):"text"==h&&u.hasClass("tag-list")?""!=c&&(void 0!==o[l]?o[l].push(c):o[l]=[c]):"number"==h?o[l]=parseInt(c):"checkbox"==h?-1==r.indexOf(l)&&(o[l]="on"==c):o[l]=c)}return e.find("[type=checkbox]").each(function(){var e=t(this),n=e.prop("name");1!=e.prop("disabled")&&void 0===o[n]&&-1==r.indexOf(n)&&(o[n]=!1)}),o},formError:function(t,e){if(t.find(".has-error").removeClass("has-error"),t.find(".help-block.with-errors").remove(),e)if("form_error"==e.code||"input_error"==e.code){errors=e.data.split("\n");for(var i=0;i<errors.length;i++){var r=errors[i].split(/:\s*(.*)?/);h.fieldError(t,r[0],r[1])}}else n.alert(e.data)},fieldError:function(e,n,i){var r=e.find("input[name="+n+"]");if(r.length>0){var o=r.closest(".form-group");r.parent().hasClass("input-group")&&(r=r.parent()),o.addClass("has-error"),r.after(t.el.p({class:"help-block with-errors"},i))}else alert("Missing value for "+n)},showDialog:function(e){t(".swish-event-receiver").trigger("dialog",e)},formBroadcast:function(e,n){t(".swish-event-receiver").trigger(e,n)},dyn_clear:function(e,n){e.find('.has-clear input[type="text"]').on("input propertychange",function(){var e=t(this),n=Boolean(e.val());e.siblings(".form-control-clear").toggleClass("hidden",!n)}).trigger("propertychange"),e.find(".form-control-clear").click(function(){var e=t(this).siblings('input[type="text"]');e.val("").trigger("propertychange").focus(),n&&n.call(e)})},fields:{fileName:function(n,s,l,c){var u,h,d,f="(leave empty for generated random name)",p=e.swish.community_examples&&void 0!=l;u=p?"Public | Example | name":"Public | name";var g=t.el.div({class:"form-group"},r("name",u),t.el.div({class:i()},t.el.div({class:"input-group"},t.el.span({class:"input-group-addon",title:"If checked, other users can find this program"},o("public",{checked:s})),p?t.el.span({class:"input-group-addon",title:"If checked, add to examples menu"},o("example",{checked:l})):void 0,d=a("name",{placeholder:"Name "+f,title:"Public name of your program",value:n,disabled:c}),n?h=t.el.span({class:"input-group-btn"},t.el.button({class:"btn btn-success",type:"button"},"Fork")):void 0)));return h&&t(h).on("click",function(){var e=t(d).closest("form").find(".btn.btn-primary");t(d).attr("placeholder","Fork as "+f),t(d).val(""),e.text(e.text().replace("Update","Fork"))}),g},title:function(e){return t.el.div({class:"form-group"},r("title","Title"),t.el.div({class:i()},a("title",{placeholder:"Descriptive title",value:e})))},author:function(e,n){var o={placeholder:"Your name",value:e};return e&&n&&(o.readonly=!0,o.title="Verified author name"),t.el.div({class:"form-group"},r("author","Author"),t.el.div({class:i()},a("author",o)))},link:function(e){var n={readonly:!0,title:"Permalink",value:e};return t.el.div({class:"form-group"},r("link","Link"),t.el.div({class:i()},a("link",n)))},date:function(e,n,o){return o=o||r,t.el.div({class:"form-group"},r(o,n),t.el.div({class:i()},a(o,{disabled:!0,value:new Date(1e3*e).toLocaleString()})))},description:function(e){return t.el.div({class:"form-group"},r("description","Description"),t.el.div({class:i()},l("description",{value:e})))},commit_message:function(e){return t.el.div({class:"form-group"},r("commit_message","Changes"),t.el.div({class:i()},l("commit_message",{value:e,placeholder:"Describe your changes here"})))},description:function(e){return t.el.div({class:"form-group"},r("description","Description"),t.el.div({class:i()},l("description",{value:e,placeholder:"Description"})))},tags:function(e){return t.el.div({class:"form-group"},r("tags","Tags"),t.el.div({class:i()},s("tags","Tags help finding this code",e)))},modify:function(t,e){function n(n,r){i.push({name:n,label:r,value:-1!=t.indexOf(n),readonly:!e})}var i=[],r={name:"modify",label:"Can save new version",type:"array"};return n("any","Anyone"),n("login","Logged in users"),n("owner","Only me"),r.title=e?"Specify who can save an updated version of this file":"Only logged in users and owners can set permissions",h.fields.checkboxes(i,r)},follow:function(t){return h.fields.checkboxes([{name:"follow",label:"Follow this document",value:!!t,readonly:!t}],{name:"options",label:"",title:"Notify about activity (updates, chat)\nRequires being logged in with valid email"})},projection:function(e){return t.el.div({class:"form-group"},r("projection","Projection"),t.el.div({class:i()},a("projection",{placeholder:"Columns",value:e})))},csvFormat:function(e,n){return e=e||["prolog"],n=n||e[0],1==e.length?t.el.input({type:"hidden",name:"format",value:e[0]}):t.el.div({class:"form-group"},r("format","Format"),t.el.div({class:i()},c("format",e,{value:n})))},limit:function(e,n){return t.el.div({class:"form-group"},r("name","Distinct | limit"),t.el.div({class:i()},t.el.div({class:"input-group"},t.el.span({class:"input-group-addon",title:"If checked only return distinct results"},o("distinct",{checked:n})),a("limit",{placeholder:"Maximum result count (blank for unlimited)",title:"Limit results",value:e}))))},checkboxes:function(e,n){var i;n=t.extend({name:"options",label:"Options",col:u},n||{});var o={class:"checkboxes col-xs-"+(12-n.col),name:n.name};n.title&&(o.title=n.title),n.type&&(o.class+=" "+n.type);for(var a=t.el.div({class:"form-group"},r(n.name,n.label,n.col),i=t.el.div(o)),s=0;s<e.length;s++){var l=e[s],c={type:"checkbox",name:l.name,autocomplete:"false"};l.value&&(c.checked="checked"),l.readonly&&(c.disabled="disabled"),t(i).append(t.el.label({class:"checkbox-inline"},t.el.input(c),l.label))}return a},chunk:function(e){return t.el.div({class:"form-group"},r("count","Initial solutions",3),t.el.div({class:"col-xs-9"},t.el.div({class:"input-group"},a("chunk",{title:"Initial number of solutions",type:"number",value:e}))))},name:function(e,n){return n=n||3,t.el.div({class:"form-group"},r("name","Name",n),t.el.div({class:"col-xs-"+(12-n)},a("name",{placeholder:"Name",value:e})))},filename:function(e,n){return n=n||3,t.el.div({class:"form-group"},r("filename","File name",n),t.el.div({class:"col-xs-"+(12-n)},a("filename",{placeholder:"File name",value:e})))},hidden:function(e,n){if(void 0!==n)return t.el.input({type:"hidden",name:e,value:n})},buttons:function(e){e=e||{};var n=e.label||"Save program",i=e.offset||u,r=t.el.button({name:"save",class:"btn btn-primary"},n);return t(r).on("click",function(n){var i=t(n.target).parents("form")[0],r=h.serializeAsObject(t(i));return e.action(n,r),t(n.target).parents(".modal").modal("hide"),n.preventDefault(),!1}),t.el.div({class:"form-group"},t.el.div({class:"col-xs-offset-"+i+" col-xs-"+(12-i)},r,t.el.button({name:"cancel",class:"btn btn-danger","data-dismiss":"modal"},"Cancel")))},radio:function(e,n,i){var r=t.el.div({class:"btn-group","data-toggle":"buttons"});i=i||"radio";for(var o=0;o<n.length;o++){var a="btn btn-default btn-xs";n[o].active&&(a+=" active");var s={type:i,name:e,autocomplete:"off",value:n[o].value},l={class:a};n[o].title&&(l.title=n[o].title),t(r).append(t.el.label(l,t.el.input(s),n[o].label))}return r}},widgets:{glyphIcon:function(e){return t.el.span({class:"glyphicon glyphicon-"+e})},typeIcon:function(e){return t.el.span({class:"dropdown-icon type-icon "+e})},glyphIconButton:function(e,n){var i={class:"btn",type:"button"};return n.action&&(i["data-action"]=n.action),n.title&&(i.title=n.title),n.class&&(i.class+=" "+n.class),t.el.button(i,h.widgets.glyphIcon(e))},
+dropdownButton:function(e,n){n||(n={});var i=n.divClass,r=n.ulClass,o=t.el.div({class:"btn-group dropdown"+(i?" "+i:"")},t.el.button({class:"dropdown-toggle","data-toggle":"dropdown"},e),t.el.ul({class:"dropdown-menu"+(r?" "+r:"")}));return n.actions&&h.widgets.populateMenu(t(o),n.client,n.actions),o},populateMenu:function(e,n,i){function r(e,i){var r=t(i).data("action");r&&r.call(n,i)}var o=e.find(".dropdown-menu"),a=o.data("menu")||{};for(var s in i)i.hasOwnProperty(s)&&function(e,n){if(void 0!==n)if(0==e.indexOf("--"))o.append(t.el.li({class:"divider"}));else{var i=t.el.a(e);t(i).data("action",n),o.append(t.el.li(i))}}(s,i[s]);return a.bound||(a.bound=!0,o.on("click","a",function(t){r(t,this)})),o.data("menu",a),e}}};return h}),define("history",["jquery","preferences","form","utils"],function(t,e,n,i){var r={push:function(t){if(window.location.pathname!=t.url){var e={location:t.url,reason:t.reason};window.history.pushState(e,"",t.url),document.title="SWISH -- "+(t.url?i.basename(t.url):"SWI-Prolog for SHaring")}},pop:function(t){},recentMaxLength:10,addRecent:function(t){for(var n=e.getVal("recentDocuments")||[],i=0;i<n.length;i++)if(function(t,e){return t.type==e.type&&t.id==e.id}(t,n[i])){n.splice(i,1);break}for(;n.length+1>r.recentMaxLength;)n.pop();n.splice(0,0,t),e.setVal("recentDocuments",n)},openRecent:function(t,e){return r.openRecent[e.st_type](t,e)},updateRecentUL:function(){var i=t(this),r=e.getVal("recentDocuments")||[];i.html("");for(var o=0;o<r.length;o++){var a=r[o];if(a.id){var s=t.el.a(n.widgets.typeIcon(a.id.split(".").pop()),a.label||a.id);t(s).data("document",a),i.append(t.el.li(s))}}}};return r.openRecent.gitty=function(e,n){t(e.target).parents(".swish").swish("playFile",n.id)},window.onpopstate=r.pop,r}),define("svgavatar",["jquery","laconic"],function(){!function(t){var e={_init:function(e){return this.each(function(){var e=t(this),n={};e.data("svgavatar",n)})},setAVappearanceByUserID:function(e){return t(this).each(function(){var n=t(this),i=2097151&e;n.svgavatar("selectAppearance","hair",7&i),n.svgavatar("setFill","hair",["#000000","#CC4400","#FFFF22","#9f220B"][i>>3&3]),n.svgavatar("selectAppearance","body",i>>5&3),n.svgavatar("setFill","body",["#95D155","#19A6BA","#F03C9B","#0B061F"][i>>7&3]),n.svgavatar("selectAppearance","eyes",i>>9&7),n.svgavatar("selectAppearance","nose",i>>11&3),n.svgavatar("selectAppearance","mouth",i>>13&7)})},selectAppearance:function(e,n){t(this).find("#"+e+" g").css("display","none"),t(this).find("#"+e+" g:nth-child("+n+")").css("display","inherit")},setFill:function(e,n){return t(this).each(function(){t(this).find("#"+e+" [fill]").attr("fill",n)})}};t.fn.svgavatar=function(n){return e[n]?e[n].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof n&&n?void t.error("Method "+n+" does not exist on jQuery.svgavatar"):e._init.apply(this,arguments)}}(jQuery)}),define("chat",["jquery","config","preferences","form","modal","utils","svgavatar"],function(t,e,n,i,r,o){function a(e){var n;if(e.avatar){var i=/(.*\.svg)#(\d+)$/.exec(e.avatar);if(i&&i[2]){var o=parseInt(i[2],10),a=i[1];n=t.el.span({class:"avatar svg"}),s[a]?t(n).html(s[a]).svgavatar("setAVappearanceByUserID",o):t.ajax({url:e.avatar,type:"GET",dataType:"text",success:function(e){s[a]=e,t(n).html(e).svgavatar("setAVappearanceByUserID",o)},error:function(t){r.ajaxError(t)}})}else n=t.el.img({class:"avatar",src:e.avatar})}else n=t.el.span({class:"avatar glyphicon glyphicon-user"});return t.el.div({class:"avatar-container"},n)}!function(t){function s(e,r){r=r||{};var o,s,l=r.name;l||"self"!=r.role||(l="Me"),l||(l=e);var c=t.el.li({class:"dropdown user",id:e,title:l},s=t.el.a({class:"dropdown-toggle avatar","data-toggle":"dropdown"},a(r)),o=t.el.ul({class:"dropdown-menu pull-right",title:""}));if("self"==r.role){t(s).append(t.el.b({class:"caret"}));var u=t.el.input({type:"text",placeholder:"Nick name",value:r.name||"",title:"Nick name"});o.append(t.el.li(u)),t(u).keypress(function(e){if(13==e.which){var i=t(u).val().trim();""!=i&&(t("#chat").trigger("send",{type:"set-nick-name",name:i}),n.setVal("nick-name",i)),t(u).closest(".dropdown.open").removeClass("open")}}),i.widgets.populateMenu(t(c),t("#chat"),{}),o.append(t.el.li({class:"divider"}))}return c}function l(){return(new Date).getTime()}var c=1e4,u=null,h={_init:function(n){return this.each(function(){var n=t(this),i={};n.data("chat",i),n.on("click",function(e){var i=t(e.target).closest("li.user");1==i.length&&n.chat("unnotify",i.attr("id"))}),n.on("send",function(t,e){n.chat("send",e)}),t(window).bind("beforeunload",function(){n.chat("disconnect")}),e.swish.chat&&n.chat("connect")})},connect:function(){function t(t,i){var r=n.getVal(i);r&&("anon-avatar"==i&&(r=-1==r.indexOf("#")?e.http.locations.avatar+r.split("/").pop():e.http.locations.swish+"icons/"+r.split("/").pop()),o+=a+t+"="+encodeURIComponent(r),a="&")}var i=this,r=this.data("chat"),o=window.location.host+e.http.locations.swish_chat,a="?",s=window.location.protocol.replace("http","ws");if(r.connection&&3!=r.connection.readyState)return this;t("avatar","anon-avatar"),t("nickname","nick-name"),r.reconnect&&(o+=a+"reconnect="+encodeURIComponent(r.reconnect),a="&");try{r.connection=new WebSocket(s+"//"+o,["v1.chat.swish.swi-prolog.org"])}catch(t){return void i.chat("userCount",void 0)}r.connection.onerror=function(t){i.chat("userCount",void 0)},r.connection.onclose=function(t){null==u?(c*=2)>3e5&&(c=3e5):l()-u>3e5?c=1e4:(c*=2)>3e5&&(c=3e5),setTimeout(function(){i.chat("connect")},c)},r.connection.onmessage=function(t){var e=JSON.parse(t.data);e.origin=t.origin,e.type?i.chat(e.type,e):console.log(t)},r.connection.onopen=function(){}},empty_queue:function(){for(var t=this.data("chat");t.queue&&t.queue.length>0&&1==t.connection.readyState;){var e=t.queue.shift();t.connection.send(e)}},disconnect:function(){var t=this.data("chat");return t.connection&&(this.chat("send",{type:"unload"}),t.connection.onclose=function(){},t.connection.close(),t.connection=void 0),this},send:function(t){var e=this.data("chat");if(e&&e.connection){var n=JSON.stringify(t);1!=e.connection.readyState?(e.queue?e.queue.push(n):e.queue=[n],this.chat("connect")):e.connection.send(n)}return this},subscribe:function(t,e){var n={type:"subscribe",channel:t};e&&(n.sub_channel=e),this.chat("send",n)},unsubscribe:function(t,e){var n={type:"unsubscribe",channel:t};sub_channel&&(n.sub_channel=sub_channel),this.chat("send",n)},welcome:function(e){var i=this.data("chat");i.wsid&&i.wsid!=e.wsid&&this.html(""),i.wsid=e.wsid,i.reconnect=e.reconnect,e.avatar&&"generated"==e.avatar_source&&n.setVal("anon-avatar",e.avatar),e.role="self";var r=this.chat("addUser",e);t(r).addClass("myself"),this.chat("userCount",e.visitors),u=l(),e.check_login?t("#login").login("update","check"):t(".sourcelist").trigger("login"),t(".storage").storage("chat_status"),this.chat("empty_queue")},userCount:function(e){var n=t("#user-count");void 0==e?n.parent().hide():(n.parent().show(),n.text(e))},gazers:function(t){if(t.gazers)for(var e=0;e<t.gazers.length;e++){var n=t.gazers[e];this.chat("addUser",n),n.file&&this.chat("addUserFile",n.wsid,n.file)}},profile:function(e){var i=this.data("chat"),r=t("#"+e.wsid);r.children("a").html("").append(a(e)),e.avatar&&(t("*[data-userid="+e.wsid+"] img.avatar").attr("src",e.avatar),"generated"==e.avatar_source&&n.setVal("anon-avatar",e.avatar)),e.name&&(r.prop("title",e.name),"set-nick-name"==e.reason&&(e.html="Named <i>"+o.htmlEncode(e.name)+"</i>",this.chat("notifyUser",e))),i.wsid==e.wsid&&t(".sourcelist").trigger("login")},rejoined:function(e){var n=t("#"+e.wsid);this.chat("lost",n,!1),e.visitors&&this.chat("userCount",e.visitors)},joined:function(t){t.visitors&&this.chat("userCount",t.visitors)},session_closed:function(){t("#login").login("update","session-closed")},notify:function(t){this.chat("notifyUser",t)},"chat-message":function(n){var i=t("div.chatroom").chatroom("rooms",n.docid);t(".storage").storage("chat_message",n),n.docid=="gitty:"+e.swish.hangout&&t("#broadcast-bell").chatbell("chat-message",n),i.length>0?(i.chatroom("add",n),n.displayed=!0):t("#"+n.user.id).length>0&&(msg=t.extend({},n),msg.wsid=n.user.id,msg.html="Wants to chat",this.chat("notifyUser",msg))},forbidden:function(t){r.alert(t.message||"Action is forbidden")},read_until:function(t,e){n.setDocVal(t,"chatBar",e)},broadcast_room:function(){return this.closest(".swish").find(".storage").storage("match",{file:e.swish.hangout})},notifyUser:function(t){var n=this;(function(t){return("opened"==t.event||"closed"==t.event)&&t.event_argv&&t.event_argv[0]==e.swish.hangout})(t)&&!this.chat("broadcast_room")&&(t.create_user=!1);var i=this.chat("addUser",t);i&&i.length>0&&(t.onremove=function(){n.chat("unnotify",t.wsid)},r.notify(i,t),this.chat("updateFiles",t))},unnotify:function(e){return t("#"+e).hasClass("removed")&&this.chat("removeUser",e),this},updateFiles:function(e){function n(){return e.event_argv[0]}var i=t(this).data("chat");if("opened"==e.event)this.chat("addUserFile",e.wsid,n());else if("closed"==e.event){var r=e.wsid==i.wsid?void 0:e.wsid;this.chat("removeUserFile",r,n(),!0)}},addUser:function(e){var n=t("#"+e.wsid);if(0==n.length){if(0==e.create_user)return null;n=t(s(e.wsid,e)),this.prepend(n)}else this.chat("lost",n,!1);return n},removeUser:function(e){"string"==typeof e&&(e={wsid:e}),void 0!==e.visitors&&this.chat("userCount",e.visitors);var n=t("#"+e.wsid);return 0==n.length?this:("close"!=e.reason?t("#ntf-"+e.wsid).length>0?n.addClass("removed"):n.hide(400,function(){this.remove()}):this.chat("lost",n,!0),this)},lost:function(e,n){n?e.addClass("lost"):e.removeClass("lost"),e.each(function(){var i=t(this);if(n)i.data("lost-timer",setTimeout(function(){e.hasClass("lost")&&e.remove()},6e4));else{var r=i.data("lost-timer");r&&(clearTimeout(r),i.data("lost-timer",void 0))}})},user_info:function(e){var n=t(this),i={};if((!e||e.indexOf("id")>=0)&&(i.id=n.attr("id")),!e||e.indexOf("name")>=0){var r=n.prop("title");r&&"Me"!==r&&(i.name=r)}return(!e||e.indexOf("avatar")>=0)&&(i.avatar=n.find("img.avatar").attr("src")),i},users:function(e){var n=[],i={users:n};return this.find("li.user[id]").each(function(){var r=t(this),o=r.hasClass("myself"),a=r.chat("user_info",o?void 0:e);o&&(i.self=t.extend({},a),a.is_self=!0),n.push(a)}),i},self:function(t){return this.find("li.user.myself[id]").chat("user_info",t)},addUserFile:function(e,n){var i,r=t("#"+e),o=r.find("ul.dropdown-menu");if(o.find("li.file").each(function(){if(t(this).data("file")==n)return i=this,!1}),void 0==i){var a=n.split(".").pop();o.append(t.el.li({class:"file","data-file":n,title:"Shared file"},t.el.a(t.el.span({class:"dropdown-icon type-icon "+a}),n)))}return this},removeUserFile:function(e,n,i){function r(e){var r=e.children("ul.dropdown-menu");r.find("li.file").each(function(){if(t(this).data("file")==n)return t(this).remove(),i&&!e.hasClass("myself")&&0==r.find("li.file").length&&o.chat("removeUser",e.attr("id")),!1})}var o=this;e?r(t("#"+e)):this.children().each(function(){r(t(this))})}};t.fn.chat=function(e){return h[e]?h[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.chat"):h._init.apply(this,arguments)}}(jQuery);var s={};return{avatar:a}}),function(t,e){var n=0,i=null,r=[],o=null;t.fn.split=function(e){function a(t){if("number"==typeof t)return t;if("string"==typeof t){var e=t.match(/^([0-9\.]+)(px|%)$/);if(e){if("px"==e[2])return+e[1];if("vertical"==u.orientation)return f*+e[1]/100;if("horizontal"==u.orientation)return p*+e[1]/100}}}var s=this.data("splitter");if(s)return s;var l,c,u=t.extend({limit:100,orientation:"horizontal",position:"50%",invisible:!1,onDragStart:t.noop,onDragEnd:t.noop,onDrag:t.noop},e||{});this.settings=u;var h,d=this.children();"vertical"==u.orientation?(l=d.first().addClass("left_panel"),c=l.next().addClass("right_panel"),h="vsplitter"):"horizontal"==u.orientation&&(l=d.first().addClass("top_panel"),c=l.next().addClass("bottom_panel"),h="hsplitter"),u.invisible&&(h+=" splitter-invisible");var f=this.width(),p=this.height(),g=n++;this.addClass("splitter_panel");var m,v=t("<div/>").addClass(h).bind("mouseenter touchstart",function(){i=g}).bind("mouseleave touchend",function(){i=null}).insertAfter(l),y=t.extend(this,{refresh:function(){var t=this.width(),e=this.height();f==t&&p==e||(f=this.width(),p=this.height(),y.position(m))},position:function(){return"vertical"==u.orientation?function(t,e){if(void 0===t)return m;m=a(t);var n=v.width(),i=n/2;if(u.invisible){var r=l.width(m).outerWidth();c.width(y.width()-r),v.css("left",r-i)}else{var r=l.width(m-i).outerWidth();c.width(y.width()-r-n),v.css("left",r)}return e||y.find(".splitter_panel").trigger("splitter.resize"),y}:"horizontal"==u.orientation?function(t,e){if(void 0===t)return m;m=a(t);var n=v.height(),i=n/2;if(u.invisible){var r=l.height(m).outerHeight();c.height(y.height()-r),v.css("top",r-i)}else{var r=l.height(m-i).outerHeight();c.height(y.height()-r-n),v.css("top",r)}return e||y.find(".splitter_panel").trigger("splitter.resize"),y}:t.noop}(),orientation:u.orientation,limit:u.limit,isActive:function(){return i===g},destroy:function(){y.removeClass("splitter_panel"),v.unbind("mouseenter"),v.unbind("mouseleave"),v.unbind("touchstart"),v.unbind("touchmove"),v.unbind("touchend"),v.unbind("touchleave"),v.unbind("touchcancel"),"vertical"==u.orientation?(l.removeClass("left_panel"),c.removeClass("right_panel")):"horizontal"==u.orientation&&(l.removeClass("top_panel"),c.removeClass("bottom_panel")),y.unbind("splitter.resize"),y.find(".splitter_panel").trigger("splitter.resize"),r[g]=null,v.remove();for(var e=!1,i=r.length;i--;)if(null!==r[i]){e=!0;break}e||(t(document.documentElement).unbind(".splitter"),t(window).unbind("resize.splitter"),y.data("splitter",null),r=[],n=0)}});y.bind("splitter.resize",function(t){var e=y.position();"vertical"==y.orientation&&e>y.width()?e=y.width()-y.limit-1:"horizontal"==y.orientation&&e>y.height()&&(e=y.height()-y.limit-1),e<y.limit&&(e=y.limit+1),y.position(e,!0)});var b;return"vertical"==u.orientation?b=b>f-u.limit?f-u.limit:a(u.position):"horizontal"==u.orientation&&(b=b>p-u.limit?p-u.limit:a(u.position)),b<u.limit&&(b=u.limit),y.position(b,!0),0==r.length&&(t(window).bind("resize.splitter",function(){t.each(r,function(t,e){e&&e.refresh()})}),t(document.documentElement).bind("mousedown.splitter touchstart.splitter",function(e){if(null!==i)return o=r[i],t('<div class="splitterMask"></div>').css("cursor",o.children().eq(1).css("cursor")).insertAfter(o),o.settings.onDragStart(e),!1}).bind("mouseup.splitter touchend.splitter touchleave.splitter touchcancel.splitter",function(e){o&&(t(".splitterMask").remove(),o.settings.onDragEnd(e),o=null)}).bind("mousemove.splitter touchmove.splitter",function(t){if(null!==o){var e=o.limit,n=o.offset();if("vertical"==o.orientation){var i=t.pageX;t.originalEvent&&t.originalEvent.changedTouches&&(i=t.originalEvent.changedTouches[0].pageX);var r=i-n.left;r<=o.limit?r=o.limit+1:r>=o.width()-e&&(r=o.width()-e-1),r>o.limit&&r<o.width()-e&&(o.position(r,!0),o.find(".splitter_panel").trigger("splitter.resize"),t.preventDefault())}else if("horizontal"==o.orientation){var a=t.pageY;t.originalEvent&&t.originalEvent.changedTouches&&(a=t.originalEvent.changedTouches[0].pageY);var s=a-n.top;s<=o.limit?s=o.limit+1:s>=o.height()-e&&(s=o.height()-e-1),s>o.limit&&s<o.height()-e&&(o.position(s,!0),o.find(".splitter_panel").trigger("splitter.resize"),t.preventDefault())}o.settings.onDrag(t)}})),r.push(y),y.data("splitter",y),y}}(jQuery),define("splitter",["jquery"],function(){}),define("pane",["jquery","splitter"],function(){!function(t){function e(e){var n=e.children();return{splitter:e.split(),first:t(n[0]).children()[0],second:t(n[2]).children()[0]}}function n(t){return"horizontal"==t?"vertical":"horizontal"}var i={_init:function(e){return this.each(function(){var e=t(this),n=e.hasClass("horizontal")?"vertical":"horizontal",i=e.attr("data-split"),r=e.children();i=i||"50%",r.each(function(){t(this).wrap('<div class="pane-wrapper"></div>')}),e.addClass("pane-container"),e.split({orientation:n,position:i,limit:10,onDragStart:function(){e.tile("resize_start")},onDrag:function(t){r.trigger("pane.resize")},onDragEnd:function(){e.tile("resize_save")}}),e.tile("resize_save"),e.on("fullscreen",function(t,n){e.tile("resize")})})},resize_start:function(){return this.each(function(){var n=t(this),i=e(n);n.find(".reactive-size").trigger("reactive-resize-start",i.splitter.orientation)})},resize_save:function(){return this.each(function(){var n,i,r=t(this),o=e(r);"horizontal"==o.splitter.orientation?(n=r.height(),i=t(o.first).height()):(n=r.width(),i=t(o.first).width());var a=Math.round(100*i/n)+"%";o.splitter.resizestart=a}),this.find(".reactive-size").trigger("reactive-resize"),this},resize:function(){return this.each(function(){var e=t(this),n=e.split();n.resizestart&&(n.position(n.resizestart),n.settings.onDrag(e))})},split:function(e,i,r,o){i=i||"below";var a,s=this,l="above"==i||"below"==i?"horizontal":"vertical",c=s.wrap('<div class="pane-container tile "'+n(l)+"></div>").parent();if(c.is(":visible")||(a=c.closest(".tab-pane"),a.addClass("active")),void 0==r?r=50:r<10?r=10:r>90&&(r=90),o&&"horizontal"==l){var u=this.height();u*r/100<o&&o<.9*u&&(r=100*o/u)}"above"==i||"left"==i?c.prepend(e):(r=100-r,c.append(e));var h=t(s).add(e);return h.wrap('<div class="pane-wrapper"></div>'),c.split({orientation:l,position:r+"%",limit:10,onDragStart:function(){c.tile("resize_start")},onDrag:function(){h.trigger("pane.resize")},onDragEnd:function(){c.tile("resize_save")}}),c.tile("resize_save"),h.trigger("pane.resize"),a&&a.removeClass("active"),c},close:function(){var t=this,e=t.closest(".pane-container");e.split().destroy(),t.parent().remove(),e.children().first().children().first().unwrap().unwrap()}};t.fn.tile=function(e){return i[e]?i[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.tile"):i._init.apply(this,arguments)}}(jQuery)}),function(t,e){"function"==typeof define&&define.amd?define("bloodhound",["jquery"],function(n){return t.Bloodhound=e(n)}):"object"==typeof exports?module.exports=e(require("jquery")):t.Bloodhound=e(jQuery)}(this,function(t){var e=function(){"use strict";return{isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:t.isArray,isFunction:t.isFunction,isObject:t.isPlainObject,isUndefined:function(t){return void 0===t},isElement:function(t){return!(!t||1!==t.nodeType)},isJQuery:function(e){return e instanceof t},toStr:function(t){return e.isUndefined(t)||null===t?"":t+""},bind:t.proxy,each:function(e,n){function i(t,e){return n(e,t)}t.each(e,i)},map:t.map,filter:t.grep,every:function(e,n){var i=!0;return e?(t.each(e,function(t,r){if(!(i=n.call(null,r,t,e)))return!1}),!!i):i},some:function(e,n){var i=!1;return e?(t.each(e,function(t,r){if(i=n.call(null,r,t,e))return!1}),!!i):i},mixin:t.extend,identity:function(t){return t},clone:function(e){return t.extend(!0,{},e)},getIdGenerator:function(){var t=0;return function(){return t++}},templatify:function(e){function n(){return String(e)}return t.isFunction(e)?e:n},defer:function(t){setTimeout(t,0)},debounce:function(t,e,n){var i,r;return function(){var o,a,s=this,l=arguments;return o=function(){i=null,n||(r=t.apply(s,l))},a=n&&!i,clearTimeout(i),i=setTimeout(o,e),a&&(r=t.apply(s,l)),r}},throttle:function(t,e){var n,i,r,o,a,s;return a=0,s=function(){a=new Date,r=null,o=t.apply(n,i)},function(){var l=new Date,c=e-(l-a);return n=this,i=arguments,c<=0?(clearTimeout(r),r=null,a=l,o=t.apply(n,i)):r||(r=setTimeout(s,c)),o}},stringify:function(t){return e.isString(t)?t:JSON.stringify(t)},noop:function(){}}}(),n="0.11.1",i=function(){"use strict";function t(t){return t=e.toStr(t),t?t.split(/\s+/):[]}function n(t){return t=e.toStr(t),t?t.split(/\W+/):[]}function i(t){return function(n){return n=e.isArray(n)?n:[].slice.call(arguments,0),function(i){var r=[];return e.each(n,function(n){r=r.concat(t(e.toStr(i[n])))}),r}}}return{nonword:n,whitespace:t,obj:{nonword:i(n),whitespace:i(t)}}}(),r=function(){"use strict";function n(n){this.maxSize=e.isNumber(n)?n:100,this.reset(),this.maxSize<=0&&(this.set=this.get=t.noop)}function i(){this.head=this.tail=null}function r(t,e){this.key=t,this.val=e,this.prev=this.next=null}return e.mixin(n.prototype,{set:function(t,e){var n,i=this.list.tail;this.size>=this.maxSize&&(this.list.remove(i),delete this.hash[i.key],this.size--),(n=this.hash[t])?(n.val=e,this.list.moveToFront(n)):(n=new r(t,e),this.list.add(n),this.hash[t]=n,this.size++)},get:function(t){var e=this.hash[t];if(e)return this.list.moveToFront(e),e.val},reset:function(){this.size=0,this.hash={},this.list=new i}}),e.mixin(i.prototype,{add:function(t){this.head&&(t.next=this.head,this.head.prev=t),this.head=t,this.tail=this.tail||t},remove:function(t){t.prev?t.prev.next=t.next:this.head=t.next,t.next?t.next.prev=t.prev:this.tail=t.prev},moveToFront:function(t){this.remove(t),this.add(t)}}),n}(),o=function(){"use strict";function n(t,n){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=new RegExp("^"+e.escapeRegExChars(this.prefix)),this.ls=n||s,!this.ls&&this._noop()}function i(){return(new Date).getTime()}function r(t){return JSON.stringify(e.isUndefined(t)?null:t)}function o(e){return t.parseJSON(e)}function a(t){var e,n,i=[],r=s.length;for(e=0;e<r;e++)(n=s.key(e)).match(t)&&i.push(n.replace(t,""));return i}var s;try{s=window.localStorage,s.setItem("~~~","!"),s.removeItem("~~~")}catch(t){s=null}return e.mixin(n.prototype,{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},_noop:function(){this.get=this.set=this.remove=this.clear=this.isExpired=e.noop},_safeSet:function(t,e){try{this.ls.setItem(t,e)}catch(t){"QuotaExceededError"===t.name&&(this.clear(),this._noop())}},get:function(t){return this.isExpired(t)&&this.remove(t),o(this.ls.getItem(this._prefix(t)))},set:function(t,n,o){return e.isNumber(o)?this._safeSet(this._ttlKey(t),r(i()+o)):this.ls.removeItem(this._ttlKey(t)),this._safeSet(this._prefix(t),r(n))},remove:function(t){return this.ls.removeItem(this._ttlKey(t)),this.ls.removeItem(this._prefix(t)),this},clear:function(){var t,e=a(this.keyMatcher);for(t=e.length;t--;)this.remove(e[t]);return this},isExpired:function(t){var n=o(this.ls.getItem(this._ttlKey(t)));return!!(e.isNumber(n)&&i()>n)}}),n}(),a=function(){"use strict";function n(t){t=t||{},this.cancelled=!1,this.lastReq=null,this._send=t.transport,this._get=t.limiter?t.limiter(this._get):this._get,this._cache=!1===t.cache?new r(0):s}var i=0,o={},a=6,s=new r(10);return n.setMaxPendingRequests=function(t){a=t},n.resetCache=function(){s.reset()},e.mixin(n.prototype,{_fingerprint:function(e){return e=e||{},e.url+e.type+t.param(e.data||{})},_get:function(t,e){function n(t){e(null,t),u._cache.set(l,t)}function r(){e(!0)}function s(){i--,delete o[l],u.onDeckRequestArgs&&(u._get.apply(u,u.onDeckRequestArgs),u.onDeckRequestArgs=null)}var l,c,u=this;l=this._fingerprint(t),this.cancelled||l!==this.lastReq||((c=o[l])?c.done(n).fail(r):i<a?(i++,o[l]=this._send(t).done(n).fail(r).always(s)):this.onDeckRequestArgs=[].slice.call(arguments,0))},get:function(n,i){var r,o;i=i||t.noop,n=e.isString(n)?{url:n}:n||{},o=this._fingerprint(n),this.cancelled=!1,this.lastReq=o,(r=this._cache.get(o))?i(null,r):this._get(n,i)},cancel:function(){this.cancelled=!0}}),n}(),s=window.SearchIndex=function(){"use strict";function n(n){n=n||{},n.datumTokenizer&&n.queryTokenizer||t.error("datumTokenizer and queryTokenizer are both required"),this.identify=n.identify||e.stringify,this.datumTokenizer=n.datumTokenizer,this.queryTokenizer=n.queryTokenizer,this.reset()}function i(t){return t=e.filter(t,function(t){return!!t}),t=e.map(t,function(t){return t.toLowerCase()})}function r(){var t={};return t[l]=[],t[s]={},t}function o(t){for(var e={},n=[],i=0,r=t.length;i<r;i++)e[t[i]]||(e[t[i]]=!0,n.push(t[i]));return n}function a(t,e){var n=0,i=0,r=[];t=t.sort(),e=e.sort();for(var o=t.length,a=e.length;n<o&&i<a;)t[n]<e[i]?n++:t[n]>e[i]?i++:(r.push(t[n]),n++,i++);return r}var s="c",l="i";return e.mixin(n.prototype,{bootstrap:function(t){this.datums=t.datums,this.trie=t.trie},add:function(t){var n=this;t=e.isArray(t)?t:[t],e.each(t,function(t){var o,a;n.datums[o=n.identify(t)]=t,a=i(n.datumTokenizer(t)),e.each(a,function(t){var e,i,a;for(e=n.trie,i=t.split("");a=i.shift();)e=e[s][a]||(e[s][a]=r()),e[l].push(o)})})},get:function(t){var n=this;return e.map(t,function(t){return n.datums[t]})},search:function(t){var n,r,c=this;return n=i(this.queryTokenizer(t)),e.each(n,function(t){var e,n,i,o;if(r&&0===r.length)return!1;for(e=c.trie,n=t.split("");e&&(i=n.shift());)e=e[s][i];if(!e||0!==n.length)return r=[],!1;o=e[l].slice(0),r=r?a(r,o):o}),r?e.map(o(r),function(t){return c.datums[t]}):[]},all:function(){var t=[];for(var e in this.datums)t.push(this.datums[e]);return t},reset:function(){this.datums={},this.trie=r()},serialize:function(){return{datums:this.datums,trie:this.trie}}}),n}(),l=function(){"use strict";function t(t){this.url=t.url,this.ttl=t.ttl,this.cache=t.cache,this.prepare=t.prepare,this.transform=t.transform,this.transport=t.transport,this.thumbprint=t.thumbprint,this.storage=new o(t.cacheKey)}var n;return n={data:"data",protocol:"protocol",thumbprint:"thumbprint"},e.mixin(t.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},store:function(t){this.cache&&(this.storage.set(n.data,t,this.ttl),this.storage.set(n.protocol,location.protocol,this.ttl),this.storage.set(n.thumbprint,this.thumbprint,this.ttl))},fromCache:function(){var t,e={};return this.cache?(e.data=this.storage.get(n.data),e.protocol=this.storage.get(n.protocol),e.thumbprint=this.storage.get(n.thumbprint),t=e.thumbprint!==this.thumbprint||e.protocol!==location.protocol,e.data&&!t?e.data:null):null},fromNetwork:function(t){function e(){t(!0)}function n(e){t(null,r.transform(e))}var i,r=this;t&&(i=this.prepare(this._settings()),this.transport(i).fail(e).done(n))},clear:function(){return this.storage.clear(),this}}),t}(),c=function(){"use strict";function t(t){this.url=t.url,this.prepare=t.prepare,this.transform=t.transform,this.transport=new a({cache:t.cache,limiter:t.limiter,transport:t.transport})}return e.mixin(t.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},get:function(t,e){function n(t,n){e(t?[]:r.transform(n))}var i,r=this;if(e)return t=t||"",i=this.prepare(t,this._settings()),this.transport.get(i,n)},cancelLastRequest:function(){this.transport.cancel()}}),t}(),u=function(){"use strict";function i(i){var r;return i?(r={url:null,ttl:864e5,cache:!0,cacheKey:null,thumbprint:"",prepare:e.identity,transform:e.identity,transport:null},i=e.isString(i)?{url:i}:i,i=e.mixin(r,i),!i.url&&t.error("prefetch requires url to be set"),i.transform=i.filter||i.transform,i.cacheKey=i.cacheKey||i.url,i.thumbprint=n+i.thumbprint,i.transport=i.transport?s(i.transport):t.ajax,i):null}function r(n){var i;if(n)return i={url:null,cache:!0,prepare:null,replace:null,wildcard:null,limiter:null,rateLimitBy:"debounce",rateLimitWait:300,transform:e.identity,transport:null},n=e.isString(n)?{url:n}:n,n=e.mixin(i,n),!n.url&&t.error("remote requires url to be set"),n.transform=n.filter||n.transform,n.prepare=o(n),n.limiter=a(n),n.transport=n.transport?s(n.transport):t.ajax,delete n.replace,delete n.wildcard,delete n.rateLimitBy,delete n.rateLimitWait,n}function o(t){function e(t,e){return e.url=o(e.url,t),e}function n(t,e){return e.url=e.url.replace(a,encodeURIComponent(t)),e}function i(t,e){return e}var r,o,a;return r=t.prepare,o=t.replace,a=t.wildcard,r||(r=o?e:t.wildcard?n:i)}function a(t){var n,i,r;return n=t.limiter,i=t.rateLimitBy,r=t.rateLimitWait,n||(n=/^throttle$/i.test(i)?function(t){return function(n){return e.throttle(n,t)}}(r):function(t){return function(n){return e.debounce(n,t)}}(r)),n}function s(n){return function(i){function r(t){e.defer(function(){a.resolve(t)})}function o(t){e.defer(function(){a.reject(t)})}var a=t.Deferred();return n(i,r,o),a}}return function(n){var o,a;return o={initialize:!0,identify:e.stringify,datumTokenizer:null,queryTokenizer:null,sufficient:5,sorter:null,local:[],prefetch:null,remote:null},n=e.mixin(o,n||{}),!n.datumTokenizer&&t.error("datumTokenizer is required"),!n.queryTokenizer&&t.error("queryTokenizer is required"),a=n.sorter,n.sorter=a?function(t){return t.sort(a)}:e.identity,n.local=e.isFunction(n.local)?n.local():n.local,n.prefetch=i(n.prefetch),n.remote=r(n.remote),n}}();return function(){"use strict";function n(t){t=u(t),this.sorter=t.sorter,this.identify=t.identify,this.sufficient=t.sufficient,this.local=t.local,this.remote=t.remote?new c(t.remote):null,this.prefetch=t.prefetch?new l(t.prefetch):null,this.index=new s({identify:this.identify,datumTokenizer:t.datumTokenizer,queryTokenizer:t.queryTokenizer}),!1!==t.initialize&&this.initialize()}var r;return r=window&&window.Bloodhound,n.noConflict=function(){return window&&(window.Bloodhound=r),n},n.tokenizers=i,e.mixin(n.prototype,{__ttAdapter:function(){function t(t,e,i){return n.search(t,e,i)}function e(t,e){return n.search(t,e)}var n=this;return this.remote?t:e},_loadPrefetch:function(){function e(t,e){if(t)return n.reject();r.add(e),r.prefetch.store(r.index.serialize()),n.resolve()}var n,i,r=this;return n=t.Deferred(),this.prefetch?(i=this.prefetch.fromCache())?(this.index.bootstrap(i),n.resolve()):this.prefetch.fromNetwork(e):n.resolve(),n.promise()},_initialize:function(){function t(){e.add(e.local)}var e=this;return this.clear(),(this.initPromise=this._loadPrefetch()).done(t),this.initPromise},initialize:function(t){return!this.initPromise||t?this._initialize():this.initPromise},add:function(t){return this.index.add(t),this},get:function(t){return t=e.isArray(t)?t:[].slice.call(arguments),this.index.get(t)},search:function(t,n,i){function r(t){var n=[];e.each(t,function(t){!e.some(o,function(e){return a.identify(t)===a.identify(e)})&&n.push(t)}),i&&i(n)}var o,a=this;return o=this.sorter(this.index.search(t)),n(this.remote?o.slice():o),this.remote&&o.length<this.sufficient?this.remote.get(t,r):this.remote&&this.remote.cancelLastRequest(),this},all:function(){return this.index.all()},clear:function(){return this.index.reset(),this},clearPrefetchCache:function(){return this.prefetch&&this.prefetch.clear(),this},clearRemoteCache:function(){return a.resetCache(),this},ttAdapter:function(){return this.__ttAdapter()}}),n}()}),function(t,e){"function"==typeof define&&define.amd?define("typeahead.js",["jquery"],function(t){return e(t)}):"object"==typeof exports?module.exports=e(require("jquery")):e(jQuery)}(0,function(t){var e=function(){"use strict";return{isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:t.isArray,isFunction:t.isFunction,isObject:t.isPlainObject,isUndefined:function(t){return void 0===t},isElement:function(t){return!(!t||1!==t.nodeType)},isJQuery:function(e){return e instanceof t},toStr:function(t){return e.isUndefined(t)||null===t?"":t+""},bind:t.proxy,each:function(e,n){function i(t,e){return n(e,t)}t.each(e,i)},map:t.map,filter:t.grep,every:function(e,n){var i=!0;return e?(t.each(e,function(t,r){if(!(i=n.call(null,r,t,e)))return!1}),!!i):i},some:function(e,n){var i=!1
+;return e?(t.each(e,function(t,r){if(i=n.call(null,r,t,e))return!1}),!!i):i},mixin:t.extend,identity:function(t){return t},clone:function(e){return t.extend(!0,{},e)},getIdGenerator:function(){var t=0;return function(){return t++}},templatify:function(e){function n(){return String(e)}return t.isFunction(e)?e:n},defer:function(t){setTimeout(t,0)},debounce:function(t,e,n){var i,r;return function(){var o,a,s=this,l=arguments;return o=function(){i=null,n||(r=t.apply(s,l))},a=n&&!i,clearTimeout(i),i=setTimeout(o,e),a&&(r=t.apply(s,l)),r}},throttle:function(t,e){var n,i,r,o,a,s;return a=0,s=function(){a=new Date,r=null,o=t.apply(n,i)},function(){var l=new Date,c=e-(l-a);return n=this,i=arguments,c<=0?(clearTimeout(r),r=null,a=l,o=t.apply(n,i)):r||(r=setTimeout(s,c)),o}},stringify:function(t){return e.isString(t)?t:JSON.stringify(t)},noop:function(){}}}(),n=function(){"use strict";function t(t){var a,s;return s=e.mixin({},o,t),a={css:r(),classes:s,html:n(s),selectors:i(s)},{css:a.css,html:a.html,classes:a.classes,selectors:a.selectors,mixin:function(t){e.mixin(t,a)}}}function n(t){return{wrapper:'<span class="'+t.wrapper+'"></span>',menu:'<div class="'+t.menu+'"></div>'}}function i(t){var n={};return e.each(t,function(t,e){n[e]="."+t}),n}function r(){var t={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},menu:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:" 0"}};return e.isMsie()&&e.mixin(t.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),t}var o={wrapper:"twitter-typeahead",input:"tt-input",hint:"tt-hint",menu:"tt-menu",dataset:"tt-dataset",suggestion:"tt-suggestion",selectable:"tt-selectable",empty:"tt-empty",open:"tt-open",cursor:"tt-cursor",highlight:"tt-highlight"};return t}(),i=function(){"use strict";function n(e){e&&e.el||t.error("EventBus initialized without el"),this.$el=t(e.el)}var i,r;return i="typeahead:",r={render:"rendered",cursorchange:"cursorchanged",select:"selected",autocomplete:"autocompleted"},e.mixin(n.prototype,{_trigger:function(e,n){var r;return r=t.Event(i+e),(n=n||[]).unshift(r),this.$el.trigger.apply(this.$el,n),r},before:function(t){var e,n;return e=[].slice.call(arguments,1),n=this._trigger("before"+t,e),n.isDefaultPrevented()},trigger:function(t){var e;this._trigger(t,[].slice.call(arguments,1)),(e=r[t])&&this._trigger(e,[].slice.call(arguments,1))}}),n}(),r=function(){"use strict";function t(t,e,n,i){var r;if(!n)return this;for(e=e.split(s),n=i?a(n,i):n,this._callbacks=this._callbacks||{};r=e.shift();)this._callbacks[r]=this._callbacks[r]||{sync:[],async:[]},this._callbacks[r][t].push(n);return this}function e(e,n,i){return t.call(this,"async",e,n,i)}function n(e,n,i){return t.call(this,"sync",e,n,i)}function i(t){var e;if(!this._callbacks)return this;for(t=t.split(s);e=t.shift();)delete this._callbacks[e];return this}function r(t){var e,n,i,r,a;if(!this._callbacks)return this;for(t=t.split(s),i=[].slice.call(arguments,1);(e=t.shift())&&(n=this._callbacks[e]);)r=o(n.sync,this,[e].concat(i)),a=o(n.async,this,[e].concat(i)),r()&&l(a);return this}function o(t,e,n){function i(){for(var i,r=0,o=t.length;!i&&r<o;r+=1)i=!1===t[r].apply(e,n);return!i}return i}function a(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}var s=/\s+/,l=function(){return window.setImmediate?function(t){setImmediate(function(){t()})}:function(t){setTimeout(function(){t()},0)}}();return{onSync:n,onAsync:e,off:i,trigger:r}}(),o=function(t){"use strict";function n(t,n,i){for(var r,o=[],a=0,s=t.length;a<s;a++)o.push(e.escapeRegExChars(t[a]));return r=i?"\\b("+o.join("|")+")\\b":"("+o.join("|")+")",n?new RegExp(r):new RegExp(r,"i")}var i={node:null,pattern:null,tagName:"strong",className:null,wordsOnly:!1,caseSensitive:!1};return function(r){function o(e){var n,i,o;return(n=s.exec(e.data))&&(o=t.createElement(r.tagName),r.className&&(o.className=r.className),i=e.splitText(n.index),i.splitText(n[0].length),o.appendChild(i.cloneNode(!0)),e.parentNode.replaceChild(o,i)),!!n}function a(t,e){for(var n,i=0;i<t.childNodes.length;i++)n=t.childNodes[i],3===n.nodeType?i+=e(n)?1:0:a(n,e)}var s;r=e.mixin({},i,r),r.node&&r.pattern&&(r.pattern=e.isArray(r.pattern)?r.pattern:[r.pattern],s=n(r.pattern,r.caseSensitive,r.wordsOnly),a(r.node,o))}}(window.document),a=function(){"use strict";function n(n,r){n=n||{},n.input||t.error("input is missing"),r.mixin(this),this.$hint=t(n.hint),this.$input=t(n.input),this.query=this.$input.val(),this.queryWhenFocused=this.hasFocus()?this.query:null,this.$overflowHelper=i(this.$input),this._checkLanguageDirection(),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=e.noop)}function i(e){return t('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}function o(t,e){return n.normalizeQuery(t)===n.normalizeQuery(e)}function a(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}var s;return s={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"},n.normalizeQuery=function(t){return e.toStr(t).replace(/^\s*/g,"").replace(/\s{2,}/g," ")},e.mixin(n.prototype,r,{_onBlur:function(){this.resetInputValue(),this.trigger("blurred")},_onFocus:function(){this.queryWhenFocused=this.query,this.trigger("focused")},_onKeydown:function(t){var e=s[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._setQuery(this.getInputValue()),this.clearHintIfInvalid(),this._checkLanguageDirection()},_managePreventDefault:function(t,e){var n;switch(t){case"up":case"down":n=!a(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;switch(t){case"tab":n=!a(e);break;default:n=!0}return n},_checkLanguageDirection:function(){var t=(this.$input.css("direction")||"ltr").toLowerCase();this.dir!==t&&(this.dir=t,this.$hint.attr("dir",t),this.trigger("langDirChanged",t))},_setQuery:function(t,e){var n,i;n=o(t,this.query),i=!!n&&this.query.length!==t.length,this.query=t,e||n?!e&&i&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},bind:function(){var t,n,i,r,o=this;return t=e.bind(this._onBlur,this),n=e.bind(this._onFocus,this),i=e.bind(this._onKeydown,this),r=e.bind(this._onInput,this),this.$input.on("blur.tt",t).on("focus.tt",n).on("keydown.tt",i),!e.isMsie()||e.isMsie()>9?this.$input.on("input.tt",r):this.$input.on("keydown.tt keypress.tt cut.tt paste.tt",function(t){s[t.which||t.keyCode]||e.defer(e.bind(o._onInput,o,t))}),this},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getLangDir:function(){return this.dir},getQuery:function(){return this.query||""},setQuery:function(t,e){this.setInputValue(t),this._setQuery(t,e)},hasQueryChangedSinceLastFocus:function(){return this.query!==this.queryWhenFocused},getInputValue:function(){return this.$input.val()},setInputValue:function(t){this.$input.val(t),this.clearHintIfInvalid(),this._checkLanguageDirection()},resetInputValue:function(){this.setInputValue(this.query)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n,i;t=this.getInputValue(),e=this.getHint(),n=t!==e&&0===e.indexOf(t),!(i=""!==t&&n&&!this.hasOverflow())&&this.clearHint()},hasFocus:function(){return this.$input.is(":focus")},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,n,i;return t=this.$input.val().length,n=this.$input[0].selectionStart,e.isNumber(n)?n===t:!document.selection||(i=document.selection.createRange(),i.moveStart("character",-t),t===i.text.length)},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$overflowHelper.remove(),this.$hint=this.$input=this.$overflowHelper=t("<div>")}}),n}(),s=function(){"use strict";function n(n,r){n=n||{},n.templates=n.templates||{},n.templates.notFound=n.templates.notFound||n.templates.empty,n.source||t.error("missing source"),n.node||t.error("missing node"),n.name&&!s(n.name)&&t.error("invalid dataset name: "+n.name),r.mixin(this),this.highlight=!!n.highlight,this.name=n.name||c(),this.limit=n.limit||5,this.displayFn=i(n.display||n.displayKey),this.templates=a(n.templates,this.displayFn),this.source=n.source.__ttAdapter?n.source.__ttAdapter():n.source,this.async=e.isUndefined(n.async)?this.source.length>2:!!n.async,this._resetLastSuggestion(),this.$el=t(n.node).addClass(this.classes.dataset).addClass(this.classes.dataset+"-"+this.name)}function i(t){function n(e){return e[t]}return t=t||e.stringify,e.isFunction(t)?t:n}function a(n,i){function r(e){return t("<div>").text(i(e))}return{notFound:n.notFound&&e.templatify(n.notFound),pending:n.pending&&e.templatify(n.pending),header:n.header&&e.templatify(n.header),footer:n.footer&&e.templatify(n.footer),suggestion:n.suggestion||r}}function s(t){return/^[_a-zA-Z0-9-]+$/.test(t)}var l,c;return l={val:"tt-selectable-display",obj:"tt-selectable-object"},c=e.getIdGenerator(),n.extractData=function(e){var n=t(e);return n.data(l.obj)?{val:n.data(l.val)||"",obj:n.data(l.obj)||null}:null},e.mixin(n.prototype,r,{_overwrite:function(t,e){e=e||[],e.length?this._renderSuggestions(t,e):this.async&&this.templates.pending?this._renderPending(t):!this.async&&this.templates.notFound?this._renderNotFound(t):this._empty(),this.trigger("rendered",this.name,e,!1)},_append:function(t,e){e=e||[],e.length&&this.$lastSuggestion.length?this._appendSuggestions(t,e):e.length?this._renderSuggestions(t,e):!this.$lastSuggestion.length&&this.templates.notFound&&this._renderNotFound(t),this.trigger("rendered",this.name,e,!0)},_renderSuggestions:function(t,e){var n;n=this._getSuggestionsFragment(t,e),this.$lastSuggestion=n.children().last(),this.$el.html(n).prepend(this._getHeader(t,e)).append(this._getFooter(t,e))},_appendSuggestions:function(t,e){var n,i;n=this._getSuggestionsFragment(t,e),i=n.children().last(),this.$lastSuggestion.after(n),this.$lastSuggestion=i},_renderPending:function(t){var e=this.templates.pending;this._resetLastSuggestion(),e&&this.$el.html(e({query:t,dataset:this.name}))},_renderNotFound:function(t){var e=this.templates.notFound;this._resetLastSuggestion(),e&&this.$el.html(e({query:t,dataset:this.name}))},_empty:function(){this.$el.empty(),this._resetLastSuggestion()},_getSuggestionsFragment:function(n,i){var r,a=this;return r=document.createDocumentFragment(),e.each(i,function(e){var i,o;o=a._injectQuery(n,e),i=t(a.templates.suggestion(o)).data(l.obj,e).data(l.val,a.displayFn(e)).addClass(a.classes.suggestion+" "+a.classes.selectable),r.appendChild(i[0])}),this.highlight&&o({className:this.classes.highlight,node:r,pattern:n}),t(r)},_getFooter:function(t,e){return this.templates.footer?this.templates.footer({query:t,suggestions:e,dataset:this.name}):null},_getHeader:function(t,e){return this.templates.header?this.templates.header({query:t,suggestions:e,dataset:this.name}):null},_resetLastSuggestion:function(){this.$lastSuggestion=t()},_injectQuery:function(t,n){return e.isObject(n)?e.mixin({_query:t},n):n},update:function(e){function n(t){a||(a=!0,t=(t||[]).slice(0,r.limit),s=t.length,r._overwrite(e,t),s<r.limit&&r.async&&r.trigger("asyncRequested",e))}function i(n){n=n||[],!o&&s<r.limit&&(r.cancel=t.noop,s+=n.length,r._append(e,n.slice(0,r.limit-s)),r.async&&r.trigger("asyncReceived",e))}var r=this,o=!1,a=!1,s=0;this.cancel(),this.cancel=function(){o=!0,r.cancel=t.noop,r.async&&r.trigger("asyncCanceled",e)},this.source(e,n,i),!a&&n([])},cancel:t.noop,clear:function(){this._empty(),this.cancel(),this.trigger("cleared")},isEmpty:function(){return this.$el.is(":empty")},destroy:function(){this.$el=t("<div>")}}),n}(),l=function(){"use strict";function n(n,i){function r(e){var n=o.$node.find(e.node).first();return e.node=n.length?n:t("<div>").appendTo(o.$node),new s(e,i)}var o=this;n=n||{},n.node||t.error("node is required"),i.mixin(this),this.$node=t(n.node),this.query=null,this.datasets=e.map(n.datasets,r)}return e.mixin(n.prototype,r,{_onSelectableClick:function(e){this.trigger("selectableClicked",t(e.currentTarget))},_onRendered:function(t,e,n,i){this.$node.toggleClass(this.classes.empty,this._allDatasetsEmpty()),this.trigger("datasetRendered",e,n,i)},_onCleared:function(){this.$node.toggleClass(this.classes.empty,this._allDatasetsEmpty()),this.trigger("datasetCleared")},_propagate:function(){this.trigger.apply(this,arguments)},_allDatasetsEmpty:function(){function t(t){return t.isEmpty()}return e.every(this.datasets,t)},_getSelectables:function(){return this.$node.find(this.selectors.selectable)},_removeCursor:function(){var t=this.getActiveSelectable();t&&t.removeClass(this.classes.cursor)},_ensureVisible:function(t){var e,n,i,r;e=t.position().top,n=e+t.outerHeight(!0),i=this.$node.scrollTop(),r=this.$node.height()+parseInt(this.$node.css("paddingTop"),10)+parseInt(this.$node.css("paddingBottom"),10),e<0?this.$node.scrollTop(i+e):r<n&&this.$node.scrollTop(i+(n-r))},bind:function(){var t,n=this;return t=e.bind(this._onSelectableClick,this),this.$node.on("click.tt",this.selectors.selectable,t),e.each(this.datasets,function(t){t.onSync("asyncRequested",n._propagate,n).onSync("asyncCanceled",n._propagate,n).onSync("asyncReceived",n._propagate,n).onSync("rendered",n._onRendered,n).onSync("cleared",n._onCleared,n)}),this},isOpen:function(){return this.$node.hasClass(this.classes.open)},open:function(){this.$node.addClass(this.classes.open)},close:function(){this.$node.removeClass(this.classes.open),this._removeCursor()},setLanguageDirection:function(t){this.$node.attr("dir",t)},selectableRelativeToCursor:function(t){var e,n,i,r;return n=this.getActiveSelectable(),e=this._getSelectables(),i=n?e.index(n):-1,r=i+t,r=(r+1)%(e.length+1)-1,r=r<-1?e.length-1:r,-1===r?null:e.eq(r)},setCursor:function(t){this._removeCursor(),(t=t&&t.first())&&(t.addClass(this.classes.cursor),this._ensureVisible(t))},getSelectableData:function(t){return t&&t.length?s.extractData(t):null},getActiveSelectable:function(){var t=this._getSelectables().filter(this.selectors.cursor).first();return t.length?t:null},getTopSelectable:function(){var t=this._getSelectables().first();return t.length?t:null},update:function(t){function n(e){e.update(t)}var i=t!==this.query;return i&&(this.query=t,e.each(this.datasets,n)),i},empty:function(){function t(t){t.clear()}e.each(this.datasets,t),this.query=null,this.$node.addClass(this.classes.empty)},destroy:function(){function n(t){t.destroy()}this.$node.off(".tt"),this.$node=t("<div>"),e.each(this.datasets,n)}}),n}(),c=function(){"use strict";function t(){l.apply(this,[].slice.call(arguments,0))}var n=l.prototype;return e.mixin(t.prototype,l.prototype,{open:function(){return!this._allDatasetsEmpty()&&this._show(),n.open.apply(this,[].slice.call(arguments,0))},close:function(){return this._hide(),n.close.apply(this,[].slice.call(arguments,0))},_onRendered:function(){return this._allDatasetsEmpty()?this._hide():this.isOpen()&&this._show(),n._onRendered.apply(this,[].slice.call(arguments,0))},_onCleared:function(){return this._allDatasetsEmpty()?this._hide():this.isOpen()&&this._show(),n._onCleared.apply(this,[].slice.call(arguments,0))},setLanguageDirection:function(t){return this.$node.css("ltr"===t?this.css.ltr:this.css.rtl),n.setLanguageDirection.apply(this,[].slice.call(arguments,0))},_hide:function(){this.$node.hide()},_show:function(){this.$node.css("display","block")}}),t}(),u=function(){"use strict";function n(n,r){var o,a,s,l,c,u,h,d,f,p,g;n=n||{},n.input||t.error("missing input"),n.menu||t.error("missing menu"),n.eventBus||t.error("missing event bus"),r.mixin(this),this.eventBus=n.eventBus,this.minLength=e.isNumber(n.minLength)?n.minLength:1,this.input=n.input,this.menu=n.menu,this.enabled=!0,this.active=!1,this.input.hasFocus()&&this.activate(),this.dir=this.input.getLangDir(),this._hacks(),this.menu.bind().onSync("selectableClicked",this._onSelectableClicked,this).onSync("asyncRequested",this._onAsyncRequested,this).onSync("asyncCanceled",this._onAsyncCanceled,this).onSync("asyncReceived",this._onAsyncReceived,this).onSync("datasetRendered",this._onDatasetRendered,this).onSync("datasetCleared",this._onDatasetCleared,this),o=i(this,"activate","open","_onFocused"),a=i(this,"deactivate","_onBlurred"),s=i(this,"isActive","isOpen","_onEnterKeyed"),l=i(this,"isActive","isOpen","_onTabKeyed"),c=i(this,"isActive","_onEscKeyed"),u=i(this,"isActive","open","_onUpKeyed"),h=i(this,"isActive","open","_onDownKeyed"),d=i(this,"isActive","isOpen","_onLeftKeyed"),f=i(this,"isActive","isOpen","_onRightKeyed"),p=i(this,"_openIfActive","_onQueryChanged"),g=i(this,"_openIfActive","_onWhitespaceChanged"),this.input.bind().onSync("focused",o,this).onSync("blurred",a,this).onSync("enterKeyed",s,this).onSync("tabKeyed",l,this).onSync("escKeyed",c,this).onSync("upKeyed",u,this).onSync("downKeyed",h,this).onSync("leftKeyed",d,this).onSync("rightKeyed",f,this).onSync("queryChanged",p,this).onSync("whitespaceChanged",g,this).onSync("langDirChanged",this._onLangDirChanged,this)}function i(t){var n=[].slice.call(arguments,1);return function(){var i=[].slice.call(arguments);e.each(n,function(e){return t[e].apply(t,i)})}}return e.mixin(n.prototype,{_hacks:function(){var n,i;n=this.input.$input||t("<div>"),i=this.menu.$node||t("<div>"),n.on("blur.tt",function(t){var r,o,a;r=document.activeElement,o=i.is(r),a=i.has(r).length>0,e.isMsie()&&(o||a)&&(t.preventDefault(),t.stopImmediatePropagation(),e.defer(function(){n.focus()}))}),i.on("mousedown.tt",function(t){t.preventDefault()})},_onSelectableClicked:function(t,e){this.select(e)},_onDatasetCleared:function(){this._updateHint()},_onDatasetRendered:function(t,e,n,i){this._updateHint(),this.eventBus.trigger("render",n,i,e)},_onAsyncRequested:function(t,e,n){this.eventBus.trigger("asyncrequest",n,e)},_onAsyncCanceled:function(t,e,n){this.eventBus.trigger("asynccancel",n,e)},_onAsyncReceived:function(t,e,n){this.eventBus.trigger("asyncreceive",n,e)},_onFocused:function(){this._minLengthMet()&&this.menu.update(this.input.getQuery())},_onBlurred:function(){this.input.hasQueryChangedSinceLastFocus()&&this.eventBus.trigger("change",this.input.getQuery())},_onEnterKeyed:function(t,e){var n;(n=this.menu.getActiveSelectable())&&this.select(n)&&e.preventDefault()},_onTabKeyed:function(t,e){var n;(n=this.menu.getActiveSelectable())?this.select(n)&&e.preventDefault():(n=this.menu.getTopSelectable())&&this.autocomplete(n)&&e.preventDefault()},_onEscKeyed:function(){this.close()},_onUpKeyed:function(){this.moveCursor(-1)},_onDownKeyed:function(){this.moveCursor(1)},_onLeftKeyed:function(){"rtl"===this.dir&&this.input.isCursorAtEnd()&&this.autocomplete(this.menu.getTopSelectable())},_onRightKeyed:function(){"ltr"===this.dir&&this.input.isCursorAtEnd()&&this.autocomplete(this.menu.getTopSelectable())},_onQueryChanged:function(t,e){this._minLengthMet(e)?this.menu.update(e):this.menu.empty()},_onWhitespaceChanged:function(){this._updateHint()},_onLangDirChanged:function(t,e){this.dir!==e&&(this.dir=e,this.menu.setLanguageDirection(e))},_openIfActive:function(){this.isActive()&&this.open()},_minLengthMet:function(t){return t=e.isString(t)?t:this.input.getQuery()||"",t.length>=this.minLength},_updateHint:function(){var t,n,i,r,o,s,l;t=this.menu.getTopSelectable(),n=this.menu.getSelectableData(t),i=this.input.getInputValue(),!n||e.isBlankString(i)||this.input.hasOverflow()?this.input.clearHint():(r=a.normalizeQuery(i),o=e.escapeRegExChars(r),s=new RegExp("^(?:"+o+")(.+$)","i"),(l=s.exec(n.val))&&this.input.setHint(i+l[1]))},isEnabled:function(){return this.enabled},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},isActive:function(){return this.active},activate:function(){return!!this.isActive()||!(!this.isEnabled()||this.eventBus.before("active"))&&(this.active=!0,this.eventBus.trigger("active"),!0)},deactivate:function(){return!this.isActive()||!this.eventBus.before("idle")&&(this.active=!1,this.close(),this.eventBus.trigger("idle"),!0)},isOpen:function(){return this.menu.isOpen()},open:function(){return this.isOpen()||this.eventBus.before("open")||(this.menu.open(),this._updateHint(),this.eventBus.trigger("open")),this.isOpen()},close:function(){return this.isOpen()&&!this.eventBus.before("close")&&(this.menu.close(),this.input.clearHint(),this.input.resetInputValue(),this.eventBus.trigger("close")),!this.isOpen()},setVal:function(t){this.input.setQuery(e.toStr(t))},getVal:function(){return this.input.getQuery()},select:function(t){var e=this.menu.getSelectableData(t);return!(!e||this.eventBus.before("select",e.obj))&&(this.input.setQuery(e.val,!0),this.eventBus.trigger("select",e.obj),this.close(),!0)},autocomplete:function(t){var e,n;return e=this.input.getQuery(),n=this.menu.getSelectableData(t),!(!(n&&e!==n.val)||this.eventBus.before("autocomplete",n.obj))&&(this.input.setQuery(n.val),this.eventBus.trigger("autocomplete",n.obj),!0)},moveCursor:function(t){var e,n,i,r;return e=this.input.getQuery(),n=this.menu.selectableRelativeToCursor(t),i=this.menu.getSelectableData(n),r=i?i.obj:null,!(this._minLengthMet()&&this.menu.update(e))&&!this.eventBus.before("cursorchange",r)&&(this.menu.setCursor(n),i?this.input.setInputValue(i.val):(this.input.resetInputValue(),this._updateHint()),this.eventBus.trigger("cursorchange",r),!0)},destroy:function(){this.input.destroy(),this.menu.destroy()}}),n}();!function(){"use strict";function r(e,n){e.each(function(){var e,i=t(this);(e=i.data(g.typeahead))&&n(e,i)})}function o(t,e){return t.clone().addClass(e.classes.hint).removeData().css(e.css.hint).css(h(t)).prop("readonly",!0).removeAttr("id name placeholder required").attr({autocomplete:"off",spellcheck:"false",tabindex:-1})}function s(t,e){t.data(g.attrs,{dir:t.attr("dir"),autocomplete:t.attr("autocomplete"),spellcheck:t.attr("spellcheck"),style:t.attr("style")}),t.addClass(e.classes.input).attr({autocomplete:"off",spellcheck:!1});try{!t.attr("dir")&&t.attr("dir","auto")}catch(t){}return t}function h(t){return{backgroundAttachment:t.css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")}}function d(t){var n,i;n=t.data(g.www),i=t.parent().filter(n.selectors.wrapper),e.each(t.data(g.attrs),function(n,i){e.isUndefined(n)?t.removeAttr(i):t.attr(i,n)}),t.removeData(g.typeahead).removeData(g.www).removeData(g.attr).removeClass(n.classes.input),i.length&&(t.detach().insertAfter(i),i.remove())}function f(n){var i,r;return i=e.isJQuery(n)||e.isElement(n),r=i?t(n).first():[],r.length?r:null}var p,g,m;p=t.fn.typeahead,g={www:"tt-www",attrs:"tt-attrs",typeahead:"tt-typeahead"},m={initialize:function(r,h){function d(){var n,d,m,v,y,b,x,w,_,S,C;e.each(h,function(t){t.highlight=!!r.highlight}),n=t(this),d=t(p.html.wrapper),m=f(r.hint),v=f(r.menu),y=!1!==r.hint&&!m,b=!1!==r.menu&&!v,y&&(m=o(n,p)),b&&(v=t(p.html.menu).css(p.css.menu)),m&&m.val(""),n=s(n,p),(y||b)&&(d.css(p.css.wrapper),n.css(y?p.css.input:p.css.inputWithNoHint),n.wrap(d).parent().prepend(y?m:null).append(b?v:null)),C=b?c:l,x=new i({el:n}),w=new a({hint:m,input:n},p),_=new C({node:v,datasets:h},p),S=new u({input:w,menu:_,eventBus:x,minLength:r.minLength},p),n.data(g.www,p),n.data(g.typeahead,S)}var p;return h=e.isArray(h)?h:[].slice.call(arguments,1),r=r||{},p=n(r.classNames),this.each(d)},isEnabled:function(){var t;return r(this.first(),function(e){t=e.isEnabled()}),t},enable:function(){return r(this,function(t){t.enable()}),this},disable:function(){return r(this,function(t){t.disable()}),this},isActive:function(){var t;return r(this.first(),function(e){t=e.isActive()}),t},activate:function(){return r(this,function(t){t.activate()}),this},deactivate:function(){return r(this,function(t){t.deactivate()}),this},isOpen:function(){var t;return r(this.first(),function(e){t=e.isOpen()}),t},open:function(){return r(this,function(t){t.open()}),this},close:function(){return r(this,function(t){t.close()}),this},select:function(e){var n=!1,i=t(e);return r(this.first(),function(t){n=t.select(i)}),n},autocomplete:function(e){var n=!1,i=t(e);return r(this.first(),function(t){n=t.autocomplete(i)}),n},moveCursor:function(t){var e=!1;return r(this.first(),function(n){e=n.moveCursor(t)}),e},val:function(t){var e;return arguments.length?(r(this,function(e){e.setVal(t)}),this):(r(this.first(),function(t){e=t.getVal()}),e)},destroy:function(){return r(this,function(t,e){d(e),t.destroy()}),this}},t.fn.typeahead=function(t){return m[t]?m[t].apply(this,[].slice.call(arguments,1)):m.initialize.apply(this,arguments)},t.fn.typeahead.noConflict=function(){return t.fn.typeahead=p,this}}()}),define("typeahead",["jquery"],function(t){return function(){var e;return e=function(t){return require.s.contexts._.registry["typeahead.js"].factory(t)},e.apply(t,arguments)}}(this)),define("search",["jquery","config","utils","bloodhound","typeahead"],function(t,e,n,i){!function(t){function r(e,n){var e=e.replace("%QUERY",encodeURIComponent(n)),i=t("label.active > input[name=smatch]").val();return i&&(e+="&match="+i),e}var o={_init:function(o){return o=o||{},this.each(function(){function a(t){return(t.tags||[]).push(t.name)}function s(t){var e='<div class="tt-match file type-icon '+function(t){return t.split(".").pop()}(t.name)+'"><span class="tt-label">'+n.htmlEncode(function(t){return t.split(".").slice(0,-1).join(".")}(t.name));if(t.tags){e+='<span class="tt-tags">';for(var i=0;i<t.tags.length;i++){var r=t.tags[i];e+='<span class="tt-tag">'+n.htmlEncode(r)+"</span>"}e+="</span>"}return t.title&&(e+='<div class="tt-title file">'+n.htmlEncode(t.title)+"</div>"),e+="</div>"}function l(t){var e="";if(t.file!=x||t.alias!=w){var i=t.file.split(".").pop();x=t.file,w=t.alias,e='<div class="tt-file-header type-icon '+i+'"><span class="tt-path-file">'+n.htmlEncode(t.file)+"</span></div>"}return e+p(t)}function c(t){return i.tokenizers.whitespace(t.text)}function u(t){var e="";return t.file==x&&t.alias==w||(x=t.file,w=t.alias,e='<div class="tt-file-header type-icon '+t.ext+'"><span class="tt-path-alias">'+n.htmlEncode(t.alias)+'</span>(<span class="tt-path-file">'+n.htmlEncode(t.file)+")</span></div>"),t.text&&(e+=p(t)),e}function h(t,n){for(var i=e.swish.templates,r=[],o=t.split(" "),a=[],s=0;s<o.length;s++)a.push({prefix:o[s],regex:new RegExp("_"+o[s])});for(var s=0;s<i.length;s++){var l=i[s];if(void 0!==l.arity){for(var c=0,u=!0;c<a.length&&u;c++)l.name.startsWith(a[c].prefix)||l.name.match(a[c].regex)||(u=!1);u&&r.push(l)}}n(r)}function d(t){var e='<div class="tt-match predicate';return t.type&&(e+=" "+t.type),t.mode&&(e+='" title="'+t.mode),e+='"><span class="tt-label">'+n.htmlEncode(t.name)+"/"+t.arity+"</span>",t.iso&&(e+='<span class="tt-tags">',t.iso&&(e+='<span class="tt-tag">ISO</span>'),e+="</span>"),t.summary&&(e+='<div class="tt-title file">'+n.htmlEncode(t.summary)+"</div>"),e+="</div>",e+="</div>"}function f(e,n){if(m=e,e.length<2)return[];var i=[],r=new RegExp("\\b"+e,"g");S=r,t(".prolog-editor").each(function(){for(var e=this,n=t(e).prologEditor("search",r,{max:7}),o=0;o<n.length;o++)n[o].editor=e,n[o].regex=S,i.push(n[o])}),n(i)}function p(t){var e,i=t.text;return(e=i.search(S))>20&&(i="..."+i.slice(e-17)),i.length>80&&(i=i.substring(0,80)),'<div class="tt-match source"><span class="tt-line"><span class="tt-lineno">'+t.line+'</span><span class="tt-text">'+n.htmlEncode(i)+"</span></span></div>"}function g(t){return'<div class="tt-match user">'+function(t){return t.avatar?'<img class="avatar" src="'+encodeURI(t.avatar)+'">':""}(t)+'<span class="tt-label">'+n.htmlEncode(t.name)+"</span></div>"}var m,v=t(this),y=new i({name:"files",remote:{url:e.http.locations.swish_typeahead+"?set=file&q=%QUERY",wildcard:"%QUERY"},datumTokenizer:a,queryTokenizer:i.tokenizers.whitespace});y.initialize();var b=new i({name:"store_content",limit:20,cache:!1,remote:{url:e.http.locations.swish_typeahead+"?set=store_content&q=%QUERY",replace:r},datumTokenizer:c,queryTokenizer:i.tokenizers.whitespace});b.initialize();var x=null,w=null,_=new i({name:"source",limit:15,cache:!1,query_cache_length:1,remote:{url:e.http.locations.swish_typeahead+"?set=sources&q=%QUERY",replace:r},datumTokenizer:c,queryTokenizer:i.tokenizers.whitespace});_.initialize();var S,C=new i({name:"users",limit:20,cache:!1,remote:{url:e.http.locations.swish_typeahead+"?set=user&q=%QUERY",replace:r},datumTokenizer:c,queryTokenizer:i.tokenizers.whitespace});C.initialize();var T={source:{name:"source",display:"text",source:f,templates:{suggestion:p}},sources:{name:"sources",display:"file",source:_.ttAdapter(),templates:{suggestion:u},limit:15},files:{name:"files",display:"name",source:y.ttAdapter(),templates:{suggestion:s}},store_content:{name:"store_content",display:"file",source:b.ttAdapter(),templates:{suggestion:l}},predicates:{name:"predicates",display:function(t){return t.name+"/"+t.arity},source:h,templates:{suggestion:d}},users:{name:"users",display:"name",source:C.ttAdapter(),templates:{suggestion:g}}},k=T.sources.source;T.sources.source=function(t,e){return x=null,w=null,S=new RegExp(RegExp.escape(t)),k(t,e)},v.typeahead({minLength:2,highlight:!0},function(t){for(var e=[],n=t.replace(/\s+/g," ").split(" "),i=0;i<n.length;i++)e.push(T[n[i]]);return e}(v.data("search-in"))).on("typeahead:selected typeahead:autocompleted",function(e,n){if(0==o.search)v.data("json-value",n);else if("store"==n.type)n.query&&(n.regex=new RegExp(RegExp.escape(n.query),"g"),n.showAllMatches=!0),t(e.target).closest(".swish").swish("playFile",n);else if(void 0!==n.arity)t(".swish-event-receiver").trigger("pldoc",n);else if(void 0!==n.editor&&void 0!==n.line)t(n.editor).prologEditor("gotoLine",n.line,{regex:n.regex,showAllMatches:!0});else if(void 0!==n.alias){var i=encodeURI("/"+n.alias+"/"+n.file+"."+n.ext),r={url:i,line:n.line};n.query&&(r.regex=new RegExp(RegExp.escape(n.query),"g"),r.showAllMatches=!0),t(e.target).closest(".swish").swish("playURL",r)}else v.data("json-value",n),console.log(v.data("json-value"))}),0!=o.search&&v.closest("form").submit(function(t){var e=v.data("json-value"),n=v.val();return e&&e.datum&&e.datum.label==n||(e=n),v.val(""),v.data("json-value",null),v.search("search",e),!1})})},search:function(t){alert("Full search not yet implemented\nPlease select from auto completion list")}};t.fn.search=function(e){return o[e]?o[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.search"):o._init.apply(this,arguments)}}(jQuery),RegExp.escape=function(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}}),function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define("cm/lib/codemirror",e):t.CodeMirror=e()}(this,function(){"use strict";function t(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}function e(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firstChild);return t}function n(t,n){return e(t).appendChild(n)}function i(t,e,n,i){var r=document.createElement(t)
+;if(n&&(r.className=n),i&&(r.style.cssText=i),"string"==typeof e)r.appendChild(document.createTextNode(e));else if(e)for(var o=0;o<e.length;++o)r.appendChild(e[o]);return r}function r(t,e,n,r){var o=i(t,e,n,r);return o.setAttribute("role","presentation"),o}function o(t,e){if(3==e.nodeType&&(e=e.parentNode),t.contains)return t.contains(e);do{if(11==e.nodeType&&(e=e.host),e==t)return!0}while(e=e.parentNode)}function a(){var t;try{t=document.activeElement}catch(e){t=document.body||null}for(;t&&t.shadowRoot&&t.shadowRoot.activeElement;)t=t.shadowRoot.activeElement;return t}function s(e,n){var i=e.className;t(n).test(i)||(e.className+=(i?" ":"")+n)}function l(e,n){for(var i=e.split(" "),r=0;r<i.length;r++)i[r]&&!t(i[r]).test(n)&&(n+=" "+i[r]);return n}function c(t){var e=Array.prototype.slice.call(arguments,1);return function(){return t.apply(null,e)}}function u(t,e,n){e||(e={});for(var i in t)!t.hasOwnProperty(i)||!1===n&&e.hasOwnProperty(i)||(e[i]=t[i]);return e}function h(t,e,n,i,r){null==e&&-1==(e=t.search(/[^\s\u00a0]/))&&(e=t.length);for(var o=i||0,a=r||0;;){var s=t.indexOf("\t",o);if(s<0||s>=e)return a+(e-o);a+=s-o,a+=n-a%n,o=s+1}}function d(t,e){for(var n=0;n<t.length;++n)if(t[n]==e)return n;return-1}function f(t,e,n){for(var i=0,r=0;;){var o=t.indexOf("\t",i);-1==o&&(o=t.length);var a=o-i;if(o==t.length||r+a>=e)return i+Math.min(a,e-r);if(r+=o-i,r+=n-r%n,i=o+1,r>=e)return i}}function p(t){for(;Xa.length<=t;)Xa.push(g(Xa)+" ");return Xa[t]}function g(t){return t[t.length-1]}function m(t,e){for(var n=[],i=0;i<t.length;i++)n[i]=e(t[i],i);return n}function v(t,e,n){for(var i=0,r=n(e);i<t.length&&n(t[i])<=r;)i++;t.splice(i,0,e)}function y(){}function b(t,e){var n;return Object.create?n=Object.create(t):(y.prototype=t,n=new y),e&&u(e,n),n}function x(t){return/\w/.test(t)||t>"€"&&(t.toUpperCase()!=t.toLowerCase()||Ya.test(t))}function w(t,e){return e?!!(e.source.indexOf("\\w")>-1&&x(t))||e.test(t):x(t)}function _(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;return!0}function S(t){return t.charCodeAt(0)>=768&&Qa.test(t)}function C(t,e,n){for(;(n<0?e>0:e<t.length)&&S(t.charAt(e));)e+=n;return e}function T(t,e,n){for(var i=e>n?-1:1;;){if(e==n)return e;var r=(e+n)/2,o=i<0?Math.ceil(r):Math.floor(r);if(o==e)return t(o)?e:n;t(o)?n=o:e=o+i}}function k(t,e,n){var o=this;this.input=n,o.scrollbarFiller=i("div",null,"CodeMirror-scrollbar-filler"),o.scrollbarFiller.setAttribute("cm-not-content","true"),o.gutterFiller=i("div",null,"CodeMirror-gutter-filler"),o.gutterFiller.setAttribute("cm-not-content","true"),o.lineDiv=r("div",null,"CodeMirror-code"),o.selectionDiv=i("div",null,null,"position: relative; z-index: 1"),o.cursorDiv=i("div",null,"CodeMirror-cursors"),o.measure=i("div",null,"CodeMirror-measure"),o.lineMeasure=i("div",null,"CodeMirror-measure"),o.lineSpace=r("div",[o.measure,o.lineMeasure,o.selectionDiv,o.cursorDiv,o.lineDiv],null,"position: relative; outline: none");var a=r("div",[o.lineSpace],"CodeMirror-lines");o.mover=i("div",[a],null,"position: relative"),o.sizer=i("div",[o.mover],"CodeMirror-sizer"),o.sizerWidth=null,o.heightForcer=i("div",null,null,"position: absolute; height: "+Ba+"px; width: 1px;"),o.gutters=i("div",null,"CodeMirror-gutters"),o.lineGutter=null,o.scroller=i("div",[o.sizer,o.heightForcer,o.gutters],"CodeMirror-scroll"),o.scroller.setAttribute("tabIndex","-1"),o.wrapper=i("div",[o.scrollbarFiller,o.gutterFiller,o.scroller],"CodeMirror"),ba&&xa<8&&(o.gutters.style.zIndex=-1,o.scroller.style.paddingRight=0),wa||ga&&La||(o.scroller.draggable=!0),t&&(t.appendChild?t.appendChild(o.wrapper):t(o.wrapper)),o.viewFrom=o.viewTo=e.first,o.reportedViewFrom=o.reportedViewTo=e.first,o.view=[],o.renderedView=null,o.externalMeasured=null,o.viewOffset=0,o.lastWrapHeight=o.lastWrapWidth=0,o.updateLineNumbers=null,o.nativeBarWidth=o.barHeight=o.barWidth=0,o.scrollbarsClipped=!1,o.lineNumWidth=o.lineNumInnerWidth=o.lineNumChars=null,o.alignWidgets=!1,o.cachedCharWidth=o.cachedTextHeight=o.cachedPaddingH=null,o.maxLine=null,o.maxLineLength=0,o.maxLineChanged=!1,o.wheelDX=o.wheelDY=o.wheelStartX=o.wheelStartY=null,o.shift=!1,o.selForContextMenu=null,o.activeTouch=null,n.init(o)}function A(t,e){if((e-=t.first)<0||e>=t.size)throw new Error("There is no line "+(e+t.first)+" in the document.");for(var n=t;!n.lines;)for(var i=0;;++i){var r=n.children[i],o=r.chunkSize();if(e<o){n=r;break}e-=o}return n.lines[e]}function M(t,e,n){var i=[],r=e.line;return t.iter(e.line,n.line+1,function(t){var o=t.text;r==n.line&&(o=o.slice(0,n.ch)),r==e.line&&(o=o.slice(e.ch)),i.push(o),++r}),i}function E(t,e,n){var i=[];return t.iter(e,n,function(t){i.push(t.text)}),i}function L(t,e){var n=e-t.height;if(n)for(var i=t;i;i=i.parent)i.height+=n}function P(t){if(null==t.parent)return null;for(var e=t.parent,n=d(e.lines,t),i=e.parent;i;e=i,i=i.parent)for(var r=0;i.children[r]!=e;++r)n+=i.children[r].chunkSize();return n+e.first}function D(t,e){var n=t.first;t:do{for(var i=0;i<t.children.length;++i){var r=t.children[i],o=r.height;if(e<o){t=r;continue t}e-=o,n+=r.chunkSize()}return n}while(!t.lines);for(var a=0;a<t.lines.length;++a){var s=t.lines[a],l=s.height;if(e<l)break;e-=l}return n+a}function N(t,e){return e>=t.first&&e<t.first+t.size}function O(t,e){return String(t.lineNumberFormatter(e+t.firstLineNumber))}function R(t,e,n){if(void 0===n&&(n=null),!(this instanceof R))return new R(t,e,n);this.line=t,this.ch=e,this.sticky=n}function I(t,e){return t.line-e.line||t.ch-e.ch}function F(t,e){return t.sticky==e.sticky&&0==I(t,e)}function j(t){return R(t.line,t.ch)}function H(t,e){return I(t,e)<0?e:t}function z(t,e){return I(t,e)<0?t:e}function V(t,e){return Math.max(t.first,Math.min(e,t.first+t.size-1))}function q(t,e){if(e.line<t.first)return R(t.first,0);var n=t.first+t.size-1;return e.line>n?R(n,A(t,n).text.length):B(e,A(t,e.line).text.length)}function B(t,e){var n=t.ch;return null==n||n>e?R(t.line,e):n<0?R(t.line,0):t}function G(t,e){for(var n=[],i=0;i<e.length;i++)n[i]=q(t,e[i]);return n}function $(){Za=!0}function W(){Ka=!0}function U(t,e,n){this.marker=t,this.from=e,this.to=n}function X(t,e){if(t)for(var n=0;n<t.length;++n){var i=t[n];if(i.marker==e)return i}}function Y(t,e){for(var n,i=0;i<t.length;++i)t[i]!=e&&(n||(n=[])).push(t[i]);return n}function Q(t,e){t.markedSpans=t.markedSpans?t.markedSpans.concat([e]):[e],e.marker.attachLine(t)}function Z(t,e,n){var i;if(t)for(var r=0;r<t.length;++r){var o=t[r],a=o.marker,s=null==o.from||(a.inclusiveLeft?o.from<=e:o.from<e);if(s||o.from==e&&"bookmark"==a.type&&(!n||!o.marker.insertLeft)){var l=null==o.to||(a.inclusiveRight?o.to>=e:o.to>e);(i||(i=[])).push(new U(a,o.from,l?null:o.to))}}return i}function K(t,e,n){var i;if(t)for(var r=0;r<t.length;++r){var o=t[r],a=o.marker,s=null==o.to||(a.inclusiveRight?o.to>=e:o.to>e);if(s||o.from==e&&"bookmark"==a.type&&(!n||o.marker.insertLeft)){var l=null==o.from||(a.inclusiveLeft?o.from<=e:o.from<e);(i||(i=[])).push(new U(a,l?null:o.from-e,null==o.to?null:o.to-e))}}return i}function J(t,e){if(e.full)return null;var n=N(t,e.from.line)&&A(t,e.from.line).markedSpans,i=N(t,e.to.line)&&A(t,e.to.line).markedSpans;if(!n&&!i)return null;var r=e.from.ch,o=e.to.ch,a=0==I(e.from,e.to),s=Z(n,r,a),l=K(i,o,a),c=1==e.text.length,u=g(e.text).length+(c?r:0);if(s)for(var h=0;h<s.length;++h){var d=s[h];if(null==d.to){var f=X(l,d.marker);f?c&&(d.to=null==f.to?null:f.to+u):d.to=r}}if(l)for(var p=0;p<l.length;++p){var m=l[p];if(null!=m.to&&(m.to+=u),null==m.from){var v=X(s,m.marker);v||(m.from=u,c&&(s||(s=[])).push(m))}else m.from+=u,c&&(s||(s=[])).push(m)}s&&(s=tt(s)),l&&l!=s&&(l=tt(l));var y=[s];if(!c){var b,x=e.text.length-2;if(x>0&&s)for(var w=0;w<s.length;++w)null==s[w].to&&(b||(b=[])).push(new U(s[w].marker,null,null));for(var _=0;_<x;++_)y.push(b);y.push(l)}return y}function tt(t){for(var e=0;e<t.length;++e){var n=t[e];null!=n.from&&n.from==n.to&&!1!==n.marker.clearWhenEmpty&&t.splice(e--,1)}return t.length?t:null}function et(t,e,n){var i=null;if(t.iter(e.line,n.line+1,function(t){if(t.markedSpans)for(var e=0;e<t.markedSpans.length;++e){var n=t.markedSpans[e].marker;!n.readOnly||i&&-1!=d(i,n)||(i||(i=[])).push(n)}}),!i)return null;for(var r=[{from:e,to:n}],o=0;o<i.length;++o)for(var a=i[o],s=a.find(0),l=0;l<r.length;++l){var c=r[l];if(!(I(c.to,s.from)<0||I(c.from,s.to)>0)){var u=[l,1],h=I(c.from,s.from),f=I(c.to,s.to);(h<0||!a.inclusiveLeft&&!h)&&u.push({from:c.from,to:s.from}),(f>0||!a.inclusiveRight&&!f)&&u.push({from:s.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}function nt(t){var e=t.markedSpans;if(e){for(var n=0;n<e.length;++n)e[n].marker.detachLine(t);t.markedSpans=null}}function it(t,e){if(e){for(var n=0;n<e.length;++n)e[n].marker.attachLine(t);t.markedSpans=e}}function rt(t){return t.inclusiveLeft?-1:0}function ot(t){return t.inclusiveRight?1:0}function at(t,e){var n=t.lines.length-e.lines.length;if(0!=n)return n;var i=t.find(),r=e.find(),o=I(i.from,r.from)||rt(t)-rt(e);if(o)return-o;var a=I(i.to,r.to)||ot(t)-ot(e);return a||e.id-t.id}function st(t,e){var n,i=Ka&&t.markedSpans;if(i)for(var r=void 0,o=0;o<i.length;++o)r=i[o],r.marker.collapsed&&null==(e?r.from:r.to)&&(!n||at(n,r.marker)<0)&&(n=r.marker);return n}function lt(t){return st(t,!0)}function ct(t){return st(t,!1)}function ut(t,e){var n,i=Ka&&t.markedSpans;if(i)for(var r=0;r<i.length;++r){var o=i[r];o.marker.collapsed&&(null==o.from||o.from<e)&&(null==o.to||o.to>e)&&(!n||at(n,o.marker)<0)&&(n=o.marker)}return n}function ht(t,e,n,i,r){var o=A(t,e),a=Ka&&o.markedSpans;if(a)for(var s=0;s<a.length;++s){var l=a[s];if(l.marker.collapsed){var c=l.marker.find(0),u=I(c.from,n)||rt(l.marker)-rt(r),h=I(c.to,i)||ot(l.marker)-ot(r);if(!(u>=0&&h<=0||u<=0&&h>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?I(c.to,n)>=0:I(c.to,n)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?I(c.from,i)<=0:I(c.from,i)<0)))return!0}}}function dt(t){for(var e;e=lt(t);)t=e.find(-1,!0).line;return t}function ft(t){for(var e;e=ct(t);)t=e.find(1,!0).line;return t}function pt(t){for(var e,n;e=ct(t);)t=e.find(1,!0).line,(n||(n=[])).push(t);return n}function gt(t,e){var n=A(t,e),i=dt(n);return n==i?e:P(i)}function mt(t,e){if(e>t.lastLine())return e;var n,i=A(t,e);if(!vt(t,i))return e;for(;n=ct(i);)i=n.find(1,!0).line;return P(i)+1}function vt(t,e){var n=Ka&&e.markedSpans;if(n)for(var i=void 0,r=0;r<n.length;++r)if(i=n[r],i.marker.collapsed){if(null==i.from)return!0;if(!i.marker.widgetNode&&0==i.from&&i.marker.inclusiveLeft&&yt(t,e,i))return!0}}function yt(t,e,n){if(null==n.to){var i=n.marker.find(1,!0);return yt(t,i.line,X(i.line.markedSpans,n.marker))}if(n.marker.inclusiveRight&&n.to==e.text.length)return!0;for(var r=void 0,o=0;o<e.markedSpans.length;++o)if(r=e.markedSpans[o],r.marker.collapsed&&!r.marker.widgetNode&&r.from==n.to&&(null==r.to||r.to!=n.from)&&(r.marker.inclusiveLeft||n.marker.inclusiveRight)&&yt(t,e,r))return!0}function bt(t){t=dt(t);for(var e=0,n=t.parent,i=0;i<n.lines.length;++i){var r=n.lines[i];if(r==t)break;e+=r.height}for(var o=n.parent;o;n=o,o=n.parent)for(var a=0;a<o.children.length;++a){var s=o.children[a];if(s==n)break;e+=s.height}return e}function xt(t){if(0==t.height)return 0;for(var e,n=t.text.length,i=t;e=lt(i);){var r=e.find(0,!0);i=r.from.line,n+=r.from.ch-r.to.ch}for(i=t;e=ct(i);){var o=e.find(0,!0);n-=i.text.length-o.from.ch,i=o.to.line,n+=i.text.length-o.to.ch}return n}function wt(t){var e=t.display,n=t.doc;e.maxLine=A(n,n.first),e.maxLineLength=xt(e.maxLine),e.maxLineChanged=!0,n.iter(function(t){var n=xt(t);n>e.maxLineLength&&(e.maxLineLength=n,e.maxLine=t)})}function _t(t,e,n,i){if(!t)return i(e,n,"ltr",0);for(var r=!1,o=0;o<t.length;++o){var a=t[o];(a.from<n&&a.to>e||e==n&&a.to==e)&&(i(Math.max(a.from,e),Math.min(a.to,n),1==a.level?"rtl":"ltr",o),r=!0)}r||i(e,n,"ltr")}function St(t,e,n){var i;Ja=null;for(var r=0;r<t.length;++r){var o=t[r];if(o.from<e&&o.to>e)return r;o.to==e&&(o.from!=o.to&&"before"==n?i=r:Ja=r),o.from==e&&(o.from!=o.to&&"before"!=n?i=r:Ja=r)}return null!=i?i:Ja}function Ct(t,e){var n=t.order;return null==n&&(n=t.order=ts(t.text,e)),n}function Tt(t,e){return t._handlers&&t._handlers[e]||es}function kt(t,e,n){if(t.removeEventListener)t.removeEventListener(e,n,!1);else if(t.detachEvent)t.detachEvent("on"+e,n);else{var i=t._handlers,r=i&&i[e];if(r){var o=d(r,n);o>-1&&(i[e]=r.slice(0,o).concat(r.slice(o+1)))}}}function At(t,e){var n=Tt(t,e);if(n.length)for(var i=Array.prototype.slice.call(arguments,2),r=0;r<n.length;++r)n[r].apply(null,i)}function Mt(t,e,n){return"string"==typeof e&&(e={type:e,preventDefault:function(){this.defaultPrevented=!0}}),At(t,n||e.type,t,e),Ot(e)||e.codemirrorIgnore}function Et(t){var e=t._handlers&&t._handlers.cursorActivity;if(e)for(var n=t.curOp.cursorActivityHandlers||(t.curOp.cursorActivityHandlers=[]),i=0;i<e.length;++i)-1==d(n,e[i])&&n.push(e[i])}function Lt(t,e){return Tt(t,e).length>0}function Pt(t){t.prototype.on=function(t,e){ns(this,t,e)},t.prototype.off=function(t,e){kt(this,t,e)}}function Dt(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function Nt(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}function Ot(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.returnValue}function Rt(t){Dt(t),Nt(t)}function It(t){return t.target||t.srcElement}function Ft(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?e=3:4&t.button&&(e=2)),Pa&&t.ctrlKey&&1==e&&(e=3),e}function jt(t){if(null==Va){var e=i("span","​");n(t,i("span",[e,document.createTextNode("x")])),0!=t.firstChild.offsetHeight&&(Va=e.offsetWidth<=1&&e.offsetHeight>2&&!(ba&&xa<8))}var r=Va?i("span","​"):i("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return r.setAttribute("cm-text",""),r}function Ht(t){if(null!=qa)return qa;var i=n(t,document.createTextNode("AخA")),r=Ra(i,0,1).getBoundingClientRect(),o=Ra(i,1,2).getBoundingClientRect();return e(t),!(!r||r.left==r.right)&&(qa=o.right-r.right<3)}function zt(t){if(null!=ss)return ss;var e=n(t,i("span","x")),r=e.getBoundingClientRect(),o=Ra(e,0,1).getBoundingClientRect();return ss=Math.abs(r.left-o.left)>1}function Vt(t,e){arguments.length>2&&(e.dependencies=Array.prototype.slice.call(arguments,2)),ls[t]=e}function qt(t,e){cs[t]=e}function Bt(t){if("string"==typeof t&&cs.hasOwnProperty(t))t=cs[t];else if(t&&"string"==typeof t.name&&cs.hasOwnProperty(t.name)){var e=cs[t.name];"string"==typeof e&&(e={name:e}),t=b(e,t),t.name=e.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return Bt("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return Bt("application/json")}return"string"==typeof t?{name:t}:t||{name:"null"}}function Gt(t,e){e=Bt(e);var n=ls[e.name];if(!n)return Gt(t,"text/plain");var i=n(t,e);if(us.hasOwnProperty(e.name)){var r=us[e.name];for(var o in r)r.hasOwnProperty(o)&&(i.hasOwnProperty(o)&&(i["_"+o]=i[o]),i[o]=r[o])}if(i.name=e.name,e.helperType&&(i.helperType=e.helperType),e.modeProps)for(var a in e.modeProps)i[a]=e.modeProps[a];return i}function $t(t,e){u(e,us.hasOwnProperty(t)?us[t]:us[t]={})}function Wt(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e);var n={};for(var i in e){var r=e[i];r instanceof Array&&(r=r.concat([])),n[i]=r}return n}function Ut(t,e){for(var n;t.innerMode&&(n=t.innerMode(e))&&n.mode!=t;)e=n.state,t=n.mode;return n||{mode:t,state:e}}function Xt(t,e,n){return!t.startState||t.startState(e,n)}function Yt(t,e,n,i){var r=[t.state.modeGen],o={};ie(t,e.text,t.doc.mode,n,function(t,e){return r.push(t,e)},o,i);for(var a=n.state,s=0;s<t.state.overlays.length;++s)!function(i){n.baseTokens=r;var s=t.state.overlays[i],l=1,c=0;n.state=!0,ie(t,e.text,s.mode,n,function(t,e){for(var n=l;c<t;){var i=r[l];i>t&&r.splice(l,1,t,r[l+1],i),l+=2,c=Math.min(t,i)}if(e)if(s.opaque)r.splice(n,l-n,t,"overlay "+e),l=n+2;else for(;n<l;n+=2){var o=r[n+1];r[n+1]=(o?o+" ":"")+"overlay "+e}},o),n.state=a,n.baseTokens=null,n.baseTokenPos=1}(s);return{styles:r,classes:o.bgClass||o.textClass?o:null}}function Qt(t,e,n){if(!e.styles||e.styles[0]!=t.state.modeGen){var i=Zt(t,P(e)),r=e.text.length>t.options.maxHighlightLength&&Wt(t.doc.mode,i.state),o=Yt(t,e,i);r&&(i.state=r),e.stateAfter=i.save(!r),e.styles=o.styles,o.classes?e.styleClasses=o.classes:e.styleClasses&&(e.styleClasses=null),n===t.doc.highlightFrontier&&(t.doc.modeFrontier=Math.max(t.doc.modeFrontier,++t.doc.highlightFrontier))}return e.styles}function Zt(t,e,n){var i=t.doc,r=t.display;if(!i.mode.startState)return new fs(i,!0,e);var o=re(t,e,n),a=o>i.first&&A(i,o-1).stateAfter,s=a?fs.fromSaved(i,a,o):new fs(i,Xt(i.mode),o);return i.iter(o,e,function(n){Kt(t,n.text,s);var i=s.line;n.stateAfter=i==e-1||i%5==0||i>=r.viewFrom&&i<r.viewTo?s.save():null,s.nextLine()}),n&&(i.modeFrontier=s.line),s}function Kt(t,e,n,i){var r=t.doc.mode,o=new hs(e,t.options.tabSize,n);for(o.start=o.pos=i||0,""==e&&Jt(r,n.state);!o.eol();)te(r,o,n.state),o.start=o.pos}function Jt(t,e){if(t.blankLine)return t.blankLine(e);if(t.innerMode){var n=Ut(t,e);return n.mode.blankLine?n.mode.blankLine(n.state):void 0}}function te(t,e,n,i){for(var r=0;r<10;r++){i&&(i[0]=Ut(t,n).mode);var o=t.token(e,n);if(e.pos>e.start)return o}throw new Error("Mode "+t.name+" failed to advance stream.")}function ee(t,e,n,i){var r,o=t.doc,a=o.mode;e=q(o,e);var s,l=A(o,e.line),c=Zt(t,e.line,n),u=new hs(l.text,t.options.tabSize,c);for(i&&(s=[]);(i||u.pos<e.ch)&&!u.eol();)u.start=u.pos,r=te(a,u,c.state),i&&s.push(new ps(u,r,Wt(o.mode,c.state)));return i?s:new ps(u,r,c.state)}function ne(t,e){if(t)for(;;){var n=t.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!n)break;t=t.slice(0,n.index)+t.slice(n.index+n[0].length);var i=n[1]?"bgClass":"textClass";null==e[i]?e[i]=n[2]:new RegExp("(?:^|s)"+n[2]+"(?:$|s)").test(e[i])||(e[i]+=" "+n[2])}return t}function ie(t,e,n,i,r,o,a){var s=n.flattenSpans;null==s&&(s=t.options.flattenSpans);var l,c=0,u=null,h=new hs(e,t.options.tabSize,i),d=t.options.addModeClass&&[null];for(""==e&&ne(Jt(n,i.state),o);!h.eol();){if(h.pos>t.options.maxHighlightLength?(s=!1,a&&Kt(t,e,i,h.pos),h.pos=e.length,l=null):l=ne(te(n,h,i.state,d),o),d){var f=d[0].name;f&&(l="m-"+(l?f+" "+l:f))}if(!s||u!=l){for(;c<h.start;)c=Math.min(h.start,c+5e3),r(c,u);u=l}h.start=h.pos}for(;c<h.pos;){var p=Math.min(h.pos,c+5e3);r(p,u),c=p}}function re(t,e,n){for(var i,r,o=t.doc,a=n?-1:e-(t.doc.mode.innerMode?1e3:100),s=e;s>a;--s){if(s<=o.first)return o.first;var l=A(o,s-1),c=l.stateAfter;if(c&&(!n||s+(c instanceof ds?c.lookAhead:0)<=o.modeFrontier))return s;var u=h(l.text,null,t.options.tabSize);(null==r||i>u)&&(r=s-1,i=u)}return r}function oe(t,e){if(t.modeFrontier=Math.min(t.modeFrontier,e),!(t.highlightFrontier<e-10)){for(var n=t.first,i=e-1;i>n;i--){var r=A(t,i).stateAfter;if(r&&(!(r instanceof ds)||i+r.lookAhead<e)){n=i+1;break}}t.highlightFrontier=Math.min(t.highlightFrontier,n)}}function ae(t,e,n,i){t.text=e,t.stateAfter&&(t.stateAfter=null),t.styles&&(t.styles=null),null!=t.order&&(t.order=null),nt(t),it(t,n);var r=i?i(t):1;r!=t.height&&L(t,r)}function se(t){t.parent=null,nt(t)}function le(t,e){if(!t||/^\s*$/.test(t))return null;var n=e.addModeClass?ys:vs;return n[t]||(n[t]=t.replace(/\S+/g,"cm-$&"))}function ce(t,e){var n=r("span",null,null,wa?"padding-right: .1px":null),i={pre:r("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:t,trailingSpace:!1,splitSpaces:t.getOption("lineWrapping")};e.measure={};for(var o=0;o<=(e.rest?e.rest.length:0);o++){var a=o?e.rest[o-1]:e.line,s=void 0;i.pos=0,i.addToken=he,Ht(t.display.measure)&&(s=Ct(a,t.doc.direction))&&(i.addToken=fe(i.addToken,s)),i.map=[];ge(a,i,Qt(t,a,e!=t.display.externalMeasured&&P(a))),a.styleClasses&&(a.styleClasses.bgClass&&(i.bgClass=l(a.styleClasses.bgClass,i.bgClass||"")),a.styleClasses.textClass&&(i.textClass=l(a.styleClasses.textClass,i.textClass||""))),0==i.map.length&&i.map.push(0,0,i.content.appendChild(jt(t.display.measure))),0==o?(e.measure.map=i.map,e.measure.cache={}):((e.measure.maps||(e.measure.maps=[])).push(i.map),(e.measure.caches||(e.measure.caches=[])).push({}))}if(wa){var c=i.content.lastChild;(/\bcm-tab\b/.test(c.className)||c.querySelector&&c.querySelector(".cm-tab"))&&(i.content.className="cm-tab-wrap-hack")}return At(t,"renderLine",t,e.line,i.pre),i.pre.className&&(i.textClass=l(i.pre.className,i.textClass||"")),i}function ue(t){var e=i("span","•","cm-invalidchar");return e.title="\\u"+t.charCodeAt(0).toString(16),e.setAttribute("aria-label",e.title),e}function he(t,e,n,r,o,a,s){if(e){var l,c=t.splitSpaces?de(e,t.trailingSpace):e,u=t.cm.state.specialChars,h=!1;if(u.test(e)){l=document.createDocumentFragment();for(var d=0;;){u.lastIndex=d;var f=u.exec(e),g=f?f.index-d:e.length-d;if(g){var m=document.createTextNode(c.slice(d,d+g));ba&&xa<9?l.appendChild(i("span",[m])):l.appendChild(m),t.map.push(t.pos,t.pos+g,m),t.col+=g,t.pos+=g}if(!f)break;d+=g+1;var v=void 0;if("\t"==f[0]){var y=t.cm.options.tabSize,b=y-t.col%y;v=l.appendChild(i("span",p(b),"cm-tab")),v.setAttribute("role","presentation"),v.setAttribute("cm-text","\t"),t.col+=b}else"\r"==f[0]||"\n"==f[0]?(v=l.appendChild(i("span","\r"==f[0]?"␍":"␤","cm-invalidchar")),v.setAttribute("cm-text",f[0]),t.col+=1):(v=t.cm.options.specialCharPlaceholder(f[0]),v.setAttribute("cm-text",f[0]),ba&&xa<9?l.appendChild(i("span",[v])):l.appendChild(v),t.col+=1);t.map.push(t.pos,t.pos+1,v),t.pos++}}else t.col+=e.length,l=document.createTextNode(c),t.map.push(t.pos,t.pos+e.length,l),ba&&xa<9&&(h=!0),t.pos+=e.length;if(t.trailingSpace=32==c.charCodeAt(e.length-1),n||r||o||h||a){var x=n||"";r&&(x+=r),o&&(x+=o);var w=i("span",[l],x,a);if(s)for(var _ in s)s.hasOwnProperty(_)&&"style"!=_&&"class"!=_&&w.setAttribute(_,s[_]);return t.content.appendChild(w)}t.content.appendChild(l)}}function de(t,e){if(t.length>1&&!/  /.test(t))return t;for(var n=e,i="",r=0;r<t.length;r++){var o=t.charAt(r);" "!=o||!n||r!=t.length-1&&32!=t.charCodeAt(r+1)||(o=" "),i+=o,n=" "==o}return i}function fe(t,e){return function(n,i,r,o,a,s,l){r=r?r+" cm-force-border":"cm-force-border";for(var c=n.pos,u=c+i.length;;){for(var h=void 0,d=0;d<e.length&&(h=e[d],!(h.to>c&&h.from<=c));d++);if(h.to>=u)return t(n,i,r,o,a,s,l);t(n,i.slice(0,h.to-c),r,o,null,s,l),o=null,i=i.slice(h.to-c),c=h.to}}}function pe(t,e,n,i){var r=!i&&n.widgetNode;r&&t.map.push(t.pos,t.pos+e,r),!i&&t.cm.display.input.needsContentAttribute&&(r||(r=t.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",n.id)),r&&(t.cm.display.input.setUneditable(r),t.content.appendChild(r)),t.pos+=e,t.trailingSpace=!1}function ge(t,e,n){var i=t.markedSpans,r=t.text,o=0;if(i)for(var a,s,l,c,u,h,d,f=r.length,p=0,g=1,m="",v=0;;){if(v==p){l=c=u=s="",d=null,h=null,v=1/0;for(var y=[],b=void 0,x=0;x<i.length;++x){var w=i[x],_=w.marker;if("bookmark"==_.type&&w.from==p&&_.widgetNode)y.push(_);else if(w.from<=p&&(null==w.to||w.to>p||_.collapsed&&w.to==p&&w.from==p)){if(null!=w.to&&w.to!=p&&v>w.to&&(v=w.to,c=""),_.className&&(l+=" "+_.className),_.css&&(s=(s?s+";":"")+_.css),_.startStyle&&w.from==p&&(u+=" "+_.startStyle),_.endStyle&&w.to==v&&(b||(b=[])).push(_.endStyle,w.to),_.title&&((d||(d={})).title=_.title),_.attributes)for(var S in _.attributes)(d||(d={}))[S]=_.attributes[S];_.collapsed&&(!h||at(h.marker,_)<0)&&(h=w)}else w.from>p&&v>w.from&&(v=w.from)}if(b)for(var C=0;C<b.length;C+=2)b[C+1]==v&&(c+=" "+b[C]);if(!h||h.from==p)for(var T=0;T<y.length;++T)pe(e,0,y[T]);if(h&&(h.from||0)==p){if(pe(e,(null==h.to?f+1:h.to)-p,h.marker,null==h.from),null==h.to)return;h.to==p&&(h=!1)}}if(p>=f)break;for(var k=Math.min(f,v);;){if(m){var A=p+m.length;if(!h){var M=A>k?m.slice(0,k-p):m;e.addToken(e,M,a?a+l:l,u,p+M.length==v?c:"",s,d)}if(A>=k){m=m.slice(k-p),p=k;break}p=A,u=""}m=r.slice(o,o=n[g++]),a=le(n[g++],e.cm.options)}}else for(var E=1;E<n.length;E+=2)e.addToken(e,r.slice(o,o=n[E]),le(n[E+1],e.cm.options))}function me(t,e,n){this.line=e,this.rest=pt(e),this.size=this.rest?P(g(this.rest))-n+1:1,this.node=this.text=null,this.hidden=vt(t,e)}function ve(t,e,n){for(var i,r=[],o=e;o<n;o=i){var a=new me(t.doc,A(t.doc,o),o);i=o+a.size,r.push(a)}return r}function ye(t){bs?bs.ops.push(t):t.ownsGroup=bs={ops:[t],delayedCallbacks:[]}}function be(t){var e=t.delayedCallbacks,n=0;do{for(;n<e.length;n++)e[n].call(null);for(var i=0;i<t.ops.length;i++){var r=t.ops[i];if(r.cursorActivityHandlers)for(;r.cursorActivityCalled<r.cursorActivityHandlers.length;)r.cursorActivityHandlers[r.cursorActivityCalled++].call(null,r.cm)}}while(n<e.length)}function xe(t,e){var n=t.ownsGroup;if(n)try{be(n)}finally{bs=null,e(n)}}function we(t,e){var n=Tt(t,e);if(n.length){var i,r=Array.prototype.slice.call(arguments,2);bs?i=bs.delayedCallbacks:xs?i=xs:(i=xs=[],setTimeout(_e,0));for(var o=0;o<n.length;++o)!function(t){i.push(function(){return n[t].apply(null,r)})}(o)}}function _e(){var t=xs;xs=null;for(var e=0;e<t.length;++e)t[e]()}function Se(t,e,n,i){for(var r=0;r<e.changes.length;r++){var o=e.changes[r];"text"==o?Ae(t,e):"gutter"==o?Ee(t,e,n,i):"class"==o?Me(t,e):"widget"==o&&Le(t,e,i)}e.changes=null}function Ce(t){return t.node==t.text&&(t.node=i("div",null,null,"position: relative"),t.text.parentNode&&t.text.parentNode.replaceChild(t.node,t.text),t.node.appendChild(t.text),ba&&xa<8&&(t.node.style.zIndex=2)),t.node}function Te(t,e){var n=e.bgClass?e.bgClass+" "+(e.line.bgClass||""):e.line.bgClass;if(n&&(n+=" CodeMirror-linebackground"),e.background)n?e.background.className=n:(e.background.parentNode.removeChild(e.background),e.background=null);else if(n){var r=Ce(e);e.background=r.insertBefore(i("div",null,n),r.firstChild),t.display.input.setUneditable(e.background)}}function ke(t,e){var n=t.display.externalMeasured;return n&&n.line==e.line?(t.display.externalMeasured=null,e.measure=n.measure,n.built):ce(t,e)}function Ae(t,e){var n=e.text.className,i=ke(t,e);e.text==e.node&&(e.node=i.pre),e.text.parentNode.replaceChild(i.pre,e.text),e.text=i.pre,i.bgClass!=e.bgClass||i.textClass!=e.textClass?(e.bgClass=i.bgClass,e.textClass=i.textClass,Me(t,e)):n&&(e.text.className=n)}function Me(t,e){Te(t,e),e.line.wrapClass?Ce(e).className=e.line.wrapClass:e.node!=e.text&&(e.node.className="");var n=e.textClass?e.textClass+" "+(e.line.textClass||""):e.line.textClass;e.text.className=n||""}function Ee(t,e,n,r){if(e.gutter&&(e.node.removeChild(e.gutter),e.gutter=null),e.gutterBackground&&(e.node.removeChild(e.gutterBackground),e.gutterBackground=null),e.line.gutterClass){var o=Ce(e);e.gutterBackground=i("div",null,"CodeMirror-gutter-background "+e.line.gutterClass,"left: "+(t.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+"px; width: "+r.gutterTotalWidth+"px"),t.display.input.setUneditable(e.gutterBackground),o.insertBefore(e.gutterBackground,e.text)}var a=e.line.gutterMarkers;if(t.options.lineNumbers||a){var s=Ce(e),l=e.gutter=i("div",null,"CodeMirror-gutter-wrapper","left: "+(t.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+"px");if(t.display.input.setUneditable(l),s.insertBefore(l,e.text),e.line.gutterClass&&(l.className+=" "+e.line.gutterClass),!t.options.lineNumbers||a&&a["CodeMirror-linenumbers"]||(e.lineNumber=l.appendChild(i("div",O(t.options,n),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+r.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+t.display.lineNumInnerWidth+"px"))),a)for(var c=0;c<t.options.gutters.length;++c){var u=t.options.gutters[c],h=a.hasOwnProperty(u)&&a[u];h&&l.appendChild(i("div",[h],"CodeMirror-gutter-elt","left: "+r.gutterLeft[u]+"px; width: "+r.gutterWidth[u]+"px"))}}}function Le(t,e,n){e.alignable&&(e.alignable=null);for(var i=e.node.firstChild,r=void 0;i;i=r)r=i.nextSibling,"CodeMirror-linewidget"==i.className&&e.node.removeChild(i);De(t,e,n)}function Pe(t,e,n,i){var r=ke(t,e);return e.text=e.node=r.pre,r.bgClass&&(e.bgClass=r.bgClass),r.textClass&&(e.textClass=r.textClass),Me(t,e),Ee(t,e,n,i),De(t,e,i),e.node}function De(t,e,n){if(Ne(t,e.line,e,n,!0),e.rest)for(var i=0;i<e.rest.length;i++)Ne(t,e.rest[i],e,n,!1)}function Ne(t,e,n,r,o){if(e.widgets)for(var a=Ce(n),s=0,l=e.widgets;s<l.length;++s){var c=l[s],u=i("div",[c.node],"CodeMirror-linewidget");c.handleMouseEvents||u.setAttribute("cm-ignore-events","true"),Oe(c,u,n,r),t.display.input.setUneditable(u),o&&c.above?a.insertBefore(u,n.gutter||n.text):a.appendChild(u),we(c,"redraw")}}function Oe(t,e,n,i){if(t.noHScroll){(n.alignable||(n.alignable=[])).push(e);var r=i.wrapperWidth;e.style.left=i.fixedPos+"px",t.coverGutter||(r-=i.gutterTotalWidth,e.style.paddingLeft=i.gutterTotalWidth+"px"),e.style.width=r+"px"}t.coverGutter&&(e.style.zIndex=5,e.style.position="relative",t.noHScroll||(e.style.marginLeft=-i.gutterTotalWidth+"px"))}function Re(t){if(null!=t.height)return t.height;var e=t.doc.cm;if(!e)return 0;if(!o(document.body,t.node)){var r="position: relative;";t.coverGutter&&(r+="margin-left: -"+e.display.gutters.offsetWidth+"px;"),t.noHScroll&&(r+="width: "+e.display.wrapper.clientWidth+"px;"),n(e.display.measure,i("div",[t.node],null,r))}return t.height=t.node.parentNode.offsetHeight}function Ie(t,e){for(var n=It(e);n!=t.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&"true"==n.getAttribute("cm-ignore-events")||n.parentNode==t.sizer&&n!=t.mover)return!0}function Fe(t){return t.lineSpace.offsetTop}function je(t){return t.mover.offsetHeight-t.lineSpace.offsetHeight}function He(t){if(t.cachedPaddingH)return t.cachedPaddingH;var e=n(t.measure,i("pre","x")),r=window.getComputedStyle?window.getComputedStyle(e):e.currentStyle,o={left:parseInt(r.paddingLeft),right:parseInt(r.paddingRight)};return isNaN(o.left)||isNaN(o.right)||(t.cachedPaddingH=o),o}function ze(t){return Ba-t.display.nativeBarWidth}function Ve(t){return t.display.scroller.clientWidth-ze(t)-t.display.barWidth}function qe(t){return t.display.scroller.clientHeight-ze(t)-t.display.barHeight}function Be(t,e,n){var i=t.options.lineWrapping,r=i&&Ve(t);if(!e.measure.heights||i&&e.measure.width!=r){var o=e.measure.heights=[];if(i){e.measure.width=r;for(var a=e.text.firstChild.getClientRects(),s=0;s<a.length-1;s++){var l=a[s],c=a[s+1];Math.abs(l.bottom-c.bottom)>2&&o.push((l.bottom+c.top)/2-n.top)}}o.push(n.bottom-n.top)}}function Ge(t,e,n){if(t.line==e)return{map:t.measure.map,cache:t.measure.cache};for(var i=0;i<t.rest.length;i++)if(t.rest[i]==e)return{map:t.measure.maps[i],cache:t.measure.caches[i]};for(var r=0;r<t.rest.length;r++)if(P(t.rest[r])>n)return{map:t.measure.maps[r],cache:t.measure.caches[r],before:!0}}function $e(t,e){e=dt(e);var i=P(e),r=t.display.externalMeasured=new me(t.doc,e,i);r.lineN=i;var o=r.built=ce(t,r);return r.text=o.pre,n(t.display.lineMeasure,o.pre),r}function We(t,e,n,i){return Ye(t,Xe(t,e),n,i)}function Ue(t,e){if(e>=t.display.viewFrom&&e<t.display.viewTo)return t.display.view[An(t,e)];var n=t.display.externalMeasured;return n&&e>=n.lineN&&e<n.lineN+n.size?n:void 0}function Xe(t,e){var n=P(e),i=Ue(t,n);i&&!i.text?i=null:i&&i.changes&&(Se(t,i,n,_n(t)),t.curOp.forceUpdate=!0),i||(i=$e(t,e));var r=Ge(i,e,n);return{line:e,view:i,rect:null,map:r.map,cache:r.cache,before:r.before,hasHeights:!1}}function Ye(t,e,n,i,r){e.before&&(n=-1);var o,a=n+(i||"");return e.cache.hasOwnProperty(a)?o=e.cache[a]:(e.rect||(e.rect=e.view.text.getBoundingClientRect()),e.hasHeights||(Be(t,e.view,e.rect),e.hasHeights=!0),o=Ke(t,e,n,i),o.bogus||(e.cache[a]=o)),{left:o.left,right:o.right,top:r?o.rtop:o.top,bottom:r?o.rbottom:o.bottom}}function Qe(t,e,n){for(var i,r,o,a,s,l,c=0;c<t.length;c+=3)if(s=t[c],l=t[c+1],e<s?(r=0,o=1,a="left"):e<l?(r=e-s,o=r+1):(c==t.length-3||e==l&&t[c+3]>e)&&(o=l-s,r=o-1,e>=l&&(a="right")),null!=r){if(i=t[c+2],s==l&&n==(i.insertLeft?"left":"right")&&(a=n),"left"==n&&0==r)for(;c&&t[c-2]==t[c-3]&&t[c-1].insertLeft;)i=t[2+(c-=3)],a="left";if("right"==n&&r==l-s)for(;c<t.length-3&&t[c+3]==t[c+4]&&!t[c+5].insertLeft;)i=t[(c+=3)+2],a="right";break}return{node:i,start:r,end:o,collapse:a,coverStart:s,coverEnd:l}}function Ze(t,e){var n=ws;if("left"==e)for(var i=0;i<t.length&&(n=t[i]).left==n.right;i++);else for(var r=t.length-1;r>=0&&(n=t[r]).left==n.right;r--);return n}function Ke(t,e,n,i){var r,o=Qe(e.map,n,i),a=o.node,s=o.start,l=o.end,c=o.collapse;if(3==a.nodeType){for(var u=0;u<4;u++){
+for(;s&&S(e.line.text.charAt(o.coverStart+s));)--s;for(;o.coverStart+l<o.coverEnd&&S(e.line.text.charAt(o.coverStart+l));)++l;if(r=ba&&xa<9&&0==s&&l==o.coverEnd-o.coverStart?a.parentNode.getBoundingClientRect():Ze(Ra(a,s,l).getClientRects(),i),r.left||r.right||0==s)break;l=s,s-=1,c="right"}ba&&xa<11&&(r=Je(t.display.measure,r))}else{s>0&&(c=i="right");var h;r=t.options.lineWrapping&&(h=a.getClientRects()).length>1?h["right"==i?h.length-1:0]:a.getBoundingClientRect()}if(ba&&xa<9&&!s&&(!r||!r.left&&!r.right)){var d=a.parentNode.getClientRects()[0];r=d?{left:d.left,right:d.left+wn(t.display),top:d.top,bottom:d.bottom}:ws}for(var f=r.top-e.rect.top,p=r.bottom-e.rect.top,g=(f+p)/2,m=e.view.measure.heights,v=0;v<m.length-1&&!(g<m[v]);v++);var y=v?m[v-1]:0,b=m[v],x={left:("right"==c?r.right:r.left)-e.rect.left,right:("left"==c?r.left:r.right)-e.rect.left,top:y,bottom:b};return r.left||r.right||(x.bogus=!0),t.options.singleCursorHeightPerLine||(x.rtop=f,x.rbottom=p),x}function Je(t,e){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!zt(t))return e;var n=screen.logicalXDPI/screen.deviceXDPI,i=screen.logicalYDPI/screen.deviceYDPI;return{left:e.left*n,right:e.right*n,top:e.top*i,bottom:e.bottom*i}}function tn(t){if(t.measure&&(t.measure.cache={},t.measure.heights=null,t.rest))for(var e=0;e<t.rest.length;e++)t.measure.caches[e]={}}function en(t){t.display.externalMeasure=null,e(t.display.lineMeasure);for(var n=0;n<t.display.view.length;n++)tn(t.display.view[n])}function nn(t){en(t),t.display.cachedCharWidth=t.display.cachedTextHeight=t.display.cachedPaddingH=null,t.options.lineWrapping||(t.display.maxLineChanged=!0),t.display.lineNumChars=null}function rn(){return Sa&&Ea?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function on(){return Sa&&Ea?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function an(t){var e=0;if(t.widgets)for(var n=0;n<t.widgets.length;++n)t.widgets[n].above&&(e+=Re(t.widgets[n]));return e}function sn(t,e,n,i,r){if(!r){var o=an(e);n.top+=o,n.bottom+=o}if("line"==i)return n;i||(i="local");var a=bt(e);if("local"==i?a+=Fe(t.display):a-=t.display.viewOffset,"page"==i||"window"==i){var s=t.display.lineSpace.getBoundingClientRect();a+=s.top+("window"==i?0:on());var l=s.left+("window"==i?0:rn());n.left+=l,n.right+=l}return n.top+=a,n.bottom+=a,n}function ln(t,e,n){if("div"==n)return e;var i=e.left,r=e.top;if("page"==n)i-=rn(),r-=on();else if("local"==n||!n){var o=t.display.sizer.getBoundingClientRect();i+=o.left,r+=o.top}var a=t.display.lineSpace.getBoundingClientRect();return{left:i-a.left,top:r-a.top}}function cn(t,e,n,i,r){return i||(i=A(t.doc,e.line)),sn(t,i,We(t,i,e.ch,r),n)}function un(t,e,n,i,r,o){function a(e,a){var s=Ye(t,r,e,a?"right":"left",o);return a?s.left=s.right:s.right=s.left,sn(t,i,s,n)}function s(t,e,n){var i=l[e],r=1==i.level;return a(n?t-1:t,r!=n)}i=i||A(t.doc,e.line),r||(r=Xe(t,i));var l=Ct(i,t.doc.direction),c=e.ch,u=e.sticky;if(c>=i.text.length?(c=i.text.length,u="before"):c<=0&&(c=0,u="after"),!l)return a("before"==u?c-1:c,"before"==u);var h=St(l,c,u),d=Ja,f=s(c,h,"before"==u);return null!=d&&(f.other=s(c,d,"before"!=u)),f}function hn(t,e){var n=0;e=q(t.doc,e),t.options.lineWrapping||(n=wn(t.display)*e.ch);var i=A(t.doc,e.line),r=bt(i)+Fe(t.display);return{left:n,right:n,top:r,bottom:r+i.height}}function dn(t,e,n,i,r){var o=R(t,e,n);return o.xRel=r,i&&(o.outside=!0),o}function fn(t,e,n){var i=t.doc;if((n+=t.display.viewOffset)<0)return dn(i.first,0,null,!0,-1);var r=D(i,n),o=i.first+i.size-1;if(r>o)return dn(i.first+i.size-1,A(i,o).text.length,null,!0,1);e<0&&(e=0);for(var a=A(i,r);;){var s=vn(t,a,r,e,n),l=ut(a,s.ch+(s.xRel>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==r)return c;a=A(i,r=c.line)}}function pn(t,e,n,i){i-=an(e);var r=e.text.length,o=T(function(e){return Ye(t,n,e-1).bottom<=i},r,0);return r=T(function(e){return Ye(t,n,e).top>i},o,r),{begin:o,end:r}}function gn(t,e,n,i){return n||(n=Xe(t,e)),pn(t,e,n,sn(t,e,Ye(t,n,i),"line").top)}function mn(t,e,n,i){return!(t.bottom<=n)&&(t.top>n||(i?t.left:t.right)>e)}function vn(t,e,n,i,r){r-=bt(e);var o=Xe(t,e),a=an(e),s=0,l=e.text.length,c=!0,u=Ct(e,t.doc.direction);if(u){var h=(t.options.lineWrapping?bn:yn)(t,e,n,o,u,i,r);c=1!=h.level,s=c?h.from:h.to-1,l=c?h.to:h.from-1}var d,f,p=null,g=null,m=T(function(e){var n=Ye(t,o,e);return n.top+=a,n.bottom+=a,!!mn(n,i,r,!1)&&(n.top<=r&&n.left<=i&&(p=e,g=n),!0)},s,l),v=!1;if(g){var y=i-g.left<g.right-i,b=y==c;m=p+(b?0:1),f=b?"after":"before",d=y?g.left:g.right}else{c||m!=l&&m!=s||m++,f=0==m?"after":m==e.text.length?"before":Ye(t,o,m-(c?1:0)).bottom+a<=r==c?"after":"before";var x=un(t,R(n,m,f),"line",e,o);d=x.left,v=r<x.top||r>=x.bottom}return m=C(e.text,m,1),dn(n,m,f,v,i-d)}function yn(t,e,n,i,r,o,a){var s=T(function(s){var l=r[s],c=1!=l.level;return mn(un(t,R(n,c?l.to:l.from,c?"before":"after"),"line",e,i),o,a,!0)},0,r.length-1),l=r[s];if(s>0){var c=1!=l.level,u=un(t,R(n,c?l.from:l.to,c?"after":"before"),"line",e,i);mn(u,o,a,!0)&&u.top>a&&(l=r[s-1])}return l}function bn(t,e,n,i,r,o,a){var s=pn(t,e,i,a),l=s.begin,c=s.end;/\s/.test(e.text.charAt(c-1))&&c--;for(var u=null,h=null,d=0;d<r.length;d++){var f=r[d];if(!(f.from>=c||f.to<=l)){var p=1!=f.level,g=Ye(t,i,p?Math.min(c,f.to)-1:Math.max(l,f.from)).right,m=g<o?o-g+1e9:g-o;(!u||h>m)&&(u=f,h=m)}}return u||(u=r[r.length-1]),u.from<l&&(u={from:l,to:u.to,level:u.level}),u.to>c&&(u={from:u.from,to:c,level:u.level}),u}function xn(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(null==ms){ms=i("pre");for(var r=0;r<49;++r)ms.appendChild(document.createTextNode("x")),ms.appendChild(i("br"));ms.appendChild(document.createTextNode("x"))}n(t.measure,ms);var o=ms.offsetHeight/50;return o>3&&(t.cachedTextHeight=o),e(t.measure),o||1}function wn(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e=i("span","xxxxxxxxxx"),r=i("pre",[e]);n(t.measure,r);var o=e.getBoundingClientRect(),a=(o.right-o.left)/10;return a>2&&(t.cachedCharWidth=a),a||10}function _n(t){for(var e=t.display,n={},i={},r=e.gutters.clientLeft,o=e.gutters.firstChild,a=0;o;o=o.nextSibling,++a)n[t.options.gutters[a]]=o.offsetLeft+o.clientLeft+r,i[t.options.gutters[a]]=o.clientWidth;return{fixedPos:Sn(e),gutterTotalWidth:e.gutters.offsetWidth,gutterLeft:n,gutterWidth:i,wrapperWidth:e.wrapper.clientWidth}}function Sn(t){return t.scroller.getBoundingClientRect().left-t.sizer.getBoundingClientRect().left}function Cn(t){var e=xn(t.display),n=t.options.lineWrapping,i=n&&Math.max(5,t.display.scroller.clientWidth/wn(t.display)-3);return function(r){if(vt(t.doc,r))return 0;var o=0;if(r.widgets)for(var a=0;a<r.widgets.length;a++)r.widgets[a].height&&(o+=r.widgets[a].height);return n?o+(Math.ceil(r.text.length/i)||1)*e:o+e}}function Tn(t){var e=t.doc,n=Cn(t);e.iter(function(t){var e=n(t);e!=t.height&&L(t,e)})}function kn(t,e,n,i){var r=t.display;if(!n&&"true"==It(e).getAttribute("cm-not-content"))return null;var o,a,s=r.lineSpace.getBoundingClientRect();try{o=e.clientX-s.left,a=e.clientY-s.top}catch(e){return null}var l,c=fn(t,o,a);if(i&&1==c.xRel&&(l=A(t.doc,c.line).text).length==c.ch){var u=h(l,l.length,t.options.tabSize)-l.length;c=R(c.line,Math.max(0,Math.round((o-He(t.display).left)/wn(t.display))-u))}return c}function An(t,e){if(e>=t.display.viewTo)return null;if((e-=t.display.viewFrom)<0)return null;for(var n=t.display.view,i=0;i<n.length;i++)if((e-=n[i].size)<0)return i}function Mn(t){t.display.input.showSelection(t.display.input.prepareSelection())}function En(t,e){void 0===e&&(e=!0);for(var n=t.doc,i={},r=i.cursors=document.createDocumentFragment(),o=i.selection=document.createDocumentFragment(),a=0;a<n.sel.ranges.length;a++)if(e||a!=n.sel.primIndex){var s=n.sel.ranges[a];if(!(s.from().line>=t.display.viewTo||s.to().line<t.display.viewFrom)){var l=s.empty();(l||t.options.showCursorWhenSelecting)&&Ln(t,s.head,r),l||Dn(t,s,o)}}return i}function Ln(t,e,n){var r=un(t,e,"div",null,null,!t.options.singleCursorHeightPerLine),o=n.appendChild(i("div"," ","CodeMirror-cursor"));if(o.style.left=r.left+"px",o.style.top=r.top+"px",o.style.height=Math.max(0,r.bottom-r.top)*t.options.cursorHeight+"px",r.other){var a=n.appendChild(i("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));a.style.display="",a.style.left=r.other.left+"px",a.style.top=r.other.top+"px",a.style.height=.85*(r.other.bottom-r.other.top)+"px"}}function Pn(t,e){return t.top-e.top||t.left-e.left}function Dn(t,e,n){function r(t,e,n,r){e<0&&(e=0),e=Math.round(e),r=Math.round(r),l.appendChild(i("div",null,"CodeMirror-selected","position: absolute; left: "+t+"px;\n                             top: "+e+"px; width: "+(null==n?h-t:n)+"px;\n                             height: "+(r-e)+"px"))}function o(e,n,i){function o(n,i){return cn(t,R(e,n),"div",f,i)}function a(e,n,i){var r=gn(t,f,null,e),a="ltr"==n==("after"==i)?"left":"right";return o("after"==i?r.begin:r.end-(/\s/.test(f.text.charAt(r.end-1))?2:1),a)[a]}var l,c,f=A(s,e),p=f.text.length,g=Ct(f,s.direction);return _t(g,n||0,null==i?p:i,function(t,e,s,f){var m="ltr"==s,v=o(t,m?"left":"right"),y=o(e-1,m?"right":"left"),b=null==n&&0==t,x=null==i&&e==p,w=0==f,_=!g||f==g.length-1;if(y.top-v.top<=3){var S=(d?b:x)&&w,C=(d?x:b)&&_,T=S?u:(m?v:y).left,k=C?h:(m?y:v).right;r(T,v.top,k-T,v.bottom)}else{var A,M,E,L;m?(A=d&&b&&w?u:v.left,M=d?h:a(t,s,"before"),E=d?u:a(e,s,"after"),L=d&&x&&_?h:y.right):(A=d?a(t,s,"before"):u,M=!d&&b&&w?h:v.right,E=!d&&x&&_?u:y.left,L=d?a(e,s,"after"):h),r(A,v.top,M-A,v.bottom),v.bottom<y.top&&r(u,v.bottom,null,y.top),r(E,y.top,L-E,y.bottom)}(!l||Pn(v,l)<0)&&(l=v),Pn(y,l)<0&&(l=y),(!c||Pn(v,c)<0)&&(c=v),Pn(y,c)<0&&(c=y)}),{start:l,end:c}}var a=t.display,s=t.doc,l=document.createDocumentFragment(),c=He(t.display),u=c.left,h=Math.max(a.sizerWidth,Ve(t)-a.sizer.offsetLeft)-c.right,d="ltr"==s.direction,f=e.from(),p=e.to();if(f.line==p.line)o(f.line,f.ch,p.ch);else{var g=A(s,f.line),m=A(s,p.line),v=dt(g)==dt(m),y=o(f.line,f.ch,v?g.text.length+1:null).end,b=o(p.line,v?0:null,p.ch).start;v&&(y.top<b.top-2?(r(y.right,y.top,null,y.bottom),r(u,b.top,b.left,b.bottom)):r(y.right,y.top,b.left-y.right,y.bottom)),y.bottom<b.top&&r(u,y.bottom,null,b.top)}n.appendChild(l)}function Nn(t){if(t.state.focused){var e=t.display;clearInterval(e.blinker);var n=!0;e.cursorDiv.style.visibility="",t.options.cursorBlinkRate>0?e.blinker=setInterval(function(){return e.cursorDiv.style.visibility=(n=!n)?"":"hidden"},t.options.cursorBlinkRate):t.options.cursorBlinkRate<0&&(e.cursorDiv.style.visibility="hidden")}}function On(t){t.state.focused||(t.display.input.focus(),In(t))}function Rn(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1,Fn(t))},100)}function In(t,e){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1),"nocursor"!=t.options.readOnly&&(t.state.focused||(At(t,"focus",t,e),t.state.focused=!0,s(t.display.wrapper,"CodeMirror-focused"),t.curOp||t.display.selForContextMenu==t.doc.sel||(t.display.input.reset(),wa&&setTimeout(function(){return t.display.input.reset(!0)},20)),t.display.input.receivedFocus()),Nn(t))}function Fn(t,e){t.state.delayingBlurEvent||(t.state.focused&&(At(t,"blur",t,e),t.state.focused=!1,ja(t.display.wrapper,"CodeMirror-focused")),clearInterval(t.display.blinker),setTimeout(function(){t.state.focused||(t.display.shift=!1)},150))}function jn(t){for(var e=t.display,n=e.lineDiv.offsetTop,i=0;i<e.view.length;i++){var r=e.view[i],o=t.options.lineWrapping,a=void 0,s=0;if(!r.hidden){if(ba&&xa<8){var l=r.node.offsetTop+r.node.offsetHeight;a=l-n,n=l}else{var c=r.node.getBoundingClientRect();a=c.bottom-c.top,!o&&r.text.firstChild&&(s=r.text.firstChild.getBoundingClientRect().right-c.left-1)}var u=r.line.height-a;if((u>.005||u<-.005)&&(L(r.line,a),Hn(r.line),r.rest))for(var h=0;h<r.rest.length;h++)Hn(r.rest[h]);if(s>t.display.sizerWidth){var d=Math.ceil(s/wn(t.display));d>t.display.maxLineLength&&(t.display.maxLineLength=d,t.display.maxLine=r.line,t.display.maxLineChanged=!0)}}}}function Hn(t){if(t.widgets)for(var e=0;e<t.widgets.length;++e){var n=t.widgets[e],i=n.node.parentNode;i&&(n.height=i.offsetHeight)}}function zn(t,e,n){var i=n&&null!=n.top?Math.max(0,n.top):t.scroller.scrollTop;i=Math.floor(i-Fe(t));var r=n&&null!=n.bottom?n.bottom:i+t.wrapper.clientHeight,o=D(e,i),a=D(e,r);if(n&&n.ensure){var s=n.ensure.from.line,l=n.ensure.to.line;s<o?(o=s,a=D(e,bt(A(e,s))+t.wrapper.clientHeight)):Math.min(l,e.lastLine())>=a&&(o=D(e,bt(A(e,l))-t.wrapper.clientHeight),a=l)}return{from:o,to:Math.max(a,o+1)}}function Vn(t){var e=t.display,n=e.view;if(e.alignWidgets||e.gutters.firstChild&&t.options.fixedGutter){for(var i=Sn(e)-e.scroller.scrollLeft+t.doc.scrollLeft,r=e.gutters.offsetWidth,o=i+"px",a=0;a<n.length;a++)if(!n[a].hidden){t.options.fixedGutter&&(n[a].gutter&&(n[a].gutter.style.left=o),n[a].gutterBackground&&(n[a].gutterBackground.style.left=o));var s=n[a].alignable;if(s)for(var l=0;l<s.length;l++)s[l].style.left=o}t.options.fixedGutter&&(e.gutters.style.left=i+r+"px")}}function qn(t){if(!t.options.lineNumbers)return!1;var e=t.doc,n=O(t.options,e.first+e.size-1),r=t.display;if(n.length!=r.lineNumChars){var o=r.measure.appendChild(i("div",[i("div",n)],"CodeMirror-linenumber CodeMirror-gutter-elt")),a=o.firstChild.offsetWidth,s=o.offsetWidth-a;return r.lineGutter.style.width="",r.lineNumInnerWidth=Math.max(a,r.lineGutter.offsetWidth-s)+1,r.lineNumWidth=r.lineNumInnerWidth+s,r.lineNumChars=r.lineNumInnerWidth?n.length:-1,r.lineGutter.style.width=r.lineNumWidth+"px",Ni(t),!0}return!1}function Bn(t,e){if(!Mt(t,"scrollCursorIntoView")){var n=t.display,r=n.sizer.getBoundingClientRect(),o=null;if(e.top+r.top<0?o=!0:e.bottom+r.top>(window.innerHeight||document.documentElement.clientHeight)&&(o=!1),null!=o&&!Aa){var a=i("div","​",null,"position: absolute;\n                         top: "+(e.top-n.viewOffset-Fe(t.display))+"px;\n                         height: "+(e.bottom-e.top+ze(t)+n.barHeight)+"px;\n                         left: "+e.left+"px; width: "+Math.max(2,e.right-e.left)+"px;");t.display.lineSpace.appendChild(a),a.scrollIntoView(o),t.display.lineSpace.removeChild(a)}}}function Gn(t,e,n,i){null==i&&(i=0);var r;t.options.lineWrapping||e!=n||(e=e.ch?R(e.line,"before"==e.sticky?e.ch-1:e.ch,"after"):e,n="before"==e.sticky?R(e.line,e.ch+1,"before"):e);for(var o=0;o<5;o++){var a=!1,s=un(t,e),l=n&&n!=e?un(t,n):s;r={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-i,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+i};var c=Wn(t,r),u=t.doc.scrollTop,h=t.doc.scrollLeft;if(null!=c.scrollTop&&(Jn(t,c.scrollTop),Math.abs(t.doc.scrollTop-u)>1&&(a=!0)),null!=c.scrollLeft&&(ei(t,c.scrollLeft),Math.abs(t.doc.scrollLeft-h)>1&&(a=!0)),!a)break}return r}function $n(t,e){var n=Wn(t,e);null!=n.scrollTop&&Jn(t,n.scrollTop),null!=n.scrollLeft&&ei(t,n.scrollLeft)}function Wn(t,e){var n=t.display,i=xn(t.display);e.top<0&&(e.top=0);var r=t.curOp&&null!=t.curOp.scrollTop?t.curOp.scrollTop:n.scroller.scrollTop,o=qe(t),a={};e.bottom-e.top>o&&(e.bottom=e.top+o);var s=t.doc.height+je(n),l=e.top<i,c=e.bottom>s-i;if(e.top<r)a.scrollTop=l?0:e.top;else if(e.bottom>r+o){var u=Math.min(e.top,(c?s:e.bottom)-o);u!=r&&(a.scrollTop=u)}var h=t.curOp&&null!=t.curOp.scrollLeft?t.curOp.scrollLeft:n.scroller.scrollLeft,d=Ve(t)-(t.options.fixedGutter?n.gutters.offsetWidth:0),f=e.right-e.left>d;return f&&(e.right=e.left+d),e.left<10?a.scrollLeft=0:e.left<h?a.scrollLeft=Math.max(0,e.left-(f?0:10)):e.right>d+h-3&&(a.scrollLeft=e.right+(f?0:10)-d),a}function Un(t,e){null!=e&&(Zn(t),t.curOp.scrollTop=(null==t.curOp.scrollTop?t.doc.scrollTop:t.curOp.scrollTop)+e)}function Xn(t){Zn(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:e,margin:t.options.cursorScrollMargin}}function Yn(t,e,n){null==e&&null==n||Zn(t),null!=e&&(t.curOp.scrollLeft=e),null!=n&&(t.curOp.scrollTop=n)}function Qn(t,e){Zn(t),t.curOp.scrollToPos=e}function Zn(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;Kn(t,hn(t,e.from),hn(t,e.to),e.margin)}}function Kn(t,e,n,i){var r=Wn(t,{left:Math.min(e.left,n.left),top:Math.min(e.top,n.top)-i,right:Math.max(e.right,n.right),bottom:Math.max(e.bottom,n.bottom)+i});Yn(t,r.scrollLeft,r.scrollTop)}function Jn(t,e){Math.abs(t.doc.scrollTop-e)<2||(ga||Pi(t,{top:e}),ti(t,e,!0),ga&&Pi(t),Ci(t,100))}function ti(t,e,n){e=Math.min(t.display.scroller.scrollHeight-t.display.scroller.clientHeight,e),(t.display.scroller.scrollTop!=e||n)&&(t.doc.scrollTop=e,t.display.scrollbars.setScrollTop(e),t.display.scroller.scrollTop!=e&&(t.display.scroller.scrollTop=e))}function ei(t,e,n,i){e=Math.min(e,t.display.scroller.scrollWidth-t.display.scroller.clientWidth),(n?e==t.doc.scrollLeft:Math.abs(t.doc.scrollLeft-e)<2)&&!i||(t.doc.scrollLeft=e,Vn(t),t.display.scroller.scrollLeft!=e&&(t.display.scroller.scrollLeft=e),t.display.scrollbars.setScrollLeft(e))}function ni(t){var e=t.display,n=e.gutters.offsetWidth,i=Math.round(t.doc.height+je(t.display));return{clientHeight:e.scroller.clientHeight,viewHeight:e.wrapper.clientHeight,scrollWidth:e.scroller.scrollWidth,clientWidth:e.scroller.clientWidth,viewWidth:e.wrapper.clientWidth,barLeft:t.options.fixedGutter?n:0,docHeight:i,scrollHeight:i+ze(t)+e.barHeight,nativeBarWidth:e.nativeBarWidth,gutterWidth:n}}function ii(t,e){e||(e=ni(t));var n=t.display.barWidth,i=t.display.barHeight;ri(t,e);for(var r=0;r<4&&n!=t.display.barWidth||i!=t.display.barHeight;r++)n!=t.display.barWidth&&t.options.lineWrapping&&jn(t),ri(t,ni(t)),n=t.display.barWidth,i=t.display.barHeight}function ri(t,e){var n=t.display,i=n.scrollbars.update(e);n.sizer.style.paddingRight=(n.barWidth=i.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=i.bottom)+"px",n.heightForcer.style.borderBottom=i.bottom+"px solid transparent",i.right&&i.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=i.bottom+"px",n.scrollbarFiller.style.width=i.right+"px"):n.scrollbarFiller.style.display="",i.bottom&&t.options.coverGutterNextToScrollbar&&t.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=i.bottom+"px",n.gutterFiller.style.width=e.gutterWidth+"px"):n.gutterFiller.style.display=""}function oi(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&ja(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new Cs[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),ns(e,"mousedown",function(){t.state.focused&&setTimeout(function(){return t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,n){"horizontal"==n?ei(t,e):Jn(t,e)},t),t.display.scrollbars.addClass&&s(t.display.wrapper,t.display.scrollbars.addClass)}function ai(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ts},ye(t.curOp)}function si(t){var e=t.curOp;e&&xe(e,function(t){for(var e=0;e<t.ops.length;e++)t.ops[e].cm.curOp=null;li(t)})}function li(t){for(var e=t.ops,n=0;n<e.length;n++)ci(e[n]);for(var i=0;i<e.length;i++)ui(e[i]);for(var r=0;r<e.length;r++)hi(e[r]);for(var o=0;o<e.length;o++)di(e[o]);for(var a=0;a<e.length;a++)fi(e[a])}function ci(t){var e=t.cm,n=e.display;ki(e),t.updateMaxLine&&wt(e),t.mustUpdate=t.viewChanged||t.forceUpdate||null!=t.scrollTop||t.scrollToPos&&(t.scrollToPos.from.line<n.viewFrom||t.scrollToPos.to.line>=n.viewTo)||n.maxLineChanged&&e.options.lineWrapping,t.update=t.mustUpdate&&new ks(e,t.mustUpdate&&{top:t.scrollTop,ensure:t.scrollToPos},t.forceUpdate)}function ui(t){t.updatedDisplay=t.mustUpdate&&Ei(t.cm,t.update)}function hi(t){var e=t.cm,n=e.display;t.updatedDisplay&&jn(e),t.barMeasure=ni(e),n.maxLineChanged&&!e.options.lineWrapping&&(t.adjustWidthTo=We(e,n.maxLine,n.maxLine.text.length).left+3,e.display.sizerWidth=t.adjustWidthTo,t.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+t.adjustWidthTo+ze(e)+e.display.barWidth),t.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+t.adjustWidthTo-Ve(e))),(t.updatedDisplay||t.selectionChanged)&&(t.preparedSelection=n.input.prepareSelection())}function di(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style.minWidth=t.adjustWidthTo+"px",t.maxScrollLeft<e.doc.scrollLeft&&ei(e,Math.min(e.display.scroller.scrollLeft,t.maxScrollLeft),!0),e.display.maxLineChanged=!1);var n=t.focus&&t.focus==a();t.preparedSelection&&e.display.input.showSelection(t.preparedSelection,n),(t.updatedDisplay||t.startHeight!=e.doc.height)&&ii(e,t.barMeasure),t.updatedDisplay&&Oi(e,t.barMeasure),t.selectionChanged&&Nn(e),e.state.focused&&t.updateInput&&e.display.input.reset(t.typing),n&&On(t.cm)}function fi(t){var e=t.cm,n=e.display,i=e.doc;if(t.updatedDisplay&&Li(e,t.update),null==n.wheelStartX||null==t.scrollTop&&null==t.scrollLeft&&!t.scrollToPos||(n.wheelStartX=n.wheelStartY=null),null!=t.scrollTop&&ti(e,t.scrollTop,t.forceScroll),null!=t.scrollLeft&&ei(e,t.scrollLeft,!0,!0),t.scrollToPos){Bn(e,Gn(e,q(i,t.scrollToPos.from),q(i,t.scrollToPos.to),t.scrollToPos.margin))}var r=t.maybeHiddenMarkers,o=t.maybeUnhiddenMarkers;if(r)for(var a=0;a<r.length;++a)r[a].lines.length||At(r[a],"hide");if(o)for(var s=0;s<o.length;++s)o[s].lines.length&&At(o[s],"unhide");n.wrapper.offsetHeight&&(i.scrollTop=e.display.scroller.scrollTop),t.changeObjs&&At(e,"changes",e,t.changeObjs),t.update&&t.update.finish()}function pi(t,e){if(t.curOp)return e();ai(t);try{return e()}finally{si(t)}}function gi(t,e){return function(){if(t.curOp)return e.apply(t,arguments);ai(t);try{return e.apply(t,arguments)}finally{si(t)}}}function mi(t){return function(){if(this.curOp)return t.apply(this,arguments);ai(this);try{return t.apply(this,arguments)}finally{si(this)}}}function vi(t){return function(){var e=this.cm;if(!e||e.curOp)return t.apply(this,arguments);ai(e);try{return t.apply(this,arguments)}finally{si(e)}}}function yi(t,e,n,i){null==e&&(e=t.doc.first),null==n&&(n=t.doc.first+t.doc.size),i||(i=0);var r=t.display;if(i&&n<r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>e)&&(r.updateLineNumbers=e),t.curOp.viewChanged=!0,e>=r.viewTo)Ka&&gt(t.doc,e)<r.viewTo&&xi(t);else if(n<=r.viewFrom)Ka&&mt(t.doc,n+i)>r.viewFrom?xi(t):(r.viewFrom+=i,r.viewTo+=i);else if(e<=r.viewFrom&&n>=r.viewTo)xi(t);else if(e<=r.viewFrom){var o=wi(t,n,n+i,1);o?(r.view=r.view.slice(o.index),r.viewFrom=o.lineN,r.viewTo+=i):xi(t)}else if(n>=r.viewTo){var a=wi(t,e,e,-1);a?(r.view=r.view.slice(0,a.index),r.viewTo=a.lineN):xi(t)}else{var s=wi(t,e,e,-1),l=wi(t,n,n+i,1);s&&l?(r.view=r.view.slice(0,s.index).concat(ve(t,s.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=i):xi(t)}var c=r.externalMeasured;c&&(n<c.lineN?c.lineN+=i:e<c.lineN+c.size&&(r.externalMeasured=null))}function bi(t,e,n){t.curOp.viewChanged=!0;var i=t.display,r=t.display.externalMeasured;if(r&&e>=r.lineN&&e<r.lineN+r.size&&(i.externalMeasured=null),!(e<i.viewFrom||e>=i.viewTo)){var o=i.view[An(t,e)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==d(a,n)&&a.push(n)}}}function xi(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display.view=[],t.display.viewOffset=0}function wi(t,e,n,i){var r,o=An(t,e),a=t.display.view;if(!Ka||n==t.doc.first+t.doc.size)return{index:o,lineN:n};for(var s=t.display.viewFrom,l=0;l<o;l++)s+=a[l].size;if(s!=e){if(i>0){if(o==a.length-1)return null;r=s+a[o].size-e,o++}else r=s-e;e+=r,n+=r}for(;gt(t.doc,n)!=n;){if(o==(i<0?0:a.length-1))return null;n+=i*a[o-(i<0?1:0)].size,o+=i}return{index:o,lineN:n}}function _i(t,e,n){var i=t.display;0==i.view.length||e>=i.viewTo||n<=i.viewFrom?(i.view=ve(t,e,n),i.viewFrom=e):(i.viewFrom>e?i.view=ve(t,e,i.viewFrom).concat(i.view):i.viewFrom<e&&(i.view=i.view.slice(An(t,e))),i.viewFrom=e,i.viewTo<n?i.view=i.view.concat(ve(t,i.viewTo,n)):i.viewTo>n&&(i.view=i.view.slice(0,An(t,n)))),i.viewTo=n}function Si(t){for(var e=t.display.view,n=0,i=0;i<e.length;i++){var r=e[i];r.hidden||r.node&&!r.changes||++n}return n}function Ci(t,e){t.doc.highlightFrontier<t.display.viewTo&&t.state.highlight.set(e,c(Ti,t))}function Ti(t){var e=t.doc;if(!(e.highlightFrontier>=t.display.viewTo)){var n=+new Date+t.options.workTime,i=Zt(t,e.highlightFrontier),r=[];e.iter(i.line,Math.min(e.first+e.size,t.display.viewTo+500),function(o){if(i.line>=t.display.viewFrom){var a=o.styles,s=o.text.length>t.options.maxHighlightLength?Wt(e.mode,i.state):null,l=Yt(t,o,i,!0);s&&(i.state=s),o.styles=l.styles;var c=o.styleClasses,u=l.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var h=!a||a.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),d=0;!h&&d<a.length;++d)h=a[d]!=o.styles[d];h&&r.push(i.line),o.stateAfter=i.save(),i.nextLine()}else o.text.length<=t.options.maxHighlightLength&&Kt(t,o.text,i),o.stateAfter=i.line%5==0?i.save():null,i.nextLine();if(+new Date>n)return Ci(t,t.options.workDelay),!0}),e.highlightFrontier=i.line,e.modeFrontier=Math.max(e.modeFrontier,i.line),r.length&&pi(t,function(){for(var e=0;e<r.length;e++)bi(t,r[e],"text")})}}function ki(t){var e=t.display;!e.scrollbarsClipped&&e.scroller.offsetWidth&&(e.nativeBarWidth=e.scroller.offsetWidth-e.scroller.clientWidth,e.heightForcer.style.height=ze(t)+"px",e.sizer.style.marginBottom=-e.nativeBarWidth+"px",e.sizer.style.borderRightWidth=ze(t)+"px",e.scrollbarsClipped=!0)}function Ai(t){if(t.hasFocus())return null;var e=a();if(!e||!o(t.display.lineDiv,e))return null;var n={activeElt:e};if(window.getSelection){var i=window.getSelection();i.anchorNode&&i.extend&&o(t.display.lineDiv,i.anchorNode)&&(n.anchorNode=i.anchorNode,n.anchorOffset=i.anchorOffset,n.focusNode=i.focusNode,n.focusOffset=i.focusOffset)}return n}function Mi(t){if(t&&t.activeElt&&t.activeElt!=a()&&(t.activeElt.focus(),t.anchorNode&&o(document.body,t.anchorNode)&&o(document.body,t.focusNode))){var e=window.getSelection(),n=document.createRange();n.setEnd(t.anchorNode,t.anchorOffset),n.collapse(!1),e.removeAllRanges(),e.addRange(n),e.extend(t.focusNode,t.focusOffset)}}function Ei(t,n){var i=t.display,r=t.doc;if(n.editorIsHidden)return xi(t),!1;if(!n.force&&n.visible.from>=i.viewFrom&&n.visible.to<=i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo)&&i.renderedView==i.view&&0==Si(t))return!1;qn(t)&&(xi(t),n.dims=_n(t));var o=r.first+r.size,a=Math.max(n.visible.from-t.options.viewportMargin,r.first),s=Math.min(o,n.visible.to+t.options.viewportMargin);i.viewFrom<a&&a-i.viewFrom<20&&(a=Math.max(r.first,i.viewFrom)),i.viewTo>s&&i.viewTo-s<20&&(s=Math.min(o,i.viewTo)),Ka&&(a=gt(t.doc,a),s=mt(t.doc,s));var l=a!=i.viewFrom||s!=i.viewTo||i.lastWrapHeight!=n.wrapperHeight||i.lastWrapWidth!=n.wrapperWidth;_i(t,a,s),i.viewOffset=bt(A(t.doc,i.viewFrom)),t.display.mover.style.top=i.viewOffset+"px";var c=Si(t);if(!l&&0==c&&!n.force&&i.renderedView==i.view&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo))return!1;var u=Ai(t);return c>4&&(i.lineDiv.style.display="none"),Di(t,i.updateLineNumbers,n.dims),c>4&&(i.lineDiv.style.display=""),i.renderedView=i.view,Mi(u),e(i.cursorDiv),e(i.selectionDiv),i.gutters.style.height=i.sizer.style.minHeight=0,l&&(i.lastWrapHeight=n.wrapperHeight,i.lastWrapWidth=n.wrapperWidth,Ci(t,400)),i.updateLineNumbers=null,!0}function Li(t,e){for(var n=e.viewport,i=!0;(i&&t.options.lineWrapping&&e.oldDisplayWidth!=Ve(t)||(n&&null!=n.top&&(n={top:Math.min(t.doc.height+je(t.display)-qe(t),n.top)}),e.visible=zn(t.display,t.doc,n),!(e.visible.from>=t.display.viewFrom&&e.visible.to<=t.display.viewTo)))&&Ei(t,e);i=!1){jn(t);var r=ni(t);Mn(t),ii(t,r),Oi(t,r),e.force=!1}e.signal(t,"update",t),t.display.viewFrom==t.display.reportedViewFrom&&t.display.viewTo==t.display.reportedViewTo||(e.signal(t,"viewportChange",t,t.display.viewFrom,t.display.viewTo),t.display.reportedViewFrom=t.display.viewFrom,t.display.reportedViewTo=t.display.viewTo)}function Pi(t,e){var n=new ks(t,e);if(Ei(t,n)){jn(t),Li(t,n);var i=ni(t);Mn(t),ii(t,i),Oi(t,i),n.finish()}}function Di(t,n,i){function r(e){var n=e.nextSibling;return wa&&Pa&&t.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),n}for(var o=t.display,a=t.options.lineNumbers,s=o.lineDiv,l=s.firstChild,c=o.view,u=o.viewFrom,h=0;h<c.length;h++){var f=c[h];if(f.hidden);else if(f.node&&f.node.parentNode==s){for(;l!=f.node;)l=r(l);var p=a&&null!=n&&n<=u&&f.lineNumber;f.changes&&(d(f.changes,"gutter")>-1&&(p=!1),Se(t,f,u,i)),p&&(e(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(O(t.options,u)))),l=f.node.nextSibling}else{var g=Pe(t,f,u,i);s.insertBefore(g,l)}u+=f.size}for(;l;)l=r(l)}function Ni(t){var e=t.display.gutters.offsetWidth;t.display.sizer.style.marginLeft=e+"px"}function Oi(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.display.heightForcer.style.top=e.docHeight+"px",t.display.gutters.style.height=e.docHeight+t.display.barHeight+ze(t)+"px"}function Ri(t){var n=t.display.gutters,r=t.options.gutters;e(n);for(var o=0;o<r.length;++o){var a=r[o],s=n.appendChild(i("div",null,"CodeMirror-gutter "+a));"CodeMirror-linenumbers"==a&&(t.display.lineGutter=s,s.style.width=(t.display.lineNumWidth||1)+"px")}n.style.display=o?"":"none",Ni(t)}function Ii(t){var e=d(t.gutters,"CodeMirror-linenumbers");-1==e&&t.lineNumbers?t.gutters=t.gutters.concat(["CodeMirror-linenumbers"]):e>-1&&!t.lineNumbers&&(t.gutters=t.gutters.slice(0),t.gutters.splice(e,1))}function Fi(t){var e=t.wheelDeltaX,n=t.wheelDeltaY;return null==e&&t.detail&&t.axis==t.HORIZONTAL_AXIS&&(e=t.detail),null==n&&t.detail&&t.axis==t.VERTICAL_AXIS?n=t.detail:null==n&&(n=t.wheelDelta),{x:e,y:n}}function ji(t){var e=Fi(t);return e.x*=Ms,e.y*=Ms,e}function Hi(t,e){var n=Fi(e),i=n.x,r=n.y,o=t.display,a=o.scroller,s=a.scrollWidth>a.clientWidth,l=a.scrollHeight>a.clientHeight;if(i&&s||r&&l){if(r&&Pa&&wa)t:for(var c=e.target,u=o.view;c!=a;c=c.parentNode)for(var h=0;h<u.length;h++)if(u[h].node==c){t.display.currentWheelTarget=c;break t}if(i&&!ga&&!Ca&&null!=Ms)return r&&l&&Jn(t,Math.max(0,a.scrollTop+r*Ms)),ei(t,Math.max(0,a.scrollLeft+i*Ms)),(!r||r&&l)&&Dt(e),void(o.wheelStartX=null);if(r&&null!=Ms){var d=r*Ms,f=t.doc.scrollTop,p=f+o.wrapper.clientHeight;d<0?f=Math.max(0,f+d-50):p=Math.min(t.doc.height,p+d+50),Pi(t,{top:f,bottom:p})}As<20&&(null==o.wheelStartX?(o.wheelStartX=a.scrollLeft,o.wheelStartY=a.scrollTop,o.wheelDX=i,o.wheelDY=r,setTimeout(function(){if(null!=o.wheelStartX){var t=a.scrollLeft-o.wheelStartX,e=a.scrollTop-o.wheelStartY,n=e&&o.wheelDY&&e/o.wheelDY||t&&o.wheelDX&&t/o.wheelDX;o.wheelStartX=o.wheelStartY=null,n&&(Ms=(Ms*As+n)/(As+1),++As)}},200)):(o.wheelDX+=i,o.wheelDY+=r))}}function zi(t,e,n){var i=t&&t.options.selectionsMayTouch,r=e[n];e.sort(function(t,e){return I(t.from(),e.from())}),n=d(e,r);for(var o=1;o<e.length;o++){var a=e[o],s=e[o-1],l=I(s.to(),a.from());if(i&&!a.empty()?l>0:l>=0){var c=z(s.from(),a.from()),u=H(s.to(),a.to()),h=s.empty()?a.from()==a.head:s.from()==s.head;o<=n&&--n,e.splice(--o,2,new Ls(h?u:c,h?c:u))}}return new Es(e,n)}function Vi(t,e){return new Es([new Ls(t,e||t)],0)}function qi(t){return t.text?R(t.from.line+t.text.length-1,g(t.text).length+(1==t.text.length?t.from.ch:0)):t.to}function Bi(t,e){if(I(t,e.from)<0)return t;if(I(t,e.to)<=0)return qi(e);var n=t.line+e.text.length-(e.to.line-e.from.line)-1,i=t.ch;return t.line==e.to.line&&(i+=qi(e).ch-e.to.ch),R(n,i)}function Gi(t,e){for(var n=[],i=0;i<t.sel.ranges.length;i++){var r=t.sel.ranges[i];n.push(new Ls(Bi(r.anchor,e),Bi(r.head,e)))}return zi(t.cm,n,t.sel.primIndex)}function $i(t,e,n){return t.line==e.line?R(n.line,t.ch-e.ch+n.ch):R(n.line+(t.line-e.line),t.ch)}function Wi(t,e,n){for(var i=[],r=R(t.first,0),o=r,a=0;a<e.length;a++){var s=e[a],l=$i(s.from,r,o),c=$i(qi(s),r,o);if(r=s.to,o=c,"around"==n){var u=t.sel.ranges[a],h=I(u.head,u.anchor)<0
+;i[a]=new Ls(h?c:l,h?l:c)}else i[a]=new Ls(l,l)}return new Es(i,t.sel.primIndex)}function Ui(t){t.doc.mode=Gt(t.options,t.doc.modeOption),Xi(t)}function Xi(t){t.doc.iter(function(t){t.stateAfter&&(t.stateAfter=null),t.styles&&(t.styles=null)}),t.doc.modeFrontier=t.doc.highlightFrontier=t.doc.first,Ci(t,100),t.state.modeGen++,t.curOp&&yi(t)}function Yi(t,e){return 0==e.from.ch&&0==e.to.ch&&""==g(e.text)&&(!t.cm||t.cm.options.wholeLineUpdateBefore)}function Qi(t,e,n,i){function r(t){return n?n[t]:null}function o(t,n,r){ae(t,n,r,i),we(t,"change",t,e)}function a(t,e){for(var n=[],o=t;o<e;++o)n.push(new gs(c[o],r(o),i));return n}var s=e.from,l=e.to,c=e.text,u=A(t,s.line),h=A(t,l.line),d=g(c),f=r(c.length-1),p=l.line-s.line;if(e.full)t.insert(0,a(0,c.length)),t.remove(c.length,t.size-c.length);else if(Yi(t,e)){var m=a(0,c.length-1);o(h,h.text,f),p&&t.remove(s.line,p),m.length&&t.insert(s.line,m)}else if(u==h)if(1==c.length)o(u,u.text.slice(0,s.ch)+d+u.text.slice(l.ch),f);else{var v=a(1,c.length-1);v.push(new gs(d+u.text.slice(l.ch),f,i)),o(u,u.text.slice(0,s.ch)+c[0],r(0)),t.insert(s.line+1,v)}else if(1==c.length)o(u,u.text.slice(0,s.ch)+c[0]+h.text.slice(l.ch),r(0)),t.remove(s.line+1,p);else{o(u,u.text.slice(0,s.ch)+c[0],r(0)),o(h,d+h.text.slice(l.ch),f);var y=a(1,c.length-1);p>1&&t.remove(s.line+1,p-1),t.insert(s.line+1,y)}we(t,"change",t,e)}function Zi(t,e,n){function i(t,r,o){if(t.linked)for(var a=0;a<t.linked.length;++a){var s=t.linked[a];if(s.doc!=r){var l=o&&s.sharedHist;n&&!l||(e(s.doc,l),i(s.doc,t,l))}}}i(t,null,!0)}function Ki(t,e){if(e.cm)throw new Error("This document is already in use.");t.doc=e,e.cm=t,Tn(t),Ui(t),Ji(t),t.options.lineWrapping||wt(t),t.options.mode=e.modeOption,yi(t)}function Ji(t){("rtl"==t.doc.direction?s:ja)(t.display.lineDiv,"CodeMirror-rtl")}function tr(t){pi(t,function(){Ji(t),yi(t)})}function er(t){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=t||1}function nr(t,e){var n={from:j(e.from),to:qi(e),text:M(t,e.from,e.to)};return cr(t,n,e.from.line,e.to.line+1),Zi(t,function(t){return cr(t,n,e.from.line,e.to.line+1)},!0),n}function ir(t){for(;t.length;){if(!g(t).ranges)break;t.pop()}}function rr(t,e){return e?(ir(t.done),g(t.done)):t.done.length&&!g(t.done).ranges?g(t.done):t.done.length>1&&!t.done[t.done.length-2].ranges?(t.done.pop(),g(t.done)):void 0}function or(t,e,n,i){var r=t.history;r.undone.length=0;var o,a,s=+new Date;if((r.lastOp==i||r.lastOrigin==e.origin&&e.origin&&("+"==e.origin.charAt(0)&&r.lastModTime>s-(t.cm?t.cm.options.historyEventDelay:500)||"*"==e.origin.charAt(0)))&&(o=rr(r,r.lastOp==i)))a=g(o.changes),0==I(e.from,e.to)&&0==I(e.from,a.to)?a.to=qi(e):o.changes.push(nr(t,e));else{var l=g(r.done);for(l&&l.ranges||lr(t.sel,r.done),o={changes:[nr(t,e)],generation:r.generation},r.done.push(o);r.done.length>r.undoDepth;)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(n),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=s,r.lastOp=r.lastSelOp=i,r.lastOrigin=r.lastSelOrigin=e.origin,a||At(t,"historyAdded")}function ar(t,e,n,i){var r=e.charAt(0);return"*"==r||"+"==r&&n.ranges.length==i.ranges.length&&n.somethingSelected()==i.somethingSelected()&&new Date-t.history.lastSelTime<=(t.cm?t.cm.options.historyEventDelay:500)}function sr(t,e,n,i){var r=t.history,o=i&&i.origin;n==r.lastSelOp||o&&r.lastSelOrigin==o&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==o||ar(t,o,g(r.done),e))?r.done[r.done.length-1]=e:lr(e,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=o,r.lastSelOp=n,i&&!1!==i.clearRedo&&ir(r.undone)}function lr(t,e){var n=g(e);n&&n.ranges&&n.equals(t)||e.push(t)}function cr(t,e,n,i){var r=e["spans_"+t.id],o=0;t.iter(Math.max(t.first,n),Math.min(t.first+t.size,i),function(n){n.markedSpans&&((r||(r=e["spans_"+t.id]={}))[o]=n.markedSpans),++o})}function ur(t){if(!t)return null;for(var e,n=0;n<t.length;++n)t[n].marker.explicitlyCleared?e||(e=t.slice(0,n)):e&&e.push(t[n]);return e?e.length?e:null:t}function hr(t,e){var n=e["spans_"+t.id];if(!n)return null;for(var i=[],r=0;r<e.text.length;++r)i.push(ur(n[r]));return i}function dr(t,e){var n=hr(t,e),i=J(t,e);if(!n)return i;if(!i)return n;for(var r=0;r<n.length;++r){var o=n[r],a=i[r];if(o&&a)t:for(var s=0;s<a.length;++s){for(var l=a[s],c=0;c<o.length;++c)if(o[c].marker==l.marker)continue t;o.push(l)}else a&&(n[r]=a)}return n}function fr(t,e,n){for(var i=[],r=0;r<t.length;++r){var o=t[r];if(o.ranges)i.push(n?Es.prototype.deepCopy.call(o):o);else{var a=o.changes,s=[];i.push({changes:s});for(var l=0;l<a.length;++l){var c=a[l],u=void 0;if(s.push({from:c.from,to:c.to,text:c.text}),e)for(var h in c)(u=h.match(/^spans_(\d+)$/))&&d(e,Number(u[1]))>-1&&(g(s)[h]=c[h],delete c[h])}}}return i}function pr(t,e,n,i){if(i){var r=t.anchor;if(n){var o=I(e,r)<0;o!=I(n,r)<0?(r=e,e=n):o!=I(e,n)<0&&(e=n)}return new Ls(r,e)}return new Ls(n||e,e)}function gr(t,e,n,i,r){null==r&&(r=t.cm&&(t.cm.display.shift||t.extend)),wr(t,new Es([pr(t.sel.primary(),e,n,r)],0),i)}function mr(t,e,n){for(var i=[],r=t.cm&&(t.cm.display.shift||t.extend),o=0;o<t.sel.ranges.length;o++)i[o]=pr(t.sel.ranges[o],e[o],null,r);wr(t,zi(t.cm,i,t.sel.primIndex),n)}function vr(t,e,n,i){var r=t.sel.ranges.slice(0);r[e]=n,wr(t,zi(t.cm,r,t.sel.primIndex),i)}function yr(t,e,n,i){wr(t,Vi(e,n),i)}function br(t,e,n){var i={ranges:e.ranges,update:function(e){var n=this;this.ranges=[];for(var i=0;i<e.length;i++)n.ranges[i]=new Ls(q(t,e[i].anchor),q(t,e[i].head))},origin:n&&n.origin};return At(t,"beforeSelectionChange",t,i),t.cm&&At(t.cm,"beforeSelectionChange",t.cm,i),i.ranges!=e.ranges?zi(t.cm,i.ranges,i.ranges.length-1):e}function xr(t,e,n){var i=t.history.done,r=g(i);r&&r.ranges?(i[i.length-1]=e,_r(t,e,n)):wr(t,e,n)}function wr(t,e,n){_r(t,e,n),sr(t,t.sel,t.cm?t.cm.curOp.id:NaN,n)}function _r(t,e,n){(Lt(t,"beforeSelectionChange")||t.cm&&Lt(t.cm,"beforeSelectionChange"))&&(e=br(t,e,n)),Sr(t,Tr(t,e,n&&n.bias||(I(e.primary().head,t.sel.primary().head)<0?-1:1),!0)),n&&!1===n.scroll||!t.cm||Xn(t.cm)}function Sr(t,e){e.equals(t.sel)||(t.sel=e,t.cm&&(t.cm.curOp.updateInput=1,t.cm.curOp.selectionChanged=!0,Et(t.cm)),we(t,"cursorActivity",t))}function Cr(t){Sr(t,Tr(t,t.sel,null,!1))}function Tr(t,e,n,i){for(var r,o=0;o<e.ranges.length;o++){var a=e.ranges[o],s=e.ranges.length==t.sel.ranges.length&&t.sel.ranges[o],l=Ar(t,a.anchor,s&&s.anchor,n,i),c=Ar(t,a.head,s&&s.head,n,i);(r||l!=a.anchor||c!=a.head)&&(r||(r=e.ranges.slice(0,o)),r[o]=new Ls(l,c))}return r?zi(t.cm,r,e.primIndex):e}function kr(t,e,n,i,r){var o=A(t,e.line);if(o.markedSpans)for(var a=0;a<o.markedSpans.length;++a){var s=o.markedSpans[a],l=s.marker;if((null==s.from||(l.inclusiveLeft?s.from<=e.ch:s.from<e.ch))&&(null==s.to||(l.inclusiveRight?s.to>=e.ch:s.to>e.ch))){if(r&&(At(l,"beforeCursorEnter"),l.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!l.atomic)continue;if(n){var c=l.find(i<0?1:-1),u=void 0;if((i<0?l.inclusiveRight:l.inclusiveLeft)&&(c=Mr(t,c,-i,c&&c.line==e.line?o:null)),c&&c.line==e.line&&(u=I(c,n))&&(i<0?u<0:u>0))return kr(t,c,e,i,r)}var h=l.find(i<0?-1:1);return(i<0?l.inclusiveLeft:l.inclusiveRight)&&(h=Mr(t,h,i,h.line==e.line?o:null)),h?kr(t,h,e,i,r):null}}return e}function Ar(t,e,n,i,r){var o=i||1,a=kr(t,e,n,o,r)||!r&&kr(t,e,n,o,!0)||kr(t,e,n,-o,r)||!r&&kr(t,e,n,-o,!0);return a||(t.cantEdit=!0,R(t.first,0))}function Mr(t,e,n,i){return n<0&&0==e.ch?e.line>t.first?q(t,R(e.line-1)):null:n>0&&e.ch==(i||A(t,e.line)).text.length?e.line<t.first+t.size-1?R(e.line+1,0):null:new R(e.line,e.ch+n)}function Er(t){t.setSelection(R(t.firstLine(),0),R(t.lastLine()),$a)}function Lr(t,e,n){var i={canceled:!1,from:e.from,to:e.to,text:e.text,origin:e.origin,cancel:function(){return i.canceled=!0}};return n&&(i.update=function(e,n,r,o){e&&(i.from=q(t,e)),n&&(i.to=q(t,n)),r&&(i.text=r),void 0!==o&&(i.origin=o)}),At(t,"beforeChange",t,i),t.cm&&At(t.cm,"beforeChange",t.cm,i),i.canceled?(t.cm&&(t.cm.curOp.updateInput=2),null):{from:i.from,to:i.to,text:i.text,origin:i.origin}}function Pr(t,e,n){if(t.cm){if(!t.cm.curOp)return gi(t.cm,Pr)(t,e,n);if(t.cm.state.suppressEdits)return}if(!(Lt(t,"beforeChange")||t.cm&&Lt(t.cm,"beforeChange"))||(e=Lr(t,e,!0))){var i=Za&&!n&&et(t,e.from,e.to);if(i)for(var r=i.length-1;r>=0;--r)Dr(t,{from:i[r].from,to:i[r].to,text:r?[""]:e.text,origin:e.origin});else Dr(t,e)}}function Dr(t,e){if(1!=e.text.length||""!=e.text[0]||0!=I(e.from,e.to)){var n=Gi(t,e);or(t,e,n,t.cm?t.cm.curOp.id:NaN),Rr(t,e,n,J(t,e));var i=[];Zi(t,function(t,n){n||-1!=d(i,t.history)||(zr(t.history,e),i.push(t.history)),Rr(t,e,null,J(t,e))})}}function Nr(t,e,n){var i=t.cm&&t.cm.state.suppressEdits;if(!i||n){for(var r,o=t.history,a=t.sel,s="undo"==e?o.done:o.undone,l="undo"==e?o.undone:o.done,c=0;c<s.length&&(r=s[c],n?!r.ranges||r.equals(t.sel):r.ranges);c++);if(c!=s.length){for(o.lastOrigin=o.lastSelOrigin=null;;){if(r=s.pop(),!r.ranges){if(i)return void s.push(r);break}if(lr(r,l),n&&!r.equals(t.sel))return void wr(t,r,{clearRedo:!1});a=r}var u=[];lr(a,l),l.push({changes:u,generation:o.generation}),o.generation=r.generation||++o.maxGeneration;for(var h=Lt(t,"beforeChange")||t.cm&&Lt(t.cm,"beforeChange"),f=r.changes.length-1;f>=0;--f){var p=function(n){var i=r.changes[n];if(i.origin=e,h&&!Lr(t,i,!1))return s.length=0,{};u.push(nr(t,i));var o=n?Gi(t,i):g(s);Rr(t,i,o,dr(t,i)),!n&&t.cm&&t.cm.scrollIntoView({from:i.from,to:qi(i)});var a=[];Zi(t,function(t,e){e||-1!=d(a,t.history)||(zr(t.history,i),a.push(t.history)),Rr(t,i,null,dr(t,i))})}(f);if(p)return p.v}}}}function Or(t,e){if(0!=e&&(t.first+=e,t.sel=new Es(m(t.sel.ranges,function(t){return new Ls(R(t.anchor.line+e,t.anchor.ch),R(t.head.line+e,t.head.ch))}),t.sel.primIndex),t.cm)){yi(t.cm,t.first,t.first-e,e);for(var n=t.cm.display,i=n.viewFrom;i<n.viewTo;i++)bi(t.cm,i,"gutter")}}function Rr(t,e,n,i){if(t.cm&&!t.cm.curOp)return gi(t.cm,Rr)(t,e,n,i);if(e.to.line<t.first)return void Or(t,e.text.length-1-(e.to.line-e.from.line));if(!(e.from.line>t.lastLine())){if(e.from.line<t.first){var r=e.text.length-1-(t.first-e.from.line);Or(t,r),e={from:R(t.first,0),to:R(e.to.line+r,e.to.ch),text:[g(e.text)],origin:e.origin}}var o=t.lastLine();e.to.line>o&&(e={from:e.from,to:R(o,A(t,o).text.length),text:[e.text[0]],origin:e.origin}),e.removed=M(t,e.from,e.to),n||(n=Gi(t,e)),t.cm?Ir(t.cm,e,i):Qi(t,e,i),_r(t,n,$a)}}function Ir(t,e,n){var i=t.doc,r=t.display,o=e.from,a=e.to,s=!1,l=o.line;t.options.lineWrapping||(l=P(dt(A(i,o.line))),i.iter(l,a.line+1,function(t){if(t==r.maxLine)return s=!0,!0})),i.sel.contains(e.from,e.to)>-1&&Et(t),Qi(i,e,n,Cn(t)),t.options.lineWrapping||(i.iter(l,o.line+e.text.length,function(t){var e=xt(t);e>r.maxLineLength&&(r.maxLine=t,r.maxLineLength=e,r.maxLineChanged=!0,s=!1)}),s&&(t.curOp.updateMaxLine=!0)),oe(i,o.line),Ci(t,400);var c=e.text.length-(a.line-o.line)-1;e.full?yi(t):o.line!=a.line||1!=e.text.length||Yi(t.doc,e)?yi(t,o.line,a.line+1,c):bi(t,o.line,"text");var u=Lt(t,"changes"),h=Lt(t,"change");if(h||u){var d={from:o,to:a,text:e.text,removed:e.removed,origin:e.origin};h&&we(t,"change",t,d),u&&(t.curOp.changeObjs||(t.curOp.changeObjs=[])).push(d)}t.display.selForContextMenu=null}function Fr(t,e,n,i,r){var o;i||(i=n),I(i,n)<0&&(o=[i,n],n=o[0],i=o[1]),"string"==typeof e&&(e=t.splitLines(e)),Pr(t,{from:n,to:i,text:e,origin:r})}function jr(t,e,n,i){n<t.line?t.line+=i:e<t.line&&(t.line=e,t.ch=0)}function Hr(t,e,n,i){for(var r=0;r<t.length;++r){var o=t[r],a=!0;if(o.ranges){o.copied||(o=t[r]=o.deepCopy(),o.copied=!0);for(var s=0;s<o.ranges.length;s++)jr(o.ranges[s].anchor,e,n,i),jr(o.ranges[s].head,e,n,i)}else{for(var l=0;l<o.changes.length;++l){var c=o.changes[l];if(n<c.from.line)c.from=R(c.from.line+i,c.from.ch),c.to=R(c.to.line+i,c.to.ch);else if(e<=c.to.line){a=!1;break}}a||(t.splice(0,r+1),r=0)}}}function zr(t,e){var n=e.from.line,i=e.to.line,r=e.text.length-(i-n)-1;Hr(t.done,n,i,r),Hr(t.undone,n,i,r)}function Vr(t,e,n,i){var r=e,o=e;return"number"==typeof e?o=A(t,V(t,e)):r=P(e),null==r?null:(i(o,r)&&t.cm&&bi(t.cm,r,n),o)}function qr(t){var e=this;this.lines=t,this.parent=null;for(var n=0,i=0;i<t.length;++i)t[i].parent=e,n+=t[i].height;this.height=n}function Br(t){var e=this;this.children=t;for(var n=0,i=0,r=0;r<t.length;++r){var o=t[r];n+=o.chunkSize(),i+=o.height,o.parent=e}this.size=n,this.height=i,this.parent=null}function Gr(t,e,n){bt(e)<(t.curOp&&t.curOp.scrollTop||t.doc.scrollTop)&&Un(t,n)}function $r(t,e,n,i){var r=new Ps(t,n,i),o=t.cm;return o&&r.noHScroll&&(o.display.alignWidgets=!0),Vr(t,e,"widget",function(e){var n=e.widgets||(e.widgets=[]);if(null==r.insertAt?n.push(r):n.splice(Math.min(n.length-1,Math.max(0,r.insertAt)),0,r),r.line=e,o&&!vt(t,e)){var i=bt(e)<t.scrollTop;L(e,e.height+Re(r)),i&&Un(o,r.height),o.curOp.forceUpdate=!0}return!0}),o&&we(o,"lineWidgetAdded",o,r,"number"==typeof e?e:P(e)),r}function Wr(t,e,n,i,o){if(i&&i.shared)return Ur(t,e,n,i,o);if(t.cm&&!t.cm.curOp)return gi(t.cm,Wr)(t,e,n,i,o);var a=new Ns(t,o),s=I(e,n);if(i&&u(i,a,!1),s>0||0==s&&!1!==a.clearWhenEmpty)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=r("span",[a.replacedWith],"CodeMirror-widget"),i.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),i.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(ht(t,e.line,e,n,a)||e.line!=n.line&&ht(t,n.line,e,n,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");W()}a.addToHistory&&or(t,{from:e,to:n,origin:"markText"},t.sel,NaN);var l,c=e.line,h=t.cm;if(t.iter(c,n.line+1,function(t){h&&a.collapsed&&!h.options.lineWrapping&&dt(t)==h.display.maxLine&&(l=!0),a.collapsed&&c!=e.line&&L(t,0),Q(t,new U(a,c==e.line?e.ch:null,c==n.line?n.ch:null)),++c}),a.collapsed&&t.iter(e.line,n.line+1,function(e){vt(t,e)&&L(e,0)}),a.clearOnEnter&&ns(a,"beforeCursorEnter",function(){return a.clear()}),a.readOnly&&($(),(t.history.done.length||t.history.undone.length)&&t.clearHistory()),a.collapsed&&(a.id=++Ds,a.atomic=!0),h){if(l&&(h.curOp.updateMaxLine=!0),a.collapsed)yi(h,e.line,n.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var d=e.line;d<=n.line;d++)bi(h,d,"text");a.atomic&&Cr(h.doc),we(h,"markerAdded",h,a)}return a}function Ur(t,e,n,i,r){i=u(i),i.shared=!1;var o=[Wr(t,e,n,i,r)],a=o[0],s=i.widgetNode;return Zi(t,function(t){s&&(i.widgetNode=s.cloneNode(!0)),o.push(Wr(t,q(t,e),q(t,n),i,r));for(var l=0;l<t.linked.length;++l)if(t.linked[l].isParent)return;a=g(o)}),new Os(o,a)}function Xr(t){return t.findMarks(R(t.first,0),t.clipPos(R(t.lastLine())),function(t){return t.parent})}function Yr(t,e){for(var n=0;n<e.length;n++){var i=e[n],r=i.find(),o=t.clipPos(r.from),a=t.clipPos(r.to);if(I(o,a)){var s=Wr(t,o,a,i.primary,i.primary.type);i.markers.push(s),s.parent=i}}}function Qr(t){for(var e=0;e<t.length;e++)!function(e){var n=t[e],i=[n.primary.doc];Zi(n.primary.doc,function(t){return i.push(t)});for(var r=0;r<n.markers.length;r++){var o=n.markers[r];-1==d(i,o.doc)&&(o.parent=null,n.markers.splice(r--,1))}}(e)}function Zr(t){var e=this;if(to(e),!Mt(e,t)&&!Ie(e.display,t)){Dt(t),ba&&(Fs=+new Date);var n=kn(e,t,!0),i=t.dataTransfer.files;if(n&&!e.isReadOnly())if(i&&i.length&&window.FileReader&&window.File)for(var r=i.length,o=Array(r),a=0,s=0;s<r;++s)!function(t,i){if(!e.options.allowDropFileTypes||-1!=d(e.options.allowDropFileTypes,t.type)){var s=new FileReader;s.onload=gi(e,function(){var t=s.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(t)&&(t=""),o[i]=t,++a==r){n=q(e.doc,n);var l={from:n,to:n,text:e.doc.splitLines(o.join(e.doc.lineSeparator())),origin:"paste"};Pr(e.doc,l),xr(e.doc,Vi(n,qi(l)))}}),s.readAsText(t)}}(i[s],s);else{if(e.state.draggingText&&e.doc.sel.contains(n)>-1)return e.state.draggingText(t),void setTimeout(function(){return e.display.input.focus()},20);try{var l=t.dataTransfer.getData("Text");if(l){var c;if(e.state.draggingText&&!e.state.draggingText.copy&&(c=e.listSelections()),_r(e.doc,Vi(n,n)),c)for(var u=0;u<c.length;++u)Fr(e.doc,"",c[u].anchor,c[u].head,"drag");e.replaceSelection(l,"around","paste"),e.display.input.focus()}}catch(t){}}}}function Kr(t,e){if(ba&&(!t.state.draggingText||+new Date-Fs<100))return void Rt(e);if(!Mt(t,e)&&!Ie(t.display,e)&&(e.dataTransfer.setData("Text",t.getSelection()),e.dataTransfer.effectAllowed="copyMove",e.dataTransfer.setDragImage&&!Ta)){var n=i("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",Ca&&(n.width=n.height=1,t.display.wrapper.appendChild(n),n._top=n.offsetTop),e.dataTransfer.setDragImage(n,0,0),Ca&&n.parentNode.removeChild(n)}}function Jr(t,e){var r=kn(t,e);if(r){var o=document.createDocumentFragment();Ln(t,r,o),t.display.dragCursor||(t.display.dragCursor=i("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),t.display.lineSpace.insertBefore(t.display.dragCursor,t.display.cursorDiv)),n(t.display.dragCursor,o)}}function to(t){t.display.dragCursor&&(t.display.lineSpace.removeChild(t.display.dragCursor),t.display.dragCursor=null)}function eo(t){if(document.getElementsByClassName){for(var e=document.getElementsByClassName("CodeMirror"),n=[],i=0;i<e.length;i++){var r=e[i].CodeMirror;r&&n.push(r)}n.length&&n[0].operation(function(){for(var e=0;e<n.length;e++)t(n[e])})}}function no(){js||(io(),js=!0)}function io(){var t;ns(window,"resize",function(){null==t&&(t=setTimeout(function(){t=null,eo(ro)},100))}),ns(window,"blur",function(){return eo(Fn)})}function ro(t){var e=t.display;e.cachedCharWidth=e.cachedTextHeight=e.cachedPaddingH=null,e.scrollbarsClipped=!1,t.setSize()}function oo(t){var e=t.split(/-(?!$)/);t=e[e.length-1];for(var n,i,r,o,a=0;a<e.length-1;a++){var s=e[a];if(/^(cmd|meta|m)$/i.test(s))o=!0;else if(/^a(lt)?$/i.test(s))n=!0;else if(/^(c|ctrl|control)$/i.test(s))i=!0;else{if(!/^s(hift)?$/i.test(s))throw new Error("Unrecognized modifier name: "+s);r=!0}}return n&&(t="Alt-"+t),i&&(t="Ctrl-"+t),o&&(t="Cmd-"+t),r&&(t="Shift-"+t),t}function ao(t){var e={};for(var n in t)if(t.hasOwnProperty(n)){var i=t[n];if(/^(name|fallthrough|(de|at)tach)$/.test(n))continue;if("..."==i){delete t[n];continue}for(var r=m(n.split(" "),oo),o=0;o<r.length;o++){var a=void 0,s=void 0;o==r.length-1?(s=r.join(" "),a=i):(s=r.slice(0,o+1).join(" "),a="...");var l=e[s];if(l){if(l!=a)throw new Error("Inconsistent bindings for "+s)}else e[s]=a}delete t[n]}for(var c in e)t[c]=e[c];return t}function so(t,e,n,i){e=ho(e);var r=e.call?e.call(t,i):e[t];if(!1===r)return"nothing";if("..."===r)return"multi";if(null!=r&&n(r))return"handled";if(e.fallthrough){if("[object Array]"!=Object.prototype.toString.call(e.fallthrough))return so(t,e.fallthrough,n,i);for(var o=0;o<e.fallthrough.length;o++){var a=so(t,e.fallthrough[o],n,i);if(a)return a}}}function lo(t){var e="string"==typeof t?t:Hs[t.keyCode];return"Ctrl"==e||"Alt"==e||"Shift"==e||"Mod"==e}function co(t,e,n){var i=t;return e.altKey&&"Alt"!=i&&(t="Alt-"+t),(Ia?e.metaKey:e.ctrlKey)&&"Ctrl"!=i&&(t="Ctrl-"+t),(Ia?e.ctrlKey:e.metaKey)&&"Cmd"!=i&&(t="Cmd-"+t),!n&&e.shiftKey&&"Shift"!=i&&(t="Shift-"+t),t}function uo(t,e){if(Ca&&34==t.keyCode&&t.char)return!1;var n=Hs[t.keyCode];return null!=n&&!t.altGraphKey&&(3==t.keyCode&&t.code&&(n=t.code),co(n,t,e))}function ho(t){return"string"==typeof t?Bs[t]:t}function fo(t,e){for(var n=t.doc.sel.ranges,i=[],r=0;r<n.length;r++){for(var o=e(n[r]);i.length&&I(o.from,g(i).to)<=0;){var a=i.pop();if(I(a.from,o.from)<0){o.from=a.from;break}}i.push(o)}pi(t,function(){for(var e=i.length-1;e>=0;e--)Fr(t.doc,"",i[e].from,i[e].to,"+delete");Xn(t)})}function po(t,e,n){var i=C(t.text,e+n,n);return i<0||i>t.text.length?null:i}function go(t,e,n){var i=po(t,e.ch,n);return null==i?null:new R(e.line,i,n<0?"after":"before")}function mo(t,e,n,i,r){if(t){var o=Ct(n,e.doc.direction);if(o){var a,s=r<0?g(o):o[0],l=r<0==(1==s.level),c=l?"after":"before";if(s.level>0||"rtl"==e.doc.direction){var u=Xe(e,n);a=r<0?n.text.length-1:0;var h=Ye(e,u,a).top;a=T(function(t){return Ye(e,u,t).top==h},r<0==(1==s.level)?s.from:s.to-1,a),"before"==c&&(a=po(n,a,1))}else a=r<0?s.to:s.from;return new R(i,a,c)}}return new R(i,r<0?n.text.length:0,r<0?"before":"after")}function vo(t,e,n,i){var r=Ct(e,t.doc.direction);if(!r)return go(e,n,i);n.ch>=e.text.length?(n.ch=e.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=St(r,n.ch,n.sticky),a=r[o];if("ltr"==t.doc.direction&&a.level%2==0&&(i>0?a.to>n.ch:a.from<n.ch))return go(e,n,i);var s,l=function(t,n){return po(e,t instanceof R?t.ch:t,n)},c=function(n){return t.options.lineWrapping?(s=s||Xe(t,e),gn(t,e,s,n)):{begin:0,end:e.text.length}},u=c("before"==n.sticky?l(n,-1):n.ch);if("rtl"==t.doc.direction||1==a.level){var h=1==a.level==i<0,d=l(n,h?1:-1);if(null!=d&&(h?d<=a.to&&d<=u.end:d>=a.from&&d>=u.begin)){var f=h?"before":"after";return new R(n.line,d,f)}}var p=function(t,e,i){for(var o=function(t,e){return e?new R(n.line,l(t,1),"before"):new R(n.line,t,"after")};t>=0&&t<r.length;t+=e){var a=r[t],s=e>0==(1!=a.level),c=s?i.begin:l(i.end,-1);if(a.from<=c&&c<a.to)return o(c,s);if(c=s?a.from:l(a.to,-1),i.begin<=c&&c<i.end)return o(c,s)}},g=p(o+i,i,u);if(g)return g;var m=i>0?u.end:l(u.begin,-1);return null==m||i>0&&m==e.text.length||!(g=p(i>0?0:r.length-1,i,c(m)))?null:g}function yo(t,e){var n=A(t.doc,e),i=dt(n);return i!=n&&(e=P(i)),mo(!0,t,i,e,1)}function bo(t,e){var n=A(t.doc,e),i=ft(n);return i!=n&&(e=P(i)),mo(!0,t,n,e,-1)}function xo(t,e){var n=yo(t,e.line),i=A(t.doc,n.line),r=Ct(i,t.doc.direction);if(!r||0==r[0].level){var o=Math.max(0,i.text.search(/\S/)),a=e.line==n.line&&e.ch<=o&&e.ch;return R(n.line,a?0:o,n.sticky)}return n}function wo(t,e,n){if("string"==typeof e&&!(e=Gs[e]))return!1;t.display.input.ensurePolled();var i=t.display.shift,r=!1;try{t.isReadOnly()&&(t.state.suppressEdits=!0),n&&(t.display.shift=!1),r=e(t)!=Ga}finally{t.display.shift=i,t.state.suppressEdits=!1}return r}function _o(t,e,n){for(var i=0;i<t.state.keyMaps.length;i++){var r=so(e,t.state.keyMaps[i],n,t);if(r)return r}return t.options.extraKeys&&so(e,t.options.extraKeys,n,t)||so(e,t.options.keyMap,n,t)}function So(t,e,n,i){var r=t.state.keySeq;if(r){if(lo(e))return"handled";if(/\'$/.test(e)?t.state.keySeq=null:$s.set(50,function(){t.state.keySeq==r&&(t.state.keySeq=null,t.display.input.reset())}),Co(t,r+" "+e,n,i))return!0}return Co(t,e,n,i)}function Co(t,e,n,i){var r=_o(t,e,i);return"multi"==r&&(t.state.keySeq=e),"handled"==r&&we(t,"keyHandled",t,e,n),"handled"!=r&&"multi"!=r||(Dt(n),Nn(t)),!!r}function To(t,e){var n=uo(e,!0);return!!n&&(e.shiftKey&&!t.state.keySeq?So(t,"Shift-"+n,e,function(e){return wo(t,e,!0)})||So(t,n,e,function(e){if("string"==typeof e?/^go[A-Z]/.test(e):e.motion)return wo(t,e)}):So(t,n,e,function(e){return wo(t,e)}))}function ko(t,e,n){return So(t,"'"+n+"'",e,function(e){return wo(t,e,!0)})}function Ao(t){var e=this;if(e.curOp.focus=a(),!Mt(e,t)){ba&&xa<11&&27==t.keyCode&&(t.returnValue=!1);var n=t.keyCode;e.display.shift=16==n||t.shiftKey;var i=To(e,t);Ca&&(Ws=i?n:null,!i&&88==n&&!as&&(Pa?t.metaKey:t.ctrlKey)&&e.replaceSelection("",null,"cut")),18!=n||/\bCodeMirror-crosshair\b/.test(e.display.lineDiv.className)||Mo(e)}}function Mo(t){function e(t){18!=t.keyCode&&t.altKey||(ja(n,"CodeMirror-crosshair"),kt(document,"keyup",e),kt(document,"mouseover",e))}var n=t.display.lineDiv;s(n,"CodeMirror-crosshair"),ns(document,"keyup",e),ns(document,"mouseover",e)}function Eo(t){16==t.keyCode&&(this.doc.sel.shift=!1),Mt(this,t)}function Lo(t){var e=this;if(!(Ie(e.display,t)||Mt(e,t)||t.ctrlKey&&!t.altKey||Pa&&t.metaKey)){var n=t.keyCode,i=t.charCode;if(Ca&&n==Ws)return Ws=null,void Dt(t);if(!Ca||t.which&&!(t.which<10)||!To(e,t)){var r=String.fromCharCode(null==i?n:i);"\b"!=r&&(ko(e,t,r)||e.display.input.onKeyPress(t))}}}function Po(t,e){var n=+new Date;return Ys&&Ys.compare(n,t,e)?(Xs=Ys=null,"triple"):Xs&&Xs.compare(n,t,e)?(Ys=new Us(n,t,e),Xs=null,"double"):(Xs=new Us(n,t,e),Ys=null,"single")}function Do(t){var e=this,n=e.display;if(!(Mt(e,t)||n.activeTouch&&n.input.supportsTouch())){if(n.input.ensurePolled(),n.shift=t.shiftKey,Ie(n,t))return void(wa||(n.scroller.draggable=!1,setTimeout(function(){return n.scroller.draggable=!0},100)));if(!Vo(e,t)){var i=kn(e,t),r=Ft(t),o=i?Po(i,r):"single";window.focus(),1==r&&e.state.selectingText&&e.state.selectingText(t),i&&No(e,r,i,o,t)||(1==r?i?Ro(e,i,o,t):It(t)==n.scroller&&Dt(t):2==r?(i&&gr(e.doc,i),setTimeout(function(){return n.input.focus()},20)):3==r&&(Fa?e.display.input.onContextMenu(t):Rn(e)))}}}function No(t,e,n,i,r){var o="Click";return"double"==i?o="Double"+o:"triple"==i&&(o="Triple"+o),o=(1==e?"Left":2==e?"Middle":"Right")+o,So(t,co(o,r),r,function(e){if("string"==typeof e&&(e=Gs[e]),!e)return!1;var i=!1;try{t.isReadOnly()&&(t.state.suppressEdits=!0),i=e(t,n)!=Ga}finally{t.state.suppressEdits=!1}return i})}function Oo(t,e,n){var i=t.getOption("configureMouse"),r=i?i(t,e,n):{};if(null==r.unit){var o=Da?n.shiftKey&&n.metaKey:n.altKey;r.unit=o?"rectangle":"single"==e?"char":"double"==e?"word":"line"}return(null==r.extend||t.doc.extend)&&(r.extend=t.doc.extend||n.shiftKey),null==r.addNew&&(r.addNew=Pa?n.metaKey:n.ctrlKey),null==r.moveOnDrag&&(r.moveOnDrag=!(Pa?n.altKey:n.ctrlKey)),r}function Ro(t,e,n,i){ba?setTimeout(c(On,t),0):t.curOp.focus=a();var r,o=Oo(t,n,i),s=t.doc.sel;t.options.dragDrop&&is&&!t.isReadOnly()&&"single"==n&&(r=s.contains(e))>-1&&(I((r=s.ranges[r]).from(),e)<0||e.xRel>0)&&(I(r.to(),e)>0||e.xRel<0)?Io(t,i,e,o):jo(t,i,e,o)}function Io(t,e,n,i){var r=t.display,o=!1,a=gi(t,function(e){wa&&(r.scroller.draggable=!1),t.state.draggingText=!1,kt(r.wrapper.ownerDocument,"mouseup",a),kt(r.wrapper.ownerDocument,"mousemove",s),kt(r.scroller,"dragstart",l),kt(r.scroller,"drop",a),o||(Dt(e),i.addNew||gr(t.doc,n,null,null,i.extend),wa||ba&&9==xa?setTimeout(function(){r.wrapper.ownerDocument.body.focus(),r.input.focus()},20):r.input.focus())}),s=function(t){o=o||Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)>=10},l=function(){return o=!0};wa&&(r.scroller.draggable=!0),t.state.draggingText=a,a.copy=!i.moveOnDrag,r.scroller.dragDrop&&r.scroller.dragDrop(),ns(r.wrapper.ownerDocument,"mouseup",a),ns(r.wrapper.ownerDocument,"mousemove",s),ns(r.scroller,"dragstart",l),ns(r.scroller,"drop",a),Rn(t),setTimeout(function(){return r.input.focus()},20)}function Fo(t,e,n){if("char"==n)return new Ls(e,e);if("word"==n)return t.findWordAt(e);if("line"==n)return new Ls(R(e.line,0),q(t.doc,R(e.line+1,0)));var i=n(t,e);return new Ls(i.from,i.to)}function jo(t,e,n,i){function r(e){if(0!=I(v,e))if(v=e,"rectangle"==i.unit){for(var r=[],o=t.options.tabSize,a=h(A(c,n.line).text,n.ch,o),s=h(A(c,e.line).text,e.ch,o),l=Math.min(a,s),g=Math.max(a,s),m=Math.min(n.line,e.line),y=Math.min(t.lastLine(),Math.max(n.line,e.line));m<=y;m++){var b=A(c,m).text,x=f(b,l,o);l==g?r.push(new Ls(R(m,x),R(m,x))):b.length>x&&r.push(new Ls(R(m,x),R(m,f(b,g,o))))}r.length||r.push(new Ls(n,n)),wr(c,zi(t,p.ranges.slice(0,d).concat(r),d),{origin:"*mouse",scroll:!1}),t.scrollIntoView(e)}else{var w,_=u,S=Fo(t,e,i.unit),C=_.anchor;I(S.anchor,C)>0?(w=S.head,C=z(_.from(),S.anchor)):(w=S.anchor,C=H(_.to(),S.head));var T=p.ranges.slice(0);T[d]=Ho(t,new Ls(q(c,C),w)),wr(c,zi(t,T,d),Wa)}}function o(e){var n=++b,s=kn(t,e,!0,"rectangle"==i.unit);if(s)if(0!=I(s,v)){t.curOp.focus=a(),r(s);var u=zn(l,c);(s.line>=u.to||s.line<u.from)&&setTimeout(gi(t,function(){b==n&&o(e)}),150)}else{var h=e.clientY<y.top?-20:e.clientY>y.bottom?20:0;h&&setTimeout(gi(t,function(){b==n&&(l.scroller.scrollTop+=h,o(e))}),50)}}function s(e){t.state.selectingText=!1,b=1/0,Dt(e),l.input.focus(),kt(l.wrapper.ownerDocument,"mousemove",x),kt(l.wrapper.ownerDocument,"mouseup",w),c.history.lastSelOrigin=null}var l=t.display,c=t.doc;Dt(e);var u,d,p=c.sel,g=p.ranges;if(i.addNew&&!i.extend?(d=c.sel.contains(n),u=d>-1?g[d]:new Ls(n,n)):(u=c.sel.primary(),d=c.sel.primIndex),"rectangle"==i.unit)i.addNew||(u=new Ls(n,n)),n=kn(t,e,!0,!0),d=-1;else{var m=Fo(t,n,i.unit);u=i.extend?pr(u,m.anchor,m.head,i.extend):m}i.addNew?-1==d?(d=g.length,wr(c,zi(t,g.concat([u]),d),{scroll:!1,origin:"*mouse"})):g.length>1&&g[d].empty()&&"char"==i.unit&&!i.extend?(wr(c,zi(t,g.slice(0,d).concat(g.slice(d+1)),0),{scroll:!1,origin:"*mouse"}),p=c.sel):vr(c,d,u,Wa):(d=0,wr(c,new Es([u],0),Wa),p=c.sel);var v=n,y=l.wrapper.getBoundingClientRect(),b=0,x=gi(t,function(t){0!==t.buttons&&Ft(t)?o(t):s(t)}),w=gi(t,s);t.state.selectingText=w,ns(l.wrapper.ownerDocument,"mousemove",x),ns(l.wrapper.ownerDocument,"mouseup",w)}function Ho(t,e){var n=e.anchor,i=e.head,r=A(t.doc,n.line);if(0==I(n,i)&&n.sticky==i.sticky)return e;var o=Ct(r);if(!o)return e;var a=St(o,n.ch,n.sticky),s=o[a];if(s.from!=n.ch&&s.to!=n.ch)return e;var l=a+(s.from==n.ch==(1!=s.level)?0:1);if(0==l||l==o.length)return e;var c;if(i.line!=n.line)c=(i.line-n.line)*("ltr"==t.doc.direction?1:-1)>0;else{var u=St(o,i.ch,i.sticky),h=u-a||(i.ch-n.ch)*(1==s.level?-1:1);c=u==l-1||u==l?h<0:h>0}var d=o[l+(c?-1:0)],f=c==(1==d.level),p=f?d.from:d.to,g=f?"after":"before";return n.ch==p&&n.sticky==g?e:new Ls(new R(n.line,p,g),i)}function zo(t,e,n,i){var r,o;if(e.touches)r=e.touches[0].clientX,o=e.touches[0].clientY;else try{r=e.clientX,o=e.clientY}catch(e){return!1}if(r>=Math.floor(t.display.gutters.getBoundingClientRect().right))return!1;i&&Dt(e);var a=t.display,s=a.lineDiv.getBoundingClientRect();if(o>s.bottom||!Lt(t,n))return Ot(e);o-=s.top-a.viewOffset;for(var l=0;l<t.options.gutters.length;++l){var c=a.gutters.childNodes[l];if(c&&c.getBoundingClientRect().right>=r){return At(t,n,t,D(t.doc,o),t.options.gutters[l],e),Ot(e)}}}function Vo(t,e){return zo(t,e,"gutterClick",!0)}function qo(t,e){Ie(t.display,e)||Bo(t,e)||Mt(t,e,"contextmenu")||Fa||t.display.input.onContextMenu(e)}function Bo(t,e){return!!Lt(t,"gutterContextMenu")&&zo(t,e,"gutterContextMenu",!1)}function Go(t){t.display.wrapper.className=t.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+t.options.theme.replace(/(^|\s)\s*/g," cm-s-"),nn(t)}function $o(t){Ri(t),yi(t),Vn(t)}function Wo(t,e,n){if(!e!=!(n&&n!=Qs)){var i=t.display.dragFunctions,r=e?ns:kt;r(t.display.scroller,"dragstart",i.start),r(t.display.scroller,"dragenter",i.enter),r(t.display.scroller,"dragover",i.over),r(t.display.scroller,"dragleave",i.leave),r(t.display.scroller,"drop",i.drop)}}function Uo(t){t.options.lineWrapping?(s(t.display.wrapper,"CodeMirror-wrap"),t.display.sizer.style.minWidth="",t.display.sizerWidth=null):(ja(t.display.wrapper,"CodeMirror-wrap"),wt(t)),Tn(t),yi(t),nn(t),setTimeout(function(){return ii(t)},100)}function Xo(t,e){var n=this;if(!(this instanceof Xo))return new Xo(t,e);this.options=e=e?u(e):{},u(Zs,e,!1),Ii(e);var i=e.value;"string"==typeof i?i=new Is(i,e.mode,null,e.lineSeparator,e.direction):e.mode&&(i.modeOption=e.mode),this.doc=i;var r=new Xo.inputStyles[e.inputStyle](this),o=this.display=new k(t,i,r);o.wrapper.CodeMirror=this,Ri(this),Go(this),e.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),oi(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new za,keySeq:null,specialChars:null},e.autofocus&&!La&&o.input.focus(),ba&&xa<11&&setTimeout(function(){return n.display.input.reset(!0)},20),Yo(this),no(),ai(this),this.curOp.forceUpdate=!0,Ki(this,i),e.autofocus&&!La||this.hasFocus()?setTimeout(c(In,this),20):Fn(this);for(var a in Ks)Ks.hasOwnProperty(a)&&Ks[a](n,e[a],Qs);qn(this),e.finishInit&&e.finishInit(this);for(var s=0;s<Js.length;++s)Js[s](n);si(this),wa&&e.lineWrapping&&"optimizelegibility"==getComputedStyle(o.lineDiv).textRendering&&(o.lineDiv.style.textRendering="auto")}function Yo(t){function e(){r.activeTouch&&(o=setTimeout(function(){return r.activeTouch=null},1e3),a=r.activeTouch,a.end=+new Date)}function n(t){if(1!=t.touches.length)return!1;var e=t.touches[0];return e.radiusX<=1&&e.radiusY<=1}function i(t,e){if(null==e.left)return!0;var n=e.left-t.left,i=e.top-t.top;return n*n+i*i>400}var r=t.display;ns(r.scroller,"mousedown",gi(t,Do)),
+ba&&xa<11?ns(r.scroller,"dblclick",gi(t,function(e){if(!Mt(t,e)){var n=kn(t,e);if(n&&!Vo(t,e)&&!Ie(t.display,e)){Dt(e);var i=t.findWordAt(n);gr(t.doc,i.anchor,i.head)}}})):ns(r.scroller,"dblclick",function(e){return Mt(t,e)||Dt(e)}),ns(r.scroller,"contextmenu",function(e){return qo(t,e)});var o,a={end:0};ns(r.scroller,"touchstart",function(e){if(!Mt(t,e)&&!n(e)&&!Vo(t,e)){r.input.ensurePolled(),clearTimeout(o);var i=+new Date;r.activeTouch={start:i,moved:!1,prev:i-a.end<=300?a:null},1==e.touches.length&&(r.activeTouch.left=e.touches[0].pageX,r.activeTouch.top=e.touches[0].pageY)}}),ns(r.scroller,"touchmove",function(){r.activeTouch&&(r.activeTouch.moved=!0)}),ns(r.scroller,"touchend",function(n){var o=r.activeTouch;if(o&&!Ie(r,n)&&null!=o.left&&!o.moved&&new Date-o.start<300){var a,s=t.coordsChar(r.activeTouch,"page");a=!o.prev||i(o,o.prev)?new Ls(s,s):!o.prev.prev||i(o,o.prev.prev)?t.findWordAt(s):new Ls(R(s.line,0),q(t.doc,R(s.line+1,0))),t.setSelection(a.anchor,a.head),t.focus(),Dt(n)}e()}),ns(r.scroller,"touchcancel",e),ns(r.scroller,"scroll",function(){r.scroller.clientHeight&&(Jn(t,r.scroller.scrollTop),ei(t,r.scroller.scrollLeft,!0),At(t,"scroll",t))}),ns(r.scroller,"mousewheel",function(e){return Hi(t,e)}),ns(r.scroller,"DOMMouseScroll",function(e){return Hi(t,e)}),ns(r.wrapper,"scroll",function(){return r.wrapper.scrollTop=r.wrapper.scrollLeft=0}),r.dragFunctions={enter:function(e){Mt(t,e)||Rt(e)},over:function(e){Mt(t,e)||(Jr(t,e),Rt(e))},start:function(e){return Kr(t,e)},drop:gi(t,Zr),leave:function(e){Mt(t,e)||to(t)}};var s=r.input.getField();ns(s,"keyup",function(e){return Eo.call(t,e)}),ns(s,"keydown",gi(t,Ao)),ns(s,"keypress",gi(t,Lo)),ns(s,"focus",function(e){return In(t,e)}),ns(s,"blur",function(e){return Fn(t,e)})}function Qo(t,e,n,i){var r,o=t.doc;null==n&&(n="add"),"smart"==n&&(o.mode.indent?r=Zt(t,e).state:n="prev");var a=t.options.tabSize,s=A(o,e),l=h(s.text,null,a);s.stateAfter&&(s.stateAfter=null);var c,u=s.text.match(/^\s*/)[0];if(i||/\S/.test(s.text)){if("smart"==n&&((c=o.mode.indent(r,s.text.slice(u.length),s.text))==Ga||c>150)){if(!i)return;n="prev"}}else c=0,n="not";"prev"==n?c=e>o.first?h(A(o,e-1).text,null,a):0:"add"==n?c=l+t.options.indentUnit:"subtract"==n?c=l-t.options.indentUnit:"number"==typeof n&&(c=l+n),c=Math.max(0,c);var d="",f=0;if(t.options.indentWithTabs)for(var g=Math.floor(c/a);g;--g)f+=a,d+="\t";if(f<c&&(d+=p(c-f)),d!=u)return Fr(o,d,R(e,0),R(e,u.length),"+input"),s.stateAfter=null,!0;for(var m=0;m<o.sel.ranges.length;m++){var v=o.sel.ranges[m];if(v.head.line==e&&v.head.ch<u.length){var y=R(e,u.length);vr(o,m,new Ls(y,y));break}}}function Zo(t){tl=t}function Ko(t,e,n,i,r){var o=t.doc;t.display.shift=!1,i||(i=o.sel);var a=+new Date-200,s="paste"==r||t.state.pasteIncoming>a,l=rs(e),c=null;if(s&&i.ranges.length>1)if(tl&&tl.text.join("\n")==e){if(i.ranges.length%tl.text.length==0){c=[];for(var u=0;u<tl.text.length;u++)c.push(o.splitLines(tl.text[u]))}}else l.length==i.ranges.length&&t.options.pasteLinesPerSelection&&(c=m(l,function(t){return[t]}));for(var h=t.curOp.updateInput,d=i.ranges.length-1;d>=0;d--){var f=i.ranges[d],p=f.from(),v=f.to();f.empty()&&(n&&n>0?p=R(p.line,p.ch-n):t.state.overwrite&&!s?v=R(v.line,Math.min(A(o,v.line).text.length,v.ch+g(l).length)):s&&tl&&tl.lineWise&&tl.text.join("\n")==e&&(p=v=R(p.line,0)));var y={from:p,to:v,text:c?c[d%c.length]:l,origin:r||(s?"paste":t.state.cutIncoming>a?"cut":"+input")};Pr(t.doc,y),we(t,"inputRead",t,y)}e&&!s&&ta(t,e),Xn(t),t.curOp.updateInput<2&&(t.curOp.updateInput=h),t.curOp.typing=!0,t.state.pasteIncoming=t.state.cutIncoming=-1}function Jo(t,e){var n=t.clipboardData&&t.clipboardData.getData("Text");if(n)return t.preventDefault(),e.isReadOnly()||e.options.disableInput||pi(e,function(){return Ko(e,n,0,null,"paste")}),!0}function ta(t,e){if(t.options.electricChars&&t.options.smartIndent)for(var n=t.doc.sel,i=n.ranges.length-1;i>=0;i--){var r=n.ranges[i];if(!(r.head.ch>100||i&&n.ranges[i-1].head.line==r.head.line)){var o=t.getModeAt(r.head),a=!1;if(o.electricChars){for(var s=0;s<o.electricChars.length;s++)if(e.indexOf(o.electricChars.charAt(s))>-1){a=Qo(t,r.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(A(t.doc,r.head.line).text.slice(0,r.head.ch))&&(a=Qo(t,r.head.line,"smart"));a&&we(t,"electricInput",t,r.head.line)}}}function ea(t){for(var e=[],n=[],i=0;i<t.doc.sel.ranges.length;i++){var r=t.doc.sel.ranges[i].head.line,o={anchor:R(r,0),head:R(r+1,0)};n.push(o),e.push(t.getRange(o.anchor,o.head))}return{text:e,ranges:n}}function na(t,e,n,i){t.setAttribute("autocorrect",!!n),t.setAttribute("autocapitalize",!!i),t.setAttribute("spellcheck",!!e)}function ia(){var t=i("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),e=i("div",[t],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return wa?t.style.width="1000px":t.setAttribute("wrap","off"),Ma&&(t.style.border="1px solid black"),na(t),e}function ra(t,e,n,i,r){function o(){var i=e.line+n;return!(i<t.first||i>=t.first+t.size)&&(e=new R(i,e.ch,e.sticky),c=A(t,i))}function a(i){var a;if(null==(a=r?vo(t.cm,c,e,n):go(c,e,n))){if(i||!o())return!1;e=mo(r,t.cm,c,e.line,n)}else e=a;return!0}var s=e,l=n,c=A(t,e.line);if("char"==i)a();else if("column"==i)a(!0);else if("word"==i||"group"==i)for(var u=null,h="group"==i,d=t.cm&&t.cm.getHelper(e,"wordChars"),f=!0;!(n<0)||a(!f);f=!1){var p=c.text.charAt(e.ch)||"\n",g=w(p,d)?"w":h&&"\n"==p?"n":!h||/\s/.test(p)?null:"p";if(!h||f||g||(g="s"),u&&u!=g){n<0&&(n=1,a(),e.sticky="after");break}if(g&&(u=g),n>0&&!a(!f))break}var m=Ar(t,e,s,l,!0);return F(s,m)&&(m.hitSide=!0),m}function oa(t,e,n,i){var r,o=t.doc,a=e.left;if("page"==i){var s=Math.min(t.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),l=Math.max(s-.5*xn(t.display),3);r=(n>0?e.bottom:e.top)+n*l}else"line"==i&&(r=n>0?e.bottom+3:e.top-3);for(var c;c=fn(t,a,r),c.outside;){if(n<0?r<=0:r>=o.height){c.hitSide=!0;break}r+=5*n}return c}function aa(t,e){var n=Ue(t,e.line);if(!n||n.hidden)return null;var i=A(t.doc,e.line),r=Ge(n,i,e.line),o=Ct(i,t.doc.direction),a="left";if(o){a=St(o,e.ch)%2?"right":"left"}var s=Qe(r.map,e.ch,a);return s.offset="right"==s.collapse?s.end:s.start,s}function sa(t){for(var e=t;e;e=e.parentNode)if(/CodeMirror-gutter-wrapper/.test(e.className))return!0;return!1}function la(t,e){return e&&(t.bad=!0),t}function ca(t,e,n,i,r){function o(t){return function(e){return e.id==t}}function a(){u&&(c+=h,d&&(c+=h),u=d=!1)}function s(t){t&&(a(),c+=t)}function l(e){if(1==e.nodeType){var n=e.getAttribute("cm-text");if(n)return void s(n);var c,f=e.getAttribute("cm-marker");if(f){var p=t.findMarks(R(i,0),R(r+1,0),o(+f));return void(p.length&&(c=p[0].find(0))&&s(M(t.doc,c.from,c.to).join(h)))}if("false"==e.getAttribute("contenteditable"))return;var g=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;g&&a();for(var m=0;m<e.childNodes.length;m++)l(e.childNodes[m]);/^(pre|p)$/i.test(e.nodeName)&&(d=!0),g&&(u=!0)}else 3==e.nodeType&&s(e.nodeValue.replace(/\u200b/g,"").replace(/\u00a0/g," "))}for(var c="",u=!1,h=t.doc.lineSeparator(),d=!1;l(e),e!=n;)e=e.nextSibling,d=!1;return c}function ua(t,e,n){var i;if(e==t.display.lineDiv){if(!(i=t.display.lineDiv.childNodes[n]))return la(t.clipPos(R(t.display.viewTo-1)),!0);e=null,n=0}else for(i=e;;i=i.parentNode){if(!i||i==t.display.lineDiv)return null;if(i.parentNode&&i.parentNode==t.display.lineDiv)break}for(var r=0;r<t.display.view.length;r++){var o=t.display.view[r];if(o.node==i)return ha(o,e,n)}}function ha(t,e,n){function i(e,n,i){for(var r=-1;r<(h?h.length:0);r++)for(var o=r<0?u.map:h[r],a=0;a<o.length;a+=3){var s=o[a+2];if(s==e||s==n){var l=P(r<0?t.line:t.rest[r]),c=o[a]+i;return(i<0||s!=e)&&(c=o[a+(i?1:0)]),R(l,c)}}}var r=t.text.firstChild,a=!1;if(!e||!o(r,e))return la(R(P(t.line),0),!0);if(e==r&&(a=!0,e=r.childNodes[n],n=0,!e)){var s=t.rest?g(t.rest):t.line;return la(R(P(s),s.text.length),a)}var l=3==e.nodeType?e:null,c=e;for(l||1!=e.childNodes.length||3!=e.firstChild.nodeType||(l=e.firstChild,n&&(n=l.nodeValue.length));c.parentNode!=r;)c=c.parentNode;var u=t.measure,h=u.maps,d=i(l,c,n);if(d)return la(d,a);for(var f=c.nextSibling,p=l?l.nodeValue.length-n:0;f;f=f.nextSibling){if(d=i(f,f.firstChild,0))return la(R(d.line,d.ch-p),a);p+=f.textContent.length}for(var m=c.previousSibling,v=n;m;m=m.previousSibling){if(d=i(m,m.firstChild,-1))return la(R(d.line,d.ch+v),a);v+=m.textContent.length}}function da(t,e){function n(){t.value=l.getValue()}if(e=e?u(e):{},e.value=t.value,!e.tabindex&&t.tabIndex&&(e.tabindex=t.tabIndex),!e.placeholder&&t.placeholder&&(e.placeholder=t.placeholder),null==e.autofocus){var i=a();e.autofocus=i==t||null!=t.getAttribute("autofocus")&&i==document.body}var r;if(t.form&&(ns(t.form,"submit",n),!e.leaveSubmitMethodAlone)){var o=t.form;r=o.submit;try{var s=o.submit=function(){n(),o.submit=r,o.submit(),o.submit=s}}catch(t){}}e.finishInit=function(e){e.save=n,e.getTextArea=function(){return t},e.toTextArea=function(){e.toTextArea=isNaN,n(),t.parentNode.removeChild(e.getWrapperElement()),t.style.display="",t.form&&(kt(t.form,"submit",n),"function"==typeof t.form.submit&&(t.form.submit=r))}},t.style.display="none";var l=Xo(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},e);return l}var fa=navigator.userAgent,pa=navigator.platform,ga=/gecko\/\d/i.test(fa),ma=/MSIE \d/.test(fa),va=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(fa),ya=/Edge\/(\d+)/.exec(fa),ba=ma||va||ya,xa=ba&&(ma?document.documentMode||6:+(ya||va)[1]),wa=!ya&&/WebKit\//.test(fa),_a=wa&&/Qt\/\d+\.\d+/.test(fa),Sa=!ya&&/Chrome\//.test(fa),Ca=/Opera\//.test(fa),Ta=/Apple Computer/.test(navigator.vendor),ka=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(fa),Aa=/PhantomJS/.test(fa),Ma=!ya&&/AppleWebKit/.test(fa)&&/Mobile\/\w+/.test(fa),Ea=/Android/.test(fa),La=Ma||Ea||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(fa),Pa=Ma||/Mac/.test(pa),Da=/\bCrOS\b/.test(fa),Na=/win/i.test(pa),Oa=Ca&&fa.match(/Version\/(\d*\.\d*)/);Oa&&(Oa=Number(Oa[1])),Oa&&Oa>=15&&(Ca=!1,wa=!0);var Ra,Ia=Pa&&(_a||Ca&&(null==Oa||Oa<12.11)),Fa=ga||ba&&xa>=9,ja=function(e,n){var i=e.className,r=t(n).exec(i);if(r){var o=i.slice(r.index+r[0].length);e.className=i.slice(0,r.index)+(o?r[1]+o:"")}};Ra=document.createRange?function(t,e,n,i){var r=document.createRange();return r.setEnd(i||t,n),r.setStart(t,e),r}:function(t,e,n){var i=document.body.createTextRange();try{i.moveToElementText(t.parentNode)}catch(t){return i}return i.collapse(!0),i.moveEnd("character",n),i.moveStart("character",e),i};var Ha=function(t){t.select()};Ma?Ha=function(t){t.selectionStart=0,t.selectionEnd=t.value.length}:ba&&(Ha=function(t){try{t.select()}catch(t){}});var za=function(){this.id=null};za.prototype.set=function(t,e){clearTimeout(this.id),this.id=setTimeout(e,t)};var Va,qa,Ba=30,Ga={toString:function(){return"CodeMirror.Pass"}},$a={scroll:!1},Wa={origin:"*mouse"},Ua={origin:"+move"},Xa=[""],Ya=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Qa=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,Za=!1,Ka=!1,Ja=null,ts=function(){function t(t){return t<=247?n.charAt(t):1424<=t&&t<=1524?"R":1536<=t&&t<=1785?i.charAt(t-1536):1774<=t&&t<=2220?"r":8192<=t&&t<=8203?"w":8204==t?"b":"L"}function e(t,e,n){this.level=t,this.from=e,this.to=n}var n="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",i="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111",r=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,o=/[stwN]/,a=/[LRr]/,s=/[Lb1n]/,l=/[1n]/;return function(n,i){var c="ltr"==i?"L":"R";if(0==n.length||"ltr"==i&&!r.test(n))return!1;for(var u=n.length,h=[],d=0;d<u;++d)h.push(t(n.charCodeAt(d)));for(var f=0,p=c;f<u;++f){var m=h[f];"m"==m?h[f]=p:p=m}for(var v=0,y=c;v<u;++v){var b=h[v];"1"==b&&"r"==y?h[v]="n":a.test(b)&&(y=b,"r"==b&&(h[v]="R"))}for(var x=1,w=h[0];x<u-1;++x){var _=h[x];"+"==_&&"1"==w&&"1"==h[x+1]?h[x]="1":","!=_||w!=h[x+1]||"1"!=w&&"n"!=w||(h[x]=w),w=_}for(var S=0;S<u;++S){var C=h[S];if(","==C)h[S]="N";else if("%"==C){var T=void 0;for(T=S+1;T<u&&"%"==h[T];++T);for(var k=S&&"!"==h[S-1]||T<u&&"1"==h[T]?"1":"N",A=S;A<T;++A)h[A]=k;S=T-1}}for(var M=0,E=c;M<u;++M){var L=h[M];"L"==E&&"1"==L?h[M]="L":a.test(L)&&(E=L)}for(var P=0;P<u;++P)if(o.test(h[P])){var D=void 0;for(D=P+1;D<u&&o.test(h[D]);++D);for(var N="L"==(P?h[P-1]:c),O="L"==(D<u?h[D]:c),R=N==O?N?"L":"R":c,I=P;I<D;++I)h[I]=R;P=D-1}for(var F,j=[],H=0;H<u;)if(s.test(h[H])){var z=H;for(++H;H<u&&s.test(h[H]);++H);j.push(new e(0,z,H))}else{var V=H,q=j.length;for(++H;H<u&&"L"!=h[H];++H);for(var B=V;B<H;)if(l.test(h[B])){V<B&&j.splice(q,0,new e(1,V,B));var G=B;for(++B;B<H&&l.test(h[B]);++B);j.splice(q,0,new e(2,G,B)),V=B}else++B;V<H&&j.splice(q,0,new e(1,V,H))}return"ltr"==i&&(1==j[0].level&&(F=n.match(/^\s+/))&&(j[0].from=F[0].length,j.unshift(new e(0,0,F[0].length))),1==g(j).level&&(F=n.match(/\s+$/))&&(g(j).to-=F[0].length,j.push(new e(0,u-F[0].length,u)))),"rtl"==i?j.reverse():j}}(),es=[],ns=function(t,e,n){if(t.addEventListener)t.addEventListener(e,n,!1);else if(t.attachEvent)t.attachEvent("on"+e,n);else{var i=t._handlers||(t._handlers={});i[e]=(i[e]||es).concat(n)}},is=function(){if(ba&&xa<9)return!1;var t=i("div");return"draggable"in t||"dragDrop"in t}(),rs=3!="\n\nb".split(/\n/).length?function(t){for(var e=0,n=[],i=t.length;e<=i;){var r=t.indexOf("\n",e);-1==r&&(r=t.length);var o=t.slice(e,"\r"==t.charAt(r-1)?r-1:r),a=o.indexOf("\r");-1!=a?(n.push(o.slice(0,a)),e+=a+1):(n.push(o),e=r+1)}return n}:function(t){return t.split(/\r\n?|\n/)},os=window.getSelection?function(t){try{return t.selectionStart!=t.selectionEnd}catch(t){return!1}}:function(t){var e;try{e=t.ownerDocument.selection.createRange()}catch(t){}return!(!e||e.parentElement()!=t)&&0!=e.compareEndPoints("StartToEnd",e)},as=function(){var t=i("div");return"oncopy"in t||(t.setAttribute("oncopy","return;"),"function"==typeof t.oncopy)}(),ss=null,ls={},cs={},us={},hs=function(t,e,n){this.pos=this.start=0,this.string=t,this.tabSize=e||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};hs.prototype.eol=function(){return this.pos>=this.string.length},hs.prototype.sol=function(){return this.pos==this.lineStart},hs.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},hs.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},hs.prototype.eat=function(t){var e=this.string.charAt(this.pos);if("string"==typeof t?e==t:e&&(t.test?t.test(e):t(e)))return++this.pos,e},hs.prototype.eatWhile=function(t){for(var e=this.pos;this.eat(t););return this.pos>e},hs.prototype.eatSpace=function(){for(var t=this,e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++t.pos;return this.pos>e},hs.prototype.skipToEnd=function(){this.pos=this.string.length},hs.prototype.skipTo=function(t){var e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0},hs.prototype.backUp=function(t){this.pos-=t},hs.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=h(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?h(this.string,this.lineStart,this.tabSize):0)},hs.prototype.indentation=function(){return h(this.string,null,this.tabSize)-(this.lineStart?h(this.string,this.lineStart,this.tabSize):0)},hs.prototype.match=function(t,e,n){if("string"!=typeof t){var i=this.string.slice(this.pos).match(t);return i&&i.index>0?null:(i&&!1!==e&&(this.pos+=i[0].length),i)}var r=function(t){return n?t.toLowerCase():t};if(r(this.string.substr(this.pos,t.length))==r(t))return!1!==e&&(this.pos+=t.length),!0},hs.prototype.current=function(){return this.string.slice(this.start,this.pos)},hs.prototype.hideFirstChars=function(t,e){this.lineStart+=t;try{return e()}finally{this.lineStart-=t}},hs.prototype.lookAhead=function(t){var e=this.lineOracle;return e&&e.lookAhead(t)},hs.prototype.baseToken=function(){var t=this.lineOracle;return t&&t.baseToken(this.pos)};var ds=function(t,e){this.state=t,this.lookAhead=e},fs=function(t,e,n,i){this.state=e,this.doc=t,this.line=n,this.maxLookAhead=i||0,this.baseTokens=null,this.baseTokenPos=1};fs.prototype.lookAhead=function(t){var e=this.doc.getLine(this.line+t);return null!=e&&t>this.maxLookAhead&&(this.maxLookAhead=t),e},fs.prototype.baseToken=function(t){var e=this;if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=t;)e.baseTokenPos+=2;var n=this.baseTokens[this.baseTokenPos+1];return{type:n&&n.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-t}},fs.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},fs.fromSaved=function(t,e,n){return e instanceof ds?new fs(t,Wt(t.mode,e.state),n,e.lookAhead):new fs(t,Wt(t.mode,e),n)},fs.prototype.save=function(t){var e=!1!==t?Wt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ds(e,this.maxLookAhead):e};var ps=function(t,e,n){this.start=t.start,this.end=t.pos,this.string=t.current(),this.type=e||null,this.state=n},gs=function(t,e,n){this.text=t,it(this,e),this.height=n?n(this):1};gs.prototype.lineNo=function(){return P(this)},Pt(gs);var ms,vs={},ys={},bs=null,xs=null,ws={left:0,right:0,top:0,bottom:0},_s=function(t,e,n){this.cm=n;var r=this.vert=i("div",[i("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),o=this.horiz=i("div",[i("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=o.tabIndex=-1,t(r),t(o),ns(r,"scroll",function(){r.clientHeight&&e(r.scrollTop,"vertical")}),ns(o,"scroll",function(){o.clientWidth&&e(o.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,ba&&xa<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};_s.prototype.update=function(t){var e=t.scrollWidth>t.clientWidth+1,n=t.scrollHeight>t.clientHeight+1,i=t.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=e?i+"px":"0";var r=t.viewHeight-(e?i:0);this.vert.firstChild.style.height=Math.max(0,t.scrollHeight-t.clientHeight+r)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(e){this.horiz.style.display="block",this.horiz.style.right=n?i+"px":"0",this.horiz.style.left=t.barLeft+"px";var o=t.viewWidth-t.barLeft-(n?i:0);this.horiz.firstChild.style.width=Math.max(0,t.scrollWidth-t.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&t.clientHeight>0&&(0==i&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?i:0,bottom:e?i:0}},_s.prototype.setScrollLeft=function(t){this.horiz.scrollLeft!=t&&(this.horiz.scrollLeft=t),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},_s.prototype.setScrollTop=function(t){this.vert.scrollTop!=t&&(this.vert.scrollTop=t),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},_s.prototype.zeroWidthHack=function(){var t=Pa&&!ka?"12px":"18px";this.horiz.style.height=this.vert.style.width=t,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new za,this.disableVert=new za},_s.prototype.enableZeroWidthBar=function(t,e,n){function i(){var r=t.getBoundingClientRect();("vert"==n?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1))!=t?t.style.pointerEvents="none":e.set(1e3,i)}t.style.pointerEvents="auto",e.set(1e3,i)},_s.prototype.clear=function(){var t=this.horiz.parentNode;t.removeChild(this.horiz),t.removeChild(this.vert)};var Ss=function(){};Ss.prototype.update=function(){return{bottom:0,right:0}},Ss.prototype.setScrollLeft=function(){},Ss.prototype.setScrollTop=function(){},Ss.prototype.clear=function(){};var Cs={native:_s,null:Ss},Ts=0,ks=function(t,e,n){var i=t.display;this.viewport=e,this.visible=zn(i,t.doc,e),this.editorIsHidden=!i.wrapper.offsetWidth,this.wrapperHeight=i.wrapper.clientHeight,this.wrapperWidth=i.wrapper.clientWidth,this.oldDisplayWidth=Ve(t),this.force=n,this.dims=_n(t),this.events=[]};ks.prototype.signal=function(t,e){Lt(t,e)&&this.events.push(arguments)},ks.prototype.finish=function(){for(var t=this,e=0;e<this.events.length;e++)At.apply(null,t.events[e])};var As=0,Ms=null;ba?Ms=-.53:ga?Ms=15:Sa?Ms=-.7:Ta&&(Ms=-1/3);var Es=function(t,e){this.ranges=t,this.primIndex=e};Es.prototype.primary=function(){return this.ranges[this.primIndex]},Es.prototype.equals=function(t){var e=this;if(t==this)return!0;if(t.primIndex!=this.primIndex||t.ranges.length!=this.ranges.length)return!1;for(var n=0;n<this.ranges.length;n++){var i=e.ranges[n],r=t.ranges[n];if(!F(i.anchor,r.anchor)||!F(i.head,r.head))return!1}return!0},Es.prototype.deepCopy=function(){for(var t=this,e=[],n=0;n<this.ranges.length;n++)e[n]=new Ls(j(t.ranges[n].anchor),j(t.ranges[n].head));return new Es(e,this.primIndex)},Es.prototype.somethingSelected=function(){for(var t=this,e=0;e<this.ranges.length;e++)if(!t.ranges[e].empty())return!0;return!1},Es.prototype.contains=function(t,e){var n=this;e||(e=t);for(var i=0;i<this.ranges.length;i++){var r=n.ranges[i];if(I(e,r.from())>=0&&I(t,r.to())<=0)return i}return-1};var Ls=function(t,e){this.anchor=t,this.head=e};Ls.prototype.from=function(){return z(this.anchor,this.head)},Ls.prototype.to=function(){return H(this.anchor,this.head)},Ls.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},qr.prototype={chunkSize:function(){return this.lines.length},removeInner:function(t,e){for(var n=this,i=t,r=t+e;i<r;++i){var o=n.lines[i];n.height-=o.height,se(o),we(o,"delete")}this.lines.splice(t,e)},collapse:function(t){t.push.apply(t,this.lines)},insertInner:function(t,e,n){var i=this;this.height+=n,this.lines=this.lines.slice(0,t).concat(e).concat(this.lines.slice(t));for(var r=0;r<e.length;++r)e[r].parent=i},iterN:function(t,e,n){for(var i=this,r=t+e;t<r;++t)if(n(i.lines[t]))return!0}},Br.prototype={chunkSize:function(){return this.size},removeInner:function(t,e){var n=this;this.size-=e;for(var i=0;i<this.children.length;++i){var r=n.children[i],o=r.chunkSize();if(t<o){var a=Math.min(e,o-t),s=r.height;if(r.removeInner(t,a),n.height-=s-r.height,o==a&&(n.children.splice(i--,1),r.parent=null),0==(e-=a))break;t=0}else t-=o}if(this.size-e<25&&(this.children.length>1||!(this.children[0]instanceof qr))){var l=[];this.collapse(l),this.children=[new qr(l)],this.children[0].parent=this}},collapse:function(t){for(var e=this,n=0;n<this.children.length;++n)e.children[n].collapse(t)},insertInner:function(t,e,n){var i=this;this.size+=e.length,this.height+=n;for(var r=0;r<this.children.length;++r){var o=i.children[r],a=o.chunkSize();if(t<=a){if(o.insertInner(t,e,n),o.lines&&o.lines.length>50){for(var s=o.lines.length%25+25,l=s;l<o.lines.length;){var c=new qr(o.lines.slice(l,l+=25));o.height-=c.height,i.children.splice(++r,0,c),c.parent=i}o.lines=o.lines.slice(0,s),i.maybeSpill()}break}t-=a}},maybeSpill:function(){if(!(this.children.length<=10)){var t=this;do{var e=t.children.splice(t.children.length-5,5),n=new Br(e);if(t.parent){t.size-=n.size,t.height-=n.height;var i=d(t.parent.children,t);t.parent.children.splice(i+1,0,n)}else{var r=new Br(t.children);r.parent=t,t.children=[r,n],t=r}n.parent=t.parent}while(t.children.length>10);t.parent.maybeSpill()}},iterN:function(t,e,n){for(var i=this,r=0;r<this.children.length;++r){var o=i.children[r],a=o.chunkSize();if(t<a){var s=Math.min(e,a-t);if(o.iterN(t,s,n))return!0;if(0==(e-=s))break;t=0}else t-=a}}};var Ps=function(t,e,n){var i=this;if(n)for(var r in n)n.hasOwnProperty(r)&&(i[r]=n[r]);this.doc=t,this.node=e};Ps.prototype.clear=function(){var t=this,e=this.doc.cm,n=this.line.widgets,i=this.line,r=P(i);if(null!=r&&n){for(var o=0;o<n.length;++o)n[o]==t&&n.splice(o--,1);n.length||(i.widgets=null);var a=Re(this);L(i,Math.max(0,i.height-a)),e&&(pi(e,function(){Gr(e,i,-a),bi(e,r,"widget")}),we(e,"lineWidgetCleared",e,this,r))}},Ps.prototype.changed=function(){var t=this,e=this.height,n=this.doc.cm,i=this.line;this.height=null;var r=Re(this)-e;r&&(vt(this.doc,i)||L(i,i.height+r),n&&pi(n,function(){n.curOp.forceUpdate=!0,Gr(n,i,r),we(n,"lineWidgetChanged",n,t,P(i))}))},Pt(Ps);var Ds=0,Ns=function(t,e){this.lines=[],this.type=e,this.doc=t,this.id=++Ds};Ns.prototype.clear=function(){var t=this;if(!this.explicitlyCleared){var e=this.doc.cm,n=e&&!e.curOp;if(n&&ai(e),Lt(this,"clear")){var i=this.find();i&&we(this,"clear",i.from,i.to)}for(var r=null,o=null,a=0;a<this.lines.length;++a){var s=t.lines[a],l=X(s.markedSpans,t);e&&!t.collapsed?bi(e,P(s),"text"):e&&(null!=l.to&&(o=P(s)),null!=l.from&&(r=P(s))),s.markedSpans=Y(s.markedSpans,l),null==l.from&&t.collapsed&&!vt(t.doc,s)&&e&&L(s,xn(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var c=0;c<this.lines.length;++c){var u=dt(t.lines[c]),h=xt(u);h>e.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=h,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&yi(e,r,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Cr(e.doc)),e&&we(e,"markerCleared",e,this,r,o),n&&si(e),this.parent&&this.parent.clear()}},Ns.prototype.find=function(t,e){var n=this;null==t&&"bookmark"==this.type&&(t=1);for(var i,r,o=0;o<this.lines.length;++o){var a=n.lines[o],s=X(a.markedSpans,n);if(null!=s.from&&(i=R(e?a:P(a),s.from),-1==t))return i;if(null!=s.to&&(r=R(e?a:P(a),s.to),1==t))return r}return i&&{from:i,to:r}},Ns.prototype.changed=function(){var t=this,e=this.find(-1,!0),n=this,i=this.doc.cm;e&&i&&pi(i,function(){var r=e.line,o=P(e.line),a=Ue(i,o);if(a&&(tn(a),i.curOp.selectionChanged=i.curOp.forceUpdate=!0),i.curOp.updateMaxLine=!0,!vt(n.doc,r)&&null!=n.height){var s=n.height;n.height=null;var l=Re(n)-s;l&&L(r,r.height+l)}we(i,"markerChanged",i,t)})},Ns.prototype.attachLine=function(t){if(!this.lines.length&&this.doc.cm){var e=this.doc.cm.curOp;e.maybeHiddenMarkers&&-1!=d(e.maybeHiddenMarkers,this)||(e.maybeUnhiddenMarkers||(e.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(t)},Ns.prototype.detachLine=function(t){if(this.lines.splice(d(this.lines,t),1),!this.lines.length&&this.doc.cm){var e=this.doc.cm.curOp;(e.maybeHiddenMarkers||(e.maybeHiddenMarkers=[])).push(this)}},Pt(Ns);var Os=function(t,e){var n=this;this.markers=t,this.primary=e;for(var i=0;i<t.length;++i)t[i].parent=n};Os.prototype.clear=function(){var t=this;if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)t.markers[e].clear();we(this,"clear")}},Os.prototype.find=function(t,e){return this.primary.find(t,e)},Pt(Os);var Rs=0,Is=function(t,e,n,i,r){if(!(this instanceof Is))return new Is(t,e,n,i,r);null==n&&(n=0),Br.call(this,[new qr([new gs("",null)])]),this.first=n,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=n;var o=R(n,0);this.sel=Vi(o),this.history=new er(null),this.id=++Rs,this.modeOption=e,this.lineSep=i,this.direction="rtl"==r?"rtl":"ltr",this.extend=!1,"string"==typeof t&&(t=this.splitLines(t)),Qi(this,{from:o,to:o,text:t}),wr(this,Vi(o),$a)};Is.prototype=b(Br.prototype,{constructor:Is,iter:function(t,e,n){n?this.iterN(t-this.first,e-t,n):this.iterN(this.first,this.first+this.size,t)},insert:function(t,e){for(var n=0,i=0;i<e.length;++i)n+=e[i].height;this.insertInner(t-this.first,e,n)},remove:function(t,e){this.removeInner(t-this.first,e)},getValue:function(t){var e=E(this,this.first,this.first+this.size);return!1===t?e:e.join(t||this.lineSeparator())},setValue:vi(function(t){var e=R(this.first,0),n=this.first+this.size-1;Pr(this,{from:e,to:R(n,A(this,n).text.length),text:this.splitLines(t),origin:"setValue",full:!0},!0),this.cm&&Yn(this.cm,0,0),wr(this,Vi(e),$a)}),replaceRange:function(t,e,n,i){e=q(this,e),n=n?q(this,n):e,Fr(this,t,e,n,i)},getRange:function(t,e,n){var i=M(this,q(this,t),q(this,e));return!1===n?i:i.join(n||this.lineSeparator())},getLine:function(t){var e=this.getLineHandle(t);return e&&e.text},getLineHandle:function(t){if(N(this,t))return A(this,t)},getLineNumber:function(t){return P(t)},getLineHandleVisualStart:function(t){return"number"==typeof t&&(t=A(this,t)),dt(t)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(t){return q(this,t)},getCursor:function(t){var e=this.sel.primary();return null==t||"head"==t?e.head:"anchor"==t?e.anchor:"end"==t||"to"==t||!1===t?e.to():e.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:vi(function(t,e,n){yr(this,q(this,"number"==typeof t?R(t,e||0):t),null,n)}),setSelection:vi(function(t,e,n){yr(this,q(this,t),q(this,e||t),n)}),extendSelection:vi(function(t,e,n){gr(this,q(this,t),e&&q(this,e),n)}),extendSelections:vi(function(t,e){mr(this,G(this,t),e)}),extendSelectionsBy:vi(function(t,e){mr(this,G(this,m(this.sel.ranges,t)),e)}),setSelections:vi(function(t,e,n){var i=this;if(t.length){for(var r=[],o=0;o<t.length;o++)r[o]=new Ls(q(i,t[o].anchor),q(i,t[o].head));null==e&&(e=Math.min(t.length-1,this.sel.primIndex)),wr(this,zi(this.cm,r,e),n)}}),addSelection:vi(function(t,e,n){var i=this.sel.ranges.slice(0);i.push(new Ls(q(this,t),q(this,e||t))),wr(this,zi(this.cm,i,i.length-1),n)}),getSelection:function(t){for(var e,n=this,i=this.sel.ranges,r=0;r<i.length;r++){var o=M(n,i[r].from(),i[r].to());e=e?e.concat(o):o}return!1===t?e:e.join(t||this.lineSeparator())},getSelections:function(t){for(var e=this,n=[],i=this.sel.ranges,r=0;r<i.length;r++){var o=M(e,i[r].from(),i[r].to());!1!==t&&(o=o.join(t||e.lineSeparator())),n[r]=o}return n},
+replaceSelection:function(t,e,n){for(var i=[],r=0;r<this.sel.ranges.length;r++)i[r]=t;this.replaceSelections(i,e,n||"+input")},replaceSelections:vi(function(t,e,n){for(var i=this,r=[],o=this.sel,a=0;a<o.ranges.length;a++){var s=o.ranges[a];r[a]={from:s.from(),to:s.to(),text:i.splitLines(t[a]),origin:n}}for(var l=e&&"end"!=e&&Wi(this,r,e),c=r.length-1;c>=0;c--)Pr(i,r[c]);l?xr(this,l):this.cm&&Xn(this.cm)}),undo:vi(function(){Nr(this,"undo")}),redo:vi(function(){Nr(this,"redo")}),undoSelection:vi(function(){Nr(this,"undo",!0)}),redoSelection:vi(function(){Nr(this,"redo",!0)}),setExtending:function(t){this.extend=t},getExtending:function(){return this.extend},historySize:function(){for(var t=this.history,e=0,n=0,i=0;i<t.done.length;i++)t.done[i].ranges||++e;for(var r=0;r<t.undone.length;r++)t.undone[r].ranges||++n;return{undo:e,redo:n}},clearHistory:function(){this.history=new er(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(t){return t&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(t){return this.history.generation==(t||this.cleanGeneration)},getHistory:function(){return{done:fr(this.history.done),undone:fr(this.history.undone)}},setHistory:function(t){var e=this.history=new er(this.history.maxGeneration);e.done=fr(t.done.slice(0),null,!0),e.undone=fr(t.undone.slice(0),null,!0)},setGutterMarker:vi(function(t,e,n){return Vr(this,t,"gutter",function(t){var i=t.gutterMarkers||(t.gutterMarkers={});return i[e]=n,!n&&_(i)&&(t.gutterMarkers=null),!0})}),clearGutter:vi(function(t){var e=this;this.iter(function(n){n.gutterMarkers&&n.gutterMarkers[t]&&Vr(e,n,"gutter",function(){return n.gutterMarkers[t]=null,_(n.gutterMarkers)&&(n.gutterMarkers=null),!0})})}),lineInfo:function(t){var e;if("number"==typeof t){if(!N(this,t))return null;if(e=t,!(t=A(this,t)))return null}else if(null==(e=P(t)))return null;return{line:e,handle:t,text:t.text,gutterMarkers:t.gutterMarkers,textClass:t.textClass,bgClass:t.bgClass,wrapClass:t.wrapClass,widgets:t.widgets}},addLineClass:vi(function(e,n,i){return Vr(this,e,"gutter"==n?"gutter":"class",function(e){var r="text"==n?"textClass":"background"==n?"bgClass":"gutter"==n?"gutterClass":"wrapClass";if(e[r]){if(t(i).test(e[r]))return!1;e[r]+=" "+i}else e[r]=i;return!0})}),removeLineClass:vi(function(e,n,i){return Vr(this,e,"gutter"==n?"gutter":"class",function(e){var r="text"==n?"textClass":"background"==n?"bgClass":"gutter"==n?"gutterClass":"wrapClass",o=e[r];if(!o)return!1;if(null==i)e[r]=null;else{var a=o.match(t(i));if(!a)return!1;var s=a.index+a[0].length;e[r]=o.slice(0,a.index)+(a.index&&s!=o.length?" ":"")+o.slice(s)||null}return!0})}),addLineWidget:vi(function(t,e,n){return $r(this,t,e,n)}),removeLineWidget:function(t){t.clear()},markText:function(t,e,n){return Wr(this,q(this,t),q(this,e),n,n&&n.type||"range")},setBookmark:function(t,e){var n={replacedWith:e&&(null==e.nodeType?e.widget:e),insertLeft:e&&e.insertLeft,clearWhenEmpty:!1,shared:e&&e.shared,handleMouseEvents:e&&e.handleMouseEvents};return t=q(this,t),Wr(this,t,t,n,"bookmark")},findMarksAt:function(t){t=q(this,t);var e=[],n=A(this,t.line).markedSpans;if(n)for(var i=0;i<n.length;++i){var r=n[i];(null==r.from||r.from<=t.ch)&&(null==r.to||r.to>=t.ch)&&e.push(r.marker.parent||r.marker)}return e},findMarks:function(t,e,n){t=q(this,t),e=q(this,e);var i=[],r=t.line;return this.iter(t.line,e.line+1,function(o){var a=o.markedSpans;if(a)for(var s=0;s<a.length;s++){var l=a[s];null!=l.to&&r==t.line&&t.ch>=l.to||null==l.from&&r!=t.line||null!=l.from&&r==e.line&&l.from>=e.ch||n&&!n(l.marker)||i.push(l.marker.parent||l.marker)}++r}),i},getAllMarks:function(){var t=[];return this.iter(function(e){var n=e.markedSpans;if(n)for(var i=0;i<n.length;++i)null!=n[i].from&&t.push(n[i].marker)}),t},posFromIndex:function(t){var e,n=this.first,i=this.lineSeparator().length;return this.iter(function(r){var o=r.text.length+i;if(o>t)return e=t,!0;t-=o,++n}),q(this,R(n,e))},indexFromPos:function(t){t=q(this,t);var e=t.ch;if(t.line<this.first||t.ch<0)return 0;var n=this.lineSeparator().length;return this.iter(this.first,t.line,function(t){e+=t.text.length+n}),e},copy:function(t){var e=new Is(E(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return e.scrollTop=this.scrollTop,e.scrollLeft=this.scrollLeft,e.sel=this.sel,e.extend=!1,t&&(e.history.undoDepth=this.history.undoDepth,e.setHistory(this.getHistory())),e},linkedDoc:function(t){t||(t={});var e=this.first,n=this.first+this.size;null!=t.from&&t.from>e&&(e=t.from),null!=t.to&&t.to<n&&(n=t.to);var i=new Is(E(this,e,n),t.mode||this.modeOption,e,this.lineSep,this.direction);return t.sharedHist&&(i.history=this.history),(this.linked||(this.linked=[])).push({doc:i,sharedHist:t.sharedHist}),i.linked=[{doc:this,isParent:!0,sharedHist:t.sharedHist}],Yr(i,Xr(this)),i},unlinkDoc:function(t){var e=this;if(t instanceof Xo&&(t=t.doc),this.linked)for(var n=0;n<this.linked.length;++n){var i=e.linked[n];if(i.doc==t){e.linked.splice(n,1),t.unlinkDoc(e),Qr(Xr(e));break}}if(t.history==this.history){var r=[t.id];Zi(t,function(t){return r.push(t.id)},!0),t.history=new er(null),t.history.done=fr(this.history.done,r),t.history.undone=fr(this.history.undone,r)}},iterLinkedDocs:function(t){Zi(this,t)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(t){return this.lineSep?t.split(this.lineSep):rs(t)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:vi(function(t){"rtl"!=t&&(t="ltr"),t!=this.direction&&(this.direction=t,this.iter(function(t){return t.order=null}),this.cm&&tr(this.cm))})}),Is.prototype.eachLine=Is.prototype.iter;for(var Fs=0,js=!1,Hs={3:"Pause",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",127:"Delete",145:"ScrollLock",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},zs=0;zs<10;zs++)Hs[zs+48]=Hs[zs+96]=String(zs);for(var Vs=65;Vs<=90;Vs++)Hs[Vs]=String.fromCharCode(Vs);for(var qs=1;qs<=12;qs++)Hs[qs+111]=Hs[qs+63235]="F"+qs;var Bs={};Bs.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Bs.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Bs.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Bs.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Bs.default=Pa?Bs.macDefault:Bs.pcDefault;var Gs={selectAll:Er,singleSelection:function(t){return t.setSelection(t.getCursor("anchor"),t.getCursor("head"),$a)},killLine:function(t){return fo(t,function(e){if(e.empty()){var n=A(t.doc,e.head.line).text.length;return e.head.ch==n&&e.head.line<t.lastLine()?{from:e.head,to:R(e.head.line+1,0)}:{from:e.head,to:R(e.head.line,n)}}return{from:e.from(),to:e.to()}})},deleteLine:function(t){return fo(t,function(e){return{from:R(e.from().line,0),to:q(t.doc,R(e.to().line+1,0))}})},delLineLeft:function(t){return fo(t,function(t){return{from:R(t.from().line,0),to:t.from()}})},delWrappedLineLeft:function(t){return fo(t,function(e){var n=t.charCoords(e.head,"div").top+5;return{from:t.coordsChar({left:0,top:n},"div"),to:e.from()}})},delWrappedLineRight:function(t){return fo(t,function(e){var n=t.charCoords(e.head,"div").top+5,i=t.coordsChar({left:t.display.lineDiv.offsetWidth+100,top:n},"div");return{from:e.from(),to:i}})},undo:function(t){return t.undo()},redo:function(t){return t.redo()},undoSelection:function(t){return t.undoSelection()},redoSelection:function(t){return t.redoSelection()},goDocStart:function(t){return t.extendSelection(R(t.firstLine(),0))},goDocEnd:function(t){return t.extendSelection(R(t.lastLine()))},goLineStart:function(t){return t.extendSelectionsBy(function(e){return yo(t,e.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(t){return t.extendSelectionsBy(function(e){return xo(t,e.head)},{origin:"+move",bias:1})},goLineEnd:function(t){return t.extendSelectionsBy(function(e){return bo(t,e.head.line)},{origin:"+move",bias:-1})},goLineRight:function(t){return t.extendSelectionsBy(function(e){var n=t.cursorCoords(e.head,"div").top+5;return t.coordsChar({left:t.display.lineDiv.offsetWidth+100,top:n},"div")},Ua)},goLineLeft:function(t){return t.extendSelectionsBy(function(e){var n=t.cursorCoords(e.head,"div").top+5;return t.coordsChar({left:0,top:n},"div")},Ua)},goLineLeftSmart:function(t){return t.extendSelectionsBy(function(e){var n=t.cursorCoords(e.head,"div").top+5,i=t.coordsChar({left:0,top:n},"div");return i.ch<t.getLine(i.line).search(/\S/)?xo(t,e.head):i},Ua)},goLineUp:function(t){return t.moveV(-1,"line")},goLineDown:function(t){return t.moveV(1,"line")},goPageUp:function(t){return t.moveV(-1,"page")},goPageDown:function(t){return t.moveV(1,"page")},goCharLeft:function(t){return t.moveH(-1,"char")},goCharRight:function(t){return t.moveH(1,"char")},goColumnLeft:function(t){return t.moveH(-1,"column")},goColumnRight:function(t){return t.moveH(1,"column")},goWordLeft:function(t){return t.moveH(-1,"word")},goGroupRight:function(t){return t.moveH(1,"group")},goGroupLeft:function(t){return t.moveH(-1,"group")},goWordRight:function(t){return t.moveH(1,"word")},delCharBefore:function(t){return t.deleteH(-1,"char")},delCharAfter:function(t){return t.deleteH(1,"char")},delWordBefore:function(t){return t.deleteH(-1,"word")},delWordAfter:function(t){return t.deleteH(1,"word")},delGroupBefore:function(t){return t.deleteH(-1,"group")},delGroupAfter:function(t){return t.deleteH(1,"group")},indentAuto:function(t){return t.indentSelection("smart")},indentMore:function(t){return t.indentSelection("add")},indentLess:function(t){return t.indentSelection("subtract")},insertTab:function(t){return t.replaceSelection("\t")},insertSoftTab:function(t){for(var e=[],n=t.listSelections(),i=t.options.tabSize,r=0;r<n.length;r++){var o=n[r].from(),a=h(t.getLine(o.line),o.ch,i);e.push(p(i-a%i))}t.replaceSelections(e)},defaultTab:function(t){t.somethingSelected()?t.indentSelection("add"):t.execCommand("insertTab")},transposeChars:function(t){return pi(t,function(){for(var e=t.listSelections(),n=[],i=0;i<e.length;i++)if(e[i].empty()){var r=e[i].head,o=A(t.doc,r.line).text;if(o)if(r.ch==o.length&&(r=new R(r.line,r.ch-1)),r.ch>0)r=new R(r.line,r.ch+1),t.replaceRange(o.charAt(r.ch-1)+o.charAt(r.ch-2),R(r.line,r.ch-2),r,"+transpose");else if(r.line>t.doc.first){var a=A(t.doc,r.line-1).text;a&&(r=new R(r.line,1),t.replaceRange(o.charAt(0)+t.doc.lineSeparator()+a.charAt(a.length-1),R(r.line-1,a.length-1),r,"+transpose"))}n.push(new Ls(r,r))}t.setSelections(n)})},newlineAndIndent:function(t){return pi(t,function(){for(var e=t.listSelections(),n=e.length-1;n>=0;n--)t.replaceRange(t.doc.lineSeparator(),e[n].anchor,e[n].head,"+input");e=t.listSelections();for(var i=0;i<e.length;i++)t.indentLine(e[i].from().line,null,!0);Xn(t)})},openLine:function(t){return t.replaceSelection("\n","start")},toggleOverwrite:function(t){return t.toggleOverwrite()}},$s=new za,Ws=null,Us=function(t,e,n){this.time=t,this.pos=e,this.button=n};Us.prototype.compare=function(t,e,n){return this.time+400>t&&0==I(e,this.pos)&&n==this.button};var Xs,Ys,Qs={toString:function(){return"CodeMirror.Init"}},Zs={},Ks={};Xo.defaults=Zs,Xo.optionHandlers=Ks;var Js=[];Xo.defineInitHook=function(t){return Js.push(t)};var tl=null,el=function(t){this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new za,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};el.prototype.init=function(t){function e(t){if(!Mt(r,t)){if(r.somethingSelected())Zo({lineWise:!1,text:r.getSelections()}),"cut"==t.type&&r.replaceSelection("",null,"cut");else{if(!r.options.lineWiseCopyCut)return;var e=ea(r);Zo({lineWise:!0,text:e.text}),"cut"==t.type&&r.operation(function(){r.setSelections(e.ranges,0,$a),r.replaceSelection("",null,"cut")})}if(t.clipboardData){t.clipboardData.clearData();var n=tl.text.join("\n");if(t.clipboardData.setData("Text",n),t.clipboardData.getData("Text")==n)return void t.preventDefault()}var a=ia(),s=a.firstChild;r.display.lineSpace.insertBefore(a,r.display.lineSpace.firstChild),s.value=tl.text.join("\n");var l=document.activeElement;Ha(s),setTimeout(function(){r.display.lineSpace.removeChild(a),l.focus(),l==o&&i.showPrimarySelection()},50)}}var n=this,i=this,r=i.cm,o=i.div=t.lineDiv;na(o,r.options.spellcheck,r.options.autocorrect,r.options.autocapitalize),ns(o,"paste",function(t){Mt(r,t)||Jo(t,r)||xa<=11&&setTimeout(gi(r,function(){return n.updateFromDOM()}),20)}),ns(o,"compositionstart",function(t){n.composing={data:t.data,done:!1}}),ns(o,"compositionupdate",function(t){n.composing||(n.composing={data:t.data,done:!1})}),ns(o,"compositionend",function(t){n.composing&&(t.data!=n.composing.data&&n.readFromDOMSoon(),n.composing.done=!0)}),ns(o,"touchstart",function(){return i.forceCompositionEnd()}),ns(o,"input",function(){n.composing||n.readFromDOMSoon()}),ns(o,"copy",e),ns(o,"cut",e)},el.prototype.prepareSelection=function(){var t=En(this.cm,!1);return t.focus=this.cm.state.focused,t},el.prototype.showSelection=function(t,e){t&&this.cm.display.view.length&&((t.focus||e)&&this.showPrimarySelection(),this.showMultipleSelections(t))},el.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},el.prototype.showPrimarySelection=function(){var t=this.getSelection(),e=this.cm,n=e.doc.sel.primary(),i=n.from(),r=n.to();if(e.display.viewTo==e.display.viewFrom||i.line>=e.display.viewTo||r.line<e.display.viewFrom)return void t.removeAllRanges();var o=ua(e,t.anchorNode,t.anchorOffset),a=ua(e,t.focusNode,t.focusOffset);if(!o||o.bad||!a||a.bad||0!=I(z(o,a),i)||0!=I(H(o,a),r)){var s=e.display.view,l=i.line>=e.display.viewFrom&&aa(e,i)||{node:s[0].measure.map[2],offset:0},c=r.line<e.display.viewTo&&aa(e,r);if(!c){var u=s[s.length-1].measure,h=u.maps?u.maps[u.maps.length-1]:u.map;c={node:h[h.length-1],offset:h[h.length-2]-h[h.length-3]}}if(!l||!c)return void t.removeAllRanges();var d,f=t.rangeCount&&t.getRangeAt(0);try{d=Ra(l.node,l.offset,c.offset,c.node)}catch(t){}d&&(!ga&&e.state.focused?(t.collapse(l.node,l.offset),d.collapsed||(t.removeAllRanges(),t.addRange(d))):(t.removeAllRanges(),t.addRange(d)),f&&null==t.anchorNode?t.addRange(f):ga&&this.startGracePeriod()),this.rememberSelection()}},el.prototype.startGracePeriod=function(){var t=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){t.gracePeriod=!1,t.selectionChanged()&&t.cm.operation(function(){return t.cm.curOp.selectionChanged=!0})},20)},el.prototype.showMultipleSelections=function(t){n(this.cm.display.cursorDiv,t.cursors),n(this.cm.display.selectionDiv,t.selection)},el.prototype.rememberSelection=function(){var t=this.getSelection();this.lastAnchorNode=t.anchorNode,this.lastAnchorOffset=t.anchorOffset,this.lastFocusNode=t.focusNode,this.lastFocusOffset=t.focusOffset},el.prototype.selectionInEditor=function(){var t=this.getSelection();if(!t.rangeCount)return!1;var e=t.getRangeAt(0).commonAncestorContainer;return o(this.div,e)},el.prototype.focus=function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())},el.prototype.blur=function(){this.div.blur()},el.prototype.getField=function(){return this.div},el.prototype.supportsTouch=function(){return!0},el.prototype.receivedFocus=function(){function t(){e.cm.state.focused&&(e.pollSelection(),e.polling.set(e.cm.options.pollInterval,t))}var e=this;this.selectionInEditor()?this.pollSelection():pi(this.cm,function(){return e.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,t)},el.prototype.selectionChanged=function(){var t=this.getSelection();return t.anchorNode!=this.lastAnchorNode||t.anchorOffset!=this.lastAnchorOffset||t.focusNode!=this.lastFocusNode||t.focusOffset!=this.lastFocusOffset},el.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var t=this.getSelection(),e=this.cm;if(Ea&&Sa&&this.cm.options.gutters.length&&sa(t.anchorNode))return this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var n=ua(e,t.anchorNode,t.anchorOffset),i=ua(e,t.focusNode,t.focusOffset);n&&i&&pi(e,function(){wr(e.doc,Vi(n,i),$a),(n.bad||i.bad)&&(e.curOp.selectionChanged=!0)})}}},el.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var t=this.cm,e=t.display,n=t.doc.sel.primary(),i=n.from(),r=n.to();if(0==i.ch&&i.line>t.firstLine()&&(i=R(i.line-1,A(t.doc,i.line-1).length)),r.ch==A(t.doc,r.line).text.length&&r.line<t.lastLine()&&(r=R(r.line+1,0)),i.line<e.viewFrom||r.line>e.viewTo-1)return!1;var o,a,s;i.line==e.viewFrom||0==(o=An(t,i.line))?(a=P(e.view[0].line),s=e.view[0].node):(a=P(e.view[o].line),s=e.view[o-1].node.nextSibling);var l,c,u=An(t,r.line);if(u==e.view.length-1?(l=e.viewTo-1,c=e.lineDiv.lastChild):(l=P(e.view[u+1].line)-1,c=e.view[u+1].node.previousSibling),!s)return!1;for(var h=t.doc.splitLines(ca(t,s,c,a,l)),d=M(t.doc,R(a,0),R(l,A(t.doc,l).text.length));h.length>1&&d.length>1;)if(g(h)==g(d))h.pop(),d.pop(),l--;else{if(h[0]!=d[0])break;h.shift(),d.shift(),a++}for(var f=0,p=0,m=h[0],v=d[0],y=Math.min(m.length,v.length);f<y&&m.charCodeAt(f)==v.charCodeAt(f);)++f;for(var b=g(h),x=g(d),w=Math.min(b.length-(1==h.length?f:0),x.length-(1==d.length?f:0));p<w&&b.charCodeAt(b.length-p-1)==x.charCodeAt(x.length-p-1);)++p;if(1==h.length&&1==d.length&&a==i.line)for(;f&&f>i.ch&&b.charCodeAt(b.length-p-1)==x.charCodeAt(x.length-p-1);)f--,p++;h[h.length-1]=b.slice(0,b.length-p).replace(/^\u200b+/,""),h[0]=h[0].slice(f).replace(/\u200b+$/,"");var _=R(a,f),S=R(l,d.length?g(d).length-p:0);return h.length>1||h[0]||I(_,S)?(Fr(t.doc,h,_,S,"+input"),!0):void 0},el.prototype.ensurePolled=function(){this.forceCompositionEnd()},el.prototype.reset=function(){this.forceCompositionEnd()},el.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},el.prototype.readFromDOMSoon=function(){var t=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(t.readDOMTimeout=null,t.composing){if(!t.composing.done)return;t.composing=null}t.updateFromDOM()},80))},el.prototype.updateFromDOM=function(){var t=this;!this.cm.isReadOnly()&&this.pollContent()||pi(this.cm,function(){return yi(t.cm)})},el.prototype.setUneditable=function(t){t.contentEditable="false"},el.prototype.onKeyPress=function(t){0==t.charCode||this.composing||(t.preventDefault(),this.cm.isReadOnly()||gi(this.cm,Ko)(this.cm,String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),0))},el.prototype.readOnlyChanged=function(t){this.div.contentEditable=String("nocursor"!=t)},el.prototype.onContextMenu=function(){},el.prototype.resetPosition=function(){},el.prototype.needsContentAttribute=!0;var nl=function(t){this.cm=t,this.prevInput="",this.pollingFast=!1,this.polling=new za,this.hasSelection=!1,this.composing=null};nl.prototype.init=function(t){function e(t){if(!Mt(r,t)){if(r.somethingSelected())Zo({lineWise:!1,text:r.getSelections()});else{if(!r.options.lineWiseCopyCut)return;var e=ea(r);Zo({lineWise:!0,text:e.text}),"cut"==t.type?r.setSelections(e.ranges,null,$a):(i.prevInput="",o.value=e.text.join("\n"),Ha(o))}"cut"==t.type&&(r.state.cutIncoming=+new Date)}}var n=this,i=this,r=this.cm;this.createField(t);var o=this.textarea;t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),Ma&&(o.style.width="0px"),ns(o,"input",function(){ba&&xa>=9&&n.hasSelection&&(n.hasSelection=null),i.poll()}),ns(o,"paste",function(t){Mt(r,t)||Jo(t,r)||(r.state.pasteIncoming=+new Date,i.fastPoll())}),ns(o,"cut",e),ns(o,"copy",e),ns(t.scroller,"paste",function(e){if(!Ie(t,e)&&!Mt(r,e)){if(!o.dispatchEvent)return r.state.pasteIncoming=+new Date,void i.focus();var n=new Event("paste");n.clipboardData=e.clipboardData,o.dispatchEvent(n)}}),ns(t.lineSpace,"selectstart",function(e){Ie(t,e)||Dt(e)}),ns(o,"compositionstart",function(){var t=r.getCursor("from");i.composing&&i.composing.range.clear(),i.composing={start:t,range:r.markText(t,r.getCursor("to"),{className:"CodeMirror-composing"})}}),ns(o,"compositionend",function(){i.composing&&(i.poll(),i.composing.range.clear(),i.composing=null)})},nl.prototype.createField=function(t){this.wrapper=ia(),this.textarea=this.wrapper.firstChild},nl.prototype.prepareSelection=function(){var t=this.cm,e=t.display,n=t.doc,i=En(t);if(t.options.moveInputWithCursor){var r=un(t,n.sel.primary().head,"div"),o=e.wrapper.getBoundingClientRect(),a=e.lineDiv.getBoundingClientRect();i.teTop=Math.max(0,Math.min(e.wrapper.clientHeight-10,r.top+a.top-o.top)),i.teLeft=Math.max(0,Math.min(e.wrapper.clientWidth-10,r.left+a.left-o.left))}return i},nl.prototype.showSelection=function(t){var e=this.cm,i=e.display;n(i.cursorDiv,t.cursors),n(i.selectionDiv,t.selection),null!=t.teTop&&(this.wrapper.style.top=t.teTop+"px",this.wrapper.style.left=t.teLeft+"px")},nl.prototype.reset=function(t){if(!this.contextMenuPending&&!this.composing){var e=this.cm;if(e.somethingSelected()){this.prevInput="";var n=e.getSelection();this.textarea.value=n,e.state.focused&&Ha(this.textarea),ba&&xa>=9&&(this.hasSelection=n)}else t||(this.prevInput=this.textarea.value="",ba&&xa>=9&&(this.hasSelection=null))}},nl.prototype.getField=function(){return this.textarea},nl.prototype.supportsTouch=function(){return!1},nl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!La||a()!=this.textarea))try{this.textarea.focus()}catch(t){}},nl.prototype.blur=function(){this.textarea.blur()},nl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},nl.prototype.receivedFocus=function(){this.slowPoll()},nl.prototype.slowPoll=function(){var t=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){t.poll(),t.cm.state.focused&&t.slowPoll()})},nl.prototype.fastPoll=function(){function t(){n.poll()||e?(n.pollingFast=!1,n.slowPoll()):(e=!0,n.polling.set(60,t))}var e=!1,n=this;n.pollingFast=!0,n.polling.set(20,t)},nl.prototype.poll=function(){var t=this,e=this.cm,n=this.textarea,i=this.prevInput;if(this.contextMenuPending||!e.state.focused||os(n)&&!i&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=n.value;if(r==i&&!e.somethingSelected())return!1;if(ba&&xa>=9&&this.hasSelection===r||Pa&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var o=r.charCodeAt(0);if(8203!=o||i||(i="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var a=0,s=Math.min(i.length,r.length);a<s&&i.charCodeAt(a)==r.charCodeAt(a);)++a;return pi(e,function(){Ko(e,r.slice(a),i.length-a,null,t.composing?"*compose":null),r.length>1e3||r.indexOf("\n")>-1?n.value=t.prevInput="":t.prevInput=r,t.composing&&(t.composing.range.clear(),t.composing.range=e.markText(t.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},nl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},nl.prototype.onKeyPress=function(){ba&&xa>=9&&(this.hasSelection=null),this.fastPoll()},nl.prototype.onContextMenu=function(t){function e(){if(null!=a.selectionStart){var t=r.somethingSelected(),e="​"+(t?a.value:"");a.value="⇚",a.value=e,i.prevInput=t?"":"​",a.selectionStart=1,a.selectionEnd=e.length,o.selForContextMenu=r.doc.sel}}function n(){if(i.contextMenuPending==n&&(i.contextMenuPending=!1,i.wrapper.style.cssText=u,a.style.cssText=c,ba&&xa<9&&o.scrollbars.setScrollTop(o.scroller.scrollTop=l),null!=a.selectionStart)){(!ba||ba&&xa<9)&&e();var t=0,s=function(){o.selForContextMenu==r.doc.sel&&0==a.selectionStart&&a.selectionEnd>0&&"​"==i.prevInput?gi(r,Er)(r):t++<10?o.detectingSelectAll=setTimeout(s,500):(o.selForContextMenu=null,o.input.reset())};o.detectingSelectAll=setTimeout(s,200)}}var i=this,r=i.cm,o=r.display,a=i.textarea;i.contextMenuPending&&i.contextMenuPending();var s=kn(r,t),l=o.scroller.scrollTop;if(s&&!Ca){r.options.resetSelectionOnContextMenu&&-1==r.doc.sel.contains(s)&&gi(r,wr)(r.doc,Vi(s),$a);var c=a.style.cssText,u=i.wrapper.style.cssText,h=i.wrapper.offsetParent.getBoundingClientRect();i.wrapper.style.cssText="position: static",a.style.cssText="position: absolute; width: 30px; height: 30px;\n      top: "+(t.clientY-h.top-5)+"px; left: "+(t.clientX-h.left-5)+"px;\n      z-index: 1000; background: "+(ba?"rgba(255, 255, 255, .05)":"transparent")+";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var d;if(wa&&(d=window.scrollY),o.input.focus(),wa&&window.scrollTo(null,d),o.input.reset(),r.somethingSelected()||(a.value=i.prevInput=" "),i.contextMenuPending=n,o.selForContextMenu=r.doc.sel,clearTimeout(o.detectingSelectAll),ba&&xa>=9&&e(),Fa){Rt(t);var f=function(){kt(window,"mouseup",f),setTimeout(n,20)};ns(window,"mouseup",f)}else setTimeout(n,50)}},nl.prototype.readOnlyChanged=function(t){t||this.reset(),this.textarea.disabled="nocursor"==t},nl.prototype.setUneditable=function(){},nl.prototype.needsContentAttribute=!1,function(t){function e(e,i,r,o){t.defaults[e]=i,r&&(n[e]=o?function(t,e,n){n!=Qs&&r(t,e,n)}:r)}var n=t.optionHandlers;t.defineOption=e,t.Init=Qs,e("value","",function(t,e){return t.setValue(e)},!0),e("mode",null,function(t,e){t.doc.modeOption=e,Ui(t)},!0),e("indentUnit",2,Ui,!0),e("indentWithTabs",!1),e("smartIndent",!0),e("tabSize",4,function(t){Xi(t),nn(t),yi(t)},!0),e("lineSeparator",null,function(t,e){if(t.doc.lineSep=e,e){var n=[],i=t.doc.first;t.doc.iter(function(t){for(var r=0;;){var o=t.text.indexOf(e,r);if(-1==o)break;r=o+e.length,n.push(R(i,o))}i++});for(var r=n.length-1;r>=0;r--)Fr(t.doc,e,n[r],R(n[r].line,n[r].ch+e.length))}}),e("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(t,e,n){t.state.specialChars=new RegExp(e.source+(e.test("\t")?"":"|\t"),"g"),n!=Qs&&t.refresh()}),e("specialCharPlaceholder",ue,function(t){return t.refresh()},!0),e("electricChars",!0),e("inputStyle",La?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),e("spellcheck",!1,function(t,e){return t.getInputField().spellcheck=e},!0),e("autocorrect",!1,function(t,e){return t.getInputField().autocorrect=e},!0),e("autocapitalize",!1,function(t,e){return t.getInputField().autocapitalize=e},!0),e("rtlMoveVisually",!Na),e("wholeLineUpdateBefore",!0),e("theme","default",function(t){Go(t),$o(t)},!0),e("keyMap","default",function(t,e,n){var i=ho(e),r=n!=Qs&&ho(n);r&&r.detach&&r.detach(t,i),i.attach&&i.attach(t,r||null)}),e("extraKeys",null),e("configureMouse",null),e("lineWrapping",!1,Uo,!0),e("gutters",[],function(t){Ii(t.options),$o(t)},!0),e("fixedGutter",!0,function(t,e){t.display.gutters.style.left=e?Sn(t.display)+"px":"0",t.refresh()},!0),e("coverGutterNextToScrollbar",!1,function(t){return ii(t)},!0),e("scrollbarStyle","native",function(t){oi(t),ii(t),t.display.scrollbars.setScrollTop(t.doc.scrollTop),t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)},!0),e("lineNumbers",!1,function(t){Ii(t.options),$o(t)},!0),e("firstLineNumber",1,$o,!0),e("lineNumberFormatter",function(t){return t},$o,!0),e("showCursorWhenSelecting",!1,Mn,!0),e("resetSelectionOnContextMenu",!0),e("lineWiseCopyCut",!0),e("pasteLinesPerSelection",!0),e("selectionsMayTouch",!1),e("readOnly",!1,function(t,e){"nocursor"==e&&(Fn(t),t.display.input.blur()),t.display.input.readOnlyChanged(e)}),e("disableInput",!1,function(t,e){e||t.display.input.reset()},!0),e("dragDrop",!0,Wo),e("allowDropFileTypes",null),e("cursorBlinkRate",530),e("cursorScrollMargin",0),e("cursorHeight",1,Mn,!0),e("singleCursorHeightPerLine",!0,Mn,!0),e("workTime",100),e("workDelay",100),e("flattenSpans",!0,Xi,!0),e("addModeClass",!1,Xi,!0),e("pollInterval",100),e("undoDepth",200,function(t,e){return t.doc.history.undoDepth=e}),e("historyEventDelay",1250),e("viewportMargin",10,function(t){return t.refresh()},!0),e("maxHighlightLength",1e4,Xi,!0),e("moveInputWithCursor",!0,function(t,e){e||t.display.input.resetPosition()}),e("tabindex",null,function(t,e){return t.display.input.getField().tabIndex=e||""}),e("autofocus",null),e("direction","ltr",function(t,e){return t.doc.setDirection(e)},!0),e("phrases",null)}(Xo),function(t){var e=t.optionHandlers,n=t.helpers={};t.prototype={constructor:t,focus:function(){window.focus(),this.display.input.focus()},setOption:function(t,n){var i=this.options,r=i[t];i[t]==n&&"mode"!=t||(i[t]=n,e.hasOwnProperty(t)&&gi(this,e[t])(this,n,r),At(this,"optionChange",this,t))},getOption:function(t){return this.options[t]},getDoc:function(){return this.doc},addKeyMap:function(t,e){this.state.keyMaps[e?"push":"unshift"](ho(t))},removeKeyMap:function(t){for(var e=this.state.keyMaps,n=0;n<e.length;++n)if(e[n]==t||e[n].name==t)return e.splice(n,1),!0},addOverlay:mi(function(e,n){var i=e.token?e:t.getMode(this.options,e);if(i.startState)throw new Error("Overlays may not be stateful.");v(this.state.overlays,{mode:i,modeSpec:e,opaque:n&&n.opaque,priority:n&&n.priority||0},function(t){return t.priority}),this.state.modeGen++,yi(this)}),removeOverlay:mi(function(t){for(var e=this,n=this.state.overlays,i=0;i<n.length;++i){var r=n[i].modeSpec;if(r==t||"string"==typeof t&&r.name==t)return n.splice(i,1),e.state.modeGen++,void yi(e)}}),indentLine:mi(function(t,e,n){"string"!=typeof e&&"number"!=typeof e&&(e=null==e?this.options.smartIndent?"smart":"prev":e?"add":"subtract"),N(this.doc,t)&&Qo(this,t,e,n)}),
+indentSelection:mi(function(t){for(var e=this,n=this.doc.sel.ranges,i=-1,r=0;r<n.length;r++){var o=n[r];if(o.empty())o.head.line>i&&(Qo(e,o.head.line,t,!0),i=o.head.line,r==e.doc.sel.primIndex&&Xn(e));else{var a=o.from(),s=o.to(),l=Math.max(i,a.line);i=Math.min(e.lastLine(),s.line-(s.ch?0:1))+1;for(var c=l;c<i;++c)Qo(e,c,t);var u=e.doc.sel.ranges;0==a.ch&&n.length==u.length&&u[r].from().ch>0&&vr(e.doc,r,new Ls(a,u[r].to()),$a)}}}),getTokenAt:function(t,e){return ee(this,t,e)},getLineTokens:function(t,e){return ee(this,R(t),e,!0)},getTokenTypeAt:function(t){t=q(this.doc,t);var e,n=Qt(this,A(this.doc,t.line)),i=0,r=(n.length-1)/2,o=t.ch;if(0==o)e=n[2];else for(;;){var a=i+r>>1;if((a?n[2*a-1]:0)>=o)r=a;else{if(!(n[2*a+1]<o)){e=n[2*a+2];break}i=a+1}}var s=e?e.indexOf("overlay "):-1;return s<0?e:0==s?null:e.slice(0,s-1)},getModeAt:function(e){var n=this.doc.mode;return n.innerMode?t.innerMode(n,this.getTokenAt(e).state).mode:n},getHelper:function(t,e){return this.getHelpers(t,e)[0]},getHelpers:function(t,e){var i=this,r=[];if(!n.hasOwnProperty(e))return r;var o=n[e],a=this.getModeAt(t);if("string"==typeof a[e])o[a[e]]&&r.push(o[a[e]]);else if(a[e])for(var s=0;s<a[e].length;s++){var l=o[a[e][s]];l&&r.push(l)}else a.helperType&&o[a.helperType]?r.push(o[a.helperType]):o[a.name]&&r.push(o[a.name]);for(var c=0;c<o._global.length;c++){var u=o._global[c];u.pred(a,i)&&-1==d(r,u.val)&&r.push(u.val)}return r},getStateAfter:function(t,e){var n=this.doc;return t=V(n,null==t?n.first+n.size-1:t),Zt(this,t+1,e).state},cursorCoords:function(t,e){var n,i=this.doc.sel.primary();return n=null==t?i.head:"object"==typeof t?q(this.doc,t):t?i.from():i.to(),un(this,n,e||"page")},charCoords:function(t,e){return cn(this,q(this.doc,t),e||"page")},coordsChar:function(t,e){return t=ln(this,t,e||"page"),fn(this,t.left,t.top)},lineAtHeight:function(t,e){return t=ln(this,{top:t,left:0},e||"page").top,D(this.doc,t+this.display.viewOffset)},heightAtLine:function(t,e,n){var i,r=!1;if("number"==typeof t){var o=this.doc.first+this.doc.size-1;t<this.doc.first?t=this.doc.first:t>o&&(t=o,r=!0),i=A(this.doc,t)}else i=t;return sn(this,i,{top:0,left:0},e||"page",n||r).top+(r?this.doc.height-bt(i):0)},defaultTextHeight:function(){return xn(this.display)},defaultCharWidth:function(){return wn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(t,e,n,i,r){var o=this.display;t=un(this,q(this.doc,t));var a=t.bottom,s=t.left;if(e.style.position="absolute",e.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(e),o.sizer.appendChild(e),"over"==i)a=t.top;else if("above"==i||"near"==i){var l=Math.max(o.wrapper.clientHeight,this.doc.height),c=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==i||t.bottom+e.offsetHeight>l)&&t.top>e.offsetHeight?a=t.top-e.offsetHeight:t.bottom+e.offsetHeight<=l&&(a=t.bottom),s+e.offsetWidth>c&&(s=c-e.offsetWidth)}e.style.top=a+"px",e.style.left=e.style.right="","right"==r?(s=o.sizer.clientWidth-e.offsetWidth,e.style.right="0px"):("left"==r?s=0:"middle"==r&&(s=(o.sizer.clientWidth-e.offsetWidth)/2),e.style.left=s+"px"),n&&$n(this,{left:s,top:a,right:s+e.offsetWidth,bottom:a+e.offsetHeight})},triggerOnKeyDown:mi(Ao),triggerOnKeyPress:mi(Lo),triggerOnKeyUp:Eo,triggerOnMouseDown:mi(Do),execCommand:function(t){if(Gs.hasOwnProperty(t))return Gs[t].call(null,this)},triggerElectric:mi(function(t){ta(this,t)}),findPosH:function(t,e,n,i){var r=this,o=1;e<0&&(o=-1,e=-e);for(var a=q(this.doc,t),s=0;s<e&&(a=ra(r.doc,a,o,n,i),!a.hitSide);++s);return a},moveH:mi(function(t,e){var n=this;this.extendSelectionsBy(function(i){return n.display.shift||n.doc.extend||i.empty()?ra(n.doc,i.head,t,e,n.options.rtlMoveVisually):t<0?i.from():i.to()},Ua)}),deleteH:mi(function(t,e){var n=this.doc.sel,i=this.doc;n.somethingSelected()?i.replaceSelection("",null,"+delete"):fo(this,function(n){var r=ra(i,n.head,t,e,!1);return t<0?{from:r,to:n.head}:{from:n.head,to:r}})}),findPosV:function(t,e,n,i){var r=this,o=1,a=i;e<0&&(o=-1,e=-e);for(var s=q(this.doc,t),l=0;l<e;++l){var c=un(r,s,"div");if(null==a?a=c.left:c.left=a,s=oa(r,c,o,n),s.hitSide)break}return s},moveV:mi(function(t,e){var n=this,i=this.doc,r=[],o=!this.display.shift&&!i.extend&&i.sel.somethingSelected();if(i.extendSelectionsBy(function(a){if(o)return t<0?a.from():a.to();var s=un(n,a.head,"div");null!=a.goalColumn&&(s.left=a.goalColumn),r.push(s.left);var l=oa(n,s,t,e);return"page"==e&&a==i.sel.primary()&&Un(n,cn(n,l,"div").top-s.top),l},Ua),r.length)for(var a=0;a<i.sel.ranges.length;a++)i.sel.ranges[a].goalColumn=r[a]}),findWordAt:function(t){var e=this.doc,n=A(e,t.line).text,i=t.ch,r=t.ch;if(n){var o=this.getHelper(t,"wordChars");"before"!=t.sticky&&r!=n.length||!i?++r:--i;for(var a=n.charAt(i),s=w(a,o)?function(t){return w(t,o)}:/\s/.test(a)?function(t){return/\s/.test(t)}:function(t){return!/\s/.test(t)&&!w(t)};i>0&&s(n.charAt(i-1));)--i;for(;r<n.length&&s(n.charAt(r));)++r}return new Ls(R(t.line,i),R(t.line,r))},toggleOverwrite:function(t){null!=t&&t==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?s(this.display.cursorDiv,"CodeMirror-overwrite"):ja(this.display.cursorDiv,"CodeMirror-overwrite"),At(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==a()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:mi(function(t,e){Yn(this,t,e)}),getScrollInfo:function(){var t=this.display.scroller;return{left:t.scrollLeft,top:t.scrollTop,height:t.scrollHeight-ze(this)-this.display.barHeight,width:t.scrollWidth-ze(this)-this.display.barWidth,clientHeight:qe(this),clientWidth:Ve(this)}},scrollIntoView:mi(function(t,e){null==t?(t={from:this.doc.sel.primary().head,to:null},null==e&&(e=this.options.cursorScrollMargin)):"number"==typeof t?t={from:R(t,0),to:null}:null==t.from&&(t={from:t,to:null}),t.to||(t.to=t.from),t.margin=e||0,null!=t.from.line?Qn(this,t):Kn(this,t.from,t.to,t.margin)}),setSize:mi(function(t,e){var n=this,i=function(t){return"number"==typeof t||/^\d+$/.test(String(t))?t+"px":t};null!=t&&(this.display.wrapper.style.width=i(t)),null!=e&&(this.display.wrapper.style.height=i(e)),this.options.lineWrapping&&en(this);var r=this.display.viewFrom;this.doc.iter(r,this.display.viewTo,function(t){if(t.widgets)for(var e=0;e<t.widgets.length;e++)if(t.widgets[e].noHScroll){bi(n,r,"widget");break}++r}),this.curOp.forceUpdate=!0,At(this,"refresh",this)}),operation:function(t){return pi(this,t)},startOperation:function(){return ai(this)},endOperation:function(){return si(this)},refresh:mi(function(){var t=this.display.cachedTextHeight;yi(this),this.curOp.forceUpdate=!0,nn(this),Yn(this,this.doc.scrollLeft,this.doc.scrollTop),Ni(this),(null==t||Math.abs(t-xn(this.display))>.5)&&Tn(this),At(this,"refresh",this)}),swapDoc:mi(function(t){var e=this.doc;return e.cm=null,Ki(this,t),nn(this),this.display.input.reset(),Yn(this,t.scrollLeft,t.scrollTop),this.curOp.forceScroll=!0,we(this,"swapDoc",this,e),e}),phrase:function(t){var e=this.options.phrases;return e&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:t},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Pt(t),t.registerHelper=function(e,i,r){n.hasOwnProperty(e)||(n[e]=t[e]={_global:[]}),n[e][i]=r},t.registerGlobalHelper=function(e,i,r,o){t.registerHelper(e,i,o),n[e]._global.push({pred:r,val:o})}}(Xo);var il="iter insert remove copy getEditor constructor".split(" ");for(var rl in Is.prototype)Is.prototype.hasOwnProperty(rl)&&d(il,rl)<0&&(Xo.prototype[rl]=function(t){return function(){return t.apply(this.doc,arguments)}}(Is.prototype[rl]));return Pt(Is),Xo.inputStyles={textarea:nl,contenteditable:el},Xo.defineMode=function(t){Xo.defaults.mode||"null"==t||(Xo.defaults.mode=t),Vt.apply(this,arguments)},Xo.defineMIME=qt,Xo.defineMode("null",function(){return{token:function(t){return t.skipToEnd()}}}),Xo.defineMIME("text/plain","null"),Xo.defineExtension=function(t,e){Xo.prototype[t]=e},Xo.defineDocExtension=function(t,e){Is.prototype[t]=e},Xo.fromTextArea=da,function(t){t.off=kt,t.on=ns,t.wheelEventPixels=ji,t.Doc=Is,t.splitLines=rs,t.countColumn=h,t.findColumn=f,t.isWordChar=x,t.Pass=Ga,t.signal=At,t.Line=gs,t.changeEnd=qi,t.scrollbarModel=Cs,t.Pos=R,t.cmpPos=I,t.modes=ls,t.mimeModes=cs,t.resolveMode=Bt,t.getMode=Gt,t.modeExtensions=us,t.extendMode=$t,t.copyState=Wt,t.startState=Xt,t.innerMode=Ut,t.commands=Gs,t.keyMap=Bs,t.keyName=uo,t.isModifierKey=lo,t.lookupKey=so,t.normalizeKeyMap=ao,t.StringStream=hs,t.SharedTextMarker=Os,t.TextMarker=Ns,t.LineWidget=Ps,t.e_preventDefault=Dt,t.e_stopPropagation=Nt,t.e_stop=Rt,t.addClass=s,t.contains=o,t.rmClass=ja,t.keyNames=Hs}(Xo),Xo.version="5.44.0",Xo}),define("chatroom",["jquery","form","cm/lib/codemirror","utils","config","modal","links","chat","laconic"],function(t,e,n,i,r,o,a,s){!function(t){function l(e,i){var r=t.el.pre({class:"cm-s-prolog"});n.runMode(i,"prolog",r),e.attr("title",t.el.div(r).innerHTML),e.data("html",!0),e.data("placement","bottom"),e.data("trigger","hover"),e.tooltip()}function c(t,n,i){return e.widgets.glyphIconButton(t,{class:"btn-xs "+n,title:i})}function u(t){for(var e=[{regex:/[a-z][a-zA-Z0-9_]*\/[0-9]/g,func:function(t){return'<a class="builtin" href="/pldoc/man?predicate='+t+'">'+t+"</a>"}},{regex:/[a-zA-Z0-9_-]+\.(pl|swinb)\b/g,func:function(t){return'<a class="builtin" href="'+r.http.locations.web_storage+t+'">'+t+"</a>"}},{regex:/`(.)`/g,func:function(t,e){return"<code>"+e+"</code>"}},{regex:/`([\w\[\{\(][^`]*[\w\]\}\)])`/g,func:function(t,e){return"<code>"+e+"</code>"}},{delim:"\\*",a:"\\*\\b",z:"\\b\\*",tag:"b"},{delim:"__",a:"\\b__",z:"__\\b",tag:"b"},{delim:"_",a:"\\b_",z:"_\\b",tag:"i"}],n=0;n<e.length;n++){var i=e[n];i.regex?t=t.replace(i.regex,i.func):i.delim&&(t=t.replace(RegExp(i.a+"([^"+i.delim+"]+)"+i.z,"g"),function(t){return function(e,n){return"<"+t+">"+n+"</"+t+">"}}(i.tag)))}return t}var h=0,d={_init:function(n){return this.each(function(){var i,s,l,c,u=t(this),d={messages:[]},f="gitty:"+r.swish.hangout;d.docid=n.docid,u.data("chatroom",d),u.addClass("chatroom each-minute swish-event-receiver"),i=t.el.div({class:"btn-group dropup"},s=t.el.button({type:"button",class:"btn btn-primary btn-xs"},"Send"),t.el.button({type:"button",class:"btn btn-info btn-xs dropdown-toggle","data-toggle":"dropdown","aria-haspopup":!0,"aria-expanded":!1},t.el.span({class:"caret"})),ul=t.el.ul({class:"dropdown-menu pull-right"})),c=t.el.textarea({placeholder:"Type chat message here ..."}),u.append(t.el.div({class:"chat-conversation"},t.el.div({class:"chat-outer-wrapper"},t.el.div({class:"chat-inner-wrapper"},t.el.div({class:"chat-content-wrapper"},t.el.div({class:"chat-stretch"}),t.el.div({class:"chat-content"}))))),l=t.el.span({class:"glyphicon menu glyphicon-remove-circle"}),t.el.div({class:"chat-input"},t.el.table({class:"chat-input"},t.el.tr(t.el.td({class:"chat-text"},c),t.el.td({class:"chat-send"},i))))),t(s).on("click",function(){u.chatroom("send")}),e.widgets.populateMenu(t(i),u,{"Include my query":function(){var e=t(".prolog-query-editor").queryEditor("getQuery");""!=e.trim()?this.chatroom("send",{payload:[{type:"query",query:e}]}):o.alert("Your query editor is empty")}}),n.docid!=f&&e.widgets.populateMenu(t(i),u,{"Broadcast to hangout":function(){this.chatroom("send",{broadcast:"gitty:"+r.swish.hangout})}}),t(l).on("click",function(){u.tile("close")}),n.oneline?t(c).keypress(function(t){if(13==t.which)return u.chatroom("send"),t.preventDefault(),!1}):t(c).on("keyup",function(){var e,n=t(this);0!=n.scrollTop()&&(e=n.height())<500&&(e+=parseFloat(n.css("line-height")),n.animate({height:e},200,function(){u.chatroom("scrollToBottom")}))}),n.docid==f&&t(c).focus(function(){if(""==t(c).val()){var e=(new Date).getTime();e-h>3e5&&(h=e,o.help({file:"hangout.html",notagain:"hangout"}))}}),u.on("click",".chat-message button",function(e){var n,i=t(e.target).closest("button");return(n=i.data("commit"))?u.closest(".swish").swish("playFile",n):(n=i.data("diff"))&&u.chatroom("diff",n),e.preventDefault(),!1}),u.on("click",".chat-content a",a.followLink),u.on("pane.resize",function(){u.chatroom("scrollToBottom",!0)}),u.on("minute",function(){u.chatroom("update_time")}),u.on("activate-tab",function(){u.chatroom("read_until")}),t(c).height(parseFloat(t(c).css("line-height"))+5),u.chatroom("load_from_server")})},close:function(){return this.tile("close")},send:function(e){e=e||{};var n=this.data("chatroom"),a={type:"chat-message"},s=this.find("textarea");a.text=s.val().trim();var l=e.payload||[],c=!1,u=this.chatroom("storage").storage("getSelection"),h="gitty:"+r.swish.hangout;u&&l.push({type:"selection",selection:u});for(var d=0;d<l.length;d++)if("about"!=l[d].type){c=!0;break}e.broadcast||n.docid==h||0!=n.messages.length||(e.broadcast=h),""!=a.text||c?(a.uuid=i.generateUUID(),a.payload=l,a.docid=e.docid||n.docid,e.class&&(a.class=e.class),1==e.clear?this.chatroom("clear"):n.clear=a.uuid,t("#chat").chat("send",a),e.broadcast&&(a.payload.unshift({type:"about",docid:n.docid}),a.docid=e.broadcast,t("#chat").chat("send",a))):e.payload||o.alert("No message to send")},storage:function(){return this.closest(".tab-pane").find(".storage")},is_self:function(e){var n=e.user||{},i=r.swish.user||{},o=t("#chat").chat("self");return n.id&&n.id==o.id||n.avatar&&n.avatar==o.avatar||n.profile_id&&n.profile_id==i.profile_id},read_until:function(e){var n;void 0==e&&(n=this.data("chatroom"))&&n.messages.length>0&&(e=n.messages[n.messages.length-1]),e&&(t("#chat").chat("read_until",e.docid,e.time),t(".chat-bell").chatbell("read_until",e.docid,e.time))},render:function(e){var n=e.user||{};r.swish.user;if(void 0===e.is_self&&(e.is_self=this.chatroom("is_self",e)),elem=t(t.el.div({class:"chat-message"+(e.is_self?" self":""),"data-userid":n.wsid})),!e.is_self&&n.avatar&&elem.append(s.avatar(n)),elem.append(t.el.span({class:"chat-sender"},e.is_self?"Me":n.name)),e.time){var o=new Date(1e3*e.time).toLocaleString();elem.append(t.el.span({class:"chat-time",title:o},"(",i.ago(e.time),") ")),elem.data("time",e.time)}if(e.payload)for(var a=0;a<e.payload.length;a++){var l=e.payload[a];f[l.type]?f[l.type].call(elem,l):console.log(l)}var c;if(e.html?c=e.html:e.text&&(c=t(t.el.span(e.text)).html(),c=u(c)),c){var h=t.el.span({class:"chat-message html"});t(h).html(c),elem.append(h)}return elem},add:function(t,e){var n=this.data("chatroom");if(t.docid==n.docid){var i;void 0==e&&(e=this.is(":visible")),void 0==t.is_self&&(t.is_self=this.chatroom("is_self",t)),n.messages.push(t),i=this.chatroom("render",t),this.find(".chat-content").append(i),this.chatroom("scrollToBottom"),e&&this.chatroom("read_until",t)}return t.uuid&&t.uuid==n.clear&&this.chatroom("clear"),this},clear:function(){var t=this.find("textarea");t.val(""),t.height(parseFloat(t.css("line-height")+5))},load_from_server:function(e){var n=this.data("chatroom"),i=t(this);return t.get(r.http.locations.chat_messages,{docid:n.docid},function(t){if(0==t.length)e?i.chatroom("close"):n.docid!="gitty:"+r.swish.hangout&&o.help({file:"newchat.html",notagain:"newchat"});else for(var a=0;a<t.length;a++)i.chatroom("add",t[a],a==t.length-1)}).fail(function(t,e,n){o.ajaxError(t)}),this},update_time:function(){return this.find(".chat-message").each(function(){var e,n=t(this);(e=n.data("time"))&&n.find(".chat-time").text("("+i.ago(e)+") ")})},diff:function(n){function i(t){o.ajaxError(t)}t.ajax({url:r.http.locations.web_storage+n.from,data:{format:"raw"},success:function(o){t.ajax({url:r.http.locations.web_storage+n.to,data:{format:"raw"},success:function(i){function r(){var e=t.el.div();this.append(e),t(e).diff({base:o,head:i,baseName:n.name+" (before)",headName:n.name+" (after)"}),this.parents("div.modal-dialog").addClass("modal-wide")}e.showDialog({title:"Update differences",body:r})},error:i})},error:i})},docid:function(t,e){var n=this.data("chatroom");n.docid!=t&&(this.find(".chat-content").html(""),n.docid=t,this.chatroom("load_from_server",e))},rooms:function(e){var n=[];return this.each(function(){t(this).data("chatroom").docid==e&&n.push(this)}),t(n)},scrollToBottom:function(e){return this.each(function(){var n=t(this);scroll=n.find("div.chat-inner-wrapper"),wrap=scroll.find("div.chat-content-wrapper"),content=wrap.find("div.chat-content");var i=content[0].scrollHeight,r=wrap.height()-i-8;(r>0||!0!==e)&&(wrap.find("div.chat-stretch").height(r>0?r:0),scroll.scrollTop(i))}),this}},f={selection:function(n){var i=t().storage("getSelectionLabel",n.selection),r=t(t.el.button({class:"btn btn-xs btn-primary"},i+" ",e.widgets.glyphIcon("eye-open")));r.on("click",function(e){t(e.target).chatroom("storage").storage("restoreSelection",n.selection)}),this.append(" ",r," ")},query:function(n){var r=t(t.el.button({class:"btn btn-xs btn-primary"},"Query ",e.widgets.glyphIcon("download")));r.on("click",function(){var e=t(".prolog-query-editor");e.queryEditor("setQuery",n.query),i.flash(e.find(".CodeMirror"))}),l(r,n.query),this.append(" ",r," ")},update:function(e){var n,i,r;this.append(" ",t.el.span({class:"update"},n=c("play","btn-primary","Open old version"),i=c("zoom-in","btn-info","View changes"),r=c("play","btn-primary","Open new version"))," "),t(n).data("commit",e.previous),t(i).data("diff",{from:e.previous,to:e.commit,name:e.name}),t(r).data("commit",e.commit)},about:function(e){var n=e.docid.replace("gitty:","");this.append(" ",t.el.a({href:r.http.locations.web_storage+n,class:"store btn btn-primary btn-xs"},n)," ")}};t.fn.chatroom=function(e){return d[e]?d[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.chatroom"):d._init.apply(this,arguments)}}(jQuery)}),define("chatbell",["jquery","form","modal","config","preferences","laconic","chatroom"],function(t,e,n,i,r){!function(t){var o={_init:function(n){return n=n||{},this.each(function(){var i=t(this),r=t.extend({},n);r.docid=n.docid||i.data("document"),i.data("chatbell",r),i.addClass("chat-bell"),i.attr("title","Messages available"),i.append(e.widgets.glyphIcon("bell"),t.el.span({class:"chat-bell-count"},"-")),i.chatbell("update")})},chats:function(t){function e(){i.text("-"),r.removeClass("chat-available chat-alert"),r.attr("title",n.empty_title||"No messages available")}var n=this.data("chatbell"),i=this.find(".chat-bell-count"),r=this;if(void 0==t)delete n.docid,delete n.count,delete n.total,e();else{var o=void 0==t.count?t.total:t.count;t.docid&&(n.docid=t.docid),t.count&&(n.count=t.count),t.total&&(n.total=t.total),t.total>0?(this.addClass("chat-available"),o>0?(i.text(o),this.addClass("chat-alert"),this.attr("title",o+" new messages")):(i.text(t.total),this.removeClass("chat-alert"),this.attr("title",t.total+" old messages"))):e()}return this},"chats++":function(t){var e=this.data("chatbell");return void 0!=e.total?e.total++:e.total=1,void 0!=e.count&&e.count++,void 0!=t&&(e.docid=t),e.total&&this.chatbell("chats",{total:e.total,count:e.count}),this},update:function(e){var n=this.data("chatbell");if(e=e||{},void 0!=e.total&&void 0!=e.count)this.chatbell("chats",e);else{var o=e.docid||n.docid,a=r.getDocVal(o,"chatBar",0);if(o&&(a||void 0==e.total)){var s=t(this);t.get(i.http.locations.chat_status,{docid:o,after:a},function(t){s.chatbell("chats",t)})}else void 0!=e.total&&this.chatbell("chats",e)}return this},read_until:function(e,n){return this.each(function(){var n=t(this),i=n.data("chatbell");i.docid==e&&i.total&&n.chatbell("chats",{total:i.total,count:0})})},"chat-message":function(t){if(void 0==t.is_self&&(t.is_self=this.chatroom("is_self",t)),this.chatbell("chats++"),!t.is_self){var e=this.chatroom("render",t),i={dom:e};n.notify(this,i)}}};t.fn.chatbell=function(e){return o[e]?o[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.chatbell"):o._init.apply(this,arguments)}}(jQuery)}),define("sourcelist",["jquery","config","form","modal","laconic"],function(t,e,n,i){!function(t){function r(t,e){if(void 0!=e){e.offset=e.offset||0,e.limit=e.limit||10;for(var n=t.length-1;n>=0;n--){var i=t[n];if(function(t){var n=t.query;if(e.q==n.q&&e.offset>=n.offset&&(e.offset+e.limit<=n.offset+t.matches.length||n.offset+t.matches.length==t.total))return n}(i))return i}}}function o(t,e){var n=e.query;n.offset=n.offset||0,n.limit=n.limit||10;for(var i=t.length-1;i>=0;i--){var r=t[i],o=r.query;if(o.q==n.q&&o.offset+r.matches.length==n.offset){for(var i=0;i<e.matches.length;i++)r.matches.push(e.matches[i]);return}}t.push(e)}var a,s="sourcelist",l={q:e.swish.default_query||""},c=[],u=[],h=0,d={_init:function(e){return this.each(function(){var e=t(this),n={};e.data(s,n),e[s]("fill",void 0,l),e[s]("check_cache"),e[s]("update",l),e.on("login",function(){e[s]("check_cache")&&e[s]("update",l)})})},check_cache:function(){var e=t("#login").login("get_profile",["display_name","avatar"]);return a&&a.display_name==e.display_name&&a.avatar==e.avatar?(a||(a=e),!1):(c=[],a=e,!0)},update:function(n){var l,d=this;this[s]("check_cache"),(l=r(c,n))?t.ajax({url:e.http.locations.source_modified,dataType:"json",success:function(t){t.modified<l.modified+10?d.sourcelist("fill",l,n):(c=[],d[s]("update",n))},error:function(t){i.ajaxError(t)}}):(n=n||{},t.extend(n,a),n.q=n.q||"",n.offset=n.offset||0,n.limit=n.limit||10,n.qid=h++,u.push(n),d[s]("busy",!0),t.ajax({url:e.http.locations.source_list,data:n,dataType:"json",success:function(t){t.query=n,u.pop(),0==u.length&&d[s]("busy",!1),o(c,t),d.sourcelist("fill",t,n)},error:function(t){u.pop(),i.ajaxError(t)}}))},page:function(e){var n=this.data(s);if(n&&n.page){var i=t.extend({},n.page.query);switch(void 0==i.offset&&(i.offset=0),e){case"first":i.offset=0;break;case"prev":i.offset-=n.page.size;break;case"next":i.offset+=n.page.size;break;case"last":i.offset=function(t,e){return Math.floor((t+(e-1))/e)*e}(n.page.total,n.page.size)-n.page.size;break;default:return}i.offset=Math.max(0,i.offset),this[s]("update",i)}},fill:function(e,i){function r(e){return t.el.th(e)}var o,a=this.data(s);if(!a)return this;e&&(l=i,a.page={query:i,offset:i.offset,size:i.limit,total:e.total}),o=this.find("tbody"),0==o.length?(this.append(t.el.div({class:"search-form input-group"}),t.el.div({class:"search-results"},table=t.el.table({class:"table table-striped table-hover table-condensed"},t.el.thead(t.el.tr(r("Type"),r("Name"),r("Tags"),r("User"),r("Modified"))),o=t.el.tbody()),t.el.div({class:"search-no-results"}),t.el.div({class:"loading search"})),t.el.div({class:"search-footer"})),this[s]("search_form"),o=t(o),o.on("click","tr",function(e){var n=t(e.target).closest("tr");t("body").swish("playFile",{file:n.attr("data-name")})})):t(o).html("");var c=this.find("input.search");if(c.is(":focus")||(c.val(e?e.query.q:i?i.q:""),c.trigger("propertychange",!1)),e){var u=i.offset-e.query.offset,h=Math.min(u+i.limit,e.matches.length);for(u<h?t(table).show():t(table).hide();u<h;u++){var d=e.matches[u],f=d.name.split(".").pop(),p=d.name.slice(0,-(f.length+1)),g=t.el.td({class:"tags"});(d.tags||[]).forEach(function(e){t(g).append(t.el.span({class:"tag"},e))}),o.append(t.el.tr({"data-name":d.name},t.el.td(n.widgets.typeIcon(f)),t.el.td(p),g,t.el.td(d.author),t.el.td(function(t){var e=new Date(1e3*t),n=e.toISOString();return n.slice(0,10)+" "+n.slice(11,19)}(d.time))))}this[s]("search_footer",e,i)}},search_footer:function(e,r){function o(t,e,i){return c.action=t,c.class="btn-primary "+e,n.widgets.glyphIconButton(i,c)}var a=this.find("div.search-footer"),l=this.find("div.search-no-results"),c={};0==a.find(".f-total").length&&(a.append(o("first","backward","fast-backward"),o("prev","backward","step-backward"),t.el.button({class:"btn btn-default"},t.el.span({class:"f-from"}),t.el.label("to"),t.el.span({class:"f-to"}),t.el.label("from"),t.el.span({class:"f-total"})),o("next","forward","step-forward"),o("last","forward","fast-forward")),a.on("click","button",function(e){var n=t(e.target).closest("button"),i=n.data("action");i&&n.closest("div.sourcelist")[s]("page",i)}));var u=Math.min(r.offset+r.limit,e.total);if(0==e.total){if(0==l.find("div").length){var h;l.append(t.el.div(t.el.span({class:"no-search-results-warning"},n.widgets.glyphIcon("alert")," No matching files"),t.el.br(),"If you are a new user you may",t.el.ul(t.el.li("Use the Examples menu from the navigation bar"),t.el.li("Use the Program or Notebook button above")),t.el.div(h=t.el.a({href:"#"},"help on search")))),t(h).on("click",function(){console.log("help"),i.help({file:"sourcelist.html"})})}l.show(),a.hide()}else l.hide(),r.offset>0||u<e.total?(a.show(),0==r.offset?a.find(".backward").attr("disabled","disabled"):a.find(".backward").removeAttr("disabled"),u>=e.total?a.find(".forward").attr("disabled","disabled"):a.find(".forward").removeAttr("disabled"),a.find(".f-from").text(""+r.offset),a.find(".f-to").text(""+u),a.find(".f-total").text(""+e.total)):a.hide()},search_form:function(){function e(e,i){for(var r,o=t.el.div({class:"btn-group"},t.el.button({type:"button",class:"btn btn-default dropdown-toggle","data-toggle":"dropdown","aria-haspopup":!0,"aria-expanded":!1},e," ",t.el.span({class:"caret"})),r=t.el.ul({class:"dropdown-menu"})),a=0;a<i.length;a++)t(r).append(t.el.li(function(e){var i;return"string"==typeof e?t.el.a({"data-tag":e},e):(i=e.i?t.el.a({"data-tag":e.t,"data-value":e.v},n.widgets.typeIcon(e.i)," "+e.l):t.el.a({"data-tag":e.t,"data-value":e.v},e.l),t(i).data("quote",void 0==e.q?'"':e.q),i)}(i[a])));return o}function i(t){l.tmo&&(clearTimeout(l.tmo),l.tmo=void 0),1==t&&(t=1e3),t&&(l.tmo=setTimeout(o,t))}function o(t){t&&t.preventDefault(),i();var e=u.find("input").val();return u[s]("update",{q:e}),!1}var a,l=this.data(s),u=this,h=this.find("div.search-form");h.append(t.el.div({class:"form-group has-feedback has-clear"},t.el.input({type:"text",class:"form-control search",placeholder:"Find files"}),t.el.span({class:"form-control-clear glyphicon glyphicon-remove form-control-feedback hidden"})),t.el.div({class:"input-group-btn"},e("Filter",[{t:"user",l:"My files",v:"me",q:'"'},{t:"user",l:"By user",v:"",q:'"'},{t:"user",l:"By user (regex)",v:"",q:"/"},{t:"tag",l:"By tag",v:"",q:'"'},{t:"tag",l:"By tag (regex)",v:"",q:"/"},{t:"name",l:"By name",v:"",q:'"'},{t:"name",l:"By name (regex)",v:"",q:"/"}]),e("Type",[{t:"type",l:"Program",i:"pl",v:"pl",q:""},{t:"type",l:"Notebook",i:"swinb",v:"swinb",q:""},{t:"type",l:"Permalink",i:"lnk",v:"lnk",q:""}]),a=t.el.button({class:"btn btn-default",type:"submit"},t.el.i({class:"glyphicon glyphicon-search"})))),n.dyn_clear(h,o),h.on("click","a",function(e){var n=t(e.target).closest("a");!function(t,e,n){var i=h.find("input"),r=i.val(),a=t+":"+n+(e||"")+n;r=""==r.trim()?a:e&&RegExp("\\b"+t+":").test(r)?r.replace(RegExp("\\b"+t+':(\\S*|\\s*"[^"]*")'),a):r.trim()+" "+a,i.val(r).trigger("propertychange"),(e||"tag"==t)&&o()}(n.data("tag"),n.data("value"),n.data("quote"))}),t(a).on("click",function(t){return o(t)});var d=u.find("input");d.keydown(function(t){if(13==t.which)return o(t)}).on("input propertychange",function(t,e){0!=e&&i(r(c,d.val())?200:!0)})},busy:function(t){var e=this.find("div.loading");t?e.show():e.hide()}};t.fn.sourcelist=function(e){return d[e]?d[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery."+s):d._init.apply(this,arguments)}}(jQuery)}),define("tabbed",["jquery","form","config","preferences","modal","laconic","search","chatbell","sourcelist"],function(t,e,n,i,r){var o={tabTypes:{},type:function(t){var e=t.split(".").pop();for(var n in o.tabTypes)if(o.tabTypes.hasOwnProperty(n)&&o.tabTypes[n].dataType==e)return o.tabTypes[n]}};return o.tabTypes.permalink={dataType:"lnk",typeName:"program",label:"Program",create:function(e,n){t(e).addClass("prolog-editor").prologEditor(t.extend({save:!0},n)).prologEditor("makeCurrent")}},function(t){function a(e,n,i){t(e).wrap('<div role="tabpanel" class="tab-pane" id="'+n+'"></div>');var r=t(e).parent();return i&&r.addClass("active"),r}function s(e,n){var i=t.el.span({class:"glyphicon glyphicon-"+e});return n&&t(i).addClass(n),i}function l(){return"tabbed-tab-"+u++}function c(t){if(n.swish.profiles)for(var e=0;e<n.swish.profiles.length;e++)if(n.swish.profiles[e].value==t)return n.swish.profiles[e]}var u=0,h={_init:function(e){return e=e||{},this.each(function(){var n=t(this),i={};i.newTab=e.newTab,i.tabTypes=e.tabTypes||o.tabTypes,n.data("tabbed",i),n.addClass("tabbed unloadable"),n.tabbed("makeTabbed"),n.on("trace-location",function(t,e){n.tabbed("showTracePort",e)}),n.on("data-is-clean",function(e,i){var r=t(e.target).closest(".tab-pane"),o=n.tabbed("navTab",r.attr("id"));o&&(i?o.removeClass("data-dirty"):o.addClass("data-dirty"))}),n.on("unload",function(t){if(t.target==n[0]&&n.closest(".swish").swish("preserve_state")){var e=n.tabbed("getState");localStorage.setItem("tabs",JSON.stringify(e))}}),n.on("restore",function(t){var e;if(t.target==n[0]){try{var i=localStorage.getItem("tabs");i&&(e=JSON.parse(i))}catch(t){}e&&"object"==typeof e&&n.tabbed("setState",e)}}),n.on("preference",function(t,e){"preserve-state"==e.name&&0==e.value&&localStorage.removeItem("tabs")})})},makeTabbed:function(){var e=this.children(),n=t.el.ul({class:"nav nav-tabs",role:"tablist"}),i=t.el.div({class:"tab-content"});this.prepend(i),this.prepend(n),t(n).on("click","span.xclose",function(e){var n=t(e.target).parent().attr("data-id");t(e.target).parents(".tabbed").first().tabbed("removeTab",n),e.preventDefault()}),t(n).on("click","a",function(e){t(e.target).closest("a").tab("show"),e.preventDefault()});for(var r=0;r<e.length;r++){var o=t(e[r]),c=l(),u=o.attr("data-label")||"Unknown",h="disabled"!=o.attr("data-close"),d=r==e.length-1,f=this.tabbed("tabLabel",c,u,h);d&&t(f).addClass("active"),t(n).append(f),t(i).append(a(t(e[r]),c,d))}var p=t.el.a({class:"tab-new compact",title:"Open a new tab"},s("plus"));t(n).append(t.el.li({class:"tab-new",role:"presentation"},p)),t(p).on("click",function(e){return t(e.target).parents(".tabbed").first().tabbed("newTab"),e.preventDefault(),!1}),t(n).on("shown.bs.tab","a",function(e){var n=t(e.target).data("id");t("#"+n+" .swish-event-receiver").trigger("activate-tab"),t("#"+n+" .storage").storage("activate")}),0==this.tabbed("navContent").children().length&&this.tabbed("newTab")},newTab:function(e,n){var i=this.data("tabbed");if(void 0==e)if(i.newTab)e=i.newTab();else{var r;e=this.tabbed("tabSelect"),t(e).append(this.tabbed("profileForm"),t.el.hr(),r=t.el.div({class:"sourcelist"})),t(r).sourcelist()}return void 0==n&&(n=!0),this.tabbed("addTab",e,{active:n,close:!0})},getState:function(){var t=this.tabbed("get_ordered_storage").storage("getState");return t.pathname=window.location.pathname,t.time=(new Date).getTime(),t},setState:function(t){for(var e=this.find(".storage").length>0,n=0;n<t.tabs.length;n++){var i=t.tabs[n];this.tabbed("restoreTab",i,e)}},restoreTab:function(e,i){function o(t,e){e.data&&t.find(".storage").storage("setValue",{data:e.data,role:"source"}),e.chatroom&&t.find(".storage").storage("chat",e.chatroom)}var a,s=this;e.query=null,e.noHistory=!0;var l=this.find(".storage").storage("match",e);if(l?(l.data("storage").url=e.url,a=l.closest(".tab-pane"),s.tabbed("move_right",a)):a=void 0,l)o(a,e);else if(l);else{var c,u=this.find("div.tabbed-select"),h='<div class="restore-tab">Restoring '+(e.file||e.url)+" ...</div>";if(u.length>0)c=u.first().closest(".tab-pane"),c.html(h);else{var d=!i&&Boolean(e.active);c=s.tabbed("newTab",t(h),d)}if("gitty"==e.st_type){var f=n.http.locations.web_storage+e.file;t.ajax({url:f,type:"GET",data:{format:"json"},success:function(t){t.url=f,t.st_type="gitty",t.noHistory=!0,s.tabbed("setSource",c,t)||(console.log("Failed to restore",e.file),s.tabbed("removeTab",a.attr("id"))),o(c,e),
+!i&&c.hasClass("active")&&c.find(".storage").storage("activate")},error:function(t){r.ajaxError(t)}})}else e.url?t.ajax({url:e.url,type:"GET",data:{format:"json"},success:function(t){var n;if("string"==typeof t)n={data:t},n.st_type="external";else{if("object"!=typeof t||"string"!=typeof t.data)return void alert("Invalid data");n=t,n.st_type="filesys"}n.noHistory=!0,n.url=e.url,s.tabbed("setSource",c,n)||(console.log("Failed to restore",e.url),s.tabbed("removeTab",c.attr("id"))),o(c,e),!i&&c.hasClass("active")&&c.find(".storage").storage("activate")},error:function(t){r.ajaxError(t)}}):console.log("Cannot restore ",e)}},tabFromSource:function(e){function n(){var n=r.tabbed("newTab",t("<span></span>"));r.tabbed("setSource",n,e)||r.tabbed("removeTab",n.attr("id"))}var r=this,o=this.find("div.tabbed-select");if("string"==typeof e&&(e={data:e}),o.length>0){var a=o.first().closest(".tab-pane");this.tabbed("show",a.attr("id")),this.tabbed("setSource",a,e)}else if(e.newTab||i.getVal("new-tab"))n();else{var a;this.find(".storage").each(function(n,i){if(t(i).storage("setSource",e))return a=t(i).closest(".tab-pane"),!1}),a?this.tabbed("show",a.attr("id")):n()}return this},setSource:function(e,n){if("object"==typeof n&&(n.meta&&n.meta.name||n.url)){var i=n.meta&&n.meta.name?n.meta.name:n.url,r=o.type(i),a=t.el.div(),s={};return n.noHistory&&(s.noHistory=!0),e.html(""),e.tabbed("title",r.label,r.dataType),e.append(a),r.create(a,s),t(a).storage("setSource",n),!0}return!1},showTracePort:function(e){if(e&&e.source&&e.source.file){var n,i,r,o=e.source.file;if(n=function(){if(o.startsWith("pengine://"))return o.split("/")[2]}())r=this.find(".prolog-editor").filter(function(e,i){return t(i).prologEditor("pengine",{has:n})});else if((i=function(){if(o.startsWith("swish://"))return o.slice("swish://".length)}())&&!(r=this.find(".storage").storage("match",{file:i})))return this.closest(".swish").swish("playFile",{file:i,newTab:!0,noHistory:!0,prompt:e}),this;r&&r.prologEditor("showTracePort",e)}return this},addTab:function(e,n){var i=this.tabbed("navTabs"),r=l(),o=a(e,r,n.active);this.tabbed("navContent").append(o);var s=this.tabbed("tabLabel",r,"New tab",close,"select"),c=i.find("a.tab-new");return 1==c.length?t(s).insertBefore(c.first().parent()):i.append(s),n.active&&t(s).find("a").first().tab("show"),o},removeTab:function(e){var n,i=this.tabbed("navTabs").find("a[data-id='"+e+"']").parent(),r=t("#"+e);0!=r.find(".storage").storage("unload","closetab")&&(r.is(":visible")&&(n=i.prev()||i.next()),i.remove(),r.find(".prolog-runner").prologRunner("close"),r.find(".storage").storage("close"),r.remove(),n&&n.length>0?n.find("a").first().tab("show"):0==this.tabbed("navContent").children().length&&this.tabbed("newTab"),t(".storage").storage("chat_status",!0))},show:function(e){var n=this.tabbed("navTab",e);n&&n.tab("show"),t(".storage").storage("chat_status",!0)},move_right:function(t){var e,n=this.find(">ul");e="string"==typeof t?t:t.attr("id"),n.find("a[data-id="+e+"]").closest("li").insertBefore(n.children().last())},tabLabel:function(e,n,i,r){var o,a;i&&(o=s("remove","xclose"),t(o).attr("title","Close tab")),r=r||"pl";var l=t.el.a({class:"compact",href:"#"+e,"data-id":e},t.el.span({class:"tab-icon type-icon "+r}),t.el.span({class:"tab-dirty",title:"Tab is modified. See File/Save and Edit/View changes"}),a=t.el.a({class:"tab-chat"}),t.el.span({class:"tab-title"},n),o),c=t.el.li({role:"presentation"},l);return t(a).chatbell().on("click",function(e){var n=t(e.target).closest("a.compact").data("id");return t("#"+n).find(".storage").storage("chat"),!1}),c},anchor:function(){var t=this.closest(".tab-pane");if(0!=t.length){var e=t.closest(".tabbed"),n=t.attr("id");return e.tabbed("navTabs").find("a[data-id="+n+"]")}},get_ordered_storage:function(){var e=this,n=[];return this.find(">ul>li").each(function(){var i=t(this).find(">a").data("id");e.find(">div.tab-content>div[id="+i+"] .storage").each(function(){n.push(this)})}),t(n)},title:function(t,e){var n=this.tabbed("anchor");if(n&&(n.find(".tab-title").text(t),e)){var i=n.find(".tab-icon");i.removeClass(),i.addClass("tab-icon type-icon "+e)}return this},chats:function(t){var e=this.tabbed("anchor");return e&&e.find(".chat-bell").chatbell("update",t),this},"chats++":function(t){var e=this.tabbed("anchor");return e&&e.find(".chat-bell").chatbell("chats++",t),this},tabSelect:function(){var e=this.data("tabbed"),n=t.el.div({class:"tabbed-select"},t.el.div({class:"tabbed-create"},t.el.label({class:"tabbed-left"},"Create a "),g=t.el.div({class:"btn-group",role:"group"}),t.el.label({class:"tabbed-right"},"here"))),a=[];for(var s in e.tabTypes)e.tabTypes.hasOwnProperty(s)&&e.tabTypes[s].order&&a.push(s);a.sort(function(t,n){return e.tabTypes[t].order-e.tabTypes[n].order});for(var l=0;l<a.length;l++){var c=e.tabTypes[a[l]];t(g).append(t.el.button({type:"button",class:"btn btn-primary","data-type":c.typeName,"data-ext":c.dataType},c.label))}return t(g).on("click",".btn",function(e){var n=t(e.target).data("type"),r=t(e.target).closest(".tab-pane"),a=t.el.div(),s=t.extend({},o.tabTypes[n]),l=r.find("label.active > input[name=profile]").val();l&&(s.profile=l,s.value=r.tabbed("profileValue",l,o.tabTypes[n].dataType),void 0!=s.value&&i.setVal("default-profile",l)),r.html(""),r.tabbed("title",s.label,s.dataType),r.append(a),o.tabTypes[n].create(a,s)}),t(g).addClass("swish-event-receiver"),t(g).on("download save fileInfo print",function(e){if(t(e.target).closest(".tab-pane").is(":visible")){var n={download:"you wish to download",save:"you wish to save",print:"you wish to print",fileInfo:"for which you want details"};r.alert("Please activate the tab "+n[e.type]),e.stopPropagation()}}),t(g).on("profile-selected",function(e,n){t(e.target).find("button").each(function(){t(this).prop("disabled",n.type.indexOf(t(this).data("ext"))<0)})}),n},searchForm:function(){var n=t.el.form({class:"search-sources"},t.el.label({class:"control-label"},"Open source file containing"),t.el.div({class:"input-group"},t.el.input({type:"text",class:"form-control search",placeholder:"Search sources","data-search-in":"sources store_content"}),t.el.div({class:"input-group-btn"},t.el.button({class:"btn btn-default",type:"submit"},t.el.i({class:"glyphicon glyphicon-search"})))),t.el.div({class:"input-group"},e.fields.radio("smatch",[{label:"Start of line",value:"sol"},{label:"Start of word",value:"sow",active:!0},{label:"Anywhere",value:"anywhere"}])));return t(n).find("input.search").search(),n},sourceList:function(){},profileForm:function(){if(n.swish.profiles&&n.swish.profiles.length>0){for(var r,o=0;o<n.swish.profiles.length;o++)delete n.swish.profiles[o].active;if(r=i.getVal("default-profile"))for(var o=0;o<n.swish.profiles.length;o++)n.swish.profiles[o].value==r&&(n.swish.profiles[o].active=!0);else n.swish.profiles[0].active=!0;var a=t.el.div({class:"tabbed-profile"},t.el.label({class:"tabbed-left"},"based on"),t.el.div({class:"input-group select-profile"},e.fields.radio("profile",n.swish.profiles)),t.el.label({class:"tabbed-right"},"profile"));return t(a).on("click",function(e){var n=t(e.target).find("input").val(),i=c(n);t(e.target).closest(".tab-pane").find(".tabbed-create .btn-group").trigger("profile-selected",i)}),a}},profileValue:function(e,i){var o=n.http.locations.swish+"profile/"+e+"."+i;return t.ajax({url:o,type:"GET",data:{format:"raw"},async:!1,error:function(t){r.ajaxError(t)}}).responseText},navTabs:function(){return this.find("ul.nav-tabs").first()},navTab:function(t){var e=this.find("ul.nav-tabs").first().find("a[data-id='"+t+"']");if(e.length>0)return e},navContent:function(){return this.find("div.tab-content").first()}};t.fn.tabbed=function(e){return h[e]?h[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.tabbed"):h._init.apply(this,arguments)}}(jQuery),o}),define("prolog",["jquery","config","form","preferences"],function(t,e,n,i){var r={downloadCSV:function(o,a,s){function l(e,n){return t.el.input({type:"hidden",name:e,value:n})}function c(){var s=t.el.form({class:"form-horizontal"},n.fields.projection(f.join(",")),n.fields.csvFormat(e.swish.csv_formats,i.getVal("csvFormat")),n.fields.limit("10 000",!1),n.fields.filename(p,2),n.fields.buttons({label:"Download CSV",action:function(t,n){return t.preventDefault(),e.swish.csv_formats.length>1&&i.setVal("csvFormat",n.format),r.downloadCSV(o,a,n),!1}}));this.append(s)}if(s=s||{},s.disposition=s.disposition||s.filename||"swish-results.csv",s.projection){var u,h=s.format||"prolog";if(s.distinct&&(o="distinct(["+s.projection+"],("+o+"))"),s.limit){var d=parseInt(s.limit.replace(/[ _]/g,""));if("number"!=typeof d)return alert("Not an integer: ",s.limit),!1;o="limit("+d+",("+o+"))"}u=t.el.form({method:"POST",action:e.http.locations.pengines+"/create",target:"_blank"},l("format","csv"),l("chunk","10"),l("solutions","all"),l("disposition",s.disposition),l("application","swish"),l("ask",o),l("src_text",a),l("template",h+"("+s.projection+")")),t("body").append(u),u.submit(),t(u).remove()}else{var f=t().prologEditor("variables",o,{projection:!0}),p=s.disposition;p.indexOf(".")<0&&(p+=".csv"),n.showDialog({title:"Download query results as CSV",body:c})}return this},trimFullStop:function(t){return t.replace(/\.\s*$/m,"")},options:{application:"swish",chunk:5}};return t.swish=function(t){for(var e in r.options)r.options.hasOwnProperty(e)&&!t.hasOwnProperty(e)&&(t[e]=r.options[e]);return new Pengine(t)},r}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/addon/hint/templates-hint",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){function e(t,e){return t.slice(0,e.length).toUpperCase()==e.toUpperCase()}function n(t){}function i(){this.marked=[],this.selectableMarkers=[],this.varIndex=-1}function r(t){return t._templateStack?t._templateStack.length:0}function o(t){this.name=t.name,this.description=t.description,this.text=t.text,t.varTemplates&&(this.varTemplates=t.varTemplates),null!=t.template?this.source=t.template:null!=t.tokens&&(this._tokens=t.tokens)}function a(t){for(var e=[],n=!1,i=null,r="",o=0;o<t.length;o++){var a=t.charAt(o);if("\n"==a)""!=r&&e.push(r),r="",e.push(a),i=null;else{var s=!0;if(n)"}"==a&&(n=!1,s=!1,"cursor"==r?e.push({cursor:!0}):"line_selection"==r?e.push({line_selection:!0}):e.push({variable:r}),r="");else if("$"==a&&o+1<=t.length){o++;var l=t.charAt(o);"{"==l&&(n=!0,s=!1,""!=r&&e.push(r),r="")}s&&"$"!=i?(r+=a,i=a):i=null}}return""!=r&&e.push(r),e}function s(t,e){var n=t.findMarksAt(e.from);if(n)for(var i=0;i<n.length;i++){var r=n[i];if(r._templateVar)return r}return null}function l(t,e){var n=t._templateState;if(e.origin&&n&&!n.updating)try{n.updating=!0;var i=s(t,e);if(null==i)f(t);else for(var r=i.find(),o=t.getRange(r.from,r.to),a=0;a<n.marked.length;a++){var l=n.marked[a];if(l!=i&&l._templateVar==i._templateVar){var c=l.find();t.replaceRange(o,c.from,c.to)}}}finally{n.updating=!1}}function c(t){n("template","endCompletion()",r(t)),r(t)&&f(t,!0)}function u(t,e){var n=t._templateState;if(n.selectableMarkers.length>0){if(++n.varIndex>=n.selectableMarkers.length){if(e)return void d(t);n.varIndex=0}var i=n.selectableMarkers[n.varIndex],r=i.find();t.setSelection(r.from,r.to);for(var o=(i._templateVar,0);o<n.marked.length;o++){var a=n.marked[o];a==i?(a.className="",a.startStyle="",a.endStyle=""):a._templateVar==i._templateVar?(a.className="CodeMirror-templates-variable-selected",a.startStyle="",a.endStyle=""):(a.className="CodeMirror-templates-variable",a.startStyle="CodeMirror-templates-variable-start",a.endStyle="CodeMirror-templates-variable-end")}t.refresh()}else d(t)}function h(e){function n(t,e){return t.ch==e.ch&&t.line==e.line}var i=e._templateState,r=i.selectableMarkers[i.varIndex],o={state:i};e._hintTemplateMarker&&(o.marker=e._hintTemplateMarker),e._templateStack||(e._templateStack=[]),e._templateStack.push(o),delete e._templateState,e._hintTemplateMarker=r;var a=r.find(),s=e.listSelections();1==s.length&&n(s[0].anchor,a.from)&&n(s[0].head,a.to)&&e.replaceRange("☰",a.from,a.to),t.commands.autocomplete(e)}function d(t){var e=t._templateState.cursor;if(null!=e){var n=e.find();null!=n&&t.setSelection(n,n)}f(t)}function f(t,e){var i=t._templateState;if(i){n("template","Uninstall, clearing: ",i.marked.length);for(var r=0;r<i.marked.length;r++)i.marked[r].clear();null!=i.cursor&&i.cursor.clear(),i.marked.length=0,i.selectableMarkers.length=0}else n("template","Uninstall, no state");if(t._templateStack&&t._templateStack.length>0){n("template","Popping from level",t._templateStack.length);var o=t._templateStack.pop();i=t._templateState=o.state,e&&t._hintTemplateMarker&&function(){n("template","Canceled?");for(var e=0;e<i.marked.length;e++){var r=i.marked[e];if(r==t._hintTemplateMarker){var o=r.find();o&&"☰"==t.getRange(o.from,o.to)&&t.replaceRange(r._templateVar,o.from,o.to)}}}(),o.marker?t._hintTemplateMarker=o.marker:delete t._hintTemplateMarker}else n("template","Leaving template mode"),t.off("change",l),t.off("endCompletion",c),t.removeKeyMap(m),delete t._templateState,delete t._hintTemplateMarker}var p=[],g=t.Pos;t.templatesHint={};var m={Tab:u,Enter:function(t){u(t,!0)},Esc:f,"Ctrl-Space":h};o.prototype.tokens=function(){return null==this._tokens&&(this._tokens=a(this.source)),this._tokens},o.prototype.content=function(){if(null==this._content){for(var t=this.tokens(),e="",n=0;n<t.length;n++){var i=t[n];"string"==typeof i?e+=i:i.variable&&(e+=i.variable)}this._content=e}return this._content},o.prototype.insert=function(t,e){var o=this,a=r(t);if(n("template","Insert, nested",a,"template",o),(t._templateState||a)&&(n("template","Uninstall from insert()",a),f(t)),o.text)return void t.replaceRange(o.text,e.from,e.to);var s=new i;t._templateState=s;for(var h=this.tokens(),d="",p=e.from.line,v=e.from.ch,y=[],b=[],x=null,w=0;w<h.length;w++){var _=h[w];if("string"==typeof _)d+=_,"\n"==_?(p++,v=0):v+=_.length;else if(_.variable){d+=_.variable;var S=g(p,v),C=g(p,v+_.variable.length),T=0!=b[_.variable];v+=_.variable.length,y.push({from:S,to:C,variable:_.variable,selectable:T}),b[_.variable]=!1}else _.cursor&&(x=g(p,v))}var S=e.from,C=e.to,k=S.line;t.replaceRange(d,S,C);for(var w=0;w<y.length;w++){var A=y[w],S=A.from,C=A.to,M=t.markText(S,C,{className:"CodeMirror-templates-variable",startStyle:"CodeMirror-templates-variable-start",endStyle:"CodeMirror-templates-variable-end",inclusiveLeft:!0,inclusiveRight:!0,clearWhenEmpty:!1,_templateVar:A.variable,_templates:function(t){if(o.varTemplates&&o.varTemplates[t])return o.varTemplates[t]}(A.variable)});s.marked.push(M),1==A.selectable&&s.selectableMarkers.push(M)}null!=x&&(s.cursor=t.setBookmark(x));for(var E=d.split("\n"),L=1;L<E.length;L++){var P=k+L;t.indentLine(P)}a||(t.on("change",l),n("template","Installing endCompletion"),t.on("endCompletion",c),t.addKeyMap(m)),u(t,!0)},t.templatesHint.getCompletions=function(n,i,r){var o=n.doc.mode.name,a=p[o];if(a)for(var s=0;s<a.length;s++){var l=a[s];if(e(l.name,r)){var c=l.name;l.description&&(c+="- "+l.description);var u="CodeMirror-hint-template";l.className&&(u=l.className);var h={className:u,text:c,template:l};h.data=h,h.hint=function(t,e,n){n.template.insert(t,e)},h.info=function(e){var i=e.template.content();if(t.runMode){var r=document.createElement("div");return r.className="cm-s-default",n.options&&n.options.theme&&(r.className="cm-s-"+n.options.theme),t.runMode(i,n.getMode().name,r),r}return i},i.push(h)}}},t.templatesHint.Template=o,t.templatesHint.addTemplates=function(t){var e=t.context;if(e){var n=p[e];n||(n=[],p[e]=n),t.templates.forEach(function(t){n.push(new o(t))})}}}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/mode/prolog/prolog-template-hint",["../../lib/codemirror","../../addon/hint/templates-hint","jquery","config","laconic"],t):t(CodeMirror)}(function(t,e,n,i){"use strict";function r(t){var e=this,i=["template","displayText","text",{from:"summary",to:"description"},"className","varTemplates"];if("string"==typeof t)this.displayText=t,this.text=t;else{for(var r=0;r<i.length;r++){var o=i[r];"string"==typeof o?t[o]&&(this[o]=t[o]):t[o.from]&&(this[o.to]=t[o.from])}t.mode&&function(t){var n=/[-+?:^@!]*([A-Z][A-Za-z_0-9]*)/g,i=/\bis\s+(det|nondet|semidet|fail|multi)$/;if(e.template||(e.template=t.replace(n,"$${$1}").replace(i,""),e.template.match(/\${cursor}/)||(e.template+="${cursor}")),e.displayText||(e.displayText=t),!e.varTemplates){var r=t.match(/:[A-Z][A-Za-z_0-9]*/g);if(r&&r.length>0){for(var o={},a=0;a<r.length;a++)o[r[a].substring(1)]=l;e.varTemplates=o}}}(t.mode),t.classes&&(t.className=t.classes.join(" "))}this.render=function(t,e,i){n(t).append(i.displayText)},this.info=function(t){return t.description}}function o(e,n,i){function o(t,e){return t.slice(0,e.length)==e}var a=n.token.string,s=[],c=l;e._hintTemplateMarker&&("☰"==a&&(a=""),c=e._hintTemplateMarker._templates);var u=a.length>0&&!a.match(/\w/);if(c)for(var h=0;h<c.length;h++){var d=c[h];if("string"==typeof d)o(d,a)&&s.push(new r(d));else{var f=["name","mode","template","text"];if(u)d.name&&d.name.indexOf(a)>=0&&s.push(new r(d));else for(var p=0;p<f.length;p++)if(d[f[p]]){o(d[f[p]],a)&&s.push(new r(d));break}}}if(0==s.length)for(var g=t.hint.anyword,m=""==a&&e._hintTemplateMarker?{word:/[A-Z][A-Za-z0-9_]*/}:i,v=g(e,m),h=0;h<v.list.length;h++)s.push(new r(v.list[h]));return{list:s,from:n.position.from,to:n.position.to}}function a(e,n,i){var r=s(e),a=o(e,r,i);t.attachContextInfo(a),n(a)}function s(e){var n=e.getCursor(),i=e.getTokenAt(n);return"prolog"!=t.innerMode(e.getMode(),i.state).mode.name?null:{token:i,position:{from:new t.Pos(n.line,i.start),to:new t.Pos(n.line,i.end)}}}var l=i.swish.templates||[];return r.prototype.hint=function(e,n,i){new t.templatesHint.Template(this).insert(e,n)},a.async=!0,t.registerHelper("hint","prologTemplate",a),{getHints:a,getState:s}}),define("gitty",["jquery","config","form","modal","laconic"],function(t,e,n,i){function r(e,n){function i(t){(e[t]||n[t])&&e[t]!=n[t]&&(r[t]={from:e[t],to:n[t]})}var r={};return i("author"),i("title"),i("data"),i("public"),i("example"),i("name"),(d=a(e.tags,n.tags))&&(r.tags=d),t.isEmptyObject(r)?null:r}function o(e,n){var i={};for(var r in e)if(e.hasOwnProperty(r)){switch(typeof e[r]){case"object":if(t.isArray(e[r])&&!a(e[r],n[r]))continue;break;case"string":case"boolean":if(n[r]==e[r])continue}i[r]=e[r]}return i}function a(e,n){function i(t,e){for(var n=[],i=0;i<e.length;i++)t.indexOf(e[i])<0&&n.push(e[i]);return n}var r,o={};return e=e||[],n=n||[],(r=i(e,n)).length>0&&(o.added=r),(r=i(n,e)).length>0&&(o.deleted=r),t.isEmptyObject(o)?null:o}return function(t){var o={_init:function(e){return this.each(function(){function n(e,n,i,r){var o={role:"presentation"},a=[];return n&&a.push("active"),r&&a.push("disabled"),a!=[]&&(o.class=a.join(" ")),t.el.li(o,t.el.a({href:"#"+i,"data-toggle":"tab"},e))}var i,r=t(this),o=r.data("gitty")||{},a=e.meta;o.commits=[],o.commits[a.commit]=a,o.commit=a.commit,o.editor=e.editor,henabled=!Boolean(a.previous),i=t(t.el.div({class:"tab-content"})),r.append(t.el.ul({class:"nav nav-tabs"},n("Meta data",!0,"gitty-meta-data"),n("History",!1,"gitty-history",henabled),n("Changes",!1,"gitty-diff",henabled))),r.append(i),i.append(t.el.div({class:"tab-pane fade in active gitty-meta-data",id:"gitty-meta-data"})),r.find('[href="#gitty-meta-data"]').on("show.bs.tab",function(t){r.gitty("showMetaData")}),i.append(t.el.div({class:"tab-pane fade gitty-history",id:"gitty-history"})),r.find('[href="#gitty-history"]').on("show.bs.tab",function(t){r.gitty("showHistory")}),i.append(t.el.div({class:"tab-pane fade gitty-diff",id:"gitty-diff"})),r.find('[href="#gitty-diff"]').on("show.bs.tab",function(t){r.gitty("showDiff")}),r.data("gitty",o),r.gitty("showMetaData")})},title:function(e){var n=t.el.span("File ",t.el.span({class:"filename"},e.name));return"HEAD"!=e.symbolic&&e.commit&&t(n).append("@",t.el.span({class:"sha1 abbrev"},e.commit.substring(0,7))),n},showMetaData:function(){return this.each(function(){var e,i=t(this),r=i.data("gitty"),o=i.find(".gitty-meta-data"),a=r.commits[r.commit];r.metaData!=r.commit&&(r.metaData=r.commit,o.html(""),e=t.el.form({class:"form-horizontal"},n.fields.fileName(a.name,a.public,a.example,!0),n.fields.title(a.title),n.fields.author(a.author),n.fields.date(a.time,"Date","date"),n.fields.tags(a.tags)),"HEAD"==a.symbolic&&t(e).append(n.fields.buttons({label:"Update meta data",action:function(t,e){return r.editor.storage("save",e,"only-meta-data"),!1}})),o.append(e))})},showHistory:function(r){return this.each(function(){var o,a=t(this),s=a.data("gitty"),l=a.find(".gitty-history"),c=s.commits[s.commit];if(!s.history){r=r||{},r.depth||(r.depth=100),l.html(""),l.append(t.el.div({class:"gitty-history-table"},t.el.table({class:"table table-striped table-condensed gitty-history","data-click-to-select":!0,"data-single-select":!0},t.el.tr(t.el.th("Comment"),t.el.th("Date"),t.el.th("User"),t.el.th("Changed")),t.el.tbody()))),o=n.widgets.glyphIconButton("play",{title:"Open the highlighted version in SWISH",class:"btn-primary"}),l.append(o),t(o).on("click",function(e){var n=a.find("tr.success");if(1==n.length){var i=n.data("commit");"HEAD"==s.commits[i].symbolic?file=s.commits[i].name:file=i,a.parents(".swish").swish("playFile",file),t("#ajaxModal").modal("hide")}return!1});var u=e.http.locations.web_storage+encodeURI(c.name);t.ajax({url:u,contentType:"application/json",type:"GET",data:{format:"history",depth:r.depth,to:s.commit},success:function(t){a.gitty("fillHistoryTable",t),s.history=s.commit},error:function(t){i.ajaxError(jqXHR)}})}})},fillHistoryTable:function(e){for(var n=this,i=this.data("gitty"),o=this.find(".table.gitty-history tbody"),a=e.history?e.history:e,s=0;s<a.length;s++){var l=a[s];i.commits[l.commit]||(i.commits[l.commit]=l)}e.skipped&&o.append(t.el.tr(t.el.td({class:"skipped-commits",colspan:4},"(Skipped "+e.skipped+" commits)")));for(var s=0;s<a.length;s++){var c,l=a[s];if(s==a.length-1&&l.previous&&!i.commit[l.previous])break;var u={"data-commit":l.commit};i.commit==l.commit&&(u.class="success"),c=t.el.tr(u,l.commit_message?t.el.td({class:"commit-message"},l.commit_message):t.el.td({class:"commit-message no-comment"},"No comment"),t.el.td({class:"date"},new Date(1e3*l.time).toLocaleString()),t.el.td({class:"author"},l.author||"No author"),t.el.td({class:"changes"},function(e){var n,o,a=t.el.span();if(e.previous){if((n=i.commits[e.previous])&&(o=r(e,n))){var s=0;for(var l in o)if(o.hasOwnProperty(l)){var c="name"==l?"forked "+n.name:l;t(a).append(0==s++?void 0:", ",t.el.span({class:"change-type"},c))}}}else t(a).append("initial");return a}(l))),o.append(c)}o.on("click","tr",function(e){var i=t(e.target).parents("tr"),r=i.data("commit");n.gitty("setCommit",r)})},setCommit:function(t){var e=this.data("gitty"),n=this.parent(".modal-content").find("h2");return n.html(""),n.append(this.gitty("title",e.commits[t])),this.find("tr.success").removeClass("success"),this.find("tr[data-commit="+t+"]").addClass("success"),e.commit=t,this},showDiff:function(){return this.each(function(){var n=t(this),r=n.data("gitty");if(r.diff!=r.commit){n.find(".gitty-diff").html("");var o=e.http.locations.web_storage+encodeURI(r.commit);t.ajax({url:o,contentType:"application/json",type:"GET",data:{format:"diff"},success:function(t){n.gitty("fillDiff",t),r.diff=r.commit},error:function(t){i.ajaxError(t)}})}})},fillDiff:function(t){t.tags&&this.gitty("diffTags",t.tags),t.data&&this.gitty("udiffData",t.data)},diffTags:function(e){function n(e,n){o.append(t.el.span({class:"diff-tag "+n},e))}var i=this.find(".gitty-diff"),r=t(t.el.div({class:"diff-tags"},t.el.label("Tags"))),o=t(t.el.span({class:"diff-tags"}));if(r.append(o),e.deleted.length){o.append("Removed: ");for(var a=0;a<e.deleted.length;a++)n(e.deleted[a],"deleted")}if(e.added.length){o.append(e.deleted.length?", ":"","Added: ");for(var a=0;a<e.added.length;a++)n(e.added[a],"added")}return i.append(r),this},udiffData:function(e){for(var n=this.find(".gitty-diff"),i=e.split("\n"),r=t(t.el.pre({class:"udiff"})),o=0;o<i.length;o++){var a=i[o],s={"@":"udiff-hdr"," ":"udiff-ctx","+":"udiff-add","-":"udiff-del"};r.append(t.el.span({class:s[a.charAt(0)]},a),t.el.br())}n.append(r)}};t.fn.gitty=function(e){return o[e]?o[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.gitty"):o._init.apply(this,arguments)}}(jQuery),{diffMeta:r,reduceMeta:o,diffTags:a}});var __whitespace={" ":!0,"\t":!0,"\n":!0,"\f":!0,"\r":!0},difflib={defaultJunkFunction:function(t){return __whitespace.hasOwnProperty(t)},stripLinebreaks:function(t){return t.replace(/^[\n\r]*|[\n\r]*$/g,"")},stringAsLines:function(t){for(var e=t.indexOf("\n"),n=t.indexOf("\r"),i=e>-1&&n>-1||n<0?"\n":"\r",r=t.split(i),o=0;o<r.length;o++)r[o]=difflib.stripLinebreaks(r[o]);return r},__reduce:function(t,e,n){if(null!=n)var i=n,r=0;else{if(!e)return null;var i=e[0],r=1}for(;r<e.length;r++)i=t(i,e[r]);return i},__ntuplecomp:function(t,e){for(var n=Math.max(t.length,e.length),i=0;i<n;i++){if(t[i]<e[i])return-1;if(t[i]>e[i])return 1}return t.length==e.length?0:t.length<e.length?-1:1},__calculate_ratio:function(t,e){return e?2*t/e:1},__isindict:function(t){return function(e){return t.hasOwnProperty(e)}},__dictget:function(t,e,n){return t.hasOwnProperty(e)?t[e]:n},SequenceMatcher:function(t,e,n){this.set_seqs=function(t,e){this.set_seq1(t),this.set_seq2(e)},this.set_seq1=function(t){t!=this.a&&(this.a=t,this.matching_blocks=this.opcodes=null)},this.set_seq2=function(t){t!=this.b&&(this.b=t,this.matching_blocks=this.opcodes=this.fullbcount=null,this.__chain_b())},this.__chain_b=function(){for(var t=this.b,e=t.length,n=this.b2j={},i={},r=0;r<t.length;r++){var o=t[r];if(n.hasOwnProperty(o)){var a=n[o];e>=200&&100*a.length>e?(i[o]=1,delete n[o]):a.push(r)}else n[o]=[r]}for(var o in i)i.hasOwnProperty(o)&&delete n[o];var s=this.isjunk,l={};if(s){for(var o in i)i.hasOwnProperty(o)&&s(o)&&(l[o]=1,delete i[o]);for(var o in n)n.hasOwnProperty(o)&&s(o)&&(l[o]=1,delete n[o])}this.isbjunk=difflib.__isindict(l),this.isbpopular=difflib.__isindict(i)},this.find_longest_match=function(t,e,n,i){for(var r,o=this.a,a=this.b,s=this.b2j,l=this.isbjunk,c=t,u=n,h=0,d=null,f={},p=[],g=t;g<e;g++){var m={},v=difflib.__dictget(s,o[g],p);for(var y in v)if(v.hasOwnProperty(y)){if((d=v[y])<n)continue;if(d>=i)break;m[d]=r=difflib.__dictget(f,d-1,0)+1,r>h&&(c=g-r+1,u=d-r+1,h=r)}f=m}for(;c>t&&u>n&&!l(a[u-1])&&o[c-1]==a[u-1];)c--,u--,h++;for(;c+h<e&&u+h<i&&!l(a[u+h])&&o[c+h]==a[u+h];)h++;for(;c>t&&u>n&&l(a[u-1])&&o[c-1]==a[u-1];)c--,u--,h++;for(;c+h<e&&u+h<i&&l(a[u+h])&&o[c+h]==a[u+h];)h++;return[c,u,h]},this.get_matching_blocks=function(){if(null!=this.matching_blocks)return this.matching_blocks;for(var t,e,n,i,r,o,a,s,l,c=this.a.length,u=this.b.length,h=[[0,c,0,u]],d=[];h.length;)r=h.pop(),t=r[0],e=r[1],n=r[2],i=r[3],l=this.find_longest_match(t,e,n,i),o=l[0],a=l[1],(s=l[2])&&(d.push(l),t<o&&n<a&&h.push([t,o,n,a]),o+s<e&&a+s<i&&h.push([o+s,e,a+s,i]));d.sort(difflib.__ntuplecomp);var f,p,g,m=0,v=0,y=0,b=0,x=[];for(var w in d)d.hasOwnProperty(w)&&(b=d[w],f=b[0],p=b[1],g=b[2],m+y==f&&v+y==p?y+=g:(y&&x.push([m,v,y]),m=f,v=p,y=g));return y&&x.push([m,v,y]),x.push([c,u,0]),this.matching_blocks=x,this.matching_blocks},this.get_opcodes=function(){if(null!=this.opcodes)return this.opcodes;var t=0,e=0,n=[];this.opcodes=n;var i,r,o,a,s,l=this.get_matching_blocks();for(var c in l)l.hasOwnProperty(c)&&(i=l[c],r=i[0],o=i[1],a=i[2],s="",t<r&&e<o?s="replace":t<r?s="delete":e<o&&(s="insert"),s&&n.push([s,t,r,e,o]),t=r+a,e=o+a,a&&n.push(["equal",r,t,o,e]));return n},this.get_grouped_opcodes=function(t){t||(t=3);var e=this.get_opcodes();e||(e=[["equal",0,1,0,1]]);var n,i,r,o,a,s;"equal"==e[0][0]&&(n=e[0],i=n[0],r=n[1],o=n[2],a=n[3],s=n[4],e[0]=[i,Math.max(r,o-t),o,Math.max(a,s-t),s]),"equal"==e[e.length-1][0]&&(n=e[e.length-1],i=n[0],r=n[1],o=n[2],a=n[3],s=n[4],e[e.length-1]=[i,r,Math.min(o,r+t),a,Math.min(s,a+t)]);var l=t+t,c=[],u=[];for(var h in e)e.hasOwnProperty(h)&&(n=e[h],i=n[0],r=n[1],o=n[2],a=n[3],s=n[4],"equal"==i&&o-r>l&&(c.push([i,r,Math.min(o,r+t),a,Math.min(s,a+t)]),u.push(c),c=[],r=Math.max(r,o-t),a=Math.max(a,s-t)),c.push([i,r,o,a,s]));return!c||1==c.length&&"equal"==c[0][0]||u.push(c),u},this.ratio=function(){return matches=difflib.__reduce(function(t,e){return t+e[e.length-1]},this.get_matching_blocks(),0),difflib.__calculate_ratio(matches,this.a.length+this.b.length)},this.quick_ratio=function(){var t,e;if(null==this.fullbcount){this.fullbcount=t={};for(var n=0;n<this.b.length;n++)e=this.b[n],t[e]=difflib.__dictget(t,e,0)+1}t=this.fullbcount;for(var i={},r=difflib.__isindict(i),o=numb=0,n=0;n<this.a.length;n++)e=this.a[n],r(e)?numb=i[e]:numb=difflib.__dictget(t,e,0),i[e]=numb-1,numb>0&&o++;return difflib.__calculate_ratio(o,this.a.length+this.b.length)},this.real_quick_ratio=function(){var t=this.a.length,e=this.b.length;return _calculate_ratio(Math.min(t,e),t+e)},this.isjunk=n||difflib.defaultJunkFunction,this.a=this.b=null,this.set_seqs(t,e)}};define("difflib",function(){}),diffview={buildView:function(t){function e(t,e){var n=document.createElement(t);return n.className=e,n}function n(t,e){var n=document.createElement(t);return n.appendChild(document.createTextNode(e)),n}function i(t,e,n){var i=document.createElement(t);return i.className=e,i.appendChild(document.createTextNode(n)),i}function r(t,r,o,a,s){return r<o?(t.appendChild(n("th",(r+1).toString())),t.appendChild(i("td",s,a[r].replace(/\t/g,"    "))),r+1):(t.appendChild(document.createElement("th")),t.appendChild(e("td","empty")),r)}function o(t,e,r,o,a){t.appendChild(n("th",null==e?"":(e+1).toString())),t.appendChild(n("th",null==r?"":(r+1).toString())),t.appendChild(i("td",a,o[null!=e?e:r].replace(/\t/g,"    ")))}var a=t.baseTextLines,s=t.newTextLines,l=t.opcodes,c=t.baseTextName?t.baseTextName:"Base Text",u=t.newTextName?t.newTextName:"New Text",h=t.contextSize,d=0==t.viewType||1==t.viewType?t.viewType:0;if(null==a)throw"Cannot build diff view; baseTextLines is not defined.";if(null==s)throw"Cannot build diff view; newTextLines is not defined.";if(!l)throw"Canno build diff view; opcodes is not defined.";var f=document.createElement("thead"),p=document.createElement("tr");f.appendChild(p),d?(p.appendChild(document.createElement("th")),p.appendChild(document.createElement("th")),p.appendChild(i("th","texttitle",c+" vs. "+u))):(p.appendChild(document.createElement("th")),p.appendChild(i("th","texttitle",c)),p.appendChild(document.createElement("th")),p.appendChild(i("th","texttitle",u))),f=[f];for(var g,m=[],v=0;v<l.length;v++){code=l[v],change=code[0];for(var y=code[1],b=code[2],x=code[3],w=code[4],_=Math.max(b-y,w-x),S=[],C=[],T=0;T<_;T++){if(h&&l.length>1&&(v>0&&T==h||0==v&&0==T)&&"equal"==change){var k=_-(0==v?1:2)*h;if(k>1){if(S.push(p=document.createElement("tr")),y+=k,x+=k,T+=k-1,p.appendChild(n("th","...")),d||p.appendChild(i("td","skip","")),p.appendChild(n("th","...")),p.appendChild(i("td","skip","")),v+1==l.length)break;continue}}S.push(p=document.createElement("tr")),d?"insert"==change?o(p,null,x++,s,change):"replace"==change?(C.push(g=document.createElement("tr")),y<b&&o(p,y++,null,a,"delete"),x<w&&o(g,null,x++,s,"insert")):"delete"==change?o(p,y++,null,a,change):o(p,y++,x++,a,change):(y=r(p,y,b,a,change),x=r(p,x,w,s,change))}for(var T=0;T<S.length;T++)m.push(S[T]);for(var T=0;T<C.length;T++)m.push(C[T])}m.push(p=i("th","author","diff view generated by ")),p.setAttribute("colspan",d?3:4),p.appendChild(g=n("a","jsdifflib")),g.setAttribute("href","http://github.com/cemerick/jsdifflib"),f.push(p=document.createElement("tbody"));for(var v in m)m.hasOwnProperty(v)&&p.appendChild(m[v]);p=e("table","diff"+(d?" inlinediff":""));for(var v in f)f.hasOwnProperty(v)&&p.appendChild(f[v])
+;return p}},define("diffview",function(){}),define("diff",["jquery","difflib","diffview"],function(){!function(t){var e={_init:function(e){return this.each(function(){var n=difflib.stringAsLines(e.base),i=difflib.stringAsLines(e.head),r=new difflib.SequenceMatcher(n,i),o=r.get_opcodes(),a=void 0==e.contextSize?3:e.contextSize;this.appendChild(diffview.buildView({baseTextLines:n,newTextLines:i,opcodes:o,baseTextName:e.baseName||"Base text",newTextName:e.headName||"Current text",contextSize:a,viewType:t("inline").checked?1:0}))})}};t.fn.diff=function(n){return e[n]?e[n].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof n&&n?void t.error("Method "+n+" does not exist on jQuery.diff"):e._init.apply(this,arguments)}}(jQuery)}),define("storage",["jquery","config","modal","form","gitty","history","tabbed","utils","laconic","diff"],function(t,e,n,i,r,o,a,s){function l(t){return t?t.split(".").slice(0,-1).join("."):null}function c(e){if(e){for(var n=e.split("\n"),i=t(t.el.pre({class:"udiff"})),r=0;r<n.length;r++){var o=n[r],a={"@":"udiff-hdr"," ":"udiff-ctx","+":"udiff-add","-":"udiff-del"};i.append(t.el.span({class:a[o.charAt(0)]},o),t.el.br())}return i}return t(t.el.div({class:"udiff"},"No changes"))}function u(e){function n(e,n){r.append(t.el.span({class:n},e),t.el.br())}for(var i=e.split("\n"),r=t(t.el.pre({class:"udiff"})),o=null,a=0;a<i.length;a++){var s=i[a];"<<<<<<<"==s?(n(s,"edit-conflict-sep"),o="edit-conflict-me"):"edit-conflict-me"==o&&"======="==s?(n(s,"edit-conflict-sep"),o="edit-conflict-them"):"edit-conflict-them"==o&&">>>>>>>"==s?(n(s,"edit-conflict-sep"),o=null):o&&n(s,o)}return r}!function(t){function h(e,n){var i=t.el.table({class:"table table-striped"});t(i).append(t.el.tr(t.el.th("Path"),t.el.td(n.path))),t(i).append(t.el.tr(t.el.th("Modified"),t.el.td(new Date(1e3*n.last_modified).toLocaleString()))),t(i).append(t.el.tr(t.el.th("Loaded"),t.el.td(n.modified_since_loaded?"yes (modified)":n.loaded?"yes":"no"))),e.append(i)}function d(t,e){return"file_exists"==e.error?t+": file exists: "+e.file:JSON.stringify(e)}var f={typeName:"program",is_clean:!0,markClean:function(t){}},p={_init:function(e){return this.each(function(){function n(e,n){var i=t(e.target);if(i.hasClass("storage")&&i.is(":visible")){if("propagate"==i.storage.apply(i,Array.prototype.slice.call(arguments,1)))return}e.stopPropagation()}var i=t(this),r=t.extend({},f,e);i.data("storage",r),i.addClass("storage unloadable"),i.storage("update_tab_title"),i.on("save",function(t,e){n(t,"save",e)}),i.on("download",function(t){n(t,"download")}),i.on("fileInfo",function(t){n(t,"info")}),i.on("diff",function(t){n(t,"diff")}),i.on("revert",function(t){n(t,"revert")}),i.on("reload",function(t){n(t,"reload")}),i.on("chat-about-file",function(t){n(t,"chat")}),i.on("follow-file",function(t){n(t,"follow")}),i.on("activate-tab",function(t){}),i.on("data-is-clean",function(t,e){i.storage("markClean",e)}),i.on("fullscreen",function(t,e){e||i.storage("update_tab_title")}),i.on("unload",function(t,e){e.rc=i.storage("unload","beforeunload",t)}),i.storage("chat",(r.meta||{}).chat||"update")})},supportsType:function(t){var e=this.data("storage"),n=a.tabTypes[e.typeName];if("string"==typeof t&&(t={data:t}),t.meta&&t.meta.name||t.url){var i=t.meta&&t.meta.name?t.meta.name:t.url;if(a.type(i).typeName!=n.typeName)return!1}return!0},setSource:function(n){var i=this.data("storage");if("string"==typeof n&&(n={data:n}),this.storage("supportsType",n))return 0!=this.storage("unload","setSource")&&(n.meta?(i.file=n.meta.name,i.meta=n.meta,i.url=null,"HEAD"==n.meta.symbolic&&(n.url=e.http.locations.web_storage+n.meta.name)):(i.file=null,i.meta=null),i.url=n.url,i.st_type=n.st_type,i.chats=n.chats,i.setValue(n),i.cleanGeneration=i.changeGen(),i.cleanData=i.getValue(),i.cleanCheckpoint=n.cleanCheckpoint||"load",i.markClean(!0),this.storage("update_tab_title"),n.url||(n.url=e.http.locations.swish),n.noHistory||o.push({url:n.url,reason:"load"}),this.storage("chat",n.chat||(n.meta||{}).chat||"update"),t(".storage").storage("chat_status",!0),this)},is_clean:function(){var t=this.data("storage");return t.isClean(t.cleanGeneration)},setValue:function(t){var e=this.data("storage");return e.setValue(t),this.trigger("data-is-clean",e.isClean(e.cleanGeneration)),this},update_tab_title:function(e){return this.each(function(){var n=t(this),i=n.storage("docid");if("chats++"==e)n.tabbed("chats++",i);else{var r,o,c=n.data("storage"),u=c.file||c.url;u&&(r=a.type(u))||(r=a.tabTypes[c.typeName]),u?(o=l(s.basename(u)),c.meta&&"HEAD"!=c.meta.symbolic&&c.meta.commit&&(o+="@"+c.meta.commit.substring(0,7))):o=r.label,i&&c.chats&&(c.chats.docid=i),n.tabbed("title",o,r.dataType),n.tabbed("chats",c.chats)}})},load:function(i){if(i){var r=this;this.data("storage");t.ajax({url:e.http.locations.web_storage+i,dataType:"text",success:function(t){r.storage("setSource",{data:t,meta:{name:i}})},error:function(t){n.ajaxError(jqXHR)}})}return this},revert:function(){var t=this.data("storage");return t.setValue(t.cleanData),t.cleanGeneration=t.changeGen(),t.markClean(!0),this},reload:function(i){var r=this,o=r.data("storage");i=i||o.file;var a=e.http.locations.web_storage+encodeURI(i);return t.ajax({url:a,type:"GET",data:{format:"json"},success:function(e){e.url=a,e.st_type="gitty",e.noHistory=!0,r.storage("setSource",e),t("#chat").trigger("send",{type:"reloaded",file:i,commit:e.meta.commit})},error:function(t){n.ajaxError(t)}}),this},save:function(i,s){var l,c=this.data("storage"),u=a.tabTypes[c.typeName],h=e.http.locations.web_storage,f="POST",p=this;if(("filesys"==c.st_type||"external"==c.st_type)&&c.url)return this.storage("saveURL");if("as"==i)return this.storage("saveAs"),this;if(!c.file||"only-meta-data"!=s&&(i&&i.default||i&&i.name!=c.file)||(h+=encodeURI(c.file),f="PUT"),"only-meta-data"==s){if(t.isEmptyObject(r.reduceMeta(i,c.meta)))return void alert("No change");l={update:"meta-data"}}else if("POST"==f)l={data:c.getValue(),type:u.dataType};else if(c.isClean(c.cleanGeneration)){if(null==r.diffTags(c.meta.tags,i.tags))return void alert("No change")}else l={data:c.getValue(),type:u.dataType};return i&&(l.meta=i),c.meta&&(l.previous=c.meta.commit),t.ajax({url:h,dataType:"json",contentType:"application/json",type:f,data:JSON.stringify(l),success:function(e){e.error?n.alert(d("Could not save",e)):(c.meta&&c.meta.example!=e.meta.example&&p.closest(".swish").trigger("examples-changed"),c.file=e.file,c.meta=e.meta,c.st_type="gitty",c.cleanGeneration=c.changeGen(),c.cleanData=c.getValue(),c.cleanCheckpoint="save",c.markClean(!0),n.feedback({html:"Saved",owner:p}),"POST"==f&&(c.chats={docid:p.storage("docid"),total:0}),p.storage("update_tab_title"),p.storage("chat",(c.meta||{}).chat||"update"),p.storage("load_messages",e.messages||[]),t(".storage").storage("chat_status",!0),o.push({url:e.url,reason:"save"}))},error:function(t,e,i){409==t.status?p.storage("resolveEditConflict",JSON.parse(t.responseText)):403==t.status?n.alert("Permission denied.  Please try a different name"):(alert('Save failed; click "ok" to try again'),p.storage("saveAs"))}}),this},saveAs:function(e){function n(){this.append(t.el.form({class:"form-horizontal"},i.fields.hidden("identity",d.identity),i.fields.hidden("default",s.default),i.fields.hidden("chat",s.chat),d.identity?void 0:i.fields.hidden("avatar",d.avatar),i.fields.fileName(u?null:o.file,s.public,s.example),i.fields.title(s.title),i.fields.author(f,d.identity),c?i.fields.commit_message():void 0,i.fields.tags(s.tags),i.fields.modify(p,r),i.fields.follow(d.email),i.fields.buttons({label:u?"Fork "+h.label:c?"Update "+h.label:"Save "+h.label,action:function(t,e){return l.storage("save",e),!1}})))}var r,o=this.data("storage"),s=o.meta||{},l=this,c=Boolean(o.file),u=o.meta&&"HEAD"!=s.symbolic&&!s.default,h=a.tabTypes[o.typeName],d=t("#login").login("get_profile",["display_name","avatar","email","identity"]),f=d.display_name,p=s.modify;return void 0===s.public&&(s.public=!0),d.identity?p||(p=["login","owner"]):p=["any","login","owner"],r=!!d.identity&&(d.identity==s.identity||!(s.identity||s.user)),e=e||{},i.showDialog({title:e.title?e.title:u?"Fork from "+s.commit.substring(0,7):c?"Save new version":"Save "+h.label+" as",body:n}),this},saveURL:function(){var e=this.data("storage"),i=e.getValue(),r=a.type(e.url)||{},o=this;return e.isClean(e.cleanGeneration)?(alert("No change"),this):(t.ajax({url:e.url,dataType:"json",contentType:r.contentType||"text/plain",type:"PUT",data:i,success:function(t){t.error?n.alert(d("Could not save",t)):(e.cleanGeneration=e.changeGen(),e.cleanData=e.getValue(),e.cleanCheckpoint="save",e.markClean(!0),n.feedback({html:"Saved",owner:o}))},error:function(t){if(403==t.status){var i=e.url;delete e.meta,delete e.st_type,delete e.url,o.storage("saveAs",{title:"<div class='warning'>Could not save to "+i+"</div> Save a copy as"})}else n.ajaxError(t)}}),this)},activate:function(){var t=this.data("storage");return t&&t.url&&o.push({url:t.url,reason:"activate"}),this},getState:function(e){var n={tabs:[]};return this.each(function(){var i,r=t(this),o=r.data("storage"),a=r.meta||{};if((o.file||o.url)&&o.isClean&&o.cleanGeneration){!a.name&&o.file&&(a.name=o.file);var s={file:a.name,st_type:o.st_type,url:o.url};r.storage("getActive")&&(s.active=!0),(i=r.storage("chatroom_size"))&&(s.chatroom=i),n.tabs.push(s),!e&&o.isClean(o.cleanGeneration)||(s.meta=a,s.data=o.getValue())}}),n},restoreLocal:function(t){var e,n=localStorage.getItem("$file$"+t);try{e=JSON.parse(n),"object"!=typeof e&&(e=void 0)}catch(t){e=void 0}e?this.storage("setSource",e):this.storage("reload",t)},resolveEditConflict:function(e){function n(){function n(e,n,i,r){var o={role:"presentation"},a=[];return n&&a.push("active"),r&&a.push("disabled"),a!=[]&&(o.class=a.join(" ")),t.el.li(o,t.el.a({href:"#"+i,"data-toggle":"tab"},e))}function i(e,n){tabs.append(t.el.div({class:"tab-pane fade "+e+" "+n,id:e})),o.find('[href="#'+e+'"]').on("show.bs.tab",function(t){o.storage(e)})}var o=t(this);o.addClass("edit-conflict"),tabs=t(t.el.div({class:"tab-content"})),o.append(t.el.ul({class:"nav nav-tabs"},n("My edits",!0,"merge-my-edits"),n("Their edits",!1,"merge-server-edits"),n("Conflicts",!1,"merge-conflicts"))),o.append(tabs),i("merge-my-edits","in active"),i("merge-server-edits",""),i("merge-conflicts",""),o.data("edit-conflict",e),o.storage("merge-my-edits"),o.append(r=t.el.div({class:"form-group"},t.el.button({name:"merge",class:"btn btn-primary"},"Merge"),t.el.button({name:"discard-my-edits",class:"btn btn-primary"},"Discard my changes"),t.el.button({name:"discard-server-edits",class:"btn btn-primary"},"Discard changes on server"),t.el.button({name:"cancel",class:"btn btn-danger","data-dismiss":"modal"},"Cancel"))),t(r).on("click","button",function(e){return o.storage("editConflictAction",t(e.target).attr("name")),t(e.target).parents(".modal").modal("hide"),e.preventDefault(),!1})}var r;return e.storage=this,i.showDialog({title:"Edit conflict",body:n}),this},"merge-my-edits":function(){var e=t(this).data("edit-conflict");t(this).find(".merge-my-edits").empty().append(c(e.edit.me.data))},"merge-server-edits":function(){var e=t(this).data("edit-conflict");t(this).find(".merge-server-edits").empty().append(c(e.edit.server.data))},"merge-conflicts":function(){var e=t(this).data("edit-conflict"),n=t(this).find(".merge-conflicts");n.empty(),0!=e.patch_status?n.append(u(e.merged)):n.html("No merge conflicts")},editConflictAction:function(e){var n=t(this).data("edit-conflict"),i=t(n.storage).data("storage");if("merge"==e)i.setValue(n.merged),i.meta.commit=n.edit.server.to.commit;else if("discard-my-edits"==e)t(n.storage).storage("reload");else if("discard-server-edits"==e){var i=t(n.storage).data("storage");i.meta.commit=n.edit.server.to.commit}},download:function(){var e=this.data("storage"),n=a.tabTypes[e.typeName],i=e.getValue(),r="data:text/plain;charset=UTF-8,"+encodeURIComponent(i),o=t.el.a({href:r,download:e.file||"swish."+n.dataType});return this.append(o),o.click(),t(o).remove(),this},getData:function(e){var n=[];return e=e||{},this.each(function(){function i(t){r.meta[t]&&(o[t]=r.meta[t])}var r=t(this).data("storage"),o={};if(o.type=r.st_type,r.url&&(o.url=r.url),r.meta&&(i("name"),i("path"),i("modified"),i("loaded"),i("modified_since_loaded"),i("module")),t(this).storage("getActive")&&(o.active=!0),!e.type||e.name&&e.name.split(".").pop()==e.type){if(e.data){var a=r.getValue();o.modified=a!=r.cleanData,(1==e.data||o.modified&&"if_modified"==e.data)&&(o.data=a)}n.push(o)}}),n},match:function(e){for(var n=0;n<this.length;n++){me=t(this[n]);var i=me.data("storage");if(e.file&&e.file==i.file)return me;if(e.url&&e.url==i.url)return me}},expose:function(t){var e=this.closest(".tab-pane");if(1==e.length){return e.closest(".tabbed").tabbed("show",e.attr("id")),t&&n.feedback({html:t,owner:this}),this}},info:function(){function e(){"gitty"==r.st_type?(r.editor=a,this.gitty(r)):"filesys"==r.st_type?h(this,o):r.st_type||this.append(t.el.p("The source is not associated with a file. ","Use ",t.el.b("Save ...")," to save the source with meta information."))}var n,r=this.data("storage"),o=r.meta||{},a=this;return n="gitty"==r.st_type?t().gitty("title",o):"filesys"==r.st_type?"File system -- "+s.basename(o.path):"external"==r.st_type?"External -- "+r.url:"Scratch source",i.showDialog({title:n,body:e}),this},diff:function(){function e(){var e=t.el.div(),i=n.getValue();if(this.append(e),i==n.cleanData)t(e).append(t.el.p("No changes"));else{var o,a=t.el.div({class:"btn-group diff",role:"group"},t.el.button({name:"close","data-dismiss":"modal",class:"btn btn-primary"},"Close"),o=t.el.button({name:"revert",class:"btn btn-danger","data-dismiss":"modal"},"Revert changes"));t(e).diff({base:n.cleanData,head:i,baseName:r[n.cleanCheckpoint]}),this.append(t.el.div({class:"wrapper text-center"},a)),t(o).on("click",function(e){t(".swish-event-receiver").trigger("revert")}),this.parents("div.modal-dialog").addClass("modal-wide")}}var n=this.data("storage"),r={load:"Loaded text",new:"New text",save:"Saved text"};return i.showDialog({title:"Changes since "+r[n.cleanCheckpoint],body:e}),this},getSelection:function(){if(this.hasClass("prolog-editor")){var t=this.prologEditor("getSelection");return t?t[0].selections:null}if(this.hasClass("notebook"))return this.notebook("getSelection");console.log("Don't know how to get selection from",this)},getSelectionLabel:function(t){function e(t){for(var e="",n=0;n<t.length;n++){var i=t[n];""!=e&&(e+=";"),e+="@L"+(i.from.line+1),i.to.line!=i.from.line&&(e+="-"+(i.to.line+1))}return e}if(t[0].selections){for(var n="",i=0;i<t.length;i++){var r=t[i];""!=n&&(n+=","),n+=(r.cell||"")+e(r.selections)}return n}return e(t)},restoreSelection:function(t){return this.hasClass("prolog-editor")?this.prologEditor("restoreSelection",t):this.hasClass("notebook")?this.notebook("restoreSelection",t):void console.log(t)},getActive:function(){return 1==t(this).closest(".tab-pane.active").length},docid:function(t,e){if(e=e||this.data("storage"),!t||t==e.st_type){var n=e.meta||{};if("gitty"==e.st_type)return"gitty:"+n.name;if("filesys"==e.st_type)return"filesys:"+n.path;if("external"==e.st_type)return"url:"+e.url}},chat:function(e){var i=this.data("storage"),r=this.storage("docid","gitty");if(r){var o=this.closest(".tab-pane").find(".chatroom");if(o.length>0)"update"==e?o.chatroom("docid",r,"close"):s.flash(o);else if("update"!=e){o=t(t.el.div({class:"chatroom"}));var a;a="number"==typeof e?e:"large"==e?80:20,o.chatroom({docid:r}),this.tile("split",o,"below",a,150).addClass("chat-container")}}else"update"==e?this.storage("close_chat"):i.st_type?n.alert("The chat facility is only available for user-saved files.<br>You can use the <b>Open hangout</b> menu from the top-right bell to access the hangout room."):n.alert("You can only chat about a saved document.<br>Please save your document and try again.");return this},close_chat:function(){this.closest(".chat-container").find(".chatroom").chatroom("close")},chatroom_size:function(){var t=this.closest(".tab-pane"),e=t.find(".chatroom").closest(".pane-wrapper");if(e.length>0){var n=t.height();return 0==n?20:Math.round(100*e.height()/n)}return!1},chat_message:function(e){return e.displayed||0!=e.create?this.each(function(){var n=t(this);if(e.docid==n.storage("docid")){var i=n.data("storage");i.chats?(void 0!=i.chats.total&&i.chats.total++,void 0!=i.chats.count&&i.chats.count++):i.chats={total:1},n.storage("update_tab_title","chats++")}}):this},load_messages:function(e){for(var i,r=0,o=0,a="",s=0;s<e.length;s++){var l=e[s];if("warning"==l.kind)r++;else{if("error"!=l.kind){if(l.code==i){i=l.data[0];continue}continue}o++}l.html?a+=l.html:a+=t(t.el.div(t.el.pre({class:"msg-"+l.kind},l.data[0]))).html(),this.prologEditor("highlightError",l)}if(o||r){var c;c=t(t.el.div(t.el.p("The following messages where generated while compiling the file.  These messages are inserted in the editor."))).html(),n.alert(c+a)}else i&&n.feedback({html:i,owner:this});return this},follow:function(){var t=this.storage("docid","gitty");t?n.server_form({title:"Follow file options",url:e.http.locations.follow_file_options,data:{docid:t}}):n.alert("Sorry, can only follow files")},unload:function(t,e){var n=this.data("storage");if(n&&(n.meta&&o.addRecent({st_type:"gitty",id:n.meta.name}),n.cleanData&&n.getValue&&n.cleanData!=n.getValue())){if("beforeunload"==t){var i="The source editor has unsaved changes.\nThese will be lost if you leave the page";return e=e||window.event,e&&(e.returnValue=i),i}var i="The source editor has unsaved changes.\nThese will be lost"+("setSource"==t?" if you load a new program":"closetab"==t?" close this tab":"");return confirm(i)}},close:function(){},markClean:function(t){this.data("storage").is_clean=t},chat_status:function(e){var n=[];this.each(function(){var e=t(this).data("storage");if("gitty"==e.st_type&&e.meta&&e.meta.name){var i={file:e.meta.name};e.is_clean||(i.modified=!0),t(this).is(":visible")&&(i.visible=!0),n.push(i)}}),(e||n.length>0)&&t("#chat").trigger("send",{type:"has-open-files",files:n})}};t.fn.storage=function(e){return p[e]?p[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.storage"):p._init.apply(this,arguments)}}(jQuery)}),define("cm/mode/prolog/prolog-ctype",[],function(){function t(t){var i=t.charCodeAt(0),r=Math.floor(i/256);if(r<e){var o=n[r];return"number"==typeof o?o:o.charCodeAt(255&i)}return 0}
 var e=4353,n=["@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\0@      ","","","\0\0\0\0\0\0\0\0\0\0","  ","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","@@@@@\0@\0@","\0@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0      \0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0      \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0   \0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0       \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0      \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","          \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0",3,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",'\0\0\0\0\0"""""""""           \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',"",3,"\b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0          \0\0\0\0\0\0","@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"\0\0\0',"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\b\b\b\b\b\b\b\b\b\b\b@@@@@\b\b@@@@@\b\b@@@@@\0@@@@@@@@@@ \0\0                \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0       \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","                 \0\0\0\0\0\0",16,"\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0                                                                                  ",16,16,"\0                              ",16,16,16,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0 ","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\b\0\0\0","\0\0\0\0\0\0\0\0\0    \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0                                                          \0",16,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,"\0\0\0\0\0\0\0\0\0\0",3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",3,3,3,3,"\0\0\0\0\0\0\0\0\0\0\0\0",3,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0   \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0      \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@","@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@","@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@",3,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",3,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@@\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0                                             \0\0\0     \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0    \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,"\0\0\0\0\0\0\0\0\0\0        \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","      \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0        \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0  \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0        \0\0\0\0\0        \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0                               \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,"\0\0\0\0                    \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,0,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,0,0,0,0,0,0,3,3,3,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,0,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"\0\0\0\0\0\0\0\0\0\0","\0\0@@@@@@@@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0                  \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0","\0\0","\0\0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","           \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,"\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"\0@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\0\0","@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\0\0",0]
 ;return{flags:t,id_start:function(e){return 0!=(1&t(e))},id_continue:function(e){return 0!=(2&t(e))},uppercase:function(e){return 0!=(4&t(e))},separator:function(e){return 0!=(8&t(e))},symbol:function(e){return 0!=(16&t(e))},other:function(e){return 0!=(32&t(e))},control:function(e){return 0!=(64&t(e))}}}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/mode/prolog/prolog",["../../lib/codemirror","./prolog-ctype"],t):t(CodeMirror)}(function(t,e){"use strict";t.defineMode("prolog",function(n,i){function r(t,e,n){return e.tokenize=n,n(t,e)}function o(t,e,n){if(n>0){for(;n-- >0;)if(!e.test(t.next()))return!1}else for(;e.test(t.peek());)t.next();return!0}function a(t){var e=t.next();if(S.test(e))return!0;switch(e){case"u":return!!w.unicodeEscape&&o(t,T,4);case"U":return!!w.unicodeEscape&&o(t,T,8);case null:return!0;case"c":return t.eatSpace(),!0;case"x":return o(t,T,2)}return!!C.test(e)&&(!!o(t,C,-1)&&("\\"==t.peek()&&t.next(),!0))}function s(t,e,n){for(var i;null!=(i=t.next());){if(i==n&&n!=t.peek())return e.nesting.pop(),!1;if("\\"==i&&!a(t))return!1}return w.multiLineQuoted}function l(t){return t.nesting.slice(-1)[0]}function c(t){var e=l(t);e?0==e.arg?e.arg=1:"control"==e.type&&(t.goalStart=!1):t.goalStart=!1}function u(t){var e=l(t);e&&!e.alignment&&void 0!=e.arg&&(0==e.arg?e.alignment=e.leftCol?e.leftCol+4:e.column+4:e.alignment=e.column+1)}function h(t){var e=l(t);e?e.arg?e.arg++:"control"==e.type&&(t.goalStart=!0):t.goalStart=!0}function d(t){var e=l(t);return e?"control"==e.type:t.inBody}function f(t,e,n){return b=t,x=n,e}function p(t){return!(!t.eol()&&!/[\s%]/.test(t.peek()))}function g(t,n){var i=t.next();if("("==i)return"functor"==n.lastType?(n.nesting.push({functor:n.functorName,column:t.column(),leftCol:n.functorColumn,arg:0}),delete n.functorName,delete n.functorColumn):n.nesting.push({type:"control",closeColumn:t.column(),alignment:t.column()+4}),f("solo",null,"(");if("{"==i&&"tag"==n.lastType)return n.nesting.push({tag:n.tagName,column:t.column(),leftCol:n.tagColumn,arg:0}),delete n.tagName,delete n.tagColumn,f("dict_open",null);if("/"==i&&t.eat("*"))return r(t,n,y);if("%"==i)return t.skipToEnd(),f("comment","comment");if(c(n),k.test(i)){switch(i){case")":n.nesting.pop();break;case"]":return n.nesting.pop(),f("list_close",null,"]");case"}":var o=l(n),s=o&&o.tag?"dict_close":"brace_term_close";return n.nesting.pop(),f(s,null);case",":t.eol()&&(n.commaAtEOL=!0),h(n);case";":d(n)&&(n.goalStart=!0);break;case"[":return n.nesting.push({type:"list",closeColumn:t.column(),alignment:t.column()+2}),f("list_open",null,"[");case"{":return w.quasiQuotations&&t.eat("|")?(n.nesting.push({type:"quasi-quotation",alignment:t.column()+1}),f("qq_open","qq_open")):(n.nesting.push({type:"curly",closeColumn:t.column(),alignment:t.column()+2}),f("brace_term_open",null));case"|":if(w.quasiQuotations){if(t.eat("|"))return n.tokenize=v,f("qq_sep","qq_sep");if(t.eat("}"))return n.nesting.pop(),f("qq_close","qq_close")}d(n)&&(n.goalStart=!0)}return f("solo",null,i)}if('"'==i||"'"==i||"`"==i)return n.nesting.push({type:"quoted",alignment:t.column()+1}),r(t,n,m(i));if("0"==i){if(t.eat(/x/i))return t.eatWhile(/[\da-f]/i),f("number","number");if(t.eat(/o/i))return t.eatWhile(/[0-7]/i),f("number","number");if(t.eat(/'/)){return"\\"!=t.next()||a(t)?f("code","code"):f("error","error")}}if(/\d/.test(i)||/[+-]/.test(i)&&t.eat(/\d/))return w.groupedIntegers?t.match(/^\d*((_|\s+)\d+)*(?:\.\d+)?(?:[eE][+\-]?\d+)?/):t.match(/^\d*(?:\.\d+)?(?:[eE][+\-]?\d+)?/),f("-"==i?"neg-number":"+"==i?"pos-number":"number");if(e.symbol(i)){t.eatWhile(e.symbol);var u=t.current();return"."==u&&p(t)?l(n)?f("fullstop","error",u):f("fullstop","fullstop",u):A.test(u)?f("neck","neck",u):d(n)&&M.test(u)?(n.goalStart=!0,f("symbol","operator",u)):f("symbol","operator",u)}t.eatWhile(e.id_continue);var g=t.current();if("{"==t.peek()&&w.dicts)return n.tagName=g,n.tagColumn=t.column(),f("tag","tag",g);if("_"==i){if(1==g.length)return f("var","anon",g);var b=g.charAt(1);return e.uppercase(b)?f("var","var-2",g):f("var","var",g)}return e.uppercase(i)?f("var","var",g):"("==t.peek()?(n.functorName=g,n.functorColumn=t.column(),f("functor","functor",g)):f("atom","atom",g)}function m(t){return function(e,n){if(!s(e,n,t)){if(n.tokenize=g,"("==e.peek()){var i=e.current();return n.functorName=i,f("functor","functor",i)}if("{"==e.peek()&&w.dicts){var i=e.current();return n.tagName=i,f("tag","tag",i)}}return f(_[t],_[t])}}function v(t,e){for(var n,i=!1;n=t.next();){if("}"==n&&i){e.tokenize=g,t.backUp(2);break}i="|"==n}return f("qq_content","qq_content")}function y(t,e){for(var n,i=!1;n=t.next();){if("/"==n&&i){e.tokenize=g;break}i="*"==n}return f("comment","comment")}var b,x,w={quasiQuotations:!0,dicts:!0,unicodeEscape:!0,multiLineQuoted:!0,groupedIntegers:!0},_={'"':"string","'":"qatom","`":"bqstring"},S=/[abref\\'"nrtsv]/,C=/[0-7]/,T=/[0-9a-fA-F]/,k=/[[\]{}(),;|!]/,A=/^(:-|-->)$/,M=/^(,|;|->|\*->|\\+|\|)$/;return{startState:function(){return{tokenize:g,inBody:!1,goalStart:!1,lastType:null,nesting:new Array,curTerm:null,curToken:null}},token:function(t,e){if(null==e.curTerm&&i.metainfo&&(e.curTerm=0,e.curToken=0),t.sol()&&delete e.commaAtEOL,e.tokenize==g&&t.eatSpace())return t.eol()&&u(e),null;var n=e.tokenize(t,e);return t.eol()&&u(e),"neck"==b?(e.inBody=!0,e.goalStart=!0):"fullstop"==b&&(e.inBody=!1,e.goalStart=!1),e.lastType=b,"function"==typeof i.enrich&&(n=i.enrich(t,e,b,x,n)),n},indent:function(e,n){if(e.tokenize==y)return t.Pass;var i;return(i=l(e))?i.closeColumn&&!e.commaAtEOL?i.closeColumn:i.alignment:e.inBody?4:0},theme:"prolog",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"%"}}),t.defineMIME("text/x-prolog","prolog")}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/mode/prolog/prolog_keys",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){"use strict";t.commands.prologStartIfThenElse=function(e){var n=e.getCursor("start");return 1==e.getTokenAt(n,!0).state.goalStart?void e.replaceSelection("(   ","end"):t.Pass},t.commands.prologStartThen=function(e){function n(t){var e=t.nesting.length;return e>0?t.nesting[e-1]:null}var i=e.getCursor("start"),r=e.getTokenAt(i,!0);return i.ch==r.end&&"operator"==r.type&&"-"==r.string&&function(t){var e=n(t);return e?"control"==e.type:t.inBody}(r.state)?void e.replaceSelection(">  ","end"):t.Pass},t.commands.prologStartElse=function(e){var n=e.getCursor("start"),i=e.getTokenAt(n,!0);return 0!=i.start||n.ch!=i.end||/\S/.test(i.string)?t.Pass:void e.replaceSelection(";   ","end")},t.defineOption("prologKeys",null,function(e,n,i){if(i&&i!=t.Init&&e.removeKeyMap("prolog"),n){var r={name:"prolog","'('":"prologStartIfThenElse","'>'":"prologStartThen","';'":"prologStartElse","Ctrl-L":"refreshHighlight"};e.addKeyMap(r)}})}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/mode/prolog/prolog_query",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){"use strict";t.commands.prologMaybeFireQuery=function(e){for(var n=e.lineCount()-1;n>=0&&""==e.getLine(n).trim();)n--;if(n>=0){var i=e.getLine(n).length,r=e.getTokenAt({line:n,ch:i},!0);if("fullstop"==r.type){var o=e.getCursor();(o.line>n||o.line==n&&o.ch>=r.end)&&$(".swish-event-receiver").trigger("feedback",{html:"Use <b>Ctrl+Enter</b> to execute the query",owner:$(e.display.wrapper).closest(".pane-wrapper")})}}return t.Pass},t.commands.prologFireQuery=function(t){return t.prologFireQuery(t.getValue())},t.defineOption("prologQuery",null,function(e,n,i){if(i&&i!=t.Init&&e.removeKeyMap("prologQuery"),"function"==typeof n){var r={name:"prologQuery","Ctrl-Enter":"prologFireQuery",Enter:"prologMaybeFireQuery"};e.addKeyMap(r),e.prologFireQuery=n}})}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/mode/prolog/prolog_server",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){"use strict";function e(t){"object"==typeof t&&(this.enabled=t.enabled||!1,this.role=t.role||"source",t.sourceID&&(this.sourceID=t.sourceID),this.url={change:t.url+"change",tokens:t.url+"tokens",leave:t.url+"leave",info:t.url+"info"},this.delay=t.delay?t.delay:a,this.generationFromServer=-1,this.tmo=null)}function n(t,e){var n=t.state.prologHighlightServer;null!=n&&null!=n.url&&n.enabled&&(n.tmo&&t.askRefresh(),void 0!==n.changes&&n.changes.push(e),"setValue"!=e.origin&&-1!=n.generationFromServer||(n.changes=void 0,t.serverAssistedHighlight()))}function i(t){var e=t.state.prologHighlightServer;if(null!=e&&null!=e.url&&null!=e.uuid){var n=e.uuid;delete e.uuid,$.ajax({url:e.url.leave,async:!1,contentType:"application/json",type:"POST",dataType:"json",data:JSON.stringify({uuid:n})})}}function r(){var t=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var n=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"==e?n:7&n|8).toString(16)})}function o(t,e,n,i,r){function o(e){var n;if(i==e)return!0;if((n=e.lastIndexOf(i,1))>=0){for(var r=e.substring(i.length+n),o=0;o<r.length;o++)if(!t.eat(r.charAt(o)))return t.backUp(o),!1;return!0}return!1}function a(t){var e=t.slice(-1)[0];return e&&"quoted"==e.type}var c=this;if(null!=e.curTerm){var u,h;if(e.syntax_error)return"fullstop"==n&&(c.editor.askRefresh(),delete e.syntax_error),r;if(e.outOfSync){var d=e.outOfSync;if(d.skippedTerms<=3){if(d.skippedTokens.push({type:n,style:r,content:i}),h=function(){var t=e.outOfSync;t.okToken,t.okTerm;return t.skippedTerms,null}())return h;"fullstop"==n&&(d.skippedTokens=[],d.skippedTerms++)}return r}return(u=function(t){var e=c.metainfo[t.curTerm];if(!e)return null;var n=e[t.curToken];return n||null}(e))?void 0!==(h=function(t,e){if(t){if(!s[n])return i&&t.text==i?(e.curToken++,t.type):r;if(t.text&&i){if(o(t.text))return e.curToken++,t.type;return}if(s[n]==l[t.type])return"fullstop"==n?(e.curTerm++,e.curToken=0):a(e.nesting)||e.curToken++,t.type;if(s[n]==t.base)return e.curToken++,t.type;if("qatom"==n&&"atom"==l[t.type])return e.curToken++,t.type;if("number"==n&&"meta"==t.type)return e.curToken++,t.type;if("text"==l[t.type]&&("atom"==n||"qatom"==n||"string"==n))return e.curToken++,t.type;if("neg-number"==n&&t.text&&"-"==t.text)return e.curToken+=2,"number";if("pos-number"==n&&t.text&&"+"==t.text)return e.curToken+=2,"number"}}(u,e))?h:"syntax_error"==u.type?(e.syntax_error=!0,e.curToken=0,e.curTerm++,r):(function(){e.outOfSync||(console.log("Mismatch: ("+i+") "+n+"/"+u.type),e.outOfSync={okToken:e.curToken,okTerm:e.curTerm,skippedTerms:0,skippedTokens:[]}),c.editor.askRefresh()}(),r+" outofsync"):(c.editor.askRefresh(),r)}return r}var a=1e3;t.defineOption("prologHighlightServer",!1,function(t,r,o){function a(){i(t)}t.state.prologHighlightServer?null==r?(i(t),t.off("change",n),window.removeEventListener("unload",a),delete t.state.prologHighlightServer,t.setOption("mode",{name:"prolog"})):r.enabled!=o.enabled&&(t.state.prologHighlightServer.enabled=r.enabled,r.enabled?(t.on("change",n),window.addEventListener("unload",a),t.lineCount()>0&&t.serverAssistedHighlight(!0)):(i(t),t.off("change",n),window.removeEventListener("unload",a),t.setOption("mode",{name:"prolog"}))):r&&(t.state.prologHighlightServer=new e(r),t.state.prologHighlightServer.enabled&&(t.on("change",n),window.addEventListener("unload",a),t.lineCount()>0&&t.serverAssistedHighlight(!0)))}),t.prototype.askRefresh=function(t){var e=this,n=e.state.prologHighlightServer;null!=n&&(void 0===t&&(t=n.delay),n.tmo&&clearTimeout(n.tmo),n.tmo=setTimeout(function(){e.serverAssistedHighlight()},t))},t.prototype.serverAssistedHighlight=function(t){function e(){var t=n.getOption("mode");return"object"!=typeof t?t={name:"prolog",enrich:o,editor:n}:t.enrich||(t.enrich=o,t.editor=n),t}var n=this,i=n.state.prologHighlightServer,a={};if(i.tmo=null,null!=i&&null!=i.url&&i.enabled&&(!n.isClean(i.generationFromServer)||t)){if(i.uuid)a.uuid=i.uuid,void 0==i.changes?(a.text=n.getValue(),a.text.length>1e3&&(i.changes=[])):(a.changes=i.changes,i.changes=[]);else{if(a.text=n.getValue(),""==a.text.trim())return;i.uuid=r(),a.uuid=i.uuid}a.role=i.role,"function"==typeof i.sourceID&&(a.sourceID=i.sourceID()),i.generationFromServer=n.changeGeneration(),$.ajax({url:i.url.tokens,dataType:"json",contentType:"application/json",type:"POST",data:JSON.stringify(a),success:function(t,i){var r=e();r.metainfo=t.tokens,n.setOption("mode",r)},error:function(t){409==t.status&&delete i.uuid}})}},t.commands.refreshHighlight=function(t){t.serverAssistedHighlight(!0)};var s={var:"var",atom:"atom",qatom:"qatom",bqstring:"string",symbol:"atom",functor:"functor",tag:"tag",number:"number",string:"string",code:"number","neg-number":"number","pos-number":"number",list_open:"list_open",list_close:"list_close",qq_open:"qq_open",qq_sep:"qq_sep",qq_close:"qq_close",dict_open:"dict_open",dict_close:"dict_close",brace_term_open:"brace_term_open",brace_term_close:"brace_term_close",neck:"neck",fullstop:"fullstop"},l={var:"var",singleton:"var",uatom:"var",atom:"atom",qatom:"qatom",string:"string",codes:"string",chars:"string",functor:"functor",tag:"tag",control:"atom",meta:"atom",op_type:"atom",int:"number",float:"number",key:"atom",sep:"atom",ext_quant:"atom",expanded:"expanded",comment_string:"string",identifier:"atom",delimiter:"atom",module:"atom",constraint:"atom",head_exported:"atom",head_public:"atom",head_extern:"atom",head_dynamic:"atom",head_multifile:"atom",head_unreferenced:"atom",head_hook:"atom",head_meta:"atom",head_constraint:"atom",head_imported:"atom",head_built_in:"atom",head_iso:"atom",head_def_iso:"atom",head_def_swi:"atom",head:"atom",goal_built_in:"atom",goal_imported:"atom",goal_autoload:"atom",goal_global:"atom",goal_undefined:"atom",goal_thread_local:"atom",goal_dynamic:"atom",goal_multifile:"atom",goal_expanded:"atom",goal_extern:"atom",goal_recursion:"atom",goal_meta:"atom",goal_foreign:"atom",goal_local:"atom",goal_constraint:"atom",goal_not_callable:"atom",xpce_method:"functor",xpce_class_builtin:"atom",xpce_class_lib:"atom",xpce_class_user:"atom",xpce_class_undef:"atom",option_name:"atom",no_option_name:"atom",flag_name:"atom",no_flag_name:"atom",format_string:"text",file_no_depends:"atom",file:"atom",nofile:"atom",list_open:"list_open",list_close:"list_close",qq_open:"qq_open",qq_sep:"qq_sep",qq_close:"qq_close",qq_type:"atom",dict_open:"dict_open",dict_close:"dict_close",brace_term_open:"brace_term_open",brace_term_close:"brace_term_close",neck:"neck",fullstop:"fullstop",string_terminal:"string",html:"functor",entity:"atom",html_attribute:"functor",sgml_attr_function:"atom",http_location_for_id:"atom",http_no_location_for_id:"atom"};t.prototype.getEnrichedToken=function(t){if(null!=t.state.curTerm&&null!=t.state.curToken){var e,n=this.getOption("mode");if(n.metainfo&&(e=n.metainfo[t.state.curTerm]))return e[t.state.curToken-1]}},t.prototype.tokenInfo=function(t,e){var n=this.state.prologHighlightServer;return e||(e=$($.el.span({class:"token-info"},"..."))),$.ajax({url:n.url.info,data:t,success:function(t){e.html(t)}}),e[0]},t.prototype.getTokenReferences=function(t){function e(t,e){if(e&&0==e.indexOf("swish://"))return t.file=e.substring(8),!0}var n=[];switch(t.type){case"goal_local":var i={title:"Source for "+t.text+"/"+t.arity,line:t.line,regex:new RegExp("\\b"+RegExp.escape(t.text),"g"),showAllMatches:!0};e(i,t.file),n.push(i);break;case"file":var i={};e(i,t.path)&&(i.title="Included file "+i.file,n.push(i))}return n}}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/mode/xml/xml",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){"use strict";var e={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};t.defineMode("xml",function(i,r){function o(t,e){function n(n){return e.tokenize=n,n(t,e)}var i=t.next();if("<"==i)return t.eat("!")?t.eat("[")?t.match("CDATA[")?n(l("atom","]]>")):null:t.match("--")?n(l("comment","--\x3e")):t.match("DOCTYPE",!0,!0)?(t.eatWhile(/[\w\._\-]/),n(c(1))):null:t.eat("?")?(t.eatWhile(/[\w\._\-]/),e.tokenize=l("meta","?>"),"meta"):(k=t.eat("/")?"closeTag":"openTag",e.tokenize=a,"tag bracket");if("&"==i){var r;return r=t.eat("#")?t.eat("x")?t.eatWhile(/[a-fA-F\d]/)&&t.eat(";"):t.eatWhile(/[\d]/)&&t.eat(";"):t.eatWhile(/[\w\.\-:]/)&&t.eat(";"),r?"atom":"error"}return t.eatWhile(/[^&<]/),null}function a(t,e){var n=t.next();if(">"==n||"/"==n&&t.eat(">"))return e.tokenize=o,k=">"==n?"endTag":"selfcloseTag","tag bracket";if("="==n)return k="equals",null;if("<"==n){e.tokenize=o,e.state=f,e.tagName=e.tagStart=null;var i=e.tokenize(t,e);return i?i+" tag error":"tag error"}return/[\'\"]/.test(n)?(e.tokenize=s(n),e.stringStartCol=t.column(),e.tokenize(t,e)):(t.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function s(t){var e=function(e,n){for(;!e.eol();)if(e.next()==t){n.tokenize=a;break}return"string"};return e.isInAttribute=!0,e}function l(t,e){return function(n,i){for(;!n.eol();){if(n.match(e)){i.tokenize=o;break}n.next()}return t}}function c(t){return function(e,n){for(var i;null!=(i=e.next());){if("<"==i)return n.tokenize=c(t+1),n.tokenize(e,n);if(">"==i){if(1==t){n.tokenize=o;break}return n.tokenize=c(t-1),n.tokenize(e,n)}}return"meta"}}function u(t,e,n){this.prev=t.context,this.tagName=e,this.indent=t.indented,this.startOfLine=n,(S.doNotIndent.hasOwnProperty(e)||t.context&&t.context.noIndent)&&(this.noIndent=!0)}function h(t){t.context&&(t.context=t.context.prev)}function d(t,e){for(var n;;){if(!t.context)return;if(n=t.context.tagName,!S.contextGrabbers.hasOwnProperty(n)||!S.contextGrabbers[n].hasOwnProperty(e))return;h(t)}}function f(t,e,n){return"openTag"==t?(n.tagStart=e.column(),p):"closeTag"==t?g:f}function p(t,e,n){return"word"==t?(n.tagName=e.current(),A="tag",y):S.allowMissingTagName&&"endTag"==t?(A="tag bracket",y(t,e,n)):(A="error",p)}function g(t,e,n){if("word"==t){var i=e.current();return n.context&&n.context.tagName!=i&&S.implicitlyClosed.hasOwnProperty(n.context.tagName)&&h(n),n.context&&n.context.tagName==i||!1===S.matchClosing?(A="tag",m):(A="tag error",v)}return S.allowMissingTagName&&"endTag"==t?(A="tag bracket",m(t,e,n)):(A="error",v)}function m(t,e,n){return"endTag"!=t?(A="error",m):(h(n),f)}function v(t,e,n){return A="error",m(t,e,n)}function y(t,e,n){if("word"==t)return A="attribute",b;if("endTag"==t||"selfcloseTag"==t){var i=n.tagName,r=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==t||S.autoSelfClosers.hasOwnProperty(i)?d(n,i):(d(n,i),n.context=new u(n,i,r==n.indented)),f}return A="error",y}function b(t,e,n){return"equals"==t?x:(S.allowMissing||(A="error"),y(t,e,n))}function x(t,e,n){return"string"==t?w:"word"==t&&S.allowUnquoted?(A="string",y):(A="error",y(t,e,n))}function w(t,e,n){return"string"==t?w:y(t,e,n)}var _=i.indentUnit,S={},C=r.htmlMode?e:n;for(var T in C)S[T]=C[T];for(var T in r)S[T]=r[T];var k,A;return o.isInText=!0,{startState:function(t){var e={tokenize:o,state:f,indented:t||0,tagName:null,tagStart:null,context:null};return null!=t&&(e.baseIndent=t),e},token:function(t,e){if(!e.tagName&&t.sol()&&(e.indented=t.indentation()),t.eatSpace())return null;k=null;var n=e.tokenize(t,e);return(n||k)&&"comment"!=n&&(A=null,e.state=e.state(k||n,t,e),A&&(n="error"==A?n+" error":A)),n},indent:function(e,n,i){var r=e.context;if(e.tokenize.isInAttribute)return e.tagStart==e.indented?e.stringStartCol+1:e.indented+_;if(r&&r.noIndent)return t.Pass;if(e.tokenize!=a&&e.tokenize!=o)return i?i.match(/^(\s*)/)[0].length:0;if(e.tagName)return!1!==S.multilineTagIndentPastTag?e.tagStart+e.tagName.length+2:e.tagStart+_*(S.multilineTagIndentFactor||1);if(S.alignCDATA&&/<!\[CDATA\[/.test(n))return 0;var s=n&&/^<(\/)?([\w_:\.-]*)/.exec(n);if(s&&s[1])for(;r;){if(r.tagName==s[2]){r=r.prev;break}if(!S.implicitlyClosed.hasOwnProperty(r.tagName))break;r=r.prev}else if(s)for(;r;){var l=S.contextGrabbers[r.tagName];if(!l||!l.hasOwnProperty(s[2]))break;r=r.prev}for(;r&&r.prev&&!r.startOfLine;)r=r.prev;return r?r.indent+_:e.baseIndent||0},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:S.htmlMode?"html":"xml",helperType:S.htmlMode?"html":"xml",skipAttribute:function(t){t.state==x&&(t.state=y)}}}),t.defineMIME("text/xml","xml"),t.defineMIME("application/xml","xml"),t.mimeModes.hasOwnProperty("text/html")||t.defineMIME("text/html",{name:"xml",htmlMode:!0})}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/mode/meta",["../lib/codemirror"],t):t(CodeMirror)}(function(t){"use strict";t.modeInfo=[{name:"APL",mime:"text/apl",mode:"apl",ext:["dyalog","apl"]},{name:"PGP",mimes:["application/pgp","application/pgp-encrypted","application/pgp-keys","application/pgp-signature"],mode:"asciiarmor",ext:["asc","pgp","sig"]},{name:"ASN.1",mime:"text/x-ttcn-asn",mode:"asn.1",ext:["asn","asn1"]},{name:"Asterisk",mime:"text/x-asterisk",mode:"asterisk",file:/^extensions\.conf$/i},{name:"Brainfuck",mime:"text/x-brainfuck",mode:"brainfuck",ext:["b","bf"]},{name:"C",mime:"text/x-csrc",mode:"clike",ext:["c","h","ino"]},{name:"C++",mime:"text/x-c++src",mode:"clike",ext:["cpp","c++","cc","cxx","hpp","h++","hh","hxx"],alias:["cpp"]},{name:"Cobol",mime:"text/x-cobol",mode:"cobol",ext:["cob","cpy"]},{name:"C#",mime:"text/x-csharp",mode:"clike",ext:["cs"],alias:["csharp"]},{name:"Clojure",mime:"text/x-clojure",mode:"clojure",ext:["clj","cljc","cljx"]},{name:"ClojureScript",mime:"text/x-clojurescript",mode:"clojure",ext:["cljs"]},{name:"Closure Stylesheets (GSS)",mime:"text/x-gss",mode:"css",ext:["gss"]},{name:"CMake",mime:"text/x-cmake",mode:"cmake",ext:["cmake","cmake.in"],file:/^CMakeLists.txt$/},{name:"CoffeeScript",mimes:["application/vnd.coffeescript","text/coffeescript","text/x-coffeescript"],mode:"coffeescript",ext:["coffee"],alias:["coffee","coffee-script"]},{name:"Common Lisp",mime:"text/x-common-lisp",mode:"commonlisp",ext:["cl","lisp","el"],alias:["lisp"]},{name:"Cypher",mime:"application/x-cypher-query",mode:"cypher",ext:["cyp","cypher"]},{name:"Cython",mime:"text/x-cython",mode:"python",ext:["pyx","pxd","pxi"]},{name:"Crystal",mime:"text/x-crystal",mode:"crystal",ext:["cr"]},{name:"CSS",mime:"text/css",mode:"css",ext:["css"]},{name:"CQL",mime:"text/x-cassandra",mode:"sql",ext:["cql"]},{name:"D",mime:"text/x-d",mode:"d",ext:["d"]},{name:"Dart",mimes:["application/dart","text/x-dart"],mode:"dart",ext:["dart"]},{name:"diff",mime:"text/x-diff",mode:"diff",ext:["diff","patch"]},{name:"Django",mime:"text/x-django",mode:"django"},{name:"Dockerfile",mime:"text/x-dockerfile",mode:"dockerfile",file:/^Dockerfile$/},{name:"DTD",mime:"application/xml-dtd",mode:"dtd",ext:["dtd"]},{name:"Dylan",mime:"text/x-dylan",mode:"dylan",ext:["dylan","dyl","intr"]},{name:"EBNF",mime:"text/x-ebnf",mode:"ebnf"},{name:"ECL",mime:"text/x-ecl",mode:"ecl",ext:["ecl"]},{name:"edn",mime:"application/edn",mode:"clojure",ext:["edn"]},{name:"Eiffel",mime:"text/x-eiffel",mode:"eiffel",ext:["e"]},{name:"Elm",mime:"text/x-elm",mode:"elm",ext:["elm"]},{name:"Embedded Javascript",mime:"application/x-ejs",mode:"htmlembedded",ext:["ejs"]},{name:"Embedded Ruby",mime:"application/x-erb",mode:"htmlembedded",ext:["erb"]},{name:"Erlang",mime:"text/x-erlang",mode:"erlang",ext:["erl"]},{name:"Esper",mime:"text/x-esper",mode:"sql"},{name:"Factor",mime:"text/x-factor",mode:"factor",ext:["factor"]},{name:"FCL",mime:"text/x-fcl",mode:"fcl"},{name:"Forth",mime:"text/x-forth",mode:"forth",ext:["forth","fth","4th"]},{name:"Fortran",mime:"text/x-fortran",mode:"fortran",ext:["f","for","f77","f90","f95"]},{name:"F#",mime:"text/x-fsharp",mode:"mllike",ext:["fs"],alias:["fsharp"]},{name:"Gas",mime:"text/x-gas",mode:"gas",ext:["s"]},{name:"Gherkin",mime:"text/x-feature",mode:"gherkin",ext:["feature"]},{name:"GitHub Flavored Markdown",mime:"text/x-gfm",mode:"gfm",file:/^(readme|contributing|history).md$/i},{name:"Go",mime:"text/x-go",mode:"go",ext:["go"]},{name:"Groovy",mime:"text/x-groovy",mode:"groovy",ext:["groovy","gradle"],file:/^Jenkinsfile$/},{name:"HAML",mime:"text/x-haml",mode:"haml",ext:["haml"]},{name:"Haskell",mime:"text/x-haskell",mode:"haskell",ext:["hs"]},{name:"Haskell (Literate)",mime:"text/x-literate-haskell",mode:"haskell-literate",ext:["lhs"]},{name:"Haxe",mime:"text/x-haxe",mode:"haxe",ext:["hx"]},{name:"HXML",mime:"text/x-hxml",mode:"haxe",ext:["hxml"]},{name:"ASP.NET",mime:"application/x-aspx",mode:"htmlembedded",ext:["aspx"],alias:["asp","aspx"]},{name:"HTML",mime:"text/html",mode:"htmlmixed",ext:["html","htm","handlebars","hbs"],alias:["xhtml"]},{name:"HTTP",mime:"message/http",mode:"http"},{name:"IDL",mime:"text/x-idl",mode:"idl",ext:["pro"]},{name:"Pug",mime:"text/x-pug",mode:"pug",ext:["jade","pug"],alias:["jade"]},{name:"Java",mime:"text/x-java",mode:"clike",ext:["java"]},{name:"Java Server Pages",mime:"application/x-jsp",mode:"htmlembedded",ext:["jsp"],alias:["jsp"]},{name:"JavaScript",mimes:["text/javascript","text/ecmascript","application/javascript","application/x-javascript","application/ecmascript"],mode:"javascript",ext:["js"],alias:["ecmascript","js","node"]},{name:"JSON",mimes:["application/json","application/x-json"],mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"JSON-LD",mime:"application/ld+json",mode:"javascript",ext:["jsonld"],alias:["jsonld"]},{name:"JSX",mime:"text/jsx",mode:"jsx",ext:["jsx"]},{name:"Jinja2",mime:"text/jinja2",mode:"jinja2",ext:["j2","jinja","jinja2"]},{name:"Julia",mime:"text/x-julia",mode:"julia",ext:["jl"]},{name:"Kotlin",mime:"text/x-kotlin",mode:"clike",ext:["kt"]},{name:"LESS",mime:"text/x-less",mode:"css",ext:["less"]},{name:"LiveScript",mime:"text/x-livescript",mode:"livescript",ext:["ls"],alias:["ls"]},{name:"Lua",mime:"text/x-lua",mode:"lua",ext:["lua"]},{name:"Markdown",mime:"text/x-markdown",mode:"markdown",ext:["markdown","md","mkd"]},{name:"mIRC",mime:"text/mirc",mode:"mirc"},{name:"MariaDB SQL",mime:"text/x-mariadb",mode:"sql"},{name:"Mathematica",mime:"text/x-mathematica",mode:"mathematica",ext:["m","nb"]},{name:"Modelica",mime:"text/x-modelica",mode:"modelica",ext:["mo"]},{name:"MUMPS",mime:"text/x-mumps",mode:"mumps",ext:["mps"]},{name:"MS SQL",mime:"text/x-mssql",mode:"sql"},{name:"mbox",mime:"application/mbox",mode:"mbox",ext:["mbox"]},{name:"MySQL",mime:"text/x-mysql",mode:"sql"},{name:"Nginx",mime:"text/x-nginx-conf",mode:"nginx",file:/nginx.*\.conf$/i},{name:"NSIS",mime:"text/x-nsis",mode:"nsis",ext:["nsh","nsi"]},{name:"NTriples",mimes:["application/n-triples","application/n-quads","text/n-triples"],mode:"ntriples",ext:["nt","nq"]},{name:"Objective-C",mime:"text/x-objectivec",mode:"clike",ext:["m","mm"],alias:["objective-c","objc"]},{name:"OCaml",mime:"text/x-ocaml",mode:"mllike",ext:["ml","mli","mll","mly"]},{name:"Octave",mime:"text/x-octave",mode:"octave",ext:["m"]},{name:"Oz",mime:"text/x-oz",mode:"oz",ext:["oz"]},{name:"Pascal",mime:"text/x-pascal",mode:"pascal",ext:["p","pas"]},{name:"PEG.js",mime:"null",mode:"pegjs",ext:["jsonld"]},{name:"Perl",mime:"text/x-perl",mode:"perl",ext:["pl","pm"]},{name:"PHP",mimes:["text/x-php","application/x-httpd-php","application/x-httpd-php-open"],mode:"php",ext:["php","php3","php4","php5","php7","phtml"]},{name:"Pig",mime:"text/x-pig",mode:"pig",ext:["pig"]},{name:"Plain Text",mime:"text/plain",mode:"null",ext:["txt","text","conf","def","list","log"]},{name:"PLSQL",mime:"text/x-plsql",mode:"sql",ext:["pls"]},{name:"PowerShell",mime:"application/x-powershell",mode:"powershell",ext:["ps1","psd1","psm1"]},{name:"Properties files",mime:"text/x-properties",mode:"properties",ext:["properties","ini","in"],alias:["ini","properties"]},{name:"ProtoBuf",mime:"text/x-protobuf",mode:"protobuf",ext:["proto"]},{name:"Python",mime:"text/x-python",mode:"python",ext:["BUILD","bzl","py","pyw"],file:/^(BUCK|BUILD)$/},{name:"Puppet",mime:"text/x-puppet",mode:"puppet",ext:["pp"]},{name:"Q",mime:"text/x-q",mode:"q",ext:["q"]},{name:"R",mime:"text/x-rsrc",mode:"r",ext:["r","R"],alias:["rscript"]},{name:"reStructuredText",mime:"text/x-rst",mode:"rst",ext:["rst"],alias:["rst"]},{name:"RPM Changes",mime:"text/x-rpm-changes",mode:"rpm"},{name:"RPM Spec",mime:"text/x-rpm-spec",mode:"rpm",ext:["spec"]},{name:"Ruby",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"Rust",mime:"text/x-rustsrc",mode:"rust",ext:["rs"]},{name:"SAS",mime:"text/x-sas",mode:"sas",ext:["sas"]},{name:"Sass",mime:"text/x-sass",mode:"sass",ext:["sass"]},{name:"Scala",mime:"text/x-scala",mode:"clike",ext:["scala"]},{name:"Scheme",mime:"text/x-scheme",mode:"scheme",ext:["scm","ss"]},{name:"SCSS",mime:"text/x-scss",mode:"css",ext:["scss"]},{name:"Shell",mimes:["text/x-sh","application/x-sh"],mode:"shell",ext:["sh","ksh","bash"],alias:["bash","sh","zsh"],file:/^PKGBUILD$/},{name:"Sieve",mime:"application/sieve",mode:"sieve",ext:["siv","sieve"]},{name:"Slim",mimes:["text/x-slim","application/x-slim"],mode:"slim",ext:["slim"]},{name:"Smalltalk",mime:"text/x-stsrc",mode:"smalltalk",ext:["st"]},{name:"Smarty",mime:"text/x-smarty",mode:"smarty",ext:["tpl"]},{name:"Solr",mime:"text/x-solr",mode:"solr"},{name:"SML",mime:"text/x-sml",mode:"mllike",ext:["sml","sig","fun","smackspec"]},{name:"Soy",mime:"text/x-soy",mode:"soy",ext:["soy"],alias:["closure template"]},{name:"SPARQL",mime:"application/sparql-query",mode:"sparql",ext:["rq","sparql"],alias:["sparul"]},{name:"Spreadsheet",mime:"text/x-spreadsheet",mode:"spreadsheet",alias:["excel","formula"]},{name:"SQL",mime:"text/x-sql",mode:"sql",ext:["sql"]},{name:"SQLite",mime:"text/x-sqlite",mode:"sql"},{name:"Squirrel",mime:"text/x-squirrel",mode:"clike",ext:["nut"]},{name:"Stylus",mime:"text/x-styl",mode:"stylus",ext:["styl"]},{name:"Swift",mime:"text/x-swift",mode:"swift",ext:["swift"]},{name:"sTeX",mime:"text/x-stex",mode:"stex"},{name:"LaTeX",mime:"text/x-latex",mode:"stex",ext:["text","ltx","tex"],alias:["tex"]},{name:"SystemVerilog",mime:"text/x-systemverilog",mode:"verilog",ext:["v","sv","svh"]},{name:"Tcl",mime:"text/x-tcl",mode:"tcl",ext:["tcl"]},{name:"Textile",mime:"text/x-textile",mode:"textile",ext:["textile"]},{name:"TiddlyWiki ",mime:"text/x-tiddlywiki",mode:"tiddlywiki"},{name:"Tiki wiki",mime:"text/tiki",mode:"tiki"},{name:"TOML",mime:"text/x-toml",mode:"toml",ext:["toml"]},{name:"Tornado",mime:"text/x-tornado",mode:"tornado"},{name:"troff",mime:"text/troff",mode:"troff",ext:["1","2","3","4","5","6","7","8","9"]},{name:"TTCN",mime:"text/x-ttcn",mode:"ttcn",ext:["ttcn","ttcn3","ttcnpp"]},{name:"TTCN_CFG",mime:"text/x-ttcn-cfg",mode:"ttcn-cfg",ext:["cfg"]},{name:"Turtle",mime:"text/turtle",mode:"turtle",ext:["ttl"]},{name:"TypeScript",mime:"application/typescript",mode:"javascript",ext:["ts"],alias:["ts"]},{name:"TypeScript-JSX",mime:"text/typescript-jsx",mode:"jsx",ext:["tsx"],alias:["tsx"]},{name:"Twig",mime:"text/x-twig",mode:"twig"
 },{name:"Web IDL",mime:"text/x-webidl",mode:"webidl",ext:["webidl"]},{name:"VB.NET",mime:"text/x-vb",mode:"vb",ext:["vb"]},{name:"VBScript",mime:"text/vbscript",mode:"vbscript",ext:["vbs"]},{name:"Velocity",mime:"text/velocity",mode:"velocity",ext:["vtl"]},{name:"Verilog",mime:"text/x-verilog",mode:"verilog",ext:["v"]},{name:"VHDL",mime:"text/x-vhdl",mode:"vhdl",ext:["vhd","vhdl"]},{name:"Vue.js Component",mimes:["script/x-vue","text/x-vue"],mode:"vue",ext:["vue"]},{name:"XML",mimes:["application/xml","text/xml"],mode:"xml",ext:["xml","xsl","xsd","svg"],alias:["rss","wsdl","xsd"]},{name:"XQuery",mime:"application/xquery",mode:"xquery",ext:["xy","xquery"]},{name:"Yacas",mime:"text/x-yacas",mode:"yacas",ext:["ys"]},{name:"YAML",mimes:["text/x-yaml","text/yaml"],mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"Z80",mime:"text/x-z80",mode:"z80",ext:["z80"]},{name:"mscgen",mime:"text/x-mscgen",mode:"mscgen",ext:["mscgen","mscin","msc"]},{name:"xu",mime:"text/x-xu",mode:"mscgen",ext:["xu"]},{name:"msgenny",mime:"text/x-msgenny",mode:"mscgen",ext:["msgenny"]}];for(var e=0;e<t.modeInfo.length;e++){var n=t.modeInfo[e];n.mimes&&(n.mime=n.mimes[0])}t.findModeByMIME=function(e){e=e.toLowerCase();for(var n=0;n<t.modeInfo.length;n++){var i=t.modeInfo[n];if(i.mime==e)return i;if(i.mimes)for(var r=0;r<i.mimes.length;r++)if(i.mimes[r]==e)return i}return/\+xml$/.test(e)?t.findModeByMIME("application/xml"):/\+json$/.test(e)?t.findModeByMIME("application/json"):void 0},t.findModeByExtension=function(e){for(var n=0;n<t.modeInfo.length;n++){var i=t.modeInfo[n];if(i.ext)for(var r=0;r<i.ext.length;r++)if(i.ext[r]==e)return i}},t.findModeByFileName=function(e){for(var n=0;n<t.modeInfo.length;n++){var i=t.modeInfo[n];if(i.file&&i.file.test(e))return i}var r=e.lastIndexOf("."),o=r>-1&&e.substring(r+1,e.length);if(o)return t.findModeByExtension(o)},t.findModeByName=function(e){e=e.toLowerCase();for(var n=0;n<t.modeInfo.length;n++){var i=t.modeInfo[n];if(i.name.toLowerCase()==e)return i;if(i.alias)for(var r=0;r<i.alias.length;r++)if(i.alias[r].toLowerCase()==e)return i}}}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror"),require("../xml/xml"),require("../meta")):"function"==typeof define&&define.amd?define("cm/mode/markdown/markdown",["../../lib/codemirror","../xml/xml","../meta"],t):t(CodeMirror)}(function(t){"use strict";t.defineMode("markdown",function(e,n){function i(n){if(t.findModeByName){var i=t.findModeByName(n);i&&(n=i.mime||i.mimes[0])}var r=t.getMode(e,n);return"null"==r.name?null:r}function r(t,e,n){return e.f=e.inline=n,n(t,e)}function o(t,e,n){return e.f=e.block=n,n(t,e)}function a(t){return!t||!/\S/.test(t.string)}function s(e){if(e.linkTitle=!1,e.linkHref=!1,e.linkText=!1,e.em=!1,e.strong=!1,e.strikethrough=!1,e.quote=0,e.indentedCode=!1,e.f==c){var n=w;if(!n){var i=t.innerMode(x,e.htmlState);n="xml"==i.mode.name&&null===i.state.tagStart&&!i.state.context&&i.state.tokenize.isInText}n&&(e.f=f,e.block=l,e.htmlState=null)}return e.trailingSpace=0,e.trailingSpaceNewLine=!1,e.prevLine=e.thisLine,e.thisLine={stream:null},null}function l(e,o){var s=e.column()===o.indentation,l=a(o.prevLine.stream),c=o.indentedCode,d=o.prevLine.hr,f=!1!==o.list,p=(o.listStack[o.listStack.length-1]||0)+3;o.indentedCode=!1;var g=o.indentation;if(null===o.indentationDiff&&(o.indentationDiff=o.indentation,f)){for(o.em=!1,o.strong=!1,o.code=!1,o.strikethrough=!1,o.list=null;g<o.listStack[o.listStack.length-1];)o.listStack.pop(),o.listStack.length?o.indentation=o.listStack[o.listStack.length-1]:o.list=!1;!1!==o.list&&(o.indentationDiff=g-o.listStack[o.listStack.length-1])}var m=!(l||d||o.prevLine.header||f&&c||o.prevLine.fencedCodeEnd),y=(!1===o.list||d||l)&&o.indentation<=p&&e.match(C),b=null;if(o.indentationDiff>=4&&(c||o.prevLine.fencedCodeEnd||o.prevLine.header||l))return e.skipToEnd(),o.indentedCode=!0,_.code;if(e.eatSpace())return null;if(s&&o.indentation<=p&&(b=e.match(A))&&b[1].length<=6)return o.quote=0,o.header=b[1].length,o.thisLine.header=!0,n.highlightFormatting&&(o.formatting="header"),o.f=o.inline,h(o);if(o.indentation<=p&&e.eat(">"))return o.quote=s?1:o.quote+1,n.highlightFormatting&&(o.formatting="quote"),e.eatSpace(),h(o);if(!y&&!o.setext&&s&&o.indentation<=p&&(b=e.match(T))){var x=b[1]?"ol":"ul";return o.indentation=g+e.current().length,o.list=!0,o.quote=0,o.listStack.push(o.indentation),n.taskLists&&e.match(k,!1)&&(o.taskList=!0),o.f=o.inline,n.highlightFormatting&&(o.formatting=["list","list-"+x]),h(o)}return s&&o.indentation<=p&&(b=e.match(L,!0))?(o.quote=0,o.fencedEndRE=new RegExp(b[1]+"+ *$"),o.localMode=n.fencedCodeBlockHighlighting&&i(b[2]),o.localMode&&(o.localState=t.startState(o.localMode)),o.f=o.block=u,n.highlightFormatting&&(o.formatting="code-block"),o.code=-1,h(o)):o.setext||!(m&&f||o.quote||!1!==o.list||o.code||y||P.test(e.string))&&(b=e.lookAhead(1))&&(b=b.match(M))?(o.setext?(o.header=o.setext,o.setext=0,e.skipToEnd(),n.highlightFormatting&&(o.formatting="header")):(o.header="="==b[0].charAt(0)?1:2,o.setext=o.header),o.thisLine.header=!0,o.f=o.inline,h(o)):y?(e.skipToEnd(),o.hr=!0,o.thisLine.hr=!0,_.hr):"["===e.peek()?r(e,o,v):r(e,o,o.inline)}function c(e,n){var i=x.token(e,n.htmlState);if(!w){var r=t.innerMode(x,n.htmlState);("xml"==r.mode.name&&null===r.state.tagStart&&!r.state.context&&r.state.tokenize.isInText||n.md_inside&&e.current().indexOf(">")>-1)&&(n.f=f,n.block=l,n.htmlState=null)}return i}function u(t,e){var i=e.listStack[e.listStack.length-1]||0,r=e.indentation<i,a=i+3;if(e.fencedEndRE&&e.indentation<=a&&(r||t.match(e.fencedEndRE))){n.highlightFormatting&&(e.formatting="code-block");var s;return r||(s=h(e)),e.localMode=e.localState=null,e.block=l,e.f=f,e.fencedEndRE=null,e.code=0,e.thisLine.fencedCodeEnd=!0,r?o(t,e,e.block):s}return e.localMode?e.localMode.token(t,e.localState):(t.skipToEnd(),_.code)}function h(t){var e=[];if(t.formatting){e.push(_.formatting),"string"==typeof t.formatting&&(t.formatting=[t.formatting]);for(var i=0;i<t.formatting.length;i++)e.push(_.formatting+"-"+t.formatting[i]),"header"===t.formatting[i]&&e.push(_.formatting+"-"+t.formatting[i]+"-"+t.header),"quote"===t.formatting[i]&&(!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=t.quote?e.push(_.formatting+"-"+t.formatting[i]+"-"+t.quote):e.push("error"))}if(t.taskOpen)return e.push("meta"),e.length?e.join(" "):null;if(t.taskClosed)return e.push("property"),e.length?e.join(" "):null;if(t.linkHref?e.push(_.linkHref,"url"):(t.strong&&e.push(_.strong),t.em&&e.push(_.em),t.strikethrough&&e.push(_.strikethrough),t.emoji&&e.push(_.emoji),t.linkText&&e.push(_.linkText),t.code&&e.push(_.code),t.image&&e.push(_.image),t.imageAltText&&e.push(_.imageAltText,"link"),t.imageMarker&&e.push(_.imageMarker)),t.header&&e.push(_.header,_.header+"-"+t.header),t.quote&&(e.push(_.quote),!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=t.quote?e.push(_.quote+"-"+t.quote):e.push(_.quote+"-"+n.maxBlockquoteDepth)),!1!==t.list){var r=(t.listStack.length-1)%3;r?1===r?e.push(_.list2):e.push(_.list3):e.push(_.list1)}return t.trailingSpaceNewLine?e.push("trailing-space-new-line"):t.trailingSpace&&e.push("trailing-space-"+(t.trailingSpace%2?"a":"b")),e.length?e.join(" "):null}function d(t,e){if(t.match(E,!0))return h(e)}function f(e,i){var r=i.text(e,i);if(void 0!==r)return r;if(i.list)return i.list=null,h(i);if(i.taskList){return" "===e.match(k,!0)[1]?i.taskOpen=!0:i.taskClosed=!0,n.highlightFormatting&&(i.formatting="task"),i.taskList=!1,h(i)}if(i.taskOpen=!1,i.taskClosed=!1,i.header&&e.match(/^#+$/,!0))return n.highlightFormatting&&(i.formatting="header"),h(i);var a=e.next();if(i.linkTitle){i.linkTitle=!1;var s=a;"("===a&&(s=")"),s=(s+"").replace(/([.?*+^\[\]\\(){}|-])/g,"\\$1");var l="^\\s*(?:[^"+s+"\\\\]+|\\\\\\\\|\\\\.)"+s;if(e.match(new RegExp(l),!0))return _.linkHref}if("`"===a){var u=i.formatting;n.highlightFormatting&&(i.formatting="code"),e.eatWhile("`");var d=e.current().length;if(0!=i.code||i.quote&&1!=d){if(d==i.code){var m=h(i);return i.code=0,m}return i.formatting=u,h(i)}return i.code=d,h(i)}if(i.code)return h(i);if("\\"===a&&(e.next(),n.highlightFormatting)){var v=h(i),y=_.formatting+"-escape";return v?v+" "+y:y}if("!"===a&&e.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return i.imageMarker=!0,i.image=!0,n.highlightFormatting&&(i.formatting="image"),h(i);if("["===a&&i.imageMarker&&e.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/,!1))return i.imageMarker=!1,i.imageAltText=!0,n.highlightFormatting&&(i.formatting="image"),h(i);if("]"===a&&i.imageAltText){n.highlightFormatting&&(i.formatting="image");var v=h(i);return i.imageAltText=!1,i.image=!1,i.inline=i.f=g,v}if("["===a&&!i.image)return i.linkText&&e.match(/^.*?\]/)?h(i):(i.linkText=!0,n.highlightFormatting&&(i.formatting="link"),h(i));if("]"===a&&i.linkText){n.highlightFormatting&&(i.formatting="link");var v=h(i);return i.linkText=!1,i.inline=i.f=e.match(/\(.*?\)| ?\[.*?\]/,!1)?g:f,v}if("<"===a&&e.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1)){i.f=i.inline=p,n.highlightFormatting&&(i.formatting="link");var v=h(i);return v?v+=" ":v="",v+_.linkInline}if("<"===a&&e.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1)){i.f=i.inline=p,n.highlightFormatting&&(i.formatting="link");var v=h(i);return v?v+=" ":v="",v+_.linkEmail}if(n.xml&&"<"===a&&e.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i,!1)){var b=e.string.indexOf(">",e.pos);if(-1!=b){/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(e.string.substring(e.start,b))&&(i.md_inside=!0)}return e.backUp(1),i.htmlState=t.startState(x),o(e,i,c)}if(n.xml&&"<"===a&&e.match(/^\/\w*?>/))return i.md_inside=!1,"tag";if("*"===a||"_"===a){for(var w=1,S=1==e.pos?" ":e.string.charAt(e.pos-2);w<3&&e.eat(a);)w++;var C=e.peek()||" ",T=!/\s/.test(C)&&(!D.test(C)||/\s/.test(S)||D.test(S)),A=!/\s/.test(S)&&(!D.test(S)||/\s/.test(C)||D.test(C)),M=null,E=null;if(w%2&&(i.em||!T||"*"!==a&&A&&!D.test(S)?i.em!=a||!A||"*"!==a&&T&&!D.test(C)||(M=!1):M=!0),w>1&&(i.strong||!T||"*"!==a&&A&&!D.test(S)?i.strong!=a||!A||"*"!==a&&T&&!D.test(C)||(E=!1):E=!0),null!=E||null!=M){n.highlightFormatting&&(i.formatting=null==M?"strong":null==E?"em":"strong em"),!0===M&&(i.em=a),!0===E&&(i.strong=a);var m=h(i);return!1===M&&(i.em=!1),!1===E&&(i.strong=!1),m}}else if(" "===a&&(e.eat("*")||e.eat("_"))){if(" "===e.peek())return h(i);e.backUp(1)}if(n.strikethrough)if("~"===a&&e.eatWhile(a)){if(i.strikethrough){n.highlightFormatting&&(i.formatting="strikethrough");var m=h(i);return i.strikethrough=!1,m}if(e.match(/^[^\s]/,!1))return i.strikethrough=!0,n.highlightFormatting&&(i.formatting="strikethrough"),h(i)}else if(" "===a&&e.match(/^~~/,!0)){if(" "===e.peek())return h(i);e.backUp(2)}if(n.emoji&&":"===a&&e.match(/^(?:[a-z_\d+][a-z_\d+-]*|\-[a-z_\d+][a-z_\d+-]*):/)){i.emoji=!0,n.highlightFormatting&&(i.formatting="emoji");var L=h(i);return i.emoji=!1,L}return" "===a&&(e.match(/^ +$/,!1)?i.trailingSpace++:i.trailingSpace&&(i.trailingSpaceNewLine=!0)),h(i)}function p(t,e){if(">"===t.next()){e.f=e.inline=f,n.highlightFormatting&&(e.formatting="link");var i=h(e);return i?i+=" ":i="",i+_.linkInline}return t.match(/^[^>]+/,!0),_.linkInline}function g(t,e){if(t.eatSpace())return null;var i=t.next();return"("===i||"["===i?(e.f=e.inline=m("("===i?")":"]"),n.highlightFormatting&&(e.formatting="link-string"),e.linkHref=!0,h(e)):"error"}function m(t){return function(e,i){if(e.next()===t){i.f=i.inline=f,n.highlightFormatting&&(i.formatting="link-string");var r=h(i);return i.linkHref=!1,r}return e.match(N[t]),i.linkHref=!0,h(i)}}function v(t,e){return t.match(/^([^\]\\]|\\.)*\]:/,!1)?(e.f=y,t.next(),n.highlightFormatting&&(e.formatting="link"),e.linkText=!0,h(e)):r(t,e,f)}function y(t,e){if(t.match(/^\]:/,!0)){e.f=e.inline=b,n.highlightFormatting&&(e.formatting="link");var i=h(e);return e.linkText=!1,i}return t.match(/^([^\]\\]|\\.)+/,!0),_.linkText}function b(t,e){return t.eatSpace()?null:(t.match(/^[^\s]+/,!0),void 0===t.peek()?e.linkTitle=!0:t.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,!0),e.f=e.inline=f,_.linkHref+" url")}var x=t.getMode(e,"text/html"),w="null"==x.name;void 0===n.highlightFormatting&&(n.highlightFormatting=!1),void 0===n.maxBlockquoteDepth&&(n.maxBlockquoteDepth=0),void 0===n.taskLists&&(n.taskLists=!1),void 0===n.strikethrough&&(n.strikethrough=!1),void 0===n.emoji&&(n.emoji=!1),void 0===n.fencedCodeBlockHighlighting&&(n.fencedCodeBlockHighlighting=!0),void 0===n.xml&&(n.xml=!0),void 0===n.tokenTypeOverrides&&(n.tokenTypeOverrides={});var _={header:"header",code:"comment",quote:"quote",list1:"variable-2",list2:"variable-3",list3:"keyword",hr:"hr",image:"image",imageAltText:"image-alt-text",imageMarker:"image-marker",formatting:"formatting",linkInline:"link",linkEmail:"link",linkText:"link",linkHref:"string",em:"em",strong:"strong",strikethrough:"strikethrough",emoji:"builtin"};for(var S in _)_.hasOwnProperty(S)&&n.tokenTypeOverrides[S]&&(_[S]=n.tokenTypeOverrides[S]);var C=/^([*\-_])(?:\s*\1){2,}\s*$/,T=/^(?:[*\-+]|^[0-9]+([.)]))\s+/,k=/^\[(x| )\](?=\s)/i,A=n.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,M=/^ *(?:\={1,}|-{1,})\s*$/,E=/^[^#!\[\]*_\\<>` "'(~:]+/,L=/^(~~~+|```+)[ \t]*([\w+#-]*)[^\n`]*$/,P=/^\s*\[[^\]]+?\]:.*$/,D=/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/,N={")":/^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,"]":/^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/},O={startState:function(){return{f:l,prevLine:{stream:null},thisLine:{stream:null},block:l,htmlState:null,indentation:0,inline:f,text:d,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(e){return{f:e.f,prevLine:e.prevLine,thisLine:e.thisLine,block:e.block,htmlState:e.htmlState&&t.copyState(x,e.htmlState),indentation:e.indentation,localMode:e.localMode,localState:e.localMode?t.copyState(e.localMode,e.localState):null,inline:e.inline,text:e.text,formatting:!1,linkText:e.linkText,linkTitle:e.linkTitle,linkHref:e.linkHref,code:e.code,em:e.em,strong:e.strong,strikethrough:e.strikethrough,emoji:e.emoji,header:e.header,setext:e.setext,hr:e.hr,taskList:e.taskList,list:e.list,listStack:e.listStack.slice(0),quote:e.quote,indentedCode:e.indentedCode,trailingSpace:e.trailingSpace,trailingSpaceNewLine:e.trailingSpaceNewLine,md_inside:e.md_inside,fencedEndRE:e.fencedEndRE}},token:function(t,e){if(e.formatting=!1,t!=e.thisLine.stream){if(e.header=0,e.hr=!1,t.match(/^\s*$/,!0))return s(e),null;if(e.prevLine=e.thisLine,e.thisLine={stream:t},e.taskList=!1,e.trailingSpace=0,e.trailingSpaceNewLine=!1,!e.localState&&(e.f=e.block,e.f!=c)){var n=t.match(/^\s*/,!0)[0].replace(/\t/g,"    ").length;if(e.indentation=n,e.indentationDiff=null,n>0)return null}}return e.f(t,e)},innerMode:function(t){return t.block==c?{state:t.htmlState,mode:x}:t.localState?{state:t.localState,mode:t.localMode}:{state:t,mode:O}},indent:function(e,n,i){return e.block==c&&x.indent?x.indent(e.htmlState,n,i):e.localState&&e.localMode.indent?e.localMode.indent(e.localState,n,i):t.Pass},blankLine:s,getType:h,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",closeBrackets:"()[]{}''\"\"``",fold:"markdown"};return O},"xml"),t.defineMIME("text/markdown","markdown"),t.defineMIME("text/x-markdown","markdown")}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/addon/edit/matchbrackets",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){function e(t){return t&&t.bracketRegex||/[(){}[\]]/}function n(t,n,r){var o=t.getLineHandle(n.line),a=n.ch-1,c=r&&r.afterCursor;null==c&&(c=/(^| )cm-fat-cursor($| )/.test(t.getWrapperElement().className));var u=e(r),h=!c&&a>=0&&u.test(o.text.charAt(a))&&l[o.text.charAt(a)]||u.test(o.text.charAt(a+1))&&l[o.text.charAt(++a)];if(!h)return null;var d=">"==h.charAt(1)?1:-1;if(r&&r.strict&&d>0!=(a==n.ch))return null;var f=t.getTokenTypeAt(s(n.line,a+1)),p=i(t,s(n.line,a+(d>0?1:0)),d,f||null,r);return null==p?null:{from:s(n.line,a),to:p&&p.pos,match:p&&p.ch==h.charAt(0),forward:d>0}}function i(t,n,i,r,o){for(var a=o&&o.maxScanLineLength||1e4,c=o&&o.maxScanLines||1e3,u=[],h=e(o),d=i>0?Math.min(n.line+c,t.lastLine()+1):Math.max(t.firstLine()-1,n.line-c),f=n.line;f!=d;f+=i){var p=t.getLine(f);if(p){var g=i>0?0:p.length-1,m=i>0?p.length:-1;if(!(p.length>a))for(f==n.line&&(g=n.ch-(i<0?1:0));g!=m;g+=i){var v=p.charAt(g);if(h.test(v)&&(void 0===r||t.getTokenTypeAt(s(f,g+1))==r)){var y=l[v];if(">"==y.charAt(1)==i>0)u.push(v);else{if(!u.length)return{pos:s(f,g),ch:v};u.pop()}}}}}return f-i!=(i>0?t.lastLine():t.firstLine())&&null}function r(t,e,i){for(var r=t.state.matchBrackets.maxHighlightLineLength||1e3,o=[],l=t.listSelections(),c=0;c<l.length;c++){var u=l[c].empty()&&n(t,l[c].head,i);if(u&&t.getLine(u.from.line).length<=r){var h=u.match?"CodeMirror-matchingbracket":"CodeMirror-nonmatchingbracket";o.push(t.markText(u.from,s(u.from.line,u.from.ch+1),{className:h})),u.to&&t.getLine(u.to.line).length<=r&&o.push(t.markText(u.to,s(u.to.line,u.to.ch+1),{className:h}))}}if(o.length){a&&t.state.focused&&t.focus();var d=function(){t.operation(function(){for(var t=0;t<o.length;t++)o[t].clear()})};if(!e)return d;setTimeout(d,800)}}function o(t){t.operation(function(){t.state.matchBrackets.currentlyHighlighted&&(t.state.matchBrackets.currentlyHighlighted(),t.state.matchBrackets.currentlyHighlighted=null),t.state.matchBrackets.currentlyHighlighted=r(t,!1,t.state.matchBrackets)})}var a=/MSIE \d/.test(navigator.userAgent)&&(null==document.documentMode||document.documentMode<8),s=t.Pos,l={"(":")>",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};t.defineOption("matchBrackets",!1,function(e,n,i){i&&i!=t.Init&&(e.off("cursorActivity",o),e.state.matchBrackets&&e.state.matchBrackets.currentlyHighlighted&&(e.state.matchBrackets.currentlyHighlighted(),e.state.matchBrackets.currentlyHighlighted=null)),n&&(e.state.matchBrackets="object"==typeof n?n:{},e.on("cursorActivity",o))}),t.defineExtension("matchBrackets",function(){r(this,!0)}),t.defineExtension("findMatchingBracket",function(t,e,i){return(i||"boolean"==typeof e)&&(i?(i.strict=e,e=i):e=e?{strict:!0}:null),n(this,t,e)}),t.defineExtension("scanForBracket",function(t,e,n,r){return i(this,t,e,n,r)})}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/addon/comment/continuecomment",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){function e(e){if(e.getOption("disableInput"))return t.Pass;for(var i,r=e.listSelections(),o=[],a=0;a<r.length;a++){var s=r[a].head;if(!/\bcomment\b/.test(e.getTokenTypeAt(s)))return t.Pass;var l=e.getModeAt(s);if(i){if(i!=l)return t.Pass}else i=l;var c=null;if(i.blockCommentStart&&i.blockCommentContinue){var u,h=e.getLine(s.line).slice(0,s.ch),d=h.lastIndexOf(i.blockCommentEnd);if(-1!=d&&d==s.ch-i.blockCommentEnd.length);else if((u=h.lastIndexOf(i.blockCommentStart))>-1&&u>d){if(c=h.slice(0,u),/\S/.test(c)){c="";for(var f=0;f<u;++f)c+=" "}}else(u=h.indexOf(i.blockCommentContinue))>-1&&!/\S/.test(h.slice(0,u))&&(c=h.slice(0,u));null!=c&&(c+=i.blockCommentContinue)}if(null==c&&i.lineComment&&n(e)){var h=e.getLine(s.line),u=h.indexOf(i.lineComment);u>-1&&(c=h.slice(0,u),/\S/.test(c)?c=null:c+=i.lineComment+h.slice(u+i.lineComment.length).match(/^\s*/)[0])}if(null==c)return t.Pass;o[a]="\n"+c}e.operation(function(){for(var t=r.length-1;t>=0;t--)e.replaceRange(o[t],r[t].from(),r[t].to(),"+insert")})}function n(t){var e=t.getOption("continueComments");return!e||"object"!=typeof e||!1!==e.continueLineComment}t.defineOption("continueComments",null,function(n,i,r){if(r&&r!=t.Init&&n.removeKeyMap("continueComment"),i){var o="Enter";"string"==typeof i?o=i:"object"==typeof i&&i.key&&(o=i.key);var a={name:"continueComment"};a[o]=e,n.addKeyMap(a)}})}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/addon/comment/comment",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){"use strict";function e(t){var e=t.search(o);return-1==e?0:e}function n(t,e,n){return/\bstring\b/.test(t.getTokenTypeAt(a(e.line,0)))&&!/^[\'\"\`]/.test(n)}function i(t,e){var n=t.getMode();return!1!==n.useInnerComments&&n.innerMode?t.getModeAt(e):n}var r={},o=/[^\s\u00a0]/,a=t.Pos;t.commands.toggleComment=function(t){t.toggleComment()},t.defineExtension("toggleComment",function(t){t||(t=r);for(var e=this,n=1/0,i=this.listSelections(),o=null,s=i.length-1;s>=0;s--){var l=i[s].from(),c=i[s].to();l.line>=n||(c.line>=n&&(c=a(n,0)),n=l.line,null==o?e.uncomment(l,c,t)?o="un":(e.lineComment(l,c,t),o="line"):"un"==o?e.uncomment(l,c,t):e.lineComment(l,c,t))}}),t.defineExtension("lineComment",function(t,s,l){l||(l=r);var c=this,u=i(c,t),h=c.getLine(t.line);if(null!=h&&!n(c,t,h)){var d=l.lineComment||u.lineComment;if(!d)return void((l.blockCommentStart||u.blockCommentStart)&&(l.fullLines=!0,c.blockComment(t,s,l)));var f=Math.min(0!=s.ch||s.line==t.line?s.line+1:s.line,c.lastLine()+1),p=null==l.padding?" ":l.padding,g=l.commentBlankLines||t.line==s.line;c.operation(function(){if(l.indent){for(var n=null,i=t.line;i<f;++i){var r=c.getLine(i),s=r.slice(0,e(r));(null==n||n.length>s.length)&&(n=s)}for(var i=t.line;i<f;++i){var r=c.getLine(i),u=n.length;(g||o.test(r))&&(r.slice(0,u)!=n&&(u=e(r)),c.replaceRange(n+d+p,a(i,0),a(i,u)))}}else for(var i=t.line;i<f;++i)(g||o.test(c.getLine(i)))&&c.replaceRange(d+p,a(i,0))})}}),t.defineExtension("blockComment",function(t,e,n){n||(n=r);var s=this,l=i(s,t),c=n.blockCommentStart||l.blockCommentStart,u=n.blockCommentEnd||l.blockCommentEnd;if(!c||!u)return void((n.lineComment||l.lineComment)&&0!=n.fullLines&&s.lineComment(t,e,n));if(!/\bcomment\b/.test(s.getTokenTypeAt(a(t.line,0)))){var h=Math.min(e.line,s.lastLine());h!=t.line&&0==e.ch&&o.test(s.getLine(h))&&--h;var d=null==n.padding?" ":n.padding;t.line>h||s.operation(function(){if(0!=n.fullLines){var i=o.test(s.getLine(h));s.replaceRange(d+u,a(h)),s.replaceRange(c+d,a(t.line,0));var r=n.blockCommentLead||l.blockCommentLead;if(null!=r)for(var f=t.line+1;f<=h;++f)(f!=h||i)&&s.replaceRange(r+d,a(f,0))}else s.replaceRange(u,e),s.replaceRange(c,t)})}}),t.defineExtension("uncomment",function(t,e,n){n||(n=r);var s,l=this,c=i(l,t),u=Math.min(0!=e.ch||e.line==t.line?e.line:e.line-1,l.lastLine()),h=Math.min(t.line,u),d=n.lineComment||c.lineComment,f=[],p=null==n.padding?" ":n.padding;t:if(d){for(var g=h;g<=u;++g){var m=l.getLine(g),v=m.indexOf(d);if(v>-1&&!/comment/.test(l.getTokenTypeAt(a(g,v+1)))&&(v=-1),-1==v&&o.test(m))break t;if(v>-1&&o.test(m.slice(0,v)))break t;f.push(m)}if(l.operation(function(){for(var t=h;t<=u;++t){var e=f[t-h],n=e.indexOf(d),i=n+d.length;n<0||(e.slice(i,i+p.length)==p&&(i+=p.length),s=!0,l.replaceRange("",a(t,n),a(t,i)))}}),s)return!0}var y=n.blockCommentStart||c.blockCommentStart,b=n.blockCommentEnd||c.blockCommentEnd;if(!y||!b)return!1;var x=n.blockCommentLead||c.blockCommentLead,w=l.getLine(h),_=w.indexOf(y);if(-1==_)return!1;var S=u==h?w:l.getLine(u),C=S.indexOf(b,u==h?_+y.length:0),T=a(h,_+1),k=a(u,C+1);if(-1==C||!/comment/.test(l.getTokenTypeAt(T))||!/comment/.test(l.getTokenTypeAt(k))||l.getRange(T,k,"\n").indexOf(b)>-1)return!1;var A=w.lastIndexOf(y,t.ch),M=-1==A?-1:w.slice(0,t.ch).indexOf(b,A+y.length);if(-1!=A&&-1!=M&&M+b.length!=t.ch)return!1;M=S.indexOf(b,e.ch);var E=S.slice(e.ch).lastIndexOf(y,M-e.ch);return A=-1==M||-1==E?-1:e.ch+E,(-1==M||-1==A||A==e.ch)&&(l.operation(function(){l.replaceRange("",a(u,C-(p&&S.slice(C-p.length,C)==p?p.length:0)),a(u,C+b.length));var t=_+y.length;if(p&&w.slice(t,t+p.length)==p&&(t+=p.length),l.replaceRange("",a(h,_),a(h,t)),x)for(var e=h+1;e<=u;++e){var n=l.getLine(e),i=n.indexOf(x);if(-1!=i&&!o.test(n.slice(0,i))){var r=i+x.length;p&&n.slice(r,r+p.length)==p&&(r+=p.length),l.replaceRange("",a(e,i),a(e,r))}}}),!0)})}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/addon/hint/show-hint",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){"use strict";function e(t,e){this.cm=t,this.options=e,this.widget=null,this.debounce=0,this.tick=0,this.startPos=this.cm.getCursor("start"),this.startLen=this.cm.getLine(this.startPos.line).length-this.cm.getSelection().length;var n=this;t.on("cursorActivity",this.activityFunc=function(){n.cursorActivity()})}function n(t,e,n){var i=t.options.hintOptions,r={};for(var o in p)r[o]=p[o];if(i)for(var o in i)void 0!==i[o]&&(r[o]=i[o]);if(n)for(var o in n)void 0!==n[o]&&(r[o]=n[o]);return r.hint.resolve&&(r.hint=r.hint.resolve(t,e)),r}function i(t){return"string"==typeof t?t:t.text}function r(t,e){function n(t,n){var r;r="string"!=typeof n?function(t){return n(t,e)}:i.hasOwnProperty(n)?i[n]:n,o[t]=r}var i={Up:function(){e.moveFocus(-1)},Down:function(){e.moveFocus(1)},PageUp:function(){e.moveFocus(1-e.menuSize(),!0)},PageDown:function(){e.moveFocus(e.menuSize()-1,!0)},Home:function(){e.setFocus(0)},End:function(){e.setFocus(e.length-1)},Enter:e.pick,Tab:e.pick,Esc:e.close};/Mac/.test(navigator.platform)&&(i["Ctrl-P"]=function(){e.moveFocus(-1)},i["Ctrl-N"]=function(){e.moveFocus(1)});var r=t.options.customKeys,o=r?{}:i;if(r)for(var a in r)r.hasOwnProperty(a)&&n(a,r[a]);var s=t.options.extraKeys;if(s)for(var a in s)s.hasOwnProperty(a)&&n(a,s[a]);return o}function o(t,e){for(;e&&e!=t;){if("LI"===e.nodeName.toUpperCase()&&e.parentNode==t)return e;e=e.parentNode}}function a(e,n){this.completion=e,this.data=n,this.picked=!1;var a=this,s=e.cm,l=s.getInputField().ownerDocument,c=l.defaultView||l.parentWindow,d=this.hints=l.createElement("ul"),f=e.cm.options.theme;d.className="CodeMirror-hints "+f,this.selectedHint=n.selectedHint||0;for(var p=n.list,g=0;g<p.length;++g){var m=d.appendChild(l.createElement("li")),v=p[g],y=u+(g!=this.selectedHint?"":" "+h);null!=v.className&&(y=v.className+" "+y),m.className=y,v.render?v.render(m,n,v):m.appendChild(l.createTextNode(v.displayText||i(v))),m.hintId=g}var b=s.cursorCoords(e.options.alignWithWord?n.from:null),x=b.left,w=b.bottom,_=!0;d.style.left=x+"px",d.style.top=w+"px";var S=c.innerWidth||Math.max(l.body.offsetWidth,l.documentElement.offsetWidth),C=c.innerHeight||Math.max(l.body.offsetHeight,l.documentElement.offsetHeight);(e.options.container||l.body).appendChild(d);var T=d.getBoundingClientRect(),k=T.bottom-C,A=d.scrollHeight>d.clientHeight+1,M=s.getScrollInfo();if(k>0){var E=T.bottom-T.top;if(b.top-(b.bottom-T.top)-E>0)d.style.top=(w=b.top-E)+"px",_=!1;else if(E>C){d.style.height=C-5+"px",d.style.top=(w=b.bottom-T.top)+"px";var L=s.getCursor();n.from.ch!=L.ch&&(b=s.cursorCoords(L),d.style.left=(x=b.left)+"px",T=d.getBoundingClientRect())}}var P=T.right-S;if(P>0&&(T.right-T.left>S&&(d.style.width=S-5+"px",P-=T.right-T.left-S),d.style.left=(x=b.left-P)+"px"),A)for(var D=d.firstChild;D;D=D.nextSibling)D.style.paddingRight=s.display.nativeBarWidth+"px";if(s.addKeyMap(this.keyMap=r(e,{moveFocus:function(t,e){a.changeActive(a.selectedHint+t,e)},setFocus:function(t){a.changeActive(t)},menuSize:function(){return a.screenAmount()},length:p.length,close:function(){e.close()},pick:function(){a.pick()},data:n})),e.options.closeOnUnfocus){var N;s.on("blur",this.onBlur=function(){N=setTimeout(function(){e.close()},100)}),s.on("focus",this.onFocus=function(){clearTimeout(N)})}return s.on("scroll",this.onScroll=function(){var t=s.getScrollInfo(),n=s.getWrapperElement().getBoundingClientRect(),i=w+M.top-t.top,r=i-(c.pageYOffset||(l.documentElement||l.body).scrollTop);if(_||(r+=d.offsetHeight),r<=n.top||r>=n.bottom)return e.close();d.style.top=i+"px",d.style.left=x+M.left-t.left+"px"}),t.on(d,"dblclick",function(t){var e=o(d,t.target||t.srcElement);e&&null!=e.hintId&&(a.changeActive(e.hintId),a.pick())}),t.on(d,"click",function(t){var n=o(d,t.target||t.srcElement);n&&null!=n.hintId&&(a.changeActive(n.hintId),e.options.completeOnSingleClick&&a.pick())}),t.on(d,"mousedown",function(){setTimeout(function(){s.focus()},20)}),t.signal(n,"select",p[this.selectedHint],d.childNodes[this.selectedHint]),!0}function s(t,e){if(!t.somethingSelected())return e;for(var n=[],i=0;i<e.length;i++)e[i].supportsSelection&&n.push(e[i]);return n}function l(t,e,n,i){if(t.async)t(e,i,n);else{var r=t(e,n);r&&r.then?r.then(i):i(r)}}function c(e,n){var i,r=e.getHelpers(n,"hint");if(r.length){var o=function(t,e,n){function i(r){if(r==o.length)return e(null);l(o[r],t,n,function(t){t&&t.list.length>0?e(t):i(r+1)})}var o=s(t,r);i(0)};return o.async=!0,o.supportsSelection=!0,o}return(i=e.getHelper(e.getCursor(),"hintWords"))?function(e){return t.hint.fromList(e,{words:i})}:t.hint.anyword?function(e,n){return t.hint.anyword(e,n)}:function(){}}var u="CodeMirror-hint",h="CodeMirror-hint-active";t.showHint=function(t,e,n){if(!e)return t.showHint(n);n&&n.async&&(e.async=!0);var i={hint:e};if(n)for(var r in n)i[r]=n[r];return t.showHint(i)},t.defineExtension("showHint",function(i){i=n(this,this.getCursor("start"),i);var r=this.listSelections();if(!(r.length>1)){if(this.somethingSelected()){if(!i.hint.supportsSelection)return;for(var o=0;o<r.length;o++)if(r[o].head.line!=r[o].anchor.line)return}this.state.completionActive&&this.state.completionActive.close();var a=this.state.completionActive=new e(this,i);a.options.hint&&(t.signal(this,"startCompletion",this),a.update(!0))}}),t.defineExtension("closeHint",function(){this.state.completionActive&&this.state.completionActive.close()});var d=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},f=window.cancelAnimationFrame||clearTimeout;e.prototype={close:function(){this.active()&&(this.cm.state.completionActive=null,this.tick=null,this.cm.off("cursorActivity",this.activityFunc),this.widget&&this.data&&t.signal(this.data,"close"),this.widget&&this.widget.close(),t.signal(this.cm,"endCompletion",this.cm))},active:function(){return this.cm.state.completionActive==this},pick:function(e,n){var r=e.list[n];r.hint?r.hint(this.cm,e,r):this.cm.replaceRange(i(r),r.from||e.from,r.to||e.to,"complete"),t.signal(e,"pick",r),this.close()},cursorActivity:function(){this.debounce&&(f(this.debounce),this.debounce=0);var t=this.cm.getCursor(),e=this.cm.getLine(t.line)
 ;if(t.line!=this.startPos.line||e.length-t.ch!=this.startLen-this.startPos.ch||t.ch<this.startPos.ch||this.cm.somethingSelected()||!t.ch||this.options.closeCharacters.test(e.charAt(t.ch-1)))this.close();else{var n=this;this.debounce=d(function(){n.update()}),this.widget&&this.widget.disable()}},update:function(t){if(null!=this.tick){var e=this,n=++this.tick;l(this.options.hint,this.cm,this.options,function(i){e.tick==n&&e.finishUpdate(i,t)})}},finishUpdate:function(e,n){this.data&&t.signal(this.data,"update");var i=this.widget&&this.widget.picked||n&&this.options.completeSingle;this.widget&&this.widget.close(),this.data=e,e&&e.list.length&&(i&&1==e.list.length?this.pick(e,0):(this.widget=new a(this,e),t.signal(e,"shown")))}},a.prototype={close:function(){if(this.completion.widget==this){this.completion.widget=null,this.hints.parentNode.removeChild(this.hints),this.completion.cm.removeKeyMap(this.keyMap);var t=this.completion.cm;this.completion.options.closeOnUnfocus&&(t.off("blur",this.onBlur),t.off("focus",this.onFocus)),t.off("scroll",this.onScroll)}},disable:function(){this.completion.cm.removeKeyMap(this.keyMap);var t=this;this.keyMap={Enter:function(){t.picked=!0}},this.completion.cm.addKeyMap(this.keyMap)},pick:function(){this.completion.pick(this.data,this.selectedHint)},changeActive:function(e,n){if(e>=this.data.list.length?e=n?this.data.list.length-1:0:e<0&&(e=n?0:this.data.list.length-1),this.selectedHint!=e){var i=this.hints.childNodes[this.selectedHint];i&&(i.className=i.className.replace(" "+h,"")),i=this.hints.childNodes[this.selectedHint=e],i.className+=" "+h,i.offsetTop<this.hints.scrollTop?this.hints.scrollTop=i.offsetTop-3:i.offsetTop+i.offsetHeight>this.hints.scrollTop+this.hints.clientHeight&&(this.hints.scrollTop=i.offsetTop+i.offsetHeight-this.hints.clientHeight+3),t.signal(this.data,"select",this.data.list[this.selectedHint],i)}},screenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1}},t.registerHelper("hint","auto",{resolve:c}),t.registerHelper("hint","fromList",function(e,n){var i,r=e.getCursor(),o=e.getTokenAt(r),a=t.Pos(r.line,o.start),s=r;o.start<r.ch&&/\w/.test(o.string.charAt(r.ch-o.start-1))?i=o.string.substr(0,r.ch-o.start):(i="",a=r);for(var l=[],c=0;c<n.words.length;c++){var u=n.words[c];u.slice(0,i.length)==i&&l.push(u)}if(l.length)return{list:l,from:a,to:s}}),t.commands.autocomplete=t.showHint;var p={hint:t.hint.auto,completeSingle:!0,alignWithWord:!0,closeCharacters:/[\s()\[\]{};:>,]/,closeOnUnfocus:!0,completeOnSingleClick:!0,container:null,customKeys:null,extraKeys:null};t.defineOption("hintOptions",null)}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/addon/hint/anyword-hint",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){"use strict";var e=/[\w$]+/;t.registerHelper("hint","anyword",function(n,i){for(var r=i&&i.word||e,o=i&&i.range||500,a=n.getCursor(),s=n.getLine(a.line),l=a.ch,c=l;c&&r.test(s.charAt(c-1));)--c;for(var u=c!=l&&s.slice(c,l),h=i&&i.list||[],d={},f=new RegExp(r.source,"g"),p=-1;p<=1;p+=2)for(var g=a.line,m=Math.min(Math.max(g+p*o,n.firstLine()),n.lastLine())+p;g!=m;g+=p)for(var v,y=n.getLine(g);v=f.exec(y);)g==a.line&&v[0]===u||u&&0!=v[0].lastIndexOf(u,0)||Object.prototype.hasOwnProperty.call(d,v[0])||(d[v[0]]=!0,h.push(v[0]));return{list:h,from:t.Pos(a.line,c),to:t.Pos(a.line,l)}})}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/addon/display/placeholder",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){function e(t){t.state.placeholder&&(t.state.placeholder.parentNode.removeChild(t.state.placeholder),t.state.placeholder=null)}function n(t){e(t);var n=t.state.placeholder=document.createElement("pre");n.style.cssText="height: 0; overflow: visible",n.style.direction=t.getOption("direction"),n.className="CodeMirror-placeholder";var i=t.getOption("placeholder");"string"==typeof i&&(i=document.createTextNode(i)),n.appendChild(i),t.display.lineSpace.insertBefore(n,t.display.lineSpace.firstChild)}function i(t){o(t)&&n(t)}function r(t){var i=t.getWrapperElement(),r=o(t);i.className=i.className.replace(" CodeMirror-empty","")+(r?" CodeMirror-empty":""),r?n(t):e(t)}function o(t){return 1===t.lineCount()&&""===t.getLine(0)}t.defineOption("placeholder","",function(n,o,a){var s=a&&a!=t.Init;if(o&&!s)n.on("blur",i),n.on("change",r),n.on("swapDoc",r),r(n);else if(!o&&s){n.off("blur",i),n.off("change",r),n.off("swapDoc",r),e(n);var l=n.getWrapperElement();l.className=l.className.replace(" CodeMirror-empty","")}o&&!n.hasFocus()&&i(n)})}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/addon/runmode/runmode",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){"use strict";t.runMode=function(e,n,i,r){var o=t.getMode(t.defaults,n),a=/MSIE \d/.test(navigator.userAgent),s=a&&(null==document.documentMode||document.documentMode<9);if(i.appendChild){var l=r&&r.tabSize||t.defaults.tabSize,c=i,u=0;c.innerHTML="",i=function(t,e){if("\n"==t)return c.appendChild(document.createTextNode(s?"\r":t)),void(u=0);for(var n="",i=0;;){var r=t.indexOf("\t",i);if(-1==r){n+=t.slice(i),u+=t.length-i;break}u+=r-i,n+=t.slice(i,r);var o=l-u%l;u+=o;for(var a=0;a<o;++a)n+=" ";i=r+1}if(e){var h=c.appendChild(document.createElement("span"));h.className="cm-"+e.replace(/ +/g," cm-"),h.appendChild(document.createTextNode(n))}else c.appendChild(document.createTextNode(n))}}for(var h=t.splitLines(e),d=r&&r.state||t.startState(o),f=0,p=h.length;f<p;++f){f&&i("\n");var g=new t.StringStream(h[f]);for(!g.string&&o.blankLine&&o.blankLine(d);!g.eol();){var m=o.token(g,d);i(g.current(),m,f,g.start,d),g.start=g.pos}}}}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/addon/search/searchcursor",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){"use strict";function e(t){var e=t.flags;return null!=e?e:(t.ignoreCase?"i":"")+(t.global?"g":"")+(t.multiline?"m":"")}function n(t,n){for(var i=e(t),r=i,o=0;o<n.length;o++)-1==r.indexOf(n.charAt(o))&&(r+=n.charAt(o));return i==r?t:new RegExp(t.source,r)}function i(t){return/\\s|\\n|\n|\\W|\\D|\[\^/.test(t.source)}function r(t,e,i){e=n(e,"g");for(var r=i.line,o=i.ch,a=t.lastLine();r<=a;r++,o=0){e.lastIndex=o;var s=t.getLine(r),l=e.exec(s);if(l)return{from:g(r,l.index),to:g(r,l.index+l[0].length),match:l}}}function o(t,e,o){if(!i(e))return r(t,e,o);e=n(e,"gm");for(var a,s=1,l=o.line,c=t.lastLine();l<=c;){for(var u=0;u<s&&!(l>c);u++){var h=t.getLine(l++);a=null==a?h:a+"\n"+h}s*=2,e.lastIndex=o.ch;var d=e.exec(a);if(d){var f=a.slice(0,d.index).split("\n"),p=d[0].split("\n"),m=o.line+f.length-1,v=f[f.length-1].length;return{from:g(m,v),to:g(m+p.length-1,1==p.length?v+p[0].length:p[p.length-1].length),match:d}}}}function a(t,e){for(var n,i=0;;){e.lastIndex=i;var r=e.exec(t);if(!r)return n;if(n=r,(i=n.index+(n[0].length||1))==t.length)return n}}function s(t,e,i){e=n(e,"g");for(var r=i.line,o=i.ch,s=t.firstLine();r>=s;r--,o=-1){var l=t.getLine(r);o>-1&&(l=l.slice(0,o));var c=a(l,e);if(c)return{from:g(r,c.index),to:g(r,c.index+c[0].length),match:c}}}function l(t,e,i){e=n(e,"gm");for(var r,o=1,s=i.line,l=t.firstLine();s>=l;){for(var c=0;c<o;c++){var u=t.getLine(s--);r=null==r?u.slice(0,i.ch):u+"\n"+r}o*=2;var h=a(r,e);if(h){var d=r.slice(0,h.index).split("\n"),f=h[0].split("\n"),p=s+d.length,m=d[d.length-1].length;return{from:g(p,m),to:g(p+f.length-1,1==f.length?m+f[0].length:f[f.length-1].length),match:h}}}}function c(t,e,n,i){if(t.length==e.length)return n;for(var r=0,o=n+Math.max(0,t.length-e.length);;){if(r==o)return r;var a=r+o>>1,s=i(t.slice(0,a)).length;if(s==n)return a;s>n?o=a:r=a+1}}function u(t,e,n,i){if(!e.length)return null;var r=i?f:p,o=r(e).split(/\r|\n\r?/);t:for(var a=n.line,s=n.ch,l=t.lastLine()+1-o.length;a<=l;a++,s=0){var u=t.getLine(a).slice(s),h=r(u);if(1==o.length){var d=h.indexOf(o[0]);if(-1==d)continue t;var n=c(u,h,d,r)+s;return{from:g(a,c(u,h,d,r)+s),to:g(a,c(u,h,d+o[0].length,r)+s)}}var m=h.length-o[0].length;if(h.slice(m)==o[0]){for(var v=1;v<o.length-1;v++)if(r(t.getLine(a+v))!=o[v])continue t;var y=t.getLine(a+o.length-1),b=r(y),x=o[o.length-1];if(b.slice(0,x.length)==x)return{from:g(a,c(u,h,m,r)+s),to:g(a+o.length-1,c(y,b,x.length,r))}}}}function h(t,e,n,i){if(!e.length)return null;var r=i?f:p,o=r(e).split(/\r|\n\r?/);t:for(var a=n.line,s=n.ch,l=t.firstLine()-1+o.length;a>=l;a--,s=-1){var u=t.getLine(a);s>-1&&(u=u.slice(0,s));var h=r(u);if(1==o.length){var d=h.lastIndexOf(o[0]);if(-1==d)continue t;return{from:g(a,c(u,h,d,r)),to:g(a,c(u,h,d+o[0].length,r))}}var m=o[o.length-1];if(h.slice(0,m.length)==m){for(var v=1,n=a-o.length+1;v<o.length-1;v++)if(r(t.getLine(n+v))!=o[v])continue t;var y=t.getLine(a+1-o.length),b=r(y);if(b.slice(b.length-o[0].length)==o[0])return{from:g(a+1-o.length,c(y,b,y.length-o[0].length,r)),to:g(a,c(u,h,m.length,r))}}}}function d(t,e,i,a){this.atOccurrence=!1,this.doc=t,i=i?t.clipPos(i):g(0,0),this.pos={from:i,to:i};var c;"object"==typeof a?c=a.caseFold:(c=a,a=null),"string"==typeof e?(null==c&&(c=!1),this.matches=function(n,i){return(n?h:u)(t,e,i,c)}):(e=n(e,"gm"),a&&!1===a.multiline?this.matches=function(n,i){return(n?s:r)(t,e,i)}:this.matches=function(n,i){return(n?l:o)(t,e,i)})}var f,p,g=t.Pos;String.prototype.normalize?(f=function(t){return t.normalize("NFD").toLowerCase()},p=function(t){return t.normalize("NFD")}):(f=function(t){return t.toLowerCase()},p=function(t){return t}),d.prototype={findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(e){for(var n=this.matches(e,this.doc.clipPos(e?this.pos.from:this.pos.to));n&&0==t.cmpPos(n.from,n.to);)e?n.from.ch?n.from=g(n.from.line,n.from.ch-1):n=n.from.line==this.doc.firstLine()?null:this.matches(e,this.doc.clipPos(g(n.from.line-1))):n.to.ch<this.doc.getLine(n.to.line).length?n.to=g(n.to.line,n.to.ch+1):n=n.to.line==this.doc.lastLine()?null:this.matches(e,g(n.to.line+1,0));if(n)return this.pos=n,this.atOccurrence=!0,this.pos.match||!0;var i=g(e?this.doc.firstLine():this.doc.lastLine()+1,0);return this.pos={from:i,to:i},this.atOccurrence=!1},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(e,n){if(this.atOccurrence){var i=t.splitLines(e);this.doc.replaceRange(i,this.pos.from,this.pos.to,n),this.pos.to=g(this.pos.from.line+i.length-1,i[i.length-1].length+(1==i.length?this.pos.from.ch:0))}}},t.defineExtension("getSearchCursor",function(t,e,n){return new d(this.doc,t,e,n)}),t.defineDocExtension("getSearchCursor",function(t,e,n){return new d(this,t,e,n)}),t.defineExtension("selectMatches",function(e,n){for(var i=[],r=this.getSearchCursor(e,this.getCursor("from"),n);r.findNext()&&!(t.cmpPos(r.to(),this.getCursor("to"))>0);)i.push({anchor:r.from(),head:r.to()});i.length&&this.setSelections(i,0)})}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/addon/dialog/dialog",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){function e(e,n,i){var r,o=e.getWrapperElement();return r=o.appendChild(document.createElement("div")),r.className=i?"CodeMirror-dialog CodeMirror-dialog-bottom":"CodeMirror-dialog CodeMirror-dialog-top","string"==typeof n?r.innerHTML=n:r.appendChild(n),t.addClass(o,"dialog-opened"),r}function n(t,e){t.state.currentNotificationClose&&t.state.currentNotificationClose(),t.state.currentNotificationClose=e}t.defineExtension("openDialog",function(i,r,o){function a(e){if("string"==typeof e)h.value=e;else{if(c)return;c=!0,t.rmClass(l.parentNode,"dialog-opened"),l.parentNode.removeChild(l),u.focus(),o.onClose&&o.onClose(l)}}o||(o={}),n(this,null);var s,l=e(this,i,o.bottom),c=!1,u=this,h=l.getElementsByTagName("input")[0];return h?(h.focus(),o.value&&(h.value=o.value,!1!==o.selectValueOnOpen&&h.select()),o.onInput&&t.on(h,"input",function(t){o.onInput(t,h.value,a)}),o.onKeyUp&&t.on(h,"keyup",function(t){o.onKeyUp(t,h.value,a)}),t.on(h,"keydown",function(e){o&&o.onKeyDown&&o.onKeyDown(e,h.value,a)||((27==e.keyCode||!1!==o.closeOnEnter&&13==e.keyCode)&&(h.blur(),t.e_stop(e),a()),13==e.keyCode&&r(h.value,e))}),!1!==o.closeOnBlur&&t.on(h,"blur",a)):(s=l.getElementsByTagName("button")[0])&&(t.on(s,"click",function(){a(),u.focus()}),!1!==o.closeOnBlur&&t.on(s,"blur",a),s.focus()),a}),t.defineExtension("openConfirm",function(i,r,o){function a(){c||(c=!0,t.rmClass(s.parentNode,"dialog-opened"),s.parentNode.removeChild(s),u.focus())}n(this,null);var s=e(this,i,o&&o.bottom),l=s.getElementsByTagName("button"),c=!1,u=this,h=1;l[0].focus();for(var d=0;d<l.length;++d){var f=l[d];!function(e){t.on(f,"click",function(n){t.e_preventDefault(n),a(),e&&e(u)})}(r[d]),t.on(f,"blur",function(){--h,setTimeout(function(){h<=0&&a()},200)}),t.on(f,"focus",function(){++h})}}),t.defineExtension("openNotification",function(i,r){function o(){l||(l=!0,clearTimeout(a),t.rmClass(s.parentNode,"dialog-opened"),s.parentNode.removeChild(s))}n(this,o);var a,s=e(this,i,r&&r.bottom),l=!1,c=r&&void 0!==r.duration?r.duration:5e3;return t.on(s,"click",function(e){t.e_preventDefault(e),o()}),c&&(a=setTimeout(o,c)),o})}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror"),require("./searchcursor"),require("../dialog/dialog")):"function"==typeof define&&define.amd?define("cm/addon/search/search",["../../lib/codemirror","./searchcursor","../dialog/dialog"],t):t(CodeMirror)}(function(t){"use strict";function e(t,e){return"string"==typeof t?t=new RegExp(t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),e?"gi":"g"):t.global||(t=new RegExp(t.source,t.ignoreCase?"gi":"g")),{token:function(e){t.lastIndex=e.pos;var n=t.exec(e.string);if(n&&n.index==e.pos)return e.pos+=n[0].length||1,"searching";n?e.pos=n.index:e.skipToEnd()}}}function n(){this.posFrom=this.posTo=this.lastQuery=this.query=null,this.overlay=null}function i(t){return t.state.search||(t.state.search=new n)}function r(t){return"string"==typeof t&&t==t.toLowerCase()}function o(t,e,n){return t.getSearchCursor(e,n,{caseFold:r(e),multiline:!0})}function a(t,e,n,i,r){t.openDialog(e,i,{value:n,selectValueOnOpen:!0,closeOnEnter:!1,onClose:function(){p(t)},onKeyDown:r})}function s(t,e,n,i,r){t.openDialog?t.openDialog(e,r,{value:i,selectValueOnOpen:!0}):r(prompt(n,i))}function l(t,e,n,i){t.openConfirm?t.openConfirm(e,i):confirm(n)&&i[0]()}function c(t){return t.replace(/\\(.)/g,function(t,e){return"n"==e?"\n":"r"==e?"\r":e})}function u(t){var e=t.match(/^\/(.*)\/([a-z]*)$/);if(e)try{t=new RegExp(e[1],-1==e[2].indexOf("i")?"":"i")}catch(t){}else t=c(t);return("string"==typeof t?""==t:t.test(""))&&(t=/x^/),t}function h(t,n,i){n.queryText=i,n.query=u(i),t.removeOverlay(n.overlay,r(n.query)),n.overlay=e(n.query,r(n.query)),t.addOverlay(n.overlay),t.showMatchesOnScrollbar&&(n.annotate&&(n.annotate.clear(),n.annotate=null),n.annotate=t.showMatchesOnScrollbar(n.query,r(n.query)))}function d(e,n,r,o){var l=i(e);if(l.query)return f(e,n);var c=e.getSelection()||l.lastQuery;if(c instanceof RegExp&&"x^"==c.source&&(c=null),r&&e.openDialog){var u=null,d=function(n,i){t.e_stop(i),n&&(n!=l.queryText&&(h(e,l,n),l.posFrom=l.posTo=e.getCursor()),u&&(u.style.opacity=1),f(e,i.shiftKey,function(t,n){var i;n.line<3&&document.querySelector&&(i=e.display.wrapper.querySelector(".CodeMirror-dialog"))&&i.getBoundingClientRect().bottom-4>e.cursorCoords(n,"window").top&&((u=i).style.opacity=.4)}))};a(e,g(e),c,d,function(n,r){var o=t.keyName(n),a=e.getOption("extraKeys"),s=a&&a[o]||t.keyMap[e.getOption("keyMap")][o];"findNext"==s||"findPrev"==s||"findPersistentNext"==s||"findPersistentPrev"==s?(t.e_stop(n),h(e,i(e),r),e.execCommand(s)):"find"!=s&&"findPersistent"!=s||(t.e_stop(n),d(r,n))}),o&&c&&(h(e,l,c),f(e,n))}else s(e,g(e),"Search for:",c,function(t){t&&!l.query&&e.operation(function(){h(e,l,t),l.posFrom=l.posTo=e.getCursor(),f(e,n)})})}function f(e,n,r){e.operation(function(){var a=i(e),s=o(e,a.query,n?a.posFrom:a.posTo);(s.find(n)||(s=o(e,a.query,n?t.Pos(e.lastLine()):t.Pos(e.firstLine(),0)),s.find(n)))&&(e.setSelection(s.from(),s.to()),e.scrollIntoView({from:s.from(),to:s.to()},20),a.posFrom=s.from(),a.posTo=s.to(),r&&r(s.from(),s.to()))})}function p(t){t.operation(function(){var e=i(t);e.lastQuery=e.query,e.query&&(e.query=e.queryText=null,t.removeOverlay(e.overlay),e.annotate&&(e.annotate.clear(),e.annotate=null))})}function g(t){return'<span class="CodeMirror-search-label">'+t.phrase("Search:")+'</span> <input type="text" style="width: 10em" class="CodeMirror-search-field"/> <span style="color: #888" class="CodeMirror-search-hint">'+t.phrase("(Use /re/ syntax for regexp search)")+"</span>"}function m(t){return' <input type="text" style="width: 10em" class="CodeMirror-search-field"/> <span style="color: #888" class="CodeMirror-search-hint">'+t.phrase("(Use /re/ syntax for regexp search)")+"</span>"}function v(t){return'<span class="CodeMirror-search-label">'+t.phrase("With:")+'</span> <input type="text" style="width: 10em" class="CodeMirror-search-field"/>'}function y(t){return'<span class="CodeMirror-search-label">'+t.phrase("Replace?")+"</span> <button>"+t.phrase("Yes")+"</button> <button>"+t.phrase("No")+"</button> <button>"+t.phrase("All")+"</button> <button>"+t.phrase("Stop")+"</button> "}function b(t,e,n){t.operation(function(){for(var i=o(t,e);i.findNext();)if("string"!=typeof e){var r=t.getRange(i.from(),i.to()).match(e);i.replace(n.replace(/\$(\d)/g,function(t,e){return r[e]}))}else i.replace(n)})}function x(t,e){if(!t.getOption("readOnly")){var n=t.getSelection()||i(t).lastQuery,r='<span class="CodeMirror-search-label">'+(e?t.phrase("Replace all:"):t.phrase("Replace:"))+"</span>";s(t,r+m(t),r,n,function(n){n&&(n=u(n),s(t,v(t),t.phrase("Replace with:"),"",function(i){if(i=c(i),e)b(t,n,i);else{p(t);var r=o(t,n,t.getCursor("from")),a=function(){var e,c=r.from();!(e=r.findNext())&&(r=o(t,n),!(e=r.findNext())||c&&r.from().line==c.line&&r.from().ch==c.ch)||(t.setSelection(r.from(),r.to()),t.scrollIntoView({from:r.from(),to:r.to()}),l(t,y(t),t.phrase("Replace?"),[function(){s(e)},a,function(){b(t,n,i)}]))},s=function(t){r.replace("string"==typeof n?i:i.replace(/\$(\d)/g,function(e,n){return t[n]})),a()};a()}}))})}}t.commands.find=function(t){p(t),d(t)},t.commands.findPersistent=function(t){p(t),d(t,!1,!0)},t.commands.findPersistentNext=function(t){d(t,!1,!0,!0)},t.commands.findPersistentPrev=function(t){d(t,!0,!0,!0)},t.commands.findNext=d,t.commands.findPrev=function(t){d(t,!0)},t.commands.clearSearch=p,t.commands.replace=x,t.commands.replaceAll=function(t){x(t,!0)}}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror"),require("../dialog/dialog")):"function"==typeof define&&define.amd?define("cm/addon/search/jump-to-line",["../../lib/codemirror","../dialog/dialog"],t):t(CodeMirror)}(function(t){"use strict";function e(t,e,n,i,r){t.openDialog?t.openDialog(e,r,{value:i,selectValueOnOpen:!0}):r(prompt(n,i))}function n(t){return t.phrase("Jump to line:")+' <input type="text" style="width: 10em" class="CodeMirror-search-field"/> <span style="color: #888" class="CodeMirror-search-hint">'+t.phrase("(Use line:column or scroll% syntax)")+"</span>"}function i(t,e){var n=Number(e);return/^[-+]/.test(e)?t.getCursor().line+n:n-1}t.commands.jumpToLine=function(t){var r=t.getCursor();e(t,n(t),t.phrase("Jump to line:"),r.line+1+":"+r.ch,function(e){if(e){var n;if(n=/^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(e))t.setCursor(i(t,n[1]),Number(n[2]));else if(n=/^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(e)){var o=Math.round(t.lineCount()*Number(n[1])/100);/^[-+]/.test(n[1])&&(o=r.line+o+1),t.setCursor(o-1,r.ch)}else(n=/^\s*\:?\s*([\+\-]?\d+)\s*/.exec(e))&&t.setCursor(i(t,n[1]),r.ch)}})},t.keyMap.default["Alt-G"]="jumpToLine"}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/addon/hover/text-hover",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){"use strict";!function(){function e(e,n){function i(e){if(!r.parentNode)return t.off(document,"mousemove",i);r.style.top=Math.max(0,e.clientY-r.offsetHeight-5)+"px",r.style.left=e.clientX+5+"px"}var r=document.createElement("div");return r.className="CodeMirror-hover-tooltip","string"==typeof n&&(n=document.createTextNode(n)),r.appendChild(n),document.body.appendChild(r),t.on(document,"mousemove",i),i(e),null!=r.style.opacity&&(r.style.opacity=1),r}function n(t){t.parentNode&&t.parentNode.removeChild(t)}function i(t){t.parentNode&&(null==t.style.opacity&&n(t),t.style.opacity=0,setTimeout(function(){n(t)},600))}function r(n,r,o,a,s){function l(){t.off(o,"mouseout",l),t.off(o,"click",l),o.className=o.className.replace(h,""),c&&(i(c),c=null),s.removeKeyMap(a.keyMap)}var c=e(n,r),u=setInterval(function(){if(c)for(var t=o;;t=t.parentNode){if(t==document.body)return;if(!t){l();break}}if(!c)return clearInterval(u)},400);t.on(o,"mouseout",l),t.on(o,"click",l),a.keyMap={Esc:l},s.addKeyMap(a.keyMap)}function o(t,e){this.options=e,this.timeout=null,e.delay?this.onMouseOver=function(e){s(t,e)}:this.onMouseOver=function(e){l(t,e)},this.keyMap=null}function a(e,n){if(n instanceof Function)return{getTextHover:n};if(n&&!0!==n||(n={}),n.getTextHover||(n.getTextHover=e.getHelper(t.Pos(0,0),"textHover")),!n.getTextHover)throw new Error("Required option 'getTextHover' missing (text-hover addon)");return n}function s(t,e){var n=t.state.textHover,i=n.options.delay;if(clearTimeout(n.timeout),e.srcElement){var r={srcElement:e.srcElement,clientX:e.clientX,clientY:e.clientY};e=r}n.timeout=setTimeout(function(){l(t,e)},i)}function l(t,e){var n=e.target||e.srcElement;if(n){var i=t.state.textHover,o=u(t,e),a=i.options.getTextHover(t,o,e);a&&(n.className+=h,"function"==typeof a?a(r,o,e,n,i,t):r(e,a,n,i,t))}}function c(e,n,i){if(i&&i!=t.Init&&(t.off(e.getWrapperElement(),"mouseover",e.state.textHover.onMouseOver),delete e.state.textHover),n){var r=e.state.textHover=new o(e,a(e,n));t.on(e.getWrapperElement(),"mouseover",r.onMouseOver)}}function u(t,e){for(var n=e.target||e.srcElement,i=n.innerText||n.textContent,r=0;r<d.length;r+=2){var o=t.coordsChar({left:e.clientX+d[r],top:e.clientY+d[r+1]}),a=t.getTokenAt(o);if(a&&a.string===i)return{token:a,pos:o}}}var h=" CodeMirror-hover",d=[0,0,0,5,0,-5,5,0,-5,0];t.defineOption("textHover",!1,c)}()}),define("cm/addon/hover/prolog-hover",["../../lib/codemirror","jquery","laconic"],function(t,e){"use strict";function n(t){return e.el.span({class:"pred-name"},t.text+"/"+t.arity)}function i(t,e,n){s[n]=e}function r(t,e){var n;return s[t.file]?s[t.file]:(n=t.file.lastIndexOf("/"))?t.file.substring(n+1):t.file}function o(t,n,i){return n&&n.file?e.el.div(a(t)+" included from ",e.el.span({class:"file-path"},n.file)):n&&n.line?a(t)+" defined in line "+n.line:"Locally defined "+t}function a(t){return t[0].toUpperCase()+t.slice(1)}var s={},l={goal_built_in:function(t,i){return t?e.el.div(n(t),i.tokenInfo(t)):"Built-in predicate"},goal_global:function(t,i){return t?e.el.div(n(t),i.tokenInfo(t)):"Global predicate"},goal_autoload:function(t,i){return t?e.el.div(n(t)," (autoload from ",r(t,i),"): ",i.tokenInfo(t)):"Autoloaded predicate"},goal_imported:function(t,i){return t?e.el.div(n(t)," (imported from ",r(t,i),"): ",i.tokenInfo(t)):"Imported predicate"},goal_recursion:"Recursive call",goal_dynamic:"Dynamic predicate",goal_undefined:"Undefined predicate",goal_local:function(t,e){return o("predicate",t,e)},goal_constraint:function(t,e){return o("CHR constraint",t,e)},head_unreferenced:"Predicate is not called",unused_import:"Imported predicate is not used",undefined_import:"Imported predicate is not defined",head_constraint:"CHR constraint",file:function(t,n){return t?(i(n,t.text,t.path),e.el.div("File: ",e.el.span({class:"file-path"},t.path))):"File name"},file_no_depends:function(t,n){return t?(i(n,t.text,t.path),e.el.div("File: ",e.el.span({class:"file-path"},t.path),e.el.div({class:"hover-remark"},"does not resolve any dependencies"))):"File name (does not resolve any dependencies)"},error:function(t,n){return t&&t.expected?e.el.div("error: ",e.el.strong(t.expected)," expected"):"error"},singleton:"Variable appearing only once",codes:"List of Unicode code points (integers)",chars:"List of one-character atoms",string:"Packed string (SWI7, use `text` for a list of codes)",qatom:"Quoted atom",uatom:"Uppercase atom due to var_prefix flag",tag:"Tag of a SWI7 dict",ext_quant:"Existential quantification operator",instantiation_error:"No variable allowed here",string_terminal:"Terminal (DCG)",format_string:"Format string",html:"HTML element",html_attribute:"HTML element attribute",html_call:"Call HTML rule",html_raw:"Include raw HTML",head:null,control:null,fullstop:null,var:null,int:null,float:null,number:null,atom:null,functor:null,comment:null,neck:null,operator:null,sep:null,list_open:null,list_close:null,dict_open:null,dict_close:null};t.registerHelper("textHover","prolog",function(t,n,i){if(n){var r,o=n.token,a=l[o.type];if(void 0===a)return(r=t.getEnrichedToken(o))?r.summary&&"ask"===r.info?e.el.div(r.summary,t.tokenInfo(r)):r.summary?e.el.div(r.summary):e.el.div(o.type):e.el.div(o.type);if("function"==typeof a){var s=a(t.getEnrichedToken(o),t);return"string"==typeof s?e.el.div(s):s}if("string"==typeof a)return e.el.div(a)}return null})}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/addon/hint/show-context-info",["../../lib/codemirror"],t):t(CodeMirror)}(function(t){var e=null;t.attachContextInfo=function(n){t.on(n,"select",function(t,n){n=n.parentNode;var i=null;if(t.info&&(i=t.info(t)),i){var r=n.getBoundingClientRect();null==e&&(e=document.createElement("div"),e.className="CodeMirror-hints-contextInfo",document.body.appendChild(e)),e.innerHTML="",e.style.top=n.style.top,e.style.left=r.right+"px","string"==typeof i?e.innerHTML=i:e.appendChild(i),e.style.display="block"}else null!=e&&(e.innerHTML="",e.style.display="none")}),t.on(n,"close",function(){null!=e&&e.parentNode.removeChild(e),e=null})},t.showContextInfo=function(e){return function(n,i,r){r||(r=i);var o=e(n,r);return t.attachContextInfo(o),o}}}),function(t){"object"==typeof exports&&"object"==typeof module?t(require("../lib/codemirror")):"function"==typeof define&&define.amd?define("cm/keymap/emacs",["../lib/codemirror"],t):t(CodeMirror)}(function(t){"use strict";function e(t,e){return t.line==e.line&&t.ch==e.ch}function n(t){O.push(t),O.length>50&&O.shift()}function i(t){if(!O.length)return n(t);O[O.length-1]+=t}function r(t){return O[O.length-(t?Math.min(t,1):1)]||""}function o(){return O.length>1&&O.pop(),r()}function a(t,r,o,a,s){null==s&&(s=t.getRange(r,o)),"grow"==a&&R&&R.cm==t&&e(r,R.pos)&&t.isClean(R.gen)?i(s):!1!==a&&n(s),t.replaceRange("",r,o,"+delete"),R="grow"==a?{cm:t,pos:r,gen:t.changeGeneration()}:null}function s(t,e,n){return t.findPosH(e,n,"char",!0)}function l(t,e,n){return t.findPosH(e,n,"word",!0)}function c(t,e,n){return t.findPosV(e,n,"line",t.doc.sel.goalColumn)}function u(t,e,n){return t.findPosV(e,n,"page",t.doc.sel.goalColumn)}function h(t,e,n){for(var i=e.line,r=t.getLine(i),o=/\S/.test(n<0?r.slice(0,e.ch):r.slice(e.ch)),a=t.firstLine(),s=t.lastLine();;){if((i+=n)<a||i>s)return t.clipPos(N(i-n,n<0?0:null));r=t.getLine(i);if(/\S/.test(r))o=!0;else if(o)return N(i,0)}}function d(t,e,n){for(var i=e.line,r=e.ch,o=t.getLine(e.line),a=!1;;){var s=o.charAt(r+(n<0?-1:0));if(s){if(a&&/[!?.]/.test(s))return N(i,r+(n>0?1:0));a||(a=/\w/.test(s)),r+=n}else{if(i==(n<0?t.firstLine():t.lastLine()))return N(i,r);if(o=t.getLine(i+n),!/\S/.test(o))return N(i,r);i+=n,r=n<0?o.length:0}}}function f(t,n,i){var r;if(t.findMatchingBracket&&(r=t.findMatchingBracket(n,{strict:!0}))&&r.match&&(r.forward?1:-1)==i)return i>0?N(r.to.line,r.to.ch+1):r.to;for(var o=!0;;o=!1){var a=t.getTokenAt(n),s=N(n.line,i<0?a.start:a.end);if(!(o&&i>0&&a.end==n.ch)&&/\w/.test(a.string))return s;var l=t.findPosH(s,i,"char");if(e(s,l))return n;n=l}}function p(t,e){var n=t.state.emacsPrefix;return n?(_(t),"-"==n?-1:Number(n)):e?null:1}function g(t){var e="string"==typeof t?function(e){e.execCommand(t)}:t;return function(t){var n=p(t);e(t);for(var i=1;i<n;++i)e(t)}}function m(t,n,i,r){var o=p(t);o<0&&(r=-r,o=-o);for(var a=0;a<o;++a){var s=i(t,n,r);if(e(s,n))break;n=s}return n}function v(t,e){var n=function(n){n.extendSelection(m(n,n.getCursor(),t,e))};return n.motion=!0,n}function y(t,e,n,i){for(var r,o=t.listSelections(),s=o.length;s--;)r=o[s].head,a(t,r,m(t,r,e,n),i)}function b(t,e){if(t.somethingSelected()){for(var n,i=t.listSelections(),r=i.length;r--;)n=i[r],a(t,n.anchor,n.head,e);return!0}}function x(t,e){if(t.state.emacsPrefix)return void("-"!=e&&(t.state.emacsPrefix+=e));t.state.emacsPrefix=e,t.on("keyHandled",w),t.on("inputRead",S)}function w(t,e){t.state.emacsPrefixMap||I.hasOwnProperty(e)||_(t)}function _(t){t.state.emacsPrefix=null,t.off("keyHandled",w),t.off("inputRead",S)}function S(t,e){var n=p(t);if(n>1&&"+input"==e.origin){for(var i=e.text.join("\n"),r="",o=1;o<n;++o)r+=i;t.replaceSelection(r)}}function C(t){t.state.emacsPrefixMap=!0,t.addKeyMap(j),t.on("keyHandled",T),t.on("inputRead",T)}function T(t,e){("string"!=typeof e||!/^\d$/.test(e)&&"Ctrl-U"!=e)&&(t.removeKeyMap(j),t.state.emacsPrefixMap=!1,t.off("keyHandled",T),t.off("inputRead",T))}function k(t){t.setCursor(t.getCursor()),t.setExtending(!t.getExtending()),t.on("change",function(){t.setExtending(!1)})}function A(t){t.setExtending(!1),t.setCursor(t.getCursor())}function M(t,e,n){t.openDialog?t.openDialog(e+': <input type="text" style="width: 10em"/>',n,{bottom:!0}):n(prompt(e,""))}function E(t,e){var n=t.getCursor(),i=t.findPosH(n,1,"word");t.replaceRange(e(t.getRange(n,i)),n,i),t.setCursor(i)}function L(t){for(var e=t.getCursor(),n=e.line,i=e.ch,r=[];n>=t.firstLine();){for(var o=t.getLine(n),a=null==i?o.length:i;a>0;){var i=o.charAt(--a);if(")"==i)r.push("(");else if("]"==i)r.push("[");else if("}"==i)r.push("{");else if(/[\(\{\[]/.test(i)&&(!r.length||r.pop()!=i))return t.extendSelection(N(n,a))}--n,i=null}}function P(t){t.execCommand("clearSearch"),A(t)}function D(t){j[t]=function(e){x(e,t)},F["Ctrl-"+t]=function(e){x(e,t)},I["Ctrl-"+t]=!0}var N=t.Pos,O=[],R=null,I={"Alt-G":!0,"Ctrl-X":!0,"Ctrl-Q":!0,"Ctrl-U":!0};t.emacs={kill:a,killRegion:b,repeated:g};for(var F=t.keyMap.emacs=t.normalizeKeyMap({"Ctrl-W":function(t){a(t,t.getCursor("start"),t.getCursor("end"),!0)},"Ctrl-K":g(function(t){var e=t.getCursor(),n=t.clipPos(N(e.line)),i=t.getRange(e,n);/\S/.test(i)||(i+="\n",n=N(e.line+1,0)),a(t,e,n,"grow",i)}),"Alt-W":function(t){n(t.getSelection()),A(t)},"Ctrl-Y":function(t){var e=t.getCursor();t.replaceRange(r(p(t)),e,e,"paste"),t.setSelection(e,t.getCursor())},"Alt-Y":function(t){t.replaceSelection(o(),"around","paste")},"Ctrl-Space":k,"Ctrl-Shift-2":k,"Ctrl-F":v(s,1),"Ctrl-B":v(s,-1),Right:v(s,1),Left:v(s,-1),"Ctrl-D":function(t){y(t,s,1,!1)},Delete:function(t){b(t,!1)||y(t,s,1,!1)},"Ctrl-H":function(t){y(t,s,-1,!1)},Backspace:function(t){b(t,!1)||y(t,s,-1,!1)},"Alt-F":v(l,1),"Alt-B":v(l,-1),"Alt-Right":v(l,1),"Alt-Left":v(l,-1),"Alt-D":function(t){y(t,l,1,"grow")},"Alt-Backspace":function(t){y(t,l,-1,"grow")},"Ctrl-N":v(c,1),"Ctrl-P":v(c,-1),Down:v(c,1),Up:v(c,-1),"Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd",End:"goLineEnd",Home:"goLineStart","Alt-V":v(u,-1),"Ctrl-V":v(u,1),PageUp:v(u,-1),PageDown:v(u,1),"Ctrl-Up":v(h,-1),"Ctrl-Down":v(h,1),"Alt-A":v(d,-1),"Alt-E":v(d,1),"Alt-K":function(t){y(t,d,1,"grow")},"Ctrl-Alt-K":function(t){y(t,f,1,"grow")},"Ctrl-Alt-Backspace":function(t){y(t,f,-1,"grow")},"Ctrl-Alt-F":v(f,1),"Ctrl-Alt-B":v(f,-1),
-"Shift-Ctrl-Alt-2":function(t){var e=t.getCursor();t.setSelection(m(t,e,f,1),e)},"Ctrl-Alt-T":function(t){var e=f(t,t.getCursor(),-1),n=f(t,e,1),i=f(t,n,1),r=f(t,i,-1);t.replaceRange(t.getRange(r,i)+t.getRange(n,r)+t.getRange(e,n),e,i)},"Ctrl-Alt-U":g(L),"Alt-Space":function(t){for(var e=t.getCursor(),n=e.ch,i=e.ch,r=t.getLine(e.line);n&&/\s/.test(r.charAt(n-1));)--n;for(;i<r.length&&/\s/.test(r.charAt(i));)++i;t.replaceRange(" ",N(e.line,n),N(e.line,i))},"Ctrl-O":g(function(t){t.replaceSelection("\n","start")}),"Ctrl-T":g(function(t){t.execCommand("transposeChars")}),"Alt-C":g(function(t){E(t,function(t){var e=t.search(/\w/);return-1==e?t:t.slice(0,e)+t.charAt(e).toUpperCase()+t.slice(e+1).toLowerCase()})}),"Alt-U":g(function(t){E(t,function(t){return t.toUpperCase()})}),"Alt-L":g(function(t){E(t,function(t){return t.toLowerCase()})}),"Alt-;":"toggleComment","Ctrl-/":g("undo"),"Shift-Ctrl--":g("undo"),"Ctrl-Z":g("undo"),"Cmd-Z":g("undo"),"Shift-Alt-,":"goDocStart","Shift-Alt-.":"goDocEnd","Ctrl-S":"findPersistentNext","Ctrl-R":"findPersistentPrev","Ctrl-G":P,"Shift-Alt-5":"replace","Alt-/":"autocomplete",Enter:"newlineAndIndent","Ctrl-J":g(function(t){t.replaceSelection("\n","end")}),Tab:"indentAuto","Alt-G G":function(t){var e=p(t,!0);if(null!=e&&e>0)return t.setCursor(e-1);M(t,"Goto line",function(e){var n;e&&!isNaN(n=Number(e))&&n==(0|n)&&n>0&&t.setCursor(n-1)})},"Ctrl-X Tab":function(t){t.indentSelection(p(t,!0)||t.getOption("indentUnit"))},"Ctrl-X Ctrl-X":function(t){t.setSelection(t.getCursor("head"),t.getCursor("anchor"))},"Ctrl-X Ctrl-S":"save","Ctrl-X Ctrl-W":"save","Ctrl-X S":"saveAll","Ctrl-X F":"open","Ctrl-X U":g("undo"),"Ctrl-X K":"close","Ctrl-X Delete":function(t){a(t,t.getCursor(),d(t,t.getCursor(),1),"grow")},"Ctrl-X H":"selectAll","Ctrl-Q Tab":g("insertTab"),"Ctrl-U":C}),j={"Ctrl-G":_},H=0;H<10;++H)D(String(H));D("-")}),define("editor",["cm/lib/codemirror","config","preferences","form","cm/mode/prolog/prolog-template-hint","modal","tabbed","prolog","storage","cm/mode/prolog/prolog","cm/mode/prolog/prolog_keys","cm/mode/prolog/prolog_query","cm/mode/prolog/prolog_server","cm/mode/markdown/markdown","cm/addon/edit/matchbrackets","cm/addon/comment/continuecomment","cm/addon/comment/comment","cm/addon/hint/show-hint","cm/addon/hint/anyword-hint","cm/addon/display/placeholder","cm/addon/runmode/runmode","cm/addon/search/search","cm/addon/search/searchcursor","cm/addon/search/jump-to-line","cm/addon/dialog/dialog","cm/addon/hover/text-hover","cm/addon/hover/prolog-hover","cm/addon/hint/templates-hint","cm/addon/hint/show-context-info","jquery","laconic","cm/keymap/emacs"],function(t,e,n,i,r,o,a,s){function l(t,e){var n=[];e=e||"",n.push("<style>\n");for(var i in t)if(t.hasOwnProperty(i)){var r=t[i];n.push(e,i,"{");for(var o in r)r.hasOwnProperty(o)&&n.push(o,":",r[o],";");n.push("}\n")}n.push("</style>\n"),$("body").append(n.join(""))}!function(i){var l,c="prologEditor",u={prolog:{mode:"prolog",role:"source",placeholder:"Your Prolog rules and facts go here ...",lineNumbers:!0,autoCurrent:!0,save:!1,theme:"prolog",matchBrackets:!0,textHover:!0,prologKeys:!0,extraKeys:{"Ctrl-Space":"autocomplete","Alt-/":"autocomplete"},hintOptions:{hint:r.getHints,completeSingle:!1}},markdown:{mode:"markdown",placeholder:"Your markdown block goes here ...",lineWrapping:!0,save:!1}},h={query:{mode:"prolog",role:"query",placeholder:"Your query goes here ...",lineNumbers:!1,lineWrapping:!0,save:!1}},d={_init:function(r){return this.each(function(){function o(t){var e=p.long_click,n=t.clientX-e.clientX,i=t.clientY-e.clientY;Math.sqrt(n*n+i*i)>5&&a()}function a(){d.off("mousemove",o);var t=p.long_click;t.timeout&&(clearTimeout(t.timeout),t.target=void 0,t.timeout=void 0)}function s(t){var e=i(l).data(t);e&&(f[t]=e)}var l,d=i(this),f={},p={};r=r||{},r.mode=r.mode||"prolog";var g=i.extend({},u[r.mode]);r.role&&h[r.role]&&(g=i.extend(g,h[r.role])),g=i.extend(g,r),n.getVal("emacs-keybinding")&&(g.keyMap="emacs"),"prolog"==g.mode&&(p.role=g.role,g.getSource&&(p.getSource=g.getSource),e.http.locations.cm_highlight&&(g.prologHighlightServer={url:e.http.locations.cm_highlight,role:g.role,enabled:n.getVal("semantic-highlighting")},g.sourceID&&(g.prologHighlightServer.sourceID=g.sourceID),g.extraKeys["Ctrl-R"]="refreshHighlight"),"source"==g.role&&(g.continueComments="Enter",g.gutters=["Prolog-breakpoints"]),p.long_click={},d.on("mousedown",".CodeMirror-code",function(t){var e=p.long_click;e.clientX=t.clientX,e.clientY=t.clientY,d.on("mousemove",o),p.long_click.timeout=setTimeout(function(){a(),d.prologEditor("contextAction")},500)}),d.on("mouseup",function(t){a()})),(l=d.children("textarea")[0])?(s("file"),s("url"),s("title"),s("meta"),s("st_type"),s("chats"),p.cm=t.fromTextArea(l,g)):(g.value||(g.value=d.text()),p.cm=t(d[0],g)),d.data(c,p),d.prologEditor("loadMode",g.mode),d.addClass("swish-event-receiver"),d.addClass("prolog-editor"),d.on("preference",function(t,e){d.prologEditor("preference",e)}),d.on("print",function(){"query"!=p.role&&d.prologEditor("print")}),d.on("clearMessages",function(t){d.prologEditor("clearMessages")}),d.on("edit-command",function(t,e){d.prologEditor("execCommand",e)}),p.cm.on("blur",function(t){d.prologEditor("execCommand","prepare")}),g.save&&(f.typeName=g.typeName||"program",d.prologEditor("setupStorage",f)),d.on("activate-tab",function(t){p.cm.refresh()}),"prolog"==g.mode&&"source"==p.role&&(d.on("activate-tab",function(t){g.autoCurrent&&d.prologEditor("makeCurrent")}),d.on("source-error",function(t,e){d.prologEditor("highlightError",e)}),d.on("pengine-died",function(t,e){if(p.pengines){var n=p.pengines.indexOf(e);n>=0&&p.pengines.splice(n,1)}p.traceMark&&p.traceMark.pengine==e&&(p.traceMark.clear(),p.traceMark=null)}),g.save&&d.on("addExample",function(t,e){d.prologEditor("addExample",e)}),p.cm.on("gutterClick",function(t,e){t.lineInfo(e).gutterMarkers?t.setGutterMarker(e,"Prolog-breakpoints",null):t.setGutterMarker(e,"Prolog-breakpoints",function(){return i('<span class="breakpoint-marker">&#9679;</span>')[0]}())})),p.cm.on("change",function(t,e){var n;if("setValue"==e.origin)n=!0;else{var i=d.data("storage"),r=i?i.cleanGeneration:p.cleanGeneration;n=p.cm.isClean(r)}d.prologEditor("markClean",n)})})},getOption:function(t){return this.data(c)[t]},setKeybinding:function(t){t=t||"default",this.data(c).cm.options.keyMap=t},loadMode:function(e){var n=this.data(c);return t.modes[e]?e!=n.mode&&n.cm.setOption("mode",e):require(["cm/mode/"+e+"/"+e],function(){n.cm.setOption("mode",e)}),this},isPengineSource:function(){var t=i(this).data(c);if(t&&"source"==t.role){var e=i(this).data("storage");if(e&&e.meta&&(e.meta.loaded||e.meta.module))return!1}return this},getBreakpoints:function(t){var e=[];return this.each(function(){for(var n=i(this).data(c),r=[],o=n.cm,a=o.firstLine(),s=o.lastLine();a<s;a++){o.lineInfo(a).gutterMarkers&&r.push(0+a+1)}if(r.length>0){var l;if(n.pengines&&n.pengines.indexOf(t)>=0)l="pengine://"+t+"/src";else{var u=i(this).data("storage");u&&(l="swish://"+u.file)}l&&e.push({file:l,breakpoints:r})}}),e},getSource:function(t,e){var n=[];return this.each(function(){if(i(this).prologEditor("isPengineSource")){var r=i(this).data(c);if(r&&(!t||t==r.role)){var o;o="function"!=typeof r.getSource||e?r.cm.getValue():r.getSource(),n.push(o)}}}),n.join("\n\n")},getSourceEx:function(){var t={value:this.data(c).cm.getValue()},e=this.prologEditor("getBreakpoints");return e.length>0&&(t.breakpoints=e),t},docid:function(){var t;return this.hasClass("storage")?this.storage("docid"):(t=this.closest(".storage"))&&t.length>0&&(stdoc=t.storage("docid"),stdoc)?stdoc+"#"+this.closest(".nb-cell").attr("name"):void 0},getSourceID:function(){var t=[];return this.each(function(){var e=i(this).data(c);e&&e.cm&&e.cm.state.prologHighlightServer?t.push(e.cm.state.prologHighlightServer.uuid):t.push(null)}),t},setSource:function(t,e){if("string"==typeof t&&(t={data:t}),this.data("storage")&&1!=e)this.storage("setSource",t);else{var n=this.data(c);n.cm.setValue(t.data),(t.line||t.prompt)&&(n.cm.refresh(),t.line?this.prologEditor("gotoLine",t.line,t):this.prologEditor("showTracePort",t.prompt)),"source"!=n.role||t.noHistory||i(".swish-event-receiver").trigger("program-loaded",{editor:this,query:t.query})}return this},makeCurrent:function(t){return t&&t.noHistory||i(".swish-event-receiver").trigger("current-program",this),this},focus:function(){var t=this.data(c);return t&&t.cm.focus(),this},markClean:function(t){var e=this.data(c);e.clean_signalled!=t&&(e.clean_signalled=t,this.trigger("data-is-clean",t))},setIsClean:function(){return this.each(function(){var t=i(this),e=t.data(c);e.cleanGeneration=e.cm.changeGeneration(),e.clean_signalled=!0})},pengine:function(t){var e=this.data(c);if(e){if(t.add)return e.pengines=e.pengines||[],e.pengines.indexOf(t.add)<0&&e.pengines.push(t.add),this;if(t.has)return e.pengines&&e.pengines.indexOf(t.has)>=0}},print:function(n){function r(t){var e=i.el.iframe({src:"about:blank"});i("body").append(e),i("body",e.contentWindow.document).append(t),e.contentWindow.print()}var a=i.el.pre({class:"cm-s-prolog"});return n||(n=this.prologEditor("getSource")),t.runMode(n,"prolog",a),i.ajax({url:e.http.locations.swish+"js/codemirror/theme/prolog.css",dataType:"text",success:function(t){r(i.el.div(i.el.style(t),a))},error:function(t){o.ajaxError(t)}}),this},preference:function(t){var e=this.data(c);return"semantic-highlighting"==t.name&&e.cm.setOption("prologHighlightServer",{enabled:t.value}),"emacs-keybinding"==t.name&&(1==t.value?e.cm.setOption("keyMap","emacs"):e.cm.setOption("keyMap","default")),this},highlightError:function(t){if(t.location.file&&(1==t.location.file||this.prologEditor("isMyFile",t.location.file))){var e,n=this.data(c);t.location.ch&&(left=n.cm.charCoords({line:t.location.line-1,ch:t.location.ch-1},"local").left,e=i.el.div({class:"source-msg-charmark"},i.el.span({class:"glyphicon glyphicon-chevron-up"})),i(e).css("padding-left",left+"px"));var r=i.el.div({class:"source-msg error error-context",title:"Error message.  Click to remove"},e,i(t.data)[0],i.el.span({class:"glyphicon glyphicon-remove-circle"})),o=n.cm.addLineWidget(t.location.line-1,r);t.error_context&&i(r).data("error_context",t.error_context),i(r).on("click",function(e){t.error_handler&&0==t.error_handler(e)||o.clear()}),i(r).data("cm-widget",o)}return this},refreshHighlight:function(){return this.data(c).cm.serverAssistedHighlight(!0),this},refresh:function(){var t=this.data(c);return t&&t.cm.refresh(),this},clearMessages:function(){return this.find(".source-msg").each(function(){i(this).data("cm-widget").clear()}),this.prologEditor("showTracePort",null),this},execCommand:function(t){if("prepare"==t)l=this[0];else if(l==this[0]){elem=i(l);var e=elem.data(c);e.cm.execCommand(t),elem.find(".Codemirror-dialog input").focus()}return this},isMyFile:function(t){if(t.startsWith("pengine://")){var e=this.data(c);if(e.pengines&&(id=t.split("/")[2])&&e.pengines.indexOf(id)>=0)return!0}if(t.startsWith("swish://")){var n=this.data("storage");if(n&&t.slice("swish://".length)==n.file)return!0}return!1},showTracePort:function(t){if(0==this.length)return this;var e=this.data(c);if(e.traceMark&&(e.traceMark.clear(),e.traceMark=null),!(t&&t.source&&t.source.file))return this;var n=t.source.file;if(this.prologEditor("isMyFile",n)){if(t.source.from&&t.source.to){var i=e.cm.charOffsetToPos(t.source.from),r=e.cm.charOffsetToPos(t.source.to);this.is(":visible")||this.storage("expose","trace"),i&&r&&(e.traceMark=e.cm.markText(i,r,{className:"trace "+t.port}),e.traceMark.pengine=t.pengine,e.cm.scrollIntoView(i,50))}return this}},getSelection:function(){var t=[];return this.each(function(){function e(t){return{line:t.line,ch:t.ch}}var n=i(this),r=n.data(c);if(1==r.cm.somethingSelected()){var o=r.cm.listSelections(),a={selections:[]},s=n.closest(".nb-cell").attr("name");s&&(a.cell=s);for(var l=0;l<o.length;l++){var u=o[l],h={};switch(function(t,e){return t.line<e.line?-1:t.line>e.line?1:t.ch<e.ch?-1:t.ch>e.ch?1:0}(u.anchor,u.head)){case-1:h.from=e(u.anchor),h.to=e(u.head);break;case 1:h.to=e(u.anchor),h.from=e(u.head);break;case 0:continue}h.string=r.cm.getRange(h.from,h.to),h.context=r.cm.getRange(function(t){return{line:t.line,ch:0}}(h.from),function(t){return{line:t.line,ch:r.cm.getLine(t.line).length}}(h.to)),a.selections.push(h)}t.push(a)}}),t.length>0?t:null},restoreSelection:function(t){function e(t,e){for(var n=t.data(c),i=n.cm,r=[],a="",s=0;s<e.length;s++){var l=function(t){function e(t,e,n){return n=n||0,{line:t.line+e,ch:t.ch+n}}if(i.getRange(t.from,t.to)==t.string)return{anchor:t.from,head:t.to};for(var n=i.firstLine(),r=i.lastLine(),o=0,a=1;t.from.line+o>=n&&t.to.line+o<=r;){var s;if(function(t,e){for(var n=e.split("\n"),r=0;r<n.length;r++)if(i.getLine(t+r)!=n[r])return!1;return!0}(t.from.line+o,t.context))return{anchor:e(t.from,o),head:e(t.to,o),offset:o};if((s=function(t,e){for(var n=e.split("\n"),r=0;r<n.length;r++){var o,a=i.getLine(t),s=n[r];if(0==r){if(r==n.length-1)return a.indexOf(s);if(!((o=a.indexOf(s))>=0&&s.length+o==a.length))return-1}else if(r==n.length-1){if(0!=a.indexOf(s))return-1}else if(i.getLine(t+r)!=n[r])return-1}return o}(t.from.line+o,t.string))>=0){var l=s-t.from.ch,c=t.to.line!=t.from.line?0:l;return{anchor:e(t.from,o,l),head:e(t.to,o,c),offset:o}}a++,o=Math.floor(a/2),a%2==1&&(o=-o)}}(e[s]);l&&(r.push(l),l.offset&&(""!=a&&(a+=";"),a+=l.offset))}if(r.length>0&&i.setSelections(r,0),""!=a||r.length<e.length){var u;u=r.length==e.length?"Found selections at offset "+a:""==a?"Could not restore all selections":"Only found some selections at offsets "+a,o.feedback({html:u,owner:t})}}if(t[0].cell)for(var n=this,r=0;r<t.length;r++){var a=t[r],s=function(t){for(var e=0;e<n.length;e++)if(i(n[e]).closest(".nb-cell").attr("name")==t)return i(n[e])}(a.cell);s&&e(s,a.selections)}else e(this,t);return this},getExamples:function(t,e){var n,r=t||this.prologEditor("getSource"),o=[];if(""==i.trim(r))return null;if(n=0==e?[t]:r.match(/\/\*\* *<?examples>?[\s\S]*?\*\//gim))for(var a=0;a<n.length;a++){var s=n[a].match(/^ *\?-[\s\S]*?[^-#$&*+.\/:<=>?@\\^~]\.\s/gm);if(s)for(var l=0;l<s.length;l++){var c=s[l].replace(/^ *\?-\s*/,"").replace(/\s*$/,"");o.push(c)}}return o},addExample:function(t){var e=this.data(c).cm,n=this.prologEditor("getSource"),i=this.prologEditor("search",/\/\*\* *<?examples>?/gim,{dir:-1,max:1}),r=this.prologEditor("search",/\*\//,{start:i.line,max:1});if(1==i.length){var r=this.prologEditor("search",/\*\//,{start:i[0].line,max:1}),a=this.prologEditor("getExamples",n);if(a&&-1!=a.indexOf(t))return o.alert("Query is already in examples"),this;if(1!=r.length)return o.alert("/** <examples> block is not terminated with */"),this;t=t.split("\n").join("\n   "),e.setSelection({line:r[0].line-1,ch:0}),e.replaceSelection("?- "+t+"\n")}else{var s=e.lastLine(),l=e.getLine(s);e.replaceRange("\n\n/** <examples>\n?- "+t+"\n*/\n",{line:s,ch:l.length})}return this},search:function(t,e){var n=this.data(c).cm,i=e.dir||1,r=void 0==e.start?n.firstLine():e.start,o=void 0==e.end?n.lastLine():e.end,a=[];if(-1==i&&o>r||1==i&&r>o){var s=r;r=o,o=s}if(i>0&&r>o||i<0&&r<o)return a;o+=i;for(var l=r;l!=o;l+=i){var u=n.getLine(l);if(u.search(t)>=0&&(a.push({line:l+1,text:u}),e.max&&e.max===a.length))return a}return a},gotoLine:function(t,e){function n(t){if(void 0!==t._searchMarkers){for(var e=0;e<t._searchMarkers.length;e++)t._searchMarkers[e].clear();t.off("cursorActivity",n)}t._searchMarkers=[]}function i(t,e){for(var n;n=r.exec(a.getLine(t));)a._searchMarkers.push(a.markText({line:t,ch:n.index},{line:t,ch:n.index+n[0].length},{className:e,clearOnEnter:!0,clearWhenEmpty:!0,title:"Search match"}))}var r,o=this.data(c),a=o.cm,s=0;n(a),e=e||{},r=e.regex,t-=1,r&&(s=a.getLine(t).search(r))<0&&(s=0),a.setCursor({line:t,ch:s});var l=a.getScrollInfo().clientHeight,u=a.charCoords({line:t,ch:0},"local");if(a.scrollTo(null,(u.top+u.bottom-l)/2),r){if(i(t,"CodeMirror-search-match"),e.showAllMatches)for(var h=a.getViewport(),d=h.from;d<h.to;d++)d!=t&&i(d,"CodeMirror-search-alt-match");a._searchMarkers.length>0&&a.on("cursorActivity",n)}else a._searchMarkers.push(a.markText({line:t,ch:0},{line:t,ch:a.getLine(t).length},{className:"CodeMirror-search-match",clearOnEnter:!0,clearWhenEmpty:!0,title:"Target line"}));return this},changeGen:function(){return this.data(c).cm.changeGeneration()},isClean:function(t){return this.data(c).cm.isClean(t)},setupStorage:function(t){var e=this.data(c),n=this;return t.setValue=function(t){n.prologEditor("setSource",t,!0)},t.getValue=function(){return e.cm.getValue()},t.changeGen=function(){return e.cm.changeGeneration()},t.isClean=function(t){return e.cm.isClean(t)},t.markClean=function(t){n.prologEditor("markClean",t)},t.cleanGeneration=e.cm.changeGeneration(),t.cleanData=e.cm.getValue(),t.cleanCheckpoint="load",this.storage(t),this},contextAction:function(){var t=this,e=this.data(c),n=e.cm.getCursor(),r=e.cm.getTokenAt(n,!0),a=e.cm.getEnrichedToken(r),s=e.cm.getTokenReferences(a);if(s&&s.length>0){for(var l=i.el.ul(),u=i.el.div({class:"goto-source"},i.el.div("Go to"),l),h=i.el.div({class:"edit-modal"},i.el.div({class:"mask"}),u),d=0;d<s.length;d++){var f=s[d];i(l).append(i.el.li(i.el.a({"data-locindex":d},f.title)))}var p=e.cm.cursorCoords(!0);i(u).css({top:p.bottom,left:p.left}),i("body").append(h),i(h).on("click",function(n){var r=i(n.target).data("locindex");if(i(h).remove(),void 0!==r){var a=s[r];if(a.file)t.closest(".swish").swish("playFile",a);else{var l;"query"==e.role?(l=t.closest(".prolog-query-editor").queryEditor("getProgramEditor"),l[0]||o.alert("No related program editor")):l=t,l&&l[0]&&l.prologEditor("gotoLine",a.line,a).focus()}}}),i(h).show()}return this},variables:function(e,n){function r(t){i(o).find(t).each(function(){var t=i(this).text();a.indexOf(t)<0&&a.push(t)})}var o=i.el.span({class:"query cm-s-prolog"}),a=[];return t.runMode(e,"prolog",o),r("span.cm-var"),n&&r("span.cm-var-2"),a},wrapSolution:function(t){function e(t,e){return i.prologEditor("setSource",t+"("+n+")"+e+".").focus(),i}var n=s.trimFullStop(this.prologEditor("getSource","query")),i=this,r=this.prologEditor("variables",n);switch(t){case"Aggregate (count all)":return e("aggregate_all(count, ",", Count)");case"Projection":return function(t){return i.prologEditor("setSource",t+n+".").focus(),i}("projection(["+r.join(",")+"]),\n");case"Order by":return e("order_by(["+function(t){for(var e=[],n=0;n<r.length;n++)e.push("asc("+r[n]+")");return e.join(",")}(r)+"], ",")");case"Distinct":return e("distinct(["+r.join(",")+"], ",")");case"Limit":return e("limit(10, ",")");case"Time":return e("time(",")");case"Debug (trace)":return e("trace, ","");default:alert('Unknown wrapper: "'+t+'"')}}};if(a.tabTypes.program={dataType:"pl",typeName:"program",label:"Program",contentType:"text/x-prolog",order:100,create:function(t,e){i(t).addClass("prolog-editor").prologEditor(i.extend({save:!0},e)).prologEditor("makeCurrent",e)}},e.swish.tab_types)for(var f={save:!0,lineNumbers:!0},p=0;p<e.swish.tab_types.length;p++){var g=e.swish.tab_types[p];if(g.editor){var m=i.extend({typeName:g.typeName},f,g.editor);g.create=function(t){i(t).addClass("prolog-editor").prologEditor(m)},a.tabTypes[g.typeName]=g}}i.fn.prologEditor=function(t){return d[t]?d[t].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof t&&t?void i.error("Method "+t+" does not exist on jQuery."+c):d._init.apply(this,arguments)}}(jQuery),t.prototype.charOffsetToPos=function(t){for(var e=this.firstLine(),n=this.lastLine(),i=0;e<n;e++){var r=this.getLine(e);if(i<=t&&i+r.length>=t)return{line:e,ch:t-i};i+=r.length+1}},t.keyMap.emacs.Enter="newlineAndIndent",e.swish.cm_style&&l(e.swish.cm_style,".cm-s-prolog span.cm-"),e.swish.cm_hover_style&&l(e.swish.cm_hover_style,".CodeMirror-hover-tooltip ")}),define("answer",["jquery","laconic"],function(){!function($){function answerHasOutput(t){return t.variables.length>0||t.residuals}function renderSubstitutions(t,e){e.push(', <span class="pl-comment">% where</span><br/>');for(var n=0;n<t.length;n++)e.push('<span class="where-binding">',"<span class='pl-var'>",t[n].var+"</span> = ",t[n].value,"</span>"),n<t.length-1&&e.push(",<br/>")}function renderAnswer(t){for(var e=[],n=t.variables,i=0;i<n.length;i++){for(var r=n[i].variables,o=0;o<r.length-1;o++)e.push("<span class='pl-ovar'>",r[o],"</span> = ","<span class='pl-var'>",r[o+1],"</span>, ");e.push("<span class='pl-ovar'>",r[r.length-1],"</span> = ",n[i].value),n[i].substitutions&&renderSubstitutions(n[i].substitutions,e),(i<n.length-1||t.residuals)&&e.push(",<br/>")}var a;if(a=t.residuals)for(var i=0;i<a.length;i++)e.push(a[i]),i<a.length-1&&e.push(",<br/>");return e.join("")}function renderTabledAnswer(t,e){for(var n=[],i=0;i<t.projection.length;i++){var r=t.projection[i],o=function(e){for(var n=t.variables,i=0;i<n.length;i++)for(var r=n[i].variables,o=0;o<r.length;o++)if(r[o]==e)return n[i];return null}(r);n.push("<td>"),o?(n.push(o.value),o.substitutions&&renderSubstitutions(o.substitutions,n)):n.push("<span class='pl-var'>",r,"</span>"),n.push("</td>")}var a;if(a=t.residuals){!function(){0==e.find("tr.projection th.residuals").length&&($("<th class='residuals'>Residual goals</th>").insertBefore(e.find("tr.projection th.answer-nth")),$("<td></td>").insertBefore(e.find("tr td.answer-nth")))}(),n.push("<td>");for(var i=0;i<a.length;i++)n.push(a[i]),i<a.length-1&&n.push(",<br/>");n.push("</td>")}return t.nth&&n.push("<td class='answer-nth'>",t.nth,"</td>"),n.join("")}function evalScripts(elem){elem.find("script").each(function(){var type=this.getAttribute("type")||"text/javascript";"text/javascript"==type&&($.ajaxScript=$(this),eval(this.textContent))}),$.ajaxScript&&delete $.ajaxScript}var methods={_init:function(t){return this.each(function(){var e=$(this);if(answerHasOutput(t))if(e.is("table")){var n=$.el.tr();e.append(n),n.innerHTML=renderTabledAnswer(t,e),evalScripts($(n)),$(n).find(".render-multi").renderMulti()}else e[0].innerHTML=renderAnswer(t),evalScripts(e),e.find(".render-multi").renderMulti();else e.append($.el.span({class:"prolog-true"},"true"))})}};$.fn.prologAnswer=function(t){return methods[t]?methods[t].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof t&&t?void $.error("Method "+t+" does not exist on jQuery.prologAnswer"):methods._init.apply(this,arguments)}}(jQuery),function(t){function e(){var e=t("#render-select");return e[0]||(e=t(t.el.form({id:"render-select",style:"display:none"})),e.on("click","a",function(n){var i=t(n.target).closest("a"),r=i.data("nr");return e.data("target").renderMulti(i.data("action"),r),!1}),e.on("click",function(){var n=t("input[name=render]:checked",t(this)).val();e.data("target").renderMulti("select",parseInt(n))}),e.hover(function(){s=!0,i()},function(){r()}),t("body").append(e)),e}function n(){if(!s){var t=e(),n=t.data("target");n&&(n.removeClass("render-selecting"),t.data("target",null)),t.hide(400)}}function i(){a=setTimeout(function(){n()},400)}function r(){s=!1,i()}function o(e){return e.originalEvent.dataTransfer.setData("Text",t(e.target).renderMulti("prologText")),!0}var a=0,s=!1,l={_init:function(e){return this.each(function(){var e=t(this),n={current:0},i=[],r=t.el.div({class:"render-multi-active"}),a=0;e.children().each(function(){var n=t(this).css("display");i.push(n),0==a++?(e.css("display",n),t(this).attr("draggable",!1)):t(this).hide()}),n.display=i,e.append(r),t(r).hover(function(t){e.renderMulti("showSelect",t)},function(t){e.renderMulti("hideSelect",t)}),e.attr("draggable",!0).bind("dragstart",o),e.data("renderMulti",n)})},selectMenu:function(){for(var e=this.data("renderMulti"),n=["<label>View as</label><br>"],i=this.children(),r=0,r=0;r<e.display.length;r++){var o=t(i[r]),a=o.attr("data-render");a||(a=0==r?"Default rendered":"Alt rendered ["+(r+1)+"]"),n.push("<div class='render-item'>",function(t,e){var n,i;return"Prolog term"==e?(n="Copy",i="copy"):(n="Download",i="download"),btn='<a href="#" class="btn btn-style btn-sm" data-nr="'+t+'" data-action="'+i+'" title="'+n+'"><span class="glyphicon glyphicon-'+i+'"></span></a>',btn}(r,a),"<input type='radio' name='render' value='",r,"'"),r==e.current&&n.push(" checked"),n.push("> ",a,"</div>")}return n.push("</form"),n.join("")},showSelect:function(t){var n,i=this,r=e(),o=this.offset();s=!0,a&&(clearTimeout(a),a=0),(n=r.data("target"))&&n.removeClass("render-selecting"),r.data("target",i),r.html(this.renderMulti("selectMenu")),r.css({top:o.top+5+"px",left:o.left+5+"px"}).show(400),this.addClass("render-selecting")},hideSelect:function(t){r()},select:function(e){var i=this.data("renderMulti");if(i.current!=e){var r=this.children(),o=i.display[e];t(r[i.current]).hide(400),t(r[e]).show(400,function(){t(this).css("display",o)}),this.css("display",o),t(r[e]).is("span.render-as-prolog")?this.attr("draggable",!1):this.attr("draggable",!0),i.current=e}n()},copy:function(t){var e=this.children(),n=this.data("renderMulti"),i=n.current;this.renderMulti("select",t),function(t){var e=document.createRange();e.selectNodeContents(t);var n=window.getSelection();n.removeAllRanges(),n.addRange(e)}(e[t]);try{document.execCommand("copy")}catch(t){alert("Sorry, cannot copy text with this browser")}return this.renderMulti("select",i),this},download:function(e){var n,i=this.children(),r=t(i[e]),o="html";if(r.hasClass("export-dom")){var a={};r=r.trigger("export-dom",a),a.element?(n=a.element.outerHTML,o=a.extension||"html",type=a.contentType||"text/html"):alert("Failed to export rendered result")}else if(1==r.find("svg").length){var s=r.find("svg");s.attr("xmlns")||s.attr("xmlns","http://www.w3.org/2000/svg"),n=s[0].outerHTML,o="svg",type="image/svg+xml"}else n=r.html(),type="text/html";(function(){return void 0!=t("<a>")[0].download})()||(type="application/octet-stream"),console.log(type);var l,c,u,h=new Blob([n],{type:type}),d=URL.createObjectURL(h),f="swish-rendered."+o,p=t.el.div({class:"download"},u=t.el.button({type:"button",class:"close"}),l=t.el.a({href:d,target:"_blank",download:f},"Right click me to download as "),t.el.br(),c=t.el.input({value:f}));return this.append(p),t(u).html("&times;").on("click",function(e){t(p).remove()}),t(c).on("change keyup paste",function(e){return t(l).attr("download",t(c).val()),e.preventDefault(),!1}),this},prologText:function(){return this.find("span.render-as-prolog").text()}};t.fn.renderMulti=function(e){return l[e]?l[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.renderMulti"):l._init.apply(this,arguments)}}(jQuery)}),function(t,e,n){!function(t){"function"==typeof define&&define.amd?define("sparkline",["jquery"],t):jQuery&&!jQuery.fn.sparkline&&t(jQuery)}(function(n){"use strict";var i,r,o,a,s,l,c,u,h,d,f,p,g,m,v,y,b,x,w,_,S,C,T,k,A,M,E,L,P,D,N,O={},R=0;i=function(){return{common:{type:"line",lineColor:"#00f",fillColor:"#cdf",defaultPixelsPerValue:3,width:"auto",height:"auto",composite:!1,tagValuesAttribute:"values",tagOptionsPrefix:"spark",enableTagOptions:!1,enableHighlight:!0,highlightLighten:1.4,tooltipSkipNull:!0,tooltipPrefix:"",tooltipSuffix:"",disableHiddenCheck:!1,numberFormatter:!1,numberDigitGroupCount:3,numberDigitGroupSep:",",numberDecimalMark:".",disableTooltips:!1,disableInteraction:!1},line:{spotColor:"#f80",highlightSpotColor:"#5f5",highlightLineColor:"#f22",spotRadius:1.5,minSpotColor:"#f80",maxSpotColor:"#f80",lineWidth:1,normalRangeMin:void 0,normalRangeMax:void 0,normalRangeColor:"#ccc",drawNormalOnTop:!1,chartRangeMin:void 0,chartRangeMax:void 0,chartRangeMinX:void 0,chartRangeMaxX:void 0,tooltipFormat:new o('<span style="color: {{color}}">&#9679;</span> {{prefix}}{{y}}{{suffix}}')},bar:{barColor:"#3366cc",negBarColor:"#f44",stackedBarColor:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],zeroColor:void 0,nullColor:void 0,zeroAxis:!0,barWidth:4,barSpacing:1,chartRangeMax:void 0,chartRangeMin:void 0,chartRangeClip:!1,colorMap:void 0,tooltipFormat:new o('<span style="color: {{color}}">&#9679;</span> {{prefix}}{{value}}{{suffix}}')},tristate:{barWidth:4,barSpacing:1,posBarColor:"#6f6",negBarColor:"#f44",zeroBarColor:"#999",colorMap:{},tooltipFormat:new o('<span style="color: {{color}}">&#9679;</span> {{value:map}}'),tooltipValueLookups:{map:{"-1":"Loss",0:"Draw",1:"Win"}}},discrete:{lineHeight:"auto",thresholdColor:void 0,thresholdValue:0,chartRangeMax:void 0,chartRangeMin:void 0,chartRangeClip:!1,tooltipFormat:new o("{{prefix}}{{value}}{{suffix}}")},bullet:{targetColor:"#f33",targetWidth:3,performanceColor:"#33f",rangeColors:["#d3dafe","#a8b6ff","#7f94ff"],base:void 0,tooltipFormat:new o("{{fieldkey:fields}} - {{value}}"),tooltipValueLookups:{fields:{r:"Range",p:"Performance",t:"Target"}}},pie:{offset:0,sliceColors:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],borderWidth:0,borderColor:"#000",tooltipFormat:new o('<span style="color: {{color}}">&#9679;</span> {{value}} ({{percent.1}}%)')},box:{raw:!1,boxLineColor:"#000",boxFillColor:"#cdf",whiskerColor:"#000",outlierLineColor:"#333",outlierFillColor:"#fff",medianColor:"#f00",showOutliers:!0,outlierIQR:1.5,spotRadius:1.5,target:void 0,targetColor:"#4a2",chartRangeMax:void 0,chartRangeMin:void 0,tooltipFormat:new o("{{field:fields}}: {{value}}"),tooltipFormatFieldlistKey:"field",tooltipValueLookups:{fields:{lq:"Lower Quartile",med:"Median",uq:"Upper Quartile",lo:"Left Outlier",ro:"Right Outlier",lw:"Left Whisker",rw:"Right Whisker"}}}}},A='.jqstooltip { position: absolute;left: 0px;top: 0px;visibility: hidden;background: rgb(0, 0, 0) transparent;background-color: rgba(0,0,0,0.6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";color: white;font: 10px arial, san serif;text-align: left;white-space: nowrap;padding: 5px;border: 1px solid white;z-index: 10000;}.jqsfield { color: white;font: 10px arial, san serif;text-align: left;}',r=function(){var t,e;return t=function(){this.init.apply(this,arguments)},arguments.length>1?(arguments[0]?(t.prototype=n.extend(new arguments[0],arguments[arguments.length-1]),t._super=arguments[0].prototype):t.prototype=arguments[arguments.length-1],arguments.length>2&&(e=Array.prototype.slice.call(arguments,1,-1),e.unshift(t.prototype),n.extend.apply(n,e))):t.prototype=arguments[0],t.prototype.cls=t,t},n.SPFormatClass=o=r({fre:/\{\{([\w.]+?)(:(.+?))?\}\}/g,precre:/(\w+)\.(\d+)/,init:function(t,e){this.format=t,this.fclass=e},render:function(t,e,n){var i,r,o,a,s,l=this,c=t;return this.format.replace(this.fre,function(){var t;return r=arguments[1],o=arguments[3],i=l.precre.exec(r),i?(s=i[2],r=i[1]):s=!1,void 0===(a=c[r])?"":o&&e&&e[o]?(t=e[o],t.get?e[o].get(a)||a:e[o][a]||a):(h(a)&&(a=n.get("numberFormatter")?n.get("numberFormatter")(a):g(a,s,n.get("numberDigitGroupCount"),n.get("numberDigitGroupSep"),n.get("numberDecimalMark"))),a)})}}),n.spformat=function(t,e){return new o(t,e)},a=function(t,e,n){return t<e?e:t>n?n:t},s=function(t,n){var i;return 2===n?(i=e.floor(t.length/2),t.length%2?t[i]:(t[i-1]+t[i])/2):t.length%2?(i=(t.length*n+n)/4,i%1?(t[e.floor(i)]+t[e.floor(i)-1])/2:t[i-1]):(i=(t.length*n+2)/4,i%1?(t[e.floor(i)]+t[e.floor(i)-1])/2:t[i-1])},l=function(t){var e;switch(t){case"undefined":t=void 0;break;case"null":t=null;break;case"true":t=!0;break;case"false":t=!1;break;default:e=parseFloat(t),t==e&&(t=e)}return t},c=function(t){var e,n=[];for(e=t.length;e--;)n[e]=l(t[e]);return n},u=function(t,e){var n,i,r=[];for(n=0,i=t.length;n<i;n++)t[n]!==e&&r.push(t[n]);return r},h=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},g=function(t,e,i,r,o){var a,s;for(t=(!1===e?parseFloat(t).toString():t.toFixed(e)).split(""),a=(a=n.inArray(".",t))<0?t.length:a,a<t.length&&(t[a]=o),s=a-i;s>0;s-=i)t.splice(s,0,r);return t.join("")},d=function(t,e,n){var i;for(i=e.length;i--;)if((!n||null!==e[i])&&e[i]!==t)return!1
-;return!0},p=function(t){return n.isArray(t)?t:[t]},f=function(e){var n;t.createStyleSheet?t.createStyleSheet().cssText=e:(n=t.createElement("style"),n.type="text/css",t.getElementsByTagName("head")[0].appendChild(n),n["string"==typeof t.body.style.WebkitAppearance?"innerText":"innerHTML"]=e)},n.fn.simpledraw=function(e,i,r,o){var a,s;if(r&&(a=this.data("_jqs_vcanvas")))return a;if(!1===n.fn.sparkline.canvas)return!1;if(void 0===n.fn.sparkline.canvas){var l=t.createElement("canvas");if(l.getContext&&l.getContext("2d"))n.fn.sparkline.canvas=function(t,e,n,i){return new P(t,e,n,i)};else{if(!t.namespaces||t.namespaces.v)return n.fn.sparkline.canvas=!1,!1;t.namespaces.add("v","urn:schemas-microsoft-com:vml","#default#VML"),n.fn.sparkline.canvas=function(t,e,n,i){return new D(t,e,n)}}}return void 0===e&&(e=n(this).innerWidth()),void 0===i&&(i=n(this).innerHeight()),a=n.fn.sparkline.canvas(e,i,this,o),s=n(this).data("_jqs_mhandler"),s&&s.registerCanvas(a),a},n.fn.cleardraw=function(){var t=this.data("_jqs_vcanvas");t&&t.reset()},n.RangeMapClass=m=r({init:function(t){var e,n,i=[];for(e in t)t.hasOwnProperty(e)&&"string"==typeof e&&e.indexOf(":")>-1&&(n=e.split(":"),n[0]=0===n[0].length?-1/0:parseFloat(n[0]),n[1]=0===n[1].length?1/0:parseFloat(n[1]),n[2]=t[e],i.push(n));this.map=t,this.rangelist=i||!1},get:function(t){var e,n,i,r=this.rangelist;if(void 0!==(i=this.map[t]))return i;if(r)for(e=r.length;e--;)if(n=r[e],n[0]<=t&&n[1]>=t)return n[2]}}),n.range_map=function(t){return new m(t)},v=r({init:function(t,e){var i=n(t);this.$el=i,this.options=e,this.currentPageX=0,this.currentPageY=0,this.el=t,this.splist=[],this.tooltip=null,this.over=!1,this.displayTooltips=!e.get("disableTooltips"),this.highlightEnabled=!e.get("disableHighlight")},registerSparkline:function(t){this.splist.push(t),this.over&&this.updateDisplay()},registerCanvas:function(t){var e=n(t.canvas);this.canvas=t,this.$canvas=e,e.mouseenter(n.proxy(this.mouseenter,this)),e.mouseleave(n.proxy(this.mouseleave,this)),e.click(n.proxy(this.mouseclick,this))},reset:function(t){this.splist=[],this.tooltip&&t&&(this.tooltip.remove(),this.tooltip=void 0)},mouseclick:function(t){var e=n.Event("sparklineClick");e.originalEvent=t,e.sparklines=this.splist,this.$el.trigger(e)},mouseenter:function(e){n(t.body).unbind("mousemove.jqs"),n(t.body).bind("mousemove.jqs",n.proxy(this.mousemove,this)),this.over=!0,this.currentPageX=e.pageX,this.currentPageY=e.pageY,this.currentEl=e.target,!this.tooltip&&this.displayTooltips&&(this.tooltip=new y(this.options),this.tooltip.updatePosition(e.pageX,e.pageY)),this.updateDisplay()},mouseleave:function(){n(t.body).unbind("mousemove.jqs");var e,i,r=this.splist,o=r.length,a=!1;for(this.over=!1,this.currentEl=null,this.tooltip&&(this.tooltip.remove(),this.tooltip=null),i=0;i<o;i++)e=r[i],e.clearRegionHighlight()&&(a=!0);a&&this.canvas.render()},mousemove:function(t){this.currentPageX=t.pageX,this.currentPageY=t.pageY,this.currentEl=t.target,this.tooltip&&this.tooltip.updatePosition(t.pageX,t.pageY),this.updateDisplay()},updateDisplay:function(){var t,e,i,r,o,a=this.splist,s=a.length,l=!1,c=this.$canvas.offset(),u=this.currentPageX-c.left,h=this.currentPageY-c.top;if(this.over){for(i=0;i<s;i++)e=a[i],(r=e.setRegionHighlight(this.currentEl,u,h))&&(l=!0);if(l){if(o=n.Event("sparklineRegionChange"),o.sparklines=this.splist,this.$el.trigger(o),this.tooltip){for(t="",i=0;i<s;i++)e=a[i],t+=e.getCurrentRegionTooltip();this.tooltip.setContent(t)}this.disableHighlight||this.canvas.render()}null===r&&this.mouseleave()}}}),y=r({sizeStyle:"position: static !important;display: block !important;visibility: hidden !important;float: left !important;",init:function(e){var i,r=e.get("tooltipClassname","jqstooltip"),o=this.sizeStyle;this.container=e.get("tooltipContainer")||t.body,this.tooltipOffsetX=e.get("tooltipOffsetX",10),this.tooltipOffsetY=e.get("tooltipOffsetY",12),n("#jqssizetip").remove(),n("#jqstooltip").remove(),this.sizetip=n("<div/>",{id:"jqssizetip",style:o,class:r}),this.tooltip=n("<div/>",{id:"jqstooltip",class:r}).appendTo(this.container),i=this.tooltip.offset(),this.offsetLeft=i.left,this.offsetTop=i.top,this.hidden=!0,n(window).unbind("resize.jqs scroll.jqs"),n(window).bind("resize.jqs scroll.jqs",n.proxy(this.updateWindowDims,this)),this.updateWindowDims()},updateWindowDims:function(){this.scrollTop=n(window).scrollTop(),this.scrollLeft=n(window).scrollLeft(),this.scrollRight=this.scrollLeft+n(window).width(),this.updatePosition()},getSize:function(t){this.sizetip.html(t).appendTo(this.container),this.width=this.sizetip.width()+1,this.height=this.sizetip.height(),this.sizetip.remove()},setContent:function(t){if(!t)return this.tooltip.css("visibility","hidden"),void(this.hidden=!0);this.getSize(t),this.tooltip.html(t).css({width:this.width,height:this.height,visibility:"visible"}),this.hidden&&(this.hidden=!1,this.updatePosition())},updatePosition:function(t,e){if(void 0===t){if(void 0===this.mousex)return;t=this.mousex-this.offsetLeft,e=this.mousey-this.offsetTop}else this.mousex=t-=this.offsetLeft,this.mousey=e-=this.offsetTop;this.height&&this.width&&!this.hidden&&(e-=this.height+this.tooltipOffsetY,t+=this.tooltipOffsetX,e<this.scrollTop&&(e=this.scrollTop),t<this.scrollLeft?t=this.scrollLeft:t+this.width>this.scrollRight&&(t=this.scrollRight-this.width),this.tooltip.css({left:t,top:e}))},remove:function(){this.tooltip.remove(),this.sizetip.remove(),this.sizetip=this.tooltip=void 0,n(window).unbind("resize.jqs scroll.jqs")}}),M=function(){f(A)},n(M),N=[],n.fn.sparkline=function(e,i){return this.each(function(){var r,o,a=new n.fn.sparkline.options(this,i),s=n(this);if(r=function(){var i,r,o,l,c,u,h;if("html"===e||void 0===e?(h=this.getAttribute(a.get("tagValuesAttribute")),void 0!==h&&null!==h||(h=s.html()),i=h.replace(/(^\s*<!--)|(-->\s*$)|\s+/g,"").split(",")):i=e,r="auto"===a.get("width")?i.length*a.get("defaultPixelsPerValue"):a.get("width"),"auto"===a.get("height")?a.get("composite")&&n.data(this,"_jqs_vcanvas")||(l=t.createElement("span"),l.innerHTML="a",s.html(l),o=n(l).innerHeight()||n(l).height(),n(l).remove(),l=null):o=a.get("height"),a.get("disableInteraction")?c=!1:(c=n.data(this,"_jqs_mhandler"),c?a.get("composite")||c.reset():(c=new v(this,a),n.data(this,"_jqs_mhandler",c))),a.get("composite")&&!n.data(this,"_jqs_vcanvas"))return void(n.data(this,"_jqs_errnotify")||(alert("Attempted to attach a composite sparkline to an element with no existing sparkline"),n.data(this,"_jqs_errnotify",!0)));u=new(n.fn.sparkline[a.get("type")])(this,i,a,r,o),u.render(),c&&c.registerSparkline(u)},n(this).html()&&!a.get("disableHiddenCheck")&&n(this).is(":hidden")||!n(this).parents("body").length){if(!a.get("composite")&&n.data(this,"_jqs_pending"))for(o=N.length;o;o--)N[o-1][0]==this&&N.splice(o-1,1);N.push([this,r]),n.data(this,"_jqs_pending",!0)}else r.call(this)})},n.fn.sparkline.defaults=i(),n.sparkline_display_visible=function(){var t,e,i,r=[];for(e=0,i=N.length;e<i;e++)t=N[e][0],n(t).is(":visible")&&!n(t).parents().is(":hidden")?(N[e][1].call(t),n.data(N[e][0],"_jqs_pending",!1),r.push(e)):n(t).closest("html").length||n.data(t,"_jqs_pending")||(n.data(N[e][0],"_jqs_pending",!1),r.push(e));for(e=r.length;e;e--)N.splice(r[e-1],1)},n.fn.sparkline.options=r({init:function(t,e){var i,r,o,a;this.userOptions=e=e||{},this.tag=t,this.tagValCache={},r=n.fn.sparkline.defaults,o=r.common,this.tagOptionsPrefix=e.enableTagOptions&&(e.tagOptionsPrefix||o.tagOptionsPrefix),a=this.getTagSetting("type"),i=a===O?r[e.type||o.type]:r[a],this.mergedOptions=n.extend({},o,i,e)},getTagSetting:function(t){var e,n,i,r,o=this.tagOptionsPrefix;if(!1===o||void 0===o)return O;if(this.tagValCache.hasOwnProperty(t))e=this.tagValCache.key;else{if(void 0===(e=this.tag.getAttribute(o+t))||null===e)e=O;else if("["===e.substr(0,1))for(e=e.substr(1,e.length-2).split(","),n=e.length;n--;)e[n]=l(e[n].replace(/(^\s*)|(\s*$)/g,""));else if("{"===e.substr(0,1))for(i=e.substr(1,e.length-2).split(","),e={},n=i.length;n--;)r=i[n].split(":",2),e[r[0].replace(/(^\s*)|(\s*$)/g,"")]=l(r[1].replace(/(^\s*)|(\s*$)/g,""));else e=l(e);this.tagValCache.key=e}return e},get:function(t,e){var n,i=this.getTagSetting(t);return i!==O?i:void 0===(n=this.mergedOptions[t])?e:n}}),n.fn.sparkline._base=r({disabled:!1,init:function(t,e,i,r,o){this.el=t,this.$el=n(t),this.values=e,this.options=i,this.width=r,this.height=o,this.currentRegion=void 0},initTarget:function(){var t=!this.options.get("disableInteraction");(this.target=this.$el.simpledraw(this.width,this.height,this.options.get("composite"),t))?(this.canvasWidth=this.target.pixelWidth,this.canvasHeight=this.target.pixelHeight):this.disabled=!0},render:function(){return!this.disabled||(this.el.innerHTML="",!1)},getRegion:function(t,e){},setRegionHighlight:function(t,e,n){var i,r=this.currentRegion,o=!this.options.get("disableHighlight");return e>this.canvasWidth||n>this.canvasHeight||e<0||n<0?null:(i=this.getRegion(t,e,n),r!==i&&(void 0!==r&&o&&this.removeHighlight(),this.currentRegion=i,void 0!==i&&o&&this.renderHighlight(),!0))},clearRegionHighlight:function(){return void 0!==this.currentRegion&&(this.removeHighlight(),this.currentRegion=void 0,!0)},renderHighlight:function(){this.changeHighlight(!0)},removeHighlight:function(){this.changeHighlight(!1)},changeHighlight:function(t){},getCurrentRegionTooltip:function(){var t,e,i,r,a,s,l,c,u,h,d,f,p,g,m=this.options,v="",y=[];if(void 0===this.currentRegion)return"";if(t=this.getCurrentRegionFields(),d=m.get("tooltipFormatter"))return d(this,m,t);if(m.get("tooltipChartTitle")&&(v+='<div class="jqs jqstitle">'+m.get("tooltipChartTitle")+"</div>\n"),!(e=this.options.get("tooltipFormat")))return"";if(n.isArray(e)||(e=[e]),n.isArray(t)||(t=[t]),l=this.options.get("tooltipFormatFieldlist"),c=this.options.get("tooltipFormatFieldlistKey"),l&&c){for(u=[],s=t.length;s--;)h=t[s][c],-1!=(g=n.inArray(h,l))&&(u[g]=t[s]);t=u}for(i=e.length,p=t.length,s=0;s<i;s++)for(f=e[s],"string"==typeof f&&(f=new o(f)),r=f.fclass||"jqsfield",g=0;g<p;g++)t[g].isNull&&m.get("tooltipSkipNull")||(n.extend(t[g],{prefix:m.get("tooltipPrefix"),suffix:m.get("tooltipSuffix")}),a=f.render(t[g],m.get("tooltipValueLookups"),m),y.push('<div class="'+r+'">'+a+"</div>"));return y.length?v+y.join("\n"):""},getCurrentRegionFields:function(){},calcHighlightColor:function(t,n){var i,r,o,s,l=n.get("highlightColor"),c=n.get("highlightLighten");if(l)return l;if(c&&(i=/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(t)||/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(t))){for(o=[],r=4===t.length?16:1,s=0;s<3;s++)o[s]=a(e.round(parseInt(i[s+1],16)*r*c),0,255);return"rgb("+o.join(",")+")"}return t}}),b={changeHighlight:function(t){var e,i=this.currentRegion,r=this.target,o=this.regionShapes[i];o&&(e=this.renderRegion(i,t),n.isArray(e)||n.isArray(o)?(r.replaceWithShapes(o,e),this.regionShapes[i]=n.map(e,function(t){return t.id})):(r.replaceWithShape(o,e),this.regionShapes[i]=e.id))},render:function(){var t,e,i,r,o=this.values,a=this.target,s=this.regionShapes;if(this.cls._super.render.call(this)){for(i=o.length;i--;)if(t=this.renderRegion(i))if(n.isArray(t)){for(e=[],r=t.length;r--;)t[r].append(),e.push(t[r].id);s[i]=e}else t.append(),s[i]=t.id;else s[i]=null;a.render()}}},n.fn.sparkline.line=x=r(n.fn.sparkline._base,{type:"line",init:function(t,e,n,i,r){x._super.init.call(this,t,e,n,i,r),this.vertices=[],this.regionMap=[],this.xvalues=[],this.yvalues=[],this.yminmax=[],this.hightlightSpotId=null,this.lastShapeId=null,this.initTarget()},getRegion:function(t,e,n){var i,r=this.regionMap;for(i=r.length;i--;)if(null!==r[i]&&e>=r[i][0]&&e<=r[i][1])return r[i][2]},getCurrentRegionFields:function(){var t=this.currentRegion;return{isNull:null===this.yvalues[t],x:this.xvalues[t],y:this.yvalues[t],color:this.options.get("lineColor"),fillColor:this.options.get("fillColor"),offset:t}},renderHighlight:function(){var t,e,n=this.currentRegion,i=this.target,r=this.vertices[n],o=this.options,a=o.get("spotRadius"),s=o.get("highlightSpotColor"),l=o.get("highlightLineColor");r&&(a&&s&&(t=i.drawCircle(r[0],r[1],a,void 0,s),this.highlightSpotId=t.id,i.insertAfterShape(this.lastShapeId,t)),l&&(e=i.drawLine(r[0],this.canvasTop,r[0],this.canvasTop+this.canvasHeight,l),this.highlightLineId=e.id,i.insertAfterShape(this.lastShapeId,e)))},removeHighlight:function(){var t=this.target;this.highlightSpotId&&(t.removeShapeId(this.highlightSpotId),this.highlightSpotId=null),this.highlightLineId&&(t.removeShapeId(this.highlightLineId),this.highlightLineId=null)},scanValues:function(){var t,n,i,r,o,a=this.values,s=a.length,l=this.xvalues,c=this.yvalues,u=this.yminmax;for(t=0;t<s;t++)n=a[t],i="string"==typeof a[t],r="object"==typeof a[t]&&a[t]instanceof Array,o=i&&a[t].split(":"),i&&2===o.length?(l.push(Number(o[0])),c.push(Number(o[1])),u.push(Number(o[1]))):r?(l.push(n[0]),c.push(n[1]),u.push(n[1])):(l.push(t),null===a[t]||"null"===a[t]?c.push(null):(c.push(Number(n)),u.push(Number(n))));this.options.get("xvalues")&&(l=this.options.get("xvalues")),this.maxy=this.maxyorg=e.max.apply(e,u),this.miny=this.minyorg=e.min.apply(e,u),this.maxx=e.max.apply(e,l),this.minx=e.min.apply(e,l),this.xvalues=l,this.yvalues=c,this.yminmax=u},processRangeOptions:function(){var t=this.options,e=t.get("normalRangeMin"),n=t.get("normalRangeMax");void 0!==e&&(e<this.miny&&(this.miny=e),n>this.maxy&&(this.maxy=n)),void 0!==t.get("chartRangeMin")&&(t.get("chartRangeClip")||t.get("chartRangeMin")<this.miny)&&(this.miny=t.get("chartRangeMin")),void 0!==t.get("chartRangeMax")&&(t.get("chartRangeClip")||t.get("chartRangeMax")>this.maxy)&&(this.maxy=t.get("chartRangeMax")),void 0!==t.get("chartRangeMinX")&&(t.get("chartRangeClipX")||t.get("chartRangeMinX")<this.minx)&&(this.minx=t.get("chartRangeMinX")),void 0!==t.get("chartRangeMaxX")&&(t.get("chartRangeClipX")||t.get("chartRangeMaxX")>this.maxx)&&(this.maxx=t.get("chartRangeMaxX"))},drawNormalRange:function(t,n,i,r,o){var a=this.options.get("normalRangeMin"),s=this.options.get("normalRangeMax"),l=n+e.round(i-i*((s-this.miny)/o)),c=e.round(i*(s-a)/o);this.target.drawRect(t,l,r,c,void 0,this.options.get("normalRangeColor")).append()},render:function(){var t,i,r,o,a,s,l,c,u,h,d,f,p,g,v,y,b,w,_,S,C,T,k,A,M,E=this.options,L=this.target,P=this.canvasWidth,D=this.canvasHeight,N=this.vertices,O=E.get("spotRadius"),R=this.regionMap;if(x._super.render.call(this)&&(this.scanValues(),this.processRangeOptions(),k=this.xvalues,A=this.yvalues,this.yminmax.length&&!(this.yvalues.length<2))){for(o=a=0,t=this.maxx-this.minx==0?1:this.maxx-this.minx,i=this.maxy-this.miny==0?1:this.maxy-this.miny,r=this.yvalues.length-1,O&&(P<4*O||D<4*O)&&(O=0),O&&(C=E.get("highlightSpotColor")&&!E.get("disableInteraction"),(C||E.get("minSpotColor")||E.get("spotColor")&&A[r]===this.miny)&&(D-=e.ceil(O)),(C||E.get("maxSpotColor")||E.get("spotColor")&&A[r]===this.maxy)&&(D-=e.ceil(O),o+=e.ceil(O)),(C||(E.get("minSpotColor")||E.get("maxSpotColor"))&&(A[0]===this.miny||A[0]===this.maxy))&&(a+=e.ceil(O),P-=e.ceil(O)),(C||E.get("spotColor")||E.get("minSpotColor")||E.get("maxSpotColor")&&(A[r]===this.miny||A[r]===this.maxy))&&(P-=e.ceil(O))),D--,void 0===E.get("normalRangeMin")||E.get("drawNormalOnTop")||this.drawNormalRange(a,o,D,P,i),l=[],c=[l],g=v=null,y=A.length,M=0;M<y;M++)u=k[M],d=k[M+1],h=A[M],f=a+e.round((u-this.minx)*(P/t)),p=M<y-1?a+e.round((d-this.minx)*(P/t)):P,v=f+(p-f)/2,R[M]=[g||0,v,M],g=v,null===h?M&&(null!==A[M-1]&&(l=[],c.push(l)),N.push(null)):(h<this.miny&&(h=this.miny),h>this.maxy&&(h=this.maxy),l.length||l.push([f,o+D]),s=[f,o+e.round(D-D*((h-this.miny)/i))],l.push(s),N.push(s));for(b=[],w=[],_=c.length,M=0;M<_;M++)l=c[M],l.length&&(E.get("fillColor")&&(l.push([l[l.length-1][0],o+D]),w.push(l.slice(0)),l.pop()),l.length>2&&(l[0]=[l[0][0],l[1][1]]),b.push(l));for(_=w.length,M=0;M<_;M++)L.drawShape(w[M],E.get("fillColor"),E.get("fillColor")).append();for(void 0!==E.get("normalRangeMin")&&E.get("drawNormalOnTop")&&this.drawNormalRange(a,o,D,P,i),_=b.length,M=0;M<_;M++)L.drawShape(b[M],E.get("lineColor"),void 0,E.get("lineWidth")).append();if(O&&E.get("valueSpots"))for(S=E.get("valueSpots"),void 0===S.get&&(S=new m(S)),M=0;M<y;M++)(T=S.get(A[M]))&&L.drawCircle(a+e.round((k[M]-this.minx)*(P/t)),o+e.round(D-D*((A[M]-this.miny)/i)),O,void 0,T).append();O&&E.get("spotColor")&&null!==A[r]&&L.drawCircle(a+e.round((k[k.length-1]-this.minx)*(P/t)),o+e.round(D-D*((A[r]-this.miny)/i)),O,void 0,E.get("spotColor")).append(),this.maxy!==this.minyorg&&(O&&E.get("minSpotColor")&&(u=k[n.inArray(this.minyorg,A)],L.drawCircle(a+e.round((u-this.minx)*(P/t)),o+e.round(D-D*((this.minyorg-this.miny)/i)),O,void 0,E.get("minSpotColor")).append()),O&&E.get("maxSpotColor")&&(u=k[n.inArray(this.maxyorg,A)],L.drawCircle(a+e.round((u-this.minx)*(P/t)),o+e.round(D-D*((this.maxyorg-this.miny)/i)),O,void 0,E.get("maxSpotColor")).append())),this.lastShapeId=L.getLastShapeId(),this.canvasTop=o,L.render()}}}),n.fn.sparkline.bar=w=r(n.fn.sparkline._base,b,{type:"bar",init:function(t,i,r,o,s){var h,d,f,p,g,v,y,b,x,_,S,C,T,k,A,M,E,L,P,D,N,O,R=parseInt(r.get("barWidth"),10),I=parseInt(r.get("barSpacing"),10),F=r.get("chartRangeMin"),j=r.get("chartRangeMax"),H=r.get("chartRangeClip"),z=1/0,V=-1/0;for(w._super.init.call(this,t,i,r,o,s),v=0,y=i.length;v<y;v++)D=i[v],((h="string"==typeof D&&D.indexOf(":")>-1)||n.isArray(D))&&(A=!0,h&&(D=i[v]=c(D.split(":"))),D=u(D,null),d=e.min.apply(e,D),f=e.max.apply(e,D),d<z&&(z=d),f>V&&(V=f));this.stacked=A,this.regionShapes={},this.barWidth=R,this.barSpacing=I,this.totalBarWidth=R+I,this.width=o=i.length*R+(i.length-1)*I,this.initTarget(),H&&(T=void 0===F?-1/0:F,k=void 0===j?1/0:j),g=[],p=A?[]:g;var q=[],B=[];for(v=0,y=i.length;v<y;v++)if(A)for(M=i[v],i[v]=P=[],q[v]=0,p[v]=B[v]=0,E=0,L=M.length;E<L;E++)null!==(D=P[E]=H?a(M[E],T,k):M[E])&&(D>0&&(q[v]+=D),z<0&&V>0?D<0?B[v]+=e.abs(D):p[v]+=D:p[v]+=e.abs(D-(D<0?V:z)),g.push(D));else D=H?a(i[v],T,k):i[v],null!==(D=i[v]=l(D))&&g.push(D);this.max=C=e.max.apply(e,g),this.min=S=e.min.apply(e,g),this.stackMax=V=A?e.max.apply(e,q):C,this.stackMin=z=A?e.min.apply(e,g):S,void 0!==r.get("chartRangeMin")&&(r.get("chartRangeClip")||r.get("chartRangeMin")<S)&&(S=r.get("chartRangeMin")),void 0!==r.get("chartRangeMax")&&(r.get("chartRangeClip")||r.get("chartRangeMax")>C)&&(C=r.get("chartRangeMax")),this.zeroAxis=x=r.get("zeroAxis",!0),_=S<=0&&C>=0&&x?0:0==x?S:S>0?S:C,this.xaxisOffset=_,b=A?e.max.apply(e,p)+e.max.apply(e,B):C-S,this.canvasHeightEf=x&&S<0?this.canvasHeight-2:this.canvasHeight-1,S<_?(O=A&&C>=0?V:C,(N=(O-_)/b*this.canvasHeight)!==e.ceil(N)&&(this.canvasHeightEf-=2,N=e.ceil(N))):N=this.canvasHeight,this.yoffset=N,n.isArray(r.get("colorMap"))?(this.colorMapByIndex=r.get("colorMap"),this.colorMapByValue=null):(this.colorMapByIndex=null,this.colorMapByValue=r.get("colorMap"),this.colorMapByValue&&void 0===this.colorMapByValue.get&&(this.colorMapByValue=new m(this.colorMapByValue))),this.range=b},getRegion:function(t,n,i){var r=e.floor(n/this.totalBarWidth);return r<0||r>=this.values.length?void 0:r},getCurrentRegionFields:function(){var t,e,n=this.currentRegion,i=p(this.values[n]),r=[];for(e=i.length;e--;)t=i[e],r.push({isNull:null===t,value:t,color:this.calcColor(e,t,n),offset:n});return r},calcColor:function(t,e,i){var r,o,a=this.colorMapByIndex,s=this.colorMapByValue,l=this.options;return r=this.stacked?l.get("stackedBarColor"):e<0?l.get("negBarColor"):l.get("barColor"),0===e&&void 0!==l.get("zeroColor")&&(r=l.get("zeroColor")),s&&(o=s.get(e))?r=o:a&&a.length>i&&(r=a[i]),n.isArray(r)?r[t%r.length]:r},renderRegion:function(t,i){var r,o,a,s,l,c,u,h,f,p,g=this.values[t],m=this.options,v=this.xaxisOffset,y=[],b=this.range,x=this.stacked,w=this.target,_=t*this.totalBarWidth,S=this.canvasHeightEf,C=this.yoffset;if(g=n.isArray(g)?g:[g],u=g.length,h=g[0],s=d(null,g),p=d(v,g,!0),s)return m.get("nullColor")?(a=i?m.get("nullColor"):this.calcHighlightColor(m.get("nullColor"),m),r=C>0?C-1:C,w.drawRect(_,r,this.barWidth-1,0,a,a)):void 0;for(l=C,c=0;c<u;c++){if(h=g[c],x&&h===v){if(!p||f)continue;f=!0}o=b>0?e.floor(S*(e.abs(h-v)/b))+1:1,h<v||h===v&&0===C?(r=l,l+=o):(r=C-o,C-=o),a=this.calcColor(c,h,t),i&&(a=this.calcHighlightColor(a,m)),y.push(w.drawRect(_,r,this.barWidth-1,o-1,a,a))}return 1===y.length?y[0]:y}}),n.fn.sparkline.tristate=_=r(n.fn.sparkline._base,b,{type:"tristate",init:function(t,e,i,r,o){var a=parseInt(i.get("barWidth"),10),s=parseInt(i.get("barSpacing"),10);_._super.init.call(this,t,e,i,r,o),this.regionShapes={},this.barWidth=a,this.barSpacing=s,this.totalBarWidth=a+s,this.values=n.map(e,Number),this.width=r=e.length*a+(e.length-1)*s,n.isArray(i.get("colorMap"))?(this.colorMapByIndex=i.get("colorMap"),this.colorMapByValue=null):(this.colorMapByIndex=null,this.colorMapByValue=i.get("colorMap"),this.colorMapByValue&&void 0===this.colorMapByValue.get&&(this.colorMapByValue=new m(this.colorMapByValue))),this.initTarget()},getRegion:function(t,n,i){return e.floor(n/this.totalBarWidth)},getCurrentRegionFields:function(){var t=this.currentRegion;return{isNull:void 0===this.values[t],value:this.values[t],color:this.calcColor(this.values[t],t),offset:t}},calcColor:function(t,e){var n,i=this.values,r=this.options,o=this.colorMapByIndex,a=this.colorMapByValue;return a&&(n=a.get(t))?n:o&&o.length>e?o[e]:i[e]<0?r.get("negBarColor"):i[e]>0?r.get("posBarColor"):r.get("zeroBarColor")},renderRegion:function(t,n){var i,r,o,a,s,l,c=this.values,u=this.options,h=this.target;if(i=h.pixelHeight,o=e.round(i/2),a=t*this.totalBarWidth,c[t]<0?(s=o,r=o-1):c[t]>0?(s=0,r=o-1):(s=o-1,r=2),null!==(l=this.calcColor(c[t],t)))return n&&(l=this.calcHighlightColor(l,u)),h.drawRect(a,s,this.barWidth-1,r-1,l,l)}}),n.fn.sparkline.discrete=S=r(n.fn.sparkline._base,b,{type:"discrete",init:function(t,i,r,o,a){S._super.init.call(this,t,i,r,o,a),this.regionShapes={},this.values=i=n.map(i,Number),this.min=e.min.apply(e,i),this.max=e.max.apply(e,i),this.range=this.max-this.min,this.width=o="auto"===r.get("width")?2*i.length:this.width,this.interval=e.floor(o/i.length),this.itemWidth=o/i.length,void 0!==r.get("chartRangeMin")&&(r.get("chartRangeClip")||r.get("chartRangeMin")<this.min)&&(this.min=r.get("chartRangeMin")),void 0!==r.get("chartRangeMax")&&(r.get("chartRangeClip")||r.get("chartRangeMax")>this.max)&&(this.max=r.get("chartRangeMax")),this.initTarget(),this.target&&(this.lineHeight="auto"===r.get("lineHeight")?e.round(.3*this.canvasHeight):r.get("lineHeight"))},getRegion:function(t,n,i){return e.floor(n/this.itemWidth)},getCurrentRegionFields:function(){var t=this.currentRegion;return{isNull:void 0===this.values[t],value:this.values[t],offset:t}},renderRegion:function(t,n){var i,r,o,s,l=this.values,c=this.options,u=this.min,h=this.max,d=this.range,f=this.interval,p=this.target,g=this.canvasHeight,m=this.lineHeight,v=g-m;return r=a(l[t],u,h),s=t*f,i=e.round(v-v*((r-u)/d)),o=c.get("thresholdColor")&&r<c.get("thresholdValue")?c.get("thresholdColor"):c.get("lineColor"),n&&(o=this.calcHighlightColor(o,c)),p.drawLine(s,i,s,i+m,o)}}),n.fn.sparkline.bullet=C=r(n.fn.sparkline._base,{type:"bullet",init:function(t,n,i,r,o){var a,s,l;C._super.init.call(this,t,n,i,r,o),this.values=n=c(n),l=n.slice(),l[0]=null===l[0]?l[2]:l[0],l[1]=null===n[1]?l[2]:l[1],a=e.min.apply(e,n),s=e.max.apply(e,n),a=void 0===i.get("base")?a<0?a:0:i.get("base"),this.min=a,this.max=s,this.range=s-a,this.shapes={},this.valueShapes={},this.regiondata={},this.width=r="auto"===i.get("width")?"4.0em":r,this.target=this.$el.simpledraw(r,o,i.get("composite")),n.length||(this.disabled=!0),this.initTarget()},getRegion:function(t,e,n){var i=this.target.getShapeAt(t,e,n);return void 0!==i&&void 0!==this.shapes[i]?this.shapes[i]:void 0},getCurrentRegionFields:function(){var t=this.currentRegion;return{fieldkey:t.substr(0,1),value:this.values[t.substr(1)],region:t}},changeHighlight:function(t){var e,n=this.currentRegion,i=this.valueShapes[n];switch(delete this.shapes[i],n.substr(0,1)){case"r":e=this.renderRange(n.substr(1),t);break;case"p":e=this.renderPerformance(t);break;case"t":e=this.renderTarget(t)}this.valueShapes[n]=e.id,this.shapes[e.id]=n,this.target.replaceWithShape(i,e)},renderRange:function(t,n){var i=this.values[t],r=e.round(this.canvasWidth*((i-this.min)/this.range)),o=this.options.get("rangeColors")[t-2];return n&&(o=this.calcHighlightColor(o,this.options)),this.target.drawRect(0,0,r-1,this.canvasHeight-1,o,o)},renderPerformance:function(t){var n=this.values[1],i=e.round(this.canvasWidth*((n-this.min)/this.range)),r=this.options.get("performanceColor");return t&&(r=this.calcHighlightColor(r,this.options)),this.target.drawRect(0,e.round(.3*this.canvasHeight),i-1,e.round(.4*this.canvasHeight)-1,r,r)},renderTarget:function(t){var n=this.values[0],i=e.round(this.canvasWidth*((n-this.min)/this.range)-this.options.get("targetWidth")/2),r=e.round(.1*this.canvasHeight),o=this.canvasHeight-2*r,a=this.options.get("targetColor");return t&&(a=this.calcHighlightColor(a,this.options)),this.target.drawRect(i,r,this.options.get("targetWidth")-1,o-1,a,a)},render:function(){var t,e,n=this.values.length,i=this.target;if(C._super.render.call(this)){for(t=2;t<n;t++)e=this.renderRange(t).append(),this.shapes[e.id]="r"+t,this.valueShapes["r"+t]=e.id;null!==this.values[1]&&(e=this.renderPerformance().append(),this.shapes[e.id]="p1",this.valueShapes.p1=e.id),null!==this.values[0]&&(e=this.renderTarget().append(),this.shapes[e.id]="t0",this.valueShapes.t0=e.id),i.render()}}}),n.fn.sparkline.pie=T=r(n.fn.sparkline._base,{type:"pie",init:function(t,i,r,o,a){var s,l=0;if(T._super.init.call(this,t,i,r,o,a),this.shapes={},this.valueShapes={},this.values=i=n.map(i,Number),"auto"===r.get("width")&&(this.width=this.height),i.length>0)for(s=i.length;s--;)l+=i[s];this.total=l,this.initTarget(),this.radius=e.floor(e.min(this.canvasWidth,this.canvasHeight)/2)},getRegion:function(t,e,n){var i=this.target.getShapeAt(t,e,n);return void 0!==i&&void 0!==this.shapes[i]?this.shapes[i]:void 0},getCurrentRegionFields:function(){var t=this.currentRegion;return{isNull:void 0===this.values[t],value:this.values[t],percent:this.values[t]/this.total*100,color:this.options.get("sliceColors")[t%this.options.get("sliceColors").length],offset:t}},changeHighlight:function(t){var e=this.currentRegion,n=this.renderSlice(e,t),i=this.valueShapes[e];delete this.shapes[i],this.target.replaceWithShape(i,n),this.valueShapes[e]=n.id,this.shapes[n.id]=e},renderSlice:function(t,n){var i,r,o,a,s,l=this.target,c=this.options,u=this.radius,h=c.get("borderWidth"),d=c.get("offset"),f=2*e.PI,p=this.values,g=this.total,m=d?2*e.PI*(d/360):0;for(a=p.length,o=0;o<a;o++){if(i=m,r=m,g>0&&(r=m+f*(p[o]/g)),t===o)return s=c.get("sliceColors")[o%c.get("sliceColors").length],n&&(s=this.calcHighlightColor(s,c)),l.drawPieSlice(u,u,u-h,i,r,void 0,s);m=r}},render:function(){var t,n,i=this.target,r=this.values,o=this.options,a=this.radius,s=o.get("borderWidth");if(T._super.render.call(this)){for(s&&i.drawCircle(a,a,e.floor(a-s/2),o.get("borderColor"),void 0,s).append(),n=r.length;n--;)r[n]&&(t=this.renderSlice(n).append(),this.valueShapes[n]=t.id,this.shapes[t.id]=n);i.render()}}}),n.fn.sparkline.box=k=r(n.fn.sparkline._base,{type:"box",init:function(t,e,i,r,o){k._super.init.call(this,t,e,i,r,o),this.values=n.map(e,Number),this.width="auto"===i.get("width")?"4.0em":r,this.initTarget(),this.values.length||(this.disabled=1)},getRegion:function(){return 1},getCurrentRegionFields:function(){var t=[{field:"lq",value:this.quartiles[0]},{field:"med",value:this.quartiles[1]},{field:"uq",value:this.quartiles[2]}];return void 0!==this.loutlier&&t.push({field:"lo",value:this.loutlier}),void 0!==this.routlier&&t.push({field:"ro",value:this.routlier}),void 0!==this.lwhisker&&t.push({field:"lw",value:this.lwhisker}),void 0!==this.rwhisker&&t.push({field:"rw",value:this.rwhisker}),t},render:function(){var t,n,i,r,o,a,l,c,u,h,d,f=this.target,p=this.values,g=p.length,m=this.options,v=this.canvasWidth,y=this.canvasHeight,b=void 0===m.get("chartRangeMin")?e.min.apply(e,p):m.get("chartRangeMin"),x=void 0===m.get("chartRangeMax")?e.max.apply(e,p):m.get("chartRangeMax"),w=0;if(k._super.render.call(this)){if(m.get("raw"))m.get("showOutliers")&&p.length>5?(n=p[0],t=p[1],r=p[2],o=p[3],a=p[4],l=p[5],c=p[6]):(t=p[0],r=p[1],o=p[2],a=p[3],l=p[4]);else if(p.sort(function(t,e){return t-e}),r=s(p,1),o=s(p,2),a=s(p,3),i=a-r,m.get("showOutliers")){for(t=l=void 0,u=0;u<g;u++)void 0===t&&p[u]>r-i*m.get("outlierIQR")&&(t=p[u]),p[u]<a+i*m.get("outlierIQR")&&(l=p[u]);n=p[0],c=p[g-1]}else t=p[0],l=p[g-1];this.quartiles=[r,o,a],this.lwhisker=t,this.rwhisker=l,this.loutlier=n,this.routlier=c,d=v/(x-b+1),m.get("showOutliers")&&(w=e.ceil(m.get("spotRadius")),v-=2*e.ceil(m.get("spotRadius")),d=v/(x-b+1),n<t&&f.drawCircle((n-b)*d+w,y/2,m.get("spotRadius"),m.get("outlierLineColor"),m.get("outlierFillColor")).append(),c>l&&f.drawCircle((c-b)*d+w,y/2,m.get("spotRadius"),m.get("outlierLineColor"),m.get("outlierFillColor")).append()),f.drawRect(e.round((r-b)*d+w),e.round(.1*y),e.round((a-r)*d),e.round(.8*y),m.get("boxLineColor"),m.get("boxFillColor")).append(),f.drawLine(e.round((t-b)*d+w),e.round(y/2),e.round((r-b)*d+w),e.round(y/2),m.get("lineColor")).append(),f.drawLine(e.round((t-b)*d+w),e.round(y/4),e.round((t-b)*d+w),e.round(y-y/4),m.get("whiskerColor")).append(),f.drawLine(e.round((l-b)*d+w),e.round(y/2),e.round((a-b)*d+w),e.round(y/2),m.get("lineColor")).append(),f.drawLine(e.round((l-b)*d+w),e.round(y/4),e.round((l-b)*d+w),e.round(y-y/4),m.get("whiskerColor")).append(),f.drawLine(e.round((o-b)*d+w),e.round(.1*y),e.round((o-b)*d+w),e.round(.9*y),m.get("medianColor")).append(),m.get("target")&&(h=e.ceil(m.get("spotRadius")),f.drawLine(e.round((m.get("target")-b)*d+w),e.round(y/2-h),e.round((m.get("target")-b)*d+w),e.round(y/2+h),m.get("targetColor")).append(),f.drawLine(e.round((m.get("target")-b)*d+w-h),e.round(y/2),e.round((m.get("target")-b)*d+w+h),e.round(y/2),m.get("targetColor")).append()),f.render()}}}),E=r({init:function(t,e,n,i){this.target=t,this.id=e,this.type=n,this.args=i},append:function(){return this.target.appendShape(this),this}}),L=r({_pxregex:/(\d+)(px)?\s*$/i,init:function(t,e,i){t&&(this.width=t,this.height=e,this.target=i,this.lastShapeId=null,i[0]&&(i=i[0]),n.data(i,"_jqs_vcanvas",this))},drawLine:function(t,e,n,i,r,o){return this.drawShape([[t,e],[n,i]],r,o)},drawShape:function(t,e,n,i){return this._genShape("Shape",[t,e,n,i])},drawCircle:function(t,e,n,i,r,o){return this._genShape("Circle",[t,e,n,i,r,o])},drawPieSlice:function(t,e,n,i,r,o,a){return this._genShape("PieSlice",[t,e,n,i,r,o,a])},drawRect:function(t,e,n,i,r,o){return this._genShape("Rect",[t,e,n,i,r,o])},getElement:function(){return this.canvas},getLastShapeId:function(){return this.lastShapeId},reset:function(){alert("reset not implemented")},_insert:function(t,e){n(e).html(t)},_calculatePixelDims:function(t,e,i){var r;r=this._pxregex.exec(e),this.pixelHeight=r?r[1]:n(i).height(),r=this._pxregex.exec(t),this.pixelWidth=r?r[1]:n(i).width()},_genShape:function(t,e){var n=R++;return e.unshift(n),new E(this,n,t,e)},appendShape:function(t){alert("appendShape not implemented")},replaceWithShape:function(t,e){alert("replaceWithShape not implemented")},insertAfterShape:function(t,e){alert("insertAfterShape not implemented")},removeShapeId:function(t){alert("removeShapeId not implemented")},getShapeAt:function(t,e,n){alert("getShapeAt not implemented")},render:function(){alert("render not implemented")}}),P=r(L,{init:function(e,i,r,o){P._super.init.call(this,e,i,r),this.canvas=t.createElement("canvas"),r[0]&&(r=r[0]),n.data(r,"_jqs_vcanvas",this),n(this.canvas).css({display:"inline-block",width:e,height:i,verticalAlign:"top"}),this._insert(this.canvas,r),this._calculatePixelDims(e,i,this.canvas),this.canvas.width=this.pixelWidth,this.canvas.height=this.pixelHeight,this.interact=o,this.shapes={},this.shapeseq=[],this.currentTargetShapeId=void 0,n(this.canvas).css({width:this.pixelWidth,height:this.pixelHeight})},_getContext:function(t,e,n){
-var i=this.canvas.getContext("2d");return void 0!==t&&(i.strokeStyle=t),i.lineWidth=void 0===n?1:n,void 0!==e&&(i.fillStyle=e),i},reset:function(){this._getContext().clearRect(0,0,this.pixelWidth,this.pixelHeight),this.shapes={},this.shapeseq=[],this.currentTargetShapeId=void 0},_drawShape:function(t,e,n,i,r){var o,a,s=this._getContext(n,i,r);for(s.beginPath(),s.moveTo(e[0][0]+.5,e[0][1]+.5),o=1,a=e.length;o<a;o++)s.lineTo(e[o][0]+.5,e[o][1]+.5);void 0!==n&&s.stroke(),void 0!==i&&s.fill(),void 0!==this.targetX&&void 0!==this.targetY&&s.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=t)},_drawCircle:function(t,n,i,r,o,a,s){var l=this._getContext(o,a,s);l.beginPath(),l.arc(n,i,r,0,2*e.PI,!1),void 0!==this.targetX&&void 0!==this.targetY&&l.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=t),void 0!==o&&l.stroke(),void 0!==a&&l.fill()},_drawPieSlice:function(t,e,n,i,r,o,a,s){var l=this._getContext(a,s);l.beginPath(),l.moveTo(e,n),l.arc(e,n,i,r,o,!1),l.lineTo(e,n),l.closePath(),void 0!==a&&l.stroke(),s&&l.fill(),void 0!==this.targetX&&void 0!==this.targetY&&l.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=t)},_drawRect:function(t,e,n,i,r,o,a){return this._drawShape(t,[[e,n],[e+i,n],[e+i,n+r],[e,n+r],[e,n]],o,a)},appendShape:function(t){return this.shapes[t.id]=t,this.shapeseq.push(t.id),this.lastShapeId=t.id,t.id},replaceWithShape:function(t,e){var n,i=this.shapeseq;for(this.shapes[e.id]=e,n=i.length;n--;)i[n]==t&&(i[n]=e.id);delete this.shapes[t]},replaceWithShapes:function(t,e){var n,i,r,o=this.shapeseq,a={};for(i=t.length;i--;)a[t[i]]=!0;for(i=o.length;i--;)n=o[i],a[n]&&(o.splice(i,1),delete this.shapes[n],r=i);for(i=e.length;i--;)o.splice(r,0,e[i].id),this.shapes[e[i].id]=e[i]},insertAfterShape:function(t,e){var n,i=this.shapeseq;for(n=i.length;n--;)if(i[n]===t)return i.splice(n+1,0,e.id),void(this.shapes[e.id]=e)},removeShapeId:function(t){var e,n=this.shapeseq;for(e=n.length;e--;)if(n[e]===t){n.splice(e,1);break}delete this.shapes[t]},getShapeAt:function(t,e,n){return this.targetX=e,this.targetY=n,this.render(),this.currentTargetShapeId},render:function(){var t,e,n,i=this.shapeseq,r=this.shapes,o=i.length,a=this._getContext();for(a.clearRect(0,0,this.pixelWidth,this.pixelHeight),n=0;n<o;n++)t=i[n],e=r[t],this["_draw"+e.type].apply(this,e.args);this.interact||(this.shapes={},this.shapeseq=[])}}),D=r(L,{init:function(e,i,r){var o;D._super.init.call(this,e,i,r),r[0]&&(r=r[0]),n.data(r,"_jqs_vcanvas",this),this.canvas=t.createElement("span"),n(this.canvas).css({display:"inline-block",position:"relative",overflow:"hidden",width:e,height:i,margin:"0px",padding:"0px",verticalAlign:"top"}),this._insert(this.canvas,r),this._calculatePixelDims(e,i,this.canvas),this.canvas.width=this.pixelWidth,this.canvas.height=this.pixelHeight,o='<v:group coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'" style="position:absolute;top:0;left:0;width:'+this.pixelWidth+"px;height="+this.pixelHeight+'px;"></v:group>',this.canvas.insertAdjacentHTML("beforeEnd",o),this.group=n(this.canvas).children()[0],this.rendered=!1,this.prerender=""},_drawShape:function(t,e,n,i,r){var o,a,s,l,c,u,h=[];for(u=0,c=e.length;u<c;u++)h[u]=e[u][0]+","+e[u][1];return o=h.splice(0,1),r=void 0===r?1:r,a=void 0===n?' stroked="false" ':' strokeWeight="'+r+'px" strokeColor="'+n+'" ',s=void 0===i?' filled="false"':' fillColor="'+i+'" filled="true" ',l=h[0]===h[h.length-1]?"x ":"",'<v:shape coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'"  id="jqsshape'+t+'" '+a+s+' style="position:absolute;left:0px;top:0px;height:'+this.pixelHeight+"px;width:"+this.pixelWidth+'px;padding:0px;margin:0px;"  path="m '+o+" l "+h.join(", ")+" "+l+'e"> </v:shape>'},_drawCircle:function(t,e,n,i,r,o,a){var s,l;return e-=i,n-=i,s=void 0===r?' stroked="false" ':' strokeWeight="'+a+'px" strokeColor="'+r+'" ',l=void 0===o?' filled="false"':' fillColor="'+o+'" filled="true" ','<v:oval  id="jqsshape'+t+'" '+s+l+' style="position:absolute;top:'+n+"px; left:"+e+"px; width:"+2*i+"px; height:"+2*i+'px"></v:oval>'},_drawPieSlice:function(t,n,i,r,o,a,s,l){var c,u,h,d,f,p,g;if(o===a)return"";if(a-o==2*e.PI&&(o=0,a=2*e.PI),u=n+e.round(e.cos(o)*r),h=i+e.round(e.sin(o)*r),d=n+e.round(e.cos(a)*r),f=i+e.round(e.sin(a)*r),u===d&&h===f){if(a-o<e.PI)return"";u=d=n+r,h=f=i}return u===d&&h===f&&a-o<e.PI?"":(c=[n-r,i-r,n+r,i+r,u,h,d,f],p=void 0===s?' stroked="false" ':' strokeWeight="1px" strokeColor="'+s+'" ',g=void 0===l?' filled="false"':' fillColor="'+l+'" filled="true" ','<v:shape coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'"  id="jqsshape'+t+'" '+p+g+' style="position:absolute;left:0px;top:0px;height:'+this.pixelHeight+"px;width:"+this.pixelWidth+'px;padding:0px;margin:0px;"  path="m '+n+","+i+" wa "+c.join(", ")+' x e"> </v:shape>')},_drawRect:function(t,e,n,i,r,o,a){return this._drawShape(t,[[e,n],[e,n+r],[e+i,n+r],[e+i,n],[e,n]],o,a)},reset:function(){this.group.innerHTML=""},appendShape:function(t){var e=this["_draw"+t.type].apply(this,t.args);return this.rendered?this.group.insertAdjacentHTML("beforeEnd",e):this.prerender+=e,this.lastShapeId=t.id,t.id},replaceWithShape:function(t,e){var i=n("#jqsshape"+t),r=this["_draw"+e.type].apply(this,e.args);i[0].outerHTML=r},replaceWithShapes:function(t,e){var i,r=n("#jqsshape"+t[0]),o="",a=e.length;for(i=0;i<a;i++)o+=this["_draw"+e[i].type].apply(this,e[i].args);for(r[0].outerHTML=o,i=1;i<t.length;i++)n("#jqsshape"+t[i]).remove()},insertAfterShape:function(t,e){var i=n("#jqsshape"+t),r=this["_draw"+e.type].apply(this,e.args);i[0].insertAdjacentHTML("afterEnd",r)},removeShapeId:function(t){var e=n("#jqsshape"+t);this.group.removeChild(e[0])},getShapeAt:function(t,e,n){return t.id.substr(8)},render:function(){this.rendered||(this.group.innerHTML=this.prerender,this.rendered=!0)}})})}(document,Math),define("download",["jquery","config","laconic"],function(t,e){!function(t){var n={_init:function(n){return this.each(function(){var i=t(this),r=n.uuid,o=n.content_type||"application/octet-stream",a=n.filename||"swish-download.dat";(function(){return void 0!=t("<a>")[0].download})()&&o||(o="application/octet-stream");var s=e.http.locations.download+"/"+encodeURIComponent(a)+"?content_type="+encodeURIComponent(o)+"&uuid="+r;i.attr("download",a),i.attr("href",s),i.attr("title","Download (use menu for save link as)"),i.text(a),i.addClass("btn btn-primary download"),i.append(t.el.span({class:"glyphicon glyphicon-download"}))})}};t.fn.downloader=function(e){return n[e]?n[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.downloader"):n._init.apply(this,arguments)}}(jQuery)}),define("runner",["jquery","config","preferences","cm/lib/codemirror","form","prolog","links","modal","answer","laconic","sparkline","download","search"],function($,config,preferences,CodeMirror,form,prolog,links,modal){function glyphButton(t,e){return $.el.a({href:"#",class:"close btn btn-link btn-sm",title:e},$.el.span({class:"glyphicon glyphicon-"+t}))}!function(t){var e={_init:function(e){return this.each(function(){var e=t(this),n={};n.stretch=t(t.el.div({class:"stretch"})),n.inner=t(t.el.div({class:"inner"})),e.append(function(){var n=t.el.span({class:"glyphicon glyphicon-menu-hamburger"});return form.widgets.dropdownButton(n,{divClass:"runners-menu btn-transparent",ulClass:"pull-right",client:e,actions:{"Collapse all":function(){this.find(".prolog-runner").prologRunner("toggleIconic",!0)},"Expand all":function(){this.find(".prolog-runner").prologRunner("toggleIconic",!1)},"Stop all":function(){this.find(".prolog-runner").prologRunner("stop")},Clear:function(){this.prologRunners("clear")}}})}()),e.append(n.stretch),e.append(n.inner),e.on("pane.resize",function(){e.prologRunners("scrollToBottom",!0)}),e.on("scroll-to-bottom",function(t,n){e.prologRunners("scrollToBottom",n)}),e.data("prologRunners",n)})},run:function(e){var n=this.data("prologRunners");e.iconifyLast&&this.prologRunners("iconifyLast");var i=t.el.div({class:"prolog-runner"});return n.inner.append(i),t(i).prologRunner(e),this.trigger("scroll-to-bottom"),this},clear:function(){this.find(".prolog-runner").prologRunner("close")},iconifyLast:function(){var e=t(this.inner).children().last();if(1==e.length){var n=e.prologRunner();n.alive()||n.toggleIconic(!0)}return this},scrollToBottom:function(e){return this.each(function(){var n=t(this),i=n.data("prologRunners"),r=i.inner.height(),o=n.height()-r-4-2;(o>0||!0!==e)&&(i.stretch.height(o>0?o:0),n.scrollTop(r))}),this}};t.fn.prologRunners=function(n){return e[n]?e[n].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof n&&n?void t.error("Method "+n+" does not exist on jQuery.prologRunners"):e._init.apply(this,arguments)}}(jQuery),function($){function RS(t){return $(t).closest(".prolog-runners")}function addAnswer(t,e){return t.find(".runner-results").append(e),this}function aliveState(t){switch(t){case"running":case"wait-next":case"wait-input":case"wait-debug":return!0;default:return!1}}function answerTable(t){var e=[{class:"projection"}];for(i=0;i<t.length;i++)e.push($.el.th({class:"pl-pvar"},t[i]));return e.push($.el.th({class:"answer-nth"},"")),$.el.table({class:"prolog-answers"},$.el.tbody($.el.tr.apply(this,e)))}function runScripts(elem){var scripts=[];if(elem=$(elem),elem.find("script").each(function(){"text/javascript"==(this.getAttribute("type")||"text/javascript")&&scripts.push(this.textContent)}),scripts.length>0){var script="(function(node){"+scripts.join("\n")+"})",node=new Node({node:elem[0]});try{eval(script)(node)}catch(t){alert(t)}}}function Node(t){this.my_node=t.node}function breakpoints(t){var e=t.data(pluginName);return $(t).parents(".swish").swish("breakpoints",e.prolog.id)}function registerSources(t){var e=t.options.runner,n=e.data(pluginName);n.query.editor&&$(n.query.editor).prologEditor("pengine",{add:t.id})}function handleCreate(){var t=this.pengine.options.runner,e=t.data(pluginName);if(void 0==e)this.pengine.destroy();else{var n,i=$.extend({},e.screen),r=config.swish.residuals_var||"Residuals",o=config.swish.permahash_var;o=o?", "+o:"",registerSources(this.pengine),(n=breakpoints(t))&&(i.breakpoints=Pengine.stringify(n)),e.chunk&&(i.chunk=e.chunk),this.pengine.ask("'$swish wrapper'((\n"+termNoFullStop(e.query.query)+"\n), ["+r+o+"])",i),t.prologRunner("setState","running")}}function handleSuccess(){var t=this.pengine.options.runner;if(void 0==t.data(pluginName))this.pengine.destroy();else{for(var e=0;e<this.data.length;e++){var n=this.data[e];this.projection&&(n.projection=this.projection),t.prologRunner("renderAnswer",n)}this.time>.1&&addAnswer(t,$.el.div({class:"cputime"},$.el.span(this.time.toFixed(3)," seconds cpu time"))),t.prologRunner("setState",this.more?"wait-next":"true")}}function handleFailure(){var t=this.pengine.options.runner;addAnswer(t,$.el.span({class:"prolog-false"},"false")),t.prologRunner("setState","false")}function handleStop(){this.pengine.options.runner.prologRunner("setState","stopped")}function handlePrompt(){var t=this.pengine.options.runner,e=t.data("prologRunner"),n=this.data||"Please enter a Prolog term";if(e.wait_for="term","object"==typeof n){if("trace"==n.type)return t.prologRunner("trace",this);if("form"==n.type)return t.prologRunner("form",this);if("jQuery"==n.type)return t.prologRunner("jQuery",this);"console"==n.type?(n=n.prompt||"console> ",e.wait_for="line"):n=JSON.stringify(n)}t.prologRunner("setPrompt",n),t.prologRunner("setState","wait-input")}function clickableLocations(t,e){var n=/pengine:\/\/[-0-9a-f]{36}\/src:(\d+)/;return t.replace(n,function(t){return"<a class='goto-error' title='Goto location'><span class='glyphicon glyphicon-hand-right'></span> <b>line <span class='line'>"+t.match(n)[1]+"</span></b></a>"})}function gotoError(t){var e=$(t.target).closest("a.goto-error"),n=$(t.target).closest(".error-context"),i=n.data("error_context");if(e[0]){var r=parseInt(e.find("span.line").text()),o=e.find("span.file").text();return t.preventDefault(),o?n.closest("body.swish").swish("playFile",{file:o,line:r}):$(i.editor).prologEditor("gotoLine",r),!1}i&&i.location.file?n.closest("body.swish").swish("playFile",i.location):$(i.editor).prologEditor("gotoLine",i.location.line)}function handleOutput(t){function e(){var e=a.file+":"+a.line+":";a.ch&&(e+=a.ch+":"),e+="\\s*",t.data=clickableLocations(t.data.replace(new RegExp(e,"g"),""),r.editor),o=n.prologRunner("outputHTML",t.data),$(o).addClass("error-context"),$(o).append($.el.span({class:"glyphicon glyphicon-hand-right"})),$(o).attr("title","Error in program.  Click to show in context"),$(o).on("click",gotoError),$(o).data("error_context",r)}var n=t.pengine.options.runner,i=n.data(pluginName);if(i){if("string"==typeof t.data){var r={editor:i.query.editor};if(t.data=t.data.replace(/'[-0-9a-f]{36}':/g,""),t.location){var o,a=t.location;if(a.file.startsWith("swish://")){var s=a.file.slice("swish://".length);r.location={file:s,line:a.line},e()}else a.file.startsWith("pengine://")&&(r.location={line:a.line},e(i.query.editor));registerSources(t.pengine),t.error_context=r,t.error_handler=gotoError,$(".swish-event-receiver").trigger("source-error",t)}else{var o=n.prologRunner("outputHTML",clickableLocations(t.data,r.editor));$(o).on("click",gotoError),$(o).data("error_context",r)}}else"object"==typeof t.data?n.prologRunner(t.data.action,t.data):console.log(t.data);n.trigger("scroll-to-bottom")}}function handleError(){var t=this.pengine.options.runner;"too_many_pengines"==this.code?this.message="Too many open queries.  Please complete some\nqueries by using |Next|, |Stop| or by\nclosing some queries.":"string"==typeof this.data?this.message=this.data.replace(new RegExp("'"+this.pengine.id+"':","g"),""):this.message="Unknown error",t.prologRunner("error",this),t.prologRunner("setState","error")}function handleAbort(){var t=this.pengine.options.runner;t.data("prologRunner")?(t.prologRunner("error","** Execution aborted **"),t.prologRunner("setState","aborted")):this.pengine.destroy()}function handlePing(){this.pengine.options.runner.prologRunner("ping",this.data)}function answerHasOutput(t){return t.variables.length>0||t.residuals}function termNoFullStop(t){return String($.trim(t)).replace(/\.$/,"")}var pluginName="prologRunner",keyBindings={59:"next",186:"next",32:"next",190:"stop",13:"stop",65:"stopOrAbort",27:"stopOrAbort",46:"close",112:"help"},methods={_init:function(t){return this.each(function(){function e(t,e,i,r){var o=$.el.button({title:e,class:"rtb-"+i},$.el.span({class:"glyphicon glyphicon-"+t}));return $(o).on("click",function(){n.prologRunner(i)}),0==r&&$(o).hide(),o}var n=$(this),i={};if(n.addClass("prolog-runner panel panel-default"),t.tabled&&n.addClass("tabled"),0!=t.title){var r=$.el.span({class:"query cm-s-prolog"});CodeMirror.runMode(t.query,"prolog",r),n.append($.el.div({class:"runner-title panel-heading"},e("remove-circle","Close","close"),e("minus","Iconify","toggleIconic"),e("download","Download CSV","downloadCSV"),e("link","Permalink","permalink",!1),function(){var t=$.el.span({class:"runner-state show-state idle"});return form.widgets.dropdownButton(t)}(),r,$.el.br({clear:"all"})))}else n.append($.el.div({class:"runner-title runner-button-group"},e("remove-circle","Close","close"),e("minus","Iconify","toggleIconic"),e("download","Download CSV","downloadCSV"),e("link","Permalink","permalink",!1)));return t.chunk&&(i.chunk=t.chunk),n.append($.el.div({class:"runner-results panel-body"})),n.append(function(){function t(){n.prologRunner("next",1)}function e(){n.prologRunner("next",10)}function r(){n.prologRunner("next",100)}function o(){n.prologRunner("next",1e3)}function a(){i.prolog.stop()}function s(){i.prolog.abort()}function l(t,e){var n=$.el.button(e);return $(n).on("click",t),n}var c=function(){var t=$.el.input({class:"prolog-input"}),e=$.el.button("Send");return $(t).keypress(function(e){if(13==e.which&&n.prologRunner("respond",$(t).val()))return $(t).val(""),e.preventDefault(),!1;"Esc"!=e.key&&e.stopPropagation()}),$(e).on("click",function(){n.prologRunner("respond",$(t).val())}),{input:t,button:e}}();return $.el.div({class:"controller show-state"},$.el.span({class:"running"},l(s,"Abort")),$.el.span({class:"wait-next"},l(t,"Next"),l(e,"10"),l(r,"100"),l(o,"1,000")," ",l(a,"Stop")),$.el.span({class:"wait-input"},l(s,"Abort"),c.button,$.el.span(c.input)),function(){return $.el.span({class:"sparklines"},"")}())}()),n.data("prologRunner",i),n.prologRunner("populateActionMenu"),n.keydown(function(t){"wait-input"==n.prologRunner("getState")||$(t.target).is("input")||t.ctrlKey||t.altKey||keyBindings[t.which]&&(t.preventDefault(),n.prologRunner(keyBindings[t.which]))}),n.on("click","a",links.followLink),i.savedFocus=document.activeElement,n.attr("tabindex",-1),n.focus(),i.query=t,i.answers=0,n.prologRunner("setScreenDimensions"),require([config.http.locations.pengines+"/pengines.js"],function(){i.prolog=new Pengine({server:config.http.locations.pengines,runner:n,application:"swish",src:t.source,destroy:!1,format:"json-html",oncreate:handleCreate,onsuccess:handleSuccess,onfailure:handleFailure,onstop:handleStop,onprompt:handlePrompt,onoutput:handleOutput,onping:handlePing,onerror:handleError,onabort:handleAbort}),i.prolog.state="idle",config.swish.ping&&void 0!=i.prolog.ping&&i.prolog.ping(1e3*config.swish.ping)}),this})},setScreenDimensions:function(){var t,e,n=this.data(pluginName),i=$.el.pre({class:"measure"},"xxxxxxxxxx"),r=this.width();e=this.closest(".prolog-runners"),0==e.length&&(e=this.closest(".nb-view")),e.length&&(t=e.height()),this.append(i);var o=$(i).width()/10,a=$(i).height();$(i).remove(),n.screen={width:r,cols:Math.floor(r/o)},void 0!==t&&(n.screen.height=t,n.screen.rows=Math.floor(t/a))},renderAnswer:function(t){var e=this.data("prologRunner"),n=++e.answers%2==0,i=function(t){for(var e={},n=t.variables,i=t.projection,r=0;r<n.length;r++)for(var o=n[r].variables,a=0;a<o.length;a++)if(o[a].startsWith("_swish__")){var s=o[a].replace("_swish__","");e[s]=n[r].value,n.splice(r,1),r--}if(i)for(var r=0;r<i.length;r++)i[r].startsWith("_swish__")&&(i.splice(r,1),r--);return e}(t);if(i.permahash&&(e.permahash=$(i.permahash).text().replace(/'/g,""),this.find(".rtb-permalink").show({duration:400})),e.query.tabled){if(1!=e.answers)return t.projection=e.projection,t.nth=e.answers,$(e.table).prologAnswer(t),this;if(t.projection&&t.projection.length>0){var r=answerTable(t.projection);return addAnswer(this,r),e.table=r,e.projection=t.projection,t.nth=e.answers,$(e.table).prologAnswer(t),this}}var o=$.el.div({class:"answer "+(n?"even":"odd")},$.el.span({class:"answer-no"},e.answers));addAnswer(this,o),$(o).prologAnswer(t)},outputHTML:function(t){var e=$.el.span({class:"output"});return addAnswer(this,e),e.innerHTML=t,runScripts(e),e},downloadButton:function(t){var e=$.el.a({class:"download"});addAnswer(this,e),$(e).downloader(t)},syntaxError:function(t){var e=this.data(pluginName);return t.data='<pre class="output msg-error">'+t.message+"</pre>",t.location.file=!0,$(e.query.query_editor).prologEditor("highlightError",t),this},error:function(t){var e;if("object"==typeof t){if("died"==t.code)return addAnswer(this,$.el.div({class:"RIP",title:"Remote pengine timed out"})),this;if("syntax_error"==t.code){var n=t.message.match(/^HTTP:DATA:(\d+):(\d+):\s*(.*)/);n&&4==n.length&&(this.prologRunner("syntaxError",{location:{line:parseInt(n[1])-1,ch:parseInt(n[2])},message:n[3]}),e="Cannot run query due to a syntax error (check query window)")}e||(e=t.message)}else e=t;return addAnswer(this,$.el.pre({class:"prolog-message msg-error"},e)),this},trace:function(t){function e(e,n,i){var r=$.el.button({class:n,title:e},$.el.span(e));return $(r).on("click",function(e){void 0!==i&&(n+="("+Pengine.stringify(i(e))+")"),t.pengine.respond(n),$(e.target).parent().remove()}),r}var n=$.el.span({class:"goal"}),i=t.data;$(n).html(i.goal),addAnswer(this,$.el.div({class:"prolog-trace"},$.el.span({class:"depth",style:"width:"+(5*i.depth-1)+"px"}," "),$.el.span({class:"port "+i.port},function(t){return t.charAt(0).toUpperCase()+t.slice(1)}(i.port),":"),n)),"exception"==i.port&&addAnswer(this,$.el.div({class:"prolog-exception"},i.exception.message)),addAnswer(this,$.el.div({class:"trace-buttons"},e("Continue","nodebug",function(t){return breakpoints($(t.target).closest(".prolog-runner"))}),e("Step into","continue"),e("Step over","skip"),e("Step out","up"),e("Retry","retry"),e("Abort","abort"))),this.closest(".swish").find(".tabbed").trigger("trace-location",i),this.prologRunner("setState","wait-debug")},setPrompt:function(t){this.find(".controller input").attr("placeholder",t)},jQuery:function(t){var e,n=t.data;if(console.log(n),"string"==typeof n.selector)e=$(n.selector);else if("object"==typeof n.selector){switch(n.selector.root){case"this":root=this;break;case"cell":root=this.closest(".nb-cell");break;case"notebook":root=this.closest(".notebook");break;case"swish":root=this.closest(".swish")}e=""==n.selector.sub?root:root.find(n.selector.sub)}console.log(e);var i=e[n.method].apply(e,n.arguments);console.log(i),t.pengine.respond(Pengine.stringify(i))},form:function(t){var e=this.data("prologRunner");modal.show({title:"Please enter parameters",body:function(){this.html(t.data.html),this.find("[data-search-in]").search({search:!1}),this.on("click","button[data-action]",function(t){var n=$(t.target).closest("button"),i=n.data("action");if("run"==i){var r=$(t.target).closest("form"),o=form.serializeAsObject(r,!0),a=Pengine.stringify(o);e.prolog.respond(a)}else"cancel"==i&&e.prolog.respond("cancel");return n.closest(".modal").modal("hide"),t.preventDefault(),!1})}})},respond:function(t){var e=this.data("prologRunner");if("term"==e.wait_for){if(s=termNoFullStop(t),""==s)return null}else s=Pengine.stringify(t+"\n");return addAnswer(this,$.el.div({class:"response"},t)),e.prolog.respond(s),this},stop:function(){return this.each(function(){$(this).data("prologRunner").prolog.stop()})},stopOrAbort:function(){return this.each(function(){var t=$(this),e=t.data("prologRunner");switch(t.prologRunner("getState")){case"running":case"wait-input":e.prolog.abort();break;case"wait-next":e.prolog.stop()}})},next:function(t){return this.each(function(){var e=$(this);e.data("prologRunner").prolog.next(t),e.prologRunner("setState","running")})},abort:function(){return this.each(function(){$(this).data("prologRunner").prolog.abort()})},close:function(){if(this.length){var t=this.parent();this.each(function(){var t=$(this),e=t.data("prologRunner");t.prologRunner("alive")&&($(".prolog-editor").trigger("pengine-died",e.prolog.id),e.prolog.abort(),t.prologRunner("setState","aborted"))}),this.remove(),t.trigger("scroll-to-bottom",!0)}return this},help:function(){$(".swish-event-receiver").trigger("help",{file:"runner.html"})},toggleIconic:function(t){return void 0==t?this.toggleClass("iconic"):t?this.addClass("iconic"):this.removeClass("iconic"),this.trigger("scroll-to-bottom",!0),this},populateActionMenu:function(t){var e=this.find(".runner-title .btn-group.dropdown");return t=$.extend({"Re-run":function(){console.log("Re-Run ",this)}},t),form.widgets.populateMenu(e,this,t),this},downloadCSV:function(t){var e=this.data("prologRunner"),n=termNoFullStop(e.query.query);return prolog.downloadCSV(n,e.query.source,t),this},permalink:function(){function t(){this.append($.el.form({class:"form-horizontal"},form.fields.hidden("identity",r.identity),r.identity?void 0:form.fields.hidden("avatar",r.avatar),form.fields.link(i),form.fields.fileName(null,!1),form.fields.title(),form.fields.description(),form.fields.tags([]),form.fields.author(o,r.identity),form.fields.buttons({label:"Save permalink",action:function(t,n){return e.prologRunner("save_permalink",n),!1}})))}var e=this,n=this.data("prologRunner");if(n.permahash){var i=config.http.locations.permalink+n.permahash;i=location.protocol+"//"+location.host+i;var r=$("#login").login("get_profile",["display_name","avatar","email","identity"]),o=r.display_name;form.showDialog({title:"Save permalink",body:t})}else modal.alert("No permahash");return this},save_permalink:function(t){var e=this,n=this.data("prologRunner"),i={data:n.permahash,type:"lnk",meta:t};return delete i.meta.link,$.ajax({url:config.http.locations.web_storage,dataType:"json",contentType:"application/json",type:"POST",data:JSON.stringify(i),success:function(t){t.error?modal.alert(errorString("Could not save",t)):modal.feedback({html:"Saved",owner:e})},error:function(t,e,n){403==t.status?modal.alert("Permission denied.  Please try a different name"):alert("Save failed: "+e)}}),this},setState:function(t){var e=this.data("prologRunner");if(e){if(e.prolog.state!=t){var n=this.find(".show-state"),i=e.query;n.removeClass(e.prolog.state).addClass(t),e.prolog.state=t,!aliveState(t)&&e.savedFocus?($(e.savedFocus).focus(),e.savedFocus=null):"wait-input"==t&&this.find("input").focus(),"true"==t&&i.success&&i.success.call(this,e.prolog),!aliveState(t)&&i.complete&&i.complete.call(this,e.prolog)}RS(this);if(aliveState(t))if("wait-next"==t||"true"==t){var r=this;setTimeout(function(){r.trigger("scroll-to-bottom")},100)}else this.trigger("scroll-to-bottom");else{var r=this;$(".prolog-editor").trigger("pengine-died",e.prolog.id),e.prolog.destroy(),setTimeout(function(){r.trigger("scroll-to-bottom")},100)}return this}},getState:function(){var t=this.data("prologRunner");return t.prolog?t.prolog.state:"idle"},alive:function(){return aliveState(this.prologRunner("getState"))},ping:function(t){function e(t,e){var n=Math.round(Math.pow(10,e)/1e4*t);return function(t){t=t.toString();for(var e=/(-?\d+)(\d{3})/;e.test(t);)t=t.replace(e,"$1,$2");return t}(n)}var n=this.data("prologRunner");if(n&&n.prolog&&"running"==n.prolog.state){var r=this.find(".sparklines"),o=["global","local","trail"],a=["red","blue","green"],s=["Global ","Local ","Trail "];for(n.stacks||(n.stacks={global:{usage:[]},local:{usage:[]},trail:{usage:[]}}),i=0;i<o.length;i++){var l=o[i],c=t.stacks[l].limit,u=t.stacks[l].usage,h=Math.log10(u/c*1e4);n.stacks[l].limit=c,n.stacks[l].usage.length>=10&&(n.stacks[l].usage=n.stacks[l].usage.slice(1)),n.stacks[l].usage.push(h),r.sparkline(n.stacks[l].usage,{height:"2em",composite:i>0,chartRangeMin:0,chartRangeMax:4,lineColor:a[i],tooltipPrefix:s[i],tooltipSuffix:" bytes",tooltipChartTitle:0==i?"Stack usage":void 0,numberFormatter:function(t){return e(c,t)}})}}}},node_id=1;Node.prototype.node=function(){return $(this.my_node)},Node.prototype.unique_id=function(){return this.uid||(this.uid=node_id++),this.uid},$.fn.prologRunner=function(t){return methods[t]?methods[t].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof t&&t?void $.error("Method "+t+" does not exist on jQuery."+pluginName):methods._init.apply(this,arguments)}}(jQuery)}),function(){"use strict";function Sha1(t){t?(blocks[0]=blocks[16]=blocks[1]=blocks[2]=blocks[3]=blocks[4]=blocks[5]=blocks[6]=blocks[7]=blocks[8]=blocks[9]=blocks[10]=blocks[11]=blocks[12]=blocks[13]=blocks[14]=blocks[15]=0,this.blocks=blocks):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.h0=1732584193,this.h1=4023233417,this.h2=2562383102,this.h3=271733878,this.h4=3285377520,this.block=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0}var root="object"==typeof window?window:{},NODE_JS=!root.JS_SHA1_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;NODE_JS&&(root=global);var COMMON_JS=!root.JS_SHA1_NO_COMMON_JS&&"object"==typeof module&&module.exports,AMD="function"==typeof define&&define.amd,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[-2147483648,8388608,32768,128],SHIFT=[24,16,8,0],OUTPUT_TYPES=["hex","array","digest","arrayBuffer"],blocks=[],createOutputMethod=function(t){return function(e){return new Sha1(!0).update(e)[t]()}},createMethod=function(){var t=createOutputMethod("hex");NODE_JS&&(t=nodeWrap(t)),t.create=function(){return new Sha1},t.update=function(e){return t.create().update(e)};for(var e=0;e<OUTPUT_TYPES.length;++e){var n=OUTPUT_TYPES[e];t[n]=createOutputMethod(n)}return t},nodeWrap=function(method){var crypto=eval("require('crypto')"),Buffer=eval("require('buffer').Buffer"),nodeMethod=function(t){if("string"==typeof t)return crypto.createHash("sha1").update(t,"utf8").digest("hex");if(t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(void 0===t.length)return method(t);return crypto.createHash("sha1").update(new Buffer(t)).digest("hex")};return nodeMethod};Sha1.prototype.update=function(t){if(!this.finalized){var e="string"!=typeof t;e&&t.constructor===root.ArrayBuffer&&(t=new Uint8Array(t));for(var n,i,r=0,o=t.length||0,a=this.blocks;r<o;){if(this.hashed&&(this.hashed=!1,a[0]=this.block,a[16]=a[1]=a[2]=a[3]=a[4]=a[5]=a[6]=a[7]=a[8]=a[9]=a[10]=a[11]=a[12]=a[13]=a[14]=a[15]=0),e)for(i=this.start;r<o&&i<64;++r)a[i>>2]|=t[r]<<SHIFT[3&i++];else for(i=this.start;r<o&&i<64;++r)n=t.charCodeAt(r),n<128?a[i>>2]|=n<<SHIFT[3&i++]:n<2048?(a[i>>2]|=(192|n>>6)<<SHIFT[3&i++],a[i>>2]|=(128|63&n)<<SHIFT[3&i++]):n<55296||n>=57344?(a[i>>2]|=(224|n>>12)<<SHIFT[3&i++],a[i>>2]|=(128|n>>6&63)<<SHIFT[3&i++],a[i>>2]|=(128|63&n)<<SHIFT[3&i++]):(n=65536+((1023&n)<<10|1023&t.charCodeAt(++r)),a[i>>2]|=(240|n>>18)<<SHIFT[3&i++],a[i>>2]|=(128|n>>12&63)<<SHIFT[3&i++],a[i>>2]|=(128|n>>6&63)<<SHIFT[3&i++],a[i>>2]|=(128|63&n)<<SHIFT[3&i++]);this.lastByteIndex=i,this.bytes+=i-this.start,i>=64?(this.block=a[16],this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Sha1.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,e=this.lastByteIndex;t[16]=this.block,t[e>>2]|=EXTRA[3&e],this.block=t[16],e>=56&&(this.hashed||this.hash(),t[0]=this.block,t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.hBytes<<3|this.bytes>>>29,t[15]=this.bytes<<3,this.hash()}},Sha1.prototype.hash=function(){var t,e,n,i=this.h0,r=this.h1,o=this.h2,a=this.h3,s=this.h4,l=this.blocks;for(e=16;e<80;++e)n=l[e-3]^l[e-8]^l[e-14]^l[e-16],l[e]=n<<1|n>>>31;for(e=0;e<20;e+=5)t=r&o|~r&a,n=i<<5|i>>>27,s=n+t+s+1518500249+l[e]<<0,r=r<<30|r>>>2,t=i&r|~i&o,n=s<<5|s>>>27,a=n+t+a+1518500249+l[e+1]<<0,i=i<<30|i>>>2,t=s&i|~s&r,n=a<<5|a>>>27,o=n+t+o+1518500249+l[e+2]<<0,s=s<<30|s>>>2,t=a&s|~a&i,n=o<<5|o>>>27,r=n+t+r+1518500249+l[e+3]<<0,a=a<<30|a>>>2,t=o&a|~o&s,n=r<<5|r>>>27,i=n+t+i+1518500249+l[e+4]<<0,o=o<<30|o>>>2;for(;e<40;e+=5)t=r^o^a,n=i<<5|i>>>27,s=n+t+s+1859775393+l[e]<<0,r=r<<30|r>>>2,t=i^r^o,n=s<<5|s>>>27,a=n+t+a+1859775393+l[e+1]<<0,i=i<<30|i>>>2,t=s^i^r,n=a<<5|a>>>27,o=n+t+o+1859775393+l[e+2]<<0,s=s<<30|s>>>2,t=a^s^i,n=o<<5|o>>>27,r=n+t+r+1859775393+l[e+3]<<0,a=a<<30|a>>>2,t=o^a^s,n=r<<5|r>>>27,i=n+t+i+1859775393+l[e+4]<<0,o=o<<30|o>>>2;for(;e<60;e+=5)t=r&o|r&a|o&a,n=i<<5|i>>>27,s=n+t+s-1894007588+l[e]<<0,r=r<<30|r>>>2,t=i&r|i&o|r&o,n=s<<5|s>>>27,a=n+t+a-1894007588+l[e+1]<<0,i=i<<30|i>>>2,t=s&i|s&r|i&r,n=a<<5|a>>>27,o=n+t+o-1894007588+l[e+2]<<0,s=s<<30|s>>>2,t=a&s|a&i|s&i,n=o<<5|o>>>27,r=n+t+r-1894007588+l[e+3]<<0,a=a<<30|a>>>2,t=o&a|o&s|a&s,n=r<<5|r>>>27,i=n+t+i-1894007588+l[e+4]<<0,o=o<<30|o>>>2;for(;e<80;e+=5)t=r^o^a,n=i<<5|i>>>27,s=n+t+s-899497514+l[e]<<0,r=r<<30|r>>>2,t=i^r^o,n=s<<5|s>>>27,a=n+t+a-899497514+l[e+1]<<0,i=i<<30|i>>>2,t=s^i^r,n=a<<5|a>>>27,o=n+t+o-899497514+l[e+2]<<0,s=s<<30|s>>>2,t=a^s^i,n=o<<5|o>>>27,r=n+t+r-899497514+l[e+3]<<0,a=a<<30|a>>>2,t=o^a^s,n=r<<5|r>>>27,i=n+t+i-899497514+l[e+4]<<0,o=o<<30|o>>>2;this.h0=this.h0+i<<0,this.h1=this.h1+r<<0,this.h2=this.h2+o<<0,this.h3=this.h3+a<<0,this.h4=this.h4+s<<0},Sha1.prototype.hex=function(){this.finalize();var t=this.h0,e=this.h1,n=this.h2,i=this.h3,r=this.h4
+"Shift-Ctrl-Alt-2":function(t){var e=t.getCursor();t.setSelection(m(t,e,f,1),e)},"Ctrl-Alt-T":function(t){var e=f(t,t.getCursor(),-1),n=f(t,e,1),i=f(t,n,1),r=f(t,i,-1);t.replaceRange(t.getRange(r,i)+t.getRange(n,r)+t.getRange(e,n),e,i)},"Ctrl-Alt-U":g(L),"Alt-Space":function(t){for(var e=t.getCursor(),n=e.ch,i=e.ch,r=t.getLine(e.line);n&&/\s/.test(r.charAt(n-1));)--n;for(;i<r.length&&/\s/.test(r.charAt(i));)++i;t.replaceRange(" ",N(e.line,n),N(e.line,i))},"Ctrl-O":g(function(t){t.replaceSelection("\n","start")}),"Ctrl-T":g(function(t){t.execCommand("transposeChars")}),"Alt-C":g(function(t){E(t,function(t){var e=t.search(/\w/);return-1==e?t:t.slice(0,e)+t.charAt(e).toUpperCase()+t.slice(e+1).toLowerCase()})}),"Alt-U":g(function(t){E(t,function(t){return t.toUpperCase()})}),"Alt-L":g(function(t){E(t,function(t){return t.toLowerCase()})}),"Alt-;":"toggleComment","Ctrl-/":g("undo"),"Shift-Ctrl--":g("undo"),"Ctrl-Z":g("undo"),"Cmd-Z":g("undo"),"Shift-Alt-,":"goDocStart","Shift-Alt-.":"goDocEnd","Ctrl-S":"findPersistentNext","Ctrl-R":"findPersistentPrev","Ctrl-G":P,"Shift-Alt-5":"replace","Alt-/":"autocomplete",Enter:"newlineAndIndent","Ctrl-J":g(function(t){t.replaceSelection("\n","end")}),Tab:"indentAuto","Alt-G G":function(t){var e=p(t,!0);if(null!=e&&e>0)return t.setCursor(e-1);M(t,"Goto line",function(e){var n;e&&!isNaN(n=Number(e))&&n==(0|n)&&n>0&&t.setCursor(n-1)})},"Ctrl-X Tab":function(t){t.indentSelection(p(t,!0)||t.getOption("indentUnit"))},"Ctrl-X Ctrl-X":function(t){t.setSelection(t.getCursor("head"),t.getCursor("anchor"))},"Ctrl-X Ctrl-S":"save","Ctrl-X Ctrl-W":"save","Ctrl-X S":"saveAll","Ctrl-X F":"open","Ctrl-X U":g("undo"),"Ctrl-X K":"close","Ctrl-X Delete":function(t){a(t,t.getCursor(),d(t,t.getCursor(),1),"grow")},"Ctrl-X H":"selectAll","Ctrl-Q Tab":g("insertTab"),"Ctrl-U":C}),j={"Ctrl-G":_},H=0;H<10;++H)D(String(H));D("-")}),define("editor",["cm/lib/codemirror","config","preferences","form","cm/mode/prolog/prolog-template-hint","modal","tabbed","prolog","storage","cm/mode/prolog/prolog","cm/mode/prolog/prolog_keys","cm/mode/prolog/prolog_query","cm/mode/prolog/prolog_server","cm/mode/markdown/markdown","cm/addon/edit/matchbrackets","cm/addon/comment/continuecomment","cm/addon/comment/comment","cm/addon/hint/show-hint","cm/addon/hint/anyword-hint","cm/addon/display/placeholder","cm/addon/runmode/runmode","cm/addon/search/search","cm/addon/search/searchcursor","cm/addon/search/jump-to-line","cm/addon/dialog/dialog","cm/addon/hover/text-hover","cm/addon/hover/prolog-hover","cm/addon/hint/templates-hint","cm/addon/hint/show-context-info","jquery","laconic","cm/keymap/emacs"],function(t,e,n,i,r,o,a,s){function l(t,e){var n=[];e=e||"",n.push("<style>\n");for(var i in t)if(t.hasOwnProperty(i)){var r=t[i];n.push(e,i,"{");for(var o in r)r.hasOwnProperty(o)&&n.push(o,":",r[o],";");n.push("}\n")}n.push("</style>\n"),$("body").append(n.join(""))}!function(i){var l,c="prologEditor",u={prolog:{mode:"prolog",role:"source",placeholder:"Your Prolog rules and facts go here ...",lineNumbers:!0,autoCurrent:!0,save:!1,theme:"prolog",matchBrackets:!0,textHover:!0,prologKeys:!0,extraKeys:{"Ctrl-Space":"autocomplete","Alt-/":"autocomplete"},hintOptions:{hint:r.getHints,completeSingle:!1}},markdown:{mode:"markdown",placeholder:"Your markdown block goes here ...",lineWrapping:!0,save:!1}},h={query:{mode:"prolog",role:"query",placeholder:"Your query goes here ...",lineNumbers:!1,lineWrapping:!0,save:!1}},d={_init:function(r){return this.each(function(){function o(t){var e=p.long_click,n=t.clientX-e.clientX,i=t.clientY-e.clientY;Math.sqrt(n*n+i*i)>5&&a()}function a(){d.off("mousemove",o);var t=p.long_click;t.timeout&&(clearTimeout(t.timeout),t.target=void 0,t.timeout=void 0)}function s(t){var e=i(l).data(t);e&&(f[t]=e)}var l,d=i(this),f={},p={};r=r||{},r.mode=r.mode||"prolog";var g=i.extend({},u[r.mode]);r.role&&h[r.role]&&(g=i.extend(g,h[r.role])),g=i.extend(g,r),n.getVal("emacs-keybinding")&&(g.keyMap="emacs"),"prolog"==g.mode&&(p.role=g.role,g.getSource&&(p.getSource=g.getSource),e.http.locations.cm_highlight&&(g.prologHighlightServer={url:e.http.locations.cm_highlight,role:g.role,enabled:n.getVal("semantic-highlighting")},g.sourceID&&(g.prologHighlightServer.sourceID=g.sourceID),g.extraKeys["Ctrl-R"]="refreshHighlight"),"source"==g.role&&(g.continueComments="Enter",g.gutters=["Prolog-breakpoints"]),p.long_click={},d.on("mousedown",".CodeMirror-code",function(t){var e=p.long_click;e.clientX=t.clientX,e.clientY=t.clientY,d.on("mousemove",o),p.long_click.timeout=setTimeout(function(){a(),d.prologEditor("contextAction")},500)}),d.on("mouseup",function(t){a()})),(l=d.children("textarea")[0])?(s("file"),s("url"),s("title"),s("meta"),s("st_type"),s("chats"),p.cm=t.fromTextArea(l,g)):(g.value||(g.value=d.text()),p.cm=t(d[0],g)),d.data(c,p),d.prologEditor("loadMode",g.mode),d.addClass("swish-event-receiver"),d.addClass("prolog-editor"),d.on("preference",function(t,e){d.prologEditor("preference",e)}),d.on("print",function(){"query"!=p.role&&d.prologEditor("print")}),d.on("clearMessages",function(t){d.prologEditor("clearMessages")}),d.on("edit-command",function(t,e){d.prologEditor("execCommand",e)}),p.cm.on("blur",function(t){d.prologEditor("execCommand","prepare")}),g.save&&(f.typeName=g.typeName||"program",d.prologEditor("setupStorage",f)),d.on("activate-tab",function(t){p.cm.refresh()}),"prolog"==g.mode&&"source"==p.role&&(d.on("activate-tab",function(t){g.autoCurrent&&d.prologEditor("makeCurrent")}),d.on("source-error",function(t,e){d.prologEditor("highlightError",e)}),d.on("pengine-died",function(t,e){if(p.pengines){var n=p.pengines.indexOf(e);n>=0&&p.pengines.splice(n,1)}p.traceMark&&p.traceMark.pengine==e&&(p.traceMark.clear(),p.traceMark=null)}),g.save&&d.on("addExample",function(t,e){d.prologEditor("addExample",e)}),p.cm.on("gutterClick",function(t,e){t.lineInfo(e).gutterMarkers?t.setGutterMarker(e,"Prolog-breakpoints",null):t.setGutterMarker(e,"Prolog-breakpoints",function(){return i('<span class="breakpoint-marker">&#9679;</span>')[0]}())})),p.cm.on("change",function(t,e){var n;if("setValue"==e.origin)n=!0;else{var i=d.data("storage"),r=i?i.cleanGeneration:p.cleanGeneration;n=p.cm.isClean(r)}d.prologEditor("markClean",n)})})},getOption:function(t){return this.data(c)[t]},setKeybinding:function(t){t=t||"default",this.data(c).cm.options.keyMap=t},loadMode:function(e){var n=this.data(c);return t.modes[e]?e!=n.mode&&n.cm.setOption("mode",e):require(["cm/mode/"+e+"/"+e],function(){n.cm.setOption("mode",e)}),this},isPengineSource:function(){var t=i(this).data(c);if(t&&"source"==t.role){var e=i(this).data("storage");if(e&&e.meta&&(e.meta.loaded||e.meta.module))return!1}return this},getBreakpoints:function(t){var e=[];return this.each(function(){for(var n=i(this).data(c),r=[],o=n.cm,a=o.firstLine(),s=o.lastLine();a<s;a++){o.lineInfo(a).gutterMarkers&&r.push(0+a+1)}if(r.length>0){var l;if(n.pengines&&n.pengines.indexOf(t)>=0)l="pengine://"+t+"/src";else{var u=i(this).data("storage");u&&(l="swish://"+u.file)}l&&e.push({file:l,breakpoints:r})}}),e},getSource:function(t,e){var n=[];return this.each(function(){if(i(this).prologEditor("isPengineSource")){var r=i(this).data(c);if(r&&(!t||t==r.role)){var o;o="function"!=typeof r.getSource||e?r.cm.getValue():r.getSource(),n.push(o)}}}),n.join("\n\n")},getSourceEx:function(){var t={value:this.data(c).cm.getValue()},e=this.prologEditor("getBreakpoints");return e.length>0&&(t.breakpoints=e),t},docid:function(){var t;return this.hasClass("storage")?this.storage("docid"):(t=this.closest(".storage"))&&t.length>0&&(stdoc=t.storage("docid"),stdoc)?stdoc+"#"+this.closest(".nb-cell").attr("name"):void 0},getSourceID:function(){var t=[];return this.each(function(){var e=i(this).data(c);e&&e.cm&&e.cm.state.prologHighlightServer?t.push(e.cm.state.prologHighlightServer.uuid):t.push(null)}),t},setSource:function(t,e){if("string"==typeof t&&(t={data:t}),this.data("storage")&&1!=e)this.storage("setSource",t);else{var n=this.data(c);n.cm.setValue(t.data),(t.line||t.prompt)&&(n.cm.refresh(),t.line?this.prologEditor("gotoLine",t.line,t):this.prologEditor("showTracePort",t.prompt)),"source"!=n.role||t.noHistory||i(".swish-event-receiver").trigger("program-loaded",{editor:this,query:t.query})}return this},makeCurrent:function(t){return t&&t.noHistory||i(".swish-event-receiver").trigger("current-program",this),this},focus:function(){var t=this.data(c);return t&&t.cm.focus(),this},markClean:function(t){var e=this.data(c);e.clean_signalled!=t&&(e.clean_signalled=t,this.trigger("data-is-clean",t))},setIsClean:function(){return this.each(function(){var t=i(this),e=t.data(c);e.cleanGeneration=e.cm.changeGeneration(),e.clean_signalled=!0})},pengine:function(t){var e=this.data(c);if(e){if(t.add)return e.pengines=e.pengines||[],e.pengines.indexOf(t.add)<0&&e.pengines.push(t.add),this;if(t.has)return e.pengines&&e.pengines.indexOf(t.has)>=0}},print:function(n){function r(t){var e=i.el.iframe({src:"about:blank"});i("body").append(e),i("body",e.contentWindow.document).append(t),e.contentWindow.print()}var a=i.el.pre({class:"cm-s-prolog"});return n||(n=this.prologEditor("getSource")),t.runMode(n,"prolog",a),i.ajax({url:e.http.locations.swish+"js/codemirror/theme/prolog.css",dataType:"text",success:function(t){r(i.el.div(i.el.style(t),a))},error:function(t){o.ajaxError(t)}}),this},preference:function(t){var e=this.data(c);return"semantic-highlighting"==t.name&&e.cm.setOption("prologHighlightServer",{enabled:t.value}),"emacs-keybinding"==t.name&&(1==t.value?e.cm.setOption("keyMap","emacs"):e.cm.setOption("keyMap","default")),this},highlightError:function(t){if(t.location.file&&(1==t.location.file||this.prologEditor("isMyFile",t.location.file))){var e,n=this.data(c);t.location.ch&&(left=n.cm.charCoords({line:t.location.line-1,ch:t.location.ch-1},"local").left,e=i.el.div({class:"source-msg-charmark"},i.el.span({class:"glyphicon glyphicon-chevron-up"})),i(e).css("padding-left",left+"px"));var r=i.el.div({class:"source-msg error error-context",title:"Error message.  Click to remove"},e,i(t.data)[0],i.el.span({class:"glyphicon glyphicon-remove-circle"})),o=n.cm.addLineWidget(t.location.line-1,r);t.error_context&&i(r).data("error_context",t.error_context),i(r).on("click",function(e){t.error_handler&&0==t.error_handler(e)||o.clear()}),i(r).data("cm-widget",o)}return this},refreshHighlight:function(){return this.data(c).cm.serverAssistedHighlight(!0),this},refresh:function(){var t=this.data(c);return t&&t.cm.refresh(),this},clearMessages:function(){return this.find(".source-msg").each(function(){i(this).data("cm-widget").clear()}),this.prologEditor("showTracePort",null),this},execCommand:function(t){if("prepare"==t)l=this[0];else if(l==this[0]){elem=i(l);var e=elem.data(c);e.cm.execCommand(t),elem.find(".Codemirror-dialog input").focus()}return this},isMyFile:function(t){if(t.startsWith("pengine://")){var e=this.data(c);if(e.pengines&&(id=t.split("/")[2])&&e.pengines.indexOf(id)>=0)return!0}if(t.startsWith("swish://")){var n=this.data("storage");if(n&&t.slice("swish://".length)==n.file)return!0}return!1},showTracePort:function(t){if(0==this.length)return this;var e=this.data(c);if(e.traceMark&&(e.traceMark.clear(),e.traceMark=null),!(t&&t.source&&t.source.file))return this;var n=t.source.file;if(this.prologEditor("isMyFile",n)){if(t.source.from&&t.source.to){var i=e.cm.charOffsetToPos(t.source.from),r=e.cm.charOffsetToPos(t.source.to);this.is(":visible")||this.storage("expose","trace"),i&&r&&(e.traceMark=e.cm.markText(i,r,{className:"trace "+t.port}),e.traceMark.pengine=t.pengine,e.cm.scrollIntoView(i,50))}return this}},getSelection:function(){var t=[];return this.each(function(){function e(t){return{line:t.line,ch:t.ch}}var n=i(this),r=n.data(c);if(1==r.cm.somethingSelected()){var o=r.cm.listSelections(),a={selections:[]},s=n.closest(".nb-cell").attr("name");s&&(a.cell=s);for(var l=0;l<o.length;l++){var u=o[l],h={};switch(function(t,e){return t.line<e.line?-1:t.line>e.line?1:t.ch<e.ch?-1:t.ch>e.ch?1:0}(u.anchor,u.head)){case-1:h.from=e(u.anchor),h.to=e(u.head);break;case 1:h.to=e(u.anchor),h.from=e(u.head);break;case 0:continue}h.string=r.cm.getRange(h.from,h.to),h.context=r.cm.getRange(function(t){return{line:t.line,ch:0}}(h.from),function(t){return{line:t.line,ch:r.cm.getLine(t.line).length}}(h.to)),a.selections.push(h)}t.push(a)}}),t.length>0?t:null},restoreSelection:function(t){function e(t,e){for(var n=t.data(c),i=n.cm,r=[],a="",s=0;s<e.length;s++){var l=function(t){function e(t,e,n){return n=n||0,{line:t.line+e,ch:t.ch+n}}if(i.getRange(t.from,t.to)==t.string)return{anchor:t.from,head:t.to};for(var n=i.firstLine(),r=i.lastLine(),o=0,a=1;t.from.line+o>=n&&t.to.line+o<=r;){var s;if(function(t,e){for(var n=e.split("\n"),r=0;r<n.length;r++)if(i.getLine(t+r)!=n[r])return!1;return!0}(t.from.line+o,t.context))return{anchor:e(t.from,o),head:e(t.to,o),offset:o};if((s=function(t,e){for(var n=e.split("\n"),r=0;r<n.length;r++){var o,a=i.getLine(t),s=n[r];if(0==r){if(r==n.length-1)return a.indexOf(s);if(!((o=a.indexOf(s))>=0&&s.length+o==a.length))return-1}else if(r==n.length-1){if(0!=a.indexOf(s))return-1}else if(i.getLine(t+r)!=n[r])return-1}return o}(t.from.line+o,t.string))>=0){var l=s-t.from.ch,c=t.to.line!=t.from.line?0:l;return{anchor:e(t.from,o,l),head:e(t.to,o,c),offset:o}}a++,o=Math.floor(a/2),a%2==1&&(o=-o)}}(e[s]);l&&(r.push(l),l.offset&&(""!=a&&(a+=";"),a+=l.offset))}if(r.length>0&&i.setSelections(r,0),""!=a||r.length<e.length){var u;u=r.length==e.length?"Found selections at offset "+a:""==a?"Could not restore all selections":"Only found some selections at offsets "+a,o.feedback({html:u,owner:t})}}if(t[0].cell)for(var n=this,r=0;r<t.length;r++){var a=t[r],s=function(t){for(var e=0;e<n.length;e++)if(i(n[e]).closest(".nb-cell").attr("name")==t)return i(n[e])}(a.cell);s&&e(s,a.selections)}else e(this,t);return this},getExamples:function(t,e){var n,r=t||this.prologEditor("getSource"),o=[];if(""==i.trim(r))return null;if(n=0==e?[t]:r.match(/\/\*\* *<?examples>?[\s\S]*?\*\//gim))for(var a=0;a<n.length;a++){var s=n[a].match(/^ *\?-[\s\S]*?[^-#$&*+.\/:<=>?@\\^~]\.\s/gm);if(s)for(var l=0;l<s.length;l++){var c=s[l].replace(/^ *\?-\s*/,"").replace(/\s*$/,"");o.push(c)}}return o},addExample:function(t){var e=this.data(c).cm,n=this.prologEditor("getSource"),i=this.prologEditor("search",/\/\*\* *<?examples>?/gim,{dir:-1,max:1}),r=this.prologEditor("search",/\*\//,{start:i.line,max:1});if(1==i.length){var r=this.prologEditor("search",/\*\//,{start:i[0].line,max:1}),a=this.prologEditor("getExamples",n);if(a&&-1!=a.indexOf(t))return o.alert("Query is already in examples"),this;if(1!=r.length)return o.alert("/** <examples> block is not terminated with */"),this;t=t.split("\n").join("\n   "),e.setSelection({line:r[0].line-1,ch:0}),e.replaceSelection("?- "+t+"\n")}else{var s=e.lastLine(),l=e.getLine(s);e.replaceRange("\n\n/** <examples>\n?- "+t+"\n*/\n",{line:s,ch:l.length})}return this},search:function(t,e){var n=this.data(c).cm,i=e.dir||1,r=void 0==e.start?n.firstLine():e.start,o=void 0==e.end?n.lastLine():e.end,a=[];if(-1==i&&o>r||1==i&&r>o){var s=r;r=o,o=s}if(i>0&&r>o||i<0&&r<o)return a;o+=i;for(var l=r;l!=o;l+=i){var u=n.getLine(l);if(u.search(t)>=0&&(a.push({line:l+1,text:u}),e.max&&e.max===a.length))return a}return a},gotoLine:function(t,e){function n(t){if(void 0!==t._searchMarkers){for(var e=0;e<t._searchMarkers.length;e++)t._searchMarkers[e].clear();t.off("cursorActivity",n)}t._searchMarkers=[]}function i(t,e){for(var n;n=r.exec(a.getLine(t));)a._searchMarkers.push(a.markText({line:t,ch:n.index},{line:t,ch:n.index+n[0].length},{className:e,clearOnEnter:!0,clearWhenEmpty:!0,title:"Search match"}))}var r,o=this.data(c),a=o.cm,s=0;n(a),e=e||{},r=e.regex,t-=1,r&&(s=a.getLine(t).search(r))<0&&(s=0),a.setCursor({line:t,ch:s});var l=a.getScrollInfo().clientHeight,u=a.charCoords({line:t,ch:0},"local");if(a.scrollTo(null,(u.top+u.bottom-l)/2),r){if(i(t,"CodeMirror-search-match"),e.showAllMatches)for(var h=a.getViewport(),d=h.from;d<h.to;d++)d!=t&&i(d,"CodeMirror-search-alt-match");a._searchMarkers.length>0&&a.on("cursorActivity",n)}else a._searchMarkers.push(a.markText({line:t,ch:0},{line:t,ch:a.getLine(t).length},{className:"CodeMirror-search-match",clearOnEnter:!0,clearWhenEmpty:!0,title:"Target line"}));return this},changeGen:function(){return this.data(c).cm.changeGeneration()},isClean:function(t){return this.data(c).cm.isClean(t)},setupStorage:function(t){var e=this.data(c),n=this;return t.setValue=function(t){n.prologEditor("setSource",t,!0)},t.getValue=function(){return e.cm.getValue()},t.changeGen=function(){return e.cm.changeGeneration()},t.isClean=function(t){return e.cm.isClean(t)},t.markClean=function(t){n.prologEditor("markClean",t)},t.cleanGeneration=e.cm.changeGeneration(),t.cleanData=e.cm.getValue(),t.cleanCheckpoint="load",this.storage(t),this},contextAction:function(){var t=this,e=this.data(c),n=e.cm.getCursor(),r=e.cm.getTokenAt(n,!0),a=e.cm.getEnrichedToken(r),s=e.cm.getTokenReferences(a);if(s&&s.length>0){for(var l=i.el.ul(),u=i.el.div({class:"goto-source"},i.el.div("Go to"),l),h=i.el.div({class:"edit-modal"},i.el.div({class:"mask"}),u),d=0;d<s.length;d++){var f=s[d];i(l).append(i.el.li(i.el.a({"data-locindex":d},f.title)))}var p=e.cm.cursorCoords(!0);i(u).css({top:p.bottom,left:p.left}),i("body").append(h),i(h).on("click",function(n){var r=i(n.target).data("locindex");if(i(h).remove(),void 0!==r){var a=s[r];if(a.file)t.closest(".swish").swish("playFile",a);else{var l;"query"==e.role?(l=t.closest(".prolog-query-editor").queryEditor("getProgramEditor"),l[0]||o.alert("No related program editor")):l=t,l&&l[0]&&l.prologEditor("gotoLine",a.line,a).focus()}}}),i(h).show()}return this},variables:function(e,n){function r(t){var e=!0,n=!1;i(o).find(t).each(function(){var t=i(this),r=t.text();t.hasClass("cm-functor")?"projection"==r?n=!0:n&&(e=!1):e&&a.indexOf(r)<0&&a.push(r)})}var o=i.el.span({class:"query cm-s-prolog"}),a=[];return n=n||{},t.runMode(e,"prolog",o),n.projection?r("span.cm-var,span.cm-var-2,span.cm-functor"):(r("span.cm-var"),n.anon&&r("span.cm-var-2")),a},wrapSolution:function(t){function e(t,e){return i.prologEditor("setSource",t+"("+n+")"+e+".").focus(),i}var n=s.trimFullStop(this.prologEditor("getSource","query")),i=this,r=this.prologEditor("variables",n);switch(t){case"Aggregate (count all)":return e("aggregate_all(count, ",", Count)");case"Projection":return function(t){return i.prologEditor("setSource",t+n+".").focus(),i}("projection(["+r.join(",")+"]),\n");case"Order by":return e("order_by(["+function(t){for(var e=[],n=0;n<r.length;n++)e.push("asc("+r[n]+")");return e.join(",")}(r)+"], ",")");case"Distinct":return e("distinct(["+r.join(",")+"], ",")");case"Limit":return e("limit(10, ",")");case"Time":return e("time(",")");case"Debug (trace)":return e("trace, ","");default:alert('Unknown wrapper: "'+t+'"')}}};if(a.tabTypes.program={dataType:"pl",typeName:"program",label:"Program",contentType:"text/x-prolog",order:100,create:function(t,e){i(t).addClass("prolog-editor").prologEditor(i.extend({save:!0},e)).prologEditor("makeCurrent",e)}},e.swish.tab_types)for(var f={save:!0,lineNumbers:!0},p=0;p<e.swish.tab_types.length;p++){var g=e.swish.tab_types[p];if(g.editor){var m=i.extend({typeName:g.typeName},f,g.editor);g.create=function(t){i(t).addClass("prolog-editor").prologEditor(m)},a.tabTypes[g.typeName]=g}}i.fn.prologEditor=function(t){return d[t]?d[t].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof t&&t?void i.error("Method "+t+" does not exist on jQuery."+c):d._init.apply(this,arguments)}}(jQuery),t.prototype.charOffsetToPos=function(t){for(var e=this.firstLine(),n=this.lastLine(),i=0;e<n;e++){var r=this.getLine(e);if(i<=t&&i+r.length>=t)return{line:e,ch:t-i};i+=r.length+1}},t.keyMap.emacs.Enter="newlineAndIndent",e.swish.cm_style&&l(e.swish.cm_style,".cm-s-prolog span.cm-"),e.swish.cm_hover_style&&l(e.swish.cm_hover_style,".CodeMirror-hover-tooltip ")}),define("answer",["jquery","laconic"],function(){!function($){function answerHasOutput(t){return t.variables.length>0||t.residuals}function renderSubstitutions(t,e){e.push(', <span class="pl-comment">% where</span><br/>');for(var n=0;n<t.length;n++)e.push('<span class="where-binding">',"<span class='pl-var'>",t[n].var+"</span> = ",t[n].value,"</span>"),n<t.length-1&&e.push(",<br/>")}function renderAnswer(t){for(var e=[],n=t.variables,i=0;i<n.length;i++){for(var r=n[i].variables,o=0;o<r.length-1;o++)e.push("<span class='pl-ovar'>",r[o],"</span> = ","<span class='pl-var'>",r[o+1],"</span>, ");e.push("<span class='pl-ovar'>",r[r.length-1],"</span> = ",n[i].value),n[i].substitutions&&renderSubstitutions(n[i].substitutions,e),(i<n.length-1||t.residuals)&&e.push(",<br/>")}var a;if(a=t.residuals)for(var i=0;i<a.length;i++)e.push(a[i]),i<a.length-1&&e.push(",<br/>");return e.join("")}function renderTabledAnswer(t,e){for(var n=[],i=0;i<t.projection.length;i++){var r=t.projection[i],o=function(e){for(var n=t.variables,i=0;i<n.length;i++)for(var r=n[i].variables,o=0;o<r.length;o++)if(r[o]==e)return n[i];return null}(r);n.push("<td>"),o?(n.push(o.value),o.substitutions&&renderSubstitutions(o.substitutions,n)):n.push("<span class='pl-var'>",r,"</span>"),n.push("</td>")}var a;if(a=t.residuals){!function(){0==e.find("tr.projection th.residuals").length&&($("<th class='residuals'>Residual goals</th>").insertBefore(e.find("tr.projection th.answer-nth")),$("<td></td>").insertBefore(e.find("tr td.answer-nth")))}(),n.push("<td>");for(var i=0;i<a.length;i++)n.push(a[i]),i<a.length-1&&n.push(",<br/>");n.push("</td>")}return t.nth&&n.push("<td class='answer-nth'>",t.nth,"</td>"),n.join("")}function evalScripts(elem){elem.find("script").each(function(){var type=this.getAttribute("type")||"text/javascript";"text/javascript"==type&&($.ajaxScript=$(this),eval(this.textContent))}),$.ajaxScript&&delete $.ajaxScript}var methods={_init:function(t){return this.each(function(){var e=$(this);if(answerHasOutput(t))if(e.is("table")){var n=$.el.tr();e.append(n),n.innerHTML=renderTabledAnswer(t,e),evalScripts($(n)),$(n).find(".render-multi").renderMulti()}else e[0].innerHTML=renderAnswer(t),evalScripts(e),e.find(".render-multi").renderMulti();else e.append($.el.span({class:"prolog-true"},"true"))})}};$.fn.prologAnswer=function(t){return methods[t]?methods[t].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof t&&t?void $.error("Method "+t+" does not exist on jQuery.prologAnswer"):methods._init.apply(this,arguments)}}(jQuery),function(t){function e(){var e=t("#render-select");return e[0]||(e=t(t.el.form({id:"render-select",style:"display:none"})),e.on("click","a",function(n){var i=t(n.target).closest("a"),r=i.data("nr");return e.data("target").renderMulti(i.data("action"),r),!1}),e.on("click",function(){var n=t("input[name=render]:checked",t(this)).val();e.data("target").renderMulti("select",parseInt(n))}),e.hover(function(){s=!0,i()},function(){r()}),t("body").append(e)),e}function n(){if(!s){var t=e(),n=t.data("target");n&&(n.removeClass("render-selecting"),t.data("target",null)),t.hide(400)}}function i(){a=setTimeout(function(){n()},400)}function r(){s=!1,i()}function o(e){return e.originalEvent.dataTransfer.setData("Text",t(e.target).renderMulti("prologText")),!0}var a=0,s=!1,l={_init:function(e){return this.each(function(){var e=t(this),n={current:0},i=[],r=t.el.div({class:"render-multi-active"}),a=0;e.children().each(function(){var n=t(this).css("display");i.push(n),0==a++?(e.css("display",n),t(this).attr("draggable",!1)):t(this).hide()}),n.display=i,e.append(r),t(r).hover(function(t){e.renderMulti("showSelect",t)},function(t){e.renderMulti("hideSelect",t)}),e.attr("draggable",!0).bind("dragstart",o),e.data("renderMulti",n)})},selectMenu:function(){for(var e=this.data("renderMulti"),n=["<label>View as</label><br>"],i=this.children(),r=0,r=0;r<e.display.length;r++){var o=t(i[r]),a=o.attr("data-render");a||(a=0==r?"Default rendered":"Alt rendered ["+(r+1)+"]"),n.push("<div class='render-item'>",function(t,e){var n,i;return"Prolog term"==e?(n="Copy",i="copy"):(n="Download",i="download"),btn='<a href="#" class="btn btn-style btn-sm" data-nr="'+t+'" data-action="'+i+'" title="'+n+'"><span class="glyphicon glyphicon-'+i+'"></span></a>',btn}(r,a),"<input type='radio' name='render' value='",r,"'"),r==e.current&&n.push(" checked"),n.push("> ",a,"</div>")}return n.push("</form"),n.join("")},showSelect:function(t){var n,i=this,r=e(),o=this.offset();s=!0,a&&(clearTimeout(a),a=0),(n=r.data("target"))&&n.removeClass("render-selecting"),r.data("target",i),r.html(this.renderMulti("selectMenu")),r.css({top:o.top+5+"px",left:o.left+5+"px"}).show(400),this.addClass("render-selecting")},hideSelect:function(t){r()},select:function(e){var i=this.data("renderMulti");if(i.current!=e){var r=this.children(),o=i.display[e];t(r[i.current]).hide(400),t(r[e]).show(400,function(){t(this).css("display",o)}),this.css("display",o),t(r[e]).is("span.render-as-prolog")?this.attr("draggable",!1):this.attr("draggable",!0),i.current=e}n()},copy:function(t){var e=this.children(),n=this.data("renderMulti"),i=n.current;this.renderMulti("select",t),function(t){var e=document.createRange();e.selectNodeContents(t);var n=window.getSelection();n.removeAllRanges(),n.addRange(e)}(e[t]);try{document.execCommand("copy")}catch(t){alert("Sorry, cannot copy text with this browser")}return this.renderMulti("select",i),this},download:function(e){var n,i=this.children(),r=t(i[e]),o="html";if(r.hasClass("export-dom")){var a={};r=r.trigger("export-dom",a),a.element?(n=a.element.outerHTML,o=a.extension||"html",type=a.contentType||"text/html"):alert("Failed to export rendered result")}else if(1==r.find("svg").length){var s=r.find("svg");s.attr("xmlns")||s.attr("xmlns","http://www.w3.org/2000/svg"),n=s[0].outerHTML,o="svg",type="image/svg+xml"}else n=r.html(),type="text/html";(function(){return void 0!=t("<a>")[0].download})()||(type="application/octet-stream"),console.log(type);var l,c,u,h=new Blob([n],{type:type}),d=URL.createObjectURL(h),f="swish-rendered."+o,p=t.el.div({class:"download"},u=t.el.button({type:"button",class:"close"}),l=t.el.a({href:d,target:"_blank",download:f},"Right click me to download as "),t.el.br(),c=t.el.input({value:f}));return this.append(p),t(u).html("&times;").on("click",function(e){t(p).remove()}),t(c).on("change keyup paste",function(e){return t(l).attr("download",t(c).val()),e.preventDefault(),!1}),this},prologText:function(){return this.find("span.render-as-prolog").text()}};t.fn.renderMulti=function(e){return l[e]?l[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.renderMulti"):l._init.apply(this,arguments)}}(jQuery)}),function(t,e,n){!function(t){"function"==typeof define&&define.amd?define("sparkline",["jquery"],t):jQuery&&!jQuery.fn.sparkline&&t(jQuery)}(function(n){"use strict";var i,r,o,a,s,l,c,u,h,d,f,p,g,m,v,y,b,x,w,_,S,C,T,k,A,M,E,L,P,D,N,O={},R=0;i=function(){return{common:{type:"line",lineColor:"#00f",fillColor:"#cdf",defaultPixelsPerValue:3,width:"auto",height:"auto",composite:!1,tagValuesAttribute:"values",tagOptionsPrefix:"spark",enableTagOptions:!1,enableHighlight:!0,highlightLighten:1.4,tooltipSkipNull:!0,tooltipPrefix:"",tooltipSuffix:"",disableHiddenCheck:!1,numberFormatter:!1,numberDigitGroupCount:3,numberDigitGroupSep:",",numberDecimalMark:".",disableTooltips:!1,disableInteraction:!1},line:{spotColor:"#f80",highlightSpotColor:"#5f5",highlightLineColor:"#f22",spotRadius:1.5,minSpotColor:"#f80",maxSpotColor:"#f80",lineWidth:1,normalRangeMin:void 0,normalRangeMax:void 0,normalRangeColor:"#ccc",drawNormalOnTop:!1,chartRangeMin:void 0,chartRangeMax:void 0,chartRangeMinX:void 0,chartRangeMaxX:void 0,tooltipFormat:new o('<span style="color: {{color}}">&#9679;</span> {{prefix}}{{y}}{{suffix}}')},bar:{barColor:"#3366cc",negBarColor:"#f44",stackedBarColor:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],zeroColor:void 0,nullColor:void 0,zeroAxis:!0,barWidth:4,barSpacing:1,chartRangeMax:void 0,chartRangeMin:void 0,chartRangeClip:!1,colorMap:void 0,tooltipFormat:new o('<span style="color: {{color}}">&#9679;</span> {{prefix}}{{value}}{{suffix}}')},tristate:{barWidth:4,barSpacing:1,posBarColor:"#6f6",negBarColor:"#f44",zeroBarColor:"#999",colorMap:{},tooltipFormat:new o('<span style="color: {{color}}">&#9679;</span> {{value:map}}'),tooltipValueLookups:{map:{"-1":"Loss",0:"Draw",1:"Win"}}},discrete:{lineHeight:"auto",thresholdColor:void 0,thresholdValue:0,chartRangeMax:void 0,chartRangeMin:void 0,chartRangeClip:!1,tooltipFormat:new o("{{prefix}}{{value}}{{suffix}}")},bullet:{targetColor:"#f33",targetWidth:3,performanceColor:"#33f",rangeColors:["#d3dafe","#a8b6ff","#7f94ff"],base:void 0,tooltipFormat:new o("{{fieldkey:fields}} - {{value}}"),tooltipValueLookups:{fields:{r:"Range",p:"Performance",t:"Target"}}},pie:{offset:0,sliceColors:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],borderWidth:0,borderColor:"#000",tooltipFormat:new o('<span style="color: {{color}}">&#9679;</span> {{value}} ({{percent.1}}%)')},box:{raw:!1,boxLineColor:"#000",boxFillColor:"#cdf",whiskerColor:"#000",outlierLineColor:"#333",outlierFillColor:"#fff",medianColor:"#f00",showOutliers:!0,outlierIQR:1.5,spotRadius:1.5,target:void 0,targetColor:"#4a2",chartRangeMax:void 0,chartRangeMin:void 0,tooltipFormat:new o("{{field:fields}}: {{value}}"),tooltipFormatFieldlistKey:"field",tooltipValueLookups:{fields:{lq:"Lower Quartile",med:"Median",uq:"Upper Quartile",lo:"Left Outlier",ro:"Right Outlier",lw:"Left Whisker",rw:"Right Whisker"}}}}},A='.jqstooltip { position: absolute;left: 0px;top: 0px;visibility: hidden;background: rgb(0, 0, 0) transparent;background-color: rgba(0,0,0,0.6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";color: white;font: 10px arial, san serif;text-align: left;white-space: nowrap;padding: 5px;border: 1px solid white;z-index: 10000;}.jqsfield { color: white;font: 10px arial, san serif;text-align: left;}',r=function(){var t,e;return t=function(){this.init.apply(this,arguments)},arguments.length>1?(arguments[0]?(t.prototype=n.extend(new arguments[0],arguments[arguments.length-1]),t._super=arguments[0].prototype):t.prototype=arguments[arguments.length-1],arguments.length>2&&(e=Array.prototype.slice.call(arguments,1,-1),e.unshift(t.prototype),n.extend.apply(n,e))):t.prototype=arguments[0],t.prototype.cls=t,t},n.SPFormatClass=o=r({fre:/\{\{([\w.]+?)(:(.+?))?\}\}/g,precre:/(\w+)\.(\d+)/,init:function(t,e){this.format=t,this.fclass=e},render:function(t,e,n){var i,r,o,a,s,l=this,c=t;return this.format.replace(this.fre,function(){var t;return r=arguments[1],o=arguments[3],i=l.precre.exec(r),i?(s=i[2],r=i[1]):s=!1,void 0===(a=c[r])?"":o&&e&&e[o]?(t=e[o],t.get?e[o].get(a)||a:e[o][a]||a):(h(a)&&(a=n.get("numberFormatter")?n.get("numberFormatter")(a):g(a,s,n.get("numberDigitGroupCount"),n.get("numberDigitGroupSep"),n.get("numberDecimalMark"))),a)})}}),n.spformat=function(t,e){return new o(t,e)},a=function(t,e,n){return t<e?e:t>n?n:t},s=function(t,n){var i;return 2===n?(i=e.floor(t.length/2),t.length%2?t[i]:(t[i-1]+t[i])/2):t.length%2?(i=(t.length*n+n)/4,i%1?(t[e.floor(i)]+t[e.floor(i)-1])/2:t[i-1]):(i=(t.length*n+2)/4,i%1?(t[e.floor(i)]+t[e.floor(i)-1])/2:t[i-1])},l=function(t){var e;switch(t){case"undefined":t=void 0;break;case"null":t=null;break;case"true":t=!0;break;case"false":t=!1;break;default:e=parseFloat(t),t==e&&(t=e)}return t},c=function(t){var e,n=[];for(e=t.length;e--;)n[e]=l(t[e]);return n},u=function(t,e){var n,i,r=[];for(n=0,i=t.length;n<i;n++)t[n]!==e&&r.push(t[n]);return r},h=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},g=function(t,e,i,r,o){var a,s;for(t=(!1===e?parseFloat(t).toString():t.toFixed(e)).split(""),a=(a=n.inArray(".",t))<0?t.length:a,
+a<t.length&&(t[a]=o),s=a-i;s>0;s-=i)t.splice(s,0,r);return t.join("")},d=function(t,e,n){var i;for(i=e.length;i--;)if((!n||null!==e[i])&&e[i]!==t)return!1;return!0},p=function(t){return n.isArray(t)?t:[t]},f=function(e){var n;t.createStyleSheet?t.createStyleSheet().cssText=e:(n=t.createElement("style"),n.type="text/css",t.getElementsByTagName("head")[0].appendChild(n),n["string"==typeof t.body.style.WebkitAppearance?"innerText":"innerHTML"]=e)},n.fn.simpledraw=function(e,i,r,o){var a,s;if(r&&(a=this.data("_jqs_vcanvas")))return a;if(!1===n.fn.sparkline.canvas)return!1;if(void 0===n.fn.sparkline.canvas){var l=t.createElement("canvas");if(l.getContext&&l.getContext("2d"))n.fn.sparkline.canvas=function(t,e,n,i){return new P(t,e,n,i)};else{if(!t.namespaces||t.namespaces.v)return n.fn.sparkline.canvas=!1,!1;t.namespaces.add("v","urn:schemas-microsoft-com:vml","#default#VML"),n.fn.sparkline.canvas=function(t,e,n,i){return new D(t,e,n)}}}return void 0===e&&(e=n(this).innerWidth()),void 0===i&&(i=n(this).innerHeight()),a=n.fn.sparkline.canvas(e,i,this,o),s=n(this).data("_jqs_mhandler"),s&&s.registerCanvas(a),a},n.fn.cleardraw=function(){var t=this.data("_jqs_vcanvas");t&&t.reset()},n.RangeMapClass=m=r({init:function(t){var e,n,i=[];for(e in t)t.hasOwnProperty(e)&&"string"==typeof e&&e.indexOf(":")>-1&&(n=e.split(":"),n[0]=0===n[0].length?-1/0:parseFloat(n[0]),n[1]=0===n[1].length?1/0:parseFloat(n[1]),n[2]=t[e],i.push(n));this.map=t,this.rangelist=i||!1},get:function(t){var e,n,i,r=this.rangelist;if(void 0!==(i=this.map[t]))return i;if(r)for(e=r.length;e--;)if(n=r[e],n[0]<=t&&n[1]>=t)return n[2]}}),n.range_map=function(t){return new m(t)},v=r({init:function(t,e){var i=n(t);this.$el=i,this.options=e,this.currentPageX=0,this.currentPageY=0,this.el=t,this.splist=[],this.tooltip=null,this.over=!1,this.displayTooltips=!e.get("disableTooltips"),this.highlightEnabled=!e.get("disableHighlight")},registerSparkline:function(t){this.splist.push(t),this.over&&this.updateDisplay()},registerCanvas:function(t){var e=n(t.canvas);this.canvas=t,this.$canvas=e,e.mouseenter(n.proxy(this.mouseenter,this)),e.mouseleave(n.proxy(this.mouseleave,this)),e.click(n.proxy(this.mouseclick,this))},reset:function(t){this.splist=[],this.tooltip&&t&&(this.tooltip.remove(),this.tooltip=void 0)},mouseclick:function(t){var e=n.Event("sparklineClick");e.originalEvent=t,e.sparklines=this.splist,this.$el.trigger(e)},mouseenter:function(e){n(t.body).unbind("mousemove.jqs"),n(t.body).bind("mousemove.jqs",n.proxy(this.mousemove,this)),this.over=!0,this.currentPageX=e.pageX,this.currentPageY=e.pageY,this.currentEl=e.target,!this.tooltip&&this.displayTooltips&&(this.tooltip=new y(this.options),this.tooltip.updatePosition(e.pageX,e.pageY)),this.updateDisplay()},mouseleave:function(){n(t.body).unbind("mousemove.jqs");var e,i,r=this.splist,o=r.length,a=!1;for(this.over=!1,this.currentEl=null,this.tooltip&&(this.tooltip.remove(),this.tooltip=null),i=0;i<o;i++)e=r[i],e.clearRegionHighlight()&&(a=!0);a&&this.canvas.render()},mousemove:function(t){this.currentPageX=t.pageX,this.currentPageY=t.pageY,this.currentEl=t.target,this.tooltip&&this.tooltip.updatePosition(t.pageX,t.pageY),this.updateDisplay()},updateDisplay:function(){var t,e,i,r,o,a=this.splist,s=a.length,l=!1,c=this.$canvas.offset(),u=this.currentPageX-c.left,h=this.currentPageY-c.top;if(this.over){for(i=0;i<s;i++)e=a[i],(r=e.setRegionHighlight(this.currentEl,u,h))&&(l=!0);if(l){if(o=n.Event("sparklineRegionChange"),o.sparklines=this.splist,this.$el.trigger(o),this.tooltip){for(t="",i=0;i<s;i++)e=a[i],t+=e.getCurrentRegionTooltip();this.tooltip.setContent(t)}this.disableHighlight||this.canvas.render()}null===r&&this.mouseleave()}}}),y=r({sizeStyle:"position: static !important;display: block !important;visibility: hidden !important;float: left !important;",init:function(e){var i,r=e.get("tooltipClassname","jqstooltip"),o=this.sizeStyle;this.container=e.get("tooltipContainer")||t.body,this.tooltipOffsetX=e.get("tooltipOffsetX",10),this.tooltipOffsetY=e.get("tooltipOffsetY",12),n("#jqssizetip").remove(),n("#jqstooltip").remove(),this.sizetip=n("<div/>",{id:"jqssizetip",style:o,class:r}),this.tooltip=n("<div/>",{id:"jqstooltip",class:r}).appendTo(this.container),i=this.tooltip.offset(),this.offsetLeft=i.left,this.offsetTop=i.top,this.hidden=!0,n(window).unbind("resize.jqs scroll.jqs"),n(window).bind("resize.jqs scroll.jqs",n.proxy(this.updateWindowDims,this)),this.updateWindowDims()},updateWindowDims:function(){this.scrollTop=n(window).scrollTop(),this.scrollLeft=n(window).scrollLeft(),this.scrollRight=this.scrollLeft+n(window).width(),this.updatePosition()},getSize:function(t){this.sizetip.html(t).appendTo(this.container),this.width=this.sizetip.width()+1,this.height=this.sizetip.height(),this.sizetip.remove()},setContent:function(t){if(!t)return this.tooltip.css("visibility","hidden"),void(this.hidden=!0);this.getSize(t),this.tooltip.html(t).css({width:this.width,height:this.height,visibility:"visible"}),this.hidden&&(this.hidden=!1,this.updatePosition())},updatePosition:function(t,e){if(void 0===t){if(void 0===this.mousex)return;t=this.mousex-this.offsetLeft,e=this.mousey-this.offsetTop}else this.mousex=t-=this.offsetLeft,this.mousey=e-=this.offsetTop;this.height&&this.width&&!this.hidden&&(e-=this.height+this.tooltipOffsetY,t+=this.tooltipOffsetX,e<this.scrollTop&&(e=this.scrollTop),t<this.scrollLeft?t=this.scrollLeft:t+this.width>this.scrollRight&&(t=this.scrollRight-this.width),this.tooltip.css({left:t,top:e}))},remove:function(){this.tooltip.remove(),this.sizetip.remove(),this.sizetip=this.tooltip=void 0,n(window).unbind("resize.jqs scroll.jqs")}}),M=function(){f(A)},n(M),N=[],n.fn.sparkline=function(e,i){return this.each(function(){var r,o,a=new n.fn.sparkline.options(this,i),s=n(this);if(r=function(){var i,r,o,l,c,u,h;if("html"===e||void 0===e?(h=this.getAttribute(a.get("tagValuesAttribute")),void 0!==h&&null!==h||(h=s.html()),i=h.replace(/(^\s*<!--)|(-->\s*$)|\s+/g,"").split(",")):i=e,r="auto"===a.get("width")?i.length*a.get("defaultPixelsPerValue"):a.get("width"),"auto"===a.get("height")?a.get("composite")&&n.data(this,"_jqs_vcanvas")||(l=t.createElement("span"),l.innerHTML="a",s.html(l),o=n(l).innerHeight()||n(l).height(),n(l).remove(),l=null):o=a.get("height"),a.get("disableInteraction")?c=!1:(c=n.data(this,"_jqs_mhandler"),c?a.get("composite")||c.reset():(c=new v(this,a),n.data(this,"_jqs_mhandler",c))),a.get("composite")&&!n.data(this,"_jqs_vcanvas"))return void(n.data(this,"_jqs_errnotify")||(alert("Attempted to attach a composite sparkline to an element with no existing sparkline"),n.data(this,"_jqs_errnotify",!0)));u=new(n.fn.sparkline[a.get("type")])(this,i,a,r,o),u.render(),c&&c.registerSparkline(u)},n(this).html()&&!a.get("disableHiddenCheck")&&n(this).is(":hidden")||!n(this).parents("body").length){if(!a.get("composite")&&n.data(this,"_jqs_pending"))for(o=N.length;o;o--)N[o-1][0]==this&&N.splice(o-1,1);N.push([this,r]),n.data(this,"_jqs_pending",!0)}else r.call(this)})},n.fn.sparkline.defaults=i(),n.sparkline_display_visible=function(){var t,e,i,r=[];for(e=0,i=N.length;e<i;e++)t=N[e][0],n(t).is(":visible")&&!n(t).parents().is(":hidden")?(N[e][1].call(t),n.data(N[e][0],"_jqs_pending",!1),r.push(e)):n(t).closest("html").length||n.data(t,"_jqs_pending")||(n.data(N[e][0],"_jqs_pending",!1),r.push(e));for(e=r.length;e;e--)N.splice(r[e-1],1)},n.fn.sparkline.options=r({init:function(t,e){var i,r,o,a;this.userOptions=e=e||{},this.tag=t,this.tagValCache={},r=n.fn.sparkline.defaults,o=r.common,this.tagOptionsPrefix=e.enableTagOptions&&(e.tagOptionsPrefix||o.tagOptionsPrefix),a=this.getTagSetting("type"),i=a===O?r[e.type||o.type]:r[a],this.mergedOptions=n.extend({},o,i,e)},getTagSetting:function(t){var e,n,i,r,o=this.tagOptionsPrefix;if(!1===o||void 0===o)return O;if(this.tagValCache.hasOwnProperty(t))e=this.tagValCache.key;else{if(void 0===(e=this.tag.getAttribute(o+t))||null===e)e=O;else if("["===e.substr(0,1))for(e=e.substr(1,e.length-2).split(","),n=e.length;n--;)e[n]=l(e[n].replace(/(^\s*)|(\s*$)/g,""));else if("{"===e.substr(0,1))for(i=e.substr(1,e.length-2).split(","),e={},n=i.length;n--;)r=i[n].split(":",2),e[r[0].replace(/(^\s*)|(\s*$)/g,"")]=l(r[1].replace(/(^\s*)|(\s*$)/g,""));else e=l(e);this.tagValCache.key=e}return e},get:function(t,e){var n,i=this.getTagSetting(t);return i!==O?i:void 0===(n=this.mergedOptions[t])?e:n}}),n.fn.sparkline._base=r({disabled:!1,init:function(t,e,i,r,o){this.el=t,this.$el=n(t),this.values=e,this.options=i,this.width=r,this.height=o,this.currentRegion=void 0},initTarget:function(){var t=!this.options.get("disableInteraction");(this.target=this.$el.simpledraw(this.width,this.height,this.options.get("composite"),t))?(this.canvasWidth=this.target.pixelWidth,this.canvasHeight=this.target.pixelHeight):this.disabled=!0},render:function(){return!this.disabled||(this.el.innerHTML="",!1)},getRegion:function(t,e){},setRegionHighlight:function(t,e,n){var i,r=this.currentRegion,o=!this.options.get("disableHighlight");return e>this.canvasWidth||n>this.canvasHeight||e<0||n<0?null:(i=this.getRegion(t,e,n),r!==i&&(void 0!==r&&o&&this.removeHighlight(),this.currentRegion=i,void 0!==i&&o&&this.renderHighlight(),!0))},clearRegionHighlight:function(){return void 0!==this.currentRegion&&(this.removeHighlight(),this.currentRegion=void 0,!0)},renderHighlight:function(){this.changeHighlight(!0)},removeHighlight:function(){this.changeHighlight(!1)},changeHighlight:function(t){},getCurrentRegionTooltip:function(){var t,e,i,r,a,s,l,c,u,h,d,f,p,g,m=this.options,v="",y=[];if(void 0===this.currentRegion)return"";if(t=this.getCurrentRegionFields(),d=m.get("tooltipFormatter"))return d(this,m,t);if(m.get("tooltipChartTitle")&&(v+='<div class="jqs jqstitle">'+m.get("tooltipChartTitle")+"</div>\n"),!(e=this.options.get("tooltipFormat")))return"";if(n.isArray(e)||(e=[e]),n.isArray(t)||(t=[t]),l=this.options.get("tooltipFormatFieldlist"),c=this.options.get("tooltipFormatFieldlistKey"),l&&c){for(u=[],s=t.length;s--;)h=t[s][c],-1!=(g=n.inArray(h,l))&&(u[g]=t[s]);t=u}for(i=e.length,p=t.length,s=0;s<i;s++)for(f=e[s],"string"==typeof f&&(f=new o(f)),r=f.fclass||"jqsfield",g=0;g<p;g++)t[g].isNull&&m.get("tooltipSkipNull")||(n.extend(t[g],{prefix:m.get("tooltipPrefix"),suffix:m.get("tooltipSuffix")}),a=f.render(t[g],m.get("tooltipValueLookups"),m),y.push('<div class="'+r+'">'+a+"</div>"));return y.length?v+y.join("\n"):""},getCurrentRegionFields:function(){},calcHighlightColor:function(t,n){var i,r,o,s,l=n.get("highlightColor"),c=n.get("highlightLighten");if(l)return l;if(c&&(i=/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(t)||/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(t))){for(o=[],r=4===t.length?16:1,s=0;s<3;s++)o[s]=a(e.round(parseInt(i[s+1],16)*r*c),0,255);return"rgb("+o.join(",")+")"}return t}}),b={changeHighlight:function(t){var e,i=this.currentRegion,r=this.target,o=this.regionShapes[i];o&&(e=this.renderRegion(i,t),n.isArray(e)||n.isArray(o)?(r.replaceWithShapes(o,e),this.regionShapes[i]=n.map(e,function(t){return t.id})):(r.replaceWithShape(o,e),this.regionShapes[i]=e.id))},render:function(){var t,e,i,r,o=this.values,a=this.target,s=this.regionShapes;if(this.cls._super.render.call(this)){for(i=o.length;i--;)if(t=this.renderRegion(i))if(n.isArray(t)){for(e=[],r=t.length;r--;)t[r].append(),e.push(t[r].id);s[i]=e}else t.append(),s[i]=t.id;else s[i]=null;a.render()}}},n.fn.sparkline.line=x=r(n.fn.sparkline._base,{type:"line",init:function(t,e,n,i,r){x._super.init.call(this,t,e,n,i,r),this.vertices=[],this.regionMap=[],this.xvalues=[],this.yvalues=[],this.yminmax=[],this.hightlightSpotId=null,this.lastShapeId=null,this.initTarget()},getRegion:function(t,e,n){var i,r=this.regionMap;for(i=r.length;i--;)if(null!==r[i]&&e>=r[i][0]&&e<=r[i][1])return r[i][2]},getCurrentRegionFields:function(){var t=this.currentRegion;return{isNull:null===this.yvalues[t],x:this.xvalues[t],y:this.yvalues[t],color:this.options.get("lineColor"),fillColor:this.options.get("fillColor"),offset:t}},renderHighlight:function(){var t,e,n=this.currentRegion,i=this.target,r=this.vertices[n],o=this.options,a=o.get("spotRadius"),s=o.get("highlightSpotColor"),l=o.get("highlightLineColor");r&&(a&&s&&(t=i.drawCircle(r[0],r[1],a,void 0,s),this.highlightSpotId=t.id,i.insertAfterShape(this.lastShapeId,t)),l&&(e=i.drawLine(r[0],this.canvasTop,r[0],this.canvasTop+this.canvasHeight,l),this.highlightLineId=e.id,i.insertAfterShape(this.lastShapeId,e)))},removeHighlight:function(){var t=this.target;this.highlightSpotId&&(t.removeShapeId(this.highlightSpotId),this.highlightSpotId=null),this.highlightLineId&&(t.removeShapeId(this.highlightLineId),this.highlightLineId=null)},scanValues:function(){var t,n,i,r,o,a=this.values,s=a.length,l=this.xvalues,c=this.yvalues,u=this.yminmax;for(t=0;t<s;t++)n=a[t],i="string"==typeof a[t],r="object"==typeof a[t]&&a[t]instanceof Array,o=i&&a[t].split(":"),i&&2===o.length?(l.push(Number(o[0])),c.push(Number(o[1])),u.push(Number(o[1]))):r?(l.push(n[0]),c.push(n[1]),u.push(n[1])):(l.push(t),null===a[t]||"null"===a[t]?c.push(null):(c.push(Number(n)),u.push(Number(n))));this.options.get("xvalues")&&(l=this.options.get("xvalues")),this.maxy=this.maxyorg=e.max.apply(e,u),this.miny=this.minyorg=e.min.apply(e,u),this.maxx=e.max.apply(e,l),this.minx=e.min.apply(e,l),this.xvalues=l,this.yvalues=c,this.yminmax=u},processRangeOptions:function(){var t=this.options,e=t.get("normalRangeMin"),n=t.get("normalRangeMax");void 0!==e&&(e<this.miny&&(this.miny=e),n>this.maxy&&(this.maxy=n)),void 0!==t.get("chartRangeMin")&&(t.get("chartRangeClip")||t.get("chartRangeMin")<this.miny)&&(this.miny=t.get("chartRangeMin")),void 0!==t.get("chartRangeMax")&&(t.get("chartRangeClip")||t.get("chartRangeMax")>this.maxy)&&(this.maxy=t.get("chartRangeMax")),void 0!==t.get("chartRangeMinX")&&(t.get("chartRangeClipX")||t.get("chartRangeMinX")<this.minx)&&(this.minx=t.get("chartRangeMinX")),void 0!==t.get("chartRangeMaxX")&&(t.get("chartRangeClipX")||t.get("chartRangeMaxX")>this.maxx)&&(this.maxx=t.get("chartRangeMaxX"))},drawNormalRange:function(t,n,i,r,o){var a=this.options.get("normalRangeMin"),s=this.options.get("normalRangeMax"),l=n+e.round(i-i*((s-this.miny)/o)),c=e.round(i*(s-a)/o);this.target.drawRect(t,l,r,c,void 0,this.options.get("normalRangeColor")).append()},render:function(){var t,i,r,o,a,s,l,c,u,h,d,f,p,g,v,y,b,w,_,S,C,T,k,A,M,E=this.options,L=this.target,P=this.canvasWidth,D=this.canvasHeight,N=this.vertices,O=E.get("spotRadius"),R=this.regionMap;if(x._super.render.call(this)&&(this.scanValues(),this.processRangeOptions(),k=this.xvalues,A=this.yvalues,this.yminmax.length&&!(this.yvalues.length<2))){for(o=a=0,t=this.maxx-this.minx==0?1:this.maxx-this.minx,i=this.maxy-this.miny==0?1:this.maxy-this.miny,r=this.yvalues.length-1,O&&(P<4*O||D<4*O)&&(O=0),O&&(C=E.get("highlightSpotColor")&&!E.get("disableInteraction"),(C||E.get("minSpotColor")||E.get("spotColor")&&A[r]===this.miny)&&(D-=e.ceil(O)),(C||E.get("maxSpotColor")||E.get("spotColor")&&A[r]===this.maxy)&&(D-=e.ceil(O),o+=e.ceil(O)),(C||(E.get("minSpotColor")||E.get("maxSpotColor"))&&(A[0]===this.miny||A[0]===this.maxy))&&(a+=e.ceil(O),P-=e.ceil(O)),(C||E.get("spotColor")||E.get("minSpotColor")||E.get("maxSpotColor")&&(A[r]===this.miny||A[r]===this.maxy))&&(P-=e.ceil(O))),D--,void 0===E.get("normalRangeMin")||E.get("drawNormalOnTop")||this.drawNormalRange(a,o,D,P,i),l=[],c=[l],g=v=null,y=A.length,M=0;M<y;M++)u=k[M],d=k[M+1],h=A[M],f=a+e.round((u-this.minx)*(P/t)),p=M<y-1?a+e.round((d-this.minx)*(P/t)):P,v=f+(p-f)/2,R[M]=[g||0,v,M],g=v,null===h?M&&(null!==A[M-1]&&(l=[],c.push(l)),N.push(null)):(h<this.miny&&(h=this.miny),h>this.maxy&&(h=this.maxy),l.length||l.push([f,o+D]),s=[f,o+e.round(D-D*((h-this.miny)/i))],l.push(s),N.push(s));for(b=[],w=[],_=c.length,M=0;M<_;M++)l=c[M],l.length&&(E.get("fillColor")&&(l.push([l[l.length-1][0],o+D]),w.push(l.slice(0)),l.pop()),l.length>2&&(l[0]=[l[0][0],l[1][1]]),b.push(l));for(_=w.length,M=0;M<_;M++)L.drawShape(w[M],E.get("fillColor"),E.get("fillColor")).append();for(void 0!==E.get("normalRangeMin")&&E.get("drawNormalOnTop")&&this.drawNormalRange(a,o,D,P,i),_=b.length,M=0;M<_;M++)L.drawShape(b[M],E.get("lineColor"),void 0,E.get("lineWidth")).append();if(O&&E.get("valueSpots"))for(S=E.get("valueSpots"),void 0===S.get&&(S=new m(S)),M=0;M<y;M++)(T=S.get(A[M]))&&L.drawCircle(a+e.round((k[M]-this.minx)*(P/t)),o+e.round(D-D*((A[M]-this.miny)/i)),O,void 0,T).append();O&&E.get("spotColor")&&null!==A[r]&&L.drawCircle(a+e.round((k[k.length-1]-this.minx)*(P/t)),o+e.round(D-D*((A[r]-this.miny)/i)),O,void 0,E.get("spotColor")).append(),this.maxy!==this.minyorg&&(O&&E.get("minSpotColor")&&(u=k[n.inArray(this.minyorg,A)],L.drawCircle(a+e.round((u-this.minx)*(P/t)),o+e.round(D-D*((this.minyorg-this.miny)/i)),O,void 0,E.get("minSpotColor")).append()),O&&E.get("maxSpotColor")&&(u=k[n.inArray(this.maxyorg,A)],L.drawCircle(a+e.round((u-this.minx)*(P/t)),o+e.round(D-D*((this.maxyorg-this.miny)/i)),O,void 0,E.get("maxSpotColor")).append())),this.lastShapeId=L.getLastShapeId(),this.canvasTop=o,L.render()}}}),n.fn.sparkline.bar=w=r(n.fn.sparkline._base,b,{type:"bar",init:function(t,i,r,o,s){var h,d,f,p,g,v,y,b,x,_,S,C,T,k,A,M,E,L,P,D,N,O,R=parseInt(r.get("barWidth"),10),I=parseInt(r.get("barSpacing"),10),F=r.get("chartRangeMin"),j=r.get("chartRangeMax"),H=r.get("chartRangeClip"),z=1/0,V=-1/0;for(w._super.init.call(this,t,i,r,o,s),v=0,y=i.length;v<y;v++)D=i[v],((h="string"==typeof D&&D.indexOf(":")>-1)||n.isArray(D))&&(A=!0,h&&(D=i[v]=c(D.split(":"))),D=u(D,null),d=e.min.apply(e,D),f=e.max.apply(e,D),d<z&&(z=d),f>V&&(V=f));this.stacked=A,this.regionShapes={},this.barWidth=R,this.barSpacing=I,this.totalBarWidth=R+I,this.width=o=i.length*R+(i.length-1)*I,this.initTarget(),H&&(T=void 0===F?-1/0:F,k=void 0===j?1/0:j),g=[],p=A?[]:g;var q=[],B=[];for(v=0,y=i.length;v<y;v++)if(A)for(M=i[v],i[v]=P=[],q[v]=0,p[v]=B[v]=0,E=0,L=M.length;E<L;E++)null!==(D=P[E]=H?a(M[E],T,k):M[E])&&(D>0&&(q[v]+=D),z<0&&V>0?D<0?B[v]+=e.abs(D):p[v]+=D:p[v]+=e.abs(D-(D<0?V:z)),g.push(D));else D=H?a(i[v],T,k):i[v],null!==(D=i[v]=l(D))&&g.push(D);this.max=C=e.max.apply(e,g),this.min=S=e.min.apply(e,g),this.stackMax=V=A?e.max.apply(e,q):C,this.stackMin=z=A?e.min.apply(e,g):S,void 0!==r.get("chartRangeMin")&&(r.get("chartRangeClip")||r.get("chartRangeMin")<S)&&(S=r.get("chartRangeMin")),void 0!==r.get("chartRangeMax")&&(r.get("chartRangeClip")||r.get("chartRangeMax")>C)&&(C=r.get("chartRangeMax")),this.zeroAxis=x=r.get("zeroAxis",!0),_=S<=0&&C>=0&&x?0:0==x?S:S>0?S:C,this.xaxisOffset=_,b=A?e.max.apply(e,p)+e.max.apply(e,B):C-S,this.canvasHeightEf=x&&S<0?this.canvasHeight-2:this.canvasHeight-1,S<_?(O=A&&C>=0?V:C,(N=(O-_)/b*this.canvasHeight)!==e.ceil(N)&&(this.canvasHeightEf-=2,N=e.ceil(N))):N=this.canvasHeight,this.yoffset=N,n.isArray(r.get("colorMap"))?(this.colorMapByIndex=r.get("colorMap"),this.colorMapByValue=null):(this.colorMapByIndex=null,this.colorMapByValue=r.get("colorMap"),this.colorMapByValue&&void 0===this.colorMapByValue.get&&(this.colorMapByValue=new m(this.colorMapByValue))),this.range=b},getRegion:function(t,n,i){var r=e.floor(n/this.totalBarWidth);return r<0||r>=this.values.length?void 0:r},getCurrentRegionFields:function(){var t,e,n=this.currentRegion,i=p(this.values[n]),r=[];for(e=i.length;e--;)t=i[e],r.push({isNull:null===t,value:t,color:this.calcColor(e,t,n),offset:n});return r},calcColor:function(t,e,i){var r,o,a=this.colorMapByIndex,s=this.colorMapByValue,l=this.options;return r=this.stacked?l.get("stackedBarColor"):e<0?l.get("negBarColor"):l.get("barColor"),0===e&&void 0!==l.get("zeroColor")&&(r=l.get("zeroColor")),s&&(o=s.get(e))?r=o:a&&a.length>i&&(r=a[i]),n.isArray(r)?r[t%r.length]:r},renderRegion:function(t,i){var r,o,a,s,l,c,u,h,f,p,g=this.values[t],m=this.options,v=this.xaxisOffset,y=[],b=this.range,x=this.stacked,w=this.target,_=t*this.totalBarWidth,S=this.canvasHeightEf,C=this.yoffset;if(g=n.isArray(g)?g:[g],u=g.length,h=g[0],s=d(null,g),p=d(v,g,!0),s)return m.get("nullColor")?(a=i?m.get("nullColor"):this.calcHighlightColor(m.get("nullColor"),m),r=C>0?C-1:C,w.drawRect(_,r,this.barWidth-1,0,a,a)):void 0;for(l=C,c=0;c<u;c++){if(h=g[c],x&&h===v){if(!p||f)continue;f=!0}o=b>0?e.floor(S*(e.abs(h-v)/b))+1:1,h<v||h===v&&0===C?(r=l,l+=o):(r=C-o,C-=o),a=this.calcColor(c,h,t),i&&(a=this.calcHighlightColor(a,m)),y.push(w.drawRect(_,r,this.barWidth-1,o-1,a,a))}return 1===y.length?y[0]:y}}),n.fn.sparkline.tristate=_=r(n.fn.sparkline._base,b,{type:"tristate",init:function(t,e,i,r,o){var a=parseInt(i.get("barWidth"),10),s=parseInt(i.get("barSpacing"),10);_._super.init.call(this,t,e,i,r,o),this.regionShapes={},this.barWidth=a,this.barSpacing=s,this.totalBarWidth=a+s,this.values=n.map(e,Number),this.width=r=e.length*a+(e.length-1)*s,n.isArray(i.get("colorMap"))?(this.colorMapByIndex=i.get("colorMap"),this.colorMapByValue=null):(this.colorMapByIndex=null,this.colorMapByValue=i.get("colorMap"),this.colorMapByValue&&void 0===this.colorMapByValue.get&&(this.colorMapByValue=new m(this.colorMapByValue))),this.initTarget()},getRegion:function(t,n,i){return e.floor(n/this.totalBarWidth)},getCurrentRegionFields:function(){var t=this.currentRegion;return{isNull:void 0===this.values[t],value:this.values[t],color:this.calcColor(this.values[t],t),offset:t}},calcColor:function(t,e){var n,i=this.values,r=this.options,o=this.colorMapByIndex,a=this.colorMapByValue;return a&&(n=a.get(t))?n:o&&o.length>e?o[e]:i[e]<0?r.get("negBarColor"):i[e]>0?r.get("posBarColor"):r.get("zeroBarColor")},renderRegion:function(t,n){var i,r,o,a,s,l,c=this.values,u=this.options,h=this.target;if(i=h.pixelHeight,o=e.round(i/2),a=t*this.totalBarWidth,c[t]<0?(s=o,r=o-1):c[t]>0?(s=0,r=o-1):(s=o-1,r=2),null!==(l=this.calcColor(c[t],t)))return n&&(l=this.calcHighlightColor(l,u)),h.drawRect(a,s,this.barWidth-1,r-1,l,l)}}),n.fn.sparkline.discrete=S=r(n.fn.sparkline._base,b,{type:"discrete",init:function(t,i,r,o,a){S._super.init.call(this,t,i,r,o,a),this.regionShapes={},this.values=i=n.map(i,Number),this.min=e.min.apply(e,i),this.max=e.max.apply(e,i),this.range=this.max-this.min,this.width=o="auto"===r.get("width")?2*i.length:this.width,this.interval=e.floor(o/i.length),this.itemWidth=o/i.length,void 0!==r.get("chartRangeMin")&&(r.get("chartRangeClip")||r.get("chartRangeMin")<this.min)&&(this.min=r.get("chartRangeMin")),void 0!==r.get("chartRangeMax")&&(r.get("chartRangeClip")||r.get("chartRangeMax")>this.max)&&(this.max=r.get("chartRangeMax")),this.initTarget(),this.target&&(this.lineHeight="auto"===r.get("lineHeight")?e.round(.3*this.canvasHeight):r.get("lineHeight"))},getRegion:function(t,n,i){return e.floor(n/this.itemWidth)},getCurrentRegionFields:function(){var t=this.currentRegion;return{isNull:void 0===this.values[t],value:this.values[t],offset:t}},renderRegion:function(t,n){var i,r,o,s,l=this.values,c=this.options,u=this.min,h=this.max,d=this.range,f=this.interval,p=this.target,g=this.canvasHeight,m=this.lineHeight,v=g-m;return r=a(l[t],u,h),s=t*f,i=e.round(v-v*((r-u)/d)),o=c.get("thresholdColor")&&r<c.get("thresholdValue")?c.get("thresholdColor"):c.get("lineColor"),n&&(o=this.calcHighlightColor(o,c)),p.drawLine(s,i,s,i+m,o)}}),n.fn.sparkline.bullet=C=r(n.fn.sparkline._base,{type:"bullet",init:function(t,n,i,r,o){var a,s,l;C._super.init.call(this,t,n,i,r,o),this.values=n=c(n),l=n.slice(),l[0]=null===l[0]?l[2]:l[0],l[1]=null===n[1]?l[2]:l[1],a=e.min.apply(e,n),s=e.max.apply(e,n),a=void 0===i.get("base")?a<0?a:0:i.get("base"),this.min=a,this.max=s,this.range=s-a,this.shapes={},this.valueShapes={},this.regiondata={},this.width=r="auto"===i.get("width")?"4.0em":r,this.target=this.$el.simpledraw(r,o,i.get("composite")),n.length||(this.disabled=!0),this.initTarget()},getRegion:function(t,e,n){var i=this.target.getShapeAt(t,e,n);return void 0!==i&&void 0!==this.shapes[i]?this.shapes[i]:void 0},getCurrentRegionFields:function(){var t=this.currentRegion;return{fieldkey:t.substr(0,1),value:this.values[t.substr(1)],region:t}},changeHighlight:function(t){var e,n=this.currentRegion,i=this.valueShapes[n];switch(delete this.shapes[i],n.substr(0,1)){case"r":e=this.renderRange(n.substr(1),t);break;case"p":e=this.renderPerformance(t);break;case"t":e=this.renderTarget(t)}this.valueShapes[n]=e.id,this.shapes[e.id]=n,this.target.replaceWithShape(i,e)},renderRange:function(t,n){var i=this.values[t],r=e.round(this.canvasWidth*((i-this.min)/this.range)),o=this.options.get("rangeColors")[t-2];return n&&(o=this.calcHighlightColor(o,this.options)),this.target.drawRect(0,0,r-1,this.canvasHeight-1,o,o)},renderPerformance:function(t){var n=this.values[1],i=e.round(this.canvasWidth*((n-this.min)/this.range)),r=this.options.get("performanceColor");return t&&(r=this.calcHighlightColor(r,this.options)),this.target.drawRect(0,e.round(.3*this.canvasHeight),i-1,e.round(.4*this.canvasHeight)-1,r,r)},renderTarget:function(t){var n=this.values[0],i=e.round(this.canvasWidth*((n-this.min)/this.range)-this.options.get("targetWidth")/2),r=e.round(.1*this.canvasHeight),o=this.canvasHeight-2*r,a=this.options.get("targetColor");return t&&(a=this.calcHighlightColor(a,this.options)),this.target.drawRect(i,r,this.options.get("targetWidth")-1,o-1,a,a)},render:function(){var t,e,n=this.values.length,i=this.target;if(C._super.render.call(this)){for(t=2;t<n;t++)e=this.renderRange(t).append(),this.shapes[e.id]="r"+t,this.valueShapes["r"+t]=e.id;null!==this.values[1]&&(e=this.renderPerformance().append(),this.shapes[e.id]="p1",this.valueShapes.p1=e.id),null!==this.values[0]&&(e=this.renderTarget().append(),this.shapes[e.id]="t0",this.valueShapes.t0=e.id),i.render()}}}),n.fn.sparkline.pie=T=r(n.fn.sparkline._base,{type:"pie",init:function(t,i,r,o,a){var s,l=0;if(T._super.init.call(this,t,i,r,o,a),this.shapes={},this.valueShapes={},this.values=i=n.map(i,Number),"auto"===r.get("width")&&(this.width=this.height),i.length>0)for(s=i.length;s--;)l+=i[s];this.total=l,this.initTarget(),this.radius=e.floor(e.min(this.canvasWidth,this.canvasHeight)/2)},getRegion:function(t,e,n){var i=this.target.getShapeAt(t,e,n);return void 0!==i&&void 0!==this.shapes[i]?this.shapes[i]:void 0},getCurrentRegionFields:function(){var t=this.currentRegion;return{isNull:void 0===this.values[t],value:this.values[t],percent:this.values[t]/this.total*100,color:this.options.get("sliceColors")[t%this.options.get("sliceColors").length],offset:t}},changeHighlight:function(t){var e=this.currentRegion,n=this.renderSlice(e,t),i=this.valueShapes[e];delete this.shapes[i],this.target.replaceWithShape(i,n),this.valueShapes[e]=n.id,this.shapes[n.id]=e},renderSlice:function(t,n){var i,r,o,a,s,l=this.target,c=this.options,u=this.radius,h=c.get("borderWidth"),d=c.get("offset"),f=2*e.PI,p=this.values,g=this.total,m=d?2*e.PI*(d/360):0;for(a=p.length,o=0;o<a;o++){if(i=m,r=m,g>0&&(r=m+f*(p[o]/g)),t===o)return s=c.get("sliceColors")[o%c.get("sliceColors").length],n&&(s=this.calcHighlightColor(s,c)),l.drawPieSlice(u,u,u-h,i,r,void 0,s);m=r}},render:function(){var t,n,i=this.target,r=this.values,o=this.options,a=this.radius,s=o.get("borderWidth");if(T._super.render.call(this)){for(s&&i.drawCircle(a,a,e.floor(a-s/2),o.get("borderColor"),void 0,s).append(),n=r.length;n--;)r[n]&&(t=this.renderSlice(n).append(),this.valueShapes[n]=t.id,this.shapes[t.id]=n);i.render()}}}),n.fn.sparkline.box=k=r(n.fn.sparkline._base,{type:"box",init:function(t,e,i,r,o){k._super.init.call(this,t,e,i,r,o),this.values=n.map(e,Number),this.width="auto"===i.get("width")?"4.0em":r,this.initTarget(),this.values.length||(this.disabled=1)},getRegion:function(){return 1},getCurrentRegionFields:function(){var t=[{field:"lq",value:this.quartiles[0]},{field:"med",value:this.quartiles[1]},{field:"uq",value:this.quartiles[2]}];return void 0!==this.loutlier&&t.push({field:"lo",value:this.loutlier}),void 0!==this.routlier&&t.push({field:"ro",value:this.routlier}),void 0!==this.lwhisker&&t.push({field:"lw",value:this.lwhisker}),void 0!==this.rwhisker&&t.push({field:"rw",value:this.rwhisker}),t},render:function(){var t,n,i,r,o,a,l,c,u,h,d,f=this.target,p=this.values,g=p.length,m=this.options,v=this.canvasWidth,y=this.canvasHeight,b=void 0===m.get("chartRangeMin")?e.min.apply(e,p):m.get("chartRangeMin"),x=void 0===m.get("chartRangeMax")?e.max.apply(e,p):m.get("chartRangeMax"),w=0;if(k._super.render.call(this)){if(m.get("raw"))m.get("showOutliers")&&p.length>5?(n=p[0],t=p[1],r=p[2],o=p[3],a=p[4],l=p[5],c=p[6]):(t=p[0],r=p[1],o=p[2],a=p[3],l=p[4]);else if(p.sort(function(t,e){return t-e}),r=s(p,1),o=s(p,2),a=s(p,3),i=a-r,m.get("showOutliers")){for(t=l=void 0,u=0;u<g;u++)void 0===t&&p[u]>r-i*m.get("outlierIQR")&&(t=p[u]),p[u]<a+i*m.get("outlierIQR")&&(l=p[u]);n=p[0],c=p[g-1]}else t=p[0],l=p[g-1];this.quartiles=[r,o,a],this.lwhisker=t,this.rwhisker=l,this.loutlier=n,this.routlier=c,d=v/(x-b+1),m.get("showOutliers")&&(w=e.ceil(m.get("spotRadius")),v-=2*e.ceil(m.get("spotRadius")),d=v/(x-b+1),n<t&&f.drawCircle((n-b)*d+w,y/2,m.get("spotRadius"),m.get("outlierLineColor"),m.get("outlierFillColor")).append(),c>l&&f.drawCircle((c-b)*d+w,y/2,m.get("spotRadius"),m.get("outlierLineColor"),m.get("outlierFillColor")).append()),f.drawRect(e.round((r-b)*d+w),e.round(.1*y),e.round((a-r)*d),e.round(.8*y),m.get("boxLineColor"),m.get("boxFillColor")).append(),f.drawLine(e.round((t-b)*d+w),e.round(y/2),e.round((r-b)*d+w),e.round(y/2),m.get("lineColor")).append(),f.drawLine(e.round((t-b)*d+w),e.round(y/4),e.round((t-b)*d+w),e.round(y-y/4),m.get("whiskerColor")).append(),f.drawLine(e.round((l-b)*d+w),e.round(y/2),e.round((a-b)*d+w),e.round(y/2),m.get("lineColor")).append(),f.drawLine(e.round((l-b)*d+w),e.round(y/4),e.round((l-b)*d+w),e.round(y-y/4),m.get("whiskerColor")).append(),f.drawLine(e.round((o-b)*d+w),e.round(.1*y),e.round((o-b)*d+w),e.round(.9*y),m.get("medianColor")).append(),m.get("target")&&(h=e.ceil(m.get("spotRadius")),f.drawLine(e.round((m.get("target")-b)*d+w),e.round(y/2-h),e.round((m.get("target")-b)*d+w),e.round(y/2+h),m.get("targetColor")).append(),f.drawLine(e.round((m.get("target")-b)*d+w-h),e.round(y/2),e.round((m.get("target")-b)*d+w+h),e.round(y/2),m.get("targetColor")).append()),f.render()}}}),E=r({init:function(t,e,n,i){this.target=t,this.id=e,this.type=n,this.args=i},append:function(){return this.target.appendShape(this),this}}),L=r({_pxregex:/(\d+)(px)?\s*$/i,init:function(t,e,i){t&&(this.width=t,this.height=e,this.target=i,this.lastShapeId=null,i[0]&&(i=i[0]),n.data(i,"_jqs_vcanvas",this))},drawLine:function(t,e,n,i,r,o){return this.drawShape([[t,e],[n,i]],r,o)},drawShape:function(t,e,n,i){return this._genShape("Shape",[t,e,n,i])},drawCircle:function(t,e,n,i,r,o){return this._genShape("Circle",[t,e,n,i,r,o])},drawPieSlice:function(t,e,n,i,r,o,a){return this._genShape("PieSlice",[t,e,n,i,r,o,a])},drawRect:function(t,e,n,i,r,o){return this._genShape("Rect",[t,e,n,i,r,o])},getElement:function(){return this.canvas},getLastShapeId:function(){return this.lastShapeId},reset:function(){alert("reset not implemented")},_insert:function(t,e){n(e).html(t)},_calculatePixelDims:function(t,e,i){var r;r=this._pxregex.exec(e),this.pixelHeight=r?r[1]:n(i).height(),r=this._pxregex.exec(t),this.pixelWidth=r?r[1]:n(i).width()},_genShape:function(t,e){var n=R++;return e.unshift(n),new E(this,n,t,e)},appendShape:function(t){alert("appendShape not implemented")},replaceWithShape:function(t,e){alert("replaceWithShape not implemented")},insertAfterShape:function(t,e){alert("insertAfterShape not implemented")},removeShapeId:function(t){alert("removeShapeId not implemented")},getShapeAt:function(t,e,n){alert("getShapeAt not implemented")},render:function(){alert("render not implemented")}}),P=r(L,{init:function(e,i,r,o){P._super.init.call(this,e,i,r),this.canvas=t.createElement("canvas"),r[0]&&(r=r[0]),n.data(r,"_jqs_vcanvas",this),n(this.canvas).css({display:"inline-block",width:e,height:i,verticalAlign:"top"}),this._insert(this.canvas,r),this._calculatePixelDims(e,i,this.canvas),this.canvas.width=this.pixelWidth,this.canvas.height=this.pixelHeight,this.interact=o,this.shapes={},
+this.shapeseq=[],this.currentTargetShapeId=void 0,n(this.canvas).css({width:this.pixelWidth,height:this.pixelHeight})},_getContext:function(t,e,n){var i=this.canvas.getContext("2d");return void 0!==t&&(i.strokeStyle=t),i.lineWidth=void 0===n?1:n,void 0!==e&&(i.fillStyle=e),i},reset:function(){this._getContext().clearRect(0,0,this.pixelWidth,this.pixelHeight),this.shapes={},this.shapeseq=[],this.currentTargetShapeId=void 0},_drawShape:function(t,e,n,i,r){var o,a,s=this._getContext(n,i,r);for(s.beginPath(),s.moveTo(e[0][0]+.5,e[0][1]+.5),o=1,a=e.length;o<a;o++)s.lineTo(e[o][0]+.5,e[o][1]+.5);void 0!==n&&s.stroke(),void 0!==i&&s.fill(),void 0!==this.targetX&&void 0!==this.targetY&&s.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=t)},_drawCircle:function(t,n,i,r,o,a,s){var l=this._getContext(o,a,s);l.beginPath(),l.arc(n,i,r,0,2*e.PI,!1),void 0!==this.targetX&&void 0!==this.targetY&&l.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=t),void 0!==o&&l.stroke(),void 0!==a&&l.fill()},_drawPieSlice:function(t,e,n,i,r,o,a,s){var l=this._getContext(a,s);l.beginPath(),l.moveTo(e,n),l.arc(e,n,i,r,o,!1),l.lineTo(e,n),l.closePath(),void 0!==a&&l.stroke(),s&&l.fill(),void 0!==this.targetX&&void 0!==this.targetY&&l.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=t)},_drawRect:function(t,e,n,i,r,o,a){return this._drawShape(t,[[e,n],[e+i,n],[e+i,n+r],[e,n+r],[e,n]],o,a)},appendShape:function(t){return this.shapes[t.id]=t,this.shapeseq.push(t.id),this.lastShapeId=t.id,t.id},replaceWithShape:function(t,e){var n,i=this.shapeseq;for(this.shapes[e.id]=e,n=i.length;n--;)i[n]==t&&(i[n]=e.id);delete this.shapes[t]},replaceWithShapes:function(t,e){var n,i,r,o=this.shapeseq,a={};for(i=t.length;i--;)a[t[i]]=!0;for(i=o.length;i--;)n=o[i],a[n]&&(o.splice(i,1),delete this.shapes[n],r=i);for(i=e.length;i--;)o.splice(r,0,e[i].id),this.shapes[e[i].id]=e[i]},insertAfterShape:function(t,e){var n,i=this.shapeseq;for(n=i.length;n--;)if(i[n]===t)return i.splice(n+1,0,e.id),void(this.shapes[e.id]=e)},removeShapeId:function(t){var e,n=this.shapeseq;for(e=n.length;e--;)if(n[e]===t){n.splice(e,1);break}delete this.shapes[t]},getShapeAt:function(t,e,n){return this.targetX=e,this.targetY=n,this.render(),this.currentTargetShapeId},render:function(){var t,e,n,i=this.shapeseq,r=this.shapes,o=i.length,a=this._getContext();for(a.clearRect(0,0,this.pixelWidth,this.pixelHeight),n=0;n<o;n++)t=i[n],e=r[t],this["_draw"+e.type].apply(this,e.args);this.interact||(this.shapes={},this.shapeseq=[])}}),D=r(L,{init:function(e,i,r){var o;D._super.init.call(this,e,i,r),r[0]&&(r=r[0]),n.data(r,"_jqs_vcanvas",this),this.canvas=t.createElement("span"),n(this.canvas).css({display:"inline-block",position:"relative",overflow:"hidden",width:e,height:i,margin:"0px",padding:"0px",verticalAlign:"top"}),this._insert(this.canvas,r),this._calculatePixelDims(e,i,this.canvas),this.canvas.width=this.pixelWidth,this.canvas.height=this.pixelHeight,o='<v:group coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'" style="position:absolute;top:0;left:0;width:'+this.pixelWidth+"px;height="+this.pixelHeight+'px;"></v:group>',this.canvas.insertAdjacentHTML("beforeEnd",o),this.group=n(this.canvas).children()[0],this.rendered=!1,this.prerender=""},_drawShape:function(t,e,n,i,r){var o,a,s,l,c,u,h=[];for(u=0,c=e.length;u<c;u++)h[u]=e[u][0]+","+e[u][1];return o=h.splice(0,1),r=void 0===r?1:r,a=void 0===n?' stroked="false" ':' strokeWeight="'+r+'px" strokeColor="'+n+'" ',s=void 0===i?' filled="false"':' fillColor="'+i+'" filled="true" ',l=h[0]===h[h.length-1]?"x ":"",'<v:shape coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'"  id="jqsshape'+t+'" '+a+s+' style="position:absolute;left:0px;top:0px;height:'+this.pixelHeight+"px;width:"+this.pixelWidth+'px;padding:0px;margin:0px;"  path="m '+o+" l "+h.join(", ")+" "+l+'e"> </v:shape>'},_drawCircle:function(t,e,n,i,r,o,a){var s,l;return e-=i,n-=i,s=void 0===r?' stroked="false" ':' strokeWeight="'+a+'px" strokeColor="'+r+'" ',l=void 0===o?' filled="false"':' fillColor="'+o+'" filled="true" ','<v:oval  id="jqsshape'+t+'" '+s+l+' style="position:absolute;top:'+n+"px; left:"+e+"px; width:"+2*i+"px; height:"+2*i+'px"></v:oval>'},_drawPieSlice:function(t,n,i,r,o,a,s,l){var c,u,h,d,f,p,g;if(o===a)return"";if(a-o==2*e.PI&&(o=0,a=2*e.PI),u=n+e.round(e.cos(o)*r),h=i+e.round(e.sin(o)*r),d=n+e.round(e.cos(a)*r),f=i+e.round(e.sin(a)*r),u===d&&h===f){if(a-o<e.PI)return"";u=d=n+r,h=f=i}return u===d&&h===f&&a-o<e.PI?"":(c=[n-r,i-r,n+r,i+r,u,h,d,f],p=void 0===s?' stroked="false" ':' strokeWeight="1px" strokeColor="'+s+'" ',g=void 0===l?' filled="false"':' fillColor="'+l+'" filled="true" ','<v:shape coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'"  id="jqsshape'+t+'" '+p+g+' style="position:absolute;left:0px;top:0px;height:'+this.pixelHeight+"px;width:"+this.pixelWidth+'px;padding:0px;margin:0px;"  path="m '+n+","+i+" wa "+c.join(", ")+' x e"> </v:shape>')},_drawRect:function(t,e,n,i,r,o,a){return this._drawShape(t,[[e,n],[e,n+r],[e+i,n+r],[e+i,n],[e,n]],o,a)},reset:function(){this.group.innerHTML=""},appendShape:function(t){var e=this["_draw"+t.type].apply(this,t.args);return this.rendered?this.group.insertAdjacentHTML("beforeEnd",e):this.prerender+=e,this.lastShapeId=t.id,t.id},replaceWithShape:function(t,e){var i=n("#jqsshape"+t),r=this["_draw"+e.type].apply(this,e.args);i[0].outerHTML=r},replaceWithShapes:function(t,e){var i,r=n("#jqsshape"+t[0]),o="",a=e.length;for(i=0;i<a;i++)o+=this["_draw"+e[i].type].apply(this,e[i].args);for(r[0].outerHTML=o,i=1;i<t.length;i++)n("#jqsshape"+t[i]).remove()},insertAfterShape:function(t,e){var i=n("#jqsshape"+t),r=this["_draw"+e.type].apply(this,e.args);i[0].insertAdjacentHTML("afterEnd",r)},removeShapeId:function(t){var e=n("#jqsshape"+t);this.group.removeChild(e[0])},getShapeAt:function(t,e,n){return t.id.substr(8)},render:function(){this.rendered||(this.group.innerHTML=this.prerender,this.rendered=!0)}})})}(document,Math),define("download",["jquery","config","laconic"],function(t,e){!function(t){var n={_init:function(n){return this.each(function(){var i=t(this),r=n.uuid,o=n.content_type||"application/octet-stream",a=n.filename||"swish-download.dat";(function(){return void 0!=t("<a>")[0].download})()&&o||(o="application/octet-stream");var s=e.http.locations.download+"/"+encodeURIComponent(a)+"?content_type="+encodeURIComponent(o)+"&uuid="+r;i.attr("download",a),i.attr("href",s),i.attr("title","Download (use menu for save link as)"),i.text(a),i.addClass("btn btn-primary download"),i.append(t.el.span({class:"glyphicon glyphicon-download"}))})}};t.fn.downloader=function(e){return n[e]?n[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.downloader"):n._init.apply(this,arguments)}}(jQuery)}),define("runner",["jquery","config","preferences","cm/lib/codemirror","form","prolog","links","modal","answer","laconic","sparkline","download","search"],function($,config,preferences,CodeMirror,form,prolog,links,modal){function glyphButton(t,e){return $.el.a({href:"#",class:"close btn btn-link btn-sm",title:e},$.el.span({class:"glyphicon glyphicon-"+t}))}!function(t){var e={_init:function(e){return this.each(function(){var e=t(this),n={};n.stretch=t(t.el.div({class:"stretch"})),n.inner=t(t.el.div({class:"inner"})),e.append(function(){var n=t.el.span({class:"glyphicon glyphicon-menu-hamburger"});return form.widgets.dropdownButton(n,{divClass:"runners-menu btn-transparent",ulClass:"pull-right",client:e,actions:{"Collapse all":function(){this.find(".prolog-runner").prologRunner("toggleIconic",!0)},"Expand all":function(){this.find(".prolog-runner").prologRunner("toggleIconic",!1)},"Stop all":function(){this.find(".prolog-runner").prologRunner("stop")},Clear:function(){this.prologRunners("clear")}}})}()),e.append(n.stretch),e.append(n.inner),e.on("pane.resize",function(){e.prologRunners("scrollToBottom",!0)}),e.on("scroll-to-bottom",function(t,n){e.prologRunners("scrollToBottom",n)}),e.data("prologRunners",n)})},run:function(e){var n=this.data("prologRunners");e.iconifyLast&&this.prologRunners("iconifyLast");var i=t.el.div({class:"prolog-runner"});return n.inner.append(i),t(i).prologRunner(e),this.trigger("scroll-to-bottom"),this},clear:function(){this.find(".prolog-runner").prologRunner("close")},iconifyLast:function(){var e=t(this.inner).children().last();if(1==e.length){var n=e.prologRunner();n.alive()||n.toggleIconic(!0)}return this},scrollToBottom:function(e){return this.each(function(){var n=t(this),i=n.data("prologRunners"),r=i.inner.height(),o=n.height()-r-4-2;(o>0||!0!==e)&&(i.stretch.height(o>0?o:0),n.scrollTop(r))}),this}};t.fn.prologRunners=function(n){return e[n]?e[n].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof n&&n?void t.error("Method "+n+" does not exist on jQuery.prologRunners"):e._init.apply(this,arguments)}}(jQuery),function($){function RS(t){return $(t).closest(".prolog-runners")}function addAnswer(t,e){return t.find(".runner-results").append(e),this}function aliveState(t){switch(t){case"running":case"wait-next":case"wait-input":case"wait-debug":return!0;default:return!1}}function answerTable(t){var e=[{class:"projection"}];for(i=0;i<t.length;i++)e.push($.el.th({class:"pl-pvar"},t[i]));return e.push($.el.th({class:"answer-nth"},"")),$.el.table({class:"prolog-answers"},$.el.tbody($.el.tr.apply(this,e)))}function runScripts(elem){var scripts=[];if(elem=$(elem),elem.find("script").each(function(){"text/javascript"==(this.getAttribute("type")||"text/javascript")&&scripts.push(this.textContent)}),scripts.length>0){var script="(function(node){"+scripts.join("\n")+"})",node=new Node({node:elem[0]});try{eval(script)(node)}catch(t){alert(t)}}}function Node(t){this.my_node=t.node}function breakpoints(t){var e=t.data(pluginName);return $(t).parents(".swish").swish("breakpoints",e.prolog.id)}function registerSources(t){var e=t.options.runner,n=e.data(pluginName);n.query.editor&&$(n.query.editor).prologEditor("pengine",{add:t.id})}function handleCreate(){var t=this.pengine.options.runner,e=t.data(pluginName);if(void 0==e)this.pengine.destroy();else{var n,i=$.extend({},e.screen),r=config.swish.residuals_var||"Residuals",o=config.swish.permahash_var;o=o?", "+o:"",registerSources(this.pengine),(n=breakpoints(t))&&(i.breakpoints=Pengine.stringify(n)),e.chunk&&(i.chunk=e.chunk),this.pengine.ask("'$swish wrapper'((\n"+termNoFullStop(e.query.query)+"\n), ["+r+o+"])",i),t.prologRunner("setState","running")}}function handleSuccess(){var t=this.pengine.options.runner;if(void 0==t.data(pluginName))this.pengine.destroy();else{for(var e=0;e<this.data.length;e++){var n=this.data[e];this.projection&&(n.projection=this.projection),t.prologRunner("renderAnswer",n)}this.time>.1&&addAnswer(t,$.el.div({class:"cputime"},$.el.span(this.time.toFixed(3)," seconds cpu time"))),t.prologRunner("setState",this.more?"wait-next":"true")}}function handleFailure(){var t=this.pengine.options.runner;addAnswer(t,$.el.span({class:"prolog-false"},"false")),t.prologRunner("setState","false")}function handleStop(){this.pengine.options.runner.prologRunner("setState","stopped")}function handlePrompt(){var t=this.pengine.options.runner,e=t.data("prologRunner"),n=this.data||"Please enter a Prolog term";if(e.wait_for="term","object"==typeof n){if("trace"==n.type)return t.prologRunner("trace",this);if("form"==n.type)return t.prologRunner("form",this);if("jQuery"==n.type)return t.prologRunner("jQuery",this);"console"==n.type?(n=n.prompt||"console> ",e.wait_for="line"):n=JSON.stringify(n)}t.prologRunner("setPrompt",n),t.prologRunner("setState","wait-input")}function clickableLocations(t,e){var n=/pengine:\/\/[-0-9a-f]{36}\/src:(\d+)/;return t.replace(n,function(t){return"<a class='goto-error' title='Goto location'><span class='glyphicon glyphicon-hand-right'></span> <b>line <span class='line'>"+t.match(n)[1]+"</span></b></a>"})}function gotoError(t){var e=$(t.target).closest("a.goto-error"),n=$(t.target).closest(".error-context"),i=n.data("error_context");if(e[0]){var r=parseInt(e.find("span.line").text()),o=e.find("span.file").text();return t.preventDefault(),o?n.closest("body.swish").swish("playFile",{file:o,line:r}):$(i.editor).prologEditor("gotoLine",r),!1}i&&i.location.file?n.closest("body.swish").swish("playFile",i.location):$(i.editor).prologEditor("gotoLine",i.location.line)}function handleOutput(t){function e(){var e=a.file+":"+a.line+":";a.ch&&(e+=a.ch+":"),e+="\\s*",t.data=clickableLocations(t.data.replace(new RegExp(e,"g"),""),r.editor),o=n.prologRunner("outputHTML",t.data),$(o).addClass("error-context"),$(o).append($.el.span({class:"glyphicon glyphicon-hand-right"})),$(o).attr("title","Error in program.  Click to show in context"),$(o).on("click",gotoError),$(o).data("error_context",r)}var n=t.pengine.options.runner,i=n.data(pluginName);if(i){if("string"==typeof t.data){var r={editor:i.query.editor};if(t.data=t.data.replace(/'[-0-9a-f]{36}':/g,""),t.location){var o,a=t.location;if(a.file.startsWith("swish://")){var s=a.file.slice("swish://".length);r.location={file:s,line:a.line},e()}else a.file.startsWith("pengine://")&&(r.location={line:a.line},e(i.query.editor));registerSources(t.pengine),t.error_context=r,t.error_handler=gotoError,$(".swish-event-receiver").trigger("source-error",t)}else{var o=n.prologRunner("outputHTML",clickableLocations(t.data,r.editor));$(o).on("click",gotoError),$(o).data("error_context",r)}}else"object"==typeof t.data?n.prologRunner(t.data.action,t.data):console.log(t.data);n.trigger("scroll-to-bottom")}}function handleError(){var t=this.pengine.options.runner;"too_many_pengines"==this.code?this.message="Too many open queries.  Please complete some\nqueries by using |Next|, |Stop| or by\nclosing some queries.":"string"==typeof this.data?this.message=this.data.replace(new RegExp("'"+this.pengine.id+"':","g"),""):this.message="Unknown error",t.prologRunner("error",this),t.prologRunner("setState","error")}function handleAbort(){var t=this.pengine.options.runner;t.data("prologRunner")?(t.prologRunner("error","** Execution aborted **"),t.prologRunner("setState","aborted")):this.pengine.destroy()}function handlePing(){this.pengine.options.runner.prologRunner("ping",this.data)}function answerHasOutput(t){return t.variables.length>0||t.residuals}function termNoFullStop(t){return String($.trim(t)).replace(/\.$/,"")}var pluginName="prologRunner",keyBindings={59:"next",186:"next",32:"next",190:"stop",13:"stop",65:"stopOrAbort",27:"stopOrAbort",46:"close",112:"help"},methods={_init:function(t){return this.each(function(){function e(t,e,i,r){var o=$.el.button({title:e,class:"rtb-"+i},$.el.span({class:"glyphicon glyphicon-"+t}));return $(o).on("click",function(){n.prologRunner(i)}),0==r&&$(o).hide(),o}var n=$(this),i={};if(n.addClass("prolog-runner panel panel-default"),t.tabled&&n.addClass("tabled"),0!=t.title){var r=$.el.span({class:"query cm-s-prolog"});CodeMirror.runMode(t.query,"prolog",r),n.append($.el.div({class:"runner-title panel-heading"},e("remove-circle","Close","close"),e("minus","Iconify","toggleIconic"),e("download","Download CSV","downloadCSV"),e("link","Permalink","permalink",!1),function(){var t=$.el.span({class:"runner-state show-state idle"});return form.widgets.dropdownButton(t)}(),r,$.el.br({clear:"all"})))}else n.append($.el.div({class:"runner-title runner-button-group"},e("remove-circle","Close","close"),e("minus","Iconify","toggleIconic"),e("download","Download CSV","downloadCSV"),e("link","Permalink","permalink",!1)));return t.chunk&&(i.chunk=t.chunk),n.append($.el.div({class:"runner-results panel-body"})),n.append(function(){function t(){n.prologRunner("next",1)}function e(){n.prologRunner("next",10)}function r(){n.prologRunner("next",100)}function o(){n.prologRunner("next",1e3)}function a(){i.prolog.stop()}function s(){i.prolog.abort()}function l(t,e){var n=$.el.button(e);return $(n).on("click",t),n}var c=function(){var t=$.el.input({class:"prolog-input"}),e=$.el.button("Send");return $(t).keypress(function(e){if(13==e.which&&n.prologRunner("respond",$(t).val()))return $(t).val(""),e.preventDefault(),!1;"Esc"!=e.key&&e.stopPropagation()}),$(e).on("click",function(){n.prologRunner("respond",$(t).val())}),{input:t,button:e}}();return $.el.div({class:"controller show-state"},$.el.span({class:"running"},l(s,"Abort")),$.el.span({class:"wait-next"},l(t,"Next"),l(e,"10"),l(r,"100"),l(o,"1,000")," ",l(a,"Stop")),$.el.span({class:"wait-input"},l(s,"Abort"),c.button,$.el.span(c.input)),function(){return $.el.span({class:"sparklines"},"")}())}()),n.data("prologRunner",i),n.prologRunner("populateActionMenu"),n.keydown(function(t){"wait-input"==n.prologRunner("getState")||$(t.target).is("input")||t.ctrlKey||t.altKey||keyBindings[t.which]&&(t.preventDefault(),n.prologRunner(keyBindings[t.which]))}),n.on("click","a",links.followLink),i.savedFocus=document.activeElement,n.attr("tabindex",-1),n.focus(),i.query=t,i.answers=0,n.prologRunner("setScreenDimensions"),require([config.http.locations.pengines+"/pengines.js"],function(){i.prolog=new Pengine({server:config.http.locations.pengines,runner:n,application:"swish",src:t.source,destroy:!1,format:"json-html",oncreate:handleCreate,onsuccess:handleSuccess,onfailure:handleFailure,onstop:handleStop,onprompt:handlePrompt,onoutput:handleOutput,onping:handlePing,onerror:handleError,onabort:handleAbort}),i.prolog.state="idle",config.swish.ping&&void 0!=i.prolog.ping&&i.prolog.ping(1e3*config.swish.ping)}),this})},setScreenDimensions:function(){var t,e,n=this.data(pluginName),i=$.el.pre({class:"measure"},"xxxxxxxxxx"),r=this.width();e=this.closest(".prolog-runners"),0==e.length&&(e=this.closest(".nb-view")),e.length&&(t=e.height()),this.append(i);var o=$(i).width()/10,a=$(i).height();$(i).remove(),n.screen={width:r,cols:Math.floor(r/o)},void 0!==t&&(n.screen.height=t,n.screen.rows=Math.floor(t/a))},renderAnswer:function(t){var e=this.data("prologRunner"),n=++e.answers%2==0,i=function(t){for(var e={},n=t.variables,i=t.projection,r=0;r<n.length;r++)for(var o=n[r].variables,a=0;a<o.length;a++)if(o[a].startsWith("_swish__")){var s=o[a].replace("_swish__","");e[s]=n[r].value,n.splice(r,1),r--}if(i)for(var r=0;r<i.length;r++)i[r].startsWith("_swish__")&&(i.splice(r,1),r--);return e}(t);if(i.permahash&&(e.permahash=$(i.permahash).text().replace(/'/g,""),this.find(".rtb-permalink").show({duration:400})),e.query.tabled){if(1!=e.answers)return t.projection=e.projection,t.nth=e.answers,$(e.table).prologAnswer(t),this;if(t.projection&&t.projection.length>0){var r=answerTable(t.projection);return addAnswer(this,r),e.table=r,e.projection=t.projection,t.nth=e.answers,$(e.table).prologAnswer(t),this}}var o=$.el.div({class:"answer "+(n?"even":"odd")},$.el.span({class:"answer-no"},e.answers));addAnswer(this,o),$(o).prologAnswer(t)},outputHTML:function(t){var e=$.el.span({class:"output"});return addAnswer(this,e),e.innerHTML=t,runScripts(e),e},downloadButton:function(t){var e=$.el.a({class:"download"});addAnswer(this,e),$(e).downloader(t)},syntaxError:function(t){var e=this.data(pluginName);return t.data='<pre class="output msg-error">'+t.message+"</pre>",t.location.file=!0,$(e.query.query_editor).prologEditor("highlightError",t),this},error:function(t){var e;if("object"==typeof t){if("died"==t.code)return addAnswer(this,$.el.div({class:"RIP",title:"Remote pengine timed out"})),this;if("syntax_error"==t.code){var n=t.message.match(/^HTTP:DATA:(\d+):(\d+):\s*(.*)/);n&&4==n.length&&(this.prologRunner("syntaxError",{location:{line:parseInt(n[1])-1,ch:parseInt(n[2])},message:n[3]}),e="Cannot run query due to a syntax error (check query window)")}e||(e=t.message)}else e=t;return addAnswer(this,$.el.pre({class:"prolog-message msg-error"},e)),this},trace:function(t){function e(e,n,i){var r=$.el.button({class:n,title:e},$.el.span(e));return $(r).on("click",function(e){void 0!==i&&(n+="("+Pengine.stringify(i(e))+")"),t.pengine.respond(n),$(e.target).parent().remove()}),r}var n=$.el.span({class:"goal"}),i=t.data;$(n).html(i.goal),addAnswer(this,$.el.div({class:"prolog-trace"},$.el.span({class:"depth",style:"width:"+(5*i.depth-1)+"px"}," "),$.el.span({class:"port "+i.port},function(t){return t.charAt(0).toUpperCase()+t.slice(1)}(i.port),":"),n)),"exception"==i.port&&addAnswer(this,$.el.div({class:"prolog-exception"},i.exception.message)),addAnswer(this,$.el.div({class:"trace-buttons"},e("Continue","nodebug",function(t){return breakpoints($(t.target).closest(".prolog-runner"))}),e("Step into","continue"),e("Step over","skip"),e("Step out","up"),e("Retry","retry"),e("Abort","abort"))),this.closest(".swish").find(".tabbed").trigger("trace-location",i),this.prologRunner("setState","wait-debug")},setPrompt:function(t){this.find(".controller input").attr("placeholder",t)},jQuery:function(t){var e,n=t.data;if(console.log(n),"string"==typeof n.selector)e=$(n.selector);else if("object"==typeof n.selector){switch(n.selector.root){case"this":root=this;break;case"cell":root=this.closest(".nb-cell");break;case"notebook":root=this.closest(".notebook");break;case"swish":root=this.closest(".swish")}e=""==n.selector.sub?root:root.find(n.selector.sub)}console.log(e);var i=e[n.method].apply(e,n.arguments);console.log(i),t.pengine.respond(Pengine.stringify(i))},form:function(t){var e=this.data("prologRunner");modal.show({title:"Please enter parameters",body:function(){this.html(t.data.html),this.find("[data-search-in]").search({search:!1}),this.on("click","button[data-action]",function(t){var n=$(t.target).closest("button"),i=n.data("action");if("run"==i){var r=$(t.target).closest("form"),o=form.serializeAsObject(r,!0),a=Pengine.stringify(o);e.prolog.respond(a)}else"cancel"==i&&e.prolog.respond("cancel");return n.closest(".modal").modal("hide"),t.preventDefault(),!1})}})},respond:function(t){var e=this.data("prologRunner");if("term"==e.wait_for){if(s=termNoFullStop(t),""==s)return null}else s=Pengine.stringify(t+"\n");return addAnswer(this,$.el.div({class:"response"},t)),e.prolog.respond(s),this},stop:function(){return this.each(function(){$(this).data("prologRunner").prolog.stop()})},stopOrAbort:function(){return this.each(function(){var t=$(this),e=t.data("prologRunner");switch(t.prologRunner("getState")){case"running":case"wait-input":e.prolog.abort();break;case"wait-next":e.prolog.stop()}})},next:function(t){return this.each(function(){var e=$(this);e.data("prologRunner").prolog.next(t),e.prologRunner("setState","running")})},abort:function(){return this.each(function(){$(this).data("prologRunner").prolog.abort()})},close:function(){if(this.length){var t=this.parent();this.each(function(){var t=$(this),e=t.data("prologRunner");t.prologRunner("alive")&&($(".prolog-editor").trigger("pengine-died",e.prolog.id),e.prolog.abort(),t.prologRunner("setState","aborted"))}),this.remove(),t.trigger("scroll-to-bottom",!0)}return this},help:function(){$(".swish-event-receiver").trigger("help",{file:"runner.html"})},toggleIconic:function(t){return void 0==t?this.toggleClass("iconic"):t?this.addClass("iconic"):this.removeClass("iconic"),this.trigger("scroll-to-bottom",!0),this},populateActionMenu:function(t){var e=this.find(".runner-title .btn-group.dropdown");return t=$.extend({"Re-run":function(){console.log("Re-Run ",this)}},t),form.widgets.populateMenu(e,this,t),this},downloadCSV:function(t){var e=this.data("prologRunner"),n=termNoFullStop(e.query.query);return prolog.downloadCSV(n,e.query.source,t),this},permalink:function(){function t(){this.append($.el.form({class:"form-horizontal"},form.fields.hidden("identity",r.identity),r.identity?void 0:form.fields.hidden("avatar",r.avatar),form.fields.link(i),form.fields.fileName(null,!1),form.fields.title(),form.fields.description(),form.fields.tags([]),form.fields.author(o,r.identity),form.fields.buttons({label:"Save permalink",action:function(t,n){return e.prologRunner("save_permalink",n),!1}})))}var e=this,n=this.data("prologRunner");if(n.permahash){var i=config.http.locations.permalink+n.permahash;i=location.protocol+"//"+location.host+i;var r=$("#login").login("get_profile",["display_name","avatar","email","identity"]),o=r.display_name;form.showDialog({title:"Save permalink",body:t})}else modal.alert("No permahash");return this},save_permalink:function(t){var e=this,n=this.data("prologRunner"),i={data:n.permahash,type:"lnk",meta:t};return delete i.meta.link,$.ajax({url:config.http.locations.web_storage,dataType:"json",contentType:"application/json",type:"POST",data:JSON.stringify(i),success:function(t){t.error?modal.alert(errorString("Could not save",t)):modal.feedback({html:"Saved",owner:e})},error:function(t,e,n){403==t.status?modal.alert("Permission denied.  Please try a different name"):alert("Save failed: "+e)}}),this},setState:function(t){var e=this.data("prologRunner");if(e){if(e.prolog.state!=t){var n=this.find(".show-state"),i=e.query;n.removeClass(e.prolog.state).addClass(t),e.prolog.state=t,!aliveState(t)&&e.savedFocus?($(e.savedFocus).focus(),e.savedFocus=null):"wait-input"==t&&this.find("input").focus(),"true"==t&&i.success&&i.success.call(this,e.prolog),!aliveState(t)&&i.complete&&i.complete.call(this,e.prolog)}RS(this);if(aliveState(t))if("wait-next"==t||"true"==t){var r=this;setTimeout(function(){r.trigger("scroll-to-bottom")},100)}else this.trigger("scroll-to-bottom");else{var r=this;$(".prolog-editor").trigger("pengine-died",e.prolog.id),e.prolog.destroy(),setTimeout(function(){r.trigger("scroll-to-bottom")},100)}return this}},getState:function(){var t=this.data("prologRunner");return t.prolog?t.prolog.state:"idle"},alive:function(){return aliveState(this.prologRunner("getState"))},ping:function(t){function e(t,e){var n=Math.round(Math.pow(10,e)/1e4*t);return function(t){t=t.toString();for(var e=/(-?\d+)(\d{3})/;e.test(t);)t=t.replace(e,"$1,$2");return t}(n)}var n=this.data("prologRunner");if(n&&n.prolog&&"running"==n.prolog.state){var r=this.find(".sparklines"),o=["global","local","trail"],a=["red","blue","green"],s=["Global ","Local ","Trail "];for(n.stacks||(n.stacks={global:{usage:[]},local:{usage:[]},trail:{usage:[]}}),i=0;i<o.length;i++){var l=o[i],c=t.stacks[l].limit||t.stacks.total.limit,u=t.stacks[l].usage,h=Math.log10(u/c*1e4);n.stacks[l].limit=c,n.stacks[l].usage.length>=10&&(n.stacks[l].usage=n.stacks[l].usage.slice(1)),n.stacks[l].usage.push(h),r.sparkline(n.stacks[l].usage,{height:"2em",composite:i>0,chartRangeMin:0,chartRangeMax:4,lineColor:a[i],tooltipPrefix:s[i],tooltipSuffix:" bytes",tooltipChartTitle:0==i?"Stack usage":void 0,numberFormatter:function(t){return e(c,t)}})}}}},node_id=1;Node.prototype.node=function(){return $(this.my_node)},Node.prototype.unique_id=function(){return this.uid||(this.uid=node_id++),this.uid},$.fn.prologRunner=function(t){return methods[t]?methods[t].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof t&&t?void $.error("Method "+t+" does not exist on jQuery."+pluginName):methods._init.apply(this,arguments)}}(jQuery)}),function(){"use strict";function Sha1(t){t?(blocks[0]=blocks[16]=blocks[1]=blocks[2]=blocks[3]=blocks[4]=blocks[5]=blocks[6]=blocks[7]=blocks[8]=blocks[9]=blocks[10]=blocks[11]=blocks[12]=blocks[13]=blocks[14]=blocks[15]=0,this.blocks=blocks):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.h0=1732584193,this.h1=4023233417,this.h2=2562383102,this.h3=271733878,this.h4=3285377520,this.block=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0}var root="object"==typeof window?window:{},NODE_JS=!root.JS_SHA1_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;NODE_JS&&(root=global);var COMMON_JS=!root.JS_SHA1_NO_COMMON_JS&&"object"==typeof module&&module.exports,AMD="function"==typeof define&&define.amd,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[-2147483648,8388608,32768,128],SHIFT=[24,16,8,0],OUTPUT_TYPES=["hex","array","digest","arrayBuffer"],blocks=[],createOutputMethod=function(t){return function(e){return new Sha1(!0).update(e)[t]()}},createMethod=function(){var t=createOutputMethod("hex");NODE_JS&&(t=nodeWrap(t)),t.create=function(){return new Sha1},t.update=function(e){return t.create().update(e)};for(var e=0;e<OUTPUT_TYPES.length;++e){var n=OUTPUT_TYPES[e];t[n]=createOutputMethod(n)}return t},nodeWrap=function(method){var crypto=eval("require('crypto')"),Buffer=eval("require('buffer').Buffer"),nodeMethod=function(t){if("string"==typeof t)return crypto.createHash("sha1").update(t,"utf8").digest("hex");if(t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(void 0===t.length)return method(t);return crypto.createHash("sha1").update(new Buffer(t)).digest("hex")};return nodeMethod};Sha1.prototype.update=function(t){if(!this.finalized){var e="string"!=typeof t;e&&t.constructor===root.ArrayBuffer&&(t=new Uint8Array(t));for(var n,i,r=0,o=t.length||0,a=this.blocks;r<o;){if(this.hashed&&(this.hashed=!1,a[0]=this.block,a[16]=a[1]=a[2]=a[3]=a[4]=a[5]=a[6]=a[7]=a[8]=a[9]=a[10]=a[11]=a[12]=a[13]=a[14]=a[15]=0),e)for(i=this.start;r<o&&i<64;++r)a[i>>2]|=t[r]<<SHIFT[3&i++];else for(i=this.start;r<o&&i<64;++r)n=t.charCodeAt(r),n<128?a[i>>2]|=n<<SHIFT[3&i++]:n<2048?(a[i>>2]|=(192|n>>6)<<SHIFT[3&i++],a[i>>2]|=(128|63&n)<<SHIFT[3&i++]):n<55296||n>=57344?(a[i>>2]|=(224|n>>12)<<SHIFT[3&i++],a[i>>2]|=(128|n>>6&63)<<SHIFT[3&i++],a[i>>2]|=(128|63&n)<<SHIFT[3&i++]):(n=65536+((1023&n)<<10|1023&t.charCodeAt(++r)),a[i>>2]|=(240|n>>18)<<SHIFT[3&i++],a[i>>2]|=(128|n>>12&63)<<SHIFT[3&i++],a[i>>2]|=(128|n>>6&63)<<SHIFT[3&i++],a[i>>2]|=(128|63&n)<<SHIFT[3&i++]);this.lastByteIndex=i,this.bytes+=i-this.start,i>=64?(this.block=a[16],this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Sha1.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,e=this.lastByteIndex;t[16]=this.block,t[e>>2]|=EXTRA[3&e],this.block=t[16],e>=56&&(this.hashed||this.hash(),t[0]=this.block,t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.hBytes<<3|this.bytes>>>29,t[15]=this.bytes<<3,this.hash()}},Sha1.prototype.hash=function(){var t,e,n,i=this.h0,r=this.h1,o=this.h2,a=this.h3,s=this.h4,l=this.blocks;for(e=16;e<80;++e)n=l[e-3]^l[e-8]^l[e-14]^l[e-16],l[e]=n<<1|n>>>31;for(e=0;e<20;e+=5)t=r&o|~r&a,n=i<<5|i>>>27,s=n+t+s+1518500249+l[e]<<0,r=r<<30|r>>>2,t=i&r|~i&o,n=s<<5|s>>>27,a=n+t+a+1518500249+l[e+1]<<0,i=i<<30|i>>>2,t=s&i|~s&r,n=a<<5|a>>>27,o=n+t+o+1518500249+l[e+2]<<0,s=s<<30|s>>>2,t=a&s|~a&i,n=o<<5|o>>>27,r=n+t+r+1518500249+l[e+3]<<0,a=a<<30|a>>>2,t=o&a|~o&s,n=r<<5|r>>>27,i=n+t+i+1518500249+l[e+4]<<0,o=o<<30|o>>>2;for(;e<40;e+=5)t=r^o^a,n=i<<5|i>>>27,s=n+t+s+1859775393+l[e]<<0,r=r<<30|r>>>2,t=i^r^o,n=s<<5|s>>>27,a=n+t+a+1859775393+l[e+1]<<0,i=i<<30|i>>>2,t=s^i^r,n=a<<5|a>>>27,o=n+t+o+1859775393+l[e+2]<<0,s=s<<30|s>>>2,t=a^s^i,n=o<<5|o>>>27,r=n+t+r+1859775393+l[e+3]<<0,a=a<<30|a>>>2,t=o^a^s,n=r<<5|r>>>27,i=n+t+i+1859775393+l[e+4]<<0,o=o<<30|o>>>2;for(;e<60;e+=5)t=r&o|r&a|o&a,n=i<<5|i>>>27,s=n+t+s-1894007588+l[e]<<0,r=r<<30|r>>>2,t=i&r|i&o|r&o,n=s<<5|s>>>27,a=n+t+a-1894007588+l[e+1]<<0,i=i<<30|i>>>2,t=s&i|s&r|i&r,n=a<<5|a>>>27,o=n+t+o-1894007588+l[e+2]<<0,s=s<<30|s>>>2,t=a&s|a&i|s&i,n=o<<5|o>>>27,r=n+t+r-1894007588+l[e+3]<<0,a=a<<30|a>>>2,t=o&a|o&s|a&s,n=r<<5|r>>>27,i=n+t+i-1894007588+l[e+4]<<0,o=o<<30|o>>>2;for(;e<80;e+=5)t=r^o^a,n=i<<5|i>>>27,s=n+t+s-899497514+l[e]<<0,r=r<<30|r>>>2,t=i^r^o,n=s<<5|s>>>27,a=n+t+a-899497514+l[e+1]<<0,i=i<<30|i>>>2,t=s^i^r,n=a<<5|a>>>27,o=n+t+o-899497514+l[e+2]<<0,s=s<<30|s>>>2,t=a^s^i,n=o<<5|o>>>27,r=n+t+r-899497514+l[e+3]<<0,a=a<<30|a>>>2,t=o^a^s,n=r<<5|r>>>27,i=n+t+i-899497514+l[e+4]<<0,o=o<<30|o>>>2;this.h0=this.h0+i<<0,this.h1=this.h1+r<<0,this.h2=this.h2+o<<0,this.h3=this.h3+a<<0,this.h4=this.h4+s<<0},Sha1.prototype.hex=function(){this.finalize();var t=this.h0,e=this.h1,n=this.h2,i=this.h3,r=this.h4
 ;return HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[i>>28&15]+HEX_CHARS[i>>24&15]+HEX_CHARS[i>>20&15]+HEX_CHARS[i>>16&15]+HEX_CHARS[i>>12&15]+HEX_CHARS[i>>8&15]+HEX_CHARS[i>>4&15]+HEX_CHARS[15&i]+HEX_CHARS[r>>28&15]+HEX_CHARS[r>>24&15]+HEX_CHARS[r>>20&15]+HEX_CHARS[r>>16&15]+HEX_CHARS[r>>12&15]+HEX_CHARS[r>>8&15]+HEX_CHARS[r>>4&15]+HEX_CHARS[15&r]},Sha1.prototype.toString=Sha1.prototype.hex,Sha1.prototype.digest=function(){this.finalize();var t=this.h0,e=this.h1,n=this.h2,i=this.h3,r=this.h4;return[t>>24&255,t>>16&255,t>>8&255,255&t,e>>24&255,e>>16&255,e>>8&255,255&e,n>>24&255,n>>16&255,n>>8&255,255&n,i>>24&255,i>>16&255,i>>8&255,255&i,r>>24&255,r>>16&255,r>>8&255,255&r]},Sha1.prototype.array=Sha1.prototype.digest,Sha1.prototype.arrayBuffer=function(){this.finalize();var t=new ArrayBuffer(20),e=new DataView(t);return e.setUint32(0,this.h0),e.setUint32(4,this.h1),e.setUint32(8,this.h2),e.setUint32(12,this.h3),e.setUint32(16,this.h4),t};var exports=createMethod();COMMON_JS?module.exports=exports:(root.sha1=exports,AMD&&define("sha1",[],function(){return exports}))}(),define("notebook",["jquery","config","tabbed","form","preferences","modal","prolog","links","utils","cm/lib/codemirror","editor","laconic","runner","storage","sha1"],function($,config,tabbed,form,preferences,modal,prolog,links,utils,CodeMirror){function glyphButton(t,e,n,i,r){return r=r||"sm",$.el.a({href:"#",class:"btn btn-"+i+" btn-"+r+" action-"+e,title:n,"data-action":e},$.el.span({class:"glyphicon glyphicon-"+t}))}function imageButton(t,e,n){return n=n||"sm",$.el.a({href:"#",class:"btn btn-default btn-image btn-"+n+" action-"+t,title:e,"data-action":t},$.el.span({class:"image-icon"}))}function glyphButtonGlyph(t,e,n){t.find("a[data-action="+e+"] > span.glyphicon").removeClass(function(t,e){return e.match(/glyphicon-[-a-z]*/g).join(" ")}).addClass("glyphicon-"+n)}function sep(){return $.el.span({class:"menu-space"}," ")}function notebook_menu(){return $.el.div({class:"nb-menu"},$.el.div({class:"nb-menu-sense"},$.el.div({class:"nb-menu-line"})))}function cell_type_select_div(){var t,e=$.el.div({class:"nb-type-select"},$.el.label("Create a "),t=$.el.div({class:"btn-group",role:"group"}),$.el.label("cell here"));for(var n in cellTypes)cellTypes.hasOwnProperty(n)&&$(t).append($.el.button({type:"button",class:"btn btn-default","data-type":n},cellTypes[n].label));return $(e)}function Notebook(t){this.my_cell=t.cell}var cellTypes={program:{label:"Program",prefix:"p"},query:{label:"Query",prefix:"q"},markdown:{label:"Markdown",prefix:"md"},html:{label:"HTML",prefix:"htm"}};CodeMirror.modes.eval=CodeMirror.modes.prolog,function(t){function e(e){var n=t(e).find(".nb-cell.active");return 1==n.length?n.first():null}function n(e){function n(t){if(attrs=t.match(/[-a-z]+="[^"]*"/g),attrs){for(var e=t.match(/^<[a-z]* /),n=0;n<attrs.length;n++){var i=attrs[n].split(/=(.*)/);attrs[n]=i[0].toLowerCase()+"="+i[1]}return e[0]+attrs.sort().join(" ")+">"}return t}var i=t(t.el.div(e)).html(),r=[];return i.replace(/(<div [^>]*>|<\/div>)/g,function(t){var e;return"</div>"==t?(e=r.pop(),e?"\n"+t+"\n":t):(e=null!=t.match(/(nb-cell|notebook)/),r.push(e),e?"\n"+n(t)+"\n":t)}).slice(1)}var i=null,r={_init:function(e){return e=e||{},this.each(function(){function n(t){var e=r.data(t);e&&(a[t]=e)}var i,r,o=t(this),a={},s={};o.addClass("notebook"),o.addClass("swish-event-receiver"),o.append(i=t.el.div({class:"nb-toolbar"},glyphButton("trash","delete","Delete cell","warning"),sep(),glyphButton("copy","copy","Copy cell","default"),glyphButton("paste","paste","Paste cell below","default"),sep(),glyphButton("chevron-up","up","Move cell up","default"),glyphButton("chevron-down","down","Move cell down","default"),sep(),glyphButton("plus","insertBelow","Insert cell below","primary"),sep(),glyphButton("erase","clear_all","Clear all query output","warning"),glyphButton("play","run_all","Run all queries","primary"),glyphButton("wrench","settings","Settings","default"),glyphButton("fullscreen","fullscreen","Full screen","default"))),o.append(function(){var e=t.el.span({class:"glyphicon glyphicon-menu-hamburger"});return form.widgets.dropdownButton(e,{divClass:"notebook-menu btn-transparent",ulClass:"pull-right",client:o,actions:{"Delete cell":function(){this.notebook("delete")},"Copy cell":function(){this.notebook("copy")},"Paste cell":function(){this.notebook("paste")},"Move cell up":function(){this.notebook("up")},"Move cell down":function(){this.notebook("down")},"Insert cell":function(){this.notebook("insertBelow")},"--":"Overall options","Clear all":function(){this.notebook("clear_all")},Play:function(){this.notebook("run_all")},Settings:function(){this.notebook("settings")},"---":"Notebook actions","Exit fullscreen":function(){this.notebook("fullscreen",!1)}}})}()),o.append(t.el.div({class:"nb-view",tabIndex:"-1"},r=t.el.div({class:"nb-content"}),t.el.div({class:"nb-bottom"}))),t(i).on("click","a.btn",function(e){var n=t(e.target).closest("a").data("action");return o.notebook(n),e.preventDefault(),!1}),t(r).on("click",".nb-cell-buttons a.btn",function(e){var n=t(e.target).closest("a"),i=n.closest(".nb-cell"),r=n.data("action");return i.nbCell(r),e.preventDefault(),!1}),t(r).on("mouseenter mouseleave",".nb-menu-sense",function(e){function n(){r.remove(),i.find(".nb-menu-line").css("background-color","#fff"),s.menu_state="idle"}var i=t(e.target).closest(".nb-menu");if("mouseenter"==e.type){var r=cell_type_select_div();i.find(".nb-menu-line").css("background-color","#333"),r.hide(),i.append(r),s.menu_state="waiting",setTimeout(function(){i.find(":hover").length>0?(s.menu_state="showing",r.on("mouseleave",n),r.fadeIn(400)):n()},250)}else"showing"!=s.menu_state&&i.find(".nb-menu-line").css("background-color","#fff")}),t(r).on("click",".nb-menu .btn",function(e){e.preventDefault();var n=t(e.target).data("type"),i=t(e.target).closest(".nb-menu"),r=i.closest(".notebook"),o=t.el.div({class:"nb-cell"});return i.parent().hasClass("nb-placeholder")?r.find(".nb-content").empty().append(o):(i.find(".nb-type-select").remove(),i.after(o)),t(o).nbCell({type:n}),r.notebook("organize"),r.notebook("active",t(o),!0),!1}),o.focusin(function(e){var n=t(e.target).closest(".nb-cell");n.length>0?o.notebook("active",n):t(e.target).closest(".nb-view").length>0&&o.find(".nb-content").children(".nb-cell.active").nbCell("active",!1)}),o.focusout(function(e){t(e.target).closest(".notebook")[0]!=o[0]&&o.find(".nb-content").children(".nb-cell.active").nbCell("active",!1)}),o.on("activate-tab",function(e){if(e.target==o[0]){var n=o.find(".nb-content").children(".nb-cell.program"),i=n.filter(".active"),r=i[0]||n[0];r&&t(r).find(".prolog-editor").prologEditor("makeCurrent"),e.stopPropagation()}}),o.on("scroll-to-bottom",function(e,n){1!=n&&t(e.target).closest(".nb-cell").nbCell("ensure_in_view","bottom")}),o.data("notebook",s);var r=o.find(".notebook-data");if(e.value)o.notebook("value",e.value);else if(r.length>0){n("file"),n("url"),n("title"),n("meta"),n("st_type"),n("chats");var l=o.storage("docid",void 0,a),c=preferences.getDocVal(l,"fullscreen",config.swish.notebook.fullscreen);o.notebook("value",r.text(),{fullscreen:c}),r.remove()}else o.notebook("placeHolder");o.notebook("setupStorage",a),o.on("data-is-clean",function(e,n){if(t(e.target).hasClass("prolog-editor"))return o.notebook("checkModified"),e.stopPropagation(),!1}),o.on("fullscreen",function(t,e){preferences.setDocVal(l,"fullscreen",e)})})},delete:function(t){return t=t||e(this),t&&(this.notebook("active",t.nbCell("next")||t.nbCell("prev")),t.nbCell("close"),this.notebook("updatePlaceHolder")),this.notebook("checkModified"),this},copy:function(r){if(r=r||e(this)){var o=t.el.div({class:"notebook"});t(o).append(t(r).nbCell("saveDOM")),t(o).find(".nb-cell").removeAttr("name"),i=n(o)}},paste:function(e){var n=this;if(e=e||i){var r=t.el.div();t(r).html(e);if(t(r).find(".nb-cell").length>0)return t(r).find(".nb-cell").each(function(){n.notebook("insert",{where:"below",restore:t(this)})}),this;modal.alert("Not a SWISH notebook")}else modal.alert("Clipboard is empty")},up:function(t){return t=t||e(this),t&&(t.insertBefore(t.nbCell("prev")),this.notebook("checkModified")),this},down:function(t){return t=t||e(this),t&&(t.insertAfter(t.nbCell("next")),this.notebook("checkModified")),this},insertAbove:function(){return this.notebook("insert",{where:"above"})},insertBelow:function(){return 0==this.notebook("insert",{where:"below",if_visible:!0})&&modal.alert("<p>New cell would appear outside the visible area of the notebook.<p>Please select the cell below which you want the new cell to appear or scroll to the bottom of the notebook."),this},getSettings:function(){return{open_fullscreen:this.hasClass("open-fullscreen"),hide_navbar:this.hasClass("hide-navbar")}},settings:function(){function e(){this.append(t.el.form({class:"form-horizontal"},form.fields.checkboxes([{name:"open_fullscreen",label:"open in fullscreen mode",value:i.open_fullscreen,title:"Open in fullscreen mode"}],{col:3,label:"Initial view"}),form.fields.checkboxes([{name:"hide_navbar",label:"hide navigation bar",value:i.hide_navbar,title:"Hide navigation bar"}],{col:3,label:"Full screen options"}),form.fields.buttons({label:"Apply",offset:3,action:function(t,e){function r(t,r){e[t]!=i[t]&&(e[t]?n.addClass(r):n.removeClass(r))}r("hide_navbar","hide-navbar"),r("open_fullscreen","open-fullscreen"),n.notebook("checkModified")}})))}var n=this,i=this.notebook("getSettings");form.showDialog({title:"Set options for notebook",body:e})},run:function(t){(t=t||e(this))&&t.nbCell("run")},fullscreen:function(e,n){if(void 0==e&&(e=!this.hasClass("fullscreen")),void 0==n&&(n=this.hasClass("hide-navbar")),e){var i=this.closest(".chat-container"),r=1==i.length?i:this;t("body.swish").swish("fullscreen",r,this,n)}else t("body.swish").swish("exitFullscreen");return this},cellType:function(t,n){(t=t||e(this))&&t.nbCell("type",n)},getSelection:function(){return this.notebook("assignCellNames").find(".prolog-editor").prologEditor("getSelection")},restoreSelection:function(t){return this.notebook("assignCellNames").find(".prolog-editor").prologEditor("restoreSelection",t)},checkModified:function(){return this.each(function(){var e=t(this),n=e.data("storage"),i=n.cleanGeneration==e.notebook("changeGen");e.notebook("markClean",i),e.notebook("organize")})},markClean:function(e){return this.each(function(){var n=t(this),i=n.data("notebook");i.clean_signalled!=e&&(i.clean_signalled=e,n.trigger("data-is-clean",e)),e&&n.find(".prolog-editor").prologEditor("setIsClean")})},active:function(t,e){function n(t){t.find(".nb-content .nb-cell.not-for-query").removeClass("not-for-query")}if(t){var i=this.find(".nb-content .nb-cell.active");if(1==t.length){if((1!=i.length||t[0]!=i[0])&&(n(this),i.nbCell("active",!1),t.nbCell("active",!0),e)){var r=t.find(".prolog-editor");r.length>0?r.prologEditor("focus"):t.focus()}}else n(this),i.nbCell("active",!1)}},insert:function(n){n=n||{};var i,r=e(this),o=n.cell||t.el.div({class:"nb-cell"}),a=this.find(".nb-view");if(n.if_visible&&a.find(".nb-content > div.nb-cell").length>0&&(i=a[0].getBoundingClientRect()),r)if("above"==n.where){if(i){var s=r[0].getBoundingClientRect().top;if(s<i.top)return!1}t(o).insertBefore(r)}else{if(i){var l=r[0].getBoundingClientRect().bottom;if(l>i.bottom-20)return!1}t(o).insertAfter(r)}else{var c=this.find(".nb-content");if(i){if(c[0].getBoundingClientRect().bottom>i.bottom-20)return!1}c.append(o)}return n.cell||t(o).nbCell(n.restore),t(o).nbCell("assignName"),this.notebook("updatePlaceHolder"),this.notebook("active",t(o)),this.notebook("checkModified"),this},organize:function(){var e=this.find(".nb-content");e.children(".nb-cell").each(function(){var e=t(this);e.prev().hasClass("nb-menu")||e.before(notebook_menu()),e.next().hasClass("nb-menu")||e.after(notebook_menu())}),e.children(".nb-menu").each(function(){var e=t(this);e.next().hasClass("nb-menu")&&e.remove()})},setupStorage:function(e){var n=this;return e=t.extend(e,{getValue:function(){return n.notebook("value")},setValue:function(t){return n.notebook("setSource",t)},changeGen:function(){return n.notebook("changeGen")},isClean:function(t){return t==n.notebook("changeGen")},markClean:function(t){n.notebook("markClean",t)},cleanGeneration:this.notebook("changeGen"),cleanData:this.notebook("value"),cleanCheckpoint:"load",typeName:"notebook"}),this.storage(e)},setSource:function(t){"string"==typeof t&&(t={data:t}),this.notebook("value",t.data)},value:function(e,i){if(i=i||{},void 0==e){var r=this.notebook("getClasses");r.unshift("notebook");var o=t.el.div({class:r.join(" ")});return this.notebook("assignCellNames",!1),this.find(".nb-cell").each(function(){cell=t(this),i.skipEmpty&&cell.nbCell("isEmpty")||t(o).append(cell.nbCell("saveDOM"))}),n(o)}var a=this.find(".nb-content"),o=t.el.div(),s=0==a.children(".nb-cell").length;a.html(""),o.innerHTML=e;var l=t(o).find("div.notebook");this.removeClass("fullscreen hide-navbar"),l.hasClass("open-fullscreen")?(i.fullscreen=!0,this.addClass("open-fullscreen")):l.hasClass("fullscreen")&&(i.fullscreen=!0,this.removeClass("fullscreen")),l.hasClass("hide-navbar")&&(i.hide_navbar=!0,this.addClass("hide-navbar")),s&&i.fullscreen&&this.notebook("fullscreen",!0,i.hide_navbar),t(o).find(".nb-cell").each(function(){var e=t.el.div({class:"nb-cell"});a.append(e),t(e).nbCell(t(this))}),this.find(".nb-cell").nbCell("onload"),this.notebook("run_all","onload"),this.notebook("updatePlaceHolder"),this.notebook("assignCellNames",!1),this.notebook("organize")},getClasses:function(){for(var t=this.attr("class").split(" "),e=[],n=["open-fullscreen","hide-navbar"],i=0;i<t.length;i++)n.indexOf(t[i])>=0&&e.push(t[i]);return e.sort()},changeGen:function(){var e=this.notebook("getClasses");return this.find(".nb-cell").each(function(){var n=t(this).nbCell("changeGen");e.push(n)}),sha1(e.join())},assignCellNames:function(t){return this.find(".nb-cell").nbCell("assignName"),0!=t&&this.notebook("checkModified"),this},updatePlaceHolder:function(){0==this.find(".nb-content").find(".nb-cell").length?this.notebook("placeHolder"):this.find(".nb-placeholder").remove()},placeHolder:function(){var e,n=notebook_menu(),i=cell_type_select_div(),r=t.el.div({class:"nb-placeholder"});return t(n).append(i),r.append(n,t.el.div({class:"nb-help"},"New here?  See the notebook ",e=t.el.a("help page"),".")),t(e).on("click",function(){t(".swish-event-receiver").trigger("help",{file:"notebook.html"})}),this.find(".nb-content").append(r),this},run_all:function(e){function n(t){switch(t.state){case"error":case"aborted":return!1}return!0}var i=[];if(e=e||"all",this.notebook("clear_all"),this.find(".nb-cell.query").each(function(){"all"!=e&&t(this).data("run")!=e||i.push(this)}),i.length>0){i.current=0;var r=function(e){n(e)&&++i.current<i.length&&t(i[i.current]).nbCell("run",{complete:r})};t(i[0]).nbCell("run",{complete:r})}},clear_all:function(){this.find(".prolog-runner").prologRunner("close")}};tabbed.tabTypes.notebook={dataType:"swinb",typeName:"notebook",label:"Notebook",contentType:"text/x-prolog-notebook",order:200,create:function(e,n){t(e).notebook(n)}},t.fn.notebook=function(e){return r[e]?r[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.notebook"):r._init.apply(this,arguments)}}(jQuery),function($){function cellText(t){return t.find(".editor").prologEditor("getSource",void 0,!0)}function fileInsertInput(){var t=$('<input type="file" name="file">');return t.on("change",function(t){var e=new FileReader;return e.onload=function(n){var i=$(t.target).closest(".nb-cell");i.closest(".notebook").notebook("paste",e.result)&&i.remove()},e.readAsText(t.target.files[0]),t.preventDefault(),!1}),t}function typeMore(){var t=$('<div class="form-more"> <a href="#">more<a></div>');return t.find("a").on("click",function(t){var e=$(t.target).closest(".form-more");e.hide(400),e.next().show(400)}),t[0]}function typeLess(){for(var t=$('<div class="form-less" style="display:none"> <div><a href="#" class="less">less<a></div></div>'),e=0;e<arguments.length;e++)t.append(arguments[e]);return t.find("a.less").on("click",function(t){var e=$(t.target).closest(".form-less");e.hide(400),e.prev().show(400)}),t[0]}var pluginName="nbCell",id=0,methods={_init:function(t){return this.each(function(){var e=$(this),n={};if(e.data(pluginName,n),e.attr("tabIndex",-1),e.attr("id","nbc"+id++),t instanceof jQuery)e.nbCell("restoreDOM",t);else if(t&&t.type)e.nbCell("type",t.type);else{var i=glyphButton("remove-circle","close","Close","default","xs");e.append(i),$(i).addClass("close-select"),$(i).on("click",function(){e.nbCell("close")});var r=cell_type_select_div();e.append(r),r.find(".btn-group").on("click",".btn",function(t){e.nbCell("type",$(t.target).data("type"))}),e.append($.el.div({class:"nb-type-more"},typeMore(),typeLess($.el.label("Insert notebook from local file "),fileInsertInput()[0])))}})},active:function(t){return this.each(function(){var e=$(this),n=e.data(pluginName);if(t)switch(e.addClass("active"),n.type){case"program":e.find(".editor").prologEditor("makeCurrent");break;case"query":var i=e.nbCell("prev",".program");i&&i.find(".editor").prologEditor("makeCurrent"),e.closest(".notebook").find(".nb-cell.program").not(e.nbCell("program_cells")).addClass("not-for-query")}else if(e.length>0)switch(e.removeClass("active"),n.type){case"markdown":case"html":e.hasClass("runnable")&&e.nbCell("run")}})},next:function(t){var e=this.nextAll(".nb-cell"+(t||"")).first();return e.length?e:null},prev:function(t){var e=this.prevAll(".nb-cell"+(t||"")).first();return e.length?e:null},ensure_in_view:function(t){var e=this.position().top,n=this.closest(".nb-view"),i=n.scrollTop(),r=n.height();e>i&&e+this.height()<i+r||("top"!=t&&(e=e+this.height()-r+40),this.nbCell("active",!0),n.scrollTop(e))},type:function(t){var e=this.data(pluginName);return e.type!=t&&(methods.type[t].apply(this),e.type=t,this.addClass(t),this.removeAttr("name"),this.nbCell("assignName")),this},assignName:function(){return this.each(function(){var t=$(this);if(!t.attr("name")){var e=t.data(pluginName);if(e.type){var n=cellTypes[e.type].prefix,r=t.closest(".notebook");for(i=1;;i++){var o=n+i;if(0==r.find("*[name="+o+"]").length){t.attr("name",o);break}}}}})},run:function(){var t=arguments;return this.each(function(){var e=$(this);if(e.hasClass("runnable")){var n=e.data(pluginName);return methods.run[n.type].apply(e,t)}console.log("Cell is not runnable: ",e)})},runTabled:function(){return this.nbCell("run",{tabled:!0})},onload:function(){var t=arguments;return this.each(function(){var e=$(this),n=e.data(pluginName);methods.onload[n.type]&&methods.onload[n.type].apply(e,t)}),this.nbCell("refresh")},close:function(){return this.find(".prolog-runner").prologRunner("close"),this.remove()},refresh:function(){return this.hasClass("program")&&this.find("a[data-action='background']").attr("title",this.hasClass("background")?"Used for all queries in this notebook":"Used for queries below this cell"),this},getSettings:function(){return{tabled:"true"==this.data("tabled"),run:"onload"==this.data("run"),chunk:parseInt(this.data("chunk")||"1"),name:this.attr("name")}},settings:function(){function t(){this.append($.el.form({class:"form-horizontal"},form.fields.checkboxes([{name:"tabled",label:"table results",value:n.tabled,title:"Table results"},{name:"run",label:"run on page load",value:n.run,title:"Run when document is loaded"}],{col:3}),form.fields.chunk(n.chunk),form.fields.name(n.name||""),form.fields.buttons({label:"Apply",offset:3,action:function(t,i){i.tabled!=n.tabled&&(i.tabled?e.data("tabled","true"):e.removeData("tabled")),i.run!=n.run&&(i.run?e.data("run","onload"):e.removeData("run")),i.chunk!=n.chunk&&(1!=i.chunk?e.data("chunk",""+i.chunk):e.removeData("chunk"));var r=i.name?i.name.trim():"";r!=n.name&&(r?e.attr("name",r):e.attr("name",null)),e.closest(".notebook").notebook("checkModified")}})))}var e=this,n=this.nbCell("getSettings");form.showDialog({title:"Set options for query",body:t})},singleline:function(){return this.toggleClass("singleline"),this.find(".editor").prologEditor("refresh"),glyphButtonGlyph(this,"singleline",this.hasClass("singleline")?"triangle-left":"triangle-bottom"),this.find("a[data-action=singleline]").blur(),this},background:function(){return this.toggleClass("background"),this.find("a[data-action=background]").blur(),this.closest(".notebook").notebook("checkModified"),this.nbCell("refresh"),this},program_cells:function(){var t=(this.data(pluginName),this.closest(".notebook").find(".nb-cell.program.background"));return this.hasClass("program")?this.hasClass("background")||(t=t.add(this)):t=t.add(this.nbCell("prev",".program")),t},programs:function(){return this.nbCell("program_cells").find(".editor")},isEmpty:function(){return methods.isEmpty[this.data(pluginName).type].call(this)},saveDOM:function(){return methods.saveDOM[this.data(pluginName).type].call(this)},restoreDOM:function(t){var e=this.data(pluginName);e.type=function(t){for(var e in cellTypes)if(cellTypes.hasOwnProperty(e)&&t.hasClass(e))return e}(t),methods.restoreDOM[e.type].apply(this,arguments),this.addClass(e.type)},changeGen:function(){var t=this.data(pluginName).type;return t?methods.changeGen[t].call(this):0},text:function(){return cellText(this)}};methods.type.markdown=function(t){var e,n=this;t=t||{},t.mode="markdown",t.fencedCodeBlockHighlighting=!0,function(e){void 0!=t[e]&&(n.attr(e,""+t[e]),delete t[e])}("name"),this.html(""),this.append(e=$.el.div({class:"editor"})),$(e).prologEditor(t),this.addClass("runnable")},methods.type.html=function(t){var e,n=this;t=t||{},t.mode="htmlmixed",function(e){void 0!=t[e]&&(n.attr(e,""+t[e]),delete t[e])}("name"),this.html(""),this.append(e=$.el.div({class:"editor"})),$(e).prologEditor(t),this.addClass("runnable")},methods.type.program=function(t){var e,n=this;t=t||{},t.autoCurrent=!1,t.getSource=function(){return n.nbCell("programs").prologEditor("getSource","source",!0)},this.html("");var i=$.el.div({class:"btn-group nb-cell-buttons",role:"group"},glyphButton("triangle-bottom","singleline","Show only first line","default","xs"),imageButton("background","Use as background program","xs"));this.append(i,e=$.el.div({class:"editor with-buttons"})),t.background&&this.addClass("background"),t.singleline&&this.nbCell("singleline"),$(e).prologEditor(t)},methods.type.query=function(t){function e(e){void 0!=t[e]&&(r.data(e,""+t[e]),delete t[e])}function n(t){this.find(".editor.query").prologEditor("wrapSolution",$(t).text())}var i,r=this;this.html(""),t=t||{},void 0==t.tabled&&(t.tabled=preferences.getVal("tabled_results")),e("tabled"),e("chunk"),e("run"),function(e){void 0!=t[e]&&(r.attr(e,""+t[e]),delete t[e])}("name"),t=$.extend({},t,{role:"query",sourceID:function(){return r.nbCell("programs").prologEditor("getSourceID")},prologQuery:function(t){r.nbCell("run")}});var o=$.el.div({class:"btn-group nb-cell-buttons",role:"group"},glyphButton("wrench","settings","Settings","default","xs"),glyphButton("play","run","Run query","primary","xs")),a=form.widgets.dropdownButton($.el.span({class:"glyphicon glyphicon-menu-hamburger"}),{client:r,divClass:"nb-query-menu",actions:{"Aggregate (count all)":n,"--":null,Projection:n,"Order by":n,Distinct:n,Limit:n}});this.append(o,$.el.div({class:"query with-buttons"},a,$.el.span({class:"prolog-prompt"},"?-"),i=$.el.div({class:"editor query"}))),$(i).prologEditor(t),this.addClass("runnable")},methods.run.markdown=function(t){function e(t){var n=$(t.target).closest(".nb-cell"),i=n.data("markdownText");n.removeData("markdownText"),methods.type.markdown.call(n,{value:i}),n.off("dblclick",e),n.off("click",links.followLink)}function n(n){i.html(n),i.removeClass("runnable"),i.data("markdownText",t),i.on("dblclick",e),i.on("click","a",links.followLink);var r=i.closest(".notebook").data("notebook");if(r&&r.markdown_post_renderer)for(var o=0;o<r.markdown_post_renderer.length;o++)r.markdown_post_renderer[o].call(i)}var i=this;t=t||cellText(this),""!=t.trim()?$.ajax({type:"POST",url:config.http.locations.markdown,data:t,contentType:"text/plain; charset=UTF-8",success:n}):n("<div class='nb-empty-markdown'>Empty markdown cell.  Double click to edit</div>")},methods.run.html=function(htmlText,options){function makeEditable(t){if(!$(t.target).is("input")&&!$(t.target).is("textarea")){var e=$(t.target).closest(".nb-cell"),n=e.data("htmlText");e.removeData("htmlText"),methods.type.html.call(e,{value:n}),e.off("dblclick",makeEditable),e.off("click",links.followLink)}}function runScripts(){if(1==config.swish.notebook.eval_script&&0!=options.eval_script){var scripts=[];if(cell.find("script").each(function(){"text/javascript"==(this.getAttribute("type")||"text/javascript")&&scripts.push(this.textContent)}),scripts.length>0){var script="(function(notebook){"+scripts.join("\n")+"})",nb=new Notebook({cell:cell[0]});try{eval(script)(nb)}catch(t){alert(t)}}}}function runHTML(t){cell[0].innerHTML=t,runScripts()}function setHTML(t){runHTML(t),cell.removeClass("runnable"),cell.data("htmlText",htmlText),cell.on("dblclick",makeEditable),cell.on("click","a",links.followLink)}var cell=this;if(options=options||{},0==options.html)return void runScripts();htmlText=(htmlText||cellText(this)).trim(),setHTML(""!=htmlText?htmlText:"<div class='nb-placeholder'>Empty HTML cell.  Double click to edit</div>")},methods.run.program=function(){modal.alert("Please define a query to run this program")},methods.run.query=function(t){var e=this.nbCell("programs"),n=this.nbCell("getSettings"),i=cellText(this);if(t=t||{},t.bindings){var r="";if("string"==typeof t.bindings)r=t.bindings;else for(var o in t.bindings)t.bindings.hasOwnProperty(o)&&(r&&(r+=", "),r+=o+" = "+Pengine.stringify(t.bindings[o]));r&&(i=r+", ("+prolog.trimFullStop(i)+")")}var a={source:e.prologEditor("getSource","source",!0),query:i,tabled:n.tabled||!1,chunk:n.chunk,title:!1,query_editor:this.find(".prolog-editor.query")};e[0]&&(a.editor=e[0]),t.success&&(a.success=t.success),t.complete&&(a.complete=t.complete);var s=$.el.div({class:"prolog-runner"});this.find(".prolog-runner").prologRunner("close"),this.append(s),$(s).prologRunner(a)},methods.onload.html=function(){return methods.run.html.call(this,void 0,{html:!1,eval_script:!0})},methods.saveDOM.markdown=function(){var t=this.data("markdownText")||cellText(this),e=$.el.div({class:"nb-cell markdown"},t);return function(t){var n;(n=cell.attr(t))&&n&&$(e).attr(t,n)}("name"),e},methods.saveDOM.html=function(){var t=this.data("htmlText")||cellText(this),e=$.el.div({class:"nb-cell html"});return $(e).html(t),function(t){var n;(n=cell.attr(t))&&n&&$(e).attr(t,n)}("name"),e},methods.saveDOM.program=function(){function t(t){e.hasClass(t)&&$(n).attr("data-"+t,!0)}var e=this,n=$.el.div({class:"nb-cell program"},cellText(this));return t("background"),t("singleline"),function(t){var i;(i=e.attr(t))&&i&&$(n).attr(t,i)}("name"),n},methods.saveDOM.query=function(){function t(t,e){return!("tabled"!=t||e&&"false"!=e)}function e(e){var r;(r=n.data(e))&&!t(e,r)&&$(i).attr("data-"+e,r)}var n=this,i=$.el.div({class:"nb-cell query"},cellText(this));return e("tabled"),e("chunk"),e("run"),function(t){var e;(e=n.attr(t))&&e&&$(i).attr(t,e)}("name"),i},methods.restoreDOM.markdown=function(t){var e=this,n=t.text().trim();e.data("markdownText",n),function(n){var i;(i=t.attr(n))&&i&&e.attr(n,i)}("name"),methods.run.markdown.call(this,n)},methods.restoreDOM.html=function(t){var e=this;!function(n){var i;(i=t.attr(n))&&i&&e.attr(n,i)}("name"),methods.run.html.call(this,t.html(),{eval_script:!1})},methods.restoreDOM.program=function(t){function e(e){var n;(n=t.data(e))&&(i[e]=n)}var n=this,i={value:t.text().trim()};e("background"),e("singleline"),function(e){var i;(i=t.attr(e))&&i&&n.attr(e,i)}("name"),methods.type.program.call(this,i)},methods.restoreDOM.query=function(t){function e(e){var i;(i=t.data(e))&&("chunk"==e?n.chunk=parseInt(i):n[e]=i)}var n={value:t.text().trim()};e("tabled"),e("chunk"),e("run"),function(e){var i;(i=t.attr(e))&&(n[e]=i)}("name"),void 0==n.tabled&&(n.tabled=!1),methods.type.query.call(this,n)},methods.changeGen.markdown=function(){var t=this.data("markdownText")||cellText(this);return sha1("M"+t.trim())},methods.changeGen.html=function(){var t=this.data("htmlText")||cellText(this);return sha1("H"+t.trim())},methods.changeGen.program=function(){function t(t,i){n.hasClass(t)&&(e+=i)}var e="P",n=this;return t("background","B"),t("singleline","S"),e+="V"+cellText(this).trim(),sha1(e)},methods.changeGen.query=function(){function t(t,i){var r;(r=n.data(t))&&(e+=i+r)}var e="Q",n=this;return t("tabled","T"),t("chunk","C"),t("run","R"),function(t,i){var r;(r=n.attr(t))&&(e+=i+r)}("name","N"),e+="V"+cellText(this).trim(),sha1(e)},methods.isEmpty.markdown=function(){return""==(this.data("markdownText")||cellText(this)).trim()},methods.isEmpty.html=function(){return""==(this.data("htmlText")||cellText(this)).trim()},methods.isEmpty.program=function(){return""==cellText(this).trim()},methods.isEmpty.query=function(){return""==cellText(this).trim()},$.fn.nbCell=function(t){return methods[t]?methods[t].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof t&&t?void $.error("Method "+t+" does not exist on jQuery."+pluginName):methods._init.apply(this,arguments)}}(jQuery),Notebook.prototype.swish=function(t){var e=this.cell().nbCell("programs"),n=e.prologEditor("getSource","source",!0);return n&&(t.src=n),$.swish(t)},Notebook.prototype.cell=function(t){return t?this.notebook().find('.nb-cell[name="'+t+'"]'):$(this.my_cell)},Notebook.prototype.notebook=function(){return $(this.my_cell).closest(".notebook")},Notebook.prototype.run=function(t,e){var n={};e&&(n.bindings=e),this.cell(t).nbCell("run",n)},Notebook.prototype.submit=function(t,e){var n=this.$(t),i=form.serializeAsObject(n);form.formError(n,null),this.swish({ask:e.predicate+"(("+Pengine.stringify(i)+"))",onerror:function(t){form.formError(n,t)},onsuccess:e.onsuccess})},Notebook.prototype.bindQuery=function(t,e){var n,i,r=this;"function"==typeof t&&void 0==e?(n=this.cell().nbCell("next",".query"),i=t):(n=this.cell(t),i=e),n.length>0?n.find(".action-run").off("click").on("click",function(t){var e={run:function(t){n.nbCell("run",{bindings:t})}};return i.call(r,e),t.preventDefault(),!1}):alert("No query named '"+cell+"'")},Notebook.prototype.hideQuery=function(t,e){var n=this.cell(t);void 0==e&&(e=!0),n.length>0?1==e?(n.find(".nb-cell-buttons").hide(),n.find(".query").hide()):(n.find(".nb-cell-buttons").show(),n.find(".query").show()):alert("No query named '"+t+"'")},Notebook.prototype.$=function(t){return this.cell().find(t)},Notebook.prototype.loadCSS=function(t){return utils.loadCSS(t)},Notebook.prototype.markdown_post_renderer=function(t){var e=this.notebook().data("notebook");e&&(void 0!=e.markdown_post_renderer?e.markdown_post_renderer.push(t):e.markdown_post_renderer=[t])}}),define("navbar",["jquery","preferences","form","laconic"],function(t,e,n){!function(t){function i(i,r,o){function a(e){if(e)return t.el.span({class:"dropdown-icon glyphicon glyphicon-"+e})}if(void 0==o);else if("--"==o)i.append(t.el.li({class:"divider"}));else if("function"==typeof o){var s,l;if(o.typeIcon)s=t.el.a(n.widgets.typeIcon(o.typeIcon),r);else if(o.glyph)s=t.el.a(a(o.glyph),r);else if((l=r.indexOf("("))>0){var c=r.substr(l);s=t.el.a({class:"accelerated"},r.substr(0,l).trim(),t.el.span({class:"accell-spacer"},c),t.el.span({class:"accell-text"},c))}else s=t.el.a(r);t(s).data("navbar-action",o),
 o.name&&t(s).attr("id",o.name),i.append(t.el.li(s))}else if("checkbox"==o.type){var u=t(t.el.input({type:"checkbox"}));void 0!==o.preference?(u.addClass("swish-event-receiver"),e.getVal(o.preference)&&u.prop("checked",!0),u.on("click",function(){e.setVal(o.preference,t(this).prop("checked"))}),u.on("preference",function(t){t.name==o.preference&&u.prop("checked",t.value)})):(o.checked&&u.prop("checked",o.checked),u.on("click",function(){o.action(t(this).prop("checked"))})),i.append(t.el.li({class:"checkbox"},u[0],t.el.span(r)))}else if("submenu"==o.type){var h=t.el.ul({class:"dropdown-menu sub-menu"});if(i.append(t.el.li(t.el.a({class:"trigger right-caret"},a(o.glyph),r),h)),o.action&&t(h).data("navbar-action",o.action),o.items)for(var l=0;l<o.items.length;l++)t(h).append(t.el.li(t.el.a(o.items[l])));o.update&&t(h).on("update",function(t){o.update.call(t.target)})}else alert("Unknown navbar item")}function r(e,n){return e.find(".dropdown-menu").filter(function(){return t(this).attr("name")==n})}function o(e,n){if(!t(e).hasClass("trigger")){var i=t(e).data("navbar-action")||t(e).parents("ul").data("navbar-action");return s.call(e,n),i?(n.preventDefault(),i.call(e,n)):t(e).hasClass("trigger")&&a.call(e,n),!1}a.call(e,n)}function a(e){var n=t(this).next(),i=t(this).parent().parent();(t(this).hasClass("left-caret")||t(this).hasClass("right-caret"))&&t(this).toggleClass("right-caret left-caret"),i.find(".left-caret").not(this).toggleClass("right-caret left-caret"),i.find(".sub-menu:visible").not(n).hide(),n.trigger("update"),n.toggle(),e.stopPropagation()}function s(e){var n=t(this).closest(".dropdown");n.find(".left-caret").toggleClass("right-caret left-caret"),n.find(".sub-menu:visible").hide()}var l={_init:function(e){return this.each(function(){var n=t(this);for(var i in e)e.hasOwnProperty(i)&&(n.navbar("appendDropdown",i),n.navbar("populateDropdown",i,e[i]));n.on("click","a",function(t){o(this,t)})})},appendDropdown:function(e){var n=this.children(".nav.navbar-nav.menubar"),i=t.el.ul({name:e,class:"dropdown-menu"}),r=t.el.li({class:"dropdown"},t.el.a({class:"dropdown-toggle","data-toggle":"dropdown"},e,t.el.b({class:"caret"})),i);return n.append(r),this},populateDropdown:function(t,e){if("function"==typeof e)e(this,t);else{var n=r(this,t);for(var o in e)e.hasOwnProperty(o)&&i(n,o,e[o])}},clearDropdown:function(t){return r(this,t).html(""),this},extendDropdown:function(t,e,n){i(r(this,t),e,n)}};t.fn.navbar=function(e){return l[e]?l[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.navbar"):l._init.apply(this,arguments)}}(jQuery)}),define("query",["jquery","config","preferences","cm/lib/codemirror","modal","utils","laconic","editor"],function(t,e,n,i,r,o){!function(t){function i(e){return t(e).closest(".prolog-query-editor")}function a(e,n,r){var o=t.el.div({class:"btn-group dropup"},t.el.button({class:"btn btn-default btn-xs dropdown-toggle "+e,"data-toggle":"dropdown"},n,t.el.span({class:"caret"})),t.el.ul({class:"dropdown-menu "+e}));return t(o).on("click","a",function(){t(this).closest("li").hasClass("add-example")?i(this).queryEditor("addExample"):i(this).queryEditor("setQuery",t(this).text())}),o}function s(e){function n(e){var n=t(e.target).closest(".prolog-query-editor"),o=n.data(f);if(o&&"function"==typeof o.examples){var a=o.examples();t.isArray(a)&&i(r).queryEditor("setExamples",a,!0)}}var r=a("examples","Examples",e),o=t(r).find("ul");if("function"==typeof e.examples)t(r).mousedown(function(t){1==t.which&&n(t)});else if(e.examples)for(var s=e.examples,l=0;l<s.length;l++)o.append(t.el.li(t.el.a(s[l])));return r}function l(e){var n=a("history","History",e);return t(n).on("mouseenter","li",function(e){var n=t(e.target).closest("li").find("a");n.attr("title",o.ago(n.data("time")))}),t(n).mouseup(function(e){setTimeout(function(){var e=t(n).find("ul.history"),i=e.prop("scrollHeight");console.log(i),e.animate({scrollTop:i})},100)}),n}function c(e){for(var n,r=e.aggregates||["Aggregate (count all)","--","Projection","Order by","Distinct","Limit","--","Time","Debug (trace)"],o=t.el.div({class:"btn-group dropup"},t.el.button({class:"btn btn-default btn-xs dropdown-toggle aggregate","data-toggle":"dropdown"},"Solutions",t.el.span({class:"caret"})),n=t.el.ul({class:"dropdown-menu aggregate"})),a=0;a<r.length;a++){var s=r[a];"--"==s?t(n).append(t.el.li({class:"divider"})):t(n).append(t.el.li(t.el.a(s)))}return t(o).on("click","a",function(){i(this).find(".query").prologEditor("wrapSolution",t(this).text())}),o}function u(e){var n=t.el.button({class:"run-btn-query",class:"btn btn-default btn-primary btn-xs"},"Run!");return t(n).on("click",function(){i(this).queryEditor("run",void 0,h(this))}),n}function h(e){return t(e).parent().find("input").prop("checked")}function d(i){var r=n.getVal("tabled_results"),o={type:"checkbox",name:"table"};void 0===r&&(r=e.swish.tabled_results),r&&(o.checked="checked");var a=t.el.input(o),s=t.el.span({class:"run-chk-table"},a," table results");return t(a).on("change",function(e){n.setVal("tabled_results",t(e.target).prop("checked"))}),s}var f="queryEditor",p={maxHistoryLength:50},g={_init:function(e){return this.each(function(){function n(){return t(a).find("input").prop("checked")}var i=t(this),r=t.extend({},p,e),o=t.el.div({class:"query"}),a=d(r);i.addClass("prolog-query-editor swish-event-receiver reactive-size unloadable"),i.append(o,t.el.div({class:"prolog-prompt"},"?-"),t.el.div({class:"query-buttons"},t.el.span({class:"buttons-left"},s(r),l(r),c(r)),t.el.span({class:"buttons-right"},a,u(r)))),t(o).append(i.children("textarea")).prologEditor({role:"query",sourceID:function(){return r.sourceID()},prologQuery:function(t){i.queryEditor("run",t,n())}}),i.data(f,r),t(o).prologEditor("getSource","query")||("object"==typeof r.examples?r.examples[0]&&t(o).prologEditor("setSource",r.examples[0]):i[f]("setProgramEditor",t(r.editor),!0)),i.on("current-program",function(e,n){i[f]("setProgramEditor",t(n))}),i.on("program-loaded",function(e,n){var o=n.query;if(null!=o){if(void 0==o&&t(r.editor).data("prologEditor")==t(n.editor).data("prologEditor")){var a=r.examples();o=a&&a[0]?a[0]:""}i.queryEditor("setQuery",o)}}),i.on("unload",function(t,e){if(i.closest(".swish").swish("preserve_state")){var n=i[f]("getState");n&&localStorage.setItem("query",JSON.stringify(n))}}),i.on("restore",function(t,e){if(""==i[f]("getQuery")){var n;try{var r=localStorage.getItem("query");r&&(n=JSON.parse(r))}catch(t){}n&&"object"==typeof n&&i[f]("setState",n)}}),i.on("preference",function(t,e){"preserve-state"==e.name&&0==e.value&&localStorage.removeItem("query")})})},setProgramEditor:function(e,n){var i=this.data(f);if(i.editor==e[0]&&!n)return this;if(i.editor=e[0],i.editor){i.examples=function(){var n=e.prologEditor("getExamples")||[],i=e.parents(".swish").swish("examples",!0)||[];return t.isArray(i)&&n.concat(i),n},e.prologEditor("isPengineSource")?i.source=function(){var n=e.prologEditor("getSource","source"),i=t(".background.prolog.source").text();return i&&(n+="\n%@background@\n"+i),n}:i.source="",i.sourceID=function(){return e.prologEditor("getSourceID")};var r=i.examples();r&&r[0]&&this.queryEditor("isClean")?this.queryEditor("setQuery",r[0]):e.prologEditor("refreshHighlight")}else i.examples=""},getProgramEditor:function(){var e=this.data(f);return e.editor?t(e.editor):t()},setExamples:function(e,n){var i=this.find("ul.examples");if(e||(e=[]),void 0===n&&(n=!0),n&&function(t){var e;if((e=i.data("examples"))&&e.length==t.length){for(var n=0;n<e.length;n++)if(e[n]!=t[n])return!1;return!0}return!1}(e))return this;!0===n&&i.html(""),i.find("li.add-example, li.divider").remove();for(var r=0;r<e.length;r++)i.append(t.el.li(t.el.a(e[r])));return i.data("examples",e.slice(0)),i.append(t.el.li({class:"divider"})),i.append(t.el.li({class:"add-example"},t.el.a("Add current query to examples"))),this},addExample:function(){return""!=this.find(".query").prologEditor("getSource").trim()?t(".swish-event-receiver:visible").trigger("addExample",this.find(".query").prologEditor("getSource")):r.alert("The query window is empty"),this},addHistory:function(e){var n=this.find("ul.history"),i=this.data("queryEditor");if(e){var r,o;(r=function(){return n.children().filter(function(){return t(this).text()==e})}())&&r.remove(),n.children().length>=i.maxHistoryLength&&n.children().first().remove(),n.append(t.el.li(o=t.el.a(e))),t(o).data("time",(new Date).getTime()/1e3)}return this},getHistory:function(){var e=this.find("ul.history"),n=[];return e.children().each(function(){var e=t(this).find("a");n.push({query:e.text(),time:e.data("time")})}),n},restoreHistory:function(e){var n=this.find("ul.history");n.html("");for(var i=0;i<e.length;i++){var r;n.append(t.el.li(r=t.el.a(e[i].query))),t(r).data("time",e[i].time)}},setQuery:function(t){return this.data(f).cleanGen=this.find(".query").prologEditor("setSource",t).focus().prologEditor("changeGen"),this},isClean:function(){var t=this.data(f);return!this.queryEditor("getQuery")||t.cleanGen&&this.find(".query").prologEditor("isClean",t.cleanGen)},getQuery:function(){return this.find(".query").prologEditor("getSource","query")},getState:function(){return{query:this[f]("getQuery"),history:this[f]("getHistory")}},setState:function(t){this[f]("restoreHistory",t.history||[]),this[f]("setQuery",t.query||"")},run:function(e,n){var i=this.data("queryEditor");if(void 0===e&&(e=this.queryEditor("getQuery")),!(e=t.trim(e)))return t(".swish-event-receiver").trigger("help",{file:"query.html"}),this;t(".swish-event-receiver").trigger("clearMessages");var r={query:e,editor:i.editor,query_editor:this.find(".query")};return"function"==typeof i.source?r.source=i.source(e):"string"==typeof i.source&&(r.source=i.source),n&&(r.tabled=!0),this.queryEditor("addHistory",e),i.runner.prologRunners("run",r),this}};t.fn.queryEditor=function(e){return g[e]?g[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery."+f):g._init.apply(this,arguments)}}(jQuery)}),define("term",["jquery"],function(){function t(){$(this).next().toggleClass("fold"),$(this).remove()}$(document).on("click",".pl-functor, .pl-infix",function(){var e=$(this).parent();$(e).toggleClass("fold"),$(e).before('<span class="pl-ellipsis">...</span>').prev().click(t)})}),define("login",["jquery","modal","config","form","laconic"],function(t,e,n,i){var r=["display_name","email","avatar"];!function(t){function o(t,e,n){t||(t=".force_logout");try{var i=navigator.userAgent.toLowerCase();if(-1!=i.indexOf("msie"))document.execCommand("ClearAuthenticationCache");else if(-1!=i.indexOf("webkit")&&"basic"==e){var r=a(n);r&&(r.open("GET",t,!0),r.setRequestHeader("Authorization","Basic logout"),r.send())}else{var r=a(n);r&&(r.open("GET",t,!0,"logout","logout"),r.send(""),r.abort())}}catch(t){return}}function a(t){var e;try{window.XMLHttpRequest?e=new XMLHttpRequest:window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLHTTP")),t&&(e.addEventListener("load",t),e.addEventListener("error",t),e.addEventListener("abort",t))}catch(t){}return e}function s(t,e,n,i){var r=window.open(t,e,n),o=window.setInterval(function(){try{(null==r||r.closed)&&(window.clearInterval(o),i(r))}catch(t){}},1e3);return window.focus&&r.focus(),r}var l={_init:function(e){return this.each(function(){var e=t(this),n={};n.url=e.attr("href"),e.removeAttr("href"),e.on("click",function(t){e.hasClass("login")&&e.login("login",t)}),e.data("login",n),e.login("update","startup")})},update:function(r){var o=t(this);t.get(n.http.locations.user_info,{reason:r},function(a){if(a){n.swish.user=a,o.removeClass("login").addClass("logout");var s,l=o.find("span.logout span.value");s=a.avatar?t.el.img({class:"profile-picture",src:a.avatar}):t.el.span({class:"glyphicon glyphicon-user"}),s=t.el.span(s,t.el.b({class:"caret"})),l.html(""),l.append(i.widgets.dropdownButton(s,{divClass:"user-menu btn-transparent",ulClass:"pull-right",client:o,actions:{Logout:o.hasClass("no-logout")?void 0:function(){this.login("logout")},Profile:function(){this.login("profile")}}})),"logout_by_http"==r&&e.alert("Failed to logout from HTTP login.  Logout from HTTP is known not to work for Chrome.  For some browsers there is a plugin to logout.  Otherwise stopping your browser completely (all pages) and restarting is the only way to logout.  HTTP logout does work for FireFox and IE.")}else delete n.swish.user,o.removeClass("logout").addClass("login");t(".sourcelist").trigger("login")},"json")},login:function(n){var i=t(this),r=this.data("login"),o=t(n.target),a=r.url,l=o.closest("[data-server]").data("server"),c=o.closest("[data-frame]").data("frame")||"iframe";l&&(a+="?server="+encodeURIComponent(l)),"popup"==c?s(a,"_blank","location=true,status=true,height=400,width=800",function(){i.login("logged_in")}):e.show({title:"Login",body:function(){var e=t.el.button({name:"ok",class:"btn btn-primary login-cont","data-dismiss":"modal"},"Continue");this.append(t.el.iframe({class:"login",src:a}),e)},onclose:function(){i.login("logged_in")}})},logged_in:function(){this.login("update","login")},profile:function(){var i=t(this);e.server_form({title:"User profile",url:n.swish.user.swish_profile_url||n.http.locations.user_profile,onreply:function(){i.login("update","profile")}})},get_profile:function(e){function i(e,n){var i=t("#chat");if(1==i.length){var r=i.chat("self",[n]);r[n]&&(o[e]=r[n])}}var o={},a=n.swish.user||{};e=e||r;for(var s=0;s<e.length;s++){var l=e[s];a[l]?o[l]=a[l]:"display_name"==l?a.name?o.display_name=a.name:a.given_name&&a.family_name?o.display_name=a.given_name+" "+a.family_name:a.family_name?o.display_name=a.family_name:a.given_name?o.display_name=a.given_name:a.nick_name?o.display_name=a.nick_name:i("display_name","name"):"identity"==l?a.external_identity&&a.identity_provider&&(o.identity=a.identity_provider+":"+a.external_identity):"avatar"==l&&i("avatar","avatar")}return o},logout:function(){var i=n.swish.user,r=t(this);i&&(i.logout_url?t.ajax({url:i.logout_url,success:function(){r.login("update","logout_by_url")},error:function(t){e.ajaxError(t)}}):"basic"==i.auth_method||"digest"==i.auth_method?o(n.http.locations.http_logout,n.swish.user.auth_method,function(){r.login("update","logout_by_http")}):alert("Don't know how to logout"))}};t.fn.login=function(e){return l[e]?l[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void t.error("Method "+e+" does not exist on jQuery.login"):l._init.apply(this,arguments)}}(jQuery)}),function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define("d3",["exports"],e):e(t.d3=t.d3||{})}(this,function(t){"use strict";function e(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function n(t){return 1===t.length&&(t=i(t)),{left:function(e,n,i,r){for(null==i&&(i=0),null==r&&(r=e.length);i<r;){var o=i+r>>>1;t(e[o],n)<0?i=o+1:r=o}return i},right:function(e,n,i,r){for(null==i&&(i=0),null==r&&(r=e.length);i<r;){var o=i+r>>>1;t(e[o],n)>0?r=o:i=o+1}return i}}}function i(t){return function(n,i){return e(t(n),i)}}function r(t,e){null==e&&(e=o);for(var n=0,i=t.length-1,r=t[0],a=new Array(i<0?0:i);n<i;)a[n]=e(r,r=t[++n]);return a}function o(t,e){return[t,e]}function a(t,e,n){var i,r,a,s,l=t.length,c=e.length,u=new Array(l*c);for(null==n&&(n=o),i=a=0;i<l;++i)for(s=t[i],r=0;r<c;++r,++a)u[a]=n(s,e[r]);return u}function s(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function l(t){return null===t?NaN:+t}function c(t,e){var n,i,r=t.length,o=0,a=-1,s=0,c=0;if(null==e)for(;++a<r;)isNaN(n=l(t[a]))||(i=n-s,s+=i/++o,c+=i*(n-s));else for(;++a<r;)isNaN(n=l(e(t[a],a,t)))||(i=n-s,s+=i/++o,c+=i*(n-s));if(o>1)return c/(o-1)}function u(t,e){var n=c(t,e);return n?Math.sqrt(n):n}function h(t,e){var n,i,r,o=t.length,a=-1;if(null==e){for(;++a<o;)if(null!=(n=t[a])&&n>=n)for(i=r=n;++a<o;)null!=(n=t[a])&&(i>n&&(i=n),r<n&&(r=n))}else for(;++a<o;)if(null!=(n=e(t[a],a,t))&&n>=n)for(i=r=n;++a<o;)null!=(n=e(t[a],a,t))&&(i>n&&(i=n),r<n&&(r=n));return[i,r]}function d(t){return function(){return t}}function f(t){return t}function p(t,e,n){t=+t,e=+e,n=(r=arguments.length)<2?(e=t,t=0,1):r<3?1:+n;for(var i=-1,r=0|Math.max(0,Math.ceil((e-t)/n)),o=new Array(r);++i<r;)o[i]=t+i*n;return o}function g(t,e,n){var i,r,o,a,s=-1;if(e=+e,t=+t,n=+n,t===e&&n>0)return[t];if((i=e<t)&&(r=t,t=e,e=r),0===(a=m(t,e,n))||!isFinite(a))return[];if(a>0)for(t=Math.ceil(t/a),e=Math.floor(e/a),o=new Array(r=Math.ceil(e-t+1));++s<r;)o[s]=(t+s)*a;else for(t=Math.floor(t*a),e=Math.ceil(e*a),o=new Array(r=Math.ceil(t-e+1));++s<r;)o[s]=(t-s)/a;return i&&o.reverse(),o}function m(t,e,n){var i=(e-t)/Math.max(0,n),r=Math.floor(Math.log(i)/Math.LN10),o=i/Math.pow(10,r);return r>=0?(o>=Qm?10:o>=Zm?5:o>=Km?2:1)*Math.pow(10,r):-Math.pow(10,-r)/(o>=Qm?10:o>=Zm?5:o>=Km?2:1)}function v(t,e,n){var i=Math.abs(e-t)/Math.max(0,n),r=Math.pow(10,Math.floor(Math.log(i)/Math.LN10)),o=i/r;return o>=Qm?r*=10:o>=Zm?r*=5:o>=Km&&(r*=2),e<t?-r:r}function y(t){return Math.ceil(Math.log(t.length)/Math.LN2)+1}function b(){function t(t){var r,o,a=t.length,s=new Array(a);for(r=0;r<a;++r)s[r]=e(t[r],r,t);var l=n(s),c=l[0],u=l[1],h=i(s,c,u);Array.isArray(h)||(h=v(c,u,h),h=p(Math.ceil(c/h)*h,u,h));for(var d=h.length;h[0]<=c;)h.shift(),--d;for(;h[d-1]>u;)h.pop(),--d;var f,g=new Array(d+1);for(r=0;r<=d;++r)f=g[r]=[],f.x0=r>0?h[r-1]:c,f.x1=r<d?h[r]:u;for(r=0;r<a;++r)o=s[r],c<=o&&o<=u&&g[$m(h,o,0,d)].push(t[r]);return g}var e=f,n=h,i=y;return t.value=function(n){return arguments.length?(e="function"==typeof n?n:d(n),t):e},t.domain=function(e){return arguments.length?(n="function"==typeof e?e:d([e[0],e[1]]),t):n},t.thresholds=function(e){return arguments.length?(i="function"==typeof e?e:d(Array.isArray(e)?Xm.call(e):e),t):i},t}function x(t,e,n){if(null==n&&(n=l),i=t.length){if((e=+e)<=0||i<2)return+n(t[0],0,t);if(e>=1)return+n(t[i-1],i-1,t);var i,r=(i-1)*e,o=Math.floor(r),a=+n(t[o],o,t);return a+(+n(t[o+1],o+1,t)-a)*(r-o)}}function w(t,n,i){return t=Ym.call(t,l).sort(e),Math.ceil((i-n)/(2*(x(t,.75)-x(t,.25))*Math.pow(t.length,-1/3)))}function _(t,e,n){return Math.ceil((n-e)/(3.5*u(t)*Math.pow(t.length,-1/3)))}function S(t,e){var n,i,r=t.length,o=-1;if(null==e){for(;++o<r;)if(null!=(n=t[o])&&n>=n)for(i=n;++o<r;)null!=(n=t[o])&&n>i&&(i=n)}else for(;++o<r;)if(null!=(n=e(t[o],o,t))&&n>=n)for(i=n;++o<r;)null!=(n=e(t[o],o,t))&&n>i&&(i=n);return i}function C(t,e){var n,i=t.length,r=i,o=-1,a=0;if(null==e)for(;++o<i;)isNaN(n=l(t[o]))?--r:a+=n;else for(;++o<i;)isNaN(n=l(e(t[o],o,t)))?--r:a+=n;if(r)return a/r}function T(t,n){var i,r=t.length,o=-1,a=[];if(null==n)for(;++o<r;)isNaN(i=l(t[o]))||a.push(i);else for(;++o<r;)isNaN(i=l(n(t[o],o,t)))||a.push(i);return x(a.sort(e),.5)}function k(t){for(var e,n,i,r=t.length,o=-1,a=0;++o<r;)a+=t[o].length;for(n=new Array(a);--r>=0;)for(i=t[r],e=i.length;--e>=0;)n[--a]=i[e];return n}function A(t,e){var n,i,r=t.length,o=-1;if(null==e){for(;++o<r;)if(null!=(n=t[o])&&n>=n)for(i=n;++o<r;)null!=(n=t[o])&&i>n&&(i=n)}else for(;++o<r;)if(null!=(n=e(t[o],o,t))&&n>=n)for(i=n;++o<r;)null!=(n=e(t[o],o,t))&&i>n&&(i=n);return i}function M(t,e){for(var n=e.length,i=new Array(n);n--;)i[n]=t[e[n]];return i}function E(t,n){if(i=t.length){var i,r,o=0,a=0,s=t[a];for(null==n&&(n=e);++o<i;)(n(r=t[o],s)<0||0!==n(s,s))&&(s=r,a=o);return 0===n(s,s)?a:void 0}}function L(t,e,n){for(var i,r,o=(null==n?t.length:n)-(e=null==e?0:+e);o;)r=Math.random()*o--|0,i=t[o+e],t[o+e]=t[r+e],t[r+e]=i;return t}function P(t,e){var n,i=t.length,r=-1,o=0;if(null==e)for(;++r<i;)(n=+t[r])&&(o+=n);else for(;++r<i;)(n=+e(t[r],r,t))&&(o+=n);return o}function D(t){if(!(r=t.length))return[];for(var e=-1,n=A(t,N),i=new Array(n);++e<n;)for(var r,o=-1,a=i[e]=new Array(r);++o<r;)a[o]=t[o][e];return i}function N(t){return t.length}function O(){return D(arguments)}function R(t){return t}function I(t){return"translate("+(t+.5)+",0)"}function F(t){return"translate(0,"+(t+.5)+")"}function j(t){return function(e){return+t(e)}}function H(t){var e=Math.max(0,t.bandwidth()-1)/2;return t.round()&&(e=Math.round(e)),function(n){return+t(n)+e}}function z(){return!this.__axis}function V(t,e){function n(n){var d=null==r?e.ticks?e.ticks.apply(e,i):e.domain():r,f=null==o?e.tickFormat?e.tickFormat.apply(e,i):R:o,p=Math.max(a,0)+l,g=e.range(),m=+g[0]+.5,v=+g[g.length-1]+.5,y=(e.bandwidth?H:j)(e.copy()),b=n.selection?n.selection():n,x=b.selectAll(".domain").data([null]),w=b.selectAll(".tick").data(d,e).order(),_=w.exit(),S=w.enter().append("g").attr("class","tick"),C=w.select("line"),T=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),w=w.merge(S),C=C.merge(S.append("line").attr("stroke","currentColor").attr(u+"2",c*a)),T=T.merge(S.append("text").attr("fill","currentColor").attr(u,c*p).attr("dy",t===tv?"0em":t===nv?"0.71em":"0.32em")),n!==b&&(x=x.transition(n),w=w.transition(n),C=C.transition(n),T=T.transition(n),_=_.transition(n).attr("opacity",rv).attr("transform",function(t){return isFinite(t=y(t))?h(t):this.getAttribute("transform")}),S.attr("opacity",rv).attr("transform",function(t){var e=this.parentNode.__axis;return h(e&&isFinite(e=e(t))?e:y(t))})),_.remove(),x.attr("d",t===iv||t==ev?s?"M"+c*s+","+m+"H0.5V"+v+"H"+c*s:"M0.5,"+m+"V"+v:s?"M"+m+","+c*s+"V0.5H"+v+"V"+c*s:"M"+m+",0.5H"+v),w.attr("opacity",1).attr("transform",function(t){return h(y(t))}),C.attr(u+"2",c*a),T.attr(u,c*p).text(f),b.filter(z).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===ev?"start":t===iv?"end":"middle"),b.each(function(){this.__axis=y})}var i=[],r=null,o=null,a=6,s=6,l=3,c=t===tv||t===iv?-1:1,u=t===iv||t===ev?"x":"y",h=t===tv||t===nv?I:F;return n.scale=function(t){return arguments.length?(e=t,n):e},n.ticks=function(){return i=Jm.call(arguments),n},n.tickArguments=function(t){return arguments.length?(i=null==t?[]:Jm.call(t),n):i.slice()},n.tickValues=function(t){return arguments.length?(r=null==t?null:Jm.call(t),n):r&&r.slice()},n.tickFormat=function(t){return arguments.length?(o=t,n):o},n.tickSize=function(t){return arguments.length?(a=s=+t,n):a},n.tickSizeInner=function(t){return arguments.length?(a=+t,n):a},n.tickSizeOuter=function(t){return arguments.length?(s=+t,n):s},n.tickPadding=function(t){return arguments.length?(l=+t,n):l},n}function q(t){return V(tv,t)}function B(t){return V(ev,t)}function G(t){return V(nv,t)}function $(t){return V(iv,t)}function W(){for(var t,e=0,n=arguments.length,i={};e<n;++e){if(!(t=arguments[e]+"")||t in i)throw new Error("illegal type: "+t);i[t]=[]}return new U(i)}function U(t){this._=t}function X(t,e){return t.trim().split(/^|\s+/).map(function(t){var n="",i=t.indexOf(".");if(i>=0&&(n=t.slice(i+1),t=t.slice(0,i)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}})}function Y(t,e){for(var n,i=0,r=t.length;i<r;++i)if((n=t[i]).name===e)return n.value}function Q(t,e,n){for(var i=0,r=t.length;i<r;++i)if(t[i].name===e){t[i]=ov,t=t.slice(0,i).concat(t.slice(i+1));break}return null!=n&&t.push({name:e,value:n}),t}function Z(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),sv.hasOwnProperty(e)?{space:sv[e],local:t}:t}function K(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===av&&e.documentElement.namespaceURI===av?e.createElement(t):e.createElementNS(n,t)}}function J(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function tt(t){var e=Z(t);return(e.local?J:K)(e)}function et(){}function nt(t){return null==t?et:function(){return this.querySelector(t)}}function it(t){"function"!=typeof t&&(t=nt(t));for(var e=this._groups,n=e.length,i=new Array(n),r=0;r<n;++r)for(var o,a,s=e[r],l=s.length,c=i[r]=new Array(l),u=0;u<l;++u)(o=s[u])&&(a=t.call(o,o.__data__,u,s))&&("__data__"in o&&(a.__data__=o.__data__),c[u]=a);return new De(i,this._parents)}function rt(){return[]}function ot(t){return null==t?rt:function(){return this.querySelectorAll(t)}}function at(t){"function"!=typeof t&&(t=ot(t));for(var e=this._groups,n=e.length,i=[],r=[],o=0;o<n;++o)for(var a,s=e[o],l=s.length,c=0;c<l;++c)(a=s[c])&&(i.push(t.call(a,a.__data__,c,s)),r.push(a));return new De(i,r)}function st(t){return function(){return this.matches(t)}}function lt(t){"function"!=typeof t&&(t=st(t));for(var e=this._groups,n=e.length,i=new Array(n),r=0;r<n;++r)for(var o,a=e[r],s=a.length,l=i[r]=[],c=0;c<s;++c)(o=a[c])&&t.call(o,o.__data__,c,a)&&l.push(o);return new De(i,this._parents)}function ct(t){return new Array(t.length)}function ut(){return new De(this._enter||this._groups.map(ct),this._parents)}function ht(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function dt(t){return function(){return t}}function ft(t,e,n,i,r,o){for(var a,s=0,l=e.length,c=o.length;s<c;++s)(a=e[s])?(a.__data__=o[s],i[s]=a):n[s]=new ht(t,o[s]);for(;s<l;++s)(a=e[s])&&(r[s]=a)}function pt(t,e,n,i,r,o,a){var s,l,c,u={},h=e.length,d=o.length,f=new Array(h);for(s=0;s<h;++s)(l=e[s])&&(f[s]=c=lv+a.call(l,l.__data__,s,e),c in u?r[s]=l:u[c]=l);for(s=0;s<d;++s)c=lv+a.call(t,o[s],s,o),(l=u[c])?(i[s]=l,l.__data__=o[s],u[c]=null):n[s]=new ht(t,o[s]);for(s=0;s<h;++s)(l=e[s])&&u[f[s]]===l&&(r[s]=l)}function gt(t,e){if(!t)return f=new Array(this.size()),c=-1,this.each(function(t){f[++c]=t}),f;var n=e?pt:ft,i=this._parents,r=this._groups;"function"!=typeof t&&(t=dt(t));for(var o=r.length,a=new Array(o),s=new Array(o),l=new Array(o),c=0;c<o;++c){var u=i[c],h=r[c],d=h.length,f=t.call(u,u&&u.__data__,c,i),p=f.length,g=s[c]=new Array(p),m=a[c]=new Array(p);n(u,h,g,m,l[c]=new Array(d),f,e);for(var v,y,b=0,x=0;b<p;++b)if(v=g[b]){for(b>=x&&(x=b+1);!(y=m[x])&&++x<p;);v._next=y||null}}return a=new De(a,i),a._enter=s,a._exit=l,a}function mt(){return new De(this._exit||this._groups.map(ct),this._parents)}function vt(t,e,n){var i=this.enter(),r=this,o=this.exit();return i="function"==typeof t?t(i):i.append(t+""),null!=e&&(r=e(r)),null==n?o.remove():n(o),i&&r?i.merge(r).order():r}function yt(t){for(var e=this._groups,n=t._groups,i=e.length,r=n.length,o=Math.min(i,r),a=new Array(i),s=0;s<o;++s)for(var l,c=e[s],u=n[s],h=c.length,d=a[s]=new Array(h),f=0;f<h;++f)(l=c[f]||u[f])&&(d[f]=l);for(;s<i;++s)a[s]=e[s];return new De(a,this._parents)}function bt(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var i,r=t[e],o=r.length-1,a=r[o];--o>=0;)(i=r[o])&&(a&&4^i.compareDocumentPosition(a)&&a.parentNode.insertBefore(i,a),a=i);return this}function xt(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=wt);for(var n=this._groups,i=n.length,r=new Array(i),o=0;o<i;++o){for(var a,s=n[o],l=s.length,c=r[o]=new Array(l),u=0;u<l;++u)(a=s[u])&&(c[u]=a);c.sort(e)}return new De(r,this._parents).order()}function wt(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function _t(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function St(){var t=new Array(this.size()),e=-1;return this.each(function(){t[++e]=this}),t}function Ct(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var i=t[e],r=0,o=i.length;r<o;++r){var a=i[r];if(a)return a}return null}function Tt(){var t=0;return this.each(function(){++t}),t}function kt(){return!this.node()}function At(t){for(var e=this._groups,n=0,i=e.length;n<i;++n)for(var r,o=e[n],a=0,s=o.length;a<s;++a)(r=o[a])&&t.call(r,r.__data__,a,o);return this}function Mt(t){return function(){this.removeAttribute(t)}}function Et(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Lt(t,e){return function(){this.setAttribute(t,e)}}function Pt(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function Dt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function Nt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function Ot(t,e){var n=Z(t);if(arguments.length<2){var i=this.node();return n.local?i.getAttributeNS(n.space,n.local):i.getAttribute(n)}return this.each((null==e?n.local?Et:Mt:"function"==typeof e?n.local?Nt:Dt:n.local?Pt:Lt)(n,e))}function Rt(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function It(t){return function(){this.style.removeProperty(t)}}function Ft(t,e,n){return function(){this.style.setProperty(t,e,n)}}function jt(t,e,n){return function(){var i=e.apply(this,arguments);null==i?this.style.removeProperty(t):this.style.setProperty(t,i,n)}}function Ht(t,e,n){return arguments.length>1?this.each((null==e?It:"function"==typeof e?jt:Ft)(t,e,null==n?"":n)):zt(this.node(),t)}function zt(t,e){return t.style.getPropertyValue(e)||Rt(t).getComputedStyle(t,null).getPropertyValue(e)}function Vt(t){return function(){delete this[t]}}function qt(t,e){return function(){this[t]=e}}function Bt(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function Gt(t,e){return arguments.length>1?this.each((null==e?Vt:"function"==typeof e?Bt:qt)(t,e)):this.node()[t]}function $t(t){return t.trim().split(/^|\s+/)}function Wt(t){return t.classList||new Ut(t)}function Ut(t){this._node=t,this._names=$t(t.getAttribute("class")||"")}function Xt(t,e){for(var n=Wt(t),i=-1,r=e.length;++i<r;)n.add(e[i])}function Yt(t,e){for(var n=Wt(t),i=-1,r=e.length;++i<r;)n.remove(e[i])}function Qt(t){return function(){Xt(this,t)}}function Zt(t){return function(){Yt(this,t)}}function Kt(t,e){return function(){(e.apply(this,arguments)?Xt:Yt)(this,t)}}function Jt(t,e){var n=$t(t+"");if(arguments.length<2){for(var i=Wt(this.node()),r=-1,o=n.length;++r<o;)if(!i.contains(n[r]))return!1;return!0}return this.each(("function"==typeof e?Kt:e?Qt:Zt)(n,e))}function te(){this.textContent=""}function ee(t){return function(){this.textContent=t}}function ne(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function ie(t){return arguments.length?this.each(null==t?te:("function"==typeof t?ne:ee)(t)):this.node().textContent}function re(){this.innerHTML=""}function oe(t){return function(){this.innerHTML=t}}function ae(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function se(t){return arguments.length?this.each(null==t?re:("function"==typeof t?ae:oe)(t)):this.node().innerHTML}function le(){this.nextSibling&&this.parentNode.appendChild(this)}function ce(){return this.each(le)}function ue(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function he(){return this.each(ue)}function de(t){var e="function"==typeof t?t:tt(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}function fe(){return null}function pe(t,e){var n="function"==typeof t?t:tt(t),i=null==e?fe:"function"==typeof e?e:nt(e);return this.select(function(){return this.insertBefore(n.apply(this,arguments),i.apply(this,arguments)||null)})}function ge(){var t=this.parentNode;t&&t.removeChild(this)}function me(){return this.each(ge)}function ve(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function ye(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}function be(t){return this.select(t?ye:ve)}function xe(t){return arguments.length?this.property("__data__",t):this.node().__data__}function we(t,e,n){return t=_e(t,e,n),function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t.call(this,e)}}function _e(e,n,i){return function(r){var o=t.event;t.event=r;try{e.call(this,this.__data__,n,i)}finally{t.event=o}}}function Se(t){return t.trim().split(/^|\s+/).map(function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}})}function Ce(t){return function(){var e=this.__on;if(e){for(var n,i=0,r=-1,o=e.length;i<o;++i)n=e[i],t.type&&n.type!==t.type||n.name!==t.name?e[++r]=n:this.removeEventListener(n.type,n.listener,n.capture);++r?e.length=r:delete this.__on}}}function Te(t,e,n){
 var i=cv.hasOwnProperty(t.type)?we:_e;return function(r,o,a){var s,l=this.__on,c=i(e,o,a);if(l)for(var u=0,h=l.length;u<h;++u)if((s=l[u]).type===t.type&&s.name===t.name)return this.removeEventListener(s.type,s.listener,s.capture),this.addEventListener(s.type,s.listener=c,s.capture=n),void(s.value=e);this.addEventListener(t.type,c,n),s={type:t.type,name:t.name,value:e,listener:c,capture:n},l?l.push(s):this.__on=[s]}}function ke(t,e,n){var i,r,o=Se(t+""),a=o.length;{if(!(arguments.length<2)){for(s=e?Te:Ce,null==n&&(n=!1),i=0;i<a;++i)this.each(s(o[i],e,n));return this}var s=this.node().__on;if(s)for(var l,c=0,u=s.length;c<u;++c)for(i=0,l=s[c];i<a;++i)if((r=o[i]).type===l.type&&r.name===l.name)return l.value}}function Ae(e,n,i,r){var o=t.event;e.sourceEvent=t.event,t.event=e;try{return n.apply(i,r)}finally{t.event=o}}function Me(t,e,n){var i=Rt(t),r=i.CustomEvent;"function"==typeof r?r=new r(e,n):(r=i.document.createEvent("Event"),n?(r.initEvent(e,n.bubbles,n.cancelable),r.detail=n.detail):r.initEvent(e,!1,!1)),t.dispatchEvent(r)}function Ee(t,e){return function(){return Me(this,t,e)}}function Le(t,e){return function(){return Me(this,t,e.apply(this,arguments))}}function Pe(t,e){return this.each(("function"==typeof e?Le:Ee)(t,e))}function De(t,e){this._groups=t,this._parents=e}function Ne(){return new De([[document.documentElement]],uv)}function Oe(t){return"string"==typeof t?new De([[document.querySelector(t)]],[document.documentElement]):new De([[t]],uv)}function Re(t){return Oe(tt(t).call(document.documentElement))}function Ie(){return new Fe}function Fe(){this._="@"+(++hv).toString(36)}function je(){for(var e,n=t.event;e=n.sourceEvent;)n=e;return n}function He(t,e){var n=t.ownerSVGElement||t;if(n.createSVGPoint){var i=n.createSVGPoint();return i.x=e.clientX,i.y=e.clientY,i=i.matrixTransform(t.getScreenCTM().inverse()),[i.x,i.y]}var r=t.getBoundingClientRect();return[e.clientX-r.left-t.clientLeft,e.clientY-r.top-t.clientTop]}function ze(t){var e=je();return e.changedTouches&&(e=e.changedTouches[0]),He(t,e)}function Ve(t){return"string"==typeof t?new De([document.querySelectorAll(t)],[document.documentElement]):new De([null==t?[]:t],uv)}function qe(t,e,n){arguments.length<3&&(n=e,e=je().changedTouches);for(var i,r=0,o=e?e.length:0;r<o;++r)if((i=e[r]).identifier===n)return He(t,i);return null}function Be(t,e){null==e&&(e=je().touches);for(var n=0,i=e?e.length:0,r=new Array(i);n<i;++n)r[n]=He(t,e[n]);return r}function Ge(){t.event.stopImmediatePropagation()}function $e(){t.event.preventDefault(),t.event.stopImmediatePropagation()}function We(t){var e=t.document.documentElement,n=Oe(t).on("dragstart.drag",$e,!0);"onselectstart"in e?n.on("selectstart.drag",$e,!0):(e.__noselect=e.style.MozUserSelect,e.style.MozUserSelect="none")}function Ue(t,e){var n=t.document.documentElement,i=Oe(t).on("dragstart.drag",null);e&&(i.on("click.drag",$e,!0),setTimeout(function(){i.on("click.drag",null)},0)),"onselectstart"in n?i.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}function Xe(t){return function(){return t}}function Ye(t,e,n,i,r,o,a,s,l,c){this.target=t,this.type=e,this.subject=n,this.identifier=i,this.active=r,this.x=o,this.y=a,this.dx=s,this.dy=l,this._=c}function Qe(){return!t.event.button}function Ze(){return this.parentNode}function Ke(e){return null==e?{x:t.event.x,y:t.event.y}:e}function Je(){return"ontouchstart"in this}function tn(){function e(t){t.on("mousedown.drag",n).filter(m).on("touchstart.drag",o).on("touchmove.drag",a).on("touchend.drag touchcancel.drag",s).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function n(){if(!d&&f.apply(this,arguments)){var e=l("mouse",p.apply(this,arguments),ze,this,arguments);e&&(Oe(t.event.view).on("mousemove.drag",i,!0).on("mouseup.drag",r,!0),We(t.event.view),Ge(),h=!1,c=t.event.clientX,u=t.event.clientY,e("start"))}}function i(){if($e(),!h){var e=t.event.clientX-c,n=t.event.clientY-u;h=e*e+n*n>x}v.mouse("drag")}function r(){Oe(t.event.view).on("mousemove.drag mouseup.drag",null),Ue(t.event.view,h),$e(),v.mouse("end")}function o(){if(f.apply(this,arguments)){var e,n,i=t.event.changedTouches,r=p.apply(this,arguments),o=i.length;for(e=0;e<o;++e)(n=l(i[e].identifier,r,qe,this,arguments))&&(Ge(),n("start"))}}function a(){var e,n,i=t.event.changedTouches,r=i.length;for(e=0;e<r;++e)(n=v[i[e].identifier])&&($e(),n("drag"))}function s(){var e,n,i=t.event.changedTouches,r=i.length;for(d&&clearTimeout(d),d=setTimeout(function(){d=null},500),e=0;e<r;++e)(n=v[i[e].identifier])&&(Ge(),n("end"))}function l(n,i,r,o,a){var s,l,c,u=r(i,n),h=y.copy();if(Ae(new Ye(e,"beforestart",s,n,b,u[0],u[1],0,0,h),function(){return null!=(t.event.subject=s=g.apply(o,a))&&(l=s.x-u[0]||0,c=s.y-u[1]||0,!0)}))return function t(d){var f,p=u;switch(d){case"start":v[n]=t,f=b++;break;case"end":delete v[n],--b;case"drag":u=r(i,n),f=b}Ae(new Ye(e,d,s,n,f,u[0]+l,u[1]+c,u[0]-p[0],u[1]-p[1],h),h.apply,h,[d,o,a])}}var c,u,h,d,f=Qe,p=Ze,g=Ke,m=Je,v={},y=W("start","drag","end"),b=0,x=0;return e.filter=function(t){return arguments.length?(f="function"==typeof t?t:Xe(!!t),e):f},e.container=function(t){return arguments.length?(p="function"==typeof t?t:Xe(t),e):p},e.subject=function(t){return arguments.length?(g="function"==typeof t?t:Xe(t),e):g},e.touchable=function(t){return arguments.length?(m="function"==typeof t?t:Xe(!!t),e):m},e.on=function(){var t=y.on.apply(y,arguments);return t===y?e:t},e.clickDistance=function(t){return arguments.length?(x=(t=+t)*t,e):Math.sqrt(x)},e}function en(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function nn(t,e){var n=Object.create(t.prototype);for(var i in e)n[i]=e[i];return n}function rn(){}function on(t){var e;return t=(t+"").trim().toLowerCase(),(e=gv.exec(t))?(e=parseInt(e[1],16),new un(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1)):(e=mv.exec(t))?an(parseInt(e[1],16)):(e=vv.exec(t))?new un(e[1],e[2],e[3],1):(e=yv.exec(t))?new un(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=bv.exec(t))?sn(e[1],e[2],e[3],e[4]):(e=xv.exec(t))?sn(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=wv.exec(t))?dn(e[1],e[2]/100,e[3]/100,1):(e=_v.exec(t))?dn(e[1],e[2]/100,e[3]/100,e[4]):Sv.hasOwnProperty(t)?an(Sv[t]):"transparent"===t?new un(NaN,NaN,NaN,0):null}function an(t){return new un(t>>16&255,t>>8&255,255&t,1)}function sn(t,e,n,i){return i<=0&&(t=e=n=NaN),new un(t,e,n,i)}function ln(t){return t instanceof rn||(t=on(t)),t?(t=t.rgb(),new un(t.r,t.g,t.b,t.opacity)):new un}function cn(t,e,n,i){return 1===arguments.length?ln(t):new un(t,e,n,null==i?1:i)}function un(t,e,n,i){this.r=+t,this.g=+e,this.b=+n,this.opacity=+i}function hn(t){return t=Math.max(0,Math.min(255,Math.round(t)||0)),(t<16?"0":"")+t.toString(16)}function dn(t,e,n,i){return i<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new gn(t,e,n,i)}function fn(t){if(t instanceof gn)return new gn(t.h,t.s,t.l,t.opacity);if(t instanceof rn||(t=on(t)),!t)return new gn;if(t instanceof gn)return t;t=t.rgb();var e=t.r/255,n=t.g/255,i=t.b/255,r=Math.min(e,n,i),o=Math.max(e,n,i),a=NaN,s=o-r,l=(o+r)/2;return s?(a=e===o?(n-i)/s+6*(n<i):n===o?(i-e)/s+2:(e-n)/s+4,s/=l<.5?o+r:2-o-r,a*=60):s=l>0&&l<1?0:a,new gn(a,s,l,t.opacity)}function pn(t,e,n,i){return 1===arguments.length?fn(t):new gn(t,e,n,null==i?1:i)}function gn(t,e,n,i){this.h=+t,this.s=+e,this.l=+n,this.opacity=+i}function mn(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function vn(t){if(t instanceof xn)return new xn(t.l,t.a,t.b,t.opacity);if(t instanceof Mn){if(isNaN(t.h))return new xn(t.l,0,0,t.opacity);var e=t.h*Cv;return new xn(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}t instanceof un||(t=ln(t));var n,i,r=Cn(t.r),o=Cn(t.g),a=Cn(t.b),s=wn((.2225045*r+.7168786*o+.0606169*a)/Av);return r===o&&o===a?n=i=s:(n=wn((.4360747*r+.3850649*o+.1430804*a)/kv),i=wn((.0139322*r+.0971045*o+.7141733*a)/Mv)),new xn(116*s-16,500*(n-s),200*(s-i),t.opacity)}function yn(t,e){return new xn(t,0,0,null==e?1:e)}function bn(t,e,n,i){return 1===arguments.length?vn(t):new xn(t,e,n,null==i?1:i)}function xn(t,e,n,i){this.l=+t,this.a=+e,this.b=+n,this.opacity=+i}function wn(t){return t>Dv?Math.pow(t,1/3):t/Pv+Ev}function _n(t){return t>Lv?t*t*t:Pv*(t-Ev)}function Sn(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Cn(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Tn(t){if(t instanceof Mn)return new Mn(t.h,t.c,t.l,t.opacity);if(t instanceof xn||(t=vn(t)),0===t.a&&0===t.b)return new Mn(NaN,0,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Tv;return new Mn(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function kn(t,e,n,i){return 1===arguments.length?Tn(t):new Mn(n,e,t,null==i?1:i)}function An(t,e,n,i){return 1===arguments.length?Tn(t):new Mn(t,e,n,null==i?1:i)}function Mn(t,e,n,i){this.h=+t,this.c=+e,this.l=+n,this.opacity=+i}function En(t){if(t instanceof Pn)return new Pn(t.h,t.s,t.l,t.opacity);t instanceof un||(t=ln(t));var e=t.r/255,n=t.g/255,i=t.b/255,r=(zv*i+jv*e-Hv*n)/(zv+jv-Hv),o=i-r,a=(Fv*(n-r)-Rv*o)/Iv,s=Math.sqrt(a*a+o*o)/(Fv*r*(1-r)),l=s?Math.atan2(a,o)*Tv-120:NaN;return new Pn(l<0?l+360:l,s,r,t.opacity)}function Ln(t,e,n,i){return 1===arguments.length?En(t):new Pn(t,e,n,null==i?1:i)}function Pn(t,e,n,i){this.h=+t,this.s=+e,this.l=+n,this.opacity=+i}function Dn(t,e,n,i,r){var o=t*t,a=o*t;return((1-3*t+3*o-a)*e+(4-6*o+3*a)*n+(1+3*t+3*o-3*a)*i+a*r)/6}function Nn(t){var e=t.length-1;return function(n){var i=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),r=t[i],o=t[i+1],a=i>0?t[i-1]:2*r-o,s=i<e-1?t[i+2]:2*o-r;return Dn((n-i/e)*e,a,r,o,s)}}function On(t){var e=t.length;return function(n){var i=Math.floor(((n%=1)<0?++n:n)*e),r=t[(i+e-1)%e],o=t[i%e],a=t[(i+1)%e],s=t[(i+2)%e];return Dn((n-i/e)*e,r,o,a,s)}}function Rn(t){return function(){return t}}function In(t,e){return function(n){return t+n*e}}function Fn(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(i){return Math.pow(t+i*e,n)}}function jn(t,e){var n=e-t;return n?In(t,n>180||n<-180?n-360*Math.round(n/360):n):Rn(isNaN(t)?e:t)}function Hn(t){return 1==(t=+t)?zn:function(e,n){return n-e?Fn(e,n,t):Rn(isNaN(e)?n:e)}}function zn(t,e){var n=e-t;return n?In(t,n):Rn(isNaN(t)?e:t)}function Vn(t){return function(e){var n,i,r=e.length,o=new Array(r),a=new Array(r),s=new Array(r);for(n=0;n<r;++n)i=cn(e[n]),o[n]=i.r||0,a[n]=i.g||0,s[n]=i.b||0;return o=t(o),a=t(a),s=t(s),i.opacity=1,function(t){return i.r=o(t),i.g=a(t),i.b=s(t),i+""}}}function qn(t,e){var n,i=e?e.length:0,r=t?Math.min(i,t.length):0,o=new Array(r),a=new Array(i);for(n=0;n<r;++n)o[n]=Yn(t[n],e[n]);for(;n<i;++n)a[n]=e[n];return function(t){for(n=0;n<r;++n)a[n]=o[n](t);return a}}function Bn(t,e){var n=new Date;return t=+t,e-=t,function(i){return n.setTime(t+e*i),n}}function Gn(t,e){return t=+t,e-=t,function(n){return t+e*n}}function $n(t,e){var n,i={},r={};null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={});for(n in e)n in t?i[n]=Yn(t[n],e[n]):r[n]=e[n];return function(t){for(n in i)r[n]=i[n](t);return r}}function Wn(t){return function(){return t}}function Un(t){return function(e){return t(e)+""}}function Xn(t,e){var n,i,r,o=Qv.lastIndex=Zv.lastIndex=0,a=-1,s=[],l=[];for(t+="",e+="";(n=Qv.exec(t))&&(i=Zv.exec(e));)(r=i.index)>o&&(r=e.slice(o,r),s[a]?s[a]+=r:s[++a]=r),(n=n[0])===(i=i[0])?s[a]?s[a]+=i:s[++a]=i:(s[++a]=null,l.push({i:a,x:Gn(n,i)})),o=Zv.lastIndex;return o<e.length&&(r=e.slice(o),s[a]?s[a]+=r:s[++a]=r),s.length<2?l[0]?Un(l[0].x):Wn(e):(e=l.length,function(t){for(var n,i=0;i<e;++i)s[(n=l[i]).i]=n.x(t);return s.join("")})}function Yn(t,e){var n,i=typeof e;return null==e||"boolean"===i?Rn(e):("number"===i?Gn:"string"===i?(n=on(e))?(e=n,Uv):Xn:e instanceof on?Uv:e instanceof Date?Bn:Array.isArray(e)?qn:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?$n:Gn)(t,e)}function Qn(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}function Zn(t,e){var n=jn(+t,+e);return function(t){var e=n(t);return e-360*Math.floor(e/360)}}function Kn(t,e){return t=+t,e-=t,function(n){return Math.round(t+e*n)}}function Jn(t,e,n,i,r,o){var a,s,l;return(a=Math.sqrt(t*t+e*e))&&(t/=a,e/=a),(l=t*n+e*i)&&(n-=t*l,i-=e*l),(s=Math.sqrt(n*n+i*i))&&(n/=s,i/=s,l/=s),t*i<e*n&&(t=-t,e=-e,l=-l,a=-a),{translateX:r,translateY:o,rotate:Math.atan2(e,t)*Kv,skewX:Math.atan(l)*Kv,scaleX:a,scaleY:s}}function ti(t){return"none"===t?Jv:(Vv||(Vv=document.createElement("DIV"),qv=document.documentElement,Bv=document.defaultView),Vv.style.transform=t,t=Bv.getComputedStyle(qv.appendChild(Vv),null).getPropertyValue("transform"),qv.removeChild(Vv),t=t.slice(7,-1).split(","),Jn(+t[0],+t[1],+t[2],+t[3],+t[4],+t[5]))}function ei(t){return null==t?Jv:(Gv||(Gv=document.createElementNS("http://www.w3.org/2000/svg","g")),Gv.setAttribute("transform",t),(t=Gv.transform.baseVal.consolidate())?(t=t.matrix,Jn(t.a,t.b,t.c,t.d,t.e,t.f)):Jv)}function ni(t,e,n,i){function r(t){return t.length?t.pop()+" ":""}function o(t,i,r,o,a,s){if(t!==r||i!==o){var l=a.push("translate(",null,e,null,n);s.push({i:l-4,x:Gn(t,r)},{i:l-2,x:Gn(i,o)})}else(r||o)&&a.push("translate("+r+e+o+n)}function a(t,e,n,o){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),o.push({i:n.push(r(n)+"rotate(",null,i)-2,x:Gn(t,e)})):e&&n.push(r(n)+"rotate("+e+i)}function s(t,e,n,o){t!==e?o.push({i:n.push(r(n)+"skewX(",null,i)-2,x:Gn(t,e)}):e&&n.push(r(n)+"skewX("+e+i)}function l(t,e,n,i,o,a){if(t!==n||e!==i){var s=o.push(r(o)+"scale(",null,",",null,")");a.push({i:s-4,x:Gn(t,n)},{i:s-2,x:Gn(e,i)})}else 1===n&&1===i||o.push(r(o)+"scale("+n+","+i+")")}return function(e,n){var i=[],r=[];return e=t(e),n=t(n),o(e.translateX,e.translateY,n.translateX,n.translateY,i,r),a(e.rotate,n.rotate,i,r),s(e.skewX,n.skewX,i,r),l(e.scaleX,e.scaleY,n.scaleX,n.scaleY,i,r),e=n=null,function(t){for(var e,n=-1,o=r.length;++n<o;)i[(e=r[n]).i]=e.x(t);return i.join("")}}}function ii(t){return((t=Math.exp(t))+1/t)/2}function ri(t){return((t=Math.exp(t))-1/t)/2}function oi(t){return((t=Math.exp(2*t))-1)/(t+1)}function ai(t,e){var n,i,r=t[0],o=t[1],a=t[2],s=e[0],l=e[1],c=e[2],u=s-r,h=l-o,d=u*u+h*h;if(d<oy)i=Math.log(c/a)/ny,n=function(t){return[r+t*u,o+t*h,a*Math.exp(ny*t*i)]};else{var f=Math.sqrt(d),p=(c*c-a*a+ry*d)/(2*a*iy*f),g=(c*c-a*a-ry*d)/(2*c*iy*f),m=Math.log(Math.sqrt(p*p+1)-p),v=Math.log(Math.sqrt(g*g+1)-g);i=(v-m)/ny,n=function(t){var e=t*i,n=ii(m),s=a/(iy*f)*(n*oi(ny*e+m)-ri(m));return[r+s*u,o+s*h,a*n/ii(ny*e+m)]}}return n.duration=1e3*i,n}function si(t){return function(e,n){var i=t((e=pn(e)).h,(n=pn(n)).h),r=zn(e.s,n.s),o=zn(e.l,n.l),a=zn(e.opacity,n.opacity);return function(t){return e.h=i(t),e.s=r(t),e.l=o(t),e.opacity=a(t),e+""}}}function li(t,e){var n=zn((t=bn(t)).l,(e=bn(e)).l),i=zn(t.a,e.a),r=zn(t.b,e.b),o=zn(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=i(e),t.b=r(e),t.opacity=o(e),t+""}}function ci(t){return function(e,n){var i=t((e=An(e)).h,(n=An(n)).h),r=zn(e.c,n.c),o=zn(e.l,n.l),a=zn(e.opacity,n.opacity);return function(t){return e.h=i(t),e.c=r(t),e.l=o(t),e.opacity=a(t),e+""}}}function ui(t){return function e(n){function i(e,i){var r=t((e=Ln(e)).h,(i=Ln(i)).h),o=zn(e.s,i.s),a=zn(e.l,i.l),s=zn(e.opacity,i.opacity);return function(t){return e.h=r(t),e.s=o(t),e.l=a(Math.pow(t,n)),e.opacity=s(t),e+""}}return n=+n,i.gamma=e,i}(1)}function hi(t,e){for(var n=0,i=e.length-1,r=e[0],o=new Array(i<0?0:i);n<i;)o[n]=t(r,r=e[++n]);return function(t){var e=Math.max(0,Math.min(i-1,Math.floor(t*=i)));return o[e](t-e)}}function di(t,e){for(var n=new Array(e),i=0;i<e;++i)n[i]=t(i/(e-1));return n}function fi(){return vy||(xy(pi),vy=by.now()+yy)}function pi(){vy=0}function gi(){this._call=this._time=this._next=null}function mi(t,e,n){var i=new gi;return i.restart(t,e,n),i}function vi(){fi(),++dy;for(var t,e=$v;e;)(t=vy-e._time)>=0&&e._call.call(null,t),e=e._next;--dy}function yi(){vy=(my=by.now())+yy,dy=fy=0;try{vi()}finally{dy=0,xi(),vy=0}}function bi(){var t=by.now(),e=t-my;e>gy&&(yy-=e,my=t)}function xi(){for(var t,e,n=$v,i=1/0;n;)n._call?(i>n._time&&(i=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:$v=e);Wv=t,wi(i)}function wi(t){if(!dy){fy&&(fy=clearTimeout(fy));t-vy>24?(t<1/0&&(fy=setTimeout(yi,t-by.now()-yy)),py&&(py=clearInterval(py))):(py||(my=by.now(),py=setInterval(bi,gy)),dy=1,xy(yi))}}function _i(t,e,n){var i=new gi;return e=null==e?0:+e,i.restart(function(n){i.stop(),t(n+e)},e,n),i}function Si(t,e,n){var i=new gi,r=e;return null==e?(i.restart(t,e,n),i):(e=+e,n=null==n?fi():+n,i.restart(function o(a){a+=r,i.restart(o,r+=e,n),t(a)},e,n),i)}function Ci(t,e,n,i,r,o){var a=t.__transition;if(a){if(n in a)return}else t.__transition={};Mi(t,n,{name:e,index:i,group:r,on:wy,tween:_y,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:Sy})}function Ti(t,e){var n=Ai(t,e);if(n.state>Sy)throw new Error("too late; already scheduled");return n}function ki(t,e){var n=Ai(t,e);if(n.state>ky)throw new Error("too late; already running");return n}function Ai(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function Mi(t,e,n){function i(t){n.state=Cy,n.timer.restart(r,n.delay,n.time),n.delay<=t&&r(t-n.delay)}function r(i){var c,u,h,d;if(n.state!==Cy)return a();for(c in l)if(d=l[c],d.name===n.name){if(d.state===ky)return _i(r);d.state===Ay?(d.state=Ey,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete l[c]):+c<e&&(d.state=Ey,d.timer.stop(),d.on.call("cancel",t,t.__data__,d.index,d.group),delete l[c])}if(_i(function(){n.state===ky&&(n.state=Ay,n.timer.restart(o,n.delay,n.time),o(i))}),n.state=Ty,n.on.call("start",t,t.__data__,n.index,n.group),n.state===Ty){for(n.state=ky,s=new Array(h=n.tween.length),c=0,u=-1;c<h;++c)(d=n.tween[c].value.call(t,t.__data__,n.index,n.group))&&(s[++u]=d);s.length=u+1}}function o(e){for(var i=e<n.duration?n.ease.call(null,e/n.duration):(n.timer.restart(a),n.state=My,1),r=-1,o=s.length;++r<o;)s[r].call(t,i);n.state===My&&(n.on.call("end",t,t.__data__,n.index,n.group),a())}function a(){n.state=Ey,n.timer.stop(),delete l[e];for(var i in l)return;delete t.__transition}var s,l=t.__transition;l[e]=n,n.timer=mi(i,0,n.time)}function Ei(t,e){var n,i,r,o=t.__transition,a=!0;if(o){e=null==e?null:e+"";for(r in o)(n=o[r]).name===e?(i=n.state>Ty&&n.state<My,n.state=Ey,n.timer.stop(),n.on.call(i?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete o[r]):a=!1;a&&delete t.__transition}}function Li(t){return this.each(function(){Ei(this,t)})}function Pi(t,e){var n,i;return function(){var r=ki(this,t),o=r.tween;if(o!==n){i=n=o;for(var a=0,s=i.length;a<s;++a)if(i[a].name===e){i=i.slice(),i.splice(a,1);break}}r.tween=i}}function Di(t,e,n){var i,r;if("function"!=typeof n)throw new Error;return function(){var o=ki(this,t),a=o.tween;if(a!==i){r=(i=a).slice();for(var s={name:e,value:n},l=0,c=r.length;l<c;++l)if(r[l].name===e){r[l]=s;break}l===c&&r.push(s)}o.tween=r}}function Ni(t,e){var n=this._id;if(t+="",arguments.length<2){for(var i,r=Ai(this.node(),n).tween,o=0,a=r.length;o<a;++o)if((i=r[o]).name===t)return i.value;return null}return this.each((null==e?Pi:Di)(n,t,e))}function Oi(t,e,n){var i=t._id;return t.each(function(){var t=ki(this,i);(t.value||(t.value={}))[e]=n.apply(this,arguments)}),function(t){return Ai(t,i).value[e]}}function Ri(t,e){var n;return("number"==typeof e?Gn:e instanceof on?Uv:(n=on(e))?(e=n,Uv):Xn)(t,e)}function Ii(t){return function(){this.removeAttribute(t)}}function Fi(t){return function(){this.removeAttributeNS(t.space,t.local)}}function ji(t,e,n){var i,r,o=n+"";return function(){var a=this.getAttribute(t);return a===o?null:a===i?r:r=e(i=a,n)}}function Hi(t,e,n){var i,r,o=n+"";return function(){var a=this.getAttributeNS(t.space,t.local);return a===o?null:a===i?r:r=e(i=a,n)}}function zi(t,e,n){var i,r,o;return function(){var a,s,l=n(this);return null==l?void this.removeAttribute(t):(a=this.getAttribute(t),s=l+"",a===s?null:a===i&&s===r?o:(r=s,o=e(i=a,l)))}}function Vi(t,e,n){var i,r,o;return function(){var a,s,l=n(this);return null==l?void this.removeAttributeNS(t.space,t.local):(a=this.getAttributeNS(t.space,t.local),s=l+"",a===s?null:a===i&&s===r?o:(r=s,o=e(i=a,l)))}}function qi(t,e){var n=Z(t),i="transform"===n?ey:Ri;return this.attrTween(t,"function"==typeof e?(n.local?Vi:zi)(n,i,Oi(this,"attr."+t,e)):null==e?(n.local?Fi:Ii)(n):(n.local?Hi:ji)(n,i,e))}function Bi(t,e){return function(n){this.setAttribute(t,e(n))}}function Gi(t,e){return function(n){this.setAttributeNS(t.space,t.local,e(n))}}function $i(t,e){function n(){var n=e.apply(this,arguments);return n!==r&&(i=(r=n)&&Gi(t,n)),i}var i,r;return n._value=e,n}function Wi(t,e){function n(){var n=e.apply(this,arguments);return n!==r&&(i=(r=n)&&Bi(t,n)),i}var i,r;return n._value=e,n}function Ui(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var i=Z(t);return this.tween(n,(i.local?$i:Wi)(i,e))}function Xi(t,e){return function(){Ti(this,t).delay=+e.apply(this,arguments)}}function Yi(t,e){return e=+e,function(){Ti(this,t).delay=e}}function Qi(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Xi:Yi)(e,t)):Ai(this.node(),e).delay}function Zi(t,e){return function(){ki(this,t).duration=+e.apply(this,arguments)}}function Ki(t,e){return e=+e,function(){ki(this,t).duration=e}}function Ji(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Zi:Ki)(e,t)):Ai(this.node(),e).duration}function tr(t,e){if("function"!=typeof e)throw new Error;return function(){ki(this,t).ease=e}}function er(t){var e=this._id;return arguments.length?this.each(tr(e,t)):Ai(this.node(),e).ease}function nr(t){"function"!=typeof t&&(t=st(t));for(var e=this._groups,n=e.length,i=new Array(n),r=0;r<n;++r)for(var o,a=e[r],s=a.length,l=i[r]=[],c=0;c<s;++c)(o=a[c])&&t.call(o,o.__data__,c,a)&&l.push(o);return new kr(i,this._parents,this._name,this._id)}function ir(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,n=t._groups,i=e.length,r=n.length,o=Math.min(i,r),a=new Array(i),s=0;s<o;++s)for(var l,c=e[s],u=n[s],h=c.length,d=a[s]=new Array(h),f=0;f<h;++f)(l=c[f]||u[f])&&(d[f]=l);for(;s<i;++s)a[s]=e[s];return new kr(a,this._parents,this._name,this._id)}function rr(t){return(t+"").trim().split(/^|\s+/).every(function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t})}function or(t,e,n){var i,r,o=rr(e)?Ti:ki;return function(){var a=o(this,t),s=a.on;s!==i&&(r=(i=s).copy()).on(e,n),a.on=r}}function ar(t,e){var n=this._id;return arguments.length<2?Ai(this.node(),n).on.on(t):this.each(or(n,t,e))}function sr(t){return function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}}function lr(){return this.on("end.remove",sr(this._id))}function cr(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=nt(t));for(var i=this._groups,r=i.length,o=new Array(r),a=0;a<r;++a)for(var s,l,c=i[a],u=c.length,h=o[a]=new Array(u),d=0;d<u;++d)(s=c[d])&&(l=t.call(s,s.__data__,d,c))&&("__data__"in s&&(l.__data__=s.__data__),h[d]=l,Ci(h[d],e,n,d,h,Ai(s,n)));return new kr(o,this._parents,e,n)}function ur(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=ot(t));for(var i=this._groups,r=i.length,o=[],a=[],s=0;s<r;++s)for(var l,c=i[s],u=c.length,h=0;h<u;++h)if(l=c[h]){for(var d,f=t.call(l,l.__data__,h,c),p=Ai(l,n),g=0,m=f.length;g<m;++g)(d=f[g])&&Ci(d,e,n,g,f,p);o.push(f),a.push(l)}return new kr(o,a,e,n)}function hr(){return new Ly(this._groups,this._parents)}function dr(t,e){var n,i,r;return function(){var o=zt(this,t),a=(this.style.removeProperty(t),zt(this,t));return o===a?null:o===n&&a===i?r:r=e(n=o,i=a)}}function fr(t){return function(){this.style.removeProperty(t)}}function pr(t,e,n){var i,r,o=n+"";return function(){var a=zt(this,t);return a===o?null:a===i?r:r=e(i=a,n)}}function gr(t,e,n){var i,r,o;return function(){var a=zt(this,t),s=n(this),l=s+"";return null==s&&(this.style.removeProperty(t),l=s=zt(this,t)),a===l?null:a===i&&l===r?o:(r=l,o=e(i=a,s))}}function mr(t,e){var n,i,r,o,a="style."+e,s="end."+a;return function(){var l=ki(this,t),c=l.on,u=null==l.value[a]?o||(o=fr(e)):void 0;c===n&&r===u||(i=(n=c).copy()).on(s,r=u),l.on=i}}function vr(t,e,n){var i="transform"==(t+="")?ty:Ri;return null==e?this.styleTween(t,dr(t,i)).on("end.style."+t,fr(t)):"function"==typeof e?this.styleTween(t,gr(t,i,Oi(this,"style."+t,e))).each(mr(this._id,t)):this.styleTween(t,pr(t,i,e),n).on("end.style."+t,null)}function yr(t,e,n){return function(i){this.style.setProperty(t,e(i),n)}}function br(t,e,n){function i(){var i=e.apply(this,arguments);return i!==o&&(r=(o=i)&&yr(t,i,n)),r}var r,o;return i._value=e,i}function xr(t,e,n){var i="style."+(t+="");if(arguments.length<2)return(i=this.tween(i))&&i._value;if(null==e)return this.tween(i,null);if("function"!=typeof e)throw new Error;return this.tween(i,br(t,e,null==n?"":n))}function wr(t){return function(){this.textContent=t}}function _r(t){return function(){var e=t(this);this.textContent=null==e?"":e}}function Sr(t){return this.tween("text","function"==typeof t?_r(Oi(this,"text",t)):wr(null==t?"":t+""))}function Cr(){for(var t=this._name,e=this._id,n=Mr(),i=this._groups,r=i.length,o=0;o<r;++o)for(var a,s=i[o],l=s.length,c=0;c<l;++c)if(a=s[c]){var u=Ai(a,e);Ci(a,t,n,c,s,{time:u.time+u.delay+u.duration,delay:0,duration:u.duration,ease:u.ease})}return new kr(i,this._parents,t,n)}function Tr(){var t,e,n=this,i=n._id,r=n.size();return new Promise(function(o,a){var s={value:a},l={value:function(){0==--r&&o()}};n.each(function(){var n=ki(this,i),r=n.on;r!==t&&(e=(t=r).copy(),e._.cancel.push(s),e._.interrupt.push(s),e._.end.push(l)),n.on=e})})}function kr(t,e,n,i){this._groups=t,this._parents=e,this._name=n,this._id=i}function Ar(t){return Ne().transition(t)}function Mr(){return++Py}function Er(t){return+t}function Lr(t){return t*t}function Pr(t){return t*(2-t)}function Dr(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}function Nr(t){return t*t*t}function Or(t){return--t*t*t+1}function Rr(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}function Ir(t){return 1-Math.cos(t*Fy)}function Fr(t){return Math.sin(t*Fy)}function jr(t){return(1-Math.cos(Iy*t))/2}function Hr(t){return Math.pow(2,10*t-10)}function zr(t){return 1-Math.pow(2,-10*t)}function Vr(t){return((t*=2)<=1?Math.pow(2,10*t-10):2-Math.pow(2,10-10*t))/2}function qr(t){return 1-Math.sqrt(1-t*t)}function Br(t){return Math.sqrt(1- --t*t)}function Gr(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}function $r(t){return 1-Wr(1-t)}function Wr(t){return(t=+t)<jy?Uy*t*t:t<zy?Uy*(t-=Hy)*t+Vy:t<By?Uy*(t-=qy)*t+Gy:Uy*(t-=$y)*t+Wy}function Ur(t){return((t*=2)<=1?1-Wr(1-t):Wr(t-1)+1)/2}function Xr(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))return eb.time=fi(),eb;return n}function Yr(t){var e,n;t instanceof kr?(e=t._id,t=t._name):(e=Mr(),(n=eb).time=fi(),t=null==t?null:t+"");for(var i=this._groups,r=i.length,o=0;o<r;++o)for(var a,s=i[o],l=s.length,c=0;c<l;++c)(a=s[c])&&Ci(a,t,e,c,s,n||Xr(a,e));return new kr(i,this._parents,t,e)}function Qr(t,e){var n,i,r=t.__transition;if(r){e=null==e?null:e+"";for(i in r)if((n=r[i]).state>Cy&&n.name===e)return new kr([[t]],nb,e,+i)}return null}function Zr(t){return function(){return t}}function Kr(t,e,n){this.target=t,this.type=e,this.selection=n}function Jr(){t.event.stopImmediatePropagation()}function to(){t.event.preventDefault(),t.event.stopImmediatePropagation()}function eo(t){return{type:t}}function no(){return!t.event.button}function io(){var t=this.ownerSVGElement||this;return[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function ro(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function oo(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function ao(t){var e=t.__brush;return e?e.dim.output(e.selection):null}function so(){return uo(sb)}function lo(){return uo(lb)}function co(){return uo(cb)}function uo(e){function n(t){var n=t.property("__brush",s).selectAll(".overlay").data([eo("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",ub.overlay).merge(n).each(function(){var t=ro(this).extent;Oe(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])}),t.selectAll(".selection").data([eo("selection")]).enter().append("rect").attr("class","selection").attr("cursor",ub.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=t.selectAll(".handle").data(e.handles,function(t){return t.type});r.exit().remove(),r.enter().append("rect").attr("class",function(t){return"handle handle--"+t.type}).attr("cursor",function(t){return ub[t.type]}),t.each(i).attr("fill","none").attr("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush touchstart.brush",a)}function i(){var t=Oe(this),e=ro(this).selection;e?(t.selectAll(".selection").style("display",null).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1]),t.selectAll(".handle").style("display",null).attr("x",function(t){return"e"===t.type[t.type.length-1]?e[1][0]-d/2:e[0][0]-d/2}).attr("y",function(t){return"s"===t.type[0]?e[1][1]-d/2:e[0][1]-d/2}).attr("width",function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+d:d}).attr("height",function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+d:d})):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function r(t,e){return t.__brush.emitter||new o(t,e)}function o(t,e){this.that=t,this.args=e,this.state=t.__brush,this.active=0}function a(){function n(){var t=ze(C);!I||_||S||(Math.abs(t[0]-j[0])>Math.abs(t[1]-j[1])?S=!0:_=!0),j=t,w=!0,to(),o()}function o(){var t;switch(b=j[0]-F[0],x=j[1]-F[1],k){case rb:case ib:A&&(b=Math.max(D-h,Math.min(O-g,b)),d=h+b,m=g+b),M&&(x=Math.max(N-f,Math.min(R-v,x)),p=f+x,y=v+x);break;case ob:A<0?(b=Math.max(D-h,Math.min(O-h,b)),d=h+b,m=g):A>0&&(b=Math.max(D-g,Math.min(O-g,b)),d=h,m=g+b),M<0?(x=Math.max(N-f,Math.min(R-f,x)),p=f+x,y=v):M>0&&(x=Math.max(N-v,Math.min(R-v,x)),p=f,y=v+x);break;case ab:A&&(d=Math.max(D,Math.min(O,h-b*A)),m=Math.max(D,Math.min(O,g+b*A))),M&&(p=Math.max(N,Math.min(R,f-x*M)),y=Math.max(N,Math.min(R,v+x*M)))}m<d&&(A*=-1,t=h,h=g,g=t,t=d,d=m,m=t,T in hb&&V.attr("cursor",ub[T=hb[T]])),y<p&&(M*=-1,t=f,f=v,v=t,t=p,p=y,y=t,T in db&&V.attr("cursor",ub[T=db[T]])),E.selection&&(P=E.selection),_&&(d=P[0][0],m=P[1][0]),S&&(p=P[0][1],y=P[1][1]),P[0][0]===d&&P[0][1]===p&&P[1][0]===m&&P[1][1]===y||(E.selection=[[d,p],[m,y]],i.call(C),H.brush())}function a(){if(Jr(),t.event.touches){if(t.event.touches.length)return;l&&clearTimeout(l),l=setTimeout(function(){l=null},500),z.on("touchmove.brush touchend.brush touchcancel.brush",null)}else Ue(t.event.view,w),q.on("keydown.brush keyup.brush mousemove.brush mouseup.brush",null);z.attr("pointer-events","all"),V.attr("cursor",ub.overlay),E.selection&&(P=E.selection),oo(P)&&(E.selection=null,i.call(C)),H.end()}function s(){switch(t.event.keyCode){case 16:I=A&&M;break;case 18:k===ob&&(A&&(g=m-b*A,h=d+b*A),M&&(v=y-x*M,f=p+x*M),k=ab,o());break;case 32:k!==ob&&k!==ab||(A<0?g=m-b:A>0&&(h=d-b),M<0?v=y-x:M>0&&(f=p-x),k=rb,V.attr("cursor",ub.selection),o());break;default:return}to()}function c(){switch(t.event.keyCode){case 16:I&&(_=S=I=!1,o());break;case 18:k===ab&&(A<0?g=m:A>0&&(h=d),M<0?v=y:M>0&&(f=p),k=ob,o());break;case 32:k===rb&&(t.event.altKey?(A&&(g=m-b*A,h=d+b*A),M&&(v=y-x*M,f=p+x*M),k=ab):(A<0?g=m:A>0&&(h=d),M<0?v=y:M>0&&(f=p),k=ob),V.attr("cursor",ub[T]),o());break;default:return}to()}if(t.event.touches){if(t.event.changedTouches.length<t.event.touches.length)return to()}else if(l)return;if(u.apply(this,arguments)){
diff --git a/web/js/swish-min.js.gz b/web/js/swish-min.js.gz
index 81f88a5..28c27fb 100644
Binary files a/web/js/swish-min.js.gz and b/web/js/swish-min.js.gz differ
diff --git a/web/js/swish-min.js.map b/web/js/swish-min.js.map
index c7ea7d8..7b59f6e 100644
--- a/web/js/swish-min.js.map
+++ b/web/js/swish-min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../bower_components/bootstrap/dist/js/bootstrap.min.js","../bower_components/jquery/dist/jquery.min.js","config.js","preferences.js","links.js","utils.js","../bower_components/laconic/laconic.js","version.js","modal.js","../bower_components/tagmanager/tagmanager.js","form.js","history.js","svgavatar.js","chat.js","../bower_components/jquery.splitter/js/jquery.splitter-0.15.0.js","pane.js","../bower_components/typeahead.js/dist/bloodhound.js","../bower_components/typeahead.js/dist/typeahead.jquery.js","search.js","../bower_components/codemirror/lib/codemirror.js","chatroom.js","chatbell.js","sourcelist.js","tabbed.js","prolog.js","codemirror/addon/hint/templates-hint.js","codemirror/mode/prolog/prolog-template-hint.js","gitty.js","difflib.js","diffview.js","diff.js","storage.js","codemirror/mode/prolog/prolog-ctype.js","codemirror/mode/prolog/prolog.js","codemirror/mode/prolog/prolog_keys.js","codemirror/mode/prolog/prolog_query.js","codemirror/mode/prolog/prolog_server.js","../bower_components/codemirror/mode/xml/xml.js","../bower_components/codemirror/mode/meta.js","../bower_components/codemirror/mode/markdown/markdown.js","../bower_components/codemirror/addon/edit/matchbrackets.js","../bower_components/codemirror/addon/comment/continuecomment.js","../bower_components/codemirror/addon/comment/comment.js","../bower_components/codemirror/addon/hint/show-hint.js","../bower_components/codemirror/addon/hint/anyword-hint.js","../bower_components/codemirror/addon/display/placeholder.js","../bower_components/codemirror/addon/runmode/runmode.js","../bower_components/codemirror/addon/search/searchcursor.js","../bower_components/codemirror/addon/dialog/dialog.js","../bower_components/codemirror/addon/search/search.js","../bower_components/codemirror/addon/search/jump-to-line.js","codemirror/addon/hover/text-hover.js","codemirror/addon/hover/prolog-hover.js","codemirror/addon/hint/show-context-info.js","../bower_components/codemirror/keymap/emacs.js","editor.js","answer.js","../bower_components/sparkline/dist/jquery.sparkline.js","download.js","runner.js","../bower_components/js-sha1/src/sha1.js","notebook.js","navbar.js","query.js","term.js","login.js","../bower_components/d3/d3.js","../bower_components/c3/c3.js","../bower_components/svg-pan-zoom/dist/svg-pan-zoom.min.js","jswish.js","plugin.js","swish.js"],"names":["e","t","module","exports","document","Error","window","this","m","n","i","o","r","createElement","text","v","head","appendChild","parentNode","removeChild","x","l","c","call","C","length","g","y","N","nodeName","toLowerCase","j","w","grep","nodeType","u","filter","P","R","each","match","M","I","W","$","promise","done","fail","then","apply","slice","_","removeEventListener","ready","V","toUpperCase","G","replace","X","U","Q","expando","uid","te","Z","test","JSON","parse","ne","ee","getAttribute","K","set","ue","a","s","cur","css","cssNumber","ie","exec","style","unit","start","end","ce","ownerDocument","le","body","fe","display","J","get","ae","ye","getElementsByTagName","querySelectorAll","merge","ve","xe","f","createDocumentFragment","p","d","h","me","de","ge","_default","innerHTML","htmlPrefilter","lastChild","childNodes","firstChild","textContent","push","createTextNode","inArray","contains","he","type","Ee","ke","Se","activeElement","De","off","arguments","guid","event","add","Le","children","He","Oe","removeAttribute","Pe","hasData","access","events","handle","extend","Me","pe","checked","defaultValue","Re","checkClone","je","eq","html","map","clone","src","_evalUrl","qe","Ie","cleanData","Fe","$e","getPropertyValue","pixelBoxStyles","We","Be","width","minWidth","maxWidth","_e","Qe","Ye","Ge","Je","cssProps","Ke","Math","max","Ze","oe","ceil","et","boxSizingReliable","parseFloat","tt","prototype","init","at","rt","hidden","requestAnimationFrame","setTimeout","fx","interval","tick","st","nt","Date","now","ut","height","opacity","lt","pt","tweeners","concat","ct","queue","_queueHooks","unqueued","empty","fire","always","it","isEmptyObject","overflow","overflowX","overflowY","remove","ft","Array","isArray","cssHooks","expand","prefilters","Deferred","elem","startTime","duration","tweens","run","notifyWith","resolveWith","props","opts","specialEasing","easing","originalProperties","originalOptions","createTween","Tween","stop","rejectWith","bind","progress","complete","timer","anim","vt","join","mt","xt","jt","St","Ft","unshift","_t","dataTypes","Wt","zt","ajaxSettings","flatOptions","Xt","contents","shift","mimeType","getResponseHeader","converters","Ut","responseFields","dataFilter","dataType","split","state","error","data","Object","getPrototypeOf","indexOf","toString","hasOwnProperty","noModule","fn","T","jquery","constructor","toArray","pushStack","prevObject","first","last","sort","splice","isPlainObject","random","isReady","noop","globalEval","trim","makeArray","support","Symbol","iterator","E","getElementById","id","L","getElementsByClassName","qsa","S","setAttribute","b","B","cacheLength","se","attrHandle","sourceIndex","nextSibling","disabled","isDisabled","value","dir","next","uniqueID","be","we","Te","O","Ce","relative","matches","find","TAG","k","uniqueSort","D","A","pop","q","H","RegExp","F","z","ID","CLASS","ATTR","PSEUDO","CHILD","bool","needsContext","Y","String","fromCharCode","charCodeAt","re","isXML","documentElement","setDocument","defaultView","top","addEventListener","attachEvent","attributes","className","createComment","getById","getElementsByName","getAttributeNode","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","sortDetached","attr","specified","escape","detectDuplicates","sortStable","getText","nodeValue","selectors","createPseudo",">"," ","+","~","preFilter","pseudos","setFilters","not","has","innerText","lang","target","location","hash","root","focus","hasFocus","href","tabIndex","enabled","selected","selectedIndex","parent","header","input","button","even","odd","gt","nth","radio","checkbox","file","password","image","submit","reset","filters","tokenize","compile","selector","select","expr","unique","isXMLDoc","escapeSelector","is","parseHTML","prev","closest","index","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","content","reverse","Callbacks","once","stopOnFalse","memory","disable","lock","locked","fireWith","fired","catch","pipe","notify","resolve","reject","TypeError","exceptionHook","stackTrace","getStackHook","when","console","warn","name","message","stack","readyException","readyWait","readyState","doScroll","cache","defineProperty","configurable","removeData","_data","_removeData","dequeue","clearQueue","source","show","hide","toggle","option","thead","col","tr","td","optgroup","tbody","tfoot","colgroup","caption","th","cloneNode","noCloneChecked","global","handler","triggered","dispatch","special","delegateType","bindType","origType","namespace","delegateCount","setup","teardown","removeEvent","fix","delegateTarget","preDispatch","handlers","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","handleObj","result","preventDefault","stopPropagation","postDispatch","addProp","Event","enumerable","originalEvent","writable","load","noBubble","trigger","blur","click","beforeunload","returnValue","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","stopImmediatePropagation","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","key","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","mouseenter","mouseleave","pointerenter","pointerleave","on","one","Ne","Ae","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","opener","getComputedStyle","cssText","marginLeft","right","position","offsetWidth","round","backgroundClip","clearCloneStyle","pixelPosition","reliableMarginLeft","scrollboxSize","ze","Xe","Ue","visibility","Ve","letterSpacing","fontWeight","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","setProperty","isFinite","getClientRects","getBoundingClientRect","left","margin","padding","border","prop","options","propHooks","pos","step","scrollTop","scrollLeft","linear","swing","cos","PI","ot","Animation","*","tweener","prefilter","speed","speeds","old","fadeTo","animate","finish","timers","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","clearTimeout","checkOn","optSelected","radioValue","dt","ht","removeAttr","attrHooks","yt","removeProp","propFix","parseInt","for","class","addClass","removeClass","toggleClass","hasClass","bt","val","valHooks","focusin","wt","Tt","isTrigger","parentWindow","simulate","triggerHandler","Ct","Et","kt","parseXML","DOMParser","parseFromString","Dt","Nt","At","param","encodeURIComponent","serialize","serializeArray","qt","Lt","Ht","Ot","Pt","Mt","Rt","It","$t","Bt","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","xml","json","* text","text html","text json","text xml","context","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","ifModified","status","statusText","statusCode","getAllResponseHeaders","setRequestHeader","overrideMimeType","abort","method","crossDomain","host","traditional","hasContent","headers","beforeSend","success","timeout","send","getJSON","getScript","throws","wrapAll","firstElementChild","wrapInner","wrap","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","Vt","0","1223","Gt","cors","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","response","script","text script","charset","scriptCharset","Yt","Qt","jsonp","jsonpCallback","createHTMLDocument","implementation","animated","offset","setOffset","using","pageYOffset","pageXOffset","offsetParent","scrollTo","Height","Width","","hover","unbind","delegate","undelegate","proxy","holdReady","parseJSON","isFunction","isWindow","camelCase","isNumeric","isNaN","define","amd","Jt","jQuery","Kt","noConflict","setCachedConfig","config","swish","config_hash","localStorage","setItem","KEY","stringify","str","getItem","alert","readNotAgain","err","hasLocalStore","defaults","inform","preferences","persistent","setNotAgain","notagain","broadcast","sel","undefined","setVal","setDefault","setInform","getVal","setDocVal","docid","prefs","getDocVal","def","modal","functions","PlDoc","from","ev","pred","substring","charAt","arity","decodeURIComponent","runQueryLink","isVar","vars","novars","nb","qname","cell","prologEditor","nbCell","bindings","vr","feedback","owner","followLink","accept","swishStore","http","locations","swishExamples","startsWith","styles_loaded","utils","htmlEncode","loadCSS","styles","rel","media","generateUUID","getTime","floor","flash","obj","ago","time","basename","path","lastIndexOf","laconic","el","arg","substr","toExponential","toFixed","attributeMap","isEvent","child","acceptcharset","accesskey","allowtransparency","bgcolor","cellpadding","cellspacing","classname","colspan","csstext","defaultchecked","defaultselected","defaultvalue","frameborder","hspace","htmlfor","longdesc","maxlength","marginwidth","marginheight","noresize","noshade","readonly","rowspan","tabindex","valign","vspace","registerElement","renderer","deprecatedTags","tags","tagName","dollar","methods","_init","versions","div","table","commit","update","prolog","log","swishversion","title","version","span","brand","versionDetails","changelog","that","params","addChange","ch","desc","cls","author","committer_date_relative","checkForUpdates","saveCheckpoint","date","changes","emulateTransitionEnd","transition","WebkitTransition","MozTransition","OTransition","bsTransitionEnd","close","VERSION","TRANSITION_DURATION","Constructor","setState","$element","DEFAULTS","isLoading","loadingText","resetText","slide","to","pause","cycle","$indicators","paused","sliding","$active","$items","keyboard","keydown","clearInterval","setInterval","getItemIndex","getItemForDirection","direction","carousel","$trigger","transitioning","$parent","getParent","addAriaAndCollapsedClass","dimension","collapse","dropdown","$body","$dialog","$backdrop","isShown","originalBodyPad","scrollbarWidth","ignoreBackdropClick","fixedContent","remote","BACKDROP_TRANSITION_DURATION","backdrop","checkScrollbar","setScrollbar","resize","adjustDialog","enforceFocus","hideModal","handleUpdate","resetAdjustments","resetScrollbar","removeBackdrop","scrollHeight","clientHeight","paddingLeft","bodyIsOverflowing","paddingRight","innerWidth","abs","clientWidth","measureScrollbar","Boolean","area","br","code","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","pre","small","sub","sup","strong","ul","hoverState","inState","animation","placement","template","container","viewport","sanitize","sanitizeFn","whiteList","getOptions","$viewport","enter","leave","_options","fixTitle","getDefaults","getDelegateOptions","tip","isInStateTrue","getUID","setContent","getPosition","bottom","getCalculatedOffset","applyPlacement","$tip","getViewportAdjustedDelta","replaceArrow","arrow","getTitle","SVGElement","scroll","$arrow","enable","toggleEnabled","destroy","sanitizeHtml","tooltip","getContent","popover","$scrollElement","offsets","targets","activeTarget","process","refresh","getScrollHeight","activate","clear","scrollspy","element","tab","$target","checkPosition","checkPositionWithEventLoop","affixed","unpin","pinnedOffset","RESET","getState","getPinnedOffset","affix","offsetBottom","offsetTop","links","form","saveNotagain","closeButton","data-dismiss","notAgain","label","data-notagain","initTagsManagers","prefilled","tagsManager","swishModal","jqXHR","showHelp","help","showForm","showPlDoc","docURL","term","pldoc_doc_for","docBody","md","modalel","role","onclose","server_form","require","jqXHDR","formel","serializeAsObject","onreply","formError","showAjaxError","dom","win","resizeIframe","iframe","contentWindow","ntfid","ajaxError","wsid","epos","outerWidth","onremove","chat","CapitalizeFirstLetter","preventSubmitOnEnter","isClearInputOnEsc","externalTagId","prefillIdFieldName","prefillValueFieldName","AjaxPush","AjaxPushAllTags","AjaxPushParameters","delimiters","backspace","maxTags","hiddenTagListName","hiddenTagListId","output","deleteTagsOnBackspace","tagsContainer","tagCloseIcon","tagClass","validator","onlyTagList","tagList","fillInputOnTagRemove","publicMethods","pushTag","tag","ignoreEvents","alreadyInList","tlisLowerCase","tagId","idx","newTagId","newTagRemoveId","escaped","$el","lastTagObj","$self","tlis","tlid","privateMethods","trimTag","delimiterChars","$tagList","item","blinkClass","backgroundColor","blinkBGColor_1","blinkBGColor_2","Infinity","post","tagClasses","TagIdToRemove","spliceTag","refreshHiddenTagList","showOrHide","popTag","tagBeingRemoved","cl","tagBaseClass","inputBaseClass","lhiddenTagList","baseDelimiter","change","killEvent","cancelBubble","keyInArray","ary","applyDelimiter","prefill","pta","pushAllTags","keyNums","delimeters","delimiterKeys","hiddenObj","rndid","albet","navigator","userAgent","valgridw","LABELWIDTH","elemName","attrs","textInput","placeholder","tagInput","textarea","ignore_empty","arr","inset","jvalue","errors","fieldError","field","msg","group","showDialog","formBroadcast","dyn_clear","onclear","$this","fields","fileName","public","example","labeltext","fork","community_examples","btn","identity","link","stamp","labels","toLocaleString","description","commit_message","modify","who","canmodify","checkboxes","follow","email","projection","csvFormat","list","format","limit","distinct","boxes","boxel","dopts","box","autocomplete","chunk","filename","action","data-toggle","lblopts","widgets","glyphIcon","glyph","typeIcon","glyphIconButton","dropdownButton","icon","divClass","ulClass","actions","populateMenu","client","menu","runMenu","onclick","bound","history","pathname","reason","pushState","recentMaxLength","addRecent","doc","recent","d1","d2","openRecent","st_type","updateRecentUL","gitty","onpopstate","setAVappearanceByUserID","_this","svgavatar","selectAppearance","section","setFill","color","avatar","svg_images","reply","li_user","keypress","reconnect_delay","last_open","connect","add_pref_param","pname","lead","swish_chat","ws","connection","reconnect","WebSocket","onmessage","origin","onopen","empty_queue","disconnect","subscribe","channel","sub_channel","unsubscribe","subchannel","welcome","avatar_source","visitors","check_login","login","storage","userCount","cnt","gazers","gazer","profile","rejoined","avatars","joined","session_closed","chat-message","rooms","chatroom","hangout","chatbell","displayed","user","forbidden","read_until","broadcast_room","notifyUser","event_argv","create_user","user_li","unnotify","updateFiles","addUser","removeUser","lost","tmo","user_info","users","rc","self","is_self","addUserFile","fli","data-file","removeUserFile","user_too","removeFile","count","splitter_id","splitters","current_splitter","get_position","settings","orientation","panel_1","panel_2","invisible","onDragStart","onDragEnd","onDrag","splitter","new_width","new_height","silent","sw","sw2","pw","outerHeight","isActive","not_null","paneInfo","pane","panes","second","flipdir","tile","resize_start","info","resize_save","percent","resizestart","minheight","relto","sumh","splitContainer","factory","a0","isMsie","isBlankString","escapeRegExChars","isString","isNumber","isObject","isUndefined","isElement","isJQuery","toStr","collection","cb","reverseArgs","every","some","mixin","getIdGenerator","counter","templatify","defer","debounce","func","wait","immediate","later","callNow","args","throttle","previous","remaining","tokenizers","whitespace","nonword","getObjTokenizer","tokenizer","keys","tokens","LruCache","maxSize","List","tail","Node","node","tailItem","size","moveToFront","PersistentStorage","override","prefix","ttlKey","keyMatcher","ls","LOCAL_STORAGE","_noop","encode","decode","gatherMatchingKeys","len","removeItem","_prefix","_ttlKey","isExpired","_safeSet","ttl","Transport","cancelled","lastReq","_send","transport","_get","limiter","_cache","sharedCache","pendingRequestsCount","pendingRequests","maxPendingRequests","setMaxPendingRequests","num","resetCache","_fingerprint","resp","fingerprint","onDeckRequestArgs","jqXhr","cancel","SearchIndex","datumTokenizer","queryTokenizer","identify","normalizeTokens","token","newNode","IDS","CHILDREN","array","seen","uniques","getIntersection","arrayA","arrayB","ai","bi","intersection","lenArrayA","lenArrayB","bootstrap","datums","trie","datum","chars","ids","search","query","all","values","Prefetch","prepare","transform","thumbprint","cacheKey","_settings","store","fromCache","stored","fromNetwork","onError","onResponse","Remote","cancelLastRequest","oParser","parsePrefetch","callbackToDeferred","parseRemote","wildcard","rateLimitBy","rateLimitWait","toRemotePrepare","toLimiter","prepareByReplace","prepareByWildcard","idenityPrepare","onSuccess","deferred","sorter","initialize","sufficient","local","prefetch","Bloodhound","__ttAdapter","withAsync","sync","withoutAsync","_loadPrefetch","serialized","_initialize","addLocalToIndex","initPromise","force","processRemote","nonDuplicates","clearPrefetchCache","clearRemoteCache","ttAdapter","WWW","build","www","classes","defaultClassNames","buildCss","buildHtml","buildSelectors","wrapper","hint","borderColor","boxShadow","verticalAlign","inputWithNoHint","ltr","rtl","backgroundImage","dataset","suggestion","selectable","cursor","highlight","EventBus","deprecationMap","render","cursorchange","_trigger","deprecatedType","EventEmitter","types","bindContext","_callbacks","onAsync","onSync","callbacks","syncFlush","asyncFlush","getFlush","nextTick","flush","setImmediate","getRegex","patterns","caseSensitive","wordsOnly","regexStr","escapedPatterns","pattern","hightlightTextNode","textNode","patternNode","wrapperNode","regex","splitText","traverse","childNode","Input","$hint","$input","queryWhenFocused","$overflowHelper","buildOverflowHelper","_checkLanguageDirection","setHint","getHint","clearHint","clearHintIfInvalid","whiteSpace","fontFamily","fontSize","fontStyle","fontVariant","wordSpacing","textIndent","textRendering","textTransform","areQueriesEquivalent","normalizeQuery","withModifier","specialKeyCodeMap","9","27","37","39","13","38","40","_onBlur","resetInputValue","_onFocus","_onKeydown","keyName","_managePreventDefault","_shouldTrigger","_onInput","_setQuery","getInputValue","areEquivalent","hasDifferentWhitespace","onBlur","onFocus","onKeydown","onInput","getLangDir","getQuery","setQuery","setInputValue","hasQueryChangedSinceLastFocus","valIsPrefixOfHint","isValid","hasOverflow","constraint","isCursorAtEnd","valueLength","selectionStart","range","selection","createRange","moveStart","Dataset","templates","notFound","isValidName","nameGenerator","displayFn","getDisplayFn","displayKey","getTemplates","_resetLastSuggestion","suggestionTemplate","pending","footer","extractData","_overwrite","suggestions","_renderSuggestions","_renderPending","_renderNotFound","_empty","_append","$lastSuggestion","_appendSuggestions","$fragment","_getSuggestionsFragment","_getHeader","_getFooter","fragment","_injectQuery","_query","syncCalled","rendered","canceled","isEmpty","Menu","initializeDataset","oDataset","$node","datasets","_onSelectableClick","_onRendered","_allDatasetsEmpty","_onCleared","_propagate","isDatasetEmpty","_getSelectables","_removeCursor","$selectable","getActiveSelectable","_ensureVisible","elTop","elBottom","nodeScrollTop","nodeHeight","onSelectableClick","isOpen","setLanguageDirection","selectableRelativeToCursor","delta","$selectables","$oldCursor","oldIndex","newIndex","setCursor","getSelectableData","getTopSelectable","updateDataset","isValidUpdate","clearDataset","destroyDataset","DefaultMenu","_show","_hide","Typeahead","onFocused","onBlurred","onEnterKeyed","onTabKeyed","onEscKeyed","onUpKeyed","onDownKeyed","onLeftKeyed","onRightKeyed","onQueryChanged","onWhitespaceChanged","eventBus","minLength","_hacks","_onSelectableClicked","_onAsyncRequested","_onAsyncCanceled","_onAsyncReceived","_onDatasetRendered","_onDatasetCleared","_onLangDirChanged","ctx","$menu","hasActive","_updateHint","_onFocused","_minLengthMet","_onBlurred","_onEnterKeyed","_onTabKeyed","_onEscKeyed","_onUpKeyed","moveCursor","_onDownKeyed","_onLeftKeyed","_onRightKeyed","_onQueryChanged","_onWhitespaceChanged","_openIfActive","escapedQuery","frontMatchRegEx","isEnabled","deactivate","$candidate","payload","ttEach","$els","typeahead","buildHintFromInput","getBackgroundStyles","spellcheck","prepInput","backgroundAttachment","backgroundOrigin","backgroundPosition","backgroundRepeat","backgroundSize","revert","$wrapper","$elOrNull","attach","defaultHint","defaultMenu","MenuConstructor","classNames","newVal","contexts","registry","bloodHoundURL","fileTokenizer","renderFile","renderStoreSourceLine","hit","currentFile","alias","currentAlias","ext","renderSourceMatch","sourceLineTokenizer","renderSourceLine","predicateMatcher","ql","pl","templ","renderPredicate","mode","iso","summary","sourceMatcher","sourceRE","editor","line","renderUser","encodeURI","files","swish_typeahead","storeContent","sources","query_cache_length","typeaheadProperties","store_content","predicates","of","showAllMatches","play","string","CodeMirror","classTest","removeChildren","removeChildrenAndAdd","elt","eltP","activeElt","shadowRoot","current","joinClasses","as","copyObj","overwrite","countColumn","tabSize","startIndex","startValue","nextTab","findColumn","goal","skipped","min","spaceStr","spaceStrs","lst","out","insertSorted","score","priority","nothing","createObj","base","inst","create","isWordCharBasic","nonASCIISingleCaseWordChar","isWordChar","helper","isExtendingChar","extendingChars","skipExtendingChars","findFirst","midF","mid","Display","place","scrollbarFiller","gutterFiller","lineDiv","selectionDiv","cursorDiv","measure","lineMeasure","lineSpace","lines","mover","sizer","sizerWidth","heightForcer","scrollerGap","gutters","lineGutter","scroller","ie_version","webkit","gecko","mobile","draggable","viewFrom","viewTo","reportedViewFrom","reportedViewTo","renderedView","externalMeasured","viewOffset","lastWrapHeight","lastWrapWidth","updateLineNumbers","nativeBarWidth","barHeight","barWidth","scrollbarsClipped","lineNumWidth","lineNumInnerWidth","lineNumChars","alignWidgets","cachedCharWidth","cachedTextHeight","cachedPaddingH","maxLine","maxLineLength","maxLineChanged","wheelDX","wheelDY","wheelStartX","wheelStartY","selForContextMenu","activeTouch","getLine","sz","chunkSize","getBetween","iter","getLines","updateLineHeight","diff","lineNo","no","lineAtHeight","outer","i$1","lh","isLine","lineNumberFor","lineNumberFormatter","firstLineNumber","Pos","sticky","cmp","equalCursorPos","copyPos","maxPos","minPos","clipLine","clipPos","clipToLen","linelen","clipPosArray","seeReadOnlySpans","sawReadOnlySpans","seeCollapsedSpans","sawCollapsedSpans","MarkedSpan","marker","getMarkedSpanFor","spans","removeMarkedSpan","addMarkedSpan","markedSpans","attachLine","markedSpansBefore","startCh","isInsert","nw","startsBefore","inclusiveLeft","insertLeft","endsAfter","inclusiveRight","markedSpansAfter","endCh","stretchSpansOverChange","full","oldFirst","oldLast","sameLine","found","span$1","found$1","clearEmptySpans","newMarkers","gapMarkers","gap","i$2","i$3","clearWhenEmpty","removeReadOnlyRanges","markers","mark","readOnly","parts","mk","newParts","dfrom","dto","detachMarkedSpans","detachLine","attachMarkedSpans","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","bPos","fromCmp","toCmp","collapsedSpanAtSide","sps","sp","collapsed","collapsedSpanAtStart","collapsedSpanAtEnd","collapsedSpanAround","conflictingCollapsedRange","lineNo$$1","visualLine","merged","visualLineEnd","visualLineContinued","visualLineNo","lineN","vis","visualLineEndNo","lastLine","lineIsHidden","widgetNode","lineIsHiddenInner","heightAtLine","lineObj","lineLength","findMaxLine","cm","iterateBidiSections","part","level","getBidiPartAt","bidiOther","getOrder","bidiOrdering","getHandlers","emitter","_handlers","noHandlers","detachEvent","map$$1","signal","signalDOMEvent","e_defaultPrevented","codemirrorIgnore","signalCursorActivity","cursorActivity","curOp","cursorActivityHandlers","hasHandler","eventMixin","ctor","e_preventDefault","e_stopPropagation","e_stop","e_target","srcElement","e_button","mac","zeroWidthElement","zwspSupported","hasBadBidiRects","badBidiRects","txt","r0","r1","hasBadZoomedRects","badZoomedRects","normal","fromRange","defineMode","dependencies","modes","defineMIME","mime","spec","mimeModes","resolveMode","getMode","mfactory","modeObj","modeExtensions","exts","helperType","modeProps","prop$1","extendMode","properties","copyState","nstate","innerMode","startState","a1","a2","highlightLine","forceToEnd","modeGen","lineClasses","runMode","overlays","baseTokens","overlay","i_end","opaque","baseTokenPos","bgClass","textClass","getLineStyles","updateFrontier","getContextBefore","resetState","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","precise","Context","findStartLine","saved","fromSaved","processLine","nextLine","startAt","stream","StringStream","callBlankLine","eol","readToken","blankLine","inner","takeToken","asArray","Token","extractLineClasses","lineClass","flattenSpans","curStart","curStyle","addModeClass","mName","minindent","minline","lim","SavedContext","lookAhead","indented","retreatFrontier","updateLine","estimateHeight","estHeight","cleanUpLine","interpretTokenStyle","styleToClassCacheWithMode","styleToClassCache","buildLineContent","lineView","builder","trailingSpace","splitSpaces","getOption","rest","addToken","buildToken","buildTokenBadBidi","insertLineContent","maps","caches","querySelector","defaultSpecialCharPlaceholder","startStyle","endStyle","displayText","specialChars","mustWrap","lastIndex","txt$1","tabWidth","specialCharPlaceholder","fullStyle","trailingBefore","spaceBefore","buildCollapsedSpan","ignoreWidget","widget","needsContentAttribute","setUneditable","allText","spanStyle","spanEndStyle","spanStartStyle","nextChange","foundBookmarks","endStyles","j$1","j$2","upto","tokenText","LineView","buildViewArray","nextPos","pushOperation","op","operationGroup","ops","ownsGroup","delayedCallbacks","fireCallbacksForOps","cursorActivityCalled","finishOperation","endCb","signalLater","orphanDelayedCallbacks","fireOrphanDelayed","delayed","updateLineForChanges","dims","updateLineText","updateLineGutter","updateLineClasses","updateLineWidgets","ensureLineWrapped","updateLineBackground","background","getLineContent","built","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","gutterMarkers","lineNumbers","wrap$1","gutterWrap","lineNumber","gutterLeft","gutterWidth","alignable","insertLineWidgets","buildLineElement","insertLineWidgetsFor","allowAbove","handleMouseEvents","positionLineWidget","above","noHScroll","wrapperWidth","coverGutter","widgetHeight","parentStyle","eventInWidget","paddingTop","paddingVert","paddingH","currentStyle","scrollGap","displayWidth","displayHeight","ensureLineHeights","rect","wrapping","lineWrapping","curWidth","heights","rects","mapFromLineView","updateExternalMeasurement","measureChar","bias","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","getDimensions","forceUpdate","hasHeights","prepared","varHeight","measureCharInner","bogus","rtop","rbottom","nodeAndOffsetInLineMap","mStart","mEnd","coverStart","coverEnd","getUsefulRect","nullRect","maybeUpdateRectForZooming","rSpan","charWidth","rbot","bot","singleCursorHeightPerLine","screen","logicalXDPI","deviceXDPI","scaleX","scaleY","logicalYDPI","deviceYDPI","clearLineMeasurementCacheFor","clearLineMeasurementCache","externalMeasure","clearCaches","pageScrollX","chrome","android","pageScrollY","marginTop","widgetTopHeight","intoCoordSystem","includeWidgets","yOff","lOff","xOff","fromCoordSystem","coords","localBox","lineSpaceBox","charCoords","cursorCoords","preparedMeasure","getBidi","partPos","invert","other","estimateCoords","PosWithInfo","outside","xRel","coordsChar","coordsCharInner","rangeEnd","wrappedLineExtent","begin","wrappedLineExtentChar","boxIsAfter","widgetHeight$$1","coordsBidiPartWrapped","coordsBidiPart","baseX","chAround","boxAround","atLeft","atStart","_lineNo","ref","closestDist","endX","dist","textHeight","measureText","anchor","clientLeft","offsetLeft","compensateForHScroll","perLine","widgetsHeight","estimateLineHeights","est","posFromMouse","liberal","forRect","space","colDiff","updateSelection","showSelection","prepareSelection","primary","curFragment","cursors","selFragment","ranges","primIndex","range$$1","showCursorWhenSelecting","drawSelectionCursor","drawSelectionRange","cursorHeight","otherCursor","cmpCoords","rightSide","drawForLine","fromArg","toArg","wrapX","side","extent","lineLen","fromPos","toPos","openStart","openEnd","openLeft","docLTR","openRight","leftSide","topLeft","topRight","botLeft","botRight","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","restartBlink","focused","blinker","cursorBlinkRate","ensureFocus","delayBlurEvent","delayingBlurEvent","receivedFocus","rmClass","updateHeightsInViewport","prevBottom","updateWidgetHeight","chWidth","visibleLines","ensure","ensureFrom","ensureTo","alignHorizontally","comp","gutterW","align","maybeUpdateLineNumberWidth","innerW","updateGutterSpace","maybeScrollWindow","innerHeight","phantom","scrollNode","scrollIntoView","scrollPosIntoView","changed","endCoords","scrollPos","calculateScrollPos","startTop","startLeft","updateScrollTop","setScrollLeft","snapMargin","screentop","docBottom","atTop","atBottom","newTop","screenleft","screenw","tooWide","addToScrollTop","resolveScrollToPos","ensureCursorVisible","getCursor","scrollToPos","cursorScrollMargin","scrollToCoords","scrollToRange","scrollToCoordsRange","sPos","updateDisplaySimple","setScrollTop","startWorker","forceScroll","scrollbars","isScroller","scrollWidth","measureForScrollbars","docH","viewHeight","viewWidth","barLeft","docHeight","updateScrollbars","startWidth","startHeight","updateScrollbarsInner","sizes","paddingBottom","borderBottom","coverGutterNextToScrollbar","initScrollbars","scrollbarModel","scrollbarStyle","axis","startOperation","viewChanged","updateInput","typing","changeObjs","selectionChanged","updateMaxLine","nextOpId","endOperation","endOperations","endOperation_R1","endOperation_W1","endOperation_R2","endOperation_W2","i$4","endOperation_finish","maybeClipScrollbars","mustUpdate","DisplayUpdate","updatedDisplay","updateDisplayIfNeeded","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","takeFocus","setDocumentHeight","postUpdateDisplay","maybeHiddenMarkers","unhidden","maybeUnhiddenMarkers","runInOp","operation","methodOp","docMethodOp","regChange","lendiff","resetView","cut","viewCuttingPoint","cut$1","cutTop","cutBot","regLineChange","oldN","newN","adjustView","countDirtyView","dirty","highlightWorker","workTime","changedLines","oldStyles","highlighted","oldCls","newCls","ischange","workDelay","marginBottom","borderRightWidth","selectionSnapshot","getSelection","anchorNode","anchorOffset","focusNode","focusOffset","restoreSelection","snapshot","setEnd","removeAllRanges","addRange","editorIsHidden","viewportMargin","different","wrapperHeight","toUpdate","selSnapshot","patchDisplay","minHeight","oldDisplayWidth","updateNumbersFrom","rm","currentWheelTarget","updateNumber","updateGutters","specs","gElt","setGuttersForLineNumbers","wheelEventDelta","dx","wheelDeltaX","dy","wheelDeltaY","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","wheelPixelsPerUnit","onScrollWheel","canScrollX","canScrollY","presto","pixels","wheelSamples","movedX","movedY","sample","normalizeSelection","mayTouch","selectionsMayTouch","prim","inv","Range","Selection","simpleSelection","changeEnd","adjustForChange","computeSelAfterChange","offsetPos","computeReplacedSel","oldPrev","newPrev","loadMode","modeOption","resetModeState","isWholeLineUpdate","wholeLineUpdateBefore","updateDoc","estimateHeight$$1","spansFor","linesFor","Line","firstLine","lastText","lastSpans","nlines","insert","added","added$1","added$2","linkedDocs","sharedHistOnly","propagate","skip","sharedHist","linked","shared","attachDoc","setDirectionClass","directionChanged","History","startGen","undone","undoDepth","lastModTime","lastSelTime","lastOp","lastSelOp","lastOrigin","lastSelOrigin","generation","maxGeneration","historyChangeFromChange","histChange","attachLocalSpans","clearSelectionEvents","lastChangeEvent","hist","addChangeToHistory","selAfter","opId","historyEventDelay","pushSelectionToHistory","selectionEventCanBeMerged","somethingSelected","addSelectionToHistory","clearRedo","dest","equals","existing","removeClearedSpans","explicitlyCleared","getOldSpans","mergeOldSpans","stretched","oldCur","stretchCur","copyHistoryArray","newGroup","instantiateSel","copy","deepCopy","newChanges","Number","extendRange","posBefore","extendSelection","setSelection","extendSelections","heads","replaceOneSelection","setSimpleSelection","filterSelectionChange","this$1","setSelectionReplaceHistory","setSelectionNoUndo","NaN","setSelectionInner","skipAtomicInSelection","reCheckSelection","mayClear","newAnchor","skipAtomic","newHead","skipAtomicInner","oldPos","atomic","near","movePos","far","cantEdit","selectAll","sel_dontScroll","filterChange","makeChange","ignoreReadOnly","suppressEdits","makeChangeInner","makeChangeSingleDoc","rebased","rebaseHist","makeChangeFromHistory","allowSelectionOnly","suppress","antiChanges","returned","shiftDoc","distance","removed","makeChangeSingleDocInEditor","recomputeMaxLength","checkWidthStart","changesHandler","changeHandler","replaceRange","assign","splitLines","rebaseHistSelSingle","rebaseHistArray","ok","copied","changeLine","changeType","LeafChunk","BranchChunk","adjustScrollWhenAboveVisible","addLineWidget","LineWidget","insertAt","aboveVisible","markText","markTextShared","TextMarker","replacedWith","addToHistory","curLine","clearOnEnter","clearHistory","nextMarkerId","isParent","SharedTextMarker","findSharedMarkers","findMarks","copySharedMarkers","mFrom","mTo","subMark","detachSharedMarkers","subMarker","onDrop","clearDragCursor","lastDrop","dataTransfer","isReadOnly","FileReader","File","read","allowDropFileTypes","reader","lineSeparator","readAsText","draggingText","text$1","getData","listSelections","replaceSelection","setData","effectAllowed","setDragImage","safari","_top","onDragOver","frag","dragCursor","forEachCodeMirror","byClass","editors","ensureGlobalHandlers","globalsRegistered","registerGlobalHandlers","resizeTimer","onResize","setSize","normalizeKeyName","alt","ctrl","cmd","mod","normalizeKeyMap","keymap","keyname","lookupKey","getKeyMap","fallthrough","isModifierKey","keyNames","addModifierNames","noShift","flipCtrlCmd","altGraphKey","keyMap","deleteNearSelection","compute","kill","toKill","replaced","moveCharLogically","moveLogically","endOfLine","visually","moveInStorageOrder","prep","targetTop","moveVisually","bidi","mv","getWrappedLineExtent","searchInVisualLine","getRes","res","nextCh","lineStart","visual","lineEnd","lineStartSmart","firstNonWS","inWS","doHandleBinding","dropShift","commands","ensurePolled","prevShift","Pass","lookupKeyForEditor","keyMaps","extraKeys","dispatchKey","seq","keySeq","stopSeq","dispatchKeyInner","handleKeyBinding","motion","handleCharBinding","onKeyDown","handled","lastStoppedKey","hasCopyEvent","showCrossHair","up","onKeyUp","onKeyPress","clickRepeat","lastDoubleClick","compare","lastClick","PastClick","onMouseDown","supportsTouch","clickInGutter","repeat","selectingText","handleMappedButton","leftButtonDown","captureRightClick","onContextMenu","configureMouse","chromeOS","addNew","moveOnDrag","contained","behavior","dragDrop","dragAndDrop","leftButtonStartDrag","leftButtonSelect","moved","dragEnd","mouseMove","dragStart","e2","rangeForUnit","findWordAt","extendTo","lastPos","startCol","posCol","leftPos","startSel","ourIndex","oldRange","ourRange","ranges$1","bidiSimplify","sel_mouse","curCount","editorSize","move","anchorLine","boundary","headIndex","usePart","gutterEvent","prevent","mX","mY","lineBox","contextMenuInGutter","themeChanged","theme","guttersChanged","dragDropChanged","Init","funcs","dragFunctions","over","drop","wrappingChanged","Doc","inputStyles","inputStyle","pasteIncoming","cutIncoming","Delayed","autofocus","registerEventHandlers","opt","optionHandlers","finishInit","initHooks","finishTouch","touchFinished","prevTouch","isMouseLikeTouchEvent","touch","radiusX","radiusY","farAway","word","inp","getField","indentLine","how","aggressive","indent","curSpace","indentation","curSpaceString","indentUnit","indentString","indentWithTabs","pos$1","setLastCopied","newLastCopied","lastCopied","applyTextInput","inserted","deleted","paste","textLines","splitLinesAuto","multiPaste","pasteLinesPerSelection","lineWise","changeEvent","triggerElectric","handlePaste","pasted","clipboardData","disableInput","electricChars","smartIndent","getModeAt","electricInput","copyableRanges","lineRange","getRange","disableBrowserMagic","autocorrect","autocapitalize","hiddenTextarea","ios","findPosH","findNextLine","moveOnce","boundToLine","origDir","sawType","getHelper","hitSide","findPosV","pageSize","moveAmount","posToDOM","isInGutter","scan","badPos","bad","domTextBetween","recognizeMarker","closing","lineSep","extraLinebreak","addText","walk","cmText","markerID","isBlock","domToPos","lineNode","locateNodeInLineView","topNode","curNode","previousSibling","dist$1","fromTextArea","getValue","realSubmit","leaveSubmitMethodAlone","wrappedSubmit","getTextArea","toTextArea","getWrapperElement","platform","ie_upto10","ie_11up","edge","documentMode","qtwebkit","vendor","mac_geMountainLion","windows","presto_version","endNode","setStart","createTextRange","moveToElementText","moveEnd","selectInput","selectionEnd","ms","sel_move","charType","lowTypes","arabicTypes","BidiSpan","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","outerType","type$1","prev$1","type$2","type$3","i$5","cur$1","type$4","i$6","end$1","replace$1","i$7","nstart","nl","hasSelection","parentElement","compareEndPoints","oncopy","lineOracle","lastColumnPos","lastColumnValue","sol","peek","eat","eatWhile","eatSpace","skipToEnd","skipTo","backUp","column","consume","caseInsensitive","cased","hideFirstChars","oracle","baseToken","maxLookAhead","NativeScrollbars","vert","horiz","checkedZeroWidth","needsH","needsV","sWidth","totalHeight","totalWidth","zeroWidthHack","disableHoriz","enableZeroWidthBar","disableVert","pointerEvents","bar","maybeDisable","elementFromPoint","NullScrollbars","native","null","here","there","removeInner","insertInner","iterN","oldHeight","leaf","maybeSpill","spilled","sibling","myIndex","used","oldH","withOp","dHeight","nextDocId","cleanGeneration","setValue","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","extendSelectionsBy","setSelections","addSelection","getSelections","dup","replaceSelections","newSel","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","gen","getHistory","setHistory","histData","setGutterMarker","gutterID","clearGutter","lineInfo","addLineClass","where","removeLineClass","removeLineWidget","setBookmark","realOpts","findMarksAt","getAllMarks","posFromIndex","sepSize","indexFromPos","copyHistory","linkedDoc","unlinkDoc","splitIds","iterLinkedDocs","getEditor","setDirection","eachLine","3","8","16","17","18","19","20","32","33","34","35","36","44","45","46","59","61","91","92","93","106","107","109","110","111","127","145","173","186","187","188","189","190","191","192","219","220","221","222","63232","63233","63234","63235","63272","63273","63275","63276","63277","63302","basic","Left","Right","Up","Down","End","Home","PageUp","PageDown","Delete","Backspace","Shift-Backspace","Tab","Shift-Tab","Enter","Insert","Esc","pcDefault","Ctrl-A","Ctrl-D","Ctrl-Z","Shift-Ctrl-Z","Ctrl-Y","Ctrl-Home","Ctrl-End","Ctrl-Up","Ctrl-Down","Ctrl-Left","Ctrl-Right","Alt-Left","Alt-Right","Ctrl-Backspace","Ctrl-Delete","Ctrl-S","Ctrl-F","Ctrl-G","Shift-Ctrl-G","Shift-Ctrl-F","Shift-Ctrl-R","Ctrl-[","Ctrl-]","Ctrl-U","Shift-Ctrl-U","Alt-U","emacsy","Ctrl-B","Ctrl-P","Ctrl-N","Alt-F","Alt-B","Ctrl-E","Ctrl-V","Shift-Ctrl-V","Ctrl-H","Alt-D","Alt-Backspace","Ctrl-K","Ctrl-T","Ctrl-O","macDefault","Cmd-A","Cmd-D","Cmd-Z","Shift-Cmd-Z","Cmd-Y","Cmd-Home","Cmd-Up","Cmd-End","Cmd-Down","Cmd-Left","Cmd-Right","Ctrl-Alt-Backspace","Alt-Delete","Cmd-S","Cmd-F","Cmd-G","Shift-Cmd-G","Cmd-Alt-F","Shift-Cmd-Alt-F","Cmd-[","Cmd-]","Cmd-Backspace","Cmd-Delete","Cmd-U","Shift-Cmd-U","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","delWrappedLineRight","rightPos","goDocStart","goDocEnd","goLineStart","goLineStartSmart","goLineEnd","goLineRight","goLineLeft","goLineLeftSmart","goLineUp","moveV","goLineDown","goPageUp","goPageDown","goCharLeft","moveH","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","deleteH","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentSelection","indentMore","indentLess","insertTab","insertSoftTab","spaces","defaultTab","execCommand","transposeChars","newlineAndIndent","sels","openLine","toggleOverwrite","defineInitHook","ContentEditableInput","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","onCopyCut","lineWiseCopyCut","clearData","kludge","hadFocus","showPrimarySelection","updateFromDOM","readFromDOMSoon","forceCompositionEnd","showMultipleSelections","curAnchor","curFocus","rng","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","poll","pollSelection","pollInterval","triggerOnKeyDown","pollContent","fromIndex","fromNode","toNode","toIndex","newText","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","contentEditable","readOnlyChanged","resetPosition","TextareaInput","prevInput","pollingFast","prepareCopyCut","createField","fastPoll","dispatchEvent","_display","moveInputWithCursor","headPos","wrapOff","lineOff","teTop","teLeft","drawn","contextMenuPending","slowPoll","missed","same","prepareSelectAllHack","extval","rehide","oldWrapperCSS","oldCSS","detectingSelectAll","resetSelectionOnContextMenu","wrapperBox","oldScrollY","scrollY","mouseup","deflt","notOnInit","defineOption","newBreaks","getInputField","integer","helpers","setOption","getDoc","addKeyMap","removeKeyMap","addOverlay","modeSpec","removeOverlay","newRanges","getTokenAt","getLineTokens","getTokenTypeAt","getHelpers","_global","getStateAfter","defaultTextHeight","defaultCharWidth","getViewport","addWidget","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","amount","rtlMoveVisually","goalColumn","goals","startChar","check","getScrollInfo","interpret","swapDoc","phrase","phraseText","phrases","getScrollerElement","getGutterElement","registerHelper","registerGlobalHelper","predicate","dontDelegate","contenteditable","defineExtension","defineDocExtension","cmpPos","sourceToolTip","markdown","web_storage","delim","lasthangoutwarning","messages","aria-haspopup","aria-expanded","Include my query","queryEditor","Broadcast to hangout","oneline","ta","has_payload","uuid","muser","suser","profile_id","data-userid","payload_handlers","load_from_server","ifempty","chat_messages","textStatus","errorThrown","update_time","diffBody","baseName","headName","scrollToBottom","onlydown","room","dif","nwe","about","chats","empty_title","total","chats++","chat_status","from_cache","entry","add_to_cache","qr","qc","current_profile","pluginName","current_query","default_query","query_cache","qid","check_cache","display_name","source_modified","modified","sourcelist","source_list","page","fill","results","tdtags","forEach","data-name","toISOString","search_footer","bopts","noresults","act","search_form","members","data-tag","data-value","resettimeout","btnsubmit","tagv","inputel","busy","tabbed","tabTypes","permalink","typeName","wrapInTab","wrapped","glyphicon","genId","tabid","profileObject","profiles","newTab","prompt","clean","pref","makeTabbed","newContentID","sl","fromURL","tabs","restoreTab","restoreData","into","noHistory","newtab","restoring","tabFromSource","inNewTab","setSource","meta","tabType","showTracePort","pengineID","addTab","removeTab","new_active","prologRunner","move_right","tabLabel","close_button","data-id","get_ordered_storage","tabSelect","data-type","data-ext","typelabel","download","print","fileInfo","searchForm","sform","data-search-in","sourceList","profileForm","pform","profileValue","navTabs","navTab","navContent","downloadCSV","infoBody","csv_formats","disposition","pengines","trimFullStop","application","Pengine","DEBUG","topic","TemplateState","marked","selectableMarkers","varIndex","isNested","_templateStack","Template","varTemplates","_tokens","parseTemplate","varParsing","addChar","line_selection","variable","getMarkerChanged","textChanged","_templateVar","onChange","_templateState","updating","markerChanged","uninstall","posChanged","newContent","onEndCompletion","selectNextVariable","exitOnEnd","exit","hintValue","samePos","p1","p2","_hintTemplateMarker","cursorPos","ourMap","templatesMap","templatesHint","Ctrl-Space","_content","nested","variables","startLine","_templates","tvar","targetLine","getCompletions","completions","completion","addTemplates","TemplatesHint","PrologHint","varp","detp","metav","hintsFor","myTemplates","symbol","anyword","anyhint","getHints","callback","attachContextInfo","diffMeta","m1","m2","diffAttr","diffTags","reduceMeta","t1","t2","commits","henabled","symbolic","showMetaData","metaData","newMetaData","showHistory","playButton","depth","data-click-to-select","data-single-select","row","fillHistoryTable","historyobj","data-commit","setCommit","showDiff","fillDiff","addTag","udiffData","classmap","@","-","__whitespace","\t","\n","\f","\r","difflib","defaultJunkFunction","stripLinebreaks","stringAsLines","lfpos","crpos","linebreak","__reduce","initial","__ntuplecomp","mlen","__calculate_ratio","__isindict","dict","__dictget","SequenceMatcher","isjunk","set_seqs","set_seq1","set_seq2","matching_blocks","opcodes","fullbcount","__chain_b","b2j","populardict","indices","junkdict","isbjunk","isbpopular","find_longest_match","alo","ahi","blo","bhi","besti","bestj","bestsize","j2len","newj2len","jdict","jkey","get_matching_blocks","qi","la","lb","i2","j2","k2","i1","j1","k1","block","non_adjacent","get_opcodes","answer","bj","blocks","get_grouped_opcodes","codes","nn","groups","ratio","sum","triple","quick_ratio","avail","availhas","numb","real_quick_ratio","_calculate_ratio","diffview","buildView","celt","clazz","telt","ctelt","addCells","tidx","tend","addCellsInline","tidx2","baseTextLines","newTextLines","baseTextName","newTextName","contextSize","inline","viewType","tdata","node2","rows","rowcnt","toprows","botrows","jump","newtxt","sm","filebase","udiff","editConflicts","addLine","filesysInfo","last_modified","modified_since_loaded","loaded","errorString","is_clean","onStorage","supportsType","changeGen","cleanCheckpoint","update_tab_title","reload","what","default","saveAs","saveAsBody","saveURL","restoreLocal","resolveEditConflict","tabContent","bdiv","merge-my-edits","edit","merge-server-edits","server","merge-conflicts","patch_status","editConflictAction","copyMeta","expose","rb","new","selections","notebook","getSelectionLabel","editorLabel","ed","getActive","percentage","close_chat","chatroom_size","cr","chat_message","load_messages","warnings","kind","explain","follow_file_options","unload","why","confirm","opened","uflagsW","chr","cp","UNICODE_MAP_SIZE","uflags_map","flags","id_start","id_continue","uppercase","separator","control","ctype","cmConfig","parserConfig","chain","readDigits","readEsc","isSingleEscChar","unicodeEscape","isHexDigit","isOctalDigit","nextUntilUnescaped","nesting","multiLineQuoted","setArg1","nest","goalStart","setArgAlignment","alignment","leftCol","nextArg","isControl","inBody","ret","tp","cont","peekSpace","plTokenBase","lastType","functor","functorName","functorColumn","closeColumn","tagColumn","plTokenComment","isSoloChar","commaAtEOL","quasiQuotations","plTokenQuasiQuotation","plTokenString","groupedIntegers","atom","isNeck","isControlOp","dicts","sec","quote","quoteType","maybeEnd","\"","'","`","curTerm","curToken","metainfo","enrich","textAfter","blockCommentStart","blockCommentEnd","blockCommentContinue","lineComment","prologStartIfThenElse","prologStartThen","prologStartElse","'('","'>'","';'","Ctrl-L","prologMaybeFireQuery","lastl","endc","prologFireQuery","Ctrl-Enter","State","sourceID","DEFAULT_DELAY","generationFromServer","changeEditor","prologHighlightServer","askRefresh","serverAssistedHighlight","leaveEditor","enrichStyle","matchTokenText","isQuoted","serverStyle","syntax_error","outOfSync","oos","skippedTerms","skippedTokens","okToken","okTerm","syncOnType","serverSync","leaveCM","modeOptions","refreshHighlight","var","qatom","bqstring","number","neg-number","pos-number","list_open","list_close","qq_open","qq_sep","qq_close","dict_open","dict_close","brace_term_open","brace_term_close","neck","fullstop","singleton","uatom","op_type","int","float","sep","ext_quant","expanded","comment_string","identifier","delimiter","head_exported","head_public","head_extern","head_dynamic","head_multifile","head_unreferenced","head_hook","head_meta","head_constraint","head_imported","head_built_in","head_iso","head_def_iso","head_def_swi","goal_built_in","goal_imported","goal_autoload","goal_global","goal_undefined","goal_thread_local","goal_dynamic","goal_multifile","goal_expanded","goal_extern","goal_recursion","goal_meta","goal_foreign","goal_local","goal_constraint","goal_not_callable","xpce_method","xpce_class_builtin","xpce_class_lib","xpce_class_user","xpce_class_undef","option_name","no_option_name","flag_name","no_flag_name","format_string","file_no_depends","nofile","qq_type","string_terminal","entity","html_attribute","sgml_attr_function","http_location_for_id","http_no_location_for_id","getEnrichedToken","terminfo","tokenInfo","getTokenReferences","setFile","htmlConfig","autoSelfClosers","command","embed","frame","keygen","track","wbr","menuitem","implicitlyClosed","dd","rp","contextGrabbers","address","article","aside","blockquote","dl","fieldset","hgroup","nav","doNotIndent","allowUnquoted","allowMissing","caseFold","xmlConfig","allowMissingTagName","editorConf","config_","inText","parser","inBlock","doctype","inTag","baseState","tagStart","inAttribute","stringStartCol","closure","isInAttribute","terminator","startOfLine","noIndent","popContext","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","setStyle","attrState","matchClosing","closeState","closeStateErr","_stream","attrEqState","attrValueState","attrContinuedState","htmlMode","isInText","baseIndent","fullLine","multilineTagIndentPastTag","multilineTagIndentFactor","alignCDATA","tagAfter","grabbers","configuration","skipAttribute","modeInfo","mimes","findModeByMIME","findModeByExtension","findModeByFileName","dot","findModeByName","cmCfg","modeCfg","switchInline","switchBlock","lineIsEmpty","linkTitle","linkHref","linkText","strikethrough","indentedCode","htmlBlock","htmlModeMissing","htmlState","inlineNormal","blockNormal","trailingSpaceNewLine","prevLine","thisLine","firstTokenOnLine","prevLineLineIsEmpty","prevLineIsIndentedCode","prevLineIsHr","prevLineIsList","maxNonCodeIndentation","listStack","lineIndentation","indentationDiff","allowsInlineContinuation","fencedCodeEnd","isHr","hrRE","tokenTypes","atxHeaderRE","highlightFormatting","formatting","getType","setext","listRE","listType","taskLists","taskListRE","taskList","fencedCodeRE","fencedEndRE","localMode","fencedCodeBlockHighlighting","localState","linkDefRE","setextHeaderRE","footnoteLink","md_inside","currListInd","hasExitedList","maxFencedEndInd","returnType","maxBlockquoteDepth","taskOpen","taskClosed","emoji","imageAltText","imageMarker","listMod","list2","list3","list1","handleText","textRE","matchCh","previousFormatting","formattingEscape","linkInline","linkEmail","leftFlanking","punctuation","rightFlanking","setEm","setStrong","retType","getLinkHrefInside","endChar","returnState","linkRE","footnoteLinkInside","footnoteUrl","tokenTypeOverrides","tokenType","allowAtxHeaderWithoutSpace",")","]","closeBrackets","fold","bracketRegex","findMatchingBracket","afterCursor","matching","strict","scanForBracket","forward","maxScanLen","maxScanLineLength","maxScanLines","matchBrackets","autoclear","maxHighlightLen","maxHighlightLineLength","marks","ie_lt8","doMatchBrackets","currentlyHighlighted","(","[","{","}","<","oldConfig","continueComment","inserts","modeHere","continueLineCommentEnabled","continueLineComment","nonWS","probablyInsideString","useInnerComments","noOptions","toggleComment","minLine","uncomment","commentString","fullLines","blockComment","pad","blankLines","commentBlankLines","baseString","startString","endString","lastLineHasText","blockCommentLead","didSomething","lineString","endPos","endLine","insideStart","insideEnd","lastStart","firstEnd","almostLastStart","foundEnd","Completion","startPos","startLen","activityFunc","parseOptions","hintOptions","defaultOptions","buildKeyMap","addBinding","baseMap","moveFocus","menuSize","setFocus","pick","custom","customKeys","extra","getHintElement","hintsElement","Widget","picked","hints","selectedHint","HINT_ELEMENT_CLASS","ACTIVE_HINT_ELEMENT_CLASS","hintId","alignWithWord","below","winW","winH","overlapY","scrolls","startScroll","overlapX","avoidWrap","changeActive","screenAmount","closeOnUnfocus","closingOnBlur","onScroll","curScroll","point","completeOnSingleClick","applicableHelpers","supportsSelection","fetchHints","resolveAutoHints","words","resolved","app","fromList","showHint","newOpts","completionActive","cancelAnimationFrame","closeCharacters","myTick","finishUpdate","completeSingle","auto","WORD","curWord","clearPlaceholder","setPlaceholder","placeHolder","modespec","ie_lt9","regexpFlags","regexp","ignoreCase","multiline","ensureFlags","maybeMultiline","searchRegexpForward","searchRegexpForwardMultiline","inside","lastMatchIn","cutOff","newMatch","searchRegexpBackward","searchRegexpBackwardMultiline","adjustPos","orig","folded","foldFunc","searchStringForward","doFold","noFold","cutFrom","searchStringBackward","topString","SearchCursor","atOccurrence","normalize","findNext","findPrevious","getSearchCursor","dialogDiv","dialog","closeNotification","currentNotificationClose","closed","onClose","selectValueOnOpen","closeOnEnter","closeOnBlur","blurring","doneTimer","searchOverlay","SearchState","posFrom","posTo","lastQuery","getSearchState","queryCaseInsensitive","persistentDialog","onEnter","openDialog","clearSearch","shortText","confirmDialog","fs","openConfirm","parseString","parseQuery","isRE","startSearch","queryText","showMatchesOnScrollbar","annotate","doSearch","rev","hiding","searchNext","getQueryDialog","getReplaceQueryDialog","getReplacementQueryDialog","getDoReplaceConfirm","dialogText","advance","doReplace","findPersistent","findPersistentNext","findPersistentPrev","findPrev","getJumpDialog","interpretLine","jumpToLine","posStr","showTooltip","hideTooltip","showTooltipFor","HOVER_CLASS","TextHoverState","onMouseOver","onMouseOverWithDelay","Function","getTextHover","textHover","newE","getTokenAndPosAt","optionHandler","nearby","predName","addFileTranslation","pathTranslations","localDef","capitalizeFirstLetter","tokenHelp","unused_import","undefined_import","expected","instantiation_error","html_call","html_raw","comment","operator","contextInfo","information","showContextInfo","showHints","posEq","addToRing","killRing","growRingTop","getFromRing","popFromRing","ring","lastKill","byChar","byWord","byLine","byPage","byParagraph","sawText","fst","bySentence","sawWord","byExpr","newPos","getPrefix","digits","emacsPrefix","clearPrefix","repeated","findEnd","by","killTo","killRegion","addPrefix","digit","maybeClearPrefix","maybeDuplicateInput","emacsPrefixMap","prefixPreservingKeys","addPrefixMap","prefixMap","maybeRemovePrefixMap","setMark","clearMark","getInput","operateOnWord","toEnclosingExpr","quit","regPrefix","Alt-G","Ctrl-X","Ctrl-Q","emacs","Ctrl-W","Alt-W","Alt-Y","Ctrl-Shift-2","Alt-V","Alt-A","Alt-E","Alt-K","Ctrl-Alt-K","Ctrl-Alt-F","Ctrl-Alt-B","Shift-Ctrl-Alt-2","Ctrl-Alt-T","leftStart","rightEnd","Ctrl-Alt-U","Alt-Space","Alt-C","letter","Alt-L","Alt-;","Ctrl-/","Shift-Ctrl--","Shift-Alt-,","Shift-Alt-.","Ctrl-R","Shift-Alt-5","Alt-/","Ctrl-J","Alt-G G","Ctrl-X Tab","Ctrl-X Ctrl-X","Ctrl-X Ctrl-S","Ctrl-X Ctrl-W","Ctrl-X S","Ctrl-X F","Ctrl-X U","Ctrl-X K","Ctrl-X Delete","Ctrl-X H","Ctrl-Q Tab","templateHint","loadStyleExtensions","sname","lastEditor","modeDefaults","autoCurrent","prologKeys","roleDefaults","moveLongClick","lc","long_click","sqrt","cancelLongClick","copyData","getSource","cm_highlight","continueComments","traceMark","pengine","setKeybinding","schema","isPengineSource","storageData","getBreakpoints","breakpoints","direct","mysrc","getSourceEx","bps","stdoc","getSourceID","makeCurrent","clean_signalled","setIsClean","printWithIframe","preference","highlightError","chmark","error_context","error_handler","clearMessages","isMyFile","charOffsetToPos","port","cppos","esel","cell_name","sr","l1","l2","restoreEditorSelection","cmsel","loffset","poff","goffset","l0","choff","cml","soff","toff","getExamples","inComment","comments","exlist","exl","ex","addExample","lineno","tmp","gotoLine","clearSearchMarkers","_searchMarkers","markMatches","myHeight","vp","setupStorage","contextAction","loc","data-locindex","coord","anon","addVars","qspan","wrapSolution","wrapQuery","program","tab_types","editDefaults","charno","cm_style","cm_hover_style","answerHasOutput","residuals","renderSubstitutions","substs","renderAnswer","substitutions","renderTabledAnswer","vname","binding","evalScripts","ajaxScript","eval","renderMulti","prologAnswer","selectMenu","hovering","startMenuTimeout","resetHover","closeSelectMenu","showSelect","hideSelect","selectNodeContents","outerHTML","extension","svg","blob","Blob","URL","createObjectURL","prologText","sparkline","createClass","SPFormat","clipval","quartile","normalizeValue","normalizeValues","addCSS","ensureArray","formatNumber","RangeMap","MouseHandler","Tooltip","barHighlightMixin","tristate","discrete","bullet","pie","defaultStyles","initStyles","VShape","VCanvas_base","VCanvas_canvas","VCanvas_vml","UNSET_OPTION","shapeCount","common","lineColor","fillColor","defaultPixelsPerValue","composite","tagValuesAttribute","tagOptionsPrefix","enableTagOptions","enableHighlight","highlightLighten","tooltipSkipNull","tooltipPrefix","tooltipSuffix","disableHiddenCheck","numberFormatter","numberDigitGroupCount","numberDigitGroupSep","numberDecimalMark","disableTooltips","disableInteraction","spotColor","highlightSpotColor","highlightLineColor","spotRadius","minSpotColor","maxSpotColor","lineWidth","normalRangeMin","normalRangeMax","normalRangeColor","drawNormalOnTop","chartRangeMin","chartRangeMax","chartRangeMinX","chartRangeMaxX","tooltipFormat","barColor","negBarColor","stackedBarColor","zeroColor","nullColor","zeroAxis","barSpacing","chartRangeClip","colorMap","posBarColor","zeroBarColor","tooltipValueLookups","-1","1","thresholdColor","thresholdValue","targetColor","targetWidth","performanceColor","rangeColors","sliceColors","borderWidth","raw","boxLineColor","boxFillColor","whiskerColor","outlierLineColor","outlierFillColor","medianColor","showOutliers","outlierIQR","tooltipFormatFieldlistKey","lq","med","uq","lo","ro","lw","rw","Class","_super","SPFormatClass","fre","precre","fclass","lookups","lookupkey","fieldvalue","prec","lookup","spformat","vl","nf","vals","groupsize","groupsep","decsep","ignoreNull","createStyleSheet","WebkitAppearance","simpledraw","useExisting","interact","mhandler","canvas","getContext","namespaces","registerCanvas","cleardraw","RangeMapClass","rangelist","range_map","currentPageX","currentPageY","splist","displayTooltips","highlightEnabled","registerSparkline","updateDisplay","$canvas","mouseclick","removeTooltip","clickEvent","sparklines","mousemove","currentEl","updatePosition","spcount","needsRefresh","clearRegionHighlight","tooltiphtml","localX","localY","setRegionHighlight","getCurrentRegionTooltip","disableHighlight","sizeStyle","tooltipClassname","sizetipStyle","tooltipOffsetX","tooltipOffsetY","sizetip","updateWindowDims","scrollRight","getSize","mousex","mousey","userValues","userOptions","sparkline_display_visible","extendedOptions","tagOptionType","tagValCache","getTagSetting","mergedOptions","pairs","keyval","defaultval","tagOption","_base","currentRegion","initTarget","interactive","canvasWidth","pixelWidth","canvasHeight","pixelHeight","getRegion","newRegion","removeHighlight","renderHighlight","changeHighlight","formats","formatlen","showFields","showFieldsKey","newFields","fv","formatter","fieldlen","entries","getCurrentRegionFields","isNull","suffix","calcHighlightColor","mult","rgbnew","highlightColor","lighten","newShapes","shapeids","regionShapes","renderRegion","replaceWithShapes","newShape","replaceWithShape","shapes","vertices","regionMap","xvalues","yvalues","yminmax","hightlightSpotId","lastShapeId","highlightSpot","vertex","drawCircle","highlightSpotId","insertAfterShape","drawLine","canvasTop","highlightLineId","removeShapeId","scanValues","isStr","valcount","maxy","maxyorg","miny","minyorg","maxx","minx","processRangeOptions","drawNormalRange","canvasLeft","rangey","ytop","drawRect","rangex","yvallast","paths","xnext","xpos","xposnext","yvalcount","lineShapes","fillShapes","plen","valueSpots","hlSpotsEnabled","drawShape","getLastShapeId","isStackString","groupMin","groupMax","stackRanges","numValues","vlen","xaxisOffset","clipMin","clipMax","stacked","vlist","slen","svals","yoffset","yMaxCalc","stackMin","stackMax","totalBarWidth","stackTotals","stackRangesNeg","canvasHeightEf","colorMapByIndex","colorMapByValue","calcColor","stacknum","valuenum","newColor","yoffsetNeg","minPlotted","allMin","halfHeight","itemWidth","pheight","valueShapes","regiondata","shapeid","getShapeAt","fieldkey","region","shape","renderRange","renderPerformance","renderTarget","rn","rangeval","rangewidth","perfval","perfwidth","targetval","targettop","targetheight","t0","radius","newslice","renderSlice","circle","drawPieSlice","quartiles","loutlier","routlier","lwhisker","rwhisker","iqr","q1","q2","q3","unitSize","minValue","maxValue","appendShape","_pxregex","x1","y1","x2","y2","_genShape","startAngle","endAngle","getElement","_insert","_calculatePixelDims","shapetype","shapeargs","shapeseq","currentTargetShapeId","_getContext","strokeStyle","fillStyle","clearRect","_drawShape","beginPath","moveTo","lineTo","stroke","targetX","targetY","isPointInPath","_drawCircle","arc","_drawPieSlice","closePath","_drawRect","sid","shapemap","groupel","insertAdjacentHTML","prerender","vpath","startx","starty","endx","endy","sin","vel","content_type","downloader","glyphButton","stretch","Collapse all","Expand all","Stop all","Clear","prologRunners","iconifyLast","runner","jrunner","alive","toggleIconic","RS","addAnswer","aliveState","answerTable","tds","runScripts","scripts","my_node","registerSources","handleCreate","resvar","residuals_var","hashvar","permahash_var","ask","termNoFullStop","handleSuccess","more","handleFailure","handleStop","handlePrompt","wait_for","clickableLocations","matched","gotoError","econtext","handleOutput","clickableError","handleError","handleAbort","handlePing","keyBindings","65","112","titleBarButton","tabled","next10","next100","next1000","savedFocus","answers","oncreate","onsuccess","onfailure","onstop","onprompt","onoutput","onping","ping","setScreenDimensions","sh","cw","cols","permahash","outputHTML","downloadButton","syntaxError","query_editor","trace","respond","exception","setPrompt","receiver","request","fdata","stopOrAbort","populateActionMenu","Re-run","savePermalink","save_permalink","stateful","stats","toBytes","bytes","pow","spark","stacks","colors","names","usage","trail","log10","tooltipChartTitle","node_id","unique_id","Sha1","sharedMemory","h0","hBytes","finalized","hashed","NODE_JS","JS_SHA1_NO_NODE_JS","COMMON_JS","JS_SHA1_NO_COMMON_JS","AMD","HEX_CHARS","EXTRA","SHIFT","OUTPUT_TYPES","createOutputMethod","outputType","createMethod","nodeWrap","crypto","Buffer","nodeMethod","createHash","digest","ArrayBuffer","Uint8Array","notString","lastByteIndex","finalize","hex","arrayBuffer","buffer","dataView","DataView","setUint32","sha1","data-action","imageButton","glyphButtonGlyph","notebook_menu","cell_type_select_div","cellTypes","Notebook","my_cell","currentCell","stringifyNotebookDOM","orderAttrs","is_cell","clipboard","toolbar","Delete cell","Copy cell","Paste cell","Move cell up","Move cell down","Insert cell","--","Clear all","Play","Settings","---","Exit fullscreen","removeSelector","mdiv","menu_state","focusout","eds","aeds","nc","fullscreen","delete","restore","down","insertAbove","insertBelow","if_visible","getSettings","open_fullscreen","hide_navbar","notebookSettingsBody","chat_container","cellType","checkModified","removeNotForQuery","viewrect","seltop","selbottom","organize","skipEmpty","isnew","outer_div","getClasses","allowed","cg","assignCellNames","updatePlaceHolder","run_all","queries","clear_all","cellText","fileInsertInput","theFile","typeMore","typeLess","less","prevprog","ensure_in_view","vh","assignName","runTabled","querySettingsBody","singleline","program_cells","programs","saveDOM","restoreDOM","prologQuery","Aggregate (count all)","Projection","Order by","Distinct","Limit","markdownText","makeEditable","setHTML","nbdata","markdown_post_renderer","htmlText","eval_script","runHTML","pretext","copyClassAttr","isDefault","getAttr","addClassAttr","addData","pcells","formsel","bindQuery","hideQuery","appendDropdown","accell","submenu","items","dropDownUL","clickNotSubMenu","clickSubMenu","grandparent","navbar","ul1","ul2","populateDropdown","clearDropdown","extendDropdown","dropup","examplesButton","updateExamples","examples","mousedown","historyButton","aggregateButton","aggregates","runButton","tableSelected","tableCheckbox","tabled_results","maxHistoryLength","qediv","setProgramEditor","bg","getProgramEditor","setExamples","exs","ex0","addHistory","restoreHistory","cleanGen","unfold","DEFAULT_USER_FIELDS","clearAuthenticationCache","oncomplete","agt","xmlhttp","createXMLObject","ActiveXObject","openPopup","uri","closeCallback","Logout","Profile","logged_in","swish_profile_url","user_profile","get_profile","set_from_chat","chat_key","given_name","family_name","nick_name","external_identity","identity_provider","logout","logout_url","auth_method","http_logout","d3","ascending","bisector","ascendingComparator","hi","pair","cross","values0","values1","reduce","i0","value0","n0","n1","descending","variance","valueof","mean","deviation","constant","sequence","ticks","tickIncrement","power","LN10","e10","e5","tickStep","step0","step1","thresholdSturges","LN2","histogram","xz","domain","x0","tz","threshold","bin","bins","bisectRight","thresholds","freedmanDiaconis","scott","median","numbers","arrays","permute","indexes","permutes","xi","xj","shuffle","transpose","matrix","zip","identity$1","translateX","translateY","number$1","scale","center","bandwidth","entering","__axis","orient","tickValues","tickArguments","tickFormat","spacing","tickSizeInner","tickPadding","range0","range1","tickExit","tickEnter","epsilon","tickSizeOuter","slice$1","tickSize","axisTop","axisRight","axisBottom","axisLeft","Dispatch","parseTypenames","typenames","creatorInherit","namespaceURI","xhtml","createElementNS","creatorFixed","fullname","creator","none","selection_select","_groups","subgroups","subnode","subgroup","__data__","_parents","selectorAll","selection_selectAll","matcher","selection_filter","sparse","selection_enter","_enter","EnterNode","_next","_parent","constant$1","bindIndex","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","keyPrefix","selection_data","enterGroup","updateGroup","_exit","selection_exit","selection_join","onenter","onupdate","onexit","selection_merge","selection$$1","groups0","groups1","m0","merges","group0","group1","selection_order","selection_sort","compareNode","ascending$1","sortgroups","sortgroup","selection_call","selection_nodes","nodes","selection_node","selection_size","selection_empty","selection_each","attrRemove","attrRemoveNS","removeAttributeNS","attrConstant","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","selection_attr","getAttributeNS","styleRemove","removeProperty","styleConstant","styleFunction","selection_style","styleValue","propertyRemove","propertyConstant","propertyFunction","selection_property","classArray","classList","ClassList","_node","_names","classedAdd","classedRemove","classedTrue","classedFalse","classedFunction","selection_classed","textRemove","textConstant","textFunction","selection_text","htmlRemove","htmlConstant","htmlFunction","selection_html","raise","selection_raise","lower","selection_lower","selection_append","constantNull","selection_insert","selection_remove","selection_cloneShallow","selection_cloneDeep","selection_clone","deep","selection_datum","property","filterContextListener","listener","contextListener","related","event1","event0","parseTypenames$1","onRemove","typename","__on","capture","onAdd","filterEvents","selection_on","customEvent","sourceEvent","CustomEvent","createEvent","initEvent","dispatchConstant","dispatchFunction","selection_dispatch","Local","nextId","ownerSVGElement","createSVGPoint","matrixTransform","getScreenCTM","inverse","clientTop","mouse","points","nopropagation","noevent","dragDisable","__noselect","MozUserSelect","yesdrag","noclick","constant$2","DragEvent","subject","defaultFilter","defaultContainer","defaultSubject","defaultTouchable","drag","mousedowned","touchable","touchstarted","touchmoved","touchended","touchending","gesture","beforestart","mousemoved","mouseupped","mousemoving","mousedownx","mousedowny","clickDistance2","gestures","touches$$1","point$$1","sublisteners","listeners","p0","clickDistance","definition","Color","reHex3","Rgb","reHex6","rgbn","reRgbInteger","reRgbPercent","reRgbaInteger","rgba","reRgbaPercent","reHslPercent","hsla","reHslaPercent","named","rgbConvert","rgb","Hsl","hslConvert","hsl","hsl2rgb","labConvert","Lab","Hcl","deg2rad","rgb2lrgb","xyz2lab","Yn","Xn","Zn","gray","lab","t3","lab2xyz","lrgb2rgb","hclConvert","atan2","rad2deg","lch","hcl","cubehelixConvert","Cubehelix","BC_DA","ED","EB","bl","cubehelix","basis","v0","v1","v2","v3","basis$1","basisClosed","constant$3","exponential","hue","gamma","nogamma","rgbSpline","spline","color$$1","array$1","na","interpolateValue","setTime","interpolateNumber","object","zero","interpolateString","am","bm","bs","reA","reB","interpolateRgb","valueOf","hue$1","interpolateRound","decompose","skewX","rotate","degrees","atan","parseCss","identity$2","cssNode","cssRoot","cssView","parseSvg","svgNode","baseVal","consolidate","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","cosh","exp","sinh","tanh","interpolateZoom","ux0","uy0","w0","ux1","uy1","w1","epsilon2","rho","b0","rho4","rho2","b1","coshr0","hsl$1","hue$$1","lab$1","hcl$1","cubehelix$1","cubehelixGamma","cubehelix$$1","piecewise","interpolate","quantize","interpolator","samples","clockNow","setFrame","clearNow","clock","clockSkew","Timer","_call","_time","restart","timerFlush","taskHead","wake","clockLast","nap","poke","pokeDelay","taskTail","sleep","timeout$1","elapsed","interval$1","schedule","timing","schedules","__transition","create$1","emptyOn","tween","emptyTween","ease","CREATED","get$1","set$1","STARTED","SCHEDULED","RUNNING","ENDED","STARTING","ENDING","interrupt","schedule$$1","selection_interrupt","tweenRemove","tween0","tween1","tweenFunction","transition_tween","_id","tweenValue","attrRemove$1","attrRemoveNS$1","attrConstant$1","interpolate$$1","value1","string00","interpolate0","string1","string0","attrConstantNS$1","attrFunction$1","string10","attrFunctionNS$1","transition_attr","interpolateTransformSvg","attrTween","attrInterpolate","attrInterpolateNS","attrTweenNS","_value","transition_attrTween","delayFunction","delayConstant","transition_delay","durationFunction","durationConstant","transition_duration","easeConstant","transition_ease","transition_filter","Transition","_name","transition_merge","transition$$1","onFunction","on0","on1","sit","transition_on","removeFunction","transition_remove","transition_select","select$$1","transition_selectAll","inherit","transition_selection","Selection$1","styleNull","styleRemove$1","styleConstant$1","styleFunction$1","styleMaybeRemove","listener0","transition_style","interpolateTransformCss","styleTween","styleInterpolate","transition_styleTween","textConstant$1","textFunction$1","transition_text","transition_transition","id0","id1","newId","transition_end","Promise","linear$1","quadIn","quadOut","quadInOut","cubicIn","cubicOut","cubicInOut","sinIn","halfPi","sinOut","sinInOut","pi","expIn","expOut","expInOut","circleIn","circleOut","circleInOut","bounceIn","bounceOut","b3","b2","b4","b6","b5","b7","b8","b9","bounceInOut","defaultTiming","selection_transition","root$1","constant$4","BrushEvent","nopropagation$1","noevent$1","defaultFilter$1","defaultExtent","local$1","__brush","empty$1","brushSelection","dim","brushX","brush$1","brushY","brush","XY","handles","redraw","started","handleSize","Emitter","point1","shifting","lockX","lockY","moving","point0","MODE_SPACE","MODE_DRAG","signX","e0","e1","signY","s0","s1","MODE_HANDLE","MODE_CENTER","flipX","flipY","emit","ended","keydowned","keyupped","signsX","signsY","selection1","selection0","starting","compareValue","chord","groupSums","groupIndex","subgroupIndex","chords","sortGroups","sortSubgroups","max$1","tau$1","padAngle","di","dj","subindex","sortChords","constant$5","Path","_x0","_y0","_x1","_y1","defaultSource","defaultTarget","defaultRadius","defaultStartAngle","defaultEndAngle","ribbon","argv","slice$2","sa0","halfPi$1","sa1","sx0","sy0","ta0","ta1","quadraticCurveTo","Map","map$1","createResult","setResult","sortValues","rollup","valuesByKey","sortKey","sortKeys","createObject","setObject","createMap","setMap","Set","set$2","ascending$2","constant$6","hole","ringContains","yi","pj","yj","segmentContains","collinear","within","noop$1","contours","threshold$$1","contour","polygons","holes","isorings","smooth","polygon","coordinates","stitch","endIndex","fragmentByEnd","fragmentByStart","cases","smoothLinear","_0","_1","slice$3","blurX","blurY","defaultX","defaultY","defaultWeight","density","Float32Array","wi","weight","geometry","transformPolygon","transformRing","transformPoint","cellSize","objectConverter","columns","customConverter","inferColumns","columnSet","formatYear","year","formatDate","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","dsvFormat","convert","parseRows","eof","EOF","EOL","QUOTE","NEWLINE","RETURN","DELIMITER","preformatBody","formatValue","formatBody","formatRows","formatRow","reFormat","autoType","responseBlob","fetch","responseArrayBuffer","dsvParse","dsv","Image","responseJson","text$$1","center$1","sx","sy","constant$7","jiggle","tree_add","_x","_y","cover","tree","xm","ym","xp","yp","_root","y0","addAll","yz","tree_cover","tree_data","visit","tree_extent","Quad","tree_find","x3","y3","quads","tree_remove","retainer","removeAll","tree_root","tree_size","tree_visit","tree_visitAfter","defaultX$1","tree_x","defaultY$1","tree_y","quadtree","Quadtree","leaf_copy","vx","vy","collide","quad","rj","ri","strength","ri2","iterations","visitAfter","radii","nodeById","nodeId","defaultStrength","alpha","distances","strengths","initializeStrength","initializeDistance","x$1","y$1","simulation","alphaMin","stepper","alphaTarget","alphaDecay","forces","velocityDecay","fy","initializeNodes","initialRadius","angle","initialAngle","initializeForce","manyBody","accumulate","theta2","distanceMax2","distanceMin2","distanceMin","distanceMax","theta","radial","radiuses","x$2","y$2","formatDecimal","coefficient","exponent$1","formatGroup","grouping","thousands","formatNumerals","numerals","formatSpecifier","specifier","FormatSpecifier","sign","comma","precision","formatTrim","formatPrefixAuto","exponent","prefixExponent","formatRounded","identity$3","formatLocale","locale","newFormat","valuePrefix","valueSuffix","formatType","valueNegative","prefixes","maybeSuffix","decimal","formatTypes","currency","formatPrefix","defaultLocale","precisionFixed","precisionPrefix","precisionRound","adder","Adder","add$1","bv","av","acos","pi$3","asin","halfPi$2","haversin","sin$1","noop$2","streamGeometry","streamGeometryType","streamLine","coordinate","streamPolygon","polygonStart","polygonEnd","geoStream","streamObjectType","areaRingStart","areaStream","areaPointFirst","areaRingEnd","areaPoint","lambda00","phi00","lambda","phi","radians","lambda0","cosPhi0","cos$1","quarterPi","sinPhi0","dLambda","sdLambda","adLambda","cosPhi","sinPhi","areaRingSum","area$1","areaSum","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","boundsPoint","lambda0$1","lambda1","phi0","phi1","linePoint","equatorial","inflection","phii","lambda2","sign$$1","lambdai","degrees$1","antimeridian","boundsLineStart","boundsStream","boundsLineEnd","boundsRingPoint","deltaSum","lambda00$1","phi00$1","boundsRingStart","boundsRingEnd","epsilon$2","rangeCompare","rangeContains","bounds","feature","deltaMax","centroidPoint","centroidPointCartesian","W0","X0","Y0","Z0","centroidLineStart","centroidStream","centroidLinePointFirst","z0","centroidLinePoint","W1","X1","Y1","Z1","centroidLineEnd","centroidRingStart","centroidRingPointFirst","centroidRingEnd","centroidRingPoint","lambda00$2","phi00$2","cx","cy","cz","X2","Y2","Z2","centroid","epsilon2$1","constant$8","compose","rotationIdentity","tau$3","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleStream","cosRadius","sinRadius","circleRadius","clipBuffer","rejoin","pointEqual","Intersection","clipRejoin","segments","compareIntersection","startInside","clip","segment","link$1","isSubject","polygonContains","winding","sum$1","sinPhi1","cosPhi1","absDelta","phiArc","pointVisible","sink","pointLine","pointRing","ringSink","ringStart","ringEnd","ringSegments","ringBuffer","polygonStarted","validSegment","sphere","clipAntimeridianLine","sign0","sign1","clipAntimeridianIntersect","sinLambda0Lambda1","clipAntimeridianInterpolate","clipCircle","c0","v00","point2","smallRadius","intersect","notHemisphere","two","pa","pb","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","uu","polar","meridian","ax","ay","bx","clipRectangle","corner","comparePoint","ca","activeStream","polygonInside","bufferStream","cleanInside","clipStream","v_","x_","y_","x__","y__","v__","extent$1","cacheStream","lengthLineStart","lengthStream","lengthPointFirst","lengthLineEnd","lambda0$2","sinPhi0$1","cosPhi0$1","lengthPoint","cosDelta","sinDelta","lengthSum","length$1","object$1","containsGeometry","containsGeometryType","containsPoint","containsLine","ab","containsPolygon","ringRadians","pointRadians","contains$1","containsObjectType","graticuleX","graticuleY","graticule","DX","DY","outline","extentMajor","extentMinor","stepMajor","stepMinor","graticule10","interpolate$1","cy0","cy1","sy1","kx0","ky0","kx1","ky1","identity$4","areaRingStart$1","areaStream$1","areaPointFirst$1","areaPoint$1","x00","x0$1","y00","y0$1","areaRingSum$1","areaRingEnd$1","boundsPoint$1","x0$2","y0$2","centroidPoint$1","X0$1","Y0$1","Z0$1","centroidLineStart$1","centroidStream$1","centroidPointFirstLine","centroidPointLine","x0$3","y0$3","X1$1","Y1$1","Z1$1","centroidLineEnd$1","centroidRingStart$1","centroidPointFirstRing","centroidRingEnd$1","centroidPointRing","x00$1","y00$1","X2$1","Y2$1","Z2$1","PathContext","_context","lengthPointFirst$1","lengthStream$1","lengthPoint$1","x00$2","x0$4","y00$2","y0$4","lengthSum$1","PathString","_string","circle$1","index$1","pointRadius","contextStream","projectionStream","boundsStream$1","transformer","TransformStream","fit","fitBounds","clipExtent","fitExtent","fitSize","fitWidth","fitHeight","resample","project","delta2","resample$1","resampleNone","resampleLineTo","phi2","dx2","dy2","dz","cosMinDistance","resampleStream","maxDepth","ringPoint","a00","b00","c00","transformRotate","scaleTranslate","transform$$1","scaleTranslateRotate","cosAlpha","sinAlpha","ci","fi","projectionMutator","projectAt","projectRotateTransform","recenter","projectTransform","projectResample","preclip","clipAntimeridian","postclip","transformRadians","clipAngle","conicProjection","parallels","cylindricalEqualAreaRaw","conicEqualAreaRaw","r0y","conicEqualArea","albers","multiplex","streams","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","azimuthalRaw","azimuthalInvert","sc","cc","azimuthalEqualArea","azimuthalEqualAreaRaw","azimuthalEquidistant","azimuthalEquidistantRaw","mercatorRaw","tan","mercator","mercatorProjection","reclip","tany","conicConformalRaw","conicConformal","equirectangularRaw","equirectangular","conicEquidistantRaw","gy","nx","conicEquidistant","equalEarthRaw","l6","A1","A2","A3","A4","equalEarth","gnomonicRaw","gnomonic","scaleTranslate$1","kx","ky","tx","ty","identity$5","reflectX","reflectY","naturalEarth1Raw","phi4","naturalEarth1","orthographicRaw","orthographic","stereographicRaw","stereographic","transverseMercatorRaw","transverseMercator","defaultSeparation","meanX","meanXReduce","maxY","maxYReduce","leafLeft","leafRight","cluster","previousNode","eachAfter","separation","nodeSize","node_count","node_each","node_eachBefore","node_eachAfter","node_sum","node_sort","eachBefore","node_path","ancestor","leastCommonAncestor","aNodes","ancestors","bNodes","node_ancestors","node_descendants","node_leaves","leaves","node_links","hierarchy","childs","valued","defaultChildren","computeHeight","node_copy","shuffle$1","enclose","circles","slice$4","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","encloseBasis1","r2","x21","y21","r21","r3","a3","c3","intersects","Node$1","packEnclose","aa","sj","sk","pack","optional","required","constantZero","constant$9","defaultRadius$1","index$2","radiusLeaf","packChildren","translateChild","roundNode","treemapDice","partition","positionNode","defaultId","defaultParentId","parentId","stratify","nodeKey","nodeByKey","keyPrefix$1","ambiguous","preroot","defaultSeparation$1","nextLeft","nextRight","moveSubtree","wm","wp","executeShifts","nextAncestor","vim","TreeNode","treeRoot","firstWalk","secondWalk","sizeNode","midpoint","apportion","vip","vop","vom","sip","sop","sim","som","treemapSlice","squarifyRatio","sumValue","newRatio","minRatio","beta","dice","index$3","treemap","paddingStack","paddingInner","squarify","paddingOuter","valueOffset","sums","valueTarget","valueLeft","valueRight","xk","yk","sliceDice","area$2","centroid$1","cross$1","lexicographicOrder","computeUpperHullIndexes","hull","sortedPoints","flippedPoints","upperIndexes","lowerIndexes","skipLeft","skipRight","contains$2","length$2","perimeter","defaultSource$1","initRange","initInterpolator","ordinal","unknown","implicit","slice$5","band","rescale","ordinalRange","rangeRound","pointish","point$1","constant$a","number$2","identity$6","clamper","bimap","d0","polymap","clamp","transformer$1","piecewise$$1","untransform","map$2","continuous","linearish","nice","linear$2","identity$7","transformLog","transformExp","transformLogn","transformExpn","pow10","powp","logp","log2","reflect","loggish","logs","pows","log$1","transformSymlog","log1p","transformSymexp","expm1","symlogish","symlog","transformPow","transformSqrt","transformSquare","powish","pow$1","sqrt$1","quantile$$1","invertExtent","quantiles","quantize$1","threshold$1","newInterval","floori","offseti","t0$1","t1$1","weekday","setDate","getDate","getDay","setHours","getTimezoneOffset","durationMinute","durationWeek","utcWeekday","setUTCDate","getUTCDay","setUTCHours","localDate","setFullYear","utcDate","UTC","setUTCFullYear","newYear","formatLocale$1","pads","newParse","newDate","week","day$$1","parseSpecifier","utcMonday","utcDay","monday","day","getFullYear","getMonth","parses","parsePeriod","periodRe","periodLookup","parseShortWeekday","shortWeekdayRe","shortWeekdayLookup","parseWeekday","weekdayRe","weekdayLookup","parseShortMonth","shortMonthRe","shortMonthLookup","parseMonth","monthRe","monthLookup","parseLocaleDateTime","locale_dateTime","parseLocaleDate","locale_date","parseLocaleTime","locale_time","formatShortWeekday","locale_shortWeekdays","formatWeekday","locale_weekdays","formatShortMonth","locale_shortMonths","formatMonth","locale_months","formatPeriod","locale_periods","getHours","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","dateTime","periods","days","shortDays","months","shortMonths","formatRe","formatLookup","formatDayOfMonth","formatMicroseconds","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear$1","formatFullYear","formatZone","%","formatLiteralPercent","utcFormats","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parseDayOfMonth","parseMicroseconds","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseYear","parseFullYear","parseZone","parseLiteralPercent","utcFormat","utcParse","pad$1","requote","requoteRe","numberRe","percentRe","getMilliseconds","getMinutes","getSeconds","sunday","thursday","utcYear","dow","utcSunday","utcThursday","defaultLocale$1","locale$1","timeFormat","timeParse","formatIsoNative","parseIsoNative","date$1","number$3","calendar","year$$1","month$$1","hour$$1","minute$$1","second$$1","millisecond$$1","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","tickInterval","tickIntervals","durationYear","durationSecond$1","durationMinute$1","durationHour$1","durationDay$1","durationWeek$1","durationMonth","month","hour","minute","millisecond","utcTime","utcMonth","utcHour","utcMinute","transformer$2","k10","copy$1","sequential","sequentialLog","sequentialSymlog","sequentialPow","sequentialSqrt","sequentialQuantile","transformer$3","k21","diverging","divergingLog","divergingSymlog","divergingPow","divergingSqrt","ramp","scheme","rgbBasis","rainbow","ts","sinebow","c$1","pi_1_3","pi_2_3","ramp$1","constant$b","acos$1","pi$4","asin$1","halfPi$3","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","arcEndAngle","arcPadAngle","x10","y10","x32","y32","epsilon$3","cornerTangents","x01","y01","sqrt$2","ox","oy","x11","y11","max$2","cx0","cx1","dx0","dy0","dx1","dy1","da","abs$1","tau$4","cos$2","sin$2","a01","a11","a10","da0","da1","ap","padRadius","min$1","cornerRadius","rc0","rc1","oc","kc","atan2$1","Linear","curveLinear","x$3","y$3","defined0","curve","defined","x$$1","y$$1","area$3","x0z","y0z","areaStart","areaEnd","arealine","lineX0","lineY0","lineY1","lineX1","descending$1","identity$8","arcs","Radial","_curve","curveRadial","lineRadial","lineRadial$1","curveRadialLinear","areaRadial","lineStartAngle","lineEndAngle","lineInnerRadius","lineOuterRadius","pointRadial","linkSource","linkTarget","link$2","slice$6","curveHorizontal","bezierCurveTo","curveVertical","curveRadial$1","p3","linkHorizontal","linkVertical","linkRadial","draw","circle$2","noop$3","point$2","Basis","basis$2","BasisClosed","basisClosed$1","BasisOpen","basisOpen","Bundle","_basis","_beta","point$3","_k","_x2","_y2","Cardinal","tension","CardinalClosed","CardinalOpen","point$4","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","CatmullRomClosed","CatmullRomOpen","LinearClosed","linearClosed","sign$1","slope3","slope2","point$5","MonotoneX","MonotoneY","ReflectContext","monotoneX","monotoneY","Natural","controlPoints","natural","Step","stepBefore","stepAfter","none$1","series","none$2","stackValue","oz","kz","sij","ki","si","diverging$1","yn","silhouette","wiggle","s2","sij0","sij1","s3","appearance","peaks","peak","vi","vj","ascending$3","sum$2","descending$2","insideOut","tops","bottoms","constant$c","x$4","y$4","RedBlackTree","RedBlackNode","RedBlackRotateLeft","RedBlackRotateRight","RedBlackFirst","createEdge","edges","setEdgeEnd","cells","halfedges","createBorderEdge","clipEdge","connectEdge","fm","fb","lx","ly","rx","ry","clipEdges","epsilon$4","createCell","site","cellHalfedgeAngle","va","vb","cellHalfedgeStart","cellHalfedgeEnd","sortCellHalfedges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endY","nCells","dc","v01","v11","v10","Circle","attachCircle","lArc","rArc","lSite","cSite","rSite","epsilon2$2","ha","hc","circlePool","firstCircle","detachCircle","Beach","createBeach","beach","beachPool","detachBeach","beaches","removeBeach","disappearing","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","voronoi","triangles","constant$d","ZoomEvent","Transform","transform$1","__zoom","identity$9","nopropagation$2","noevent$2","defaultFilter$2","defaultExtent$1","defaultTransform","defaultWheelDelta","deltaY","deltaMode","defaultTouchable$1","defaultConstrain","translateExtent","invertX","invertY","wheeled","dblclicked","scaleExtent","Gesture","wheelidled","wheel","wheelDelay","constrain","touch0","touch1","touchstarting","touchDelay","dp","scaleBy","scaleTo","translateBy","translateTo","ascendingBisect","bisectLeft","xlink","xmlns","classed","reI","reN","reP","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","displayable","brighter","darker","rgbGamma","rgb$$1","rgbBasisClosed","SQRT2","hsl$2","hslLong","hcl$2","hclLong","cubehelix$2","cubehelixLong","performance","selection_prototype","polyIn","polyOut","polyInOut","backIn","overshoot","backOut","backInOut","tau","elasticIn","amplitude","period","elasticOut","elasticInOut","xy","pi$1","pi$2","tau$2","tauEpsilon","arcTo","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","ccw","proto","array$2","csv","csvParse","csvParseRows","csvFormatBody","csvFormatRows","tsv","tsvParse","tsvParseRows","tsvFormat","tsvFormatBody","tsvFormatRows","csv$1","tsv$1","treeProto","toPrecision","temp","Feature","FeatureCollection","features","Sphere","Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection","geometries","areaRing","areaSum$1","_radius","_line","_point","lengthRing","_circle","cxcy","fpy","descendants","resquarify","_squarify","uniform","sourceRandomUniform","randomUniform","sourceRandomNormal","randomNormal","mu","sigma","logNormal","sourceRandomLogNormal","randomLogNormal","irwinHall","sourceRandomIrwinHall","randomIrwinHall","bates","sourceRandomBates","randomBates","exponential$1","sourceRandomExponential","randomExponential","array$3","tuesday","wednesday","friday","saturday","sundays","mondays","tuesdays","wednesdays","thursdays","fridays","saturdays","setMonth","years","setUTCSeconds","utcMinutes","setUTCMinutes","utcHours","utcDays","utcTuesday","utcWednesday","utcFriday","utcSaturday","utcSundays","utcMondays","utcTuesdays","utcWednesdays","utcThursdays","utcFridays","utcSaturdays","setUTCMonth","utcMonths","utcYears","formatIso","parseIso","category10","Accent","Dark2","Paired","Pastel1","Pastel2","Set1","Set2","Set3","BrBG","scheme$1","PRGn","scheme$2","PiYG","scheme$3","PuOr","scheme$4","RdBu","scheme$5","RdGy","scheme$6","RdYlBu","scheme$7","RdYlGn","scheme$8","Spectral","scheme$9","BuGn","scheme$a","BuPu","scheme$b","GnBu","scheme$c","OrRd","scheme$d","PuBuGn","scheme$e","PuBu","scheme$f","PuRd","scheme$g","RdPu","scheme$h","YlGnBu","scheme$i","YlGn","scheme$j","YlOrBr","scheme$k","YlOrRd","scheme$l","Blues","scheme$m","Greens","scheme$n","Greys","scheme$o","Purples","scheme$p","Reds","scheme$q","Oranges","cubehelix$3","warm","cool","viridis","magma","inferno","plasma","cross$2","tan30","tan30_2","diamond","kr","star","square","sqrt3","triangle","wye","symbols","_x3","_x4","_y3","_y4","bundle","cardinal","_x5","_y5","cardinalClosed","cardinal$$1","cardinalOpen","x23","y23","catmullRom","catmullRomClosed","catmullRom$$1","catmullRomOpen","_t0","px","py","grandpa","uncle","_found","applyX","applyY","rescaleX","rescaleY","bisect","thresholdFreedmanDiaconis","thresholdScott","quantile","contourDensity","dragEnable","easeLinear","easeQuad","easeQuadIn","easeQuadOut","easeQuadInOut","easeCubic","easeCubicIn","easeCubicOut","easeCubicInOut","easePoly","easePolyIn","easePolyOut","easePolyInOut","easeSin","easeSinIn","easeSinOut","easeSinInOut","easeExp","easeExpIn","easeExpOut","easeExpInOut","easeCircle","easeCircleIn","easeCircleOut","easeCircleInOut","easeBounce","easeBounceIn","easeBounceOut","easeBounceInOut","easeBack","easeBackIn","easeBackOut","easeBackInOut","easeElastic","easeElasticIn","easeElasticOut","easeElasticInOut","forceCenter","forceCollide","forceLink","forceManyBody","forceRadial","forceSimulation","forceX","forceY","formatDefaultLocale","geoArea","geoBounds","geoCentroid","geoCircle","geoClipAntimeridian","geoClipCircle","geoClipExtent","geoClipRectangle","geoContains","geoDistance","geoGraticule","geoGraticule10","geoInterpolate","geoLength","geoPath","geoAlbers","geoAlbersUsa","geoAzimuthalEqualArea","geoAzimuthalEqualAreaRaw","geoAzimuthalEquidistant","geoAzimuthalEquidistantRaw","geoConicConformal","geoConicConformalRaw","geoConicEqualArea","geoConicEqualAreaRaw","geoConicEquidistant","geoConicEquidistantRaw","geoEqualEarth","geoEqualEarthRaw","geoEquirectangular","geoEquirectangularRaw","geoGnomonic","geoGnomonicRaw","geoIdentity","geoProjection","geoProjectionMutator","geoMercator","geoMercatorRaw","geoNaturalEarth1","geoNaturalEarth1Raw","geoOrthographic","geoOrthographicRaw","geoStereographic","geoStereographicRaw","geoTransverseMercator","geoTransverseMercatorRaw","geoRotation","geoTransform","packSiblings","treemapBinary","treemapSliceDice","treemapSquarify","treemapResquarify","interpolateArray","interpolateBasis","interpolateBasisClosed","interpolateDate","interpolateDiscrete","interpolateHue","interpolateObject","interpolateRgbBasis","interpolateRgbBasisClosed","interpolateHsl","interpolateHslLong","interpolateLab","interpolateHcl","interpolateHclLong","interpolateCubehelix","interpolateCubehelixLong","polygonArea","polygonCentroid","polygonHull","polygonLength","scaleBand","scalePoint","scaleIdentity","scaleLinear","scaleLog","scaleSymlog","scaleOrdinal","scaleImplicit","scalePow","scaleSqrt","scaleQuantile","scaleQuantize","scaleThreshold","scaleTime","scaleUtc","scaleSequential","scaleSequentialLog","scaleSequentialPow","scaleSequentialSqrt","scaleSequentialSymlog","scaleSequentialQuantile","scaleDiverging","scaleDivergingLog","scaleDivergingPow","scaleDivergingSqrt","scaleDivergingSymlog","schemeCategory10","schemeAccent","schemeDark2","schemePaired","schemePastel1","schemePastel2","schemeSet1","schemeSet2","schemeSet3","interpolateBrBG","schemeBrBG","interpolatePRGn","schemePRGn","interpolatePiYG","schemePiYG","interpolatePuOr","schemePuOr","interpolateRdBu","schemeRdBu","interpolateRdGy","schemeRdGy","interpolateRdYlBu","schemeRdYlBu","interpolateRdYlGn","schemeRdYlGn","interpolateSpectral","schemeSpectral","interpolateBuGn","schemeBuGn","interpolateBuPu","schemeBuPu","interpolateGnBu","schemeGnBu","interpolateOrRd","schemeOrRd","interpolatePuBuGn","schemePuBuGn","interpolatePuBu","schemePuBu","interpolatePuRd","schemePuRd","interpolateRdPu","schemeRdPu","interpolateYlGnBu","schemeYlGnBu","interpolateYlGn","schemeYlGn","interpolateYlOrBr","schemeYlOrBr","interpolateYlOrRd","schemeYlOrRd","interpolateBlues","schemeBlues","interpolateGreens","schemeGreens","interpolateGreys","schemeGreys","interpolatePurples","schemePurples","interpolateReds","schemeReds","interpolateOranges","schemeOranges","interpolateCubehelixDefault","interpolateRainbow","interpolateWarm","interpolateCool","interpolateSinebow","interpolateViridis","interpolateMagma","interpolateInferno","interpolatePlasma","clientPoint","radialArea","radialLine","symbolCircle","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolTriangle","symbolWye","curveBasisClosed","curveBasisOpen","curveBasis","curveBundle","curveCardinalClosed","curveCardinalOpen","curveCardinal","curveCatmullRomClosed","curveCatmullRomOpen","curveCatmullRom","curveLinearClosed","curveMonotoneX","curveMonotoneY","curveNatural","curveStep","curveStepAfter","curveStepBefore","stackOffsetExpand","stackOffsetDiverging","stackOffsetNone","stackOffsetSilhouette","stackOffsetWiggle","stackOrderAppearance","stackOrderAscending","stackOrderDescending","stackOrderInsideOut","stackOrderNone","stackOrderReverse","timeInterval","timeMillisecond","timeMilliseconds","utcMillisecond","utcMilliseconds","timeSecond","timeSeconds","utcSecond","utcSeconds","timeMinute","timeMinutes","timeHour","timeHours","timeDay","timeDays","timeWeek","timeWeeks","timeSunday","timeSundays","timeMonday","timeMondays","timeTuesday","timeTuesdays","timeWednesday","timeWednesdays","timeThursday","timeThursdays","timeFriday","timeFridays","timeSaturday","timeSaturdays","timeMonth","timeMonths","timeYear","timeYears","utcWeek","utcWeeks","timeFormatDefaultLocale","timeFormatLocale","isoFormat","isoParse","zoomTransform","zoomIdentity","_typeof","_classCallCheck","instance","_defineProperty","ChartInternal","api","$$","getDefaultConfig","axes","Chart","internal","loadConfig","beforeInit","afterInit","bindThis","argThis","AxisInternal","component","innerTickSize","outerTickSize","withOuterTick","tickOffset","tickCulling","tickCentered","tickTextCharSize","tickTextRotate","tickLength","generateAxis","axisX","axisY","generateTicks","copyScale","newScale","isCategory","textFormatted","formatted","updateRange","rangeExtent","updateTickTextCharSize","isVertical","tspanData","splitted","tickMultiline","splitTickText","tickMultilineMax","ellipsify","spaceIndex","subtext","textWidth","tickText","tickWidth","ellipsified","available","padEnd","updateTickLength","lineY2","tickPosition","textY","textTextAnchor","tspanDx","tspanDy","tickTransform","tickX","tickY","scale0","__chart__","scale1","ticksValues","tickUpdate","lineUpdate","textUpdate","tspans","tspanEnter","tspanUpdate","pathUpdate","rangeBand","isCentered","getTotalLength","culling","chart","chartLine","chartLines","chartBar","chartBars","chartText","chartTexts","chartArc","chartArcs","chartArcsTitle","chartArcsBackground","chartArcsGaugeUnit","chartArcsGaugeMax","chartArcsGaugeMin","selectedCircle","selectedCircles","eventRect","eventRects","eventRectsSingle","eventRectsMultiple","zoomRect","dragZoom","defocused","regions","tooltipContainer","tooltipName","bars","arcLabelLine","areas","texts","gaugeValue","grid","gridLines","xgrid","xgrids","xgridLine","xgridLines","xgridFocus","ygrid","ygrids","ygridLine","ygridLines","axisXLabel","axisYLabel","axisY2","axisY2Label","legendBackground","legendItem","legendItemEvent","legendItemTile","legendItemHidden","legendItemFocused","dragarea","EXPANDED","SELECTED","INCLUDED","asHalfPixel","ceil10","diffDomain","isDefined","getPathBox","pathSegList","hasValue","isValue","notEmpty","sanitise","Axis","main","axis_x_inner","clipPathForXAxis","getTranslate","axis_x_show","axis_rotated","textAnchorForXAxisLabel","axis_y_inner","clipPathForYAxis","axis_y_show","textAnchorForYAxisLabel","axis_y2_show","textAnchorForY2AxisLabel","getXAxis","withoutTransition","withoutRotateTickText","axisParams","isCategorized","axis_x_tick_multiline","axis_x_tick_multilineMax","axis_x_tick_width","axis_x_tick_rotate","isTimeSeries","parseDate","axis_x_tick_centered","axis_x_tick_culling","updateXAxisTickValues","axis_x_tick_fit","axis_x_tick_count","generateTickValues","mapTargetsToUniqueXs","xAxis","subXAxis","getYAxis","axis_y_tick_rotate","isTimeSeriesY","axis_y_tick_time_type","axis_y_tick_time_interval","getId","data_axes","getXAxisTickFormat","defaultAxisTimeFormat","categoryName","axis_x_tick_format","axisTimeFormat","getTickValues","getXAxisTickValues","axis_x_tick_values","getYAxisTickValues","axis_y_tick_values","yAxis","getY2AxisTickValues","axis_y2_tick_values","y2Axis","getLabelOptionByAxisId","axisId","axis_y_label","axis_y2_label","axis_x_label","getLabelText","setLabelText","getLabelPosition","defaultPosition","isInner","isOuter","isLeft","isCenter","isRight","isTop","isMiddle","isBottom","getXAxisLabelPosition","getYAxisLabelPosition","getY2AxisLabelPosition","getLabelPositionById","textForXAxisLabel","textForYAxisLabel","textForY2AxisLabel","xForAxisLabel","forHorizontal","dxForAxisLabel","textAnchorForAxisLabel","xForXAxisLabel","xForYAxisLabel","xForY2AxisLabel","dxForXAxisLabel","dxForYAxisLabel","dxForY2AxisLabel","dyForXAxisLabel","getMaxTickWidth","axis_x_height","dyForYAxisLabel","dyForY2AxisLabel","axis_y2_inner","withoutRecompute","targetsToShow","dummy","currentMaxTickWidths","filterTargetsToShow","getYDomain","yOrient","axis_y_tick_format","yAxisTickValues","y2Orient","axis_y2_tick_format","y2AxisTickValues","getXDomain","xOrient","xAxisTickFormat","xAxisTickValues","updateLabels","withTransition","getPadding","domainLength","convertPixelsToAxisPadding","tickCount","forTimeSeries","targetCount","tickValue","generateTransitions","axisSubX","subx","isHidden","generate","initParams","data_url","convertUrlToData","data_mimeType","data_headers","data_keys","initWithData","data_json","convertJsonToData","data_rows","convertRowsToData","data_columns","convertColumnsToData","clipId","clipIdForXAxis","clipIdForYAxis","clipIdForGrid","clipIdForSubchart","clipPath","getClipPath","clipPathForGrid","clipPathForSubchart","dragging","flowing","cancelClick","mouseover","transiting","generateColor","levelColor","generateLevelColor","dataTimeParse","data_xLocaltime","data_xFormat","axis_x_localtime","hiddenTargetIds","hiddenLegendIds","focusedTargetIds","defocusedTargetIds","subXOrient","isLegendRight","legend_position","isLegendInset","isLegendTop","legend_inset_anchor","isLegendLeft","legendStep","legendItemWidth","legendItemHeight","rotated_padding_left","rotated_padding_right","rotated_padding_top","withoutFadeIn","intervalForObserveInserted","initChartElements","initBar","initLine","initArc","initGauge","initText","defs","bindto","selectChart","observeInserted","xs","convertDataToTargets","data_filter","data_hide","addHiddenTargetIds","mapToIds","legend_hide","addHiddenLegendIds","updateSizes","updateScales","subX","subY","subY2","orgXDomain","onmouseover","onmouseout","svg_classname","clipChart","appendClip","clipXAxis","clipYAxis","clipGrid","clipSubchart","updateSvgSize","initPie","initDragZoom","initSubchart","initTooltip","initLegend","initTitle","initZoom","initSubchartBrush","initRegion","initGrid","grid_lines_front","initGridLines","initEventRect","updateTargets","axis_x_selection","selectionAsValue","getDefaultSelection","updateDimension","oninit","withTransform","withUpdateXDomain","withUpdateOrgXDomain","withTransitionForAxis","bindResize","bindWindowFocus","smoothLines","legendHeight","legend","getLegendHeight","legendWidth","getLegendWidth","legendHeightForBottom","hasArc","hasArcType","xAxisHeight","getHorizontalAxisHeight","subchartHeight","subchart_show","subchart_size_height","currentWidth","getCurrentWidth","currentHeight","getCurrentHeight","getCurrentPaddingTop","getCurrentPaddingRight","getCurrentPaddingBottom","getCurrentPaddingLeft","margin2","margin3","updateSizeForLegend","width2","height2","arcWidth","arcHeight","hasType","gauge_fullCircle","getGaugeLabelHeight","updateRadius","radiusExpanded","updateTargetsForText","updateTargetsForBar","updateTargetsForLine","updateTargetsForArc","updateTargetsForSubchart","showTargets","isTargetToShow","transitions","withY","withSubchart","withTransitionForExit","withTrimXDomain","withLegend","withEventRect","withDimension","withUpdateXAxis","drawArea","drawBar","xForText","yForText","durationForExit","durationForAxis","transitionsToWait","waitForDraw","flow","intervalForCulling","xDomainForZoom","areaIndices","getShapeIndices","isAreaType","barIndices","isBarType","lineIndices","isLineType","hideAxis","xv","legend_show","updateLegend","updateXDomain","zoom_rescale","orgDomain","axis_y_tick_count","axis_y2_tick_count","axis_x_tick_culling_max","generateDrawArea","generateDrawBar","generateDrawLine","generateXYForText","updateCircleY","circleY","circleX","updateXgridFocus","data_empty_label_text","redrawEventRect","updateGrid","updateRegion","updateBar","updateArea","updateCircle","hasDataLabel","updateText","redrawTitle","redrawArc","redrawSubchart","generateFlow","isTabVisible","redrawBar","redrawLine","redrawArea","redrawCircle","redrawText","redrawRegion","redrawGrid","generateWait","onrendered","updateAndRedraw","withTransitionForTransform","transformAll","redrawWithoutRescale","axis_x_type","isCustomX","data_x","data_xs","axis_y_type","initialOpacity","initialOpacityForCircle","opacityForCircle","isPointShouldBeShown","point_show","isScatterType","opacityForText","xx","axis_x_categories","yv","yScale","subxx","transformMain","transformContext","transformLegend","getXAxisClipX","getXAxisClipY","getXAxisClipWidth","getXAxisClipHeight","getYAxisClipX","getYAxisClipY","getYAxisClipWidth","getYAxisClipHeight","withoutAxis","observer","MutationObserver","mutations","mutation","observe","childList","characterData","resizeFunction","generateResize","onresize","resize_auto","resizeTimeout","onresized","resizeIfElementDisplayed","windowFocusHandler","unbindWindowFocus","callResizeFunctions","resizeFunctions","endall","parsedDate","SVGPathSeg","typeAsLetter","owningPathSegList","pathSegType","pathSegTypeAsLetter","_owningPathSegList","PATHSEG_UNKNOWN","PATHSEG_CLOSEPATH","PATHSEG_MOVETO_ABS","PATHSEG_MOVETO_REL","PATHSEG_LINETO_ABS","PATHSEG_LINETO_REL","PATHSEG_CURVETO_CUBIC_ABS","PATHSEG_CURVETO_CUBIC_REL","PATHSEG_CURVETO_QUADRATIC_ABS","PATHSEG_CURVETO_QUADRATIC_REL","PATHSEG_ARC_ABS","PATHSEG_ARC_REL","PATHSEG_LINETO_HORIZONTAL_ABS","PATHSEG_LINETO_HORIZONTAL_REL","PATHSEG_LINETO_VERTICAL_ABS","PATHSEG_LINETO_VERTICAL_REL","PATHSEG_CURVETO_CUBIC_SMOOTH_ABS","PATHSEG_CURVETO_CUBIC_SMOOTH_REL","PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS","PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL","_segmentChanged","segmentChanged","SVGPathSegClosePath","_asPathString","SVGPathSegMovetoAbs","SVGPathSegMovetoRel","SVGPathSegLinetoAbs","SVGPathSegLinetoRel","SVGPathSegCurvetoCubicAbs","SVGPathSegCurvetoCubicRel","SVGPathSegCurvetoQuadraticAbs","SVGPathSegCurvetoQuadraticRel","SVGPathSegArcAbs","largeArcFlag","sweepFlag","_r1","_r2","_angle","_largeArcFlag","_sweepFlag","SVGPathSegArcRel","SVGPathSegLinetoHorizontalAbs","SVGPathSegLinetoHorizontalRel","SVGPathSegLinetoVerticalAbs","SVGPathSegLinetoVerticalRel","SVGPathSegCurvetoCubicSmoothAbs","SVGPathSegCurvetoCubicSmoothRel","SVGPathSegCurvetoQuadraticSmoothAbs","SVGPathSegCurvetoQuadraticSmoothRel","SVGPathElement","createSVGPathSegClosePath","createSVGPathSegMovetoAbs","createSVGPathSegMovetoRel","createSVGPathSegLinetoAbs","createSVGPathSegLinetoRel","createSVGPathSegCurvetoCubicAbs","createSVGPathSegCurvetoCubicRel","createSVGPathSegCurvetoQuadraticAbs","createSVGPathSegCurvetoQuadraticRel","createSVGPathSegArcAbs","createSVGPathSegArcRel","createSVGPathSegLinetoHorizontalAbs","createSVGPathSegLinetoHorizontalRel","createSVGPathSegLinetoVerticalAbs","createSVGPathSegLinetoVerticalRel","createSVGPathSegCurvetoCubicSmoothAbs","createSVGPathSegCurvetoCubicSmoothRel","createSVGPathSegCurvetoQuadraticSmoothAbs","createSVGPathSegCurvetoQuadraticSmoothRel","getPathSegAtLength","measurementElement","lastPathSegment","numberOfItems","SVGPathSegList","pathElement","_pathElement","_list","_parsePath","_mutationObserverConfig","attributeFilter","_pathElementMutationObserver","_updateListFromPathMutations","_checkPathSynchronizedToList","_pathSegList","takeRecords","mutationRecords","hasPathMutations","record","attributeName","_writeListToPath","_pathSegArrayAsString","pathSeg","newItem","_checkValidIndex","insertItemBefore","replaceItem","appendItem","pathSegArray","Builder","appendSegment","Source","_currentIndex","_endIndex","_previousCommand","_skipOptionalSpaces","_isCurrentSpace","character","_skipOptionalSpacesOrDelimiter","hasMoreData","peekSegmentType","lookahead","_pathSegTypeFromChar","_nextCommandHelper","previousCommand","initialCommandIsMoveTo","_parseNumber","frac","expsign","startIntPartIndex","scanIntPartIndex","multiplier","_parseArcFlag","flag","flagChar","parseSegment","arcAngle","arcLarge","arcSweep","targetLength","padString","axis_x_max","axis_y_max","axis_y2_max","axis_x_min","axis_y_min","axis_y2_min","category","categories","size_width","size_height","targetIds","shown","targetId","clearLegendItemTextBoxCache","updateDataAttributes","baseTarget","baseValue","notfoundIds","orgDataCount","getMaxDataCount","getOtherTargetX","missing","mainRegion","mainText","mainBar","mainLine","mainArea","mainCircle","flowIndex","flowLength","flowStart","getValueOnIndex","flowEnd","durationForFlow","updateXGrid","hideXGridFocus","flowTransition","isRegionOnX","xgridAttr","regionX","regionWidth","candidates","mapToTargetIds","selectorTargets","defocus","expandArc","toggleFocusLegend","unexpandArc","showLegend","isLegendToShow","selectorLegends","grids","grid_x_lines","removeGridLines","grid_y_lines","data_groups","hideLegend","addXs","data_classes","data_colors","hasCaches","cacheIds","getCaches","loadFromArgs","getTargetSelectorSuffix","resetOther","data_selection_enabled","getToggle","isTargetId","data_selection_grouped","isTargetIndex","isSelected","data_selection_isselectable","unselect","removeHiddenTargetIds","filterByX","getMousePosition","tooltip_onshow","tooltip_onhide","transformTo","optionsForRedraw","setTargetType","updateTargetX","updateTargetXs","zoom_onzoom","zoom_enabled","unzoom","zoom_x_max","zoom_x_min","orderFct","getOrderFunction","isOrderAsc","isOrderDesc","defaultSort","gauge_width","donut_width","gaugeArcWidth","gauge_arcs_minWidth","innerRadiusRatio","updateArc","svgArc","getSvgArc","svgArcExpanded","getSvgArcExpanded","svgArcExpandedSub","updateAngle","gMin","gMax","gTic","gValue","isGaugeType","gauge_min","gauge_max","gauge_startingAngle","hasGaugeType","singleArcWidth","withoutUpdate","updated","rate","expandWidth","getArc","isArcType","transformForArcLabel","hasGauge","donut_label_ratio","pie_label_ratio","getArcRatio","whole","convertToArcData","addName","textForArcLabel","shouldShowArcLabel","meetsArcLabelThreshold","getArcLabelFormat","defaultArcValueFormat","textForGaugeMinMax","isMax","getGaugeLabelExtents","shouldExpand","expandDuration","isDonutType","donut_expand_duration","gauge_expand_duration","isPieType","pie_expand_duration","donut_expand","gauge_expand","pie_expand","shouldShow","donut_label_show","pie_label_show","donut_label_threshold","pie_label_threshold","pie_label_format","gauge_label_format","donut_label_format","gauge_label_extents","getArcTitle","donut_title","mainPies","mainPieEnter","classChartArc","classArcs","classFocus","mainArc","arcLabelLines","mainArcLabelLine","arcData","classArc","interaction_enabled","_current","gauge_labelLine_show","innerLineLength","lineAngle","linePositioningAngle","data_onmouseover","selectedData","revertLegend","data_onmouseout","toggleShape","data_onclick","interpolated","backgroundArc","gauge_label_show","gauge_units","addCache","cloneTarget","generateTargetClass","generateClass","classText","classTexts","classShape","classShapes","classLine","classLines","classCircle","classCircles","classBar","classBars","classArea","classAreas","classRegion","classEvent","classTarget","additionalClassSuffix","additionalClass","classFocused","classDefocused","classChartText","classChartLine","classChartBar","selectorTarget","selectorLegend","appVersion","getAxisClipX","getAxisClipY","getAxisClipWidth","getAxisClipHeight","color_pattern","data_color","color_threshold","asValue","padding_left","padding_right","padding_top","padding_bottom","zoom_initialRange","zoom_type","zoom_disableDefaultBehavior","zoom_privileged","zoom_onzoomstart","zoom_onzoomend","interaction_brighten","data_xSort","data_idConverter","data_names","data_type","data_types","data_labels","data_order","data_regions","data_selection_multiple","data_selection_draggable","data_onselected","data_onunselected","subchart_axis_x_show","subchart_onbrush","legend_inset_x","legend_inset_y","legend_inset_step","legend_item_onclick","legend_item_onmouseover","legend_item_onmouseout","legend_equally","legend_padding","legend_item_tile_width","legend_item_tile_height","axis_x_tick_outer","axis_x_padding","axis_y_inverted","axis_y_center","axis_y_tick_outer","axis_y_padding","axis_y_default","axis_y2_inverted","axis_y2_center","axis_y2_tick_outer","axis_y2_padding","axis_y2_default","grid_x_show","grid_x_type","grid_y_show","grid_y_ticks","grid_focus_show","point_r","point_sensitivity","point_focus_expand_enabled","point_focus_expand_r","point_select_r","line_connectNull","line_step_type","bar_width","bar_width_ratio","bar_width_max","bar_zerobased","bar_space","area_zerobased","area_above","spline_interpolation_type","tooltip_show","tooltip_grouped","tooltip_order","tooltip_format_title","tooltip_format_name","tooltip_format_value","tooltip_position","tooltip_contents","defaultTitleFormat","defaultValueFormat","getTooltipContent","tooltip_init_show","tooltip_init_x","tooltip_init_position","title_text","title_padding","title_position","additionalConfig","this_config","converter","convertXsvToData","xsv","targetKeys","new_rows","new_row","findValueInJson","pathArray","newRows","newRow","appendXs","isNotX","isX","xKey","getXKey","rawX","generateTargetX","getOtherTargetXs","getXValuesOfXKey","convertedId","id_org","hasNegativeValue","hasNegativeValueInTargets","hasPositiveValue","hasPositiveValueInTargets","xValues","getXValue","idsForX","valueOnIndex","hasTarget","removeHiddenLegendIds","getValuesAsIdKeyed","ys","checkValueInTargets","checker","orderAsc","orderDesc","reducer","t1Sum","t2Sum","orderTargets","fct","filterRemoveNull","filterByXDomain","xDomain","getDataLabelLength","lengths","dataLabelFormat","isNoneArc","isArc","findClosestFromTargets","findClosest","minDist","isWithinBar","xIndex","yIndex","convertValuesToStep","converted","getYDomainMin","baseId","idsInGroup","getYDomainMax","yDomainAbs","isAllPositive","isAllNegative","targetsByAxisId","yTargets","yMin","yMax","yDomainMin","yDomainMax","isZeroBased","isInverted","showHorizontalDataLabel","showVerticalDataLabel","getXDomainMin","getXDomainMax","getXDomainPadding","maxDataCount","firstX","lastX","withTrim","updateScale","trimXDomain","zoomDomain","getZoomDomain","mx","my","minX","maxX","minY","_w","_h","isIncluded","isWithin","togglePoint","togglePath","dragstart","dragend","getYFormat","forArc","formatForY","yFormat","formatForY2","y2Format","defaultFormat","xgridData","generateGridData","xgridEnter","updateYGrid","gridValues","ygridEnter","gridTextAnchor","gridTextDx","xGridTextX","yGridTextX","xgridLineEnter","ygridLineEnter","showXGridFocus","dataToShow","focusEl","firstYear","lastYear","gridData","tickNum","getGridFilterToRemove","forX","toRemove","toShow","mouseout","unexpandCircles","unexpandBars","sameXData","expandCircles","expandBars","isWithinShape","getYScale","initMouseEvent","legendItemTextBox","legendHasRendered","updateLegendWithDefaults","insetLegendPosition","updateLegendStep","updateLegendItemWidth","updateLegendItemHeight","opacityForLegend","opacityForUnfocusedLegend","getTextBox","textElement","getTextRect","updatePositions","updateValues","withoutStep","areaLength","totalLength","itemLength","posMin","steps","margins","maxLength","isLast","tileWidth","itemHeight","maxHeight","widths","xForLegend","xForLegendText","xForLegendRect","yForLegend","yForLegendText","yForLegendRect","x1ForLegendTile","x2ForLegendTile","yForLegendTile","tiles","mainRegionEnter","regionY","regionHeight","getScale","forTimeseries","getX","_scale","getY","getSubYScale","forInit","xMin","xMax","subXMin","subXMax","subYMin","subYMax","selectPoint","pointSelectR","unselectPoint","selectPath","unselectPath","isStepType","mainBars","mainBarEnter","barData","getBarW","barTargetsNum","getBars","isSub","getPoints","generateGetBarPoints","indexX","indexY","__max__","barW","barX","getShapeX","barY","getShapeY","barOffset","getShapeOffset","barSpaceOffset","posX","posY","seg0","seg1","ey","typeFilter","targetsNum","isWithinStep","isWithinCircle","getInterpolate","linear-closed","basis-open","basis-closed","cardinal-open","cardinal-closed","monotone","step-before","step-after","isSplineType","mainLines","mainLineEnter","lineData","generateGetLinePoints","yScaleGetter","xValue","yValue","lineWithRegions","lineTargetsNum","lineOffset","_regions","generateM","sWithRegion","diffx2","xOffset","x_diff","xv0","xv1","mainAreaEnter","orgAreaOpacity","generateGetAreaPoints","getAreaBaseValue","areaTargetsNum","areaOffset","lineOrScatterData","mainCircleEnter","pointR","getCircles","pointExpandedR","d3_this","getParentWidth","getParentHeight","getTitlePadding","getAxisWidthByAxisId","legendWidthOnRight","getParentRectValue","getSvgLeft","hasLeftAxisRect","leftAxisClass","leftAxis","svgRect","chartRect","svgLeft","initBrush","redrawForBrush","updateExtent","contextLineEnter","contextLine","contextBarEnter","contextBar","updateBarForSubchart","redrawBarForSubchart","drawBarOnSub","updateLineForSubchart","redrawLineForSubchart","drawLineOnSub","updateAreaForSubchart","contextArea","contextAreaEnter","redrawAreaForSubchart","drawAreaOnSub","mainTextEnter","barOrLineData","forFlow","font","getAreaPoints","getBarPoints","getLinePoints","getter","getXForText","getYForText","xPos","yPos","isSafari","isChrome","xForTitle","yForTitle","getTooltipSortFunction","sortFunction","titleFormat","nameFormat","valueFormat","tooltipSortFunction","tooltipPosition","tWidth","tHeight","tooltipLeft","tooltipRight","tooltipTop","chartRight","positionFunction","ua","startEvent","redrawForZoom","updateDomain","brushXPos","brushYPos","getZoomedDomain","dragZoomBrush","zoomedDomain","svgPanZoom","./svg-pan-zoom.js","2","svgNS","_createZoomIn","_createZoomReset","_createZoomOut","controlIcons","getPublicInstance","zoomIn","zoomOut","./svg-utilities","originalState","activeState","updateCTMCached","updateCTM","createRequestAnimationFrame","refreshRate","viewBox","cacheViewBox","processCTM","setCTM","updateCTMOnNextFrame","simpleViewBoxCache","getBBox","getViewBox","getCTM","contain","getOriginalState","getZoom","getRelativeZoom","computeRelativeZoom","getPan","createSVGMatrix","isZoomDifferent","isPanDifferent","beforeZoom","updateCache","onZoom","beforePan","onPan","pendingUpdate","onUpdatedCTM","./utilities","4","viewportSelector","panEnabled","controlIconsEnabled","zoomEnabled","dblClickZoomEnabled","mouseWheelZoomEnabled","preventMouseEventsDefault","zoomScaleSensitivity","minZoom","maxZoom","customEventsHandler","eventsListenerElement","passive","setupSvgAttributes","getBoundingClientRectNormalized","getOrCreateViewport","setBeforeZoom","setOnZoom","setBeforePan","setOnPan","setOnUpdatedCTM","lastMouseWheelEventTime","setupHandlers","eventListeners","handleMouseDown","touchstart","handleMouseUp","touchend","handleMouseMove","touchmove","touchleave","touchcancel","svgElement","haltEventListeners","enableMouseWheelZoom","wheelListener","handleMouseWheel","disableMouseWheelZoom","getEventPoint","zoomAtPoint","multiply","getSvgCenterPoint","publicZoom","computeFromRelativeZoom","publicZoomAtPoint","resetZoom","resetPan","pan","handleDblClick","mouseAndTouchNormalize","isDblClick","firstEventCTM","stateOrigin","updateBBox","panBy","disableControlIcons","enableControlIcons","publicInstance","enablePan","disablePan","isPanEnabled","enableZoom","disableZoom","isZoomEnabled","isControlIconsEnabled","enableDblClickZoom","disableDblClickZoom","isDblClickZoomEnabled","isMouseWheelZoomEnabled","setZoomScaleSensitivity","setMinZoom","setMaxZoom","zoomBy","zoomAtPointBy","getSizes","realZoom","getSvg","./control-icons","./shadow-viewport","./uniwheel","5","xmlNS","xmlnsNS","xlinkNS","evNS","internetExplorerRedisplayInterval","refreshDefsGlobal","6","deltaX","delatZ","onmousewheel","7","HTMLElement","SVGSVGElement","getSVGDocument","leading","trailing","menuBroadcast","swishLogo","setupModal","setupPanes","setupResize","setupUnload","Save ...","Info & history ...","Reload","Open recent","Share","Follow ...","Start TogetherJS ...","Export","Download","Print ...","Edit","Clear messages","Changes","View changes","Find (Ctrl-F)","Find and replace (Shift-Ctrl-F)","Jump to line (Alt-G)","Options","Semantic highlighting","Emacs Keybinding","Open document in new tab","Preserve state in browser","Examples","Help","show_beware","preserve_state","afterRestore","after_restore","runDelayedRestore","playFile","playURL","openExampleFunction","populateExamples","swish_examples","populateHelp","openHelpFunction","swish_help_index","prologSource","tabData","onlyglobal","fullscreen_origin","fullscreen_main","exitFullscreen","isFullscreen","showNavbar","collaborate","TogetherJS","showUpdates","to_array","load_plugin","plugin","js","jsdeps","plugins","urlArgs","waitSeconds","jquery-ui","bloodhound","tagmanager","svg-pan-zoom","cm/mode/prolog","cm/addon/hover/prolog-hover","cm/addon/hover/text-hover","cm/addon/hint/templates-hint","cm/addon/hint/show-context-info","shim","deps"],"mappings":"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AA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EA9FA,4SA8FA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EA/FA,8QACA,qeA+FA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAtGA,qeAsGA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EArcA,kaACA,mRAqcA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAneA,kgBAoeA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAlgBA,kgBACA,kgBAkgBA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,E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8B,GAAAhB,GACAlB,EAAAiC,GAAAjB,GACAf,EAAAiC,GAAAlB,GAEAj/D,GACAj1J,EAAA6zN,EACAzjN,EAAA2jN,EACAplN,EAAAslN,EACArlN,EAAAulN,EACAv3N,EAAA,KACAiF,EAAAwzN,GACA/5N,EAAA+5N,GACA3zN,EAAA4zN,GACA/kN,EAAAglN,GACAv3N,EAAAw3N,GACAn4N,EAAAo4N,GACAnnN,EAAAonN,GACA55N,EAAA65N,GACA53N,EAAA63N,GACAh0N,EAAAyyN,EACAn1N,EAAA22N,GACA51N,EAAA61N,GACArnN,EAAAsnN,GACAt4N,EAAAu4N,GACA/2N,EAAAg3N,GACAr3N,EAAAs3N,GACA54N,EAAA64N,GACAl4N,EAAAm4N,GACA15N,EAAA,KACAsC,EAAA,KACA/B,EAAAo5N,GACAnlN,EAAAolN,GACAh3N,EAAAi3N,GACAC,IAAAC,IAGAC,GACA12N,EAAAw0N,EACApkN,EAAAqkN,EACA9lN,EAAA+lN,EACA9lN,EAAA+lN,EACA/3N,EAAA,KACAiF,EAAA80N,GACAr7N,EAAAq7N,GACAj1N,EAAAk1N,GACArmN,EAAAsmN,GACA74N,EAAA84N,GACAz5N,EAAA05N,GACAzoN,EAAA0oN,GACAl7N,EAAAm7N,GACAl5N,EAAAm5N,GACAt1N,EAAAgzN,EACA11N,EAAA22N,GACA51N,EAAA61N,GACArnN,EAAA0oN,GACA15N,EAAA25N,GACAn4N,EAAAo4N,GACAz4N,EAAA04N,GACAh6N,EAAAi6N,GACAt5N,EAAAu5N,GACA96N,EAAA,KACAsC,EAAA,KACA/B,EAAAw6N,GACAvmN,EAAAwmN,GACAp4N,EAAAq4N,GACAnB,IAAAC,IAGAlE,GACAvyN,EAAA2yN,EACAviN,EAAA0iN,EACAnkN,EAAAskN,EACArkN,EAAAwkN,EACAx2N,EAAA22N,EACA1xN,EAAA+1N,GACAt8N,EAAAs8N,GACAl2N,EAAAm2N,GACAtnN,EAAAunN,GACA95N,EAAA85N,GACAz6N,EAAA06N,GACAzpN,EAAA0pN,GACAl8N,EAAAm8N,GACAl6N,EAAAm6N,GACAt2N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AAlnB,GAAAinB,IAEAE,GAAA,GAAAx7O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApD,IAAAuhK,IAEAq+E,GAAApnB,GAAAmnB,IAEAE,GAAA,GAAA17O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAuhK,IAEAu+E,GAAAtnB,GAAAqnB,IAEAE,GAAA,GAAA57O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAuhK,IAEAy+E,GAAAxnB,GAAAunB,IAEAE,GAAA,GAAA97O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAuhK,IAEA2+E,GAAA1nB,GAAAynB,IAEAE,GAAA,GAAAh8O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAuhK,IAEA6+E,GAAA5nB,GAAA2nB,IAEAE,GAAA,GAAAl8O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAuhK,IAEA++E,GAAA9nB,GAAA6nB,IAEAE,GAAA,GAAAp8O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAuhK,IAEAi/E,GAAAhoB,GAAA+nB,IAEAE,GAAA,GAAAt8O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAuhK,IAEAm/E,GAAAloB,GAAAioB,IAEAE,GAAA,GAAAx8O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAuhK,IAEAq/E,GAAApoB,GAAAmoB,IAEAE,GAAA,GAAA18O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAuhK,IAEAu/E,GAAAtoB,GAAAqoB,IAEAE,GAAA,GAAA58O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA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","file":"swish-min.js.new","sourcesContent":["/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under the MIT license\n */\nif(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");!function(t){\"use strict\";var e=jQuery.fn.jquery.split(\" \")[0].split(\".\");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||3<e[0])throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")}(),function(n){\"use strict\";n.fn.emulateTransitionEnd=function(t){var e=!1,i=this;n(this).one(\"bsTransitionEnd\",function(){e=!0});return setTimeout(function(){e||n(i).trigger(n.support.transition.end)},t),this},n(function(){n.support.transition=function o(){var t=document.createElement(\"bootstrap\"),e={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};for(var i in e)if(t.style[i]!==undefined)return{end:e[i]};return!1}(),n.support.transition&&(n.event.special.bsTransitionEnd={bindType:n.support.transition.end,delegateType:n.support.transition.end,handle:function(t){if(n(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(s){\"use strict\";var e='[data-dismiss=\"alert\"]',a=function(t){s(t).on(\"click\",e,this.close)};a.VERSION=\"3.4.1\",a.TRANSITION_DURATION=150,a.prototype.close=function(t){var e=s(this),i=e.attr(\"data-target\");i||(i=(i=e.attr(\"href\"))&&i.replace(/.*(?=#[^\\s]*$)/,\"\")),i=\"#\"===i?[]:i;var o=s(document).find(i);function n(){o.detach().trigger(\"closed.bs.alert\").remove()}t&&t.preventDefault(),o.length||(o=e.closest(\".alert\")),o.trigger(t=s.Event(\"close.bs.alert\")),t.isDefaultPrevented()||(o.removeClass(\"in\"),s.support.transition&&o.hasClass(\"fade\")?o.one(\"bsTransitionEnd\",n).emulateTransitionEnd(a.TRANSITION_DURATION):n())};var t=s.fn.alert;s.fn.alert=function o(i){return this.each(function(){var t=s(this),e=t.data(\"bs.alert\");e||t.data(\"bs.alert\",e=new a(this)),\"string\"==typeof i&&e[i].call(t)})},s.fn.alert.Constructor=a,s.fn.alert.noConflict=function(){return s.fn.alert=t,this},s(document).on(\"click.bs.alert.data-api\",e,a.prototype.close)}(jQuery),function(s){\"use strict\";var n=function(t,e){this.$element=s(t),this.options=s.extend({},n.DEFAULTS,e),this.isLoading=!1};function i(o){return this.each(function(){var t=s(this),e=t.data(\"bs.button\"),i=\"object\"==typeof o&&o;e||t.data(\"bs.button\",e=new n(this,i)),\"toggle\"==o?e.toggle():o&&e.setState(o)})}n.VERSION=\"3.4.1\",n.DEFAULTS={loadingText:\"loading...\"},n.prototype.setState=function(t){var e=\"disabled\",i=this.$element,o=i.is(\"input\")?\"val\":\"html\",n=i.data();t+=\"Text\",null==n.resetText&&i.data(\"resetText\",i[o]()),setTimeout(s.proxy(function(){i[o](null==n[t]?this.options[t]:n[t]),\"loadingText\"==t?(this.isLoading=!0,i.addClass(e).attr(e,e).prop(e,!0)):this.isLoading&&(this.isLoading=!1,i.removeClass(e).removeAttr(e).prop(e,!1))},this),0)},n.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle=\"buttons\"]');if(e.length){var i=this.$element.find(\"input\");\"radio\"==i.prop(\"type\")?(i.prop(\"checked\")&&(t=!1),e.find(\".active\").removeClass(\"active\"),this.$element.addClass(\"active\")):\"checkbox\"==i.prop(\"type\")&&(i.prop(\"checked\")!==this.$element.hasClass(\"active\")&&(t=!1),this.$element.toggleClass(\"active\")),i.prop(\"checked\",this.$element.hasClass(\"active\")),t&&i.trigger(\"change\")}else this.$element.attr(\"aria-pressed\",!this.$element.hasClass(\"active\")),this.$element.toggleClass(\"active\")};var t=s.fn.button;s.fn.button=i,s.fn.button.Constructor=n,s.fn.button.noConflict=function(){return s.fn.button=t,this},s(document).on(\"click.bs.button.data-api\",'[data-toggle^=\"button\"]',function(t){var e=s(t.target).closest(\".btn\");i.call(e,\"toggle\"),s(t.target).is('input[type=\"radio\"], input[type=\"checkbox\"]')||(t.preventDefault(),e.is(\"input,button\")?e.trigger(\"focus\"):e.find(\"input:visible,button:visible\").first().trigger(\"focus\"))}).on(\"focus.bs.button.data-api blur.bs.button.data-api\",'[data-toggle^=\"button\"]',function(t){s(t.target).closest(\".btn\").toggleClass(\"focus\",/^focus(in)?$/.test(t.type))})}(jQuery),function(p){\"use strict\";var c=function(t,e){this.$element=p(t),this.$indicators=this.$element.find(\".carousel-indicators\"),this.options=e,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on(\"keydown.bs.carousel\",p.proxy(this.keydown,this)),\"hover\"==this.options.pause&&!(\"ontouchstart\"in document.documentElement)&&this.$element.on(\"mouseenter.bs.carousel\",p.proxy(this.pause,this)).on(\"mouseleave.bs.carousel\",p.proxy(this.cycle,this))};function r(n){return this.each(function(){var t=p(this),e=t.data(\"bs.carousel\"),i=p.extend({},c.DEFAULTS,t.data(),\"object\"==typeof n&&n),o=\"string\"==typeof n?n:i.slide;e||t.data(\"bs.carousel\",e=new c(this,i)),\"number\"==typeof n?e.to(n):o?e[o]():i.interval&&e.pause().cycle()})}c.VERSION=\"3.4.1\",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:\"hover\",wrap:!0,keyboard:!0},c.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},c.prototype.cycle=function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(p.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(t){return this.$items=t.parent().children(\".item\"),this.$items.index(t||this.$active)},c.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e);if((\"prev\"==t&&0===i||\"next\"==t&&i==this.$items.length-1)&&!this.options.wrap)return e;var o=(i+(\"prev\"==t?-1:1))%this.$items.length;return this.$items.eq(o)},c.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(\".item.active\"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(i<t?\"next\":\"prev\",this.$items.eq(t))},c.prototype.pause=function(t){return t||(this.paused=!0),this.$element.find(\".next, .prev\").length&&p.support.transition&&(this.$element.trigger(p.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide(\"next\")},c.prototype.prev=function(){if(!this.sliding)return this.slide(\"prev\")},c.prototype.slide=function(t,e){var i=this.$element.find(\".item.active\"),o=e||this.getItemForDirection(t,i),n=this.interval,s=\"next\"==t?\"left\":\"right\",a=this;if(o.hasClass(\"active\"))return this.sliding=!1;var r=o[0],l=p.Event(\"slide.bs.carousel\",{relatedTarget:r,direction:s});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,n&&this.pause(),this.$indicators.length){this.$indicators.find(\".active\").removeClass(\"active\");var h=p(this.$indicators.children()[this.getItemIndex(o)]);h&&h.addClass(\"active\")}var d=p.Event(\"slid.bs.carousel\",{relatedTarget:r,direction:s});return p.support.transition&&this.$element.hasClass(\"slide\")?(o.addClass(t),\"object\"==typeof o&&o.length&&o[0].offsetWidth,i.addClass(s),o.addClass(s),i.one(\"bsTransitionEnd\",function(){o.removeClass([t,s].join(\" \")).addClass(\"active\"),i.removeClass([\"active\",s].join(\" \")),a.sliding=!1,setTimeout(function(){a.$element.trigger(d)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(i.removeClass(\"active\"),o.addClass(\"active\"),this.sliding=!1,this.$element.trigger(d)),n&&this.cycle(),this}};var t=p.fn.carousel;p.fn.carousel=r,p.fn.carousel.Constructor=c,p.fn.carousel.noConflict=function(){return p.fn.carousel=t,this};var e=function(t){var e=p(this),i=e.attr(\"href\");i&&(i=i.replace(/.*(?=#[^\\s]+$)/,\"\"));var o=e.attr(\"data-target\")||i,n=p(document).find(o);if(n.hasClass(\"carousel\")){var s=p.extend({},n.data(),e.data()),a=e.attr(\"data-slide-to\");a&&(s.interval=!1),r.call(n,s),a&&n.data(\"bs.carousel\").to(a),t.preventDefault()}};p(document).on(\"click.bs.carousel.data-api\",\"[data-slide]\",e).on(\"click.bs.carousel.data-api\",\"[data-slide-to]\",e),p(window).on(\"load\",function(){p('[data-ride=\"carousel\"]').each(function(){var t=p(this);r.call(t,t.data())})})}(jQuery),function(a){\"use strict\";var r=function(t,e){this.$element=a(t),this.options=a.extend({},r.DEFAULTS,e),this.$trigger=a('[data-toggle=\"collapse\"][href=\"#'+t.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+t.id+'\"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function n(t){var e,i=t.attr(\"data-target\")||(e=t.attr(\"href\"))&&e.replace(/.*(?=#[^\\s]+$)/,\"\");return a(document).find(i)}function l(o){return this.each(function(){var t=a(this),e=t.data(\"bs.collapse\"),i=a.extend({},r.DEFAULTS,t.data(),\"object\"==typeof o&&o);!e&&i.toggle&&/show|hide/.test(o)&&(i.toggle=!1),e||t.data(\"bs.collapse\",e=new r(this,i)),\"string\"==typeof o&&e[o]()})}r.VERSION=\"3.4.1\",r.TRANSITION_DURATION=350,r.DEFAULTS={toggle:!0},r.prototype.dimension=function(){return this.$element.hasClass(\"width\")?\"width\":\"height\"},r.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass(\"in\")){var t,e=this.$parent&&this.$parent.children(\".panel\").children(\".in, .collapsing\");if(!(e&&e.length&&(t=e.data(\"bs.collapse\"))&&t.transitioning)){var i=a.Event(\"show.bs.collapse\");if(this.$element.trigger(i),!i.isDefaultPrevented()){e&&e.length&&(l.call(e,\"hide\"),t||e.data(\"bs.collapse\",null));var o=this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[o](0).attr(\"aria-expanded\",!0),this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\",!0),this.transitioning=1;var n=function(){this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[o](\"\"),this.transitioning=0,this.$element.trigger(\"shown.bs.collapse\")};if(!a.support.transition)return n.call(this);var s=a.camelCase([\"scroll\",o].join(\"-\"));this.$element.one(\"bsTransitionEnd\",a.proxy(n,this)).emulateTransitionEnd(r.TRANSITION_DURATION)[o](this.$element[0][s])}}}},r.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass(\"in\")){var t=a.Event(\"hide.bs.collapse\");if(this.$element.trigger(t),!t.isDefaultPrevented()){var e=this.dimension();this.$element[e](this.$element[e]())[0].offsetHeight,this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\",!1),this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\",!1),this.transitioning=1;var i=function(){this.transitioning=0,this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\")};if(!a.support.transition)return i.call(this);this.$element[e](0).one(\"bsTransitionEnd\",a.proxy(i,this)).emulateTransitionEnd(r.TRANSITION_DURATION)}}},r.prototype.toggle=function(){this[this.$element.hasClass(\"in\")?\"hide\":\"show\"]()},r.prototype.getParent=function(){return a(document).find(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"'+this.options.parent+'\"]').each(a.proxy(function(t,e){var i=a(e);this.addAriaAndCollapsedClass(n(i),i)},this)).end()},r.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass(\"in\");t.attr(\"aria-expanded\",i),e.toggleClass(\"collapsed\",!i).attr(\"aria-expanded\",i)};var t=a.fn.collapse;a.fn.collapse=l,a.fn.collapse.Constructor=r,a.fn.collapse.noConflict=function(){return a.fn.collapse=t,this},a(document).on(\"click.bs.collapse.data-api\",'[data-toggle=\"collapse\"]',function(t){var e=a(this);e.attr(\"data-target\")||t.preventDefault();var i=n(e),o=i.data(\"bs.collapse\")?\"toggle\":e.data();l.call(i,o)})}(jQuery),function(a){\"use strict\";var r='[data-toggle=\"dropdown\"]',o=function(t){a(t).on(\"click.bs.dropdown\",this.toggle)};function l(t){var e=t.attr(\"data-target\");e||(e=(e=t.attr(\"href\"))&&/#[A-Za-z]/.test(e)&&e.replace(/.*(?=#[^\\s]*$)/,\"\"));var i=\"#\"!==e?a(document).find(e):null;return i&&i.length?i:t.parent()}function s(o){o&&3===o.which||(a(\".dropdown-backdrop\").remove(),a(r).each(function(){var t=a(this),e=l(t),i={relatedTarget:this};e.hasClass(\"open\")&&(o&&\"click\"==o.type&&/input|textarea/i.test(o.target.tagName)&&a.contains(e[0],o.target)||(e.trigger(o=a.Event(\"hide.bs.dropdown\",i)),o.isDefaultPrevented()||(t.attr(\"aria-expanded\",\"false\"),e.removeClass(\"open\").trigger(a.Event(\"hidden.bs.dropdown\",i)))))}))}o.VERSION=\"3.4.1\",o.prototype.toggle=function(t){var e=a(this);if(!e.is(\".disabled, :disabled\")){var i=l(e),o=i.hasClass(\"open\");if(s(),!o){\"ontouchstart\"in document.documentElement&&!i.closest(\".navbar-nav\").length&&a(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(a(this)).on(\"click\",s);var n={relatedTarget:this};if(i.trigger(t=a.Event(\"show.bs.dropdown\",n)),t.isDefaultPrevented())return;e.trigger(\"focus\").attr(\"aria-expanded\",\"true\"),i.toggleClass(\"open\").trigger(a.Event(\"shown.bs.dropdown\",n))}return!1}},o.prototype.keydown=function(t){if(/(38|40|27|32)/.test(t.which)&&!/input|textarea/i.test(t.target.tagName)){var e=a(this);if(t.preventDefault(),t.stopPropagation(),!e.is(\".disabled, :disabled\")){var i=l(e),o=i.hasClass(\"open\");if(!o&&27!=t.which||o&&27==t.which)return 27==t.which&&i.find(r).trigger(\"focus\"),e.trigger(\"click\");var n=i.find(\".dropdown-menu li:not(.disabled):visible a\");if(n.length){var s=n.index(t.target);38==t.which&&0<s&&s--,40==t.which&&s<n.length-1&&s++,~s||(s=0),n.eq(s).trigger(\"focus\")}}}};var t=a.fn.dropdown;a.fn.dropdown=function e(i){return this.each(function(){var t=a(this),e=t.data(\"bs.dropdown\");e||t.data(\"bs.dropdown\",e=new o(this)),\"string\"==typeof i&&e[i].call(t)})},a.fn.dropdown.Constructor=o,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=t,this},a(document).on(\"click.bs.dropdown.data-api\",s).on(\"click.bs.dropdown.data-api\",\".dropdown form\",function(t){t.stopPropagation()}).on(\"click.bs.dropdown.data-api\",r,o.prototype.toggle).on(\"keydown.bs.dropdown.data-api\",r,o.prototype.keydown).on(\"keydown.bs.dropdown.data-api\",\".dropdown-menu\",o.prototype.keydown)}(jQuery),function(a){\"use strict\";var s=function(t,e){this.options=e,this.$body=a(document.body),this.$element=a(t),this.$dialog=this.$element.find(\".modal-dialog\"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.fixedContent=\".navbar-fixed-top, .navbar-fixed-bottom\",this.options.remote&&this.$element.find(\".modal-content\").load(this.options.remote,a.proxy(function(){this.$element.trigger(\"loaded.bs.modal\")},this))};function r(o,n){return this.each(function(){var t=a(this),e=t.data(\"bs.modal\"),i=a.extend({},s.DEFAULTS,t.data(),\"object\"==typeof o&&o);e||t.data(\"bs.modal\",e=new s(this,i)),\"string\"==typeof o?e[o](n):i.show&&e.show(n)})}s.VERSION=\"3.4.1\",s.TRANSITION_DURATION=300,s.BACKDROP_TRANSITION_DURATION=150,s.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},s.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},s.prototype.show=function(i){var o=this,t=a.Event(\"show.bs.modal\",{relatedTarget:i});this.$element.trigger(t),this.isShown||t.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass(\"modal-open\"),this.escape(),this.resize(),this.$element.on(\"click.dismiss.bs.modal\",'[data-dismiss=\"modal\"]',a.proxy(this.hide,this)),this.$dialog.on(\"mousedown.dismiss.bs.modal\",function(){o.$element.one(\"mouseup.dismiss.bs.modal\",function(t){a(t.target).is(o.$element)&&(o.ignoreBackdropClick=!0)})}),this.backdrop(function(){var t=a.support.transition&&o.$element.hasClass(\"fade\");o.$element.parent().length||o.$element.appendTo(o.$body),o.$element.show().scrollTop(0),o.adjustDialog(),t&&o.$element[0].offsetWidth,o.$element.addClass(\"in\"),o.enforceFocus();var e=a.Event(\"shown.bs.modal\",{relatedTarget:i});t?o.$dialog.one(\"bsTransitionEnd\",function(){o.$element.trigger(\"focus\").trigger(e)}).emulateTransitionEnd(s.TRANSITION_DURATION):o.$element.trigger(\"focus\").trigger(e)}))},s.prototype.hide=function(t){t&&t.preventDefault(),t=a.Event(\"hide.bs.modal\"),this.$element.trigger(t),this.isShown&&!t.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off(\"focusin.bs.modal\"),this.$element.removeClass(\"in\").off(\"click.dismiss.bs.modal\").off(\"mouseup.dismiss.bs.modal\"),this.$dialog.off(\"mousedown.dismiss.bs.modal\"),a.support.transition&&this.$element.hasClass(\"fade\")?this.$element.one(\"bsTransitionEnd\",a.proxy(this.hideModal,this)).emulateTransitionEnd(s.TRANSITION_DURATION):this.hideModal())},s.prototype.enforceFocus=function(){a(document).off(\"focusin.bs.modal\").on(\"focusin.bs.modal\",a.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger(\"focus\")},this))},s.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(\"keydown.dismiss.bs.modal\",a.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off(\"keydown.dismiss.bs.modal\")},s.prototype.resize=function(){this.isShown?a(window).on(\"resize.bs.modal\",a.proxy(this.handleUpdate,this)):a(window).off(\"resize.bs.modal\")},s.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass(\"modal-open\"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger(\"hidden.bs.modal\")})},s.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},s.prototype.backdrop=function(t){var e=this,i=this.$element.hasClass(\"fade\")?\"fade\":\"\";if(this.isShown&&this.options.backdrop){var o=a.support.transition&&i;if(this.$backdrop=a(document.createElement(\"div\")).addClass(\"modal-backdrop \"+i).appendTo(this.$body),this.$element.on(\"click.dismiss.bs.modal\",a.proxy(function(t){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:t.target===t.currentTarget&&(\"static\"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass(\"in\"),!t)return;o?this.$backdrop.one(\"bsTransitionEnd\",t).emulateTransitionEnd(s.BACKDROP_TRANSITION_DURATION):t()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass(\"in\");var n=function(){e.removeBackdrop(),t&&t()};a.support.transition&&this.$element.hasClass(\"fade\")?this.$backdrop.one(\"bsTransitionEnd\",n).emulateTransitionEnd(s.BACKDROP_TRANSITION_DURATION):n()}else t&&t()},s.prototype.handleUpdate=function(){this.adjustDialog()},s.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:\"\"})},s.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},s.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},s.prototype.setScrollbar=function(){var t=parseInt(this.$body.css(\"padding-right\")||0,10);this.originalBodyPad=document.body.style.paddingRight||\"\";var n=this.scrollbarWidth;this.bodyIsOverflowing&&(this.$body.css(\"padding-right\",t+n),a(this.fixedContent).each(function(t,e){var i=e.style.paddingRight,o=a(e).css(\"padding-right\");a(e).data(\"padding-right\",i).css(\"padding-right\",parseFloat(o)+n+\"px\")}))},s.prototype.resetScrollbar=function(){this.$body.css(\"padding-right\",this.originalBodyPad),a(this.fixedContent).each(function(t,e){var i=a(e).data(\"padding-right\");a(e).removeData(\"padding-right\"),e.style.paddingRight=i||\"\"})},s.prototype.measureScrollbar=function(){var t=document.createElement(\"div\");t.className=\"modal-scrollbar-measure\",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var t=a.fn.modal;a.fn.modal=r,a.fn.modal.Constructor=s,a.fn.modal.noConflict=function(){return a.fn.modal=t,this},a(document).on(\"click.bs.modal.data-api\",'[data-toggle=\"modal\"]',function(t){var e=a(this),i=e.attr(\"href\"),o=e.attr(\"data-target\")||i&&i.replace(/.*(?=#[^\\s]+$)/,\"\"),n=a(document).find(o),s=n.data(\"bs.modal\")?\"toggle\":a.extend({remote:!/#/.test(i)&&i},n.data(),e.data());e.is(\"a\")&&t.preventDefault(),n.one(\"show.bs.modal\",function(t){t.isDefaultPrevented()||n.one(\"hidden.bs.modal\",function(){e.is(\":visible\")&&e.trigger(\"focus\")})}),r.call(n,s,this)})}(jQuery),function(g){\"use strict\";var o=[\"sanitize\",\"whiteList\",\"sanitizeFn\"],a=[\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"],t={\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",/^aria-[\\w-]*$/i],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},r=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,l=/^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function u(t,e){var i=t.nodeName.toLowerCase();if(-1!==g.inArray(i,e))return-1===g.inArray(i,a)||Boolean(t.nodeValue.match(r)||t.nodeValue.match(l));for(var o=g(e).filter(function(t,e){return e instanceof RegExp}),n=0,s=o.length;n<s;n++)if(i.match(o[n]))return!0;return!1}function n(t,e,i){if(0===t.length)return t;if(i&&\"function\"==typeof i)return i(t);if(!document.implementation||!document.implementation.createHTMLDocument)return t;var o=document.implementation.createHTMLDocument(\"sanitization\");o.body.innerHTML=t;for(var n=g.map(e,function(t,e){return e}),s=g(o.body).find(\"*\"),a=0,r=s.length;a<r;a++){var l=s[a],h=l.nodeName.toLowerCase();if(-1!==g.inArray(h,n))for(var d=g.map(l.attributes,function(t){return t}),p=[].concat(e[\"*\"]||[],e[h]||[]),c=0,f=d.length;c<f;c++)u(d[c],p)||l.removeAttribute(d[c].nodeName);else l.parentNode.removeChild(l)}return o.body.innerHTML}var m=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init(\"tooltip\",t,e)};m.VERSION=\"3.4.1\",m.TRANSITION_DURATION=150,m.DEFAULTS={animation:!0,placement:\"top\",selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0},sanitize:!0,sanitizeFn:null,whiteList:t},m.prototype.init=function(t,e,i){if(this.enabled=!0,this.type=t,this.$element=g(e),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&g(document).find(g.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var o=this.options.trigger.split(\" \"),n=o.length;n--;){var s=o[n];if(\"click\"==s)this.$element.on(\"click.\"+this.type,this.options.selector,g.proxy(this.toggle,this));else if(\"manual\"!=s){var a=\"hover\"==s?\"mouseenter\":\"focusin\",r=\"hover\"==s?\"mouseleave\":\"focusout\";this.$element.on(a+\".\"+this.type,this.options.selector,g.proxy(this.enter,this)),this.$element.on(r+\".\"+this.type,this.options.selector,g.proxy(this.leave,this))}}this.options.selector?this._options=g.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},m.prototype.getDefaults=function(){return m.DEFAULTS},m.prototype.getOptions=function(t){var e=this.$element.data();for(var i in e)e.hasOwnProperty(i)&&-1!==g.inArray(i,o)&&delete e[i];return(t=g.extend({},this.getDefaults(),e,t)).delay&&\"number\"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t.sanitize&&(t.template=n(t.template,t.whiteList,t.sanitizeFn)),t},m.prototype.getDelegateOptions=function(){var i={},o=this.getDefaults();return this._options&&g.each(this._options,function(t,e){o[t]!=e&&(i[t]=e)}),i},m.prototype.enter=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data(\"bs.\"+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data(\"bs.\"+this.type,e)),t instanceof g.Event&&(e.inState[\"focusin\"==t.type?\"focus\":\"hover\"]=!0),e.tip().hasClass(\"in\")||\"in\"==e.hoverState)e.hoverState=\"in\";else{if(clearTimeout(e.timeout),e.hoverState=\"in\",!e.options.delay||!e.options.delay.show)return e.show();e.timeout=setTimeout(function(){\"in\"==e.hoverState&&e.show()},e.options.delay.show)}},m.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},m.prototype.leave=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data(\"bs.\"+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data(\"bs.\"+this.type,e)),t instanceof g.Event&&(e.inState[\"focusout\"==t.type?\"focus\":\"hover\"]=!1),!e.isInStateTrue()){if(clearTimeout(e.timeout),e.hoverState=\"out\",!e.options.delay||!e.options.delay.hide)return e.hide();e.timeout=setTimeout(function(){\"out\"==e.hoverState&&e.hide()},e.options.delay.hide)}},m.prototype.show=function(){var t=g.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var e=g.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!e)return;var i=this,o=this.tip(),n=this.getUID(this.type);this.setContent(),o.attr(\"id\",n),this.$element.attr(\"aria-describedby\",n),this.options.animation&&o.addClass(\"fade\");var s=\"function\"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,a=/\\s?auto?\\s?/i,r=a.test(s);r&&(s=s.replace(a,\"\")||\"top\"),o.detach().css({top:0,left:0,display:\"block\"}).addClass(s).data(\"bs.\"+this.type,this),this.options.container?o.appendTo(g(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var l=this.getPosition(),h=o[0].offsetWidth,d=o[0].offsetHeight;if(r){var p=s,c=this.getPosition(this.$viewport);s=\"bottom\"==s&&l.bottom+d>c.bottom?\"top\":\"top\"==s&&l.top-d<c.top?\"bottom\":\"right\"==s&&l.right+h>c.width?\"left\":\"left\"==s&&l.left-h<c.left?\"right\":s,o.removeClass(p).addClass(s)}var f=this.getCalculatedOffset(s,l,h,d);this.applyPlacement(f,s);var u=function(){var t=i.hoverState;i.$element.trigger(\"shown.bs.\"+i.type),i.hoverState=null,\"out\"==t&&i.leave(i)};g.support.transition&&this.$tip.hasClass(\"fade\")?o.one(\"bsTransitionEnd\",u).emulateTransitionEnd(m.TRANSITION_DURATION):u()}},m.prototype.applyPlacement=function(t,e){var i=this.tip(),o=i[0].offsetWidth,n=i[0].offsetHeight,s=parseInt(i.css(\"margin-top\"),10),a=parseInt(i.css(\"margin-left\"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),t.top+=s,t.left+=a,g.offset.setOffset(i[0],g.extend({using:function(t){i.css({top:Math.round(t.top),left:Math.round(t.left)})}},t),0),i.addClass(\"in\");var r=i[0].offsetWidth,l=i[0].offsetHeight;\"top\"==e&&l!=n&&(t.top=t.top+n-l);var h=this.getViewportAdjustedDelta(e,t,r,l);h.left?t.left+=h.left:t.top+=h.top;var d=/top|bottom/.test(e),p=d?2*h.left-o+r:2*h.top-n+l,c=d?\"offsetWidth\":\"offsetHeight\";i.offset(t),this.replaceArrow(p,i[0][c],d)},m.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?\"left\":\"top\",50*(1-t/e)+\"%\").css(i?\"top\":\"left\",\"\")},m.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();this.options.html?(this.options.sanitize&&(e=n(e,this.options.whiteList,this.options.sanitizeFn)),t.find(\".tooltip-inner\").html(e)):t.find(\".tooltip-inner\").text(e),t.removeClass(\"fade in top bottom left right\")},m.prototype.hide=function(t){var e=this,i=g(this.$tip),o=g.Event(\"hide.bs.\"+this.type);function n(){\"in\"!=e.hoverState&&i.detach(),e.$element&&e.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\"+e.type),t&&t()}if(this.$element.trigger(o),!o.isDefaultPrevented())return i.removeClass(\"in\"),g.support.transition&&i.hasClass(\"fade\")?i.one(\"bsTransitionEnd\",n).emulateTransitionEnd(m.TRANSITION_DURATION):n(),this.hoverState=null,this},m.prototype.fixTitle=function(){var t=this.$element;(t.attr(\"title\")||\"string\"!=typeof t.attr(\"data-original-title\"))&&t.attr(\"data-original-title\",t.attr(\"title\")||\"\").attr(\"title\",\"\")},m.prototype.hasContent=function(){return this.getTitle()},m.prototype.getPosition=function(t){var e=(t=t||this.$element)[0],i=\"BODY\"==e.tagName,o=e.getBoundingClientRect();null==o.width&&(o=g.extend({},o,{width:o.right-o.left,height:o.bottom-o.top}));var n=window.SVGElement&&e instanceof window.SVGElement,s=i?{top:0,left:0}:n?null:t.offset(),a={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},r=i?{width:g(window).width(),height:g(window).height()}:null;return g.extend({},o,a,r,s)},m.prototype.getCalculatedOffset=function(t,e,i,o){return\"bottom\"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:\"top\"==t?{top:e.top-o,left:e.left+e.width/2-i/2}:\"left\"==t?{top:e.top+e.height/2-o/2,left:e.left-i}:{top:e.top+e.height/2-o/2,left:e.left+e.width}},m.prototype.getViewportAdjustedDelta=function(t,e,i,o){var n={top:0,left:0};if(!this.$viewport)return n;var s=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var r=e.top-s-a.scroll,l=e.top+s-a.scroll+o;r<a.top?n.top=a.top-r:l>a.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;h<a.left?n.left=a.left-h:d>a.right&&(n.left=a.left+a.width-d)}return n},m.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr(\"data-original-title\")||(\"function\"==typeof e.title?e.title.call(t[0]):e.title)},m.prototype.getUID=function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},m.prototype.tip=function(){if(!this.$tip&&(this.$tip=g(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},m.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},m.prototype.enable=function(){this.enabled=!0},m.prototype.disable=function(){this.enabled=!1},m.prototype.toggleEnabled=function(){this.enabled=!this.enabled},m.prototype.toggle=function(t){var e=this;t&&((e=g(t.currentTarget).data(\"bs.\"+this.type))||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data(\"bs.\"+this.type,e))),t?(e.inState.click=!e.inState.click,e.isInStateTrue()?e.enter(e):e.leave(e)):e.tip().hasClass(\"in\")?e.leave(e):e.enter(e)},m.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off(\".\"+t.type).removeData(\"bs.\"+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})},m.prototype.sanitizeHtml=function(t){return n(t,this.options.whiteList,this.options.sanitizeFn)};var e=g.fn.tooltip;g.fn.tooltip=function i(o){return this.each(function(){var t=g(this),e=t.data(\"bs.tooltip\"),i=\"object\"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data(\"bs.tooltip\",e=new m(this,i)),\"string\"==typeof o&&e[o]())})},g.fn.tooltip.Constructor=m,g.fn.tooltip.noConflict=function(){return g.fn.tooltip=e,this}}(jQuery),function(n){\"use strict\";var s=function(t,e){this.init(\"popover\",t,e)};if(!n.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");s.VERSION=\"3.4.1\",s.DEFAULTS=n.extend({},n.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'}),((s.prototype=n.extend({},n.fn.tooltip.Constructor.prototype)).constructor=s).prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();if(this.options.html){var o=typeof i;this.options.sanitize&&(e=this.sanitizeHtml(e),\"string\"===o&&(i=this.sanitizeHtml(i))),t.find(\".popover-title\").html(e),t.find(\".popover-content\").children().detach().end()[\"string\"===o?\"html\":\"append\"](i)}else t.find(\".popover-title\").text(e),t.find(\".popover-content\").children().detach().end().text(i);t.removeClass(\"fade top bottom left right in\"),t.find(\".popover-title\").html()||t.find(\".popover-title\").hide()},s.prototype.hasContent=function(){return this.getTitle()||this.getContent()},s.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr(\"data-content\")||(\"function\"==typeof e.content?e.content.call(t[0]):e.content)},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var t=n.fn.popover;n.fn.popover=function e(o){return this.each(function(){var t=n(this),e=t.data(\"bs.popover\"),i=\"object\"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data(\"bs.popover\",e=new s(this,i)),\"string\"==typeof o&&e[o]())})},n.fn.popover.Constructor=s,n.fn.popover.noConflict=function(){return n.fn.popover=t,this}}(jQuery),function(s){\"use strict\";function n(t,e){this.$body=s(document.body),this.$scrollElement=s(t).is(document.body)?s(window):s(t),this.options=s.extend({},n.DEFAULTS,e),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",s.proxy(this.process,this)),this.refresh(),this.process()}function e(o){return this.each(function(){var t=s(this),e=t.data(\"bs.scrollspy\"),i=\"object\"==typeof o&&o;e||t.data(\"bs.scrollspy\",e=new n(this,i)),\"string\"==typeof o&&e[o]()})}n.VERSION=\"3.4.1\",n.DEFAULTS={offset:10},n.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},n.prototype.refresh=function(){var t=this,o=\"offset\",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),s.isWindow(this.$scrollElement[0])||(o=\"position\",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=s(this),e=t.data(\"target\")||t.attr(\"href\"),i=/^#./.test(e)&&s(e);return i&&i.length&&i.is(\":visible\")&&[[i[o]().top+n,e]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},n.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),o<=e)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e<n[0])return this.activeTarget=null,this.clear();for(t=n.length;t--;)a!=s[t]&&e>=n[t]&&(n[t+1]===undefined||e<n[t+1])&&this.activate(s[t])},n.prototype.activate=function(t){this.activeTarget=t,this.clear();var e=this.selector+'[data-target=\"'+t+'\"],'+this.selector+'[href=\"'+t+'\"]',i=s(e).parents(\"li\").addClass(\"active\");i.parent(\".dropdown-menu\").length&&(i=i.closest(\"li.dropdown\").addClass(\"active\")),i.trigger(\"activate.bs.scrollspy\")},n.prototype.clear=function(){s(this.selector).parentsUntil(this.options.target,\".active\").removeClass(\"active\")};var t=s.fn.scrollspy;s.fn.scrollspy=e,s.fn.scrollspy.Constructor=n,s.fn.scrollspy.noConflict=function(){return s.fn.scrollspy=t,this},s(window).on(\"load.bs.scrollspy.data-api\",function(){s('[data-spy=\"scroll\"]').each(function(){var t=s(this);e.call(t,t.data())})})}(jQuery),function(r){\"use strict\";var a=function(t){this.element=r(t)};function e(i){return this.each(function(){var t=r(this),e=t.data(\"bs.tab\");e||t.data(\"bs.tab\",e=new a(this)),\"string\"==typeof i&&e[i]()})}a.VERSION=\"3.4.1\",a.TRANSITION_DURATION=150,a.prototype.show=function(){var t=this.element,e=t.closest(\"ul:not(.dropdown-menu)\"),i=t.data(\"target\");if(i||(i=(i=t.attr(\"href\"))&&i.replace(/.*(?=#[^\\s]*$)/,\"\")),!t.parent(\"li\").hasClass(\"active\")){var o=e.find(\".active:last a\"),n=r.Event(\"hide.bs.tab\",{relatedTarget:t[0]}),s=r.Event(\"show.bs.tab\",{relatedTarget:o[0]});if(o.trigger(n),t.trigger(s),!s.isDefaultPrevented()&&!n.isDefaultPrevented()){var a=r(document).find(i);this.activate(t.closest(\"li\"),e),this.activate(a,a.parent(),function(){o.trigger({type:\"hidden.bs.tab\",relatedTarget:t[0]}),t.trigger({type:\"shown.bs.tab\",relatedTarget:o[0]})})}}},a.prototype.activate=function(t,e,i){var o=e.find(\"> .active\"),n=i&&r.support.transition&&(o.length&&o.hasClass(\"fade\")||!!e.find(\"> .fade\").length);function s(){o.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),t.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),n?(t[0].offsetWidth,t.addClass(\"in\")):t.removeClass(\"fade\"),t.parent(\".dropdown-menu\").length&&t.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),i&&i()}o.length&&n?o.one(\"bsTransitionEnd\",s).emulateTransitionEnd(a.TRANSITION_DURATION):s(),o.removeClass(\"in\")};var t=r.fn.tab;r.fn.tab=e,r.fn.tab.Constructor=a,r.fn.tab.noConflict=function(){return r.fn.tab=t,this};var i=function(t){t.preventDefault(),e.call(r(this),\"show\")};r(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',i).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',i)}(jQuery),function(l){\"use strict\";var h=function(t,e){this.options=l.extend({},h.DEFAULTS,e);var i=this.options.target===h.DEFAULTS.target?l(this.options.target):l(document).find(this.options.target);this.$target=i.on(\"scroll.bs.affix.data-api\",l.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",l.proxy(this.checkPositionWithEventLoop,this)),this.$element=l(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function i(o){return this.each(function(){var t=l(this),e=t.data(\"bs.affix\"),i=\"object\"==typeof o&&o;e||t.data(\"bs.affix\",e=new h(this,i)),\"string\"==typeof o&&e[o]()})}h.VERSION=\"3.4.1\",h.RESET=\"affix affix-top affix-bottom\",h.DEFAULTS={offset:0,target:window},h.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&\"top\"==this.affixed)return n<i&&\"top\";if(\"bottom\"==this.affixed)return null!=i?!(n+this.unpin<=s.top)&&\"bottom\":!(n+a<=t-o)&&\"bottom\";var r=null==this.affixed,l=r?n:s.top;return null!=i&&n<=i?\"top\":null!=o&&t-o<=l+(r?a:e)&&\"bottom\"},h.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(h.RESET).addClass(\"affix\");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},h.prototype.checkPositionWithEventLoop=function(){setTimeout(l.proxy(this.checkPosition,this),1)},h.prototype.checkPosition=function(){if(this.$element.is(\":visible\")){var t=this.$element.height(),e=this.options.offset,i=e.top,o=e.bottom,n=Math.max(l(document).height(),l(document.body).height());\"object\"!=typeof e&&(o=i=e),\"function\"==typeof i&&(i=e.top(this.$element)),\"function\"==typeof o&&(o=e.bottom(this.$element));var s=this.getState(n,t,i,o);if(this.affixed!=s){null!=this.unpin&&this.$element.css(\"top\",\"\");var a=\"affix\"+(s?\"-\"+s:\"\"),r=l.Event(a+\".bs.affix\");if(this.$element.trigger(r),r.isDefaultPrevented())return;this.affixed=s,this.unpin=\"bottom\"==s?this.getPinnedOffset():null,this.$element.removeClass(h.RESET).addClass(a).trigger(a.replace(\"affix\",\"affixed\")+\".bs.affix\")}\"bottom\"==s&&this.$element.offset({top:n-t-o})}};var t=l.fn.affix;l.fn.affix=i,l.fn.affix.Constructor=h,l.fn.affix.noConflict=function(){return l.fn.affix=t,this},l(window).on(\"load\",function(){l('[data-spy=\"affix\"]').each(function(){var t=l(this),e=t.data();e.offset=e.offset||{},null!=e.offsetBottom&&(e.offset.bottom=e.offsetBottom),null!=e.offsetTop&&(e.offset.top=e.offsetTop),i.call(t,e)})})}(jQuery);\ndefine(\"bootstrap\", [\"jquery\"], function(){});\n\n","/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!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(e,t){\"use strict\";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return\"function\"==typeof t&&\"number\"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement(\"script\");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?l[c.call(e)]||\"object\":typeof e}var b=\"3.3.1\",w=function(e,t){return new w.fn.init(e,t)},T=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;w.fn=w.prototype={jquery:\"3.3.1\",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.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||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:\"jQuery\"+(\"3.3.1\"+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]\"!==c.call(e))&&(!(t=i(e))||\"function\"==typeof(n=f.call(t,\"constructor\")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},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},trim:function(e){return null==e?\"\":(e+\"\").replace(T,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,\"string\"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},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=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),\"function\"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){l[\"[object \"+t+\"]\"]=t.toLowerCase()});function C(e){var t=!!e&&\"length\"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b=\"sizzle\"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",M=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",R=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",I=\"\\\\[\"+M+\"*(\"+R+\")(?:\"+M+\"*([*^$|!~]?=)\"+M+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+R+\"))|)\"+M+\"*\\\\]\",W=\":(\"+R+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+I+\")*)|.*)\\\\)|)\",$=new RegExp(M+\"+\",\"g\"),B=new RegExp(\"^\"+M+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+M+\"+$\",\"g\"),F=new RegExp(\"^\"+M+\"*,\"+M+\"*\"),_=new RegExp(\"^\"+M+\"*([>+~]|\"+M+\")\"+M+\"*\"),z=new RegExp(\"=\"+M+\"*([^\\\\]'\\\"]*?)\"+M+\"*\\\\]\",\"g\"),X=new RegExp(W),U=new RegExp(\"^\"+R+\"$\"),V={ID:new RegExp(\"^#(\"+R+\")\"),CLASS:new RegExp(\"^\\\\.(\"+R+\")\"),TAG:new RegExp(\"^(\"+R+\"|[*])\"),ATTR:new RegExp(\"^\"+I),PSEUDO:new RegExp(\"^\"+W),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+M+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+M+\"*(?:([+-]|)\"+M+\"*(\\\\d+)|))\"+M+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+P+\")$\",\"i\"),needsContext:new RegExp(\"^\"+M+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+M+\"*((?:-\\\\d)?\\\\d*)\"+M+\"*\\\\)|)(?=[^-]|$)\",\"i\")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\\d$/i,Q=/^[^{]+\\{\\s*\\[native \\w/,J=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,K=/[+~]/,Z=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+M+\"?|(\"+M+\")|.)\",\"ig\"),ee=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ne=function(e,t){return t?\"\\0\"===e?\"\\ufffd\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&(\"form\"in e||\"label\"in e)},{dir:\"parentNode\",next:\"legend\"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],\"string\"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+\" \"]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if(\"object\"!==t.nodeName.toLowerCase()){(c=t.getAttribute(\"id\"))?c=c.replace(te,ne):t.setAttribute(\"id\",c=b),s=(h=a(e)).length;while(s--)h[s]=\"#\"+c+\" \"+ve(h[s]);v=h.join(\",\"),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute(\"id\")}}}return u(e.replace(B,\"$1\"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+\" \")>r.cacheLength&&delete t[e.shift()],t[n+\" \"]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split(\"|\"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return\"input\"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function de(e){return function(t){return\"form\"in t?t.parentNode&&!1===t.disabled?\"label\"in t?\"label\"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:\"label\"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener(\"unload\",re,!1):i.attachEvent&&i.attachEvent(\"onunload\",re)),n.attributes=ue(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute(\"id\")===t}},r.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}},r.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&g){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[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML=\"<a id='\"+b+\"'></a><select id='\"+b+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&y.push(\"[*^$]=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||y.push(\"\\\\[\"+M+\"*(?:value|\"+P+\")\"),e.querySelectorAll(\"[id~=\"+b+\"-]\").length||y.push(\"~=\"),e.querySelectorAll(\":checked\").length||y.push(\":checked\"),e.querySelectorAll(\"a#\"+b+\"+*\").length||y.push(\".#.+[+~]\")}),ue(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=d.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&y.push(\"name\"+M+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&y.push(\":enabled\",\":disabled\"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&y.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),y.push(\",.*:\")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,\"*\"),m.call(e,\"[s!='']:x\"),v.push(\"!=\",W)}),y=y.length&&new RegExp(y.join(\"|\")),v=v.length&&new RegExp(v.join(\"|\")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,\"='$1']\"),n.matchesSelector&&g&&!S[t+\" \"]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+\"\").replace(te,ne)},oe.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n=\"\",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,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(Z,ee),e[3]=(e[3]||e[4]||e[5]||\"\").replace(Z,ee),\"~=\"===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]||oe.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]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&X.test(n)&&(t=a(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(Z,ee).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+\" \"];return t||(t=new RegExp(\"(^|\"+M+\")\"+e+\"(\"+M+\"|$)\"))&&E(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?\"!=\"===t:!t||(i+=\"\",\"=\"===t?i===n:\"!=\"===t?i!==n:\"^=\"===t?n&&0===i.indexOf(n):\"*=\"===t?n&&i.indexOf(n)>-1:\"$=\"===t?n&&i.slice(-n.length)===n:\"~=\"===t?(\" \"+i.replace($,\" \")+\" \").indexOf(n)>-1:\"|=\"===t&&(i===n||i.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?\"nextSibling\":\"previousSibling\",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error(\"unsupported pseudo: \"+e);return i[b]?i(t):i.length>1?(n=[e,e,\"\",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,\"$1\"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||\"\")||oe.error(\"unsupported lang: \"+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return(n=n.toLowerCase())===e||0===n.indexOf(e+\"-\")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!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!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+\" \"];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B,\" \")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&\"parentNode\"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(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 Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||\"*\",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[\" \"],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:\" \"===e[u-2].type?\"*\":\"\"})).replace(B,\"$1\"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m=\"0\",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG(\"*\",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+\" \"];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p=\"function\"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&\"ID\"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split(\"\").sort(D).join(\"\")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement(\"fieldset\"))}),ue(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||le(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||le(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute(\"disabled\")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[\":\"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):\"string\"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\"string\"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,\"string\"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,\"string\"==typeof e){if(!(i=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,\"parentNode\")},parentsUntil:function(e,t,n){return k(e,\"parentNode\",n)},next:function(e){return P(e,\"nextSibling\")},prev:function(e){return P(e,\"previousSibling\")},nextAll:function(e){return k(e,\"nextSibling\")},prevAll:function(e){return k(e,\"previousSibling\")},nextUntil:function(e,t,n){return k(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return k(e,\"previousSibling\",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,\"iframe\")?e.contentDocument:(N(e,\"template\")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\\x20\\t\\r\\n\\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e=\"string\"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:\"\")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&\"string\"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[[\"notify\",\"progress\",w.Callbacks(\"memory\"),w.Callbacks(\"memory\"),2],[\"resolve\",\"done\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),1,\"rejected\"]],r=\"pending\",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},\"catch\":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+\"With\"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError(\"Thenable self-resolution\");l=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+\"With\"](this===o?void 0:this,arguments),this},o[t[0]+\"With\"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),\"pending\"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)[\"catch\"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener(\"DOMContentLoaded\",_),e.removeEventListener(\"load\",_),w.ready()}\"complete\"===r.readyState||\"loading\"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener(\"DOMContentLoaded\",_),e.addEventListener(\"load\",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(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},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,\"ms-\").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(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[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(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(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.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&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,ee=/[A-Z]/g;function te(e){return\"true\"===e||\"false\"!==e&&(\"null\"===e?null:e===+e+\"\"?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(ee,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,\"hasDataAttrs\"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf(\"data-\")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks(\"once memory\").add(function(){J.remove(e,[t+\"queue\",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=w.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=J.get(o[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ie=new RegExp(\"^(?:([+-])=|)(\"+re+\")([a-z%]*)$\",\"i\"),oe=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ae=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&w.contains(e.ownerDocument,e)&&\"none\"===w.css(e,\"display\")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,\"\")},u=s(),l=n&&n[3]||(w.cssNumber[t]?\"\":\"px\"),c=(w.cssNumber[t]||\"px\"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.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 le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,\"display\"),t.parentNode.removeChild(t),\"none\"===i&&(i=\"block\"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?(\"none\"===n&&(i[o]=J.get(r,\"display\")||null,i[o]||(r.style.display=\"\")),\"\"===r.style.display&&ae(r)&&(i[o]=ce(r))):\"none\"!==n&&(i[o]=\"none\",J.set(r,\"display\",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,he=/^$|^module$|\\/(?:java|ecma)script/i,ge={option:[1,\"<select multiple='multiple'>\",\"</select>\"],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,\"\",\"\"]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],\"globalEval\",!t||J.get(t[n],\"globalEval\"))}var me=/<|&#?\\w+;/;function xe(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))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement(\"div\")),s=(de.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(o));f.textContent=\"\",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),\"script\"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||\"\")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement(\"div\")),t=r.createElement(\"input\");t.setAttribute(\"type\",\"radio\"),t.setAttribute(\"checked\",\"checked\"),t.setAttribute(\"name\",\"t\"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML=\"<textarea>x</textarea>\",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){\"string\"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(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=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return\"undefined\"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||\"\").match(M)||[\"\"]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||\"\").match(M)||[\"\"]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||\"\").split(\".\").sort(),d){f=w.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,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,\"handle events\")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,\"events\")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.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&&e.button>=1))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?w(i,this).index(l)>-1:w.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(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&N(this,\"input\"))return this.click(),!1},_default:function(e){return N(e.target,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,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&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.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,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:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(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=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,Ae=/<script|<style|<link/i,je=/checked\\s*(?:[^=]|=\\s*.checked.)/i,qe=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function Le(e,t){return N(e,\"table\")&&N(11!==t.nodeType?t:t.firstChild,\"tr\")?w(e).children(\"tbody\")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function Oe(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();\"input\"===n&&pe.test(e.type)?t.checked=e.checked:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&\"string\"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,\"script\"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,\"script\"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||\"\")&&!J.access(l,\"globalEval\")&&w.contains(c,l)&&(l.src&&\"module\"!==(l.type||\"\").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,\"\"),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,\"script\")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,\"<$1></$2>\")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,\"script\")).length>0&&ve(a,!u&&ye(e,\"script\")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.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 Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(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&&(w.cleanData(ye(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(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&&!Ae.test(e)&&!ge[(de.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp(\"^(\"+re+\")(?!px)[a-z%]+$\",\"i\"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join(\"|\"),\"i\");!function(){function t(){if(c){l.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",c.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i=\"1%\"!==t.top,u=12===n(t.marginLeft),c.style.right=\"60%\",s=36===n(t.right),o=36===n(t.width),c.style.position=\"absolute\",a=36===c.offsetWidth||\"absolute\",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement(\"div\"),c=r.createElement(\"div\");c.style&&(c.style.backgroundClip=\"content-box\",c.cloneNode(!0).style.backgroundClip=\"\",h.clearCloneStyle=\"content-box\"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(\"\"!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ve={letterSpacing:\"0\",fontWeight:\"400\"},Ge=[\"Webkit\",\"Moz\",\"ms\"],Ye=r.createElement(\"div\").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function Ze(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?(\"content\"===n&&(u-=w.css(e,\"padding\"+oe[a],!0,i)),\"margin\"!==n&&(u-=w.css(e,\"border\"+oe[a]+\"Width\",!0,i))):(u+=w.css(e,\"padding\"+oe[a],!0,i),\"padding\"!==n?u+=w.css(e,\"border\"+oe[a]+\"Width\",!0,i):s+=w.css(e,\"border\"+oe[a]+\"Width\",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o=\"border-box\"===w.css(e,\"boxSizing\",!1,r),a=o;if(We.test(i)){if(!n)return i;i=\"auto\"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),(\"auto\"===i||!parseFloat(i)&&\"inline\"===w.css(e,\"display\",!1,r))&&(i=e[\"offset\"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?\"border\":\"content\"),a,r,i)+\"px\"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.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=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o=\"number\"),null!=n&&n===n&&(\"number\"===o&&(n+=i&&i[3]||(w.cssNumber[s]?\"\":\"px\")),h.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=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),\"normal\"===i&&t in Ve&&(i=Ve[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each([\"height\",\"width\"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a=\"border-box\"===w.css(e,\"boxSizing\",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,\"border\",!1,o)-.5)),s&&(i=ie.exec(n))&&\"px\"!==(i[3]||\"px\")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,\"marginLeft\"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),w.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},\"margin\"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?\"\":\"px\")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.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):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.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=w.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=oe[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(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&&ae(e),y=J.get(e,\"fxshow\");n.queue||(null==(a=w._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--,w.queue(e,\"fx\").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,\"display\")),\"none\"===(c=w.css(e,\"display\"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,\"display\"),fe([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===w.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;for(r in d)u||(y?\"hidden\"in y&&(g=y.hidden):y=J.access(e,\"fxshow\",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,\"fxshow\");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&\"expand\"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=[\"*\"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&\"object\"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,\"finish\"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,i=null!=e&&e+\"queueHooks\",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||\"fx\"),this.each(function(){var t,n=J.get(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut(\"show\"),slideUp:ut(\"hide\"),slideToggle:ut(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||\"fx\",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement(\"input\"),t=r.createElement(\"select\").appendChild(r.createElement(\"option\"));e.type=\"checkbox\",h.checkOn=\"\"!==e.value,h.optSelected=t.selected,(e=r.createElement(\"input\")).value=\"t\",e.type=\"radio\",h.radioValue=\"t\"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.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=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&\"radio\"===t&&N(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(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.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=w.find.attr(e,\"tabindex\");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),h.optSelected||(w.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)}}),w.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(\" \")}function mt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function xt(e){return Array.isArray(e)?e:\"string\"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){a=0;while(o=t[a++])r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){a=0;while(o=t[a++])while(r.indexOf(\" \"+o+\" \")>-1)r=r.replace(\" \"+o+\" \",\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(e,t){var n=typeof e,r=\"string\"===n||Array.isArray(e);return\"boolean\"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&\"boolean\"!==n||((t=mt(this))&&J.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||!1===e?\"\":J.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;t=\" \"+e+\" \";while(n=this[r++])if(1===n.nodeType&&(\" \"+vt(mt(n))+\" \").indexOf(t)>-1)return!0;return!1}});var bt=/\\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i=\"\":\"number\"==typeof i?i+=\"\":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?\"\":e+\"\"})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&\"set\"in t&&void 0!==t.set(this,i,\"value\")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&\"get\"in t&&void 0!==(n=t.get(i,\"value\"))?n:\"string\"==typeof(n=i.value)?n.replace(bt,\"\"):null==n?\"\":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,\"value\");return null!=t?t:vt(w.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||!N(n.parentNode,\"optgroup\"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each([\"radio\",\"checkbox\"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),h.focusin=\"onfocusin\"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,\"type\")?t.type:t,x=f.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(\".\")>-1&&(m=(x=m.split(\".\")).shift(),x.sort()),c=m.indexOf(\":\")<0&&\"on\"+m,t=t[w.expando]?t:new w.Event(m,\"object\"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+x.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,\"events\")||{})[t.type]&&J.get(s,\"handle\"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\\?/;w.parseXML=function(t){var n;if(!t||\"string\"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,\"text/xml\")}catch(e){n=void 0}return n&&!n.getElementsByTagName(\"parsererror\").length||w.error(\"Invalid XML: \"+t),n};var St=/\\[\\]$/,Dt=/\\r?\\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+\"[\"+(\"object\"==typeof i&&null!=i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==x(t))r(e,t);else for(i in t)jt(e+\"[\"+i+\"]\",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join(\"&\")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,\"elements\");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(\":disabled\")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,\"\\r\\n\")}}):{name:t.name,value:n.replace(Dt,\"\\r\\n\")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\\/\\//,It={},Wt={},$t=\"*/\".concat(\"*\"),Bt=r.createElement(\"a\");Bt.href=Ct.href;function Ft(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return\"string\"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i[\"*\"]&&a(\"*\")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(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]}function Ut(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}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:\"GET\",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":$t,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\":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){\"object\"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks(\"once memory\"),x=h.statusCode||{},b={},T={},C=\"canceled\",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+\"\").replace(Rt,Ct.protocol+\"//\"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||\"*\").toLowerCase().match(M)||[\"\"],null==h.crossDomain){l=r.createElement(\"a\");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+\"//\"+Bt.host!=l.protocol+\"//\"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&\"string\"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,\"\"),h.hasContent?h.data&&h.processData&&0===(h.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(h.data=h.data.replace(qt,\"+\")):(d=h.url.slice(o.length),h.data&&(h.processData||\"string\"==typeof h.data)&&(o+=(kt.test(o)?\"&\":\"?\")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,\"$1\"),d=(kt.test(o)?\"&\":\"?\")+\"_=\"+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader(\"If-Modified-Since\",w.lastModified[o]),w.etag[o]&&E.setRequestHeader(\"If-None-Match\",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader(\"Content-Type\",h.contentType),E.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\"*\"!==h.dataTypes[0]?\", \"+$t+\"; q=0.01\":\"\"):h.accepts[\"*\"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C=\"abort\",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger(\"ajaxSend\",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort(\"timeout\")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,\"No Transport\");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||\"\",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader(\"Last-Modified\"))&&(w.lastModified[o]=T),(T=E.getResponseHeader(\"etag\"))&&(w.etag[o]=T)),204===t||\"HEAD\"===h.type?C=\"nocontent\":304===t?C=\"notmodified\":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C=\"error\",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+\"\",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?\"ajaxSuccess\":\"ajaxError\",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger(\"ajaxComplete\",[E,h]),--w.active||w.event.trigger(\"ajaxStop\")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,\"json\")},getScript:function(e,t){return w.get(e,void 0,t,\"script\")}}),w.each([\"get\",\"post\"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,\"throws\":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(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(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&\"withCredentials\"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,\"abort\"===e?s.abort():\"error\"===e?\"number\"!=typeof s.status?o(0,\"error\"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,\"text\"!==(s.responseType||\"text\")||\"string\"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n(\"error\"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n(\"abort\");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.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 w.globalEval(e),e}}}),w.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),w.ajaxTransport(\"script\",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(\"<script>\").prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&o(\"error\"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\\?(?=&|$)|\\?\\?/;w.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Yt.pop()||w.expando+\"_\"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter(\"json jsonp\",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?\"url\":\"string\"==typeof t.data&&0===(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Qt.test(t.data)&&\"data\");if(s||\"jsonp\"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,\"$1\"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+i),t.converters[\"script json\"]=function(){return a||w.error(i+\" was not called\"),a[0]},t.dataTypes[0]=\"json\",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),\"script\"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument(\"\").body;return e.innerHTML=\"<form></form><form></form>\",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if(\"string\"!=typeof e)return[];\"boolean\"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\" \");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),a.length>0&&w.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?w(\"<div>\").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,\"position\"),f=w(e),p={};\"static\"===c&&(e.style.position=\"relative\"),s=f.offset(),o=w.css(e,\"top\"),u=w.css(e,\"left\"),(l=(\"absolute\"===c||\"fixed\"===c)&&(o+u).indexOf(\"auto\")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),\"using\"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\"fixed\"===w.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\"===w.css(e,\"position\"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,\"borderTopWidth\",!0),i.left+=w.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-w.css(r,\"marginTop\",!0),left:t.left-i.left-w.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&\"static\"===w.css(e,\"position\"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=\"pageYOffset\"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each([\"top\",\"left\"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+\"px\":n})}),w.each({Height:\"height\",Width:\"width\"},function(e,t){w.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||\"boolean\"!=typeof i),s=n||(!0===i||!0===o?\"margin\":\"border\");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf(\"outer\")?t[\"inner\"+e]:t.document.documentElement[\"client\"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body[\"scroll\"+e],o[\"scroll\"+e],t.body[\"offset\"+e],o[\"offset\"+e],o[\"client\"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.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,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.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)}}),w.proxy=function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * RequireJS module to get server configuration information. This module\n * fetches \"config.json\" relative  to  the   main  document.  The Prolog\n * server emits a  JSON  object  that   provides  the  location  of  all\n * explicitly  identified  HTTP  handlers.  These    are   intended  for\n * (typically) AJAX calls:\n *\n * ```\n *   $.ajax({ url: config.http.locations.swish_examples,\n *            ...\n * ```\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('config',[ \"jquery\" ],\n       function($) {\nvar KEY = \"SWISHCONFIG\";\n\n/* Configuration of various server components.  We provide\n   defaults for the case that these files are served from\n   a non-Prolog server.\n*/\n\nvar config;\n\nfunction getCachedConfig() {\n  if ( typeof(Storage) !== \"undefined\" && window.swish.config_hash ) {\n    var str;\n\n    if ( (str = localStorage.getItem(KEY)) ) {\n      value = JSON.parse(str);\n      if ( value.hash == window.swish.config_hash )\n\treturn value.config;\n    }\n  }\n}\n\nfunction setCachedConfig(config) {\n  if ( typeof(Storage) !== \"undefined\" && window.swish.config_hash ) {\n    localStorage.setItem(KEY, JSON.stringify(\n      { hash: window.swish.config_hash,\n        config: config\n      }));\n  }\n}\n\nif ( !config ) {\n  if ( !(config = getCachedConfig()) ) {\n    $.ajax(\"swish_config.json\",\n\t   { dataType: \"json\",\n\t     async: false,\n\t     success: function(data) {\n\t       config = data;\n\t       setCachedConfig(config);\n\t     },\n\t     error: function() {\n\t       alert(\"Failed to fetch configuration from server\");\n\t     }\n\t   });\n  }\n}\n\nreturn config;\n});\n\n\n\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * Manage persistent data such as preferences.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n */\n\ndefine('preferences',[\"jquery\"],\n       function($) {\n  var hasLocalStore = (typeof(Storage) !== \"undefined\");\n  var defaults = {};\n  var inform = {};\n\n  var preferences = {\n    /**\n     * @returns {Boolean} indicating whether persistent storage is\n     * supported.\n     */\n    persistent: function() {\n      return hasLocalStore;\n    },\n\n    /**\n     * Store that we do not want to see info dialogue with a given\n     * identifier again.\n     * @param {String} id\n     */\n    setNotAgain: function(id) {\n      if ( hasLocalStore ) {\n\tvar data = readNotAgain();\n\n\tif ( data.indexOf(id) < 0 ) {\n\t  data.push(id);\n\t  localStorage.setItem(\"notagain\", JSON.stringify(data));\n\t}\n      }\n    },\n\n    /**\n     * @returns {Boolean} `true` if the user choose not to see this\n     * dialogue again\n     * @param {String} id identifier to test\n     */\n    notagain: function(id) {\n      if ( hasLocalStore ) {\n\tvar data = readNotAgain();\n\treturn data.indexOf(id) >= 0;\n      }\n      return false;\n    },\n\n    /**\n     * Broadcast the change of a preference.\n     */\n    broadcast: function(name, value) {\n      var sel;\n\n      if ( inform.name == undefined )\n\tsel = \".swish-event-receiver\";\n      else if ( inform.name == null )\n\treturn;\n      else\n\tsel = inform.name;\n\n      $(sel).trigger(\"preference\", { name: name, value: value });\n    },\n\n    /**\n     * Set the value of a preference and broadcast it.\n     * FIXME: we should only broadcast if the value has changed.\n     * @param {String} name describes the name of the preference\n     * @param {Any} value describes the value.  Values are stored\n     * using JSON serialization.\n     */\n    setVal: function(name, value) {\n      if ( hasLocalStore ) {\n\tlocalStorage.setItem(name, JSON.stringify(value));\n      }\n      this.broadcast(name, value);\n    },\n\n    /**\n     * @param {String} name describes the name of the preference\n     * @param {Any} value describes the default value.\n     */\n    setDefault: function(name, value) {\n      defaults[name] = value;\n    },\n\n    /**\n     * @param {String} name describes the name of the preference\n     * @param {String} jQuery selector for elements to inform.  If\n     * `null`, nobody is informed.\n     */\n    setInform: function(name, value) {\n      inform[name] = value;\n    },\n\n    /**\n     * @param {String} name describes the name of the preference\n     */\n    getVal: function(name) {\n      if ( hasLocalStore ) {\n\tvar str;\n\n\tif ( (str = localStorage.getItem(name)) ) {\n\t  value = JSON.parse(str);\n\t  return value;\n\t}\n      }\n      return defaults[name];\n    },\n\n    /**\n     * Set a preference value for a document.\n     */\n    setDocVal: function(docid, name, value) {\n      var prefs = preferences.getVal(docid)||{};\n      prefs[name] = value;\n      preferences.setVal(docid, prefs);\n    },\n\n    /**\n     * Get a preference value for a document.\n     */\n    getDocVal: function(docid, name, def) {\n      var prefs = preferences.getVal(docid)||{};\n      return prefs[name] === undefined ? def : prefs[name];\n    }\n  }\n\n  function readNotAgain() {\n    var str = localStorage.getItem(\"notagain\") || \"[]\";\n    var notagain;\n\n    try {\n      data = JSON.parse(str);\n      if ( typeof(data) != \"object\" )\n\tdata = [];\n    } catch(err) {\n      data = [];\n    }\n\n    return data;\n  }\n\n  return preferences;\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2016, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * Manage hyper links.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n */\n\ndefine('links',[\"jquery\", \"config\", \"modal\"],\n       function($, config, modal) {\n\n  var functions = {\n    /** Decode a PlDoc specification and, if valid, open the\n     * corresponding documentation.\n     * @arg {String} from The PlDoc specification.  Accepted if it\n     * is of the form `[.*:].*[/]/?\\d+`\n     * @return Boolean `true` if the string was recognised\n     */\n    PlDoc: function(from, ev) {\n      function parsePred(s) {\n\tvar pred = {};\n\tvar i;\n\n\tif ( (i=s.indexOf(\":\")) > 0 ) {\n\t  pred.module = s.substring(0,i);\n\t  s = s.slice(i+1);\n\t}\n\tif ( (i=s.indexOf(\"/\")) > 0 ) {\n\t  pred.name = s.substring(0,i);\n\t  if ( s.charAt(i+1) == '/' )\t/* name//arity is a non-terminal */\n\t    pred.arity = parseInt(s.slice(i+2))+2;\n\t  else\n\t    pred.arity = parseInt(s.slice(i+1));\n\n\t  if ( !isNaN(pred.arity) )\n\t    return pred;\n\t}\n      }\n\n      if ( from ) {\n\tvar pred = parsePred(decodeURIComponent(from));\n\n\tif ( pred ) {\n\t  $(ev.target).closest(\"#ajaxModal\").modal('hide');\n\t  $(\".swish-event-receiver\").trigger(\"pldoc\", pred);\n\t  ev.preventDefault();\n\n\t  return true;\n\t}\n      }\n\n      return false;\n    },\n\n    /**\n     * Run a link that refers to a cell. Such a link has a\n     * `data-query=name` attribute and optionally a number of\n     * `data-Var=Value` attributes. Because attributes are\n     * case-insensitive, `Var` is matched case-insensitive against\n     * variables from the query.\n     */\n    runQueryLink: function(a, ev) {\n      var nb    = a.closest(\".notebook\");\n      var qname = a.data(\"query\");\n      var cell  = nb.find('.nb-cell[name=\"'+qname+'\"]');\n\n      if ( cell ) {\n\tvar vars = $().prologEditor('variables', cell.nbCell('text'), true);\n\tvar bindings = \"\";\n\tvar options  = {};\n\tvar novars   = [];\n\n\tfunction isVar(k) {\n\t  for(var i=0; i<vars.length; i++) {\n\t    if ( vars[i].toLowerCase() == k.toLowerCase() )\n\t      return vars[i];\n\t  }\n\t  novars.push(k);\n\t}\n\n\t$.each(a.data(), function(k, v) {\n\t  var vr;\n\n\t  if ( k !== 'query' && (vr=isVar(k)) ) {\n\t    if ( bindings != \"\" )\n\t      bindings += \", \";\n\t    bindings += vr + \" = (\" + v + \")\";\n\t  }\n\t});\n\n\tif ( novars.length > 0 ) {\n\t  modal.feedback({\n\t    owner:    nb,\n\t    type:     \"warning\",\n\t    duration: 3000,\n\t    html:     \"The variables <b>\" + novars.join(\", \") + \"</b> do not appear in \" +\n\t\t      \"query <b>\" + qname + \"</b>\"\n\t  });\n\t}\n\n\tif ( bindings != \"\" )\n          options.bindings = bindings;\n\n\tcell.nbCell('run', options);\n      }\n    },\n\n    /**\n     * Follow a link from a markdown or HTML cell. This recognises links\n     * to internal SWISH objects and handles them using AJAX calls\n     * rather then opening a new page.  If the link is not recognised,\n     * it is opened on a new tab/page.  Recognised:\n     *\n     *  - class=\"store\" links open a gitty store element in a tab\n     *  - class=\"file\" links opens a file in a tab\n     *  - PlDoc links creates a modal dialog holding the documentation\n     *  - data-query=<query-name> runs a query.  data-<Var>=<Value>\n     *    binds variables.\n     *\n     * @param {Event} ev is the event to follow form\n     */\n    followLink: function(ev) {\n      var a = $(ev.target).closest(\"a\");\n      var done = false;\n\n      function accept() {\n\tdone = true;\n\tev.preventDefault();\n\n\t$(ev.target).closest(\"#ajaxModal\").modal('hide');\n      }\n\n      if ( a.attr(\"href\") ) {\n\tvar swishStore    = config.http.locations.swish + \"p/\";\n\tvar swishExamples = config.http.locations.swish + \"example/\";\n\tvar href\t  = a.attr(\"href\");\n\tvar modal;\n\n\tif ( href.startsWith(swishStore) && !href.match(/#/) ) {\n\t  accept();\n\t  file = href.slice(swishStore.length);\n\t  $(ev.target).closest(\".swish\").swish('playFile', file);\n\t} else if ( a.hasClass(\"store\") ) {\n\t  accept();\n\t  modal.alert(\"File does not appear to come from gitty store?\");\n\t} else if ( a.hasClass(\"file\") ||\n\t\t    (href.startsWith(swishExamples) && !href.match(/#/)) ) {\n\t  accept();\n\t  $(ev.target).closest(\".swish\")\n\t\t      .swish('playURL', {url: href});\n\t} else if ( a.hasClass(\"builtin\") && href.match(/predicate=/) ) {\n\t  done = functions.PlDoc(href.split(\"predicate=\").pop(), ev);\n\t} else if ( href.match(/object=/) ) {\n\t  done = functions.PlDoc(href.split(\"object=\").pop(), ev);\n\t} else if ( (modal=$(ev.target).closest(\"#ajaxModal\")).length == 1 &&\n\t\t    href.match(/#/) )\n\t{ var id = href.split(\"#\").pop();\n\t  var target;\n\n\t  if ( (target=modal.find(\"#\"+id)).length == 1 )\n\t  { done = true;\n\t    ev.preventDefault();\n\t    modal.animate({scrollTop: target.position().top}, 2000);\n\t  }\n\t}\n\n\tif ( !done ) {\n\t  ev.preventDefault();\n\t  window.open(href, '_blank');\n\t}\n      } else if ( a.data(\"query\") ) {\n\tfunctions.runQueryLink(a, ev);\n      }\n    }\n  }\n\n  return functions;\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * Small utilities\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n */\n\ndefine('utils',[\"jquery\"],\n       function($) {\n\n  var styles_loaded = [];\n\n  var utils = {\n    /**\n     * @param   {String} text is the text to be encoded\n     * @returns {String} HTML encoded version of text\n     */\n    htmlEncode: function(text) {\n      if ( !text ) return \"\";\n      return document.createElement('a')\n                     .appendChild(document.createTextNode(text))\n\t\t     .parentNode\n\t\t     .innerHTML;\n    },\n\n    /**\n     * @param {String} url is the style sheet to load\n     */\n     loadCSS: function(url) {\n      if ( styles_loaded.indexOf(url) == -1 ) {\n\tvar styles = document.createElement('link');\n\tstyles.rel = 'stylesheet';\n\tstyles.type = 'text/css';\n\tstyles.media = 'screen';\n\tstyles.href = url;\n\tdocument.getElementsByTagName('head')[0].appendChild(styles);\n\tstyles_loaded.push(url);\n      }\n    },\n\n    /**\n     * @returns {String} (random) UUID\n     */\n    generateUUID: function() {\n      var d = new Date().getTime();\n      var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n\t.replace(/[xy]/g, function(c) {\n\t  var r = (d + Math.random()*16)%16 | 0;\n\t  d = Math.floor(d/16);\n\t  return (c=='x' ? r : (r&0x7|0x8)).toString(16);\n\t});\n      return uuid;\n    },\n\n    flash: function(obj) {\n      obj.addClass(\"flash\");\n      setTimeout(function() { obj.removeClass(\"flash\"); }, 1500);\n    },\n\n    ago: function(time) {\n      var ago = ((new Date().getTime())/1000) - time;\n\n      if ( ago < 20  ) return \"just now\";\n      if ( ago < 60  ) return \"less then a minute ago\";\n      ago = Math.round(ago/60);\n      if ( ago < 120 ) return ago + \" minutes ago\";\n      ago = Math.round(ago/60);\n      if ( ago < 48 )  return ago + \" hours ago\";\n      ago = Math.round(ago/24);\n      if ( ago < 360 ) return ago + \" days ago\";\n      ago = Math.round(ago/365);\n      return ago + \" years ago\";\n    },\n\n    basename: function(path) {\n      return path ? path.split('/').pop() : null;\n    }\n  } // end of methods\n\n  if (typeof String.prototype.startsWith != 'function') {\n    String.prototype.startsWith = function(str) {\n      return this.lastIndexOf(str, 0) === 0;\n    };\n  }\n\n  return utils;\n});\n\n","// Laconic simplifies the generation of DOM content.\n(function(context) {\n\n  // properly-cased attribute names for IE setAttribute support\n  var attributeMap = {\n    'acceptcharset'     : 'acceptCharset',\n    'accesskey'         : 'accessKey',\n    'allowtransparency' : 'allowTransparency',\n    'bgcolor'           : 'bgColor',\n    'cellpadding'       : 'cellPadding',\n    'cellspacing'       : 'cellSpacing',\n    'class'             : 'className',\n    'classname'         : 'className',\n    'colspan'           : 'colSpan',\n    'csstext'           : 'style',\n    'defaultchecked'    : 'defaultChecked',\n    'defaultselected'   : 'defaultSelected',\n    'defaultvalue'      : 'defaultValue',\n    'for'               : 'htmlFor',\n    'frameborder'       : 'frameBorder',\n    'hspace'            : 'hSpace',\n    'htmlfor'           : 'htmlFor',\n    'longdesc'          : 'longDesc',\n    'maxlength'         : 'maxLength',\n    'marginwidth'       : 'marginWidth',\n    'marginheight'      : 'marginHeight',\n    'noresize'          : 'noResize',\n    'noshade'           : 'noShade',\n    'readonly'          : 'readOnly',\n    'rowspan'           : 'rowSpan',\n    'tabindex'          : 'tabIndex',\n    'valign'            : 'vAlign',\n    'vspace'            : 'vSpace'\n  };\n\n  // The laconic function serves as a generic method for generating\n  // DOM content, and also as a placeholder for helper functions.\n  //\n  // The first parameter MUST be a string specifying the element's \n  // tag name.  \n  // \n  // An optional object of element attributs may follow directly \n  // after the tag name.  \n  // \n  // Additional arguments will be considered children of the new \n  // element and may consist of elements, strings, or numbers.\n  // \n  // for example:\n  // laconic('div', {'class' : 'foo'}, 'bar');\n  function laconic() {\n\n    // create a new element of the requested type\n    var el = document.createElement(arguments[0]);\n    \n    // walk through the rest of the arguments\n    for(var i=1; i<arguments.length; i++) {\n      var arg = arguments[i];\n      if(arg === null || arg === undefined) continue;\n\n      // if the argument is a dom node, we simply append it\n      if(arg.nodeType === 1) {\n        el.appendChild(arg); \n      }\n\n      // if the argument is a string or a number, we append it as\n      // a new text node\n      else if(\n          (!!(arg === '' || (arg && arg.charCodeAt && arg.substr))) ||\n          (!!(arg === 0  || (arg && arg.toExponential && arg.toFixed)))) {\n\n        el.appendChild(document.createTextNode(arg));\n      }\n\n      // if the argument is a plain-old object, and we're processing the first \n      // argument, then we apply the object's values as element attributes\n      else if(i === 1 && typeof(arg) === 'object') {\n        for(var key in arg) {\n          if(arg.hasOwnProperty(key)) {\n            var value = arg[key];\n            if(value !== null && value !== undefined) {\n              key = key.toLowerCase();\n              key = attributeMap[key] || key;\n\n              // if the key represents an event (onclick, onchange, etc)\n              // we'll set the href to '#' if none is given, and we'll apply\n              // the attribute directly to the element for IE7 support.\n              var isEvent = key.charAt(0) === 'o' && key.charAt(1) === 'n';\n              if(isEvent) {\n                if(arg.href === undefined && key === 'onclick') {\n                  el.setAttribute('href', '#');\n                }\n                el[key] = value;\n              }\n\n              // if we're setting the style attribute, we may need to \n              // use the cssText property\n              else if(key === 'style' && el.style.setAttribute) {\n                el.style.setAttribute('cssText', value);\n              }\n\n              // if we're setting an attribute that's not properly supported \n              // by IE7's setAttribute implementation, then we apply the \n              // attribute directly to the element\n              else if(key === 'className' || key === 'htmlFor') {\n                el[key] = value;\n              }\n\n              // otherwise, we use the standard setAttribute\n              else {\n                el.setAttribute(key, value);\n              }\n            }\n          }\n        }\n      }\n\n      // if the argument is an array, we append each element\n      else if(Object.prototype.toString.call(arg) === '[object Array]') {\n        for(var j=0; j<arg.length; j++) {\n          var child = arg[j];\n          if(child.nodeType === 1) {\n            el.appendChild(child);\n          }\n        }\n      }\n    }\n\n    // Add an appendTo method to the newly created element, which will allow\n    // the DOM insertion to be method chained to the creation.  For example:\n    // $el.div('foo').appendTo(document.body);\n    el.appendTo = function(parentNode) {\n      if(parentNode.nodeType === 1 && this.nodeType === 1) {\n        parentNode.appendChild(this);\n      }\n      return this;\n    };\n    \n    return el;\n  }\n\n  // registers a new 'tag' that can be used to automate\n  // the creation of a known element hierarchy\n  laconic.registerElement= function(name, renderer) {\n    if(!laconic[name]) {\n      laconic[name] = function() {\n        var el = laconic('div', {'class' : name});\n        renderer.apply(el, Array.prototype.slice.call(arguments));\n        return el;\n      };\n    }\n  };\n\n  // html 4 tags \n  var deprecatedTags = ['acronym', 'applet', 'basefont', 'big', 'center', 'dir',\n    'font', 'frame', 'frameset', 'noframes', 'strike', 'tt', 'u', 'xmp'];\n\n  // html 5 tags\n  var tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b',\n    'base', 'bdo', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption',\n    'cite', 'code', 'col', 'colgroup', 'command', 'datalist', 'dd', 'del',\n    'details', 'dfn', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset',\n    'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5',\n    'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img',\n    'input', 'ins', 'keygen', 'kbd', 'label', 'legend', 'li', 'link', 'map',\n    'mark', 'menu', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol',\n    'optgroup', 'option', 'output', 'p', 'picture', 'param', 'pre', 'progress', \n    'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', \n    'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', \n    'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title',\n    'tr', 'ul', 'var', 'video', 'wbr'].concat(deprecatedTags);\n\n  // add our tag methods to the laconic object \n  var makeApply = function(tagName) {\n    return function() {\n      return laconic.apply(this, \n        [tagName].concat(Array.prototype.slice.call(arguments)));\n    };\n  };\n\n  for(var i=0; i<tags.length; i++) {\n    laconic[tags[i]] = makeApply(tags[i]);\n  }\n\n  // If we're in a CommonJS environment, we export our laconic methods\n  if(typeof module !== 'undefined' && module.exports) {\n    module.exports = laconic;\n  } \n\n  // otherwise, we attach them to the top level $.el namespace\n  else {\n    var dollar = context.$ || {};\n    dollar.el = laconic;\n    context.$ = dollar;\n  }\n}(this));\n\ndefine(\"laconic\", [\"jquery\"], function(){});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2018, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Provide version and release info\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('version',[ \"jquery\", \"config\", \"utils\", \"laconic\" ],\n       function($, config, utils) {\n\n(function($) {\n  var pluginName = 'version';\n\n  /** @lends $.fn.version */\n  var methods = {\n    _init: function(options) {\n      options = options||{};\n\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\t\t\t/* private data */\n\n\tif ( config.http.locations.versions ) {\n\t  elem.append($.el.div({class:\"version\"},\n\t\t\t       $.el.div({class:\"v-swish\"}),\n\t\t\t       $.el.div({class:\"v-changelog\"},\n\t\t\t\t\t$.el.table()),\n\t\t\t       $.el.div({class:\"v-prolog\"})));\n\n\t  elem[pluginName]('update');\n\t  if ( options.commit )\n\t    elem[pluginName]('changelog', options);\n\t}\n\n\telem.data(pluginName, data);\t/* store with element */\n      });\n    },\n\n    /**\n     * Update the SWISH and Prolog versions.\n     */\n    update: function() {\n      if ( config.http.locations.versions ) {\n\telem = this;\n\n\t$.get(config.http.locations.versions,\n\t      function(data) {\n\t\tif ( !data.swish || !data.prolog ) {\n\t\t  console.log(data);\n\t\t  return;\n\t\t}\n\n\t\tvar swishversion;\n\n\t\tif ( elem.hasClass(\"v-compact\") )\n\t\t  swishversion = $.el.a({title: \"View recent changes\"},\n\t\t\t\t\tdata.swish.version);\n\t\telse\n\t\t  swishversion = $.el.span(data.swish.version);\n\n\t\telem.find(\".v-swish\")\n\t\t    .append($.el.span($.el.a({class:\"v-product\",\n\t\t\t\t\t      href:\"https://swish.swi-prolog.org\"},\n\t\t\t\t\t     \"SWISH\"),\n\t\t\t\t      \" version \",\n\t\t\t\t      swishversion));\n\t\telem.find(\".v-prolog\")\n\t\t    .append($.el.span(\"Running on \",\n\t\t\t\t      $.el.a({class:\"v-product\",\n\t\t\t\t\t      href:\"http://www.swi-prolog.org/\"},\n\t\t\t\t\t     data.prolog.brand),\n\t\t\t\t      \" version \" +\n\t\t\t\t      data.prolog.version));\n\t\tif ( elem.hasClass(\"v-compact\") ) {\n\t\t  $(swishversion).on(\"click\", function(ev) {\n\t\t    if ( elem.hasClass(\"v-compact\") ) {\n\t\t      elem[pluginName]('versionDetails');\n\t\t      ev.preventDefault();\n\t\t      return false;\n\t\t    }\n\t\t  });\n\t\t}\n\t      });\n      }\n    },\n\n    versionDetails: function() {\n      var body = this.closest(\".modal-body\");\n\n      if ( body ) {\n\tthis.closest(\".modal-content\").find(\"h2\").html(\"SWISH ChangeLog\");\n\n\tthis.detach();\n\tbody.empty();\n\tbody.append(this);\n\tthis.removeClass(\"v-compact\");\n\tthis[pluginName]('changelog');\n      }\n    },\n\n    /**\n     * Get a changelog\n     */\n    changelog: function(options) {\n      var that = this;\n      options = options||{};\n      var params = {};\n\n      params.show = options.show || \"all\";\n      if ( options.commit ) {\n\tparams.commit = options.commit;\n      } else {\n\tparams.last = options.last || 20;\n      }\n\n      this.find(\".v-changelog > table\").html(\"\");\n      $.get(config.http.locations.changelog,\n\t    params,\n\t    function(data) {\n\n\t      for(var i=0; i<data.changelog.length; i++) {\n\t\tthat[pluginName]('addChange', data.changelog[i], i);\n\t      }\n\t    });\n    },\n\n    addChange: function(ch, i) {\n      var desc = $.el.td({class:\"v-description\", colspan:3});\n      $(desc).html(ch.message);\n\n      var cls = (i%2 == 0 ? \"even\" : \"odd\");\n\n      this.find(\".v-changelog > table\")\n\t  .append($.el.tr({class:\"v-change-header \"+cls},\n\t\t\t  $.el.td({class:\"v-author\"}, ch.author),\n\t\t\t  $.el.td({class:\"v-commit\"}, ch.commit.slice(0,7)),\n\t\t\t  $.el.td({class:\"v-date\"}, ch.committer_date_relative)),\n\t\t  $.el.tr({class:\"v-change-body \"+cls},\n\t\t\t  desc));\n    },\n\n    /**\n     * Check whether the server was updated since the last time we\n     * viewed the changes.\n     */\n    checkForUpdates: function() {\n      if ( !config.http.locations.versions )\n\treturn;\n\n      var str = localStorage.getItem(\"last-version\");\n\n      function saveCheckpoint(data) {\n\tvar last = { commit:data.commit, date: data.date };\n\tlocalStorage.setItem(\"last-version\", JSON.stringify(last));\n      }\n\n      if ( str && (last = JSON.parse(str)) && last.commit ) {\n\tvar title = \"SWISH updates since \" + utils.ago(last.date||0);\n\n\t$.get(config.http.locations.changes,\n\t      {commit:last.commit},\n\t      function(data) {\n\t\tif ( data.changes ) {\n\t\t  $(\"#swish-updates\")\n\t\t    .css(\"display\", \"inline-block\")\n\t\t    .attr(\"title\", \"SWISH has received \" +\n\t\t\t\t   data.changes + \" updates\\n\" +\n\t\t\t           \"Click for details\")\n\t\t    .on(\"click\", function(ev) {\n\t\t      $(ev.target).closest(\".swish\")\n\t\t\t          .swish('showUpdates',\n\t\t\t\t\t { title:  title,\n\t\t\t\t\t   commit: last.commit,\n\t\t\t\t\t   show:   \"tagged\"\n\t\t\t\t\t });\n\t\t      saveCheckpoint(data);\n\t\t      $(\"#swish-updates\").hide();\n\t\t    });\n\t\t}\n\t      });\n      } else {\n\t$.get(config.http.locations.changes,\n\t      function(data) {\n\t\tsaveCheckpoint(data);\n\t      });\n      }\n    }\n  }; // methods\n\n  /**\n   * <Class description>\n   *\n   * @class version\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.version = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Show modal windows\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('modal',[ \"jquery\", \"config\", \"preferences\", \"links\", \"form\", \"version\",\n\t \"laconic\", \"bootstrap\" ],\n       function($, config, preferences, links, form) {\n\n/* NOTE: form dependency is circular.  Form is initialized later. */\n\n(function($) {\n  var pluginName = 'swishModal';\n\n  /** @lends $.fn.modal */\n  var methods = {\n    /**\n     * Initialize the widget and listen for \"help\" events.\n     * @param {Object} options currently ignored\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\n\telem.addClass(\"swish-event-receiver\");\n\telem.on(\"help\", function(ev, data) {\n\t  elem.swishModal('showHelp', data);\n\t});\n\telem.on(\"pldoc\", function(ev, data) {\n\t  elem.swishModal('showPlDoc', data);\n\t});\n\telem.on(\"form\", function(ev, data) {\n\t  elem.swishModal('showForm', data);\n\t});\n\telem.on(\"dialog\", function(ev, data) {\n\t  elem.swishModal('show', data);\n\t});\n\telem.on(\"error\", function(ev, data) { /* still needed? */\n\t  elem.swishModal('show', data);\n\t});\n\telem.on(\"alert\", function(ev, str) {\n\t  var icon = \"<span class='glyphicon glyphicon-warning-sign'></span>\";\n\t  elem.swishModal('show', {title: icon, body:str});\n\t});\n\telem.on(\"ajaxError\", function(ev, jqXHR) {\n\t  elem.swishModal('showAjaxError', jqXHR);\n\t});\n\telem.on(\"feedback\", function(ev, options) {\n\t  elem.swishModal('feedback', options);\n\t});\n\telem.on(\"show\", function(ev, options) {\n\t  elem.swishModal('show', options);\n\t});\n\telem.on(\"server_form\", function(ev, options) {\n\t  elem.swishModal('server_form', options);\n\t});\n      });\n    },\n\n    /**\n     * Show a help file.  The help file is a normal HTML document.  The\n     * `<title>` element is used for the title, while the `<body>`\n     * carries the content of the help file.\n     * @param {Object} options\n     * @param {String} options.file file help file.\n     * @param {String} options.notagain Identifier to stop this dialog\n     */\n    showHelp: function(options) {\n      var that = this;\n\n      if ( options.notagain && preferences.notagain(options.notagain) )\n\treturn;\n\n      $.ajax({ url: config.http.locations.help + \"/\" + options.file,\n\t       dataType: \"html\",\n\t       success: function(data) {\n\t\t var container = $(\"<div>\");\n\t\t container.html(data);\n\t\t that.swishModal('show',\n\t\t\t\t $.extend(\n\t\t\t\t   { title: container.find(\"title\").text(),\n\t\t\t\t     body:  container\n\t\t\t\t   }, options));\n\t       }\n             });\n    },\n\n    /**\n     * Show a form.  The form is an HTML document.\n     * @param {Object} options\n     * @param {String} options.file file help file.\n     * @param {String} options.notagain Identifier to stop this dialog\n     */\n    showForm: function(options) {\n      var that = this;\n\n      $.ajax({ url: config.http.locations.form + \"/\" + options.file,\n\t       dataType: \"html\",\n\t       success: function(data) {\n\t\t var container = $(\"<div>\");\n\t\t container.html(data);\n\t\t that.swishModal('show',\n\t\t\t\t $.extend(\n\t\t\t\t   { title: container.find(\"legend\").text(),\n\t\t\t\t     body:  container\n\t\t\t\t   }, options));\n\t       }\n             });\n    },\n\n    /** Show PlDoc manual page\n     * @param {Object} options\n     * @param {String} options.name is the name of the predicate to show\n     * @param {String} options.arity arity of the predicate\n     * @param {String} [options.module] module of the predicate\n     */\n    showPlDoc: function(options) {\n      function docURL(options) {\n\tvar term = \"(\"+options.name+\")/\"+options.arity;\n\tif ( options.module )\t\t\t/* FIXME: must be valid Prolog term */\n\t  term = options.module+\":\"+term;\n\treturn   config.http.locations.pldoc_doc_for\n\t       + \"?header=false&object=\"\n\t       + encodeURIComponent(term);\n      }\n\n      function docBody(content, url) {\n\tcontent.parents(\"div.modal-dialog\").addClass(\"swish-embedded-manual\");\n\treturn \"<iframe class='swish-embedded-manual' \" +\n\t\t       \"onload='javascript:resizeIframe(this);' \" +\n                       \"src='\"+url+\"'>\" +\n\t       \"</iframe>\";\n      }\n\n      var data = { title: \"SWI-Prolog manual\",\n                   body:  function() {\n\t\t     return docBody(this, docURL(options))\n\t\t   }\n                 };\n\n      return this.swishModal('show', data);\n    },\n\n    /**\n     * Show a modal dialog.\n     * @param {Object} options\n     * @param {String} options.title HTML rendered as title\n     * @param {String|function} options.body  If this is a string the\n     * content is set using `$.html()`, else the function is called,\n     * where `this` refers to the jQuery content element and the\n     * function result is added to the content using `$.append()`.\n     * @param {String} options.notagain Identifier to stop this dialog\n     * showing\n     * @param {function} [options.onclose] If present, call this\n     * function if the modal window is closed.\n     */\n    show: function(options) {\n      var content = $.el.div({class:\"modal-body\"});\n      var title   = $.el.h2();\n      var md      = $.el.div({class:\"modal-content\"},\n\t\t\t     $.el.div({class:\"modal-header\"},\n\t\t\t\t      notAgain(options),\n\t\t\t\t      closeButton(),\n\t\t\t\t      title),\n\t\t\t     content);\n      var modalel = $.el.div({class:\"modal fade\", id:\"ajaxModal\",\n\t\t\t      tabindex:-1, role:\"dialog\"\n\t\t\t     },\n\t\t\t     $.el.div({class:\"modal-dialog\"},\n\t\t\t\t      md));\n      if ( options.notagain && preferences.persistent() ) {\n\t$(md).append($.el.div(\n\t  {class:\"modal-footer\"},\n\t  notAgain(options)));\n      }\n      content = $(content);\n      if ( typeof(options.body) == \"function\" ) {\n\tvar c = options.body.call(content);\n\tif ( c )\n\t  content.append(c);\n      } else {\n\tcontent.html(options.body);\n      }\n      $(title).html(options.title);\n      $(modalel).modal({show: true})\n\t\t.on(\"click\", \"a\", links.followLink)\n\t        .on(\"shown.bs.modal\", function() {\n\t\t   initTagsManagers();\n\t\t   // FIXME: should find a more structured way?\n\t\t   $(this).find(\".swish-versions\").version();\n\t\t })\n\t        .on(\"hidden.bs.modal\", function() {\n\t\t  if ( options.onclose )\n\t\t    options.onclose();\n\t\t  saveNotagain($(this));\n\t\t  $(this).remove();\n\t\t});\n\n      return this\n    },\n\n    /**\n     * Show a server-generated form and act on the buttons.\n     * @arg {Object} options\n     * @arg {String} options.url is the URL that generates the form\n     * content\n     * @arg {String} options.title sets the title of the form.\n     * @arg {Function} options.onreply is called after the form has\n     * been submitted.  `this` points at the submitting button and\n     * the first argument contains the server reply.\n     */\n\n    server_form: function(options) {\n      var modalel = $(this);\n\n      if ( form === undefined )\t\t\t/* circular dependency */\n\tform = require(\"form\");\n\n      return this.swishModal('show', {\n\ttitle: options.title,\n\tbody: function() {\n\t  elem = $(this);\n\t  $.ajax({ url: options.url,\n\t\t   data: options.data,\n\t\t   success: function(data) {\n\t\t     elem.append(data);\n\t\t   },\n\t\t   error: function(jqXHDR) {\n\t\t     modalel.swishModal('showAjaxError', jqXHDR);\n\t\t   }\n\t         });\n\n\t  elem.on(\"click\", \"button[data-action]\", function(ev) {\n\t    var formel = $(ev.target).closest(\"form\");\n\t    var data   = form.serializeAsObject(formel, true);\n\t    var button = $(ev.target).closest(\"button\");\n\n\t    if ( button.data(\"form_data\") == false ) {\n\t      $.ajax({ url: button.data(\"action\"),\n\t               success: function(obj) {\n\t\t\t button.closest(\".modal\").modal('hide');\n\t\t\t if ( options.onreply )\n\t\t\t   options.onreply.call(button[0], obj);\n\t\t\t ev.preventDefault();\n\t\t\t return false;\n\t\t       },\n\t\t       error: function(jqXHDR) {\n\t\t\t modalel.swishModal('showAjaxError', jqXHDR);\n\t\t       }\n\t      });\n\t    } else {\n\t      $.ajax({ url: button.data(\"action\"),\n\t\t       data: JSON.stringify(data),\n\t\t       dataType: \"json\",\n\t\t       contentType: \"application/json\",\n\t\t       type: \"POST\",\n\t\t       success: function(obj) {\n\t\t\t if ( obj.status == \"success\" ) {\n\t\t\t   button.closest(\".modal\").modal('hide');\n\t\t\t   if ( options.onreply )\n\t\t\t     options.onreply.call(button[0], obj);\n\t\t\t   ev.preventDefault();\n\t\t\t   return false;\n\t\t\t } else if ( obj.status == \"error\" ) {\n\t\t\t   form.formError(formel, obj.error);\n\t\t\t } else {\n\t\t\t   alert(\"Updated failed: \" +\n\t\t\t\t JSON.serializeAsObject(obj));\n\t\t\t }\n\t\t       },\n\t\t       error: function(jqXHDR) {\n\t\t\t modalel.swishModal('showAjaxError', jqXHDR);\n\t\t       }\n\t      });\n\t    }\n\n\t    ev.preventDefault();\n\t    return false;\n\t  });\n\t}\n      });\n    },\n\n    /**\n     * Display information about an ajax error\n     */\n    showAjaxError: function(jqXHR) {\n      var dom = $.el.div();\n\n      $(dom).html(jqXHR.responseText);\n      var h1 = $(dom).find(\"h1\");\n      var title = h1.text() || \"Server error\";\n      h1.remove();\n\n      var data = { title: title,\n\t\t   body: dom\n\t\t };\n\n      this.swishModal('show', data);\n    },\n\n    /**\n     * Display briefly a feedback message\n     * @param {Object} options\n     * @param {String} options.html defines the HTML content that is\n     * rendered.\n     * @param {Number} [options.duration=1500] number of milliseconds\n     * that the message is visible.\n     * @param {Object} [options.owner=$(\"body\")] is the DOM element to\n     * which the feedback window is added.\n     */\n    feedback: function(options) {\n      var win = $.el.div({class:\"feedback \"+options.type||\"\"});\n      $(win).html(options.html);\n\n      $(options.owner||\"body\").append(win);\n      setTimeout(function() {\n\t$(win).hide(400, function() {\n\t  $(win).remove();\n\t});\n      }, options.duration||1500);\n      return this;\n    }\n  }; // methods\n\n  function saveNotagain(elem) {\n    if ( !elem.hasClass(\"modal\") )\n      elem = elem.closest(\".modal\");\n\n    elem.find(\"[data-notagain]\")\n\t.each(function() {\n      if ( $(this).prop(\"checked\") ) {\n\tpreferences.setNotAgain($(this).attr(\"data-notagain\"));\n\treturn false;\n      }\n    });\n  }\n\n  function closeButton() {\n    var button = $.el.button({ type:\"button\", class:\"close\",\n\t\t\t       \"data-dismiss\":\"modal\"\n                             });\n    $(button)\n\t.html(\"&times;\")\n\t.on(\"click\", function(ev) {\n\t  ev.preventDefault();\n\t  saveNotagain($(ev.target));\n\t});\n\n    return button;\n  }\n\n  function notAgain(options) {\n    if ( options.notagain && preferences.persistent() ) {\n      return $.el.label($.el.input({ type:\"checkbox\",\n\t\t\t\t     'data-notagain':options.notagain,\n\t\t\t\t     name:\"dismiss\"\n\t\t\t\t   }),\n\t\t\t\" Don't show again!\");\n    } else {\n      return \"\";\n    }\n  }\n\n  /**\n   * Tags managers must be initialised after the DOM is complete.\n   * This cooperates with `tagInput()` from `form.js`\n   */\n  function initTagsManagers() {\n    var set = $(this).find(\".tm-input\");\n\n    set.each(function() {\n      var elem = $(this);\n      var tags = elem.data(\"prefilled\");\n      var options = {};\n\n      if ( tags ) options.prefilled = tags;\n\n      elem.tagsManager(options);\n    });\n  }\n\n  /**\n   * See http://stackoverflow.com/questions/9975810/make-iframe-automatically-adjust-height-according-to-the-contents-without-using\n   */\n  window.resizeIframe = function(iframe) {\n    iframe.style.height = 0;\n    iframe.style.height = iframe.contentWindow.document.body.scrollHeight+20\n                          + 'px';\n  }\n\n  /**\n   * This class is a small layer around bootstrap $.modal that isolates\n   * us from bootstrap and provides most of the intermediate divs\n   * needed to create a nice modal window.  In addition, it listens to\n   * `\"help\"` events.\n   *\n   * @class swishModal\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.swishModal = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n  var ntfid = 1;\n\n  return {\n    ajaxError: function(jqXHR) {\n      $(\".swish-event-receiver\").trigger(\"ajaxError\", jqXHR);\n    },\n    feedback: function(options) {\n      $(\".swish-event-receiver\").trigger(\"feedback\", options);\n    },\n    alert: function(options) {\n      $(\".swish-event-receiver\").trigger(\"alert\", options);\n    },\n    help: function(options) {\n      $(\".swish-event-receiver\").trigger(\"help\", options);\n    },\n    show: function(options) {\n      $(\".swish-event-receiver\").trigger(\"show\", options);\n    },\n    server_form: function(options) {\n      $(\".swish-event-receiver\").trigger(\"server_form\", options);\n    },\n\n    /**\n     * Provide a brief notification for an element, typically an\n     * icon or similar object.\n     *\n     * @param {Object} options\n     * @param {String} options.html provides the inner html of the message.\n     * @param {Number} [options.fadeIn=400] provide the fade in time.\n     * @param {Number} [options.fadeOut=400] provide the fade out time.\n     * @param {Number} [options.time=5000] provide the show time.  The\n     * value `0` prevents a timeout.\n     */\n    notify: function(elem, options) {\n      var id = \"ntf-\"+(options.wsid||ntfid++);\n\n      var div  = $.el.div({ class:\"notification notify-arrow\",\n\t\t\t    id:id\n\t\t\t  });\n      var epos = elem.offset();\n\n      $(\"body\").append(div);\n      if ( options.html )\n\t$(div).html(options.html);\n      else if ( options.dom )\n\t$(div).append(options.dom);\n\n      $(div).css({ left: epos.left+elem.width()-$(div).outerWidth()+15,\n\t\t   top:  epos.top+elem.height()+12\n\t\t })\n\t    .on(\"click\", function(){$(div).remove();})\n\t    .show(options.fadeIn||400);\n\n      if ( options.time !== 0 ) {\n\tvar time = options.time;\n\n\tif ( !time )\n\t  time = elem.hasClass(\"myself\") ? 1000 : 5000;\n\n\tsetTimeout(function() {\n\t  $(div).hide(options.fadeOut||400, function() {\n\t    $(\"#\"+id).remove();\n\t    if ( options.onremove )\n\t      options.onremove(options);\n\t    elem.chat('unnotify', options.wsid);\n\t  });\n\t}, time);\n      }\n    }\n  };\n});\n\n\n","/* ===================================================\n * tagmanager.js v3.0.1\n * http://welldonethings.com/tags/manager\n * ===================================================\n * Copyright 2012 Max Favilli\n *\n * Licensed under the Mozilla Public License, Version 2.0 You may not use this work except in compliance with the License.\n *\n * http://www.mozilla.org/MPL/2.0/\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n(function($) {\n\n    \"use strict\";\n\n    var defaults = {\n        prefilled: null,\n        CapitalizeFirstLetter: false,\n        preventSubmitOnEnter: true,     // deprecated\n        isClearInputOnEsc: true,        // deprecated\n        externalTagId: false,\n        prefillIdFieldName: 'Id',\n        prefillValueFieldName: 'Value',\n        AjaxPush: null,\n        AjaxPushAllTags: null,\n        AjaxPushParameters: null,\n        delimiters: [9, 13, 44],        // tab, enter, comma\n        backspace: [8],\n        maxTags: 0,\n        hiddenTagListName: null,        // deprecated\n        hiddenTagListId: null,          // deprecated\n        replace: true,\n        output: null,\n        deleteTagsOnBackspace: true,    // deprecated\n        tagsContainer: null,\n        tagCloseIcon: 'x',\n        tagClass: '',\n        validator: null,\n        onlyTagList: false,\n        tagList: null,\n        fillInputOnTagRemove: false\n    },\n\n    publicMethods = {\n        pushTag : function (tag, ignoreEvents, externalTagId) {\n            var $self = $(this), opts = $self.data('opts'), alreadyInList, tlisLowerCase, max, tagId,\n            tlis = $self.data(\"tlis\"), tlid = $self.data(\"tlid\"), idx, newTagId, newTagRemoveId, escaped,\n            html, $el, lastTagId, lastTagObj;\n\n            tag = privateMethods.trimTag(tag, opts.delimiterChars);\n\n            if (!tag || tag.length <= 0) { return; }\n\n            // check if restricted only to the tagList suggestions\n            if (opts.onlyTagList && undefined !== opts.tagList ){\n\n                //if the list has been updated by look pushed tag in the tagList. if not found return\n                if (opts.tagList){\n                    var $tagList = opts.tagList;\n\n                    // change each array item to lower case\n                    $.each($tagList, function(index, item) {\n                        $tagList[index] = item.toLowerCase();\n                    });\n                    var suggestion = $.inArray(tag.toLowerCase(), $tagList);\n\n                    if ( -1 === suggestion ) {\n                        //console.log(\"tag:\" + tag + \" not in tagList, not adding it\");\n                        return;\n                    } \n                }\n\n            }\n\n            if (opts.CapitalizeFirstLetter && tag.length > 1) {\n                tag = tag.charAt(0).toUpperCase() + tag.slice(1).toLowerCase();\n            }\n\n            // call the validator (if any) and do not let the tag pass if invalid\n            if (opts.validator && !opts.validator(tag)) {\n                $self.trigger('tm:invalid', tag)\n                return;\n            }\n\n            // dont accept new tags beyond the defined maximum\n            if (opts.maxTags > 0 && tlis.length >= opts.maxTags) { return; }\n\n            alreadyInList = false;\n            //use jQuery.map to make this work in IE8 (pure JS map is JS 1.6 but IE8 only supports JS 1.5)\n            tlisLowerCase = jQuery.map(tlis, function(elem) {\n                return elem.toLowerCase();\n            });\n\n            idx = $.inArray(tag.toLowerCase(), tlisLowerCase);\n\n            if (-1 !== idx) {\n                // console.log(\"tag:\" + tag + \" !!already in list!!\");\n                alreadyInList = true;\n            }\n\n            if (alreadyInList) {\n                $self.trigger('tm:duplicated', tag);\n                if (opts.blinkClass) {\n                    for (var i = 0; i < 6; ++i) {\n                        $(\"#\" + $self.data(\"tm_rndid\") + \"_\" + tlid[idx]).queue(function(next) {\n                            $(this).toggleClass(opts.blinkClass);\n                            next();\n                        }).delay(100);\n                    }\n                } else {\n                    $(\"#\" + $self.data(\"tm_rndid\") + \"_\" + tlid[idx]).stop()\n                        .animate({backgroundColor: opts.blinkBGColor_1}, 100)\n                        .animate({backgroundColor: opts.blinkBGColor_2}, 100)\n                        .animate({backgroundColor: opts.blinkBGColor_1}, 100)\n                        .animate({backgroundColor: opts.blinkBGColor_2}, 100)\n                        .animate({backgroundColor: opts.blinkBGColor_1}, 100)\n                        .animate({backgroundColor: opts.blinkBGColor_2}, 100);\n                }\n            } else {\n                if (opts.externalTagId === true) {\n                    if (externalTagId === undefined) {\n                        $.error('externalTagId is not passed for tag -' + tag);\n                    }\n                    tagId = externalTagId;\n                } else {\n                    max = Math.max.apply(null, tlid);\n                    max = max === -Infinity ? 0 : max;\n\n                    tagId = ++max;\n                }\n                if (!ignoreEvents) { $self.trigger('tm:pushing', [tag, tagId]); }\n                tlis.push(tag);\n                tlid.push(tagId);\n\n                if (!ignoreEvents)\n                    if (opts.AjaxPush !== null && opts.AjaxPushAllTags == null) {\n                        if ($.inArray(tag, opts.prefilled) === -1) {\n                            $.post(opts.AjaxPush, $.extend({tag: tag}, opts.AjaxPushParameters));\n                        }\n                    }\n\n                // console.log(\"tagList: \" + tlis);\n\n                newTagId = $self.data(\"tm_rndid\") + '_' + tagId;\n                newTagRemoveId = $self.data(\"tm_rndid\") + '_Remover_' + tagId;\n                escaped = $(\"<span/>\").text(tag).html();\n\n                html = '<span class=\"' + privateMethods.tagClasses.call($self) + '\" id=\"' + newTagId + '\">';\n                html+= '<span>' + escaped + '</span>';\n                html+= '<a href=\"#\" class=\"tm-tag-remove\" id=\"' + newTagRemoveId + '\" TagIdToRemove=\"' + tagId + '\">';\n                html+= opts.tagCloseIcon + '</a></span> ';\n                $el = $(html);\n\n                if (opts.tagsContainer !== null) {\n                    $(opts.tagsContainer).append($el);\n                } else {\n                    if (tlid.length > 1) {\n                        lastTagObj = $self.siblings(\"#\" + $self.data(\"tm_rndid\") + \"_\" + tlid[tlid.length - 2]);\n                        lastTagObj.after($el);\n                    } else {\n                        $self.before($el);\n                    }\n                }\n\n                $el.find(\"#\" + newTagRemoveId).on(\"click\", $self, function(e) {\n                    e.preventDefault();\n                    var TagIdToRemove = parseInt($(this).attr(\"TagIdToRemove\"));\n                    privateMethods.spliceTag.call($self, TagIdToRemove, e.data);\n                });\n\n                privateMethods.refreshHiddenTagList.call($self);\n\n                if (!ignoreEvents) { $self.trigger('tm:pushed', [tag, tagId]); }\n\n                privateMethods.showOrHide.call($self);\n                //if (tagManagerOptions.maxTags > 0 && tlis.length >= tagManagerOptions.maxTags) {\n                //  obj.hide();\n                //}\n            }\n            $self.val(\"\");\n        },\n\n        popTag : function () {\n            var $self = $(this), tagId, tagBeingRemoved,\n            tlis = $self.data(\"tlis\"),\n            tlid = $self.data(\"tlid\");\n\n            if (tlid.length > 0) {\n              tagId = tlid.pop();\n\n              tagBeingRemoved = tlis[tlis.length - 1];\n              $self.trigger('tm:popping', [tagBeingRemoved, tagId]);\n              tlis.pop();\n\n              // console.log(\"TagIdToRemove: \" + tagId);\n              $(\"#\" + $self.data(\"tm_rndid\") + \"_\" + tagId).remove();\n              privateMethods.refreshHiddenTagList.call($self);\n              $self.trigger('tm:popped', [tagBeingRemoved, tagId]);\n              // console.log(tlis);\n            }\n        },\n\n        empty : function() {\n            var $self = $(this), tlis = $self.data(\"tlis\"), tlid = $self.data(\"tlid\"), tagId;\n\n            while (tlid.length > 0) {\n                tagId = tlid.pop();\n                tlis.pop();\n                // console.log(\"TagIdToRemove: \" + tagId);\n                $(\"#\" + $self.data(\"tm_rndid\") + \"_\" + tagId).remove();\n                privateMethods.refreshHiddenTagList.call($self);\n                // console.log(tlis);\n            }\n            $self.trigger('tm:emptied', null);\n\n            privateMethods.showOrHide.call($self);\n            //if (tagManagerOptions.maxTags > 0 && tlis.length < tagManagerOptions.maxTags) {\n            //  obj.show();\n            //}\n        },\n\n        tags : function() {\n            var $self = this, tlis = $self.data(\"tlis\");\n            return tlis;\n        }\n    },\n\n    privateMethods = {\n        showOrHide : function () {\n            var $self = this, opts = $self.data('opts'), tlis = $self.data(\"tlis\");\n\n            if (opts.maxTags > 0 && tlis.length < opts.maxTags) {\n                $self.show();\n                $self.trigger('tm:show');\n            }\n\n            if (opts.maxTags > 0 && tlis.length >= opts.maxTags) {\n                $self.hide();\n                $self.trigger('tm:hide');\n            }\n        },\n\n        tagClasses : function () {\n            var $self = $(this), opts = $self.data('opts'), tagBaseClass = opts.tagBaseClass,\n            inputBaseClass = opts.inputBaseClass, cl;\n            // 1) default class (tm-tag)\n            cl = tagBaseClass;\n            // 2) interpolate from input class: tm-input-xxx --> tm-tag-xxx\n            if ($self.attr('class')) {\n                $.each($self.attr('class').split(' '), function (index, value) {\n                    if (value.indexOf(inputBaseClass + '-') !== -1) {\n                        cl += ' ' + tagBaseClass + value.substring(inputBaseClass.length);\n                    }\n                });\n            }\n            // 3) tags from tagClass option\n            cl += (opts.tagClass ? ' ' + opts.tagClass : '');\n            return cl;\n        },\n\n        trimTag : function (tag, delimiterChars) {\n            var i;\n            tag = $.trim(tag);\n            // truncate at the first delimiter char\n            i = 0;\n            for (i; i < tag.length; i++) {\n                if ($.inArray(tag.charCodeAt(i), delimiterChars) !== -1) { break; }\n            }\n            return tag.substring(0, i);\n        },\n\n        refreshHiddenTagList : function () {\n            var $self = $(this), tlis = $self.data(\"tlis\"), lhiddenTagList = $self.data(\"lhiddenTagList\");\n\n            if (lhiddenTagList) {\n                $(lhiddenTagList).val(tlis.join($self.data('opts').baseDelimiter)).change();\n            }\n\n            $self.trigger('tm:refresh', tlis.join($self.data('opts').baseDelimiter));\n        },\n\n        killEvent : function (e) {\n            e.cancelBubble = true;\n            e.returnValue = false;\n            e.stopPropagation();\n            e.preventDefault();\n        },\n\n        keyInArray : function (e, ary) {\n            return $.inArray(e.which, ary) !== -1;\n        },\n\n        applyDelimiter : function (e) {\n            var $self = $(this);\n            publicMethods.pushTag.call($self,$(this).val());\n            e.preventDefault();\n        },\n\n        prefill: function (pta) {\n            var $self = $(this);\n            var opts = $self.data('opts')\n            $.each(pta, function (key, val) {\n                if (opts.externalTagId === true) {\n                    publicMethods.pushTag.call($self, val[opts.prefillValueFieldName], true, val[opts.prefillIdFieldName]);\n                } else {\n                    publicMethods.pushTag.call($self, val, true);\n                }\n            });\n        },\n\n        pushAllTags : function (e, tag) {\n            var $self = $(this), opts = $self.data('opts'), tlis = $self.data(\"tlis\");\n            if (opts.AjaxPushAllTags) {\n                if (e.type !== 'tm:pushed' || $.inArray(tag, opts.prefilled) === -1) {\n                    $.post(opts.AjaxPush, $.extend({ tags: tlis.join(opts.baseDelimiter) }, opts.AjaxPushParameters));\n                }\n            }\n        },\n\n        spliceTag : function (tagId) {\n            var $self = this, tlis = $self.data(\"tlis\"), tlid = $self.data(\"tlid\"), idx = $.inArray(tagId, tlid),\n            tagBeingRemoved;\n\n            // console.log(\"TagIdToRemove: \" + tagId);\n            // console.log(\"position: \" + idx);\n\n            if (-1 !== idx) {\n                tagBeingRemoved = tlis[idx];\n                $self.trigger('tm:splicing', [tagBeingRemoved, tagId]);\n                $(\"#\" + $self.data(\"tm_rndid\") + \"_\" + tagId).remove();\n                tlis.splice(idx, 1);\n                tlid.splice(idx, 1);\n                privateMethods.refreshHiddenTagList.call($self);\n                $self.trigger('tm:spliced', [tagBeingRemoved, tagId]);\n                // console.log(tlis);\n            }\n\n            privateMethods.showOrHide.call($self);\n            //if (tagManagerOptions.maxTags > 0 && tlis.length < tagManagerOptions.maxTags) {\n            //  obj.show();\n            //}\n        },\n\n        init : function (options) {\n            var opts = $.extend({}, defaults, options), delimiters, keyNums;\n\n            opts.hiddenTagListName = (opts.hiddenTagListName === null)\n                ? 'hidden-' + this.attr('name')\n                : opts.hiddenTagListName;\n\n            delimiters = opts.delimeters || opts.delimiters; // 'delimeter' is deprecated\n            keyNums = [9, 13, 17, 18, 19, 37, 38, 39, 40]; // delimiter values to be handled as key codes\n            opts.delimiterChars = [];\n            opts.delimiterKeys = [];\n\n            $.each(delimiters, function (i, v) {\n                if ($.inArray(v, keyNums) !== -1) {\n                    opts.delimiterKeys.push(v);\n                } else {\n                    opts.delimiterChars.push(v);\n                }\n            });\n\n            opts.baseDelimiter = String.fromCharCode(opts.delimiterChars[0] || 44);\n            opts.tagBaseClass = 'tm-tag';\n            opts.inputBaseClass = 'tm-input';\n\n            if (!$.isFunction(opts.validator)) { opts.validator = null; }\n\n            this.each(function() {\n                var $self = $(this), hiddenObj ='', rndid ='', albet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\n                // prevent double-initialization of TagManager\n                if ($self.data('tagManager')) { return false; }\n                $self.data('tagManager', true);\n\n                for (var i = 0; i < 5; i++) {\n                  rndid += albet.charAt(Math.floor(Math.random() * albet.length));\n                }\n\n                $self.data(\"tm_rndid\", rndid);\n\n                // store instance-specific data in the DOM object\n                $self.data('opts',opts)\n                    .data('tlis', []) //list of string tags\n                    .data('tlid', []); //list of ID of the string tags\n\n                if (opts.output === null) {\n                    hiddenObj = $('<input/>', {\n                        type: 'hidden',\n                        name: opts.hiddenTagListName\n                    });\n                    $self.after(hiddenObj);\n                    $self.data(\"lhiddenTagList\", hiddenObj);\n                } else {\n                    $self.data(\"lhiddenTagList\", $(opts.output));\n                }\n\n                if (opts.AjaxPushAllTags) {\n                    $self.on('tm:spliced', privateMethods.pushAllTags);\n                    $self.on('tm:popped', privateMethods.pushAllTags);\n                    $self.on('tm:pushed', privateMethods.pushAllTags);\n                }\n\n                // hide popovers on focus and keypress events\n                $self.on('focus keypress', function(e) {\n                    if ($(this).popover) { $(this).popover('hide'); }\n                });\n\n                // handle ESC (keyup used for browser compatibility)\n                if (opts.isClearInputOnEsc) {\n                    $self.on('keyup', function(e) {\n                        if (e.which === 27) {\n                            // console.log('esc detected');\n                            $(this).val('');\n                            privateMethods.killEvent(e);\n                        }\n                    });\n                }\n\n                $self.on('keypress', function(e) {\n                    // push ASCII-based delimiters\n                    if (privateMethods.keyInArray(e, opts.delimiterChars)) {\n                        privateMethods.applyDelimiter.call($self, e);\n                    }\n                });\n\n                $self.on('keydown', function(e) {\n                    // disable ENTER\n                    if (e.which === 13) {\n                        if (opts.preventSubmitOnEnter) {\n                            privateMethods.killEvent(e);\n                        }\n                    }\n\n                    // push key-based delimiters (includes <enter> by default)\n                    if (privateMethods.keyInArray(e, opts.delimiterKeys)) {\n                        privateMethods.applyDelimiter.call($self, e);\n                    }\n                });\n\n                // BACKSPACE (keydown used for browser compatibility)\n                if (opts.deleteTagsOnBackspace) {\n                    $self.on('keydown', function(e) {\n                        if (privateMethods.keyInArray(e, opts.backspace)) {\n                            // console.log(\"backspace detected\");\n                            if ($(this).val().length <= 0) {\n                                publicMethods.popTag.call($self);\n                                privateMethods.killEvent(e);\n                            }\n                        }\n                    });\n                }\n\n                // on tag pop fill back the tag's content to the input field\n                if (opts.fillInputOnTagRemove) {\n                    $self.on('tm:popped', function(e, tag) {\n                        $(this).val(tag);\n                    });\n                }\n\n                $self.change(function(e) {\n                    if (!/webkit/.test(navigator.userAgent.toLowerCase())) {\n                        $self.focus();\n                    } // why?\n\n                    /* unimplemented mode to push tag on blur\n                     else if (tagManagerOptions.pushTagOnBlur) {\n                     console.log('change: pushTagOnBlur ' + tag);\n                     pushTag($(this).val());\n                     } */\n                    privateMethods.killEvent(e);\n                });\n\n                if (opts.prefilled !== null) {\n                    if (typeof (opts.prefilled) === \"object\") {\n                        privateMethods.prefill.call($self, opts.prefilled);\n                    } else if (typeof (opts.prefilled) === \"string\") {\n                        privateMethods.prefill.call($self, opts.prefilled.split(opts.baseDelimiter));\n                    } else if (typeof (opts.prefilled) === \"function\") {\n                        privateMethods.prefill.call($self, opts.prefilled());\n                    }\n                } else if (opts.output !== null) {\n                    if ($(opts.output) && $(opts.output).val()) { var existing_tags = $(opts.output); }\n                    privateMethods.prefill.call($self,$(opts.output).val().split(opts.baseDelimiter));\n                }\n\n            });\n\n            return this;\n        }\n    };\n\n    $.fn.tagsManager = function(method) {\n        var $self = $(this);\n\n        if (!(0 in this)) { return this; }\n\n        if ( publicMethods[method] ) {\n            return publicMethods[method].apply( $self, Array.prototype.slice.call(arguments, 1) );\n        } else if ( typeof method === 'object' || ! method ) {\n            return privateMethods.init.apply( this, arguments );\n        } else {\n            $.error( 'Method ' +  method + ' does not exist.' );\n            return false;\n        }\n    };\n\n}(jQuery));\n\ndefine(\"tagmanager\", [\"jquery\"], function(){});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2017, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * RequireJS module providing some general support methods for handling\n * forms and functions to build Bootstrap forms easily.\n *\n * @version 0.1.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('form',[ \"jquery\", \"config\", \"modal\", \"laconic\", \"tagmanager\" ],\n       function($, config, modal) {\n\n  var LABELWIDTH = 3;\n\n  var form = {\n    /**\n     * Serialize a form as an object. The following normalizations are\n     * performed:\n     *   - Form fields that have an empty string are ignored unless\n     *     `ignore_empty` is `true`\n     *   - The value from a `<input type=\"checkbox\">`is converted\n     *     into a JavaScript boolean.\n     *\t - The value of a tag-list is converted into a list of strings.\n     * @returns {Object} holding the name/value pairs of the form\n     */\n    serializeAsObject: function(form, ignore_empty) {\n      var arr = form.serializeArray();\n      var inset = [];\n      var obj = {};\n\n      // get arrays of checkboxes\n      form.find(\"div.checkboxes.array\").each(function() {\n\tvar elem = $(this);\n\tvar set = [];\n\n\telem.find(\"input:checked\").each(function() {\n\t  var name = $(this).attr(\"name\");\n\t  set.push(name);\n\t});\n\telem.find(\"input\").each(function() {\n\t  var name = $(this).attr(\"name\");\n\t  inset.push(name);\n\t});\n\n\tobj[elem.attr(\"name\")] = set;\n      });\n\n      for(var i=0; i<arr.length; i++) {\n\tvar name  = arr[i].name;\n\tvar value = arr[i].value;\n\tvar input = form.find('[name=\"'+name+'\"]');\n\tvar type  = input.prop(\"type\");\n\tvar jvalue;\n\n\tif ( (jvalue = input.data('json-value')) ) {\n\t  obj[name] = jvalue;\n\t} else if ( value != \"\" || ignore_empty == true ) {\n\t  // deal with tag lists\n\t  if ( type == \"hidden\" && name.indexOf(\"hidden-\") == 0 ) {\n\t    name = name.slice(\"hidden-\".length);\n\t    if ( obj[name] == undefined ) {\n\t      obj[name] = value.split(\",\");\n\t    } else {\n\t      obj[name] = value.split(\",\").concat(obj[name]);\n\t    }\n\t  } else if ( type == \"text\" && input.hasClass(\"tag-list\") ) {\n\t    if ( value != \"\" ) {\n\t      if ( obj[name] !== undefined )\n\t\tobj[name].push(value);\n\t      else\n\t\tobj[name] = [value];\n\t    }\n\t  } else if ( type == \"number\" ) {\n\t    obj[name] = parseInt(value);\n\t  } else if ( type == \"checkbox\" ) {\n\t    if ( inset.indexOf(name) == -1 )\n\t      obj[name] = (value == \"on\" ? true : false);\n\t  } else {\n\t    obj[name] = value;\n\t  }\n\t}\n      }\n\n      // unchecked checkboxes are not reported\n      form.find(\"[type=checkbox]\").each(function() {\n\tvar checkbox = $(this);\n\tvar name = checkbox.prop('name');\n\tif ( checkbox.prop(\"disabled\") != true &&\n\t     obj[name] === undefined &&\n\t     inset.indexOf(name) == -1 )\n\t  obj[name] = false;\n      });\n\n      return obj;\n    },\n\n    /**\n     * Provide feedback about problems with form elements\n     * @param form is the form to decorate\n     * @param error is a pengine error message created by lib/form.pl\n     */\n\n    formError: function(formel, error) {\n      formel.find(\".has-error\").removeClass(\"has-error\");\n      formel.find(\".help-block.with-errors\").remove();\n\n      if ( error ) {\n\tif ( error.code == \"form_error\" || error.code == \"input_error\" ) {\n\t  errors = error.data.split(\"\\n\");\n\t  for(var i=0; i<errors.length; i++) {\n\t    var el = errors[i].split(/:\\s*(.*)?/);\n\n\t    form.fieldError(formel, el[0], el[1]);\n\t  }\n\t} else\n\t{ modal.alert(error.data);\n\t}\n      }\n    },\n\n    fieldError: function(form, field, msg) {\n      var input = form.find(\"input[name=\"+field+\"]\");\n\n      if ( input.length > 0 ) {\n\tvar group = input.closest(\".form-group\");\n\n\tif ( input.parent().hasClass(\"input-group\") )\n\t  input = input.parent();\n\n\tgroup.addClass(\"has-error\");\n\tinput.after($.el.p({class:\"help-block with-errors\"}, msg));\n      } else\n      { alert(\"Missing value for \"+field);\n      }\n    },\n\n    showDialog: function(data) {\n      $(\".swish-event-receiver\").trigger(\"dialog\", data);\n    },\n\n    /**\n     * Invoke the central broadcasting of SWISH\n     * @param {String} event is the event name\n     * @param {any} [data] is the associated data\n     */\n    formBroadcast: function(event, data) {\n      $(\".swish-event-receiver\").trigger(event, data);\n    },\n\n    dyn_clear: function(form, onclear) {\n      form.find('.has-clear input[type=\"text\"]').on('input propertychange',\n\t\t\t\t\t\t    function() {\n\tvar $this = $(this);\n\tvar visible = Boolean($this.val());\n\t$this.siblings('.form-control-clear').toggleClass('hidden', !visible);\n      }).trigger('propertychange');\n\n      form.find('.form-control-clear').click(function() {\n\tvar input = $(this).siblings('input[type=\"text\"]');\n\tinput.val('').trigger('propertychange').focus();\n\tif ( onclear )\n\t  onclear.call(input);\n      });\n    },\n\n    fields: {\n      fileName: function(name, public, example, disabled) {\n\tvar labeltext;\n\tvar empty = \"(leave empty for generated random name)\"\n\tvar fork, input;\n\tvar community_examples = config.swish.community_examples && example != undefined;\n\n\tif ( community_examples )\n\t  labeltext = \"Public | Example | name\";\n\telse\n\t  labeltext = \"Public | name\";\n\n        var elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"name\", labeltext),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  $.el.div({class:\"input-group\"},\n\t\t\t\t   $.el.span({class:\"input-group-addon\",\n\t\t\t\t              title:\"If checked, other users can find this program\"\n\t\t\t\t             },\n\t\t\t\t\t     checkbox(\"public\",\n\t\t\t\t\t\t      { checked: public\n\t\t\t\t\t\t      })),\n\t\t\t\t   community_examples ?\n\t\t\t\t   $.el.span({class:\"input-group-addon\",\n\t\t\t\t              title:\"If checked, add to examples menu\"\n\t\t\t\t             },\n\t\t\t\t\t     checkbox(\"example\",\n\t\t\t\t\t\t      { checked: example\n\t\t\t\t\t\t      })) : undefined,\n\t\t\t   input = textInput(\"name\",\n\t\t\t\t\t     {placeholder:\"Name \" + empty,\n\t\t\t\t\t      title:\"Public name of your program\",\n\t\t\t\t\t      value:name,\n\t\t\t\t\t      disabled:disabled}),\n\t\t\t   name ?\n\t\t\t     fork = $.el.span({class:\"input-group-btn\"\n\t\t\t\t\t      },\n\t\t\t\t\t      $.el.button({ class: \"btn btn-success\",\n\t\t\t\t\t\t\t    type: \"button\"\n\t\t\t\t\t\t\t  }, \"Fork\")) : undefined\n\t\t\t\t  )));\n\n\tif ( fork ) {\n\t  $(fork).on(\"click\", function() {\n\t    var btn = $(input).closest(\"form\").find(\".btn.btn-primary\");\n\t    $(input).attr(\"placeholder\", \"Fork as \" + empty);\n\t    $(input).val(\"\");\n\t    btn.text(btn.text().replace(\"Update\", \"Fork\"));\n\t  });\n\t}\n\n\treturn elem;\n      },\n\n      title: function(title) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"title\", \"Title\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textInput(\"title\",\n\t\t\t\t    {placeholder:\"Descriptive title\",\n\t\t\t\t     value:title})));\n\treturn elem;\n      },\n\n      /**\n       * @param {String} [identity] if provided, this indicates that the\n       * author cannot be changed.\n       */\n      author: function(author, identity) {\n\tvar options = { placeholder:\"Your name\", value:author };\n\n\tif ( author && identity ) {\n\t  options.readonly = true;\n\t  options.title    = \"Verified author name\";\n\t}\n\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"author\", \"Author\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textInput(\"author\", options)));\n\treturn elem;\n      },\n\n      link: function(link) {\n\tvar options = {\n\t  readonly: true,\n\t  title: \"Permalink\",\n\t  value: link\n\t};\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"link\", \"Link\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textInput(\"link\", options)));\n\treturn elem;\n      },\n\n      date: function(stamp, labels, name) {\n\tname = name||label;\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(name, labels),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textInput(name,\n\t\t\t\t    {disabled: true,\n\t\t\t\t     value:new Date(stamp*1000).toLocaleString()\n\t\t\t\t    })));\n\treturn elem;\n      },\n\n      description: function(description) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"description\", \"Description\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textarea(\"description\", {value:description})));\n\treturn elem;\n      },\n\n      commit_message: function(msg) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"commit_message\", \"Changes\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textarea(\"commit_message\",\n\t\t\t\t   { value:msg,\n\t\t\t\t     placeholder:\"Describe your changes here\"\n\t\t\t\t   })));\n\treturn elem;\n      },\n\n      description: function(msg) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"description\", \"Description\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textarea(\"description\",\n\t\t\t\t   { value:msg,\n\t\t\t\t     placeholder:\"Description\"\n\t\t\t\t   })));\n\treturn elem;\n      },\n\n      tags: function(tags) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"tags\", \"Tags\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  tagInput(\"tags\", \"Tags help finding this code\", tags)));\n\treturn elem;\n      },\n\n      /**\n       * Provide checkboxes for determining who may save a new version\n       * of this file\n       */\n      modify: function(who, canmodify) {\n\tvar fields = [];\n\tvar opts = { name:\"modify\", label:\"Can save new version\",\n\t\t     type:\"array\"\n\t\t   };\n\n\tfunction add(key, label) {\n\t  fields.push({ name:key,\n\t\t\tlabel:label,\n\t\t\tvalue:who.indexOf(key) != -1,\n\t\t\treadonly: !canmodify\n\t\t      });\n\t}\n\n\tadd(\"any\",   \"Anyone\");\n\tadd(\"login\", \"Logged in users\");\n\tadd(\"owner\", \"Only me\");\n\n\tif ( !canmodify )\n\t  opts.title = \"Only logged in users and owners can set permissions\";\n\telse\n\t  opts.title = \"Specify who can save an updated version of this file\";\n\n\treturn form.fields.checkboxes(fields, opts);\n      },\n\n      follow: function(email) {\n\treturn form.fields.checkboxes(\n\t\t [ { name: \"follow\", label: \"Follow this document\",\n\t\t     value:!!email, readonly:!email\n\t\t   }\n\t\t ],\n\t\t { name:\"options\", label:\"\",\n\t\t   title: \"Notify about activity (updates, chat)\\n\"+\n\t\t\t  \"Requires being logged in with valid email\"\n\t\t });\n      },\n\n      projection: function(projection) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"projection\", \"Projection\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textInput(\"projection\",\n\t\t\t\t    {placeholder:\"Columns\", value:projection})));\n\treturn elem;\n      },\n\n      csvFormat: function(list, format) {\n\tvar elem;\n\n\tlist = list||[\"prolog\"];\n\tformat = format||list[0];\n\n\tif ( list.length == 1 ) {\n\t  elem = $.el.input({type:\"hidden\", name:\"format\", value:list[0]});\n\t} else {\n\t  elem = $.el.div({class:\"form-group\"},\n\t\t\t  label(\"format\", \"Format\"),\n\t\t\t  $.el.div({class:valgridw()},\n\t\t\t\t   select(\"format\",\n\t\t\t\t\t  list,\n\t\t\t\t\t  {value:format})));\n\t}\n\n\treturn elem;\n      },\n\n      /**\n       * Ask for limit and distinct to modify the solution set.\n       * @param {Number} [limit] is the max number of solutions to\n       * return\n       * @param {Boolean} [distinct] requests only to return distinct\n       * solutions.\n       */\n      limit: function(limit, distinct) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"name\", \"Distinct | limit\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  $.el.div({class:\"input-group\"},\n\t\t\t\t   $.el.span({class:\"input-group-addon\",\n\t\t\t\t              title:\"If checked only return distinct results\"\n\t\t\t\t             },\n\t\t\t\t\t     checkbox(\"distinct\",\n\t\t\t\t\t\t      { checked: distinct\n\t\t\t\t\t\t      })),\n\t\t\t\t   textInput(\"limit\",\n\t\t\t\t\t     {placeholder:\"Maximum result count (blank for unlimited)\",\n\t\t\t\t\t      title:\"Limit results\",\n\t\t\t\t\t      value:limit}))));\n\treturn elem;\n      },\n\n      /**\n       * @param {Array} boxes is a list of checkbox specifications.\n       * Uses .name, .label, .value (Boolean) and .readonly\n       */\n      checkboxes: function(boxes, options) {\n\tvar boxel;\n\n\toptions = $.extend({name:\"options\", label:\"Options\", col:LABELWIDTH},\n\t\t\t   options||{});\n\n\tvar dopts = { class: \"checkboxes col-xs-\"+(12-options.col),\n\t              name:  options.name\n\t\t    };\n\tif ( options.title ) dopts.title = options.title;\n\tif ( options.type  ) dopts.class += \" \"+options.type;\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(options.name, options.label, options.col),\n\t\t boxel = $.el.div(dopts));\n\n\tfor(var k=0; k<boxes.length; k++) {\n\t  var box = boxes[k];\n\t  var opts = {type: \"checkbox\", name:box.name, autocomplete:\"false\"};\n\t  if ( box.value )\n\t    opts.checked = \"checked\";\n\t  if ( box.readonly )\n\t    opts.disabled = \"disabled\";\n\t  $(boxel).append($.el.label({class:\"checkbox-inline\"},\n\t\t\t\t     $.el.input(opts), box.label));\n\t}\n\n\treturn elem;\n      },\n\n      chunk: function(value) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"count\", \"Initial solutions\", 3),\n\t\t $.el.div({class:\"col-xs-9\"},\n\t\t\t  $.el.div({class:\"input-group\"},\n\t\t\t\t   textInput(\"chunk\",\n\t\t\t\t\t     { title:\"Initial number of solutions\",\n\t\t\t\t\t       type:\"number\",\n\t\t\t\t\t       value:value}))));\n\treturn elem;\n      },\n\n      name: function(name, col) {\n\tcol = col||3;\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"name\", \"Name\", col),\n\t\t $.el.div({class:\"col-xs-\"+(12-col)},\n\t\t\t  textInput(\"name\",\n\t\t\t\t    {placeholder:\"Name\",\n\t\t\t\t     value:name})));\n\treturn elem;\n      },\n\n      filename: function(name, col) {\n\tcol = col||3;\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"filename\", \"File name\", col),\n\t\t $.el.div({class:\"col-xs-\"+(12-col)},\n\t\t\t  textInput(\"filename\",\n\t\t\t\t    {placeholder:\"File name\",\n\t\t\t\t     value:name})));\n\treturn elem;\n      },\n\n      hidden: function(name, value) {\n\tif ( value !== undefined )\n\t  return $.el.input({type:\"hidden\", name:name, value:value});\n      },\n\n      /**\n       * @param {Object} options\n       * @param {String} options.label is the label used for the\n       * primary button.\n       * @param {Function} options.action is called with two arguments,\n       * the _event_ and the serialized data from the embedded form\n       * @param {Number} options.offset determines the begin column in\n       * the grid (default 2)\n       */\n      buttons: function(options) {\n\toptions    = options||{};\n\tvar label  = options.label||\"Save program\";\n\tvar offset = options.offset||LABELWIDTH;\n\tvar button = $.el.button({ name:\"save\",\n\t\t\t\t   class:\"btn btn-primary\"\n\t\t\t\t },\n\t\t\t\t label);\n\n\t$(button).on(\"click\", function(ev) {\n\t  var elem = $(ev.target).parents(\"form\")[0];\n\t  var data = form.serializeAsObject($(elem));\n\n\t  options.action(ev, data);\n\t  $(ev.target).parents(\".modal\").modal('hide');\n\t  ev.preventDefault();\n\t  return false;\n\t});\n\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t $.el.div({class:\"col-xs-offset-\"+offset+\" col-xs-\"+(12-offset)},\n\t\t\t  button,\n\t\t\t  $.el.button({name:\"cancel\",\n\t\t\t\t       class:\"btn btn-danger\",\n\t\t\t\t       'data-dismiss':\"modal\"},\n\t\t\t\t      \"Cancel\")));\n\treturn elem;\n      },\n\n      /**\n       * Bootstrap radio button.  To get the value, use\n       * `$(\"label.active > input[name=Name]\").val();\n       * @param {String} name is the name of the radio button\n       * @param {Array(Object)} buttons is an array of objects with\n       * .active, .label and .value\n       */\n      radio: function(name, buttons, type) {\n\tvar elem = $.el.div({class:\"btn-group\", \"data-toggle\":\"buttons\"});\n\ttype = type||\"radio\"\n\n\tfor(var i=0; i<buttons.length; i++) {\n\t  var cls = \"btn btn-default btn-xs\";\n\t  if ( buttons[i].active )\n\t    cls += \" active\";\n\n\t  var opts = { type:type, name:name,\n\t               autocomplete:\"off\",\n\t\t       value:buttons[i].value\n\t\t     };\n\t  var lblopts = {class:cls};\n\t  if ( buttons[i].title )\n\t    lblopts.title = buttons[i].title;\n\t  $(elem).append($.el.label(lblopts,\n\t\t\t\t    $.el.input(opts),\n\t\t\t\t    buttons[i].label));\n\t}\n\n        return elem;\n      }\n    },\n\n    widgets: {\n      glyphIcon: function(glyph) {\n\treturn $.el.span({class:\"glyphicon glyphicon-\"+glyph});\n      },\n\n      typeIcon: function(type) {\n\treturn $.el.span({class:\"dropdown-icon type-icon \"+type});\n      },\n\n      glyphIconButton: function(glyph, options) {\n\tvar attrs = {class:\"btn\", type:\"button\"};\n\n\tif ( options.action ) attrs['data-action'] = options.action;\n\tif ( options.title )  attrs.title          = options.title;\n\tif ( options.class )  attrs.class\t  += \" \"+options.class;\n\n\treturn $.el.button(attrs, form.widgets.glyphIcon(glyph));\n      },\n\n      /**\n       * Turn an icon into a dropdown button.\n       * @param {Object} options\n       * @param {Any}\t options.client is the `this` for the menu\n       *\t\t functions.\n       * @param {String} [options.divClass] additional class for the\n       * returned `div` element\n       * @param {String} [options.ulClass] additional class for the\n       * `ul` element that defines the menu.\n       * @param {Object} [options.actions] defines the menu items.\n       * this is passed to populateMenu()\n       * @returns {DIV} the downdown button\n       */\n      dropdownButton: function(icon, options) {\n\tif ( !options ) options = {};\n\tvar cls     = options.divClass;\n\tvar ulClass = options.ulClass;\n\n\tvar dropdown = $.el.div(\n\t  {class: \"btn-group dropdown\"+(cls?\" \"+cls:\"\")},\n\t  $.el.button(\n\t    {class:\"dropdown-toggle\",\n\t     \"data-toggle\":\"dropdown\"},\n\t    icon),\n\t  $.el.ul({class:\"dropdown-menu\"+(ulClass?\" \"+ulClass:\"\")}));\n\n\tif ( options.actions )\n\t  form.widgets.populateMenu($(dropdown), options.client, options.actions);\n\n\treturn dropdown;\n      },\n\n      populateMenu: function(menu, client, actions) {\n\tvar ul = menu.find(\".dropdown-menu\");\n\tvar data = ul.data(\"menu\")||{};\n\n\tfunction runMenu(ev, a) {\n\t  var action = $(a).data('action');\n\n\t  if ( action )\n\t    action.call(client, a);\n\t}\n\n\tfunction addMenuItem(label, onclick) {\n\t  if ( onclick !== undefined ) {\n\t    if ( label.indexOf(\"--\") == 0 ) {\n\t      ul.append($.el.li({class:\"divider\"}));\n\t    } else {\n\t      var a = $.el.a(label);\n\n\t      $(a).data('action', onclick);\n\t      ul.append($.el.li(a));\n\t    }\n\t  }\n\t}\n\n\tfor(var a in actions) {\n\t  if ( actions.hasOwnProperty(a) ) {\n\t    addMenuItem(a, actions[a]);\n\t  }\n\t}\n\n\tif ( !data.bound ) {\n\t  data.bound = true;\n\t  ul.on(\"click\", \"a\", function(ev) { runMenu(ev, this); } );\n\t}\n\n\tul.data(\"menu\", data);\n\n\treturn menu;\n      }\n    }\n  };\n\n\t\t /*******************************\n\t\t *\t     FUNCTIONS\t\t*\n\t\t *******************************/\n\n  function valgridw(n) {\n    if ( n === undefined ) n = LABELWIDTH;\n    return \"col-xs-\"+(12-n);\n  }\n  function colgridw(n) {\n    if ( n === undefined ) n = LABELWIDTH;\n    return \"col-xs-\"+n;\n  }\n\n  function label(elemName, text, width) {\n    width = width || LABELWIDTH;\n    return $.el.label({class:\"control-label col-xs-\"+width+\"\", for:elemName}, text);\n  }\n\n  function checkbox(name, options) {\n    var attrs = {name:name, type:\"checkbox\"};\n    options = options||{};\n    if ( options.checked ) attrs.checked = \"checked\";\n    if ( options.title   ) attrs.title\t = options.title;\n    return $.el.input(attrs);\n  }\n\n  function textInput(name, options) {\n    var attrs = {name:name, type:\"text\", class:\"form-control\"};\n    options = options||{};\n    if ( options.placeholder ) attrs.placeholder = options.placeholder;\n    if ( options.title )       attrs.title       = options.title;\n    if ( options.value )       attrs.value       = options.value;\n    if ( options.disabled )    attrs.disabled    = options.disabled;\n    if ( options.readonly )    attrs.readonly    = options.readonly;\n    if ( options.type )        attrs.type        = options.type;\n    return $.el.input(attrs);\n  }\n\n  function tagInput(name, placeholder, tags) {\n    var attrs = { name:name, type:\"text\",\n                  class:\"tm-input tag-list\"\n                };\n    if ( placeholder ) attrs.placeholder = placeholder;\n    var elem = $.el.input(attrs);\n    if ( tags )\n      $(elem).data(\"prefilled\", tags);\n    return elem;\n  }\n\n  function helpBlock(help) {\n    return $.el.p({class:\"help-block\"},\n\t\t  \"Make saved file public and give it a meaningful name\");\n  }\n\n  function textarea(name, options) {\n    var attrs = {name:name, class:\"form-control\"};\n    options = options||{};\n\n    if ( options.placeholder ) attrs.placeholder = options.placeholder;\n\n    return $.el.textarea(attrs, options.value||\"\");\n  }\n\n  /**\n   * Create a bootstrap <select> element from a list of options\n   * @param {String} name is the name of the select element\n   * @param {Array} from is an array of options. Each options is a\n   * string or an object with keys `value` and `label`.\n   * @param {Object} [options]\n   * @param {Object} [options.value] If provided, the corresponding\n   * option is selected\n   */\n\n  function select(name, from, options) {\n    var select = $($.el.select({class:\"form-control\", name:name}));\n\n    options=options||{};\n\n    function addSelect(e) {\n      if ( typeof(e) == \"string\" ) {\n\tif ( e == options.value ) {\n\t  select.append($.el.option({selected:\"selected\"}, e));\n\t} else {\n\t  select.append($.el.option(e));\n\t}\n      } else {\n\tvar opts = {value:e.value};\n\tif ( e.value == options.value )\n\t  opts.selected = \"selected\";\n\n\tselect.append($.el.option(opts, e.label));\n      }\n    }\n\n    for(var i=0; i<from.length; i++)\n      addSelect(from[i]);\n\n    return select[0];\n  }\n\n  return form;\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2015-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * Manage application history. This file supports  two types of history:\n * plugin for the browser history  and  keep   track  of  issues such as\n * recently used files.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n */\n\ndefine('history',[\"jquery\", \"preferences\", \"form\", \"utils\"],\n       function($, preferences, form, utils) {\n  var history = {\n\n\t\t /*******************************\n\t\t *\t BROWSER HISTORY\t*\n\t\t *******************************/\n\n    /**\n     * Push a new entry to the browser history.  Since we have tabs,\n     * there isn't much reason for a back button.  We merely use the\n     * history to switch the location bar to the current document.\n     */\n    push: function(options) {\n      var cpath = window.location.pathname;\n\n      if ( cpath != options.url ) {\n\tvar state = {location: options.url, reason: options.reason};\n\n\twindow.history.pushState(state, \"\", options.url);\n\tdocument.title = \"SWISH -- \"\n                       + (options.url ? utils.basename(options.url)\n\t\t\t              : \"SWI-Prolog for SHaring\");\n      }\n    },\n\n    /**\n     * Restore a previous browser history state.  simply ignores.\n     * See push() for details.\n     */\n    pop: function(e) {\n    },\n\n\t\t /*******************************\n\t\t *\t  RECENT DOCUMENTS\t*\n\t\t *******************************/\n\n    recentMaxLength: 10,\n\n    /**\n     * Add/refresh document to list of recent documents.\n     * @param {Object} doc\n     * @param {String} doc.id is the document _identifier_\n     * @param {String} [doc.label] is the document label for\n     * the _Open recent_ menu.  Default is the `id`.\n     * @param {String} doc.type is the type of document.\n     * A document of a specific type is opened by calling\n     * `history.openRecent.type.call(event, doc)`\n     */\n\n    addRecent: function(doc) {\n      var recent = preferences.getVal(\"recentDocuments\")||[];\n\n      function equalDocument(d1, d2) {\n\treturn d1.type == d2.type && d1.id == d2.id;\n      }\n\n      for(var i=0; i<recent.length; i++) {\n\tif ( equalDocument(doc, recent[i]) ) {\n\t  recent.splice(i,1);\n\t  break;\n\t}\n      }\n      while ( recent.length+1 > history.recentMaxLength )\n\trecent.pop();\n      recent.splice(0,0,doc);\n\n      preferences.setVal(\"recentDocuments\", recent);\n    },\n\n    openRecent: function(ev, doc) {\n      return history.openRecent[doc.st_type](ev, doc);\n    },\n\n    /**\n     * Fill a (navbar) <ul> with <li><a> elements, where\n     * each <a> carries the related entry as `data('document')`\n     */\n    updateRecentUL: function() {\n      var ul = $(this);\n      var recent = preferences.getVal(\"recentDocuments\")||[];\n\n      ul.html(\"\");\n      for(var i=0; i<recent.length; i++) {\n\tvar e = recent[i];\n\n\tif ( e.id ) {\n\t  var a = $.el.a(form.widgets.typeIcon(e.id.split(\".\").pop()),\n\t\t\t e.label||e.id);\n\n\t  $(a).data('document', e);\n\t  ul.append($.el.li(a));\n\t}\n      }\n    }\n  };\n\n  /**\n   * Open recent \"gitty\" document\n   */\n  history.openRecent.gitty = function(ev, doc) {\n    $(ev.target).parents(\".swish\").swish('playFile', doc.id);\n  };\n\n  window.onpopstate = history.pop;\n\n  return history;\n});\n\n","/*  Part of SWISH\n\n    Author:        Anne Ogborn\n    E-mail:        annie66us@yahoo.com\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2018, Anne Ogborn\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n/**\n * @fileOverview\n * This file creates avatars from the SVG file icons/avatar.svg by\n * changing visibility and fill colors.  This is used in `chat.js`.\n *\n * @version 0.2.0\n * @author Anne Ogborn, annie66us@yahoo.com\n * @requires jquery\n */\ndefine('svgavatar',[\"jquery\", \"laconic\"],\n    function() {\n\n        (function($) {\n            var pluginName = 'svgavatar';\n\n            /** @lends $.fn.svgavatar */\n            var methods = {\n                _init: function(options) {\n                    return this.each(function() {\n                        var elem = $(this);\n                        var data = {}; /* private data */\n\n\n                        elem.data(pluginName, data); /* store with element */\n                    });\n                },\n\n                /**\n                 * @param {int} an integer from a range at least 0-2^20\n                 */\n                setAVappearanceByUserID: function(ID) {\n\t\t  return $(this).each(function() {\n\t\t    var _this = $(this);\n\n\t\t    var h = ID & 0x1FFFFF;\n\t\t    _this.svgavatar('selectAppearance', 'hair', h & 0x07);\n\t\t    _this.svgavatar('setFill', 'hair',\n\t\t\t\t    ['#000000', '#CC4400', '#FFFF22', '#9f220B'][(h >> 3) & 0x03]);\n\t\t    _this.svgavatar('selectAppearance', 'body', (h >> 5) & 0x03);\n\t\t    _this.svgavatar('setFill', 'body',\n\t\t\t\t    ['#95D155', '#19A6BA', '#F03C9B', '#0B061F'][(h >> 7) & 0x03]);\n\t\t    _this.svgavatar('selectAppearance', 'eyes', (h >> 9) & 0x07);\n\t\t    _this.svgavatar('selectAppearance', 'nose', (h >> 11) & 0x03);\n\t\t    _this.svgavatar('selectAppearance', 'mouth', (h >> 13) & 0x07);\n\t\t  });\n                },\n\n                selectAppearance: function(section, index) {\n\t\t  $(this).find('#' + section + ' g').css('display', 'none');\n\t\t  $(this).find('#' + section + ' g:nth-child(' + index + ')').css('display', 'inherit');\n                },\n\n                setFill: function(section, color) {\n\t\t  return $(this).each(function() {\n\t\t    $(this).find('#' + section + ' [fill]').attr('fill', color);\n\t\t  });\n                }\n            }; // methods\n\n                /**\n                 * <Class description>\n                 *\n                 * @class svgavatar\n                 * @tutorial jquery-doc\n                 * @memberOf $.fn\n                 * @param {String|Object} [method] Either a method name or the jQuery\n                 * plugin initialization object.\n                 * @param [...] Zero or more arguments passed to the jQuery `method`\n                 */\n\n                $.fn.svgavatar = function(method) {\n                    if (methods[method]) {\n                        return methods[method]\n                            .apply(this, Array.prototype.slice.call(arguments, 1));\n                    } else if (typeof method === 'object' || !method) {\n                        return methods._init.apply(this, arguments);\n                    } else {\n                        $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n                    }\n                };\n        }(jQuery));\n    });\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2016-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Deal with cooperation\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('chat',[ \"jquery\", \"config\", \"preferences\", \"form\", \"modal\", \"utils\",\n\t \"svgavatar\"\n       ],\n       function($, config, preferences, form, modal, utils) {\n\nvar MIN_RECONNECT_DELAY =  10000;\nvar MAX_RECONNECT_DELAY = 300000;\n\n(function($) {\n  var pluginName = 'chat';\n  var reconnect_delay = MIN_RECONNECT_DELAY;\n  var last_open = null;\n\n  /** @lends $.fn.chat */\n  var methods = {\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\t\t\t/* private data */\n\n\telem.data(pluginName, data);\t/* store with element */\n\n\t/* add event handling */\n\telem.on(\"click\", function(ev) {\n\t  var li = $(ev.target).closest(\"li.user\");\n\n\t  if ( li.length == 1 )\n\t    elem.chat('unnotify', li.attr(\"id\"));\n\t});\n\telem.on(\"send\", function(ev, msg) {\n\t  elem.chat('send', msg);\n\t});\n\t$(window).bind(\"beforeunload\", function() {\n\t  elem.chat('disconnect');\n\t});\n\n\t/* setup websocket */\n\tif ( config.swish.chat ) {\n\t  elem.chat('connect');\n\t}\n      });\n    },\n\n\t\t /*******************************\n\t\t *\t      WEBSOCKET\t\t*\n\t\t *******************************/\n\n    /**\n     * Create a websocket connection to /chat on the SWISH server.\n     */\n    connect: function() {\n      var elem = this;\n      var data = this.data(pluginName);\n      var url  = window.location.host + config.http.locations.swish_chat;\n      var lead = \"?\";\n      var ws = window.location.protocol.replace(\"http\", \"ws\");\n\n      if ( data.connection && data.connection.readyState != 3 )\n\treturn this;\t\t\t/* already connecting, open or closing */\n\n      function add_pref_param(name, pname) {\n\tvar value = preferences.getVal(pname);\n\n\tif ( value ) {\n\t  if ( pname == \"anon-avatar\" ) {\n\t    /* hack to deal with possibly rebased server */\n\t    if ( value.indexOf(\"#\") == -1 ) {\n\t      value = config.http.locations.avatar+value.split(\"/\").pop();\n\t    } else {\n\t      value = config.http.locations.swish+\"icons/\"+value.split(\"/\").pop();\n\t    }\n\t  }\n\n\t  url += lead + name + \"=\" + encodeURIComponent(value);\n\t  lead = \"&\";\n\t}\n      }\n\n      add_pref_param(\"avatar\",   \"anon-avatar\");\n      add_pref_param(\"nickname\", \"nick-name\");\n\n      if ( data.reconnect ) {\t\t\t/* reconnecting */\n\turl += lead + \"reconnect\" + \"=\" + encodeURIComponent(data.reconnect);\n\tlead = \"&\";\n      }\n\n      try {\n\tdata.connection = new WebSocket(ws + \"//\" + url,\n\t\t\t\t\t['v1.chat.swish.swi-prolog.org']);\n      } catch(err) {\n\telem.chat('userCount', undefined);\n\treturn;\n      }\n\n      data.connection.onerror = function(error) {\n\telem.chat('userCount', undefined);\n      };\n      data.connection.onclose = function(ev) {\n\tif ( last_open == null ) {\n\t  reconnect_delay *= 2;\n\t  if ( reconnect_delay > MAX_RECONNECT_DELAY )\n\t    reconnect_delay = MAX_RECONNECT_DELAY;\n\t} else {\n\t  if ( getTime() - last_open > 300000 )\n\t  { reconnect_delay = MIN_RECONNECT_DELAY;\n\t  } else\n\t  { reconnect_delay *= 2;\n\t    if ( reconnect_delay > MAX_RECONNECT_DELAY )\n\t      reconnect_delay = MAX_RECONNECT_DELAY;\n\t  }\n\t}\n\tsetTimeout(function() {\n\t  elem.chat('connect');\n\t}, reconnect_delay);\n      };\n      data.connection.onmessage = function(e) {\n\tvar msg = JSON.parse(e.data);\n\tmsg.origin = e.origin;\n\tif ( msg.type )\n\t  elem.chat(msg.type, msg);\n\telse\n\t  console.log(e);\n      };\n      data.connection.onopen = function() {\n      };\n    },\n\n    empty_queue: function() {\n      var data = this.data(pluginName);\n\n      while( data.queue &&\n\t     data.queue.length > 0\n\t     && data.connection.readyState == 1 ) {\n\tvar str = data.queue.shift();\n\tdata.connection.send(str);\n      }\n    },\n\n    disconnect: function() {\n      var data = this.data(pluginName);\n\n      if ( data.connection ) {\n\tthis.chat('send', {type: \"unload\"});\n\tdata.connection.onclose = function(){};\n\tdata.connection.close();\n\tdata.connection = undefined;\n      }\n\n      return this;\n    },\n\n\n\t\t /*******************************\n\t\t *\t   BASIC MESSAGES\t*\n\t\t *******************************/\n\n    /**\n     * @param {Object} msg is the JSON object to broadcast\n     */\n    send: function(msg) {\n      var data = this.data(pluginName);\n\n      if ( data && data.connection ) {\n\tvar str = JSON.stringify(msg);\n\n\tif ( data.connection.readyState != 1 ) {\n\t  if ( !data.queue )\n\t    data.queue = [str];\n\t  else\n\t    data.queue.push(str);\n\t  this.chat('connect');\n\t} else {\n\t  data.connection.send(str);\n\t}\n      }\n\n      return this;\n    },\n\n    subscribe: function(channel, sub_channel) {\n      var msg = { type: \"subscribe\", channel: channel };\n\n      if ( sub_channel )\n\tmsg.sub_channel = sub_channel;\n\n      this.chat('send', msg);\n    },\n\n    unsubscribe: function(channel, subchannel) {\n      var msg = { type: \"unsubscribe\", channel: channel };\n\n      if ( sub_channel )\n\tmsg.sub_channel = sub_channel;\n\n      this.chat('send', msg);\n    },\n\n\t\t /*******************************\n\t\t *\t      ACTIONS\t\t*\n\t\t *******************************/\n\n    /**\n     * The welcome message is sent by SWISH immediately after opening\n     * the websocket connection.  It provides the session UID for this\n     * user\n     */\n    welcome: function(e) {\n      var data = this.data(pluginName);\n\n      if ( data.wsid && data.wsid != e.wsid ) {\n\tthis.html(\"\");\t\t\t\t/* server restart? */\n      }\n\n      data.wsid = e.wsid;\n      data.reconnect = e.reconnect;\t\t/* reconnection token */\n      if ( e.avatar && e.avatar_source == 'generated' )\n\tpreferences.setVal(\"anon-avatar\", e.avatar);\n      e.role = \"self\";\n\n      var li = this.chat('addUser', e);\n      $(li).addClass(\"myself\");\n      this.chat('userCount', e.visitors);\n      last_open = getTime();\n\n      if ( e.check_login )\n\t$(\"#login\").login('update', \"check\");\n      else\n\t$(\".sourcelist\").trigger(\"login\");\n      $(\".storage\").storage('chat_status');\n      this.chat('empty_queue');\n    },\n\n    userCount: function(cnt) {\n      var elem = $(\"#user-count\");\n\n      if ( cnt == undefined ) {\n\telem.parent().hide();\n      } else {\n\telem.parent().show();\n\telem.text(cnt);\n      }\n    },\n\n    /**\n     * Replied when opening SWISH on a file to inform\n     * the new user about existing visitors to same\n     * files as are open in the current SWISH.  See\n     * inform_newby_about_existing_gazers/2.\n     */\n    gazers: function(e) {\n      if ( e.gazers ) {\n\tfor(var i=0; i<e.gazers.length; i++) {\n\t  var gazer = e.gazers[i];\n\t  this.chat('addUser', gazer);\n\t  if ( gazer.file )\n\t    this.chat('addUserFile', gazer.wsid, gazer.file);\n\t}\n      }\n    },\n\n    /**\n     * Replied if the profile associated with a visitor changes.  A\n     * key `reason` carries the reason for the change.\n     */\n\n    profile: function(e) {\n      var data = this.data(pluginName);\n      var li = $(\"#\"+e.wsid);\n\n      li.children(\"a\").html(\"\").append(avatar(e));\n      if ( e.avatar ) {\n\t$(\"*[data-userid=\"+e.wsid+\"] img.avatar\").attr(\"src\", e.avatar);\n\tif ( e.avatar_source == 'generated' )\n\t  preferences.setVal(\"anon-avatar\", e.avatar);\n      }\n\n      if ( e.name ) {\n\tli.prop('title', e.name);\n\tif ( e.reason == 'set-nick-name' ) {\n\t  e.html = \"Named <i>\"+utils.htmlEncode(e.name)+\"</i>\";\n\t  this.chat('notifyUser', e);\n\t}\n      }\n\n      if ( data.wsid == e.wsid ) {\t/* current user profile changed */\n\t$(\".sourcelist\").trigger(\"login\");\n      }\n    },\n\n    /**\n     * A user has rejoined. This is the case if we lost the\n     * connection and the connection was re-established.\n     */\n    rejoined: function(e) {\n      var avatars = $(\"#\"+e.wsid);\n\n      this.chat('lost', avatars, false);\n      if ( e.visitors )\n\tthis.chat('userCount', e.visitors);\n    },\n\n    /**\n     * A new user has joined.\n     */\n    joined: function(e) {\n      if ( e.visitors )\n\tthis.chat('userCount', e.visitors);\n    },\n\n    session_closed: function() {\n      $(\"#login\").login('update', \"session-closed\");\n    },\n\n    /**\n     * Display a notification by some user.\n     */\n    notify: function(e) {\n      this.chat('notifyUser', e);\n    },\n\n    /**\n     * Add incomming chat messages to the chatroom.  If there is no\n     * chatroom we should warn/open it\n     */\n    'chat-message': function(e) {\n      var rooms = $(\"div.chatroom\").chatroom('rooms', e.docid);\n\n      $(\".storage\").storage('chat_message', e);\n\n      if ( e.docid == \"gitty:\"+config.swish.hangout ) {\n\t$(\"#broadcast-bell\").chatbell('chat-message', e);\n      }\n\n      if ( rooms.length > 0 ) {\n\trooms.chatroom('add', e);\n\te.displayed = true;\n      } else {\n\tif ( $(\"#\"+e.user.id).length > 0 ) {\n\t  msg = $.extend({}, e);\n\t  msg.wsid = e.user.id;\n\t  msg.html = \"Wants to chat\";\n\t  this.chat('notifyUser', msg);\n\t}\n      }\n    },\n\n    /**\n     * Some action was forbidden\n     */\n\n     forbidden: function(e) {\n       modal.alert(e.message||\"Action is forbidden\");\n     },\n\n    /**\n     * Indicate we have read all messages upto a certain time stamp.\n     * @param {String} docid is the document id for which we should\n     * update the counter.\n     * @param {Number} time is the time of the last message read\n     * (seconds after 1/1/1970)\n     */\n    read_until: function(docid, time) {\n      preferences.setDocVal(docid, 'chatBar', time);\n    },\n\n\n\t\t /*******************************\n\t\t *\t        UI\t\t*\n\t\t *******************************/\n\n    /**\n     * Get the broadcast room\n     */\n     broadcast_room: function() {\n      return this.closest(\".swish\")\n                 .find(\".storage\")\n                 .storage('match', {file:config.swish.hangout});\n    },\n\n    /**\n     * Present a notification associated with a user. We do not\n     * add a user icon for open and close on the broadcast room if\n     * we do not have this open when the message arrives.\n     */\n    notifyUser: function(options) {\n      var elem = this;\n\n      function isBroadcast(options) {\n\treturn ( ( options.event == 'opened' ||\n\t\t   options.event == 'closed' ) &&\n\t\t options.event_argv &&\n\t\t options.event_argv[0] == config.swish.hangout\n\t       );\n      }\n\n      if ( isBroadcast(options) && !this.chat('broadcast_room') )\n\toptions.create_user = false;\n\n      var user_li = this.chat('addUser', options);\n\n      if ( user_li && user_li.length > 0 ) {\n\toptions.onremove = function() {\n\t  elem.chat('unnotify', options.wsid);\n\t};\n\tmodal.notify(user_li, options);\n\n\tthis.chat('updateFiles', options);\n      }\n    },\n\n    unnotify: function(wsid) {\n      if ( $(\"#\"+wsid).hasClass(\"removed\") )\n\tthis.chat('removeUser', wsid);\n\n      return this;\n    },\n\n    updateFiles: function(options) {\n      var data = $(this).data(pluginName);\n\n      function file() {\n\treturn options.event_argv[0];\n      }\n\n      if ( options.event == \"opened\" ) {\n\tthis.chat('addUserFile', options.wsid, file());\n      } else if ( options.event == \"closed\" ) {\n\tvar wsid = options.wsid == data.wsid ? undefined : options.wsid;\n\tthis.chat('removeUserFile', wsid, file(), true);\n      }\n    },\n\n    /**\n     * Return or add a user to the notification area.\n     * @param {Object} options\n     * @param {String} options.wsid Identifier for the user (a UUID)\n     * @param {String} [options.name] is the name of the user\n     * @returns {jQuery} the `li` element representing the user\n     */\n    addUser: function(options) {\n      var li = $(\"#\"+options.wsid);\n\n      if ( li.length == 0 )\n      { if ( options.create_user != false ) {\n\t  li = $(li_user(options.wsid, options));\n\t  this.prepend(li);\n        } else {\n\t  return null;\n\t}\n      } else {\n\tthis.chat('lost', li, false);\n      }\n\n      return li;\n    },\n\n    /**\n     * Remove a user avatar.  If a notification is pending we delay\n     * removal until the notification times out\n     */\n    removeUser: function(wsid) {\n      if ( typeof wsid == \"string\" ) {\n\twsid = {wsid:wsid};\n      }\n\n      if ( wsid.visitors !== undefined )\n\tthis.chat('userCount', wsid.visitors);\n      var li = $(\"#\"+wsid.wsid);\n      if ( li.length == 0 )\n\treturn this;\n\n      if ( wsid.reason != \"close\" ) {\n\tif ( $(\"#ntf-\"+wsid.wsid).length > 0 )\t/* notification pending */\n\t  li.addClass(\"removed\");\n\telse\n\t  li.hide(400, function() {this.remove();});\n      } else {\t\t\t\t\t/* connection was lost */\n\tthis.chat('lost', li, true);\n      }\n\n      return this;\n    },\n\n    /**\n     * Set/clear lost-connection state of users.\n     * @param {jQuery} li set of items to set/clear\n     * @param {Boolean} lost is `true` if we lost the connection\n     */\n    lost: function(li, lost) {\n      if ( lost ) {\n\tli.addClass(\"lost\");\n      } else {\n\tli.removeClass(\"lost\");\n      }\n\n      li.each(function() {\n\tvar elem = $(this);\n\tif ( lost ) {\n\t  elem.data('lost-timer',\n\t\t    setTimeout(function() {\n\t\t      if ( li.hasClass(\"lost\") )\n\t\t\tli.remove();\n\t\t    }, 60000));\n\t} else {\n\t  var tmo = elem.data('lost-timer');\n\t  if ( tmo ) {\n\t    clearTimeout(tmo);\n\t    elem.data('lost-timer', undefined);\n\t  }\n\t}\n      });\n    },\n\n    /**\n     * Get info about a specific user.\n     * @param {Array} [fields] lists the keys we want to have in the\n     * user objects.  Default is all we have.\n     */\n    user_info: function(fields) {\n      var li = $(this);\n      var user = {};\n\n      if ( !fields || fields.indexOf('id') >= 0 ) {\n\tuser.id = li.attr(\"id\");\n      }\n      if ( !fields || fields.indexOf('name') >= 0 ) {\n\tvar name = li.prop(\"title\");\n\tif ( name && name !== \"Me\" )\n\t  user.name = name;\n      }\n      if ( !fields || fields.indexOf('avatar') >= 0 ) {\n\tuser.avatar = li.find(\"img.avatar\").attr(\"src\");\n      }\n\n      return user;\n    },\n\n    /**\n     * Get the set of visible users.  The return is an object holding\n     * a key `self` and a key `users` bound to an array of users.\n     * `self` points to the user of this browser.  Self always has\n     * all keys\n     */\n    users: function(fields) {\n      var users = [];\n      var rc = {users:users};\n\n      this.find(\"li.user[id]\").each(function() {\n\tvar elem = $(this);\n\tvar self = elem.hasClass(\"myself\");\n\tvar user = elem.chat('user_info', self ? undefined : fields);\n\n\tif ( self ) {\n\t  rc.self = $.extend({}, user);\n\t  user.is_self = true;\n\t}\n\n\tusers.push(user);\n      });\n\n      return rc;\n    },\n\n    /**\n     * Get info on the _self_ user.\n     */\n    self: function(fields) {\n      var li = this.find(\"li.user.myself[id]\");\n\n      return li.chat('user_info', fields);\n    },\n\n    /**\n     * Browser `wsid` has opened `file`\n     */\n    addUserFile: function(wsid, file) {\n      var li = $(\"#\"+wsid);\n      var ul = li.find(\"ul.dropdown-menu\");\n      var fli;\n\n      ul.find(\"li.file\").each(function() {\n\tif ( $(this).data(\"file\") == file ) {\n\t  fli = this;\n\t  return false;\n\t}\n      });\n\n      if ( fli == undefined ) {\n\tvar type = file.split(\".\").pop();\n\tul.append(\n\t  $.el.li({class:\"file\", \"data-file\":file, title:\"Shared file\"},\n\t\t  $.el.a($.el.span({class: \"dropdown-icon type-icon \"+type}),\n\t\t\t file)));\n      }\n\n      return this;\n    },\n\n    /**\n     * Remove a file associated with the user wsid.\n     * @param {String} [wsid] User for which to remove file.  If\n     * `undefined`, remove file for all users.\n     * @param {Boolean} [user_too] if `true', remove the user if\n     * the set of files becomes empty and this is not `myself`.\n     */\n    removeUserFile: function(wsid, file, user_too) {\n      var elem = this;\n\n      function removeFile(user_li) {\n\tvar ul = user_li.children(\"ul.dropdown-menu\");\n\n\tul.find(\"li.file\").each(function() {\n\t  if ( $(this).data(\"file\") == file ) {\n\t    $(this).remove();\n\t    if ( user_too &&\n\t\t !user_li.hasClass(\"myself\") &&\n\t\t ul.find(\"li.file\").length == 0 )\n\t      elem.chat('removeUser', user_li.attr(\"id\"));\n\t    return false;\n\t  }\n\t});\n      }\n\n      if ( wsid ) {\n\tremoveFile($(\"#\"+wsid));\n      } else {\n\tthis.children().each(function() {\n\t  removeFile($(this), file, user_too);\n\t});\n      }\n    }\n  }; // methods\n\n  // Private functions\n\n  /**\n   * Add an entry for a user to the notification area\n   */\n  function li_user(id, options) {\n    options = options||{};\n    var ul;\n    var a;\n    var name = options.name;\n\n    if ( !name && options.role == \"self\" )\n      name = \"Me\";\n    if ( !name )\n      name = id;\n\n    var li = $.el.li({class:\"dropdown user\", id:id, title:name},\n\t\t   a=$.el.a({ class:\"dropdown-toggle avatar\",\n\t\t\t      'data-toggle':\"dropdown\"\n\t\t\t    },\n\t\t\t    avatar(options)),\n\t\t  ul=$.el.ul({ class:\"dropdown-menu pull-right\",\n\t\t\t       title:\"\"\n\t\t\t     }));\n\n    if ( options.role == \"self\" ) {\n      $(a).append($.el.b({class:\"caret\"}));\n\n      var input = $.el.input({ type:\"text\",\n\t\t\t       placeholder:\"Nick name\",\n\t\t\t       value:options.name||\"\",\n\t\t\t       title:\"Nick name\"\n\t\t\t     });\n      ul.append($.el.li(input));\n      $(input).keypress(function(ev) {\n\tif ( ev.which == 13 ) {\n\t  var name = $(input).val().trim();\n\n\t  if ( name != \"\" ) {\n\t    $(\"#chat\").trigger('send',\n\t\t\t       { type:'set-nick-name',\n\t\t\t\t name: name\n\t\t\t       });\n\t    preferences.setVal(\"nick-name\", name);\n\t  }\n\t  $(input).closest('.dropdown.open').removeClass('open');\n\t}\n      });\n\n      form.widgets.populateMenu($(li), $(\"#chat\"), {\n/*\t\"Chat ...\": function() {\n\t  this.chat('start_chat');\n\t}\n*/\n      });\n\n      ul.append($.el.li({class:\"divider\"}));\n    }\n\n    return li;\n  }\n\n  /**\n   * @return {Number} time since 1/1/1970 in milliseconds\n   */\n  function getTime() {\n    var d = new Date();\n    return d.getTime();\n  }\n\n  /**\n   * <Class description>\n   *\n   * @class chat\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.chat = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n  var svg_images = {};\n\n  function avatar(options) {\n    var img;\n\n    if ( options.avatar ) {\n      var m = /(.*\\.svg)#(\\d+)$/.exec(options.avatar);\n\n      if ( m && m[2] ) {\n\tvar id  = parseInt(m[2], 10);\n\tvar url = m[1];\n\n\timg = $.el.span({class:\"avatar svg\"});\n\tif ( svg_images[url] ) {\n\t  $(img).svg_images[url];\n\t  $(img).svgavatar('setAVappearanceByUserID', id);\n\t} else {\n\t  $.ajax({ url: options.avatar,\n\t\t   type: \"GET\",\n\t\t   dataType: \"text\",\n\t\t   success: function(reply) {\n\t\t     $(img).html(reply);\n\t\t     svg_images[url] = reply;\n\t\t     $(img).svgavatar('setAVappearanceByUserID', id);\n\t\t   },\n\t\t   error: function(jqXHR) {\n\t\t     modal.ajaxError(jqXHR);\n\t\t   }\n\t\t });\n\t}\n      } else {\n\timg = $.el.img({class:\"avatar\", src:options.avatar });\n      }\n    } else {\n      img = $.el.span({class:\"avatar glyphicon glyphicon-user\"})\n    }\n\n    return $.el.div({class:\"avatar-container\"}, img);\n  }\n\n  return {\n    avatar: avatar\n  };\n});\n\n","/*!\n * JQuery Spliter Plugin\n * Copyright (C) 2010-2013 Jakub Jankiewicz <http://jcubic.pl>\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n(function($, undefined) {\n    var count = 0;\n    var splitter_id = null;\n    var splitters = [];\n    var current_splitter = null;\n    $.fn.split = function(options) {\n        var data = this.data('splitter');\n        if (data) {\n            return data;\n        }\n        var panel_1;\n        var panel_2;\n        var settings = $.extend({\n            limit: 100,\n            orientation: 'horizontal',\n            position: '50%',\n            invisible: false,\n            onDragStart: $.noop,\n            onDragEnd: $.noop,\n            onDrag: $.noop\n        }, options || {});\n        this.settings = settings;\n        var cls;\n        var children = this.children();\n        if (settings.orientation == 'vertical') {\n            panel_1 = children.first().addClass('left_panel');\n            panel_2 = panel_1.next().addClass('right_panel');\n            cls = 'vsplitter';\n        } else if (settings.orientation == 'horizontal') {\n            panel_1 = children.first().addClass('top_panel')\n            panel_2 = panel_1.next().addClass('bottom_panel');\n            cls = 'hsplitter';\n        }\n        if (settings.invisible) {\n            cls += ' splitter-invisible';\n        }\n        var width = this.width();\n        var height = this.height();\n        var id = count++;\n        this.addClass('splitter_panel');\n        var splitter = $('<div/>').addClass(cls).bind('mouseenter touchstart', function() {\n            splitter_id = id;\n        }).bind('mouseleave touchend', function() {\n            splitter_id = null;\n        }).insertAfter(panel_1);\n        var position;\n\n        function get_position(position) {\n            if (typeof position === 'number') {\n                return position;\n            } else if (typeof position === 'string') {\n                var match = position.match(/^([0-9\\.]+)(px|%)$/);\n                if (match) {\n                    if (match[2] == 'px') {\n                        return +match[1];\n                    } else {\n                        if (settings.orientation == 'vertical') {\n                            return (width * +match[1]) / 100;\n                        } else if (settings.orientation == 'horizontal') {\n                            return (height * +match[1]) / 100;\n                        }\n                    }\n                } else {\n                    //throw position + ' is invalid value';\n                }\n            } else {\n                //throw 'position have invalid type';\n            }\n        }\n\n        var self = $.extend(this, {\n            refresh: function() {\n                var new_width = this.width();\n                var new_height = this.height();\n                if (width != new_width || height != new_height) {\n                    width = this.width();\n                    height = this.height();\n                    self.position(position);\n                }\n            },\n            position: (function() {\n                if (settings.orientation == 'vertical') {\n                    return function(n, silent) {\n                        if (n === undefined) {\n                            return position;\n                        } else {\n                            position = get_position(n);\n                            var sw = splitter.width();\n                            var sw2 = sw/2;\n                            if (settings.invisible) {\n                                var pw = panel_1.width(position).outerWidth();\n                                panel_2.width(self.width()-pw);\n                                splitter.css('left', pw-sw2);\n                            } else {\n                                var pw = panel_1.width(position-sw2).outerWidth();\n                                panel_2.width(self.width()-pw-sw);\n                                splitter.css('left', pw);\n                            }\n                        }\n                        if (!silent) {\n                            self.find('.splitter_panel').trigger('splitter.resize');\n                        }\n                        return self;\n                    };\n                } else if (settings.orientation == 'horizontal') {\n                    return function(n, silent) {\n                        if (n === undefined) {\n                            return position;\n                        } else {\n                            position = get_position(n);\n                            var sw = splitter.height();\n                            var sw2 = sw/2;\n                            if (settings.invisible) {\n                                var pw = panel_1.height(position).outerHeight();\n                                panel_2.height(self.height()-pw);\n                                splitter.css('top', pw-sw2);\n                            } else {\n                                var pw = panel_1.height(position-sw2).outerHeight();\n                                panel_2.height(self.height()-pw-sw);\n                                splitter.css('top', pw);\n                            }\n                        }\n                        if (!silent) {\n                            self.find('.splitter_panel').trigger('splitter.resize');\n                        }\n                        return self;\n                    };\n                } else {\n                    return $.noop;\n                }\n            })(),\n            orientation: settings.orientation,\n            limit: settings.limit,\n            isActive: function() {\n                return splitter_id === id;\n            },\n            destroy: function() {\n                self.removeClass('splitter_panel');\n                splitter.unbind('mouseenter');\n                splitter.unbind('mouseleave');\n                splitter.unbind('touchstart');\n                splitter.unbind('touchmove');\n                splitter.unbind('touchend');\n                splitter.unbind('touchleave');\n                splitter.unbind('touchcancel');\n                if (settings.orientation == 'vertical') {\n                    panel_1.removeClass('left_panel');\n                    panel_2.removeClass('right_panel');\n                } else if (settings.orientation == 'horizontal') {\n                    panel_1.removeClass('top_panel');\n                    panel_2.removeClass('bottom_panel');\n                }\n                self.unbind('splitter.resize');\n                self.find('.splitter_panel').trigger('splitter.resize');\n                splitters[id] = null;\n                splitter.remove();\n                var not_null = false;\n                for (var i=splitters.length; i--;) {\n                    if (splitters[i] !== null) {\n                        not_null = true;\n                        break;\n                    }\n                }\n                //remove document events when no splitters\n                if (!not_null) {\n                    $(document.documentElement).unbind('.splitter');\n                    $(window).unbind('resize.splitter');\n                    self.data('splitter', null);\n                    splitters = [];\n                    count = 0;\n                }\n            }\n        });\n        self.bind('splitter.resize', function(e) {\n            var pos = self.position();\n            if (self.orientation == 'vertical' &&\n                pos > self.width()) {\n                pos = self.width() - self.limit-1;\n            } else if (self.orientation == 'horizontal' &&\n                       pos > self.height()) {\n                pos = self.height() - self.limit-1;\n            }\n            if (pos < self.limit) {\n                pos = self.limit + 1;\n            }\n            self.position(pos, true);\n        });\n        //inital position of splitter\n        var pos;\n        if (settings.orientation == 'vertical') {\n            if (pos > width-settings.limit) {\n                pos = width-settings.limit;\n            } else {\n                pos = get_position(settings.position);\n            }\n        } else if (settings.orientation == 'horizontal') {\n            //position = height/2;\n            if (pos > height-settings.limit) {\n                pos = height-settings.limit;\n            } else {\n                pos = get_position(settings.position);\n            }\n        }\n        if (pos < settings.limit) {\n            pos = settings.limit;\n        }\n        self.position(pos, true);\n        if (splitters.length == 0) { // first time bind events to document\n            $(window).bind('resize.splitter', function() {\n                $.each(splitters, function(i, splitter) {\n                    if ( splitter ) splitter.refresh();\n                });\n            });\n            $(document.documentElement).bind('mousedown.splitter touchstart.splitter', function(e) {\n                if (splitter_id !== null) {\n                    current_splitter = splitters[splitter_id];\n                    $('<div class=\"splitterMask\"></div>').css('cursor', current_splitter.children().eq(1).css('cursor')).insertAfter(current_splitter);\n                    current_splitter.settings.onDragStart(e);\n                    return false;\n                }\n            }).bind('mouseup.splitter touchend.splitter touchleave.splitter touchcancel.splitter', function(e) {\n                if (current_splitter) {\n                    $('.splitterMask').remove();\n                    current_splitter.settings.onDragEnd(e);\n                    current_splitter = null;\n                }\n            }).bind('mousemove.splitter touchmove.splitter', function(e) {\n                if (current_splitter !== null) {\n                    var limit = current_splitter.limit;\n                    var offset = current_splitter.offset();\n                    if (current_splitter.orientation == 'vertical') {\n                        var pageX = e.pageX;\n                        if(e.originalEvent && e.originalEvent.changedTouches){\n                          pageX = e.originalEvent.changedTouches[0].pageX;\n                        }\n                        var x = pageX - offset.left;\n                        if (x <= current_splitter.limit) {\n                            x = current_splitter.limit + 1;\n                        } else if (x >= current_splitter.width() - limit) {\n                            x = current_splitter.width() - limit - 1;\n                        }\n                        if (x > current_splitter.limit &&\n                            x < current_splitter.width()-limit) {\n                            current_splitter.position(x, true);\n                            current_splitter.find('.splitter_panel').\n                                trigger('splitter.resize');\n                            e.preventDefault();\n                        }\n                    } else if (current_splitter.orientation == 'horizontal') {\n                        var pageY = e.pageY;\n                        if(e.originalEvent && e.originalEvent.changedTouches){\n                          pageY = e.originalEvent.changedTouches[0].pageY;\n                        }\n                        var y = pageY-offset.top;\n                        if (y <= current_splitter.limit) {\n                            y = current_splitter.limit + 1;\n                        } else if (y >= current_splitter.height() - limit) {\n                            y = current_splitter.height() - limit - 1;\n                        }\n                        if (y > current_splitter.limit &&\n                            y < current_splitter.height()-limit) {\n                            current_splitter.position(y, true);\n                            current_splitter.find('.splitter_panel').\n                                trigger('splitter.resize');\n                            e.preventDefault();\n                        }\n                    }\n                    current_splitter.settings.onDrag(e);\n                }\n            });\n        }\n        splitters.push(self);\n        self.data('splitter', self);\n        return self;\n    };\n})(jQuery);\n\ndefine(\"splitter\", [\"jquery\"], function(){});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Deal with subwindow layout\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('pane',[ \"jquery\", \"splitter\" ],\n       function() {\n\n(function($) {\n  var pluginName = 'tile';\n\n  /** @lends $.fn.tile */\n  var methods = {\n    /**\n     * @param {Object} [options] currently ignored\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar dir   = elem.hasClass(\"horizontal\") ? \"vertical\" : \"horizontal\";\n\tvar pos   = elem.attr(\"data-split\");\n\tvar panes = elem.children();\n\n\tpos = pos||\"50%\";\n\n\tpanes.each(function() {\n\t  $(this).wrap('<div class=\"pane-wrapper\"></div>')\n\t});\n\telem.addClass(\"pane-container\");\n\telem.split({ orientation:dir,\n\t             position:pos,\n\t\t     limit:10,\n\t\t     onDragStart: function() { elem.tile('resize_start'); },\n\t\t     onDrag: function(ev) { panes.trigger(\"pane.resize\"); },\n\t\t     onDragEnd: function() { elem.tile('resize_save'); }\n\t           });\n\telem.tile('resize_save');\n\n\telem.on('fullscreen', function(ev, val) {\n\t  elem.tile('resize');\n\t});\n      });\n    },\n\n    resize_start: function() {\n      return this.each(function() {\n\tvar elem    = $(this);\n\tvar info    = paneInfo(elem);\n\n\telem.find(\".reactive-size\").trigger(\"reactive-resize-start\",\n\t\t\t\t\t    info.splitter.orientation);\n      });\n    },\n\n    /**\n     * Save the current split location as a percentage, so we can\n     * maintain this percentage at subsequent resize events.  This\n     * is normally called after establishing the tile and after a\n     * user-initiated resize.\n     */\n    resize_save: function() {\n      this.each(function() {\n\tvar elem    = $(this);\n\tvar info    = paneInfo(elem);\n\tvar length, pos;\n\n\tif ( info.splitter.orientation == 'horizontal' ) {\n\t  length = elem.height();\n\t  pos    = $(info.first).height();\n\t} else {\n\t  length = elem.width();\n\t  pos    = $(info.first).width();\n\t}\n\n\tvar percent = Math.round(((100 * pos) / length)) + \"%\";\n\n\tinfo.splitter.resizestart = percent;\n      });\n\n      this.find(\".reactive-size\").trigger(\"reactive-resize\");\n      return this;\n    },\n\n    /**\n     * Act on a resize by keeping the relative distribution and respect\n     * min/max style properties. This assumes that {@link resizestart}\n     * is called at the start of the windowresize.\n     * @example $(window).resize(function() { $(\".tile\").tile('resize'); });\n     */\n    resize: function() {\n      return this.each(function() {\n\tvar elem     = $(this);\n\tvar splitter = elem.split();\n\n\tif ( splitter.resizestart ) {\n\t  splitter.position(splitter.resizestart);\n\t  splitter.settings.onDrag(elem);\n\t}\n      });\n    },\n\n    /**\n     * Split a pane, adding a new pane above/below/left/right of the\n     * splitted pane.  `this` must be the pane content!\n     * @param {Element} pane is a `<div>` element providing the content\n     * for the new tile.\n     * @param {String} [rel] is one of `above`/`below`/`left`/`right`.\n     * Default is `\"below\"`\n     * @param {Number} [pos] is percentage of the height/width taken by\n     * the new pane\n     * @param {Number} [minheight] is the minimum height of the new tab\n     * in the case of a vertical split.\n     * @return {jQuery} parent `pane-container` that hold me and the note\n     * that was added next to me.\n     */\n    split: function(pane, rel, pos, minheight) {\n      rel = rel||\"below\";\n\n      var relto  = this;\n      var dir    = (rel == \"above\" || rel == \"below\") ? \"horizontal\" : \"vertical\";\n      var parent = relto.wrap('<div class=\"pane-container tile \"' +\n\t\t\t      flipdir(dir) +\n\t\t\t      '></div>')\n                        .parent();\n      var hidden;\n\n      if ( !parent.is(\":visible\") ) {\n\thidden = parent.closest(\".tab-pane\");\n\thidden.addClass(\"active\");\n      }\n\n      if ( pos == undefined )\n\tpos = 50;\n      else if ( pos < 10 )\n\tpos = 10;\n      else if ( pos > 90 )\n\tpos = 90;\n\n      if ( minheight && dir == \"horizontal\" ) {\n\tvar sumh = this.height();\n\tvar left = sumh*pos/100;\n\tif ( left < minheight && minheight < sumh*0.9 ) {\n\t  pos = (minheight*100/sumh);\n\t}\n      }\n\n      if ( rel == \"above\" || rel == \"left\" ) {\n\tparent.prepend(pane);\n      } else {\n\tpos = 100 - pos;\n\tparent.append(pane);\n      }\n\n      var panes = $(relto).add(pane);\n      panes.wrap('<div class=\"pane-wrapper\"></div>');\n\n      parent.split({ orientation:dir,\n\t\t     position:pos+\"%\",\n\t\t     limit:10,\n\t\t     onDragStart: function() { parent.tile('resize_start'); },\n\t\t     onDrag:      function() { panes.trigger(\"pane.resize\"); },\n\t\t     onDragEnd:   function() { parent.tile('resize_save'); }\n\t\t   });\n      parent.tile('resize_save');\n      panes.trigger(\"pane.resize\");\n      if ( hidden )\n\thidden.removeClass(\"active\");\n\n      return parent;\n    },\n\n    /**\n     * Remove a tile from the DOM, causing the remaining half to occupy\n     * the whole space.  Again, `this` is the content pane.\n     */\n     close: function() {\n      var pane = this;\n      var splitContainer = pane.closest(\".pane-container\");\n\n      splitContainer.split().destroy();\n      pane.parent().remove();\n      splitContainer.children().first().children().first().unwrap().unwrap();\n    }\n  }; // methods\n\n  function paneInfo(pane) {\n    var panes = pane.children();\n\n    return { splitter: pane.split(),\n             first:    $(panes[0]).children()[0],\n\t     second:   $(panes[2]).children()[0]\n           };\n  }\n\n  function flipdir(dir) {\n    return dir == \"horizontal\" ? \"vertical\" : \"horizontal\";\n  }\n\n  /**\n   * Generate a tiled subwindow layout from a hierarchy of `<div>`\n   * elements.  Below is the HTML that creates the SWISH 2.0 subwindow\n   * layout.  This plugin uses the class `horizontal` or `vertical` to\n   * decide on the direction of the split and the attribute `data-split`\n   * to locate the split location.\n   *\n   *     <div class=\"tile horizontal\" data-split=\"60%\">\n   *       <div class=\"prolog-editor\"></div>\n   *       <div class=\"tile vertical\" data-split=\"70%\">\n   *         <div class=\"prolog-runners\"></div>\n   *         <div class=\"prolog-query\"></div>\n   *       </div>\n   *     </div>\n   *\n   * @class tile\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @example $(\".tile\").tile();\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.tile = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","/*!\n * typeahead.js 0.11.1\n * https://github.com/twitter/typeahead.js\n * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT\n */\n\n(function(root, factory) {\n    if (typeof define === \"function\" && define.amd) {\n        define(\"bloodhound\", [ \"jquery\" ], function(a0) {\n            return root[\"Bloodhound\"] = factory(a0);\n        });\n    } else if (typeof exports === \"object\") {\n        module.exports = factory(require(\"jquery\"));\n    } else {\n        root[\"Bloodhound\"] = factory(jQuery);\n    }\n})(this, function($) {\n    var _ = function() {\n        \"use strict\";\n        return {\n            isMsie: function() {\n                return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\\d+(.\\d+)?)/i)[2] : false;\n            },\n            isBlankString: function(str) {\n                return !str || /^\\s*$/.test(str);\n            },\n            escapeRegExChars: function(str) {\n                return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n            },\n            isString: function(obj) {\n                return typeof obj === \"string\";\n            },\n            isNumber: function(obj) {\n                return typeof obj === \"number\";\n            },\n            isArray: $.isArray,\n            isFunction: $.isFunction,\n            isObject: $.isPlainObject,\n            isUndefined: function(obj) {\n                return typeof obj === \"undefined\";\n            },\n            isElement: function(obj) {\n                return !!(obj && obj.nodeType === 1);\n            },\n            isJQuery: function(obj) {\n                return obj instanceof $;\n            },\n            toStr: function toStr(s) {\n                return _.isUndefined(s) || s === null ? \"\" : s + \"\";\n            },\n            bind: $.proxy,\n            each: function(collection, cb) {\n                $.each(collection, reverseArgs);\n                function reverseArgs(index, value) {\n                    return cb(value, index);\n                }\n            },\n            map: $.map,\n            filter: $.grep,\n            every: function(obj, test) {\n                var result = true;\n                if (!obj) {\n                    return result;\n                }\n                $.each(obj, function(key, val) {\n                    if (!(result = test.call(null, val, key, obj))) {\n                        return false;\n                    }\n                });\n                return !!result;\n            },\n            some: function(obj, test) {\n                var result = false;\n                if (!obj) {\n                    return result;\n                }\n                $.each(obj, function(key, val) {\n                    if (result = test.call(null, val, key, obj)) {\n                        return false;\n                    }\n                });\n                return !!result;\n            },\n            mixin: $.extend,\n            identity: function(x) {\n                return x;\n            },\n            clone: function(obj) {\n                return $.extend(true, {}, obj);\n            },\n            getIdGenerator: function() {\n                var counter = 0;\n                return function() {\n                    return counter++;\n                };\n            },\n            templatify: function templatify(obj) {\n                return $.isFunction(obj) ? obj : template;\n                function template() {\n                    return String(obj);\n                }\n            },\n            defer: function(fn) {\n                setTimeout(fn, 0);\n            },\n            debounce: function(func, wait, immediate) {\n                var timeout, result;\n                return function() {\n                    var context = this, args = arguments, later, callNow;\n                    later = function() {\n                        timeout = null;\n                        if (!immediate) {\n                            result = func.apply(context, args);\n                        }\n                    };\n                    callNow = immediate && !timeout;\n                    clearTimeout(timeout);\n                    timeout = setTimeout(later, wait);\n                    if (callNow) {\n                        result = func.apply(context, args);\n                    }\n                    return result;\n                };\n            },\n            throttle: function(func, wait) {\n                var context, args, timeout, result, previous, later;\n                previous = 0;\n                later = function() {\n                    previous = new Date();\n                    timeout = null;\n                    result = func.apply(context, args);\n                };\n                return function() {\n                    var now = new Date(), remaining = wait - (now - previous);\n                    context = this;\n                    args = arguments;\n                    if (remaining <= 0) {\n                        clearTimeout(timeout);\n                        timeout = null;\n                        previous = now;\n                        result = func.apply(context, args);\n                    } else if (!timeout) {\n                        timeout = setTimeout(later, remaining);\n                    }\n                    return result;\n                };\n            },\n            stringify: function(val) {\n                return _.isString(val) ? val : JSON.stringify(val);\n            },\n            noop: function() {}\n        };\n    }();\n    var VERSION = \"0.11.1\";\n    var tokenizers = function() {\n        \"use strict\";\n        return {\n            nonword: nonword,\n            whitespace: whitespace,\n            obj: {\n                nonword: getObjTokenizer(nonword),\n                whitespace: getObjTokenizer(whitespace)\n            }\n        };\n        function whitespace(str) {\n            str = _.toStr(str);\n            return str ? str.split(/\\s+/) : [];\n        }\n        function nonword(str) {\n            str = _.toStr(str);\n            return str ? str.split(/\\W+/) : [];\n        }\n        function getObjTokenizer(tokenizer) {\n            return function setKey(keys) {\n                keys = _.isArray(keys) ? keys : [].slice.call(arguments, 0);\n                return function tokenize(o) {\n                    var tokens = [];\n                    _.each(keys, function(k) {\n                        tokens = tokens.concat(tokenizer(_.toStr(o[k])));\n                    });\n                    return tokens;\n                };\n            };\n        }\n    }();\n    var LruCache = function() {\n        \"use strict\";\n        function LruCache(maxSize) {\n            this.maxSize = _.isNumber(maxSize) ? maxSize : 100;\n            this.reset();\n            if (this.maxSize <= 0) {\n                this.set = this.get = $.noop;\n            }\n        }\n        _.mixin(LruCache.prototype, {\n            set: function set(key, val) {\n                var tailItem = this.list.tail, node;\n                if (this.size >= this.maxSize) {\n                    this.list.remove(tailItem);\n                    delete this.hash[tailItem.key];\n                    this.size--;\n                }\n                if (node = this.hash[key]) {\n                    node.val = val;\n                    this.list.moveToFront(node);\n                } else {\n                    node = new Node(key, val);\n                    this.list.add(node);\n                    this.hash[key] = node;\n                    this.size++;\n                }\n            },\n            get: function get(key) {\n                var node = this.hash[key];\n                if (node) {\n                    this.list.moveToFront(node);\n                    return node.val;\n                }\n            },\n            reset: function reset() {\n                this.size = 0;\n                this.hash = {};\n                this.list = new List();\n            }\n        });\n        function List() {\n            this.head = this.tail = null;\n        }\n        _.mixin(List.prototype, {\n            add: function add(node) {\n                if (this.head) {\n                    node.next = this.head;\n                    this.head.prev = node;\n                }\n                this.head = node;\n                this.tail = this.tail || node;\n            },\n            remove: function remove(node) {\n                node.prev ? node.prev.next = node.next : this.head = node.next;\n                node.next ? node.next.prev = node.prev : this.tail = node.prev;\n            },\n            moveToFront: function(node) {\n                this.remove(node);\n                this.add(node);\n            }\n        });\n        function Node(key, val) {\n            this.key = key;\n            this.val = val;\n            this.prev = this.next = null;\n        }\n        return LruCache;\n    }();\n    var PersistentStorage = function() {\n        \"use strict\";\n        var LOCAL_STORAGE;\n        try {\n            LOCAL_STORAGE = window.localStorage;\n            LOCAL_STORAGE.setItem(\"~~~\", \"!\");\n            LOCAL_STORAGE.removeItem(\"~~~\");\n        } catch (err) {\n            LOCAL_STORAGE = null;\n        }\n        function PersistentStorage(namespace, override) {\n            this.prefix = [ \"__\", namespace, \"__\" ].join(\"\");\n            this.ttlKey = \"__ttl__\";\n            this.keyMatcher = new RegExp(\"^\" + _.escapeRegExChars(this.prefix));\n            this.ls = override || LOCAL_STORAGE;\n            !this.ls && this._noop();\n        }\n        _.mixin(PersistentStorage.prototype, {\n            _prefix: function(key) {\n                return this.prefix + key;\n            },\n            _ttlKey: function(key) {\n                return this._prefix(key) + this.ttlKey;\n            },\n            _noop: function() {\n                this.get = this.set = this.remove = this.clear = this.isExpired = _.noop;\n            },\n            _safeSet: function(key, val) {\n                try {\n                    this.ls.setItem(key, val);\n                } catch (err) {\n                    if (err.name === \"QuotaExceededError\") {\n                        this.clear();\n                        this._noop();\n                    }\n                }\n            },\n            get: function(key) {\n                if (this.isExpired(key)) {\n                    this.remove(key);\n                }\n                return decode(this.ls.getItem(this._prefix(key)));\n            },\n            set: function(key, val, ttl) {\n                if (_.isNumber(ttl)) {\n                    this._safeSet(this._ttlKey(key), encode(now() + ttl));\n                } else {\n                    this.ls.removeItem(this._ttlKey(key));\n                }\n                return this._safeSet(this._prefix(key), encode(val));\n            },\n            remove: function(key) {\n                this.ls.removeItem(this._ttlKey(key));\n                this.ls.removeItem(this._prefix(key));\n                return this;\n            },\n            clear: function() {\n                var i, keys = gatherMatchingKeys(this.keyMatcher);\n                for (i = keys.length; i--; ) {\n                    this.remove(keys[i]);\n                }\n                return this;\n            },\n            isExpired: function(key) {\n                var ttl = decode(this.ls.getItem(this._ttlKey(key)));\n                return _.isNumber(ttl) && now() > ttl ? true : false;\n            }\n        });\n        return PersistentStorage;\n        function now() {\n            return new Date().getTime();\n        }\n        function encode(val) {\n            return JSON.stringify(_.isUndefined(val) ? null : val);\n        }\n        function decode(val) {\n            return $.parseJSON(val);\n        }\n        function gatherMatchingKeys(keyMatcher) {\n            var i, key, keys = [], len = LOCAL_STORAGE.length;\n            for (i = 0; i < len; i++) {\n                if ((key = LOCAL_STORAGE.key(i)).match(keyMatcher)) {\n                    keys.push(key.replace(keyMatcher, \"\"));\n                }\n            }\n            return keys;\n        }\n    }();\n    var Transport = function() {\n        \"use strict\";\n        var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests = 6, sharedCache = new LruCache(10);\n        function Transport(o) {\n            o = o || {};\n            this.cancelled = false;\n            this.lastReq = null;\n            this._send = o.transport;\n            this._get = o.limiter ? o.limiter(this._get) : this._get;\n            this._cache = o.cache === false ? new LruCache(0) : sharedCache;\n        }\n        Transport.setMaxPendingRequests = function setMaxPendingRequests(num) {\n            maxPendingRequests = num;\n        };\n        Transport.resetCache = function resetCache() {\n            sharedCache.reset();\n        };\n        _.mixin(Transport.prototype, {\n            _fingerprint: function fingerprint(o) {\n                o = o || {};\n                return o.url + o.type + $.param(o.data || {});\n            },\n            _get: function(o, cb) {\n                var that = this, fingerprint, jqXhr;\n                fingerprint = this._fingerprint(o);\n                if (this.cancelled || fingerprint !== this.lastReq) {\n                    return;\n                }\n                if (jqXhr = pendingRequests[fingerprint]) {\n                    jqXhr.done(done).fail(fail);\n                } else if (pendingRequestsCount < maxPendingRequests) {\n                    pendingRequestsCount++;\n                    pendingRequests[fingerprint] = this._send(o).done(done).fail(fail).always(always);\n                } else {\n                    this.onDeckRequestArgs = [].slice.call(arguments, 0);\n                }\n                function done(resp) {\n                    cb(null, resp);\n                    that._cache.set(fingerprint, resp);\n                }\n                function fail() {\n                    cb(true);\n                }\n                function always() {\n                    pendingRequestsCount--;\n                    delete pendingRequests[fingerprint];\n                    if (that.onDeckRequestArgs) {\n                        that._get.apply(that, that.onDeckRequestArgs);\n                        that.onDeckRequestArgs = null;\n                    }\n                }\n            },\n            get: function(o, cb) {\n                var resp, fingerprint;\n                cb = cb || $.noop;\n                o = _.isString(o) ? {\n                    url: o\n                } : o || {};\n                fingerprint = this._fingerprint(o);\n                this.cancelled = false;\n                this.lastReq = fingerprint;\n                if (resp = this._cache.get(fingerprint)) {\n                    cb(null, resp);\n                } else {\n                    this._get(o, cb);\n                }\n            },\n            cancel: function() {\n                this.cancelled = true;\n            }\n        });\n        return Transport;\n    }();\n    var SearchIndex = window.SearchIndex = function() {\n        \"use strict\";\n        var CHILDREN = \"c\", IDS = \"i\";\n        function SearchIndex(o) {\n            o = o || {};\n            if (!o.datumTokenizer || !o.queryTokenizer) {\n                $.error(\"datumTokenizer and queryTokenizer are both required\");\n            }\n            this.identify = o.identify || _.stringify;\n            this.datumTokenizer = o.datumTokenizer;\n            this.queryTokenizer = o.queryTokenizer;\n            this.reset();\n        }\n        _.mixin(SearchIndex.prototype, {\n            bootstrap: function bootstrap(o) {\n                this.datums = o.datums;\n                this.trie = o.trie;\n            },\n            add: function(data) {\n                var that = this;\n                data = _.isArray(data) ? data : [ data ];\n                _.each(data, function(datum) {\n                    var id, tokens;\n                    that.datums[id = that.identify(datum)] = datum;\n                    tokens = normalizeTokens(that.datumTokenizer(datum));\n                    _.each(tokens, function(token) {\n                        var node, chars, ch;\n                        node = that.trie;\n                        chars = token.split(\"\");\n                        while (ch = chars.shift()) {\n                            node = node[CHILDREN][ch] || (node[CHILDREN][ch] = newNode());\n                            node[IDS].push(id);\n                        }\n                    });\n                });\n            },\n            get: function get(ids) {\n                var that = this;\n                return _.map(ids, function(id) {\n                    return that.datums[id];\n                });\n            },\n            search: function search(query) {\n                var that = this, tokens, matches;\n                tokens = normalizeTokens(this.queryTokenizer(query));\n                _.each(tokens, function(token) {\n                    var node, chars, ch, ids;\n                    if (matches && matches.length === 0) {\n                        return false;\n                    }\n                    node = that.trie;\n                    chars = token.split(\"\");\n                    while (node && (ch = chars.shift())) {\n                        node = node[CHILDREN][ch];\n                    }\n                    if (node && chars.length === 0) {\n                        ids = node[IDS].slice(0);\n                        matches = matches ? getIntersection(matches, ids) : ids;\n                    } else {\n                        matches = [];\n                        return false;\n                    }\n                });\n                return matches ? _.map(unique(matches), function(id) {\n                    return that.datums[id];\n                }) : [];\n            },\n            all: function all() {\n                var values = [];\n                for (var key in this.datums) {\n                    values.push(this.datums[key]);\n                }\n                return values;\n            },\n            reset: function reset() {\n                this.datums = {};\n                this.trie = newNode();\n            },\n            serialize: function serialize() {\n                return {\n                    datums: this.datums,\n                    trie: this.trie\n                };\n            }\n        });\n        return SearchIndex;\n        function normalizeTokens(tokens) {\n            tokens = _.filter(tokens, function(token) {\n                return !!token;\n            });\n            tokens = _.map(tokens, function(token) {\n                return token.toLowerCase();\n            });\n            return tokens;\n        }\n        function newNode() {\n            var node = {};\n            node[IDS] = [];\n            node[CHILDREN] = {};\n            return node;\n        }\n        function unique(array) {\n            var seen = {}, uniques = [];\n            for (var i = 0, len = array.length; i < len; i++) {\n                if (!seen[array[i]]) {\n                    seen[array[i]] = true;\n                    uniques.push(array[i]);\n                }\n            }\n            return uniques;\n        }\n        function getIntersection(arrayA, arrayB) {\n            var ai = 0, bi = 0, intersection = [];\n            arrayA = arrayA.sort();\n            arrayB = arrayB.sort();\n            var lenArrayA = arrayA.length, lenArrayB = arrayB.length;\n            while (ai < lenArrayA && bi < lenArrayB) {\n                if (arrayA[ai] < arrayB[bi]) {\n                    ai++;\n                } else if (arrayA[ai] > arrayB[bi]) {\n                    bi++;\n                } else {\n                    intersection.push(arrayA[ai]);\n                    ai++;\n                    bi++;\n                }\n            }\n            return intersection;\n        }\n    }();\n    var Prefetch = function() {\n        \"use strict\";\n        var keys;\n        keys = {\n            data: \"data\",\n            protocol: \"protocol\",\n            thumbprint: \"thumbprint\"\n        };\n        function Prefetch(o) {\n            this.url = o.url;\n            this.ttl = o.ttl;\n            this.cache = o.cache;\n            this.prepare = o.prepare;\n            this.transform = o.transform;\n            this.transport = o.transport;\n            this.thumbprint = o.thumbprint;\n            this.storage = new PersistentStorage(o.cacheKey);\n        }\n        _.mixin(Prefetch.prototype, {\n            _settings: function settings() {\n                return {\n                    url: this.url,\n                    type: \"GET\",\n                    dataType: \"json\"\n                };\n            },\n            store: function store(data) {\n                if (!this.cache) {\n                    return;\n                }\n                this.storage.set(keys.data, data, this.ttl);\n                this.storage.set(keys.protocol, location.protocol, this.ttl);\n                this.storage.set(keys.thumbprint, this.thumbprint, this.ttl);\n            },\n            fromCache: function fromCache() {\n                var stored = {}, isExpired;\n                if (!this.cache) {\n                    return null;\n                }\n                stored.data = this.storage.get(keys.data);\n                stored.protocol = this.storage.get(keys.protocol);\n                stored.thumbprint = this.storage.get(keys.thumbprint);\n                isExpired = stored.thumbprint !== this.thumbprint || stored.protocol !== location.protocol;\n                return stored.data && !isExpired ? stored.data : null;\n            },\n            fromNetwork: function(cb) {\n                var that = this, settings;\n                if (!cb) {\n                    return;\n                }\n                settings = this.prepare(this._settings());\n                this.transport(settings).fail(onError).done(onResponse);\n                function onError() {\n                    cb(true);\n                }\n                function onResponse(resp) {\n                    cb(null, that.transform(resp));\n                }\n            },\n            clear: function clear() {\n                this.storage.clear();\n                return this;\n            }\n        });\n        return Prefetch;\n    }();\n    var Remote = function() {\n        \"use strict\";\n        function Remote(o) {\n            this.url = o.url;\n            this.prepare = o.prepare;\n            this.transform = o.transform;\n            this.transport = new Transport({\n                cache: o.cache,\n                limiter: o.limiter,\n                transport: o.transport\n            });\n        }\n        _.mixin(Remote.prototype, {\n            _settings: function settings() {\n                return {\n                    url: this.url,\n                    type: \"GET\",\n                    dataType: \"json\"\n                };\n            },\n            get: function get(query, cb) {\n                var that = this, settings;\n                if (!cb) {\n                    return;\n                }\n                query = query || \"\";\n                settings = this.prepare(query, this._settings());\n                return this.transport.get(settings, onResponse);\n                function onResponse(err, resp) {\n                    err ? cb([]) : cb(that.transform(resp));\n                }\n            },\n            cancelLastRequest: function cancelLastRequest() {\n                this.transport.cancel();\n            }\n        });\n        return Remote;\n    }();\n    var oParser = function() {\n        \"use strict\";\n        return function parse(o) {\n            var defaults, sorter;\n            defaults = {\n                initialize: true,\n                identify: _.stringify,\n                datumTokenizer: null,\n                queryTokenizer: null,\n                sufficient: 5,\n                sorter: null,\n                local: [],\n                prefetch: null,\n                remote: null\n            };\n            o = _.mixin(defaults, o || {});\n            !o.datumTokenizer && $.error(\"datumTokenizer is required\");\n            !o.queryTokenizer && $.error(\"queryTokenizer is required\");\n            sorter = o.sorter;\n            o.sorter = sorter ? function(x) {\n                return x.sort(sorter);\n            } : _.identity;\n            o.local = _.isFunction(o.local) ? o.local() : o.local;\n            o.prefetch = parsePrefetch(o.prefetch);\n            o.remote = parseRemote(o.remote);\n            return o;\n        };\n        function parsePrefetch(o) {\n            var defaults;\n            if (!o) {\n                return null;\n            }\n            defaults = {\n                url: null,\n                ttl: 24 * 60 * 60 * 1e3,\n                cache: true,\n                cacheKey: null,\n                thumbprint: \"\",\n                prepare: _.identity,\n                transform: _.identity,\n                transport: null\n            };\n            o = _.isString(o) ? {\n                url: o\n            } : o;\n            o = _.mixin(defaults, o);\n            !o.url && $.error(\"prefetch requires url to be set\");\n            o.transform = o.filter || o.transform;\n            o.cacheKey = o.cacheKey || o.url;\n            o.thumbprint = VERSION + o.thumbprint;\n            o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;\n            return o;\n        }\n        function parseRemote(o) {\n            var defaults;\n            if (!o) {\n                return;\n            }\n            defaults = {\n                url: null,\n                cache: true,\n                prepare: null,\n                replace: null,\n                wildcard: null,\n                limiter: null,\n                rateLimitBy: \"debounce\",\n                rateLimitWait: 300,\n                transform: _.identity,\n                transport: null\n            };\n            o = _.isString(o) ? {\n                url: o\n            } : o;\n            o = _.mixin(defaults, o);\n            !o.url && $.error(\"remote requires url to be set\");\n            o.transform = o.filter || o.transform;\n            o.prepare = toRemotePrepare(o);\n            o.limiter = toLimiter(o);\n            o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;\n            delete o.replace;\n            delete o.wildcard;\n            delete o.rateLimitBy;\n            delete o.rateLimitWait;\n            return o;\n        }\n        function toRemotePrepare(o) {\n            var prepare, replace, wildcard;\n            prepare = o.prepare;\n            replace = o.replace;\n            wildcard = o.wildcard;\n            if (prepare) {\n                return prepare;\n            }\n            if (replace) {\n                prepare = prepareByReplace;\n            } else if (o.wildcard) {\n                prepare = prepareByWildcard;\n            } else {\n                prepare = idenityPrepare;\n            }\n            return prepare;\n            function prepareByReplace(query, settings) {\n                settings.url = replace(settings.url, query);\n                return settings;\n            }\n            function prepareByWildcard(query, settings) {\n                settings.url = settings.url.replace(wildcard, encodeURIComponent(query));\n                return settings;\n            }\n            function idenityPrepare(query, settings) {\n                return settings;\n            }\n        }\n        function toLimiter(o) {\n            var limiter, method, wait;\n            limiter = o.limiter;\n            method = o.rateLimitBy;\n            wait = o.rateLimitWait;\n            if (!limiter) {\n                limiter = /^throttle$/i.test(method) ? throttle(wait) : debounce(wait);\n            }\n            return limiter;\n            function debounce(wait) {\n                return function debounce(fn) {\n                    return _.debounce(fn, wait);\n                };\n            }\n            function throttle(wait) {\n                return function throttle(fn) {\n                    return _.throttle(fn, wait);\n                };\n            }\n        }\n        function callbackToDeferred(fn) {\n            return function wrapper(o) {\n                var deferred = $.Deferred();\n                fn(o, onSuccess, onError);\n                return deferred;\n                function onSuccess(resp) {\n                    _.defer(function() {\n                        deferred.resolve(resp);\n                    });\n                }\n                function onError(err) {\n                    _.defer(function() {\n                        deferred.reject(err);\n                    });\n                }\n            };\n        }\n    }();\n    var Bloodhound = function() {\n        \"use strict\";\n        var old;\n        old = window && window.Bloodhound;\n        function Bloodhound(o) {\n            o = oParser(o);\n            this.sorter = o.sorter;\n            this.identify = o.identify;\n            this.sufficient = o.sufficient;\n            this.local = o.local;\n            this.remote = o.remote ? new Remote(o.remote) : null;\n            this.prefetch = o.prefetch ? new Prefetch(o.prefetch) : null;\n            this.index = new SearchIndex({\n                identify: this.identify,\n                datumTokenizer: o.datumTokenizer,\n                queryTokenizer: o.queryTokenizer\n            });\n            o.initialize !== false && this.initialize();\n        }\n        Bloodhound.noConflict = function noConflict() {\n            window && (window.Bloodhound = old);\n            return Bloodhound;\n        };\n        Bloodhound.tokenizers = tokenizers;\n        _.mixin(Bloodhound.prototype, {\n            __ttAdapter: function ttAdapter() {\n                var that = this;\n                return this.remote ? withAsync : withoutAsync;\n                function withAsync(query, sync, async) {\n                    return that.search(query, sync, async);\n                }\n                function withoutAsync(query, sync) {\n                    return that.search(query, sync);\n                }\n            },\n            _loadPrefetch: function loadPrefetch() {\n                var that = this, deferred, serialized;\n                deferred = $.Deferred();\n                if (!this.prefetch) {\n                    deferred.resolve();\n                } else if (serialized = this.prefetch.fromCache()) {\n                    this.index.bootstrap(serialized);\n                    deferred.resolve();\n                } else {\n                    this.prefetch.fromNetwork(done);\n                }\n                return deferred.promise();\n                function done(err, data) {\n                    if (err) {\n                        return deferred.reject();\n                    }\n                    that.add(data);\n                    that.prefetch.store(that.index.serialize());\n                    deferred.resolve();\n                }\n            },\n            _initialize: function initialize() {\n                var that = this, deferred;\n                this.clear();\n                (this.initPromise = this._loadPrefetch()).done(addLocalToIndex);\n                return this.initPromise;\n                function addLocalToIndex() {\n                    that.add(that.local);\n                }\n            },\n            initialize: function initialize(force) {\n                return !this.initPromise || force ? this._initialize() : this.initPromise;\n            },\n            add: function add(data) {\n                this.index.add(data);\n                return this;\n            },\n            get: function get(ids) {\n                ids = _.isArray(ids) ? ids : [].slice.call(arguments);\n                return this.index.get(ids);\n            },\n            search: function search(query, sync, async) {\n                var that = this, local;\n                local = this.sorter(this.index.search(query));\n                sync(this.remote ? local.slice() : local);\n                if (this.remote && local.length < this.sufficient) {\n                    this.remote.get(query, processRemote);\n                } else if (this.remote) {\n                    this.remote.cancelLastRequest();\n                }\n                return this;\n                function processRemote(remote) {\n                    var nonDuplicates = [];\n                    _.each(remote, function(r) {\n                        !_.some(local, function(l) {\n                            return that.identify(r) === that.identify(l);\n                        }) && nonDuplicates.push(r);\n                    });\n                    async && async(nonDuplicates);\n                }\n            },\n            all: function all() {\n                return this.index.all();\n            },\n            clear: function clear() {\n                this.index.reset();\n                return this;\n            },\n            clearPrefetchCache: function clearPrefetchCache() {\n                this.prefetch && this.prefetch.clear();\n                return this;\n            },\n            clearRemoteCache: function clearRemoteCache() {\n                Transport.resetCache();\n                return this;\n            },\n            ttAdapter: function ttAdapter() {\n                return this.__ttAdapter();\n            }\n        });\n        return Bloodhound;\n    }();\n    return Bloodhound;\n});\n","/*!\n * typeahead.js 0.11.1\n * https://github.com/twitter/typeahead.js\n * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT\n */\n\n(function(root, factory) {\n    if (typeof define === \"function\" && define.amd) {\n        define(\"typeahead.js\", [ \"jquery\" ], function(a0) {\n            return factory(a0);\n        });\n    } else if (typeof exports === \"object\") {\n        module.exports = factory(require(\"jquery\"));\n    } else {\n        factory(jQuery);\n    }\n})(this, function($) {\n    var _ = function() {\n        \"use strict\";\n        return {\n            isMsie: function() {\n                return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\\d+(.\\d+)?)/i)[2] : false;\n            },\n            isBlankString: function(str) {\n                return !str || /^\\s*$/.test(str);\n            },\n            escapeRegExChars: function(str) {\n                return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n            },\n            isString: function(obj) {\n                return typeof obj === \"string\";\n            },\n            isNumber: function(obj) {\n                return typeof obj === \"number\";\n            },\n            isArray: $.isArray,\n            isFunction: $.isFunction,\n            isObject: $.isPlainObject,\n            isUndefined: function(obj) {\n                return typeof obj === \"undefined\";\n            },\n            isElement: function(obj) {\n                return !!(obj && obj.nodeType === 1);\n            },\n            isJQuery: function(obj) {\n                return obj instanceof $;\n            },\n            toStr: function toStr(s) {\n                return _.isUndefined(s) || s === null ? \"\" : s + \"\";\n            },\n            bind: $.proxy,\n            each: function(collection, cb) {\n                $.each(collection, reverseArgs);\n                function reverseArgs(index, value) {\n                    return cb(value, index);\n                }\n            },\n            map: $.map,\n            filter: $.grep,\n            every: function(obj, test) {\n                var result = true;\n                if (!obj) {\n                    return result;\n                }\n                $.each(obj, function(key, val) {\n                    if (!(result = test.call(null, val, key, obj))) {\n                        return false;\n                    }\n                });\n                return !!result;\n            },\n            some: function(obj, test) {\n                var result = false;\n                if (!obj) {\n                    return result;\n                }\n                $.each(obj, function(key, val) {\n                    if (result = test.call(null, val, key, obj)) {\n                        return false;\n                    }\n                });\n                return !!result;\n            },\n            mixin: $.extend,\n            identity: function(x) {\n                return x;\n            },\n            clone: function(obj) {\n                return $.extend(true, {}, obj);\n            },\n            getIdGenerator: function() {\n                var counter = 0;\n                return function() {\n                    return counter++;\n                };\n            },\n            templatify: function templatify(obj) {\n                return $.isFunction(obj) ? obj : template;\n                function template() {\n                    return String(obj);\n                }\n            },\n            defer: function(fn) {\n                setTimeout(fn, 0);\n            },\n            debounce: function(func, wait, immediate) {\n                var timeout, result;\n                return function() {\n                    var context = this, args = arguments, later, callNow;\n                    later = function() {\n                        timeout = null;\n                        if (!immediate) {\n                            result = func.apply(context, args);\n                        }\n                    };\n                    callNow = immediate && !timeout;\n                    clearTimeout(timeout);\n                    timeout = setTimeout(later, wait);\n                    if (callNow) {\n                        result = func.apply(context, args);\n                    }\n                    return result;\n                };\n            },\n            throttle: function(func, wait) {\n                var context, args, timeout, result, previous, later;\n                previous = 0;\n                later = function() {\n                    previous = new Date();\n                    timeout = null;\n                    result = func.apply(context, args);\n                };\n                return function() {\n                    var now = new Date(), remaining = wait - (now - previous);\n                    context = this;\n                    args = arguments;\n                    if (remaining <= 0) {\n                        clearTimeout(timeout);\n                        timeout = null;\n                        previous = now;\n                        result = func.apply(context, args);\n                    } else if (!timeout) {\n                        timeout = setTimeout(later, remaining);\n                    }\n                    return result;\n                };\n            },\n            stringify: function(val) {\n                return _.isString(val) ? val : JSON.stringify(val);\n            },\n            noop: function() {}\n        };\n    }();\n    var WWW = function() {\n        \"use strict\";\n        var defaultClassNames = {\n            wrapper: \"twitter-typeahead\",\n            input: \"tt-input\",\n            hint: \"tt-hint\",\n            menu: \"tt-menu\",\n            dataset: \"tt-dataset\",\n            suggestion: \"tt-suggestion\",\n            selectable: \"tt-selectable\",\n            empty: \"tt-empty\",\n            open: \"tt-open\",\n            cursor: \"tt-cursor\",\n            highlight: \"tt-highlight\"\n        };\n        return build;\n        function build(o) {\n            var www, classes;\n            classes = _.mixin({}, defaultClassNames, o);\n            www = {\n                css: buildCss(),\n                classes: classes,\n                html: buildHtml(classes),\n                selectors: buildSelectors(classes)\n            };\n            return {\n                css: www.css,\n                html: www.html,\n                classes: www.classes,\n                selectors: www.selectors,\n                mixin: function(o) {\n                    _.mixin(o, www);\n                }\n            };\n        }\n        function buildHtml(c) {\n            return {\n                wrapper: '<span class=\"' + c.wrapper + '\"></span>',\n                menu: '<div class=\"' + c.menu + '\"></div>'\n            };\n        }\n        function buildSelectors(classes) {\n            var selectors = {};\n            _.each(classes, function(v, k) {\n                selectors[k] = \".\" + v;\n            });\n            return selectors;\n        }\n        function buildCss() {\n            var css = {\n                wrapper: {\n                    position: \"relative\",\n                    display: \"inline-block\"\n                },\n                hint: {\n                    position: \"absolute\",\n                    top: \"0\",\n                    left: \"0\",\n                    borderColor: \"transparent\",\n                    boxShadow: \"none\",\n                    opacity: \"1\"\n                },\n                input: {\n                    position: \"relative\",\n                    verticalAlign: \"top\",\n                    backgroundColor: \"transparent\"\n                },\n                inputWithNoHint: {\n                    position: \"relative\",\n                    verticalAlign: \"top\"\n                },\n                menu: {\n                    position: \"absolute\",\n                    top: \"100%\",\n                    left: \"0\",\n                    zIndex: \"100\",\n                    display: \"none\"\n                },\n                ltr: {\n                    left: \"0\",\n                    right: \"auto\"\n                },\n                rtl: {\n                    left: \"auto\",\n                    right: \" 0\"\n                }\n            };\n            if (_.isMsie()) {\n                _.mixin(css.input, {\n                    backgroundImage: \"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)\"\n                });\n            }\n            return css;\n        }\n    }();\n    var EventBus = function() {\n        \"use strict\";\n        var namespace, deprecationMap;\n        namespace = \"typeahead:\";\n        deprecationMap = {\n            render: \"rendered\",\n            cursorchange: \"cursorchanged\",\n            select: \"selected\",\n            autocomplete: \"autocompleted\"\n        };\n        function EventBus(o) {\n            if (!o || !o.el) {\n                $.error(\"EventBus initialized without el\");\n            }\n            this.$el = $(o.el);\n        }\n        _.mixin(EventBus.prototype, {\n            _trigger: function(type, args) {\n                var $e;\n                $e = $.Event(namespace + type);\n                (args = args || []).unshift($e);\n                this.$el.trigger.apply(this.$el, args);\n                return $e;\n            },\n            before: function(type) {\n                var args, $e;\n                args = [].slice.call(arguments, 1);\n                $e = this._trigger(\"before\" + type, args);\n                return $e.isDefaultPrevented();\n            },\n            trigger: function(type) {\n                var deprecatedType;\n                this._trigger(type, [].slice.call(arguments, 1));\n                if (deprecatedType = deprecationMap[type]) {\n                    this._trigger(deprecatedType, [].slice.call(arguments, 1));\n                }\n            }\n        });\n        return EventBus;\n    }();\n    var EventEmitter = function() {\n        \"use strict\";\n        var splitter = /\\s+/, nextTick = getNextTick();\n        return {\n            onSync: onSync,\n            onAsync: onAsync,\n            off: off,\n            trigger: trigger\n        };\n        function on(method, types, cb, context) {\n            var type;\n            if (!cb) {\n                return this;\n            }\n            types = types.split(splitter);\n            cb = context ? bindContext(cb, context) : cb;\n            this._callbacks = this._callbacks || {};\n            while (type = types.shift()) {\n                this._callbacks[type] = this._callbacks[type] || {\n                    sync: [],\n                    async: []\n                };\n                this._callbacks[type][method].push(cb);\n            }\n            return this;\n        }\n        function onAsync(types, cb, context) {\n            return on.call(this, \"async\", types, cb, context);\n        }\n        function onSync(types, cb, context) {\n            return on.call(this, \"sync\", types, cb, context);\n        }\n        function off(types) {\n            var type;\n            if (!this._callbacks) {\n                return this;\n            }\n            types = types.split(splitter);\n            while (type = types.shift()) {\n                delete this._callbacks[type];\n            }\n            return this;\n        }\n        function trigger(types) {\n            var type, callbacks, args, syncFlush, asyncFlush;\n            if (!this._callbacks) {\n                return this;\n            }\n            types = types.split(splitter);\n            args = [].slice.call(arguments, 1);\n            while ((type = types.shift()) && (callbacks = this._callbacks[type])) {\n                syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));\n                asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));\n                syncFlush() && nextTick(asyncFlush);\n            }\n            return this;\n        }\n        function getFlush(callbacks, context, args) {\n            return flush;\n            function flush() {\n                var cancelled;\n                for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {\n                    cancelled = callbacks[i].apply(context, args) === false;\n                }\n                return !cancelled;\n            }\n        }\n        function getNextTick() {\n            var nextTickFn;\n            if (window.setImmediate) {\n                nextTickFn = function nextTickSetImmediate(fn) {\n                    setImmediate(function() {\n                        fn();\n                    });\n                };\n            } else {\n                nextTickFn = function nextTickSetTimeout(fn) {\n                    setTimeout(function() {\n                        fn();\n                    }, 0);\n                };\n            }\n            return nextTickFn;\n        }\n        function bindContext(fn, context) {\n            return fn.bind ? fn.bind(context) : function() {\n                fn.apply(context, [].slice.call(arguments, 0));\n            };\n        }\n    }();\n    var highlight = function(doc) {\n        \"use strict\";\n        var defaults = {\n            node: null,\n            pattern: null,\n            tagName: \"strong\",\n            className: null,\n            wordsOnly: false,\n            caseSensitive: false\n        };\n        return function hightlight(o) {\n            var regex;\n            o = _.mixin({}, defaults, o);\n            if (!o.node || !o.pattern) {\n                return;\n            }\n            o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ];\n            regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly);\n            traverse(o.node, hightlightTextNode);\n            function hightlightTextNode(textNode) {\n                var match, patternNode, wrapperNode;\n                if (match = regex.exec(textNode.data)) {\n                    wrapperNode = doc.createElement(o.tagName);\n                    o.className && (wrapperNode.className = o.className);\n                    patternNode = textNode.splitText(match.index);\n                    patternNode.splitText(match[0].length);\n                    wrapperNode.appendChild(patternNode.cloneNode(true));\n                    textNode.parentNode.replaceChild(wrapperNode, patternNode);\n                }\n                return !!match;\n            }\n            function traverse(el, hightlightTextNode) {\n                var childNode, TEXT_NODE_TYPE = 3;\n                for (var i = 0; i < el.childNodes.length; i++) {\n                    childNode = el.childNodes[i];\n                    if (childNode.nodeType === TEXT_NODE_TYPE) {\n                        i += hightlightTextNode(childNode) ? 1 : 0;\n                    } else {\n                        traverse(childNode, hightlightTextNode);\n                    }\n                }\n            }\n        };\n        function getRegex(patterns, caseSensitive, wordsOnly) {\n            var escapedPatterns = [], regexStr;\n            for (var i = 0, len = patterns.length; i < len; i++) {\n                escapedPatterns.push(_.escapeRegExChars(patterns[i]));\n            }\n            regexStr = wordsOnly ? \"\\\\b(\" + escapedPatterns.join(\"|\") + \")\\\\b\" : \"(\" + escapedPatterns.join(\"|\") + \")\";\n            return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, \"i\");\n        }\n    }(window.document);\n    var Input = function() {\n        \"use strict\";\n        var specialKeyCodeMap;\n        specialKeyCodeMap = {\n            9: \"tab\",\n            27: \"esc\",\n            37: \"left\",\n            39: \"right\",\n            13: \"enter\",\n            38: \"up\",\n            40: \"down\"\n        };\n        function Input(o, www) {\n            o = o || {};\n            if (!o.input) {\n                $.error(\"input is missing\");\n            }\n            www.mixin(this);\n            this.$hint = $(o.hint);\n            this.$input = $(o.input);\n            this.query = this.$input.val();\n            this.queryWhenFocused = this.hasFocus() ? this.query : null;\n            this.$overflowHelper = buildOverflowHelper(this.$input);\n            this._checkLanguageDirection();\n            if (this.$hint.length === 0) {\n                this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;\n            }\n        }\n        Input.normalizeQuery = function(str) {\n            return _.toStr(str).replace(/^\\s*/g, \"\").replace(/\\s{2,}/g, \" \");\n        };\n        _.mixin(Input.prototype, EventEmitter, {\n            _onBlur: function onBlur() {\n                this.resetInputValue();\n                this.trigger(\"blurred\");\n            },\n            _onFocus: function onFocus() {\n                this.queryWhenFocused = this.query;\n                this.trigger(\"focused\");\n            },\n            _onKeydown: function onKeydown($e) {\n                var keyName = specialKeyCodeMap[$e.which || $e.keyCode];\n                this._managePreventDefault(keyName, $e);\n                if (keyName && this._shouldTrigger(keyName, $e)) {\n                    this.trigger(keyName + \"Keyed\", $e);\n                }\n            },\n            _onInput: function onInput() {\n                this._setQuery(this.getInputValue());\n                this.clearHintIfInvalid();\n                this._checkLanguageDirection();\n            },\n            _managePreventDefault: function managePreventDefault(keyName, $e) {\n                var preventDefault;\n                switch (keyName) {\n                  case \"up\":\n                  case \"down\":\n                    preventDefault = !withModifier($e);\n                    break;\n\n                  default:\n                    preventDefault = false;\n                }\n                preventDefault && $e.preventDefault();\n            },\n            _shouldTrigger: function shouldTrigger(keyName, $e) {\n                var trigger;\n                switch (keyName) {\n                  case \"tab\":\n                    trigger = !withModifier($e);\n                    break;\n\n                  default:\n                    trigger = true;\n                }\n                return trigger;\n            },\n            _checkLanguageDirection: function checkLanguageDirection() {\n                var dir = (this.$input.css(\"direction\") || \"ltr\").toLowerCase();\n                if (this.dir !== dir) {\n                    this.dir = dir;\n                    this.$hint.attr(\"dir\", dir);\n                    this.trigger(\"langDirChanged\", dir);\n                }\n            },\n            _setQuery: function setQuery(val, silent) {\n                var areEquivalent, hasDifferentWhitespace;\n                areEquivalent = areQueriesEquivalent(val, this.query);\n                hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;\n                this.query = val;\n                if (!silent && !areEquivalent) {\n                    this.trigger(\"queryChanged\", this.query);\n                } else if (!silent && hasDifferentWhitespace) {\n                    this.trigger(\"whitespaceChanged\", this.query);\n                }\n            },\n            bind: function() {\n                var that = this, onBlur, onFocus, onKeydown, onInput;\n                onBlur = _.bind(this._onBlur, this);\n                onFocus = _.bind(this._onFocus, this);\n                onKeydown = _.bind(this._onKeydown, this);\n                onInput = _.bind(this._onInput, this);\n                this.$input.on(\"blur.tt\", onBlur).on(\"focus.tt\", onFocus).on(\"keydown.tt\", onKeydown);\n                if (!_.isMsie() || _.isMsie() > 9) {\n                    this.$input.on(\"input.tt\", onInput);\n                } else {\n                    this.$input.on(\"keydown.tt keypress.tt cut.tt paste.tt\", function($e) {\n                        if (specialKeyCodeMap[$e.which || $e.keyCode]) {\n                            return;\n                        }\n                        _.defer(_.bind(that._onInput, that, $e));\n                    });\n                }\n                return this;\n            },\n            focus: function focus() {\n                this.$input.focus();\n            },\n            blur: function blur() {\n                this.$input.blur();\n            },\n            getLangDir: function getLangDir() {\n                return this.dir;\n            },\n            getQuery: function getQuery() {\n                return this.query || \"\";\n            },\n            setQuery: function setQuery(val, silent) {\n                this.setInputValue(val);\n                this._setQuery(val, silent);\n            },\n            hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {\n                return this.query !== this.queryWhenFocused;\n            },\n            getInputValue: function getInputValue() {\n                return this.$input.val();\n            },\n            setInputValue: function setInputValue(value) {\n                this.$input.val(value);\n                this.clearHintIfInvalid();\n                this._checkLanguageDirection();\n            },\n            resetInputValue: function resetInputValue() {\n                this.setInputValue(this.query);\n            },\n            getHint: function getHint() {\n                return this.$hint.val();\n            },\n            setHint: function setHint(value) {\n                this.$hint.val(value);\n            },\n            clearHint: function clearHint() {\n                this.setHint(\"\");\n            },\n            clearHintIfInvalid: function clearHintIfInvalid() {\n                var val, hint, valIsPrefixOfHint, isValid;\n                val = this.getInputValue();\n                hint = this.getHint();\n                valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;\n                isValid = val !== \"\" && valIsPrefixOfHint && !this.hasOverflow();\n                !isValid && this.clearHint();\n            },\n            hasFocus: function hasFocus() {\n                return this.$input.is(\":focus\");\n            },\n            hasOverflow: function hasOverflow() {\n                var constraint = this.$input.width() - 2;\n                this.$overflowHelper.text(this.getInputValue());\n                return this.$overflowHelper.width() >= constraint;\n            },\n            isCursorAtEnd: function() {\n                var valueLength, selectionStart, range;\n                valueLength = this.$input.val().length;\n                selectionStart = this.$input[0].selectionStart;\n                if (_.isNumber(selectionStart)) {\n                    return selectionStart === valueLength;\n                } else if (document.selection) {\n                    range = document.selection.createRange();\n                    range.moveStart(\"character\", -valueLength);\n                    return valueLength === range.text.length;\n                }\n                return true;\n            },\n            destroy: function destroy() {\n                this.$hint.off(\".tt\");\n                this.$input.off(\".tt\");\n                this.$overflowHelper.remove();\n                this.$hint = this.$input = this.$overflowHelper = $(\"<div>\");\n            }\n        });\n        return Input;\n        function buildOverflowHelper($input) {\n            return $('<pre aria-hidden=\"true\"></pre>').css({\n                position: \"absolute\",\n                visibility: \"hidden\",\n                whiteSpace: \"pre\",\n                fontFamily: $input.css(\"font-family\"),\n                fontSize: $input.css(\"font-size\"),\n                fontStyle: $input.css(\"font-style\"),\n                fontVariant: $input.css(\"font-variant\"),\n                fontWeight: $input.css(\"font-weight\"),\n                wordSpacing: $input.css(\"word-spacing\"),\n                letterSpacing: $input.css(\"letter-spacing\"),\n                textIndent: $input.css(\"text-indent\"),\n                textRendering: $input.css(\"text-rendering\"),\n                textTransform: $input.css(\"text-transform\")\n            }).insertAfter($input);\n        }\n        function areQueriesEquivalent(a, b) {\n            return Input.normalizeQuery(a) === Input.normalizeQuery(b);\n        }\n        function withModifier($e) {\n            return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;\n        }\n    }();\n    var Dataset = function() {\n        \"use strict\";\n        var keys, nameGenerator;\n        keys = {\n            val: \"tt-selectable-display\",\n            obj: \"tt-selectable-object\"\n        };\n        nameGenerator = _.getIdGenerator();\n        function Dataset(o, www) {\n            o = o || {};\n            o.templates = o.templates || {};\n            o.templates.notFound = o.templates.notFound || o.templates.empty;\n            if (!o.source) {\n                $.error(\"missing source\");\n            }\n            if (!o.node) {\n                $.error(\"missing node\");\n            }\n            if (o.name && !isValidName(o.name)) {\n                $.error(\"invalid dataset name: \" + o.name);\n            }\n            www.mixin(this);\n            this.highlight = !!o.highlight;\n            this.name = o.name || nameGenerator();\n            this.limit = o.limit || 5;\n            this.displayFn = getDisplayFn(o.display || o.displayKey);\n            this.templates = getTemplates(o.templates, this.displayFn);\n            this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;\n            this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;\n            this._resetLastSuggestion();\n            this.$el = $(o.node).addClass(this.classes.dataset).addClass(this.classes.dataset + \"-\" + this.name);\n        }\n        Dataset.extractData = function extractData(el) {\n            var $el = $(el);\n            if ($el.data(keys.obj)) {\n                return {\n                    val: $el.data(keys.val) || \"\",\n                    obj: $el.data(keys.obj) || null\n                };\n            }\n            return null;\n        };\n        _.mixin(Dataset.prototype, EventEmitter, {\n            _overwrite: function overwrite(query, suggestions) {\n                suggestions = suggestions || [];\n                if (suggestions.length) {\n                    this._renderSuggestions(query, suggestions);\n                } else if (this.async && this.templates.pending) {\n                    this._renderPending(query);\n                } else if (!this.async && this.templates.notFound) {\n                    this._renderNotFound(query);\n                } else {\n                    this._empty();\n                }\n                this.trigger(\"rendered\", this.name, suggestions, false);\n            },\n            _append: function append(query, suggestions) {\n                suggestions = suggestions || [];\n                if (suggestions.length && this.$lastSuggestion.length) {\n                    this._appendSuggestions(query, suggestions);\n                } else if (suggestions.length) {\n                    this._renderSuggestions(query, suggestions);\n                } else if (!this.$lastSuggestion.length && this.templates.notFound) {\n                    this._renderNotFound(query);\n                }\n                this.trigger(\"rendered\", this.name, suggestions, true);\n            },\n            _renderSuggestions: function renderSuggestions(query, suggestions) {\n                var $fragment;\n                $fragment = this._getSuggestionsFragment(query, suggestions);\n                this.$lastSuggestion = $fragment.children().last();\n                this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));\n            },\n            _appendSuggestions: function appendSuggestions(query, suggestions) {\n                var $fragment, $lastSuggestion;\n                $fragment = this._getSuggestionsFragment(query, suggestions);\n                $lastSuggestion = $fragment.children().last();\n                this.$lastSuggestion.after($fragment);\n                this.$lastSuggestion = $lastSuggestion;\n            },\n            _renderPending: function renderPending(query) {\n                var template = this.templates.pending;\n                this._resetLastSuggestion();\n                template && this.$el.html(template({\n                    query: query,\n                    dataset: this.name\n                }));\n            },\n            _renderNotFound: function renderNotFound(query) {\n                var template = this.templates.notFound;\n                this._resetLastSuggestion();\n                template && this.$el.html(template({\n                    query: query,\n                    dataset: this.name\n                }));\n            },\n            _empty: function empty() {\n                this.$el.empty();\n                this._resetLastSuggestion();\n            },\n            _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {\n                var that = this, fragment;\n                fragment = document.createDocumentFragment();\n                _.each(suggestions, function getSuggestionNode(suggestion) {\n                    var $el, context;\n                    context = that._injectQuery(query, suggestion);\n                    $el = $(that.templates.suggestion(context)).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + \" \" + that.classes.selectable);\n                    fragment.appendChild($el[0]);\n                });\n                this.highlight && highlight({\n                    className: this.classes.highlight,\n                    node: fragment,\n                    pattern: query\n                });\n                return $(fragment);\n            },\n            _getFooter: function getFooter(query, suggestions) {\n                return this.templates.footer ? this.templates.footer({\n                    query: query,\n                    suggestions: suggestions,\n                    dataset: this.name\n                }) : null;\n            },\n            _getHeader: function getHeader(query, suggestions) {\n                return this.templates.header ? this.templates.header({\n                    query: query,\n                    suggestions: suggestions,\n                    dataset: this.name\n                }) : null;\n            },\n            _resetLastSuggestion: function resetLastSuggestion() {\n                this.$lastSuggestion = $();\n            },\n            _injectQuery: function injectQuery(query, obj) {\n                return _.isObject(obj) ? _.mixin({\n                    _query: query\n                }, obj) : obj;\n            },\n            update: function update(query) {\n                var that = this, canceled = false, syncCalled = false, rendered = 0;\n                this.cancel();\n                this.cancel = function cancel() {\n                    canceled = true;\n                    that.cancel = $.noop;\n                    that.async && that.trigger(\"asyncCanceled\", query);\n                };\n                this.source(query, sync, async);\n                !syncCalled && sync([]);\n                function sync(suggestions) {\n                    if (syncCalled) {\n                        return;\n                    }\n                    syncCalled = true;\n                    suggestions = (suggestions || []).slice(0, that.limit);\n                    rendered = suggestions.length;\n                    that._overwrite(query, suggestions);\n                    if (rendered < that.limit && that.async) {\n                        that.trigger(\"asyncRequested\", query);\n                    }\n                }\n                function async(suggestions) {\n                    suggestions = suggestions || [];\n                    if (!canceled && rendered < that.limit) {\n                        that.cancel = $.noop;\n                        rendered += suggestions.length;\n                        that._append(query, suggestions.slice(0, that.limit - rendered));\n                        that.async && that.trigger(\"asyncReceived\", query);\n                    }\n                }\n            },\n            cancel: $.noop,\n            clear: function clear() {\n                this._empty();\n                this.cancel();\n                this.trigger(\"cleared\");\n            },\n            isEmpty: function isEmpty() {\n                return this.$el.is(\":empty\");\n            },\n            destroy: function destroy() {\n                this.$el = $(\"<div>\");\n            }\n        });\n        return Dataset;\n        function getDisplayFn(display) {\n            display = display || _.stringify;\n            return _.isFunction(display) ? display : displayFn;\n            function displayFn(obj) {\n                return obj[display];\n            }\n        }\n        function getTemplates(templates, displayFn) {\n            return {\n                notFound: templates.notFound && _.templatify(templates.notFound),\n                pending: templates.pending && _.templatify(templates.pending),\n                header: templates.header && _.templatify(templates.header),\n                footer: templates.footer && _.templatify(templates.footer),\n                suggestion: templates.suggestion || suggestionTemplate\n            };\n            function suggestionTemplate(context) {\n                return $(\"<div>\").text(displayFn(context));\n            }\n        }\n        function isValidName(str) {\n            return /^[_a-zA-Z0-9-]+$/.test(str);\n        }\n    }();\n    var Menu = function() {\n        \"use strict\";\n        function Menu(o, www) {\n            var that = this;\n            o = o || {};\n            if (!o.node) {\n                $.error(\"node is required\");\n            }\n            www.mixin(this);\n            this.$node = $(o.node);\n            this.query = null;\n            this.datasets = _.map(o.datasets, initializeDataset);\n            function initializeDataset(oDataset) {\n                var node = that.$node.find(oDataset.node).first();\n                oDataset.node = node.length ? node : $(\"<div>\").appendTo(that.$node);\n                return new Dataset(oDataset, www);\n            }\n        }\n        _.mixin(Menu.prototype, EventEmitter, {\n            _onSelectableClick: function onSelectableClick($e) {\n                this.trigger(\"selectableClicked\", $($e.currentTarget));\n            },\n            _onRendered: function onRendered(type, dataset, suggestions, async) {\n                this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\n                this.trigger(\"datasetRendered\", dataset, suggestions, async);\n            },\n            _onCleared: function onCleared() {\n                this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\n                this.trigger(\"datasetCleared\");\n            },\n            _propagate: function propagate() {\n                this.trigger.apply(this, arguments);\n            },\n            _allDatasetsEmpty: function allDatasetsEmpty() {\n                return _.every(this.datasets, isDatasetEmpty);\n                function isDatasetEmpty(dataset) {\n                    return dataset.isEmpty();\n                }\n            },\n            _getSelectables: function getSelectables() {\n                return this.$node.find(this.selectors.selectable);\n            },\n            _removeCursor: function _removeCursor() {\n                var $selectable = this.getActiveSelectable();\n                $selectable && $selectable.removeClass(this.classes.cursor);\n            },\n            _ensureVisible: function ensureVisible($el) {\n                var elTop, elBottom, nodeScrollTop, nodeHeight;\n                elTop = $el.position().top;\n                elBottom = elTop + $el.outerHeight(true);\n                nodeScrollTop = this.$node.scrollTop();\n                nodeHeight = this.$node.height() + parseInt(this.$node.css(\"paddingTop\"), 10) + parseInt(this.$node.css(\"paddingBottom\"), 10);\n                if (elTop < 0) {\n                    this.$node.scrollTop(nodeScrollTop + elTop);\n                } else if (nodeHeight < elBottom) {\n                    this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));\n                }\n            },\n            bind: function() {\n                var that = this, onSelectableClick;\n                onSelectableClick = _.bind(this._onSelectableClick, this);\n                this.$node.on(\"click.tt\", this.selectors.selectable, onSelectableClick);\n                _.each(this.datasets, function(dataset) {\n                    dataset.onSync(\"asyncRequested\", that._propagate, that).onSync(\"asyncCanceled\", that._propagate, that).onSync(\"asyncReceived\", that._propagate, that).onSync(\"rendered\", that._onRendered, that).onSync(\"cleared\", that._onCleared, that);\n                });\n                return this;\n            },\n            isOpen: function isOpen() {\n                return this.$node.hasClass(this.classes.open);\n            },\n            open: function open() {\n                this.$node.addClass(this.classes.open);\n            },\n            close: function close() {\n                this.$node.removeClass(this.classes.open);\n                this._removeCursor();\n            },\n            setLanguageDirection: function setLanguageDirection(dir) {\n                this.$node.attr(\"dir\", dir);\n            },\n            selectableRelativeToCursor: function selectableRelativeToCursor(delta) {\n                var $selectables, $oldCursor, oldIndex, newIndex;\n                $oldCursor = this.getActiveSelectable();\n                $selectables = this._getSelectables();\n                oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;\n                newIndex = oldIndex + delta;\n                newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;\n                newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;\n                return newIndex === -1 ? null : $selectables.eq(newIndex);\n            },\n            setCursor: function setCursor($selectable) {\n                this._removeCursor();\n                if ($selectable = $selectable && $selectable.first()) {\n                    $selectable.addClass(this.classes.cursor);\n                    this._ensureVisible($selectable);\n                }\n            },\n            getSelectableData: function getSelectableData($el) {\n                return $el && $el.length ? Dataset.extractData($el) : null;\n            },\n            getActiveSelectable: function getActiveSelectable() {\n                var $selectable = this._getSelectables().filter(this.selectors.cursor).first();\n                return $selectable.length ? $selectable : null;\n            },\n            getTopSelectable: function getTopSelectable() {\n                var $selectable = this._getSelectables().first();\n                return $selectable.length ? $selectable : null;\n            },\n            update: function update(query) {\n                var isValidUpdate = query !== this.query;\n                if (isValidUpdate) {\n                    this.query = query;\n                    _.each(this.datasets, updateDataset);\n                }\n                return isValidUpdate;\n                function updateDataset(dataset) {\n                    dataset.update(query);\n                }\n            },\n            empty: function empty() {\n                _.each(this.datasets, clearDataset);\n                this.query = null;\n                this.$node.addClass(this.classes.empty);\n                function clearDataset(dataset) {\n                    dataset.clear();\n                }\n            },\n            destroy: function destroy() {\n                this.$node.off(\".tt\");\n                this.$node = $(\"<div>\");\n                _.each(this.datasets, destroyDataset);\n                function destroyDataset(dataset) {\n                    dataset.destroy();\n                }\n            }\n        });\n        return Menu;\n    }();\n    var DefaultMenu = function() {\n        \"use strict\";\n        var s = Menu.prototype;\n        function DefaultMenu() {\n            Menu.apply(this, [].slice.call(arguments, 0));\n        }\n        _.mixin(DefaultMenu.prototype, Menu.prototype, {\n            open: function open() {\n                !this._allDatasetsEmpty() && this._show();\n                return s.open.apply(this, [].slice.call(arguments, 0));\n            },\n            close: function close() {\n                this._hide();\n                return s.close.apply(this, [].slice.call(arguments, 0));\n            },\n            _onRendered: function onRendered() {\n                if (this._allDatasetsEmpty()) {\n                    this._hide();\n                } else {\n                    this.isOpen() && this._show();\n                }\n                return s._onRendered.apply(this, [].slice.call(arguments, 0));\n            },\n            _onCleared: function onCleared() {\n                if (this._allDatasetsEmpty()) {\n                    this._hide();\n                } else {\n                    this.isOpen() && this._show();\n                }\n                return s._onCleared.apply(this, [].slice.call(arguments, 0));\n            },\n            setLanguageDirection: function setLanguageDirection(dir) {\n                this.$node.css(dir === \"ltr\" ? this.css.ltr : this.css.rtl);\n                return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));\n            },\n            _hide: function hide() {\n                this.$node.hide();\n            },\n            _show: function show() {\n                this.$node.css(\"display\", \"block\");\n            }\n        });\n        return DefaultMenu;\n    }();\n    var Typeahead = function() {\n        \"use strict\";\n        function Typeahead(o, www) {\n            var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;\n            o = o || {};\n            if (!o.input) {\n                $.error(\"missing input\");\n            }\n            if (!o.menu) {\n                $.error(\"missing menu\");\n            }\n            if (!o.eventBus) {\n                $.error(\"missing event bus\");\n            }\n            www.mixin(this);\n            this.eventBus = o.eventBus;\n            this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;\n            this.input = o.input;\n            this.menu = o.menu;\n            this.enabled = true;\n            this.active = false;\n            this.input.hasFocus() && this.activate();\n            this.dir = this.input.getLangDir();\n            this._hacks();\n            this.menu.bind().onSync(\"selectableClicked\", this._onSelectableClicked, this).onSync(\"asyncRequested\", this._onAsyncRequested, this).onSync(\"asyncCanceled\", this._onAsyncCanceled, this).onSync(\"asyncReceived\", this._onAsyncReceived, this).onSync(\"datasetRendered\", this._onDatasetRendered, this).onSync(\"datasetCleared\", this._onDatasetCleared, this);\n            onFocused = c(this, \"activate\", \"open\", \"_onFocused\");\n            onBlurred = c(this, \"deactivate\", \"_onBlurred\");\n            onEnterKeyed = c(this, \"isActive\", \"isOpen\", \"_onEnterKeyed\");\n            onTabKeyed = c(this, \"isActive\", \"isOpen\", \"_onTabKeyed\");\n            onEscKeyed = c(this, \"isActive\", \"_onEscKeyed\");\n            onUpKeyed = c(this, \"isActive\", \"open\", \"_onUpKeyed\");\n            onDownKeyed = c(this, \"isActive\", \"open\", \"_onDownKeyed\");\n            onLeftKeyed = c(this, \"isActive\", \"isOpen\", \"_onLeftKeyed\");\n            onRightKeyed = c(this, \"isActive\", \"isOpen\", \"_onRightKeyed\");\n            onQueryChanged = c(this, \"_openIfActive\", \"_onQueryChanged\");\n            onWhitespaceChanged = c(this, \"_openIfActive\", \"_onWhitespaceChanged\");\n            this.input.bind().onSync(\"focused\", onFocused, this).onSync(\"blurred\", onBlurred, this).onSync(\"enterKeyed\", onEnterKeyed, this).onSync(\"tabKeyed\", onTabKeyed, this).onSync(\"escKeyed\", onEscKeyed, this).onSync(\"upKeyed\", onUpKeyed, this).onSync(\"downKeyed\", onDownKeyed, this).onSync(\"leftKeyed\", onLeftKeyed, this).onSync(\"rightKeyed\", onRightKeyed, this).onSync(\"queryChanged\", onQueryChanged, this).onSync(\"whitespaceChanged\", onWhitespaceChanged, this).onSync(\"langDirChanged\", this._onLangDirChanged, this);\n        }\n        _.mixin(Typeahead.prototype, {\n            _hacks: function hacks() {\n                var $input, $menu;\n                $input = this.input.$input || $(\"<div>\");\n                $menu = this.menu.$node || $(\"<div>\");\n                $input.on(\"blur.tt\", function($e) {\n                    var active, isActive, hasActive;\n                    active = document.activeElement;\n                    isActive = $menu.is(active);\n                    hasActive = $menu.has(active).length > 0;\n                    if (_.isMsie() && (isActive || hasActive)) {\n                        $e.preventDefault();\n                        $e.stopImmediatePropagation();\n                        _.defer(function() {\n                            $input.focus();\n                        });\n                    }\n                });\n                $menu.on(\"mousedown.tt\", function($e) {\n                    $e.preventDefault();\n                });\n            },\n            _onSelectableClicked: function onSelectableClicked(type, $el) {\n                this.select($el);\n            },\n            _onDatasetCleared: function onDatasetCleared() {\n                this._updateHint();\n            },\n            _onDatasetRendered: function onDatasetRendered(type, dataset, suggestions, async) {\n                this._updateHint();\n                this.eventBus.trigger(\"render\", suggestions, async, dataset);\n            },\n            _onAsyncRequested: function onAsyncRequested(type, dataset, query) {\n                this.eventBus.trigger(\"asyncrequest\", query, dataset);\n            },\n            _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {\n                this.eventBus.trigger(\"asynccancel\", query, dataset);\n            },\n            _onAsyncReceived: function onAsyncReceived(type, dataset, query) {\n                this.eventBus.trigger(\"asyncreceive\", query, dataset);\n            },\n            _onFocused: function onFocused() {\n                this._minLengthMet() && this.menu.update(this.input.getQuery());\n            },\n            _onBlurred: function onBlurred() {\n                if (this.input.hasQueryChangedSinceLastFocus()) {\n                    this.eventBus.trigger(\"change\", this.input.getQuery());\n                }\n            },\n            _onEnterKeyed: function onEnterKeyed(type, $e) {\n                var $selectable;\n                if ($selectable = this.menu.getActiveSelectable()) {\n                    this.select($selectable) && $e.preventDefault();\n                }\n            },\n            _onTabKeyed: function onTabKeyed(type, $e) {\n                var $selectable;\n                if ($selectable = this.menu.getActiveSelectable()) {\n                    this.select($selectable) && $e.preventDefault();\n                } else if ($selectable = this.menu.getTopSelectable()) {\n                    this.autocomplete($selectable) && $e.preventDefault();\n                }\n            },\n            _onEscKeyed: function onEscKeyed() {\n                this.close();\n            },\n            _onUpKeyed: function onUpKeyed() {\n                this.moveCursor(-1);\n            },\n            _onDownKeyed: function onDownKeyed() {\n                this.moveCursor(+1);\n            },\n            _onLeftKeyed: function onLeftKeyed() {\n                if (this.dir === \"rtl\" && this.input.isCursorAtEnd()) {\n                    this.autocomplete(this.menu.getTopSelectable());\n                }\n            },\n            _onRightKeyed: function onRightKeyed() {\n                if (this.dir === \"ltr\" && this.input.isCursorAtEnd()) {\n                    this.autocomplete(this.menu.getTopSelectable());\n                }\n            },\n            _onQueryChanged: function onQueryChanged(e, query) {\n                this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();\n            },\n            _onWhitespaceChanged: function onWhitespaceChanged() {\n                this._updateHint();\n            },\n            _onLangDirChanged: function onLangDirChanged(e, dir) {\n                if (this.dir !== dir) {\n                    this.dir = dir;\n                    this.menu.setLanguageDirection(dir);\n                }\n            },\n            _openIfActive: function openIfActive() {\n                this.isActive() && this.open();\n            },\n            _minLengthMet: function minLengthMet(query) {\n                query = _.isString(query) ? query : this.input.getQuery() || \"\";\n                return query.length >= this.minLength;\n            },\n            _updateHint: function updateHint() {\n                var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;\n                $selectable = this.menu.getTopSelectable();\n                data = this.menu.getSelectableData($selectable);\n                val = this.input.getInputValue();\n                if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {\n                    query = Input.normalizeQuery(val);\n                    escapedQuery = _.escapeRegExChars(query);\n                    frontMatchRegEx = new RegExp(\"^(?:\" + escapedQuery + \")(.+$)\", \"i\");\n                    match = frontMatchRegEx.exec(data.val);\n                    match && this.input.setHint(val + match[1]);\n                } else {\n                    this.input.clearHint();\n                }\n            },\n            isEnabled: function isEnabled() {\n                return this.enabled;\n            },\n            enable: function enable() {\n                this.enabled = true;\n            },\n            disable: function disable() {\n                this.enabled = false;\n            },\n            isActive: function isActive() {\n                return this.active;\n            },\n            activate: function activate() {\n                if (this.isActive()) {\n                    return true;\n                } else if (!this.isEnabled() || this.eventBus.before(\"active\")) {\n                    return false;\n                } else {\n                    this.active = true;\n                    this.eventBus.trigger(\"active\");\n                    return true;\n                }\n            },\n            deactivate: function deactivate() {\n                if (!this.isActive()) {\n                    return true;\n                } else if (this.eventBus.before(\"idle\")) {\n                    return false;\n                } else {\n                    this.active = false;\n                    this.close();\n                    this.eventBus.trigger(\"idle\");\n                    return true;\n                }\n            },\n            isOpen: function isOpen() {\n                return this.menu.isOpen();\n            },\n            open: function open() {\n                if (!this.isOpen() && !this.eventBus.before(\"open\")) {\n                    this.menu.open();\n                    this._updateHint();\n                    this.eventBus.trigger(\"open\");\n                }\n                return this.isOpen();\n            },\n            close: function close() {\n                if (this.isOpen() && !this.eventBus.before(\"close\")) {\n                    this.menu.close();\n                    this.input.clearHint();\n                    this.input.resetInputValue();\n                    this.eventBus.trigger(\"close\");\n                }\n                return !this.isOpen();\n            },\n            setVal: function setVal(val) {\n                this.input.setQuery(_.toStr(val));\n            },\n            getVal: function getVal() {\n                return this.input.getQuery();\n            },\n            select: function select($selectable) {\n                var data = this.menu.getSelectableData($selectable);\n                if (data && !this.eventBus.before(\"select\", data.obj)) {\n                    this.input.setQuery(data.val, true);\n                    this.eventBus.trigger(\"select\", data.obj);\n                    this.close();\n                    return true;\n                }\n                return false;\n            },\n            autocomplete: function autocomplete($selectable) {\n                var query, data, isValid;\n                query = this.input.getQuery();\n                data = this.menu.getSelectableData($selectable);\n                isValid = data && query !== data.val;\n                if (isValid && !this.eventBus.before(\"autocomplete\", data.obj)) {\n                    this.input.setQuery(data.val);\n                    this.eventBus.trigger(\"autocomplete\", data.obj);\n                    return true;\n                }\n                return false;\n            },\n            moveCursor: function moveCursor(delta) {\n                var query, $candidate, data, payload, cancelMove;\n                query = this.input.getQuery();\n                $candidate = this.menu.selectableRelativeToCursor(delta);\n                data = this.menu.getSelectableData($candidate);\n                payload = data ? data.obj : null;\n                cancelMove = this._minLengthMet() && this.menu.update(query);\n                if (!cancelMove && !this.eventBus.before(\"cursorchange\", payload)) {\n                    this.menu.setCursor($candidate);\n                    if (data) {\n                        this.input.setInputValue(data.val);\n                    } else {\n                        this.input.resetInputValue();\n                        this._updateHint();\n                    }\n                    this.eventBus.trigger(\"cursorchange\", payload);\n                    return true;\n                }\n                return false;\n            },\n            destroy: function destroy() {\n                this.input.destroy();\n                this.menu.destroy();\n            }\n        });\n        return Typeahead;\n        function c(ctx) {\n            var methods = [].slice.call(arguments, 1);\n            return function() {\n                var args = [].slice.call(arguments);\n                _.each(methods, function(method) {\n                    return ctx[method].apply(ctx, args);\n                });\n            };\n        }\n    }();\n    (function() {\n        \"use strict\";\n        var old, keys, methods;\n        old = $.fn.typeahead;\n        keys = {\n            www: \"tt-www\",\n            attrs: \"tt-attrs\",\n            typeahead: \"tt-typeahead\"\n        };\n        methods = {\n            initialize: function initialize(o, datasets) {\n                var www;\n                datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);\n                o = o || {};\n                www = WWW(o.classNames);\n                return this.each(attach);\n                function attach() {\n                    var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, typeahead, MenuConstructor;\n                    _.each(datasets, function(d) {\n                        d.highlight = !!o.highlight;\n                    });\n                    $input = $(this);\n                    $wrapper = $(www.html.wrapper);\n                    $hint = $elOrNull(o.hint);\n                    $menu = $elOrNull(o.menu);\n                    defaultHint = o.hint !== false && !$hint;\n                    defaultMenu = o.menu !== false && !$menu;\n                    defaultHint && ($hint = buildHintFromInput($input, www));\n                    defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));\n                    $hint && $hint.val(\"\");\n                    $input = prepInput($input, www);\n                    if (defaultHint || defaultMenu) {\n                        $wrapper.css(www.css.wrapper);\n                        $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);\n                        $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);\n                    }\n                    MenuConstructor = defaultMenu ? DefaultMenu : Menu;\n                    eventBus = new EventBus({\n                        el: $input\n                    });\n                    input = new Input({\n                        hint: $hint,\n                        input: $input\n                    }, www);\n                    menu = new MenuConstructor({\n                        node: $menu,\n                        datasets: datasets\n                    }, www);\n                    typeahead = new Typeahead({\n                        input: input,\n                        menu: menu,\n                        eventBus: eventBus,\n                        minLength: o.minLength\n                    }, www);\n                    $input.data(keys.www, www);\n                    $input.data(keys.typeahead, typeahead);\n                }\n            },\n            isEnabled: function isEnabled() {\n                var enabled;\n                ttEach(this.first(), function(t) {\n                    enabled = t.isEnabled();\n                });\n                return enabled;\n            },\n            enable: function enable() {\n                ttEach(this, function(t) {\n                    t.enable();\n                });\n                return this;\n            },\n            disable: function disable() {\n                ttEach(this, function(t) {\n                    t.disable();\n                });\n                return this;\n            },\n            isActive: function isActive() {\n                var active;\n                ttEach(this.first(), function(t) {\n                    active = t.isActive();\n                });\n                return active;\n            },\n            activate: function activate() {\n                ttEach(this, function(t) {\n                    t.activate();\n                });\n                return this;\n            },\n            deactivate: function deactivate() {\n                ttEach(this, function(t) {\n                    t.deactivate();\n                });\n                return this;\n            },\n            isOpen: function isOpen() {\n                var open;\n                ttEach(this.first(), function(t) {\n                    open = t.isOpen();\n                });\n                return open;\n            },\n            open: function open() {\n                ttEach(this, function(t) {\n                    t.open();\n                });\n                return this;\n            },\n            close: function close() {\n                ttEach(this, function(t) {\n                    t.close();\n                });\n                return this;\n            },\n            select: function select(el) {\n                var success = false, $el = $(el);\n                ttEach(this.first(), function(t) {\n                    success = t.select($el);\n                });\n                return success;\n            },\n            autocomplete: function autocomplete(el) {\n                var success = false, $el = $(el);\n                ttEach(this.first(), function(t) {\n                    success = t.autocomplete($el);\n                });\n                return success;\n            },\n            moveCursor: function moveCursoe(delta) {\n                var success = false;\n                ttEach(this.first(), function(t) {\n                    success = t.moveCursor(delta);\n                });\n                return success;\n            },\n            val: function val(newVal) {\n                var query;\n                if (!arguments.length) {\n                    ttEach(this.first(), function(t) {\n                        query = t.getVal();\n                    });\n                    return query;\n                } else {\n                    ttEach(this, function(t) {\n                        t.setVal(newVal);\n                    });\n                    return this;\n                }\n            },\n            destroy: function destroy() {\n                ttEach(this, function(typeahead, $input) {\n                    revert($input);\n                    typeahead.destroy();\n                });\n                return this;\n            }\n        };\n        $.fn.typeahead = function(method) {\n            if (methods[method]) {\n                return methods[method].apply(this, [].slice.call(arguments, 1));\n            } else {\n                return methods.initialize.apply(this, arguments);\n            }\n        };\n        $.fn.typeahead.noConflict = function noConflict() {\n            $.fn.typeahead = old;\n            return this;\n        };\n        function ttEach($els, fn) {\n            $els.each(function() {\n                var $input = $(this), typeahead;\n                (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);\n            });\n        }\n        function buildHintFromInput($input, www) {\n            return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop(\"readonly\", true).removeAttr(\"id name placeholder required\").attr({\n                autocomplete: \"off\",\n                spellcheck: \"false\",\n                tabindex: -1\n            });\n        }\n        function prepInput($input, www) {\n            $input.data(keys.attrs, {\n                dir: $input.attr(\"dir\"),\n                autocomplete: $input.attr(\"autocomplete\"),\n                spellcheck: $input.attr(\"spellcheck\"),\n                style: $input.attr(\"style\")\n            });\n            $input.addClass(www.classes.input).attr({\n                autocomplete: \"off\",\n                spellcheck: false\n            });\n            try {\n                !$input.attr(\"dir\") && $input.attr(\"dir\", \"auto\");\n            } catch (e) {}\n            return $input;\n        }\n        function getBackgroundStyles($el) {\n            return {\n                backgroundAttachment: $el.css(\"background-attachment\"),\n                backgroundClip: $el.css(\"background-clip\"),\n                backgroundColor: $el.css(\"background-color\"),\n                backgroundImage: $el.css(\"background-image\"),\n                backgroundOrigin: $el.css(\"background-origin\"),\n                backgroundPosition: $el.css(\"background-position\"),\n                backgroundRepeat: $el.css(\"background-repeat\"),\n                backgroundSize: $el.css(\"background-size\")\n            };\n        }\n        function revert($input) {\n            var www, $wrapper;\n            www = $input.data(keys.www);\n            $wrapper = $input.parent().filter(www.selectors.wrapper);\n            _.each($input.data(keys.attrs), function(val, key) {\n                _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);\n            });\n            $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);\n            if ($wrapper.length) {\n                $input.detach().insertAfter($wrapper);\n                $wrapper.remove();\n            }\n        }\n        function $elOrNull(obj) {\n            var isValid, $el;\n            isValid = _.isJQuery(obj) || _.isElement(obj);\n            $el = isValid ? $(obj).first() : [];\n            return $el.length ? $el : null;\n        }\n    })();\n});\ndefine(\"typeahead\", [\"jquery\"], (function (global) {\n    return function () {\n        var ret, fn;\n       fn = function ($) {\n\treturn require.s.contexts._.registry['typeahead.js'].factory($);\n      };\n        ret = fn.apply(global, arguments);\n        return ret;\n    };\n}(this)));\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2017, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Support the SWISH search box.  This we want to find:\n *\n *   - Predicates based on templates we also use for template completion\n *   - Source code (line)\t\t[TBD]\n *   - Saved programs by\n *     - Name\n *     - Tag\n *     - Description\t\t\t[TBD]\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('search',[ \"jquery\", \"config\", \"utils\", \"bloodhound\", \"typeahead\" ],\n       function($, config, utils, Bloodhound) {\n\n(function($) {\n  var pluginName = 'search';\n\n  /** @lends $.fn.search */\n  var methods = {\n    /**\n     * Turn Bootstrap search input into a typeahead widget\n     * @param {Object}  [options]\n     * @param {Boolean} [options.search=true] If false, merely use\n     * typeahead to fill a value.\n     */\n    _init: function(options) {\n      options = options||{};\n\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar query;\t\t\t/* current query */\n\n\t\t /*******************************\n\t\t *\t FILE COMPLETION\t*\n\t\t *******************************/\n\n\tvar files = new Bloodhound({\n\t\t\tname: \"files\",\n\t\t\tremote: { url: config.http.locations.swish_typeahead +\n\t\t\t\t       \"?set=file&q=%QUERY\",\n\t\t\t\t  wildcard: '%QUERY'\n\t\t\t},\n\t\t\tdatumTokenizer: fileTokenizer,\n\t\t\tqueryTokenizer: Bloodhound.tokenizers.whitespace\n\t               });\n\tfiles.initialize();\n\n\tfunction fileTokenizer(f) {\n\t  return (f.tags||[]).push(f.name);\n\t}\n\n\tfunction renderFile(f) {\n\t  function filetype(file) {\n\t    return file.split('.').pop();\n\t  }\n\t  function filebase(file) {\n\t    return file.split('.').slice(0,-1).join(\".\");\n\t  }\n\n\t  var str = \"<div class=\\\"tt-match file type-icon \"\n\t          + filetype(f.name)\n\t          + \"\\\">\"\n\t\t  + \"<span class=\\\"tt-label\\\">\"\n\t\t  + utils.htmlEncode(filebase(f.name));\n\t          + \"</span>\";\n\n\t  if ( f.tags ) {\n\t    str += \"<span class=\\\"tt-tags\\\">\";\n\t    for(var i=0; i<f.tags.length; i++) {\n\t      var tag = f.tags[i];\n\t      str += \"<span class=\\\"tt-tag\\\">\"\n\t\t   + utils.htmlEncode(tag)\n\t\t   + \"</span>\";\n\t    }\n\t    str += \"</span>\";\n\t  }\n\n\t  if ( f.title )\n\t    str += \"<div class=\\\"tt-title file\\\">\"\n\t\t + utils.htmlEncode(f.title)\n\t\t + \"</div>\";\n\t  str += \"</div>\";\n\n\t  return str;\n\t}\n\n\t\t /*******************************\n\t\t *     SEARCH STORE SOURCES\t*\n\t\t *******************************/\n\n\tvar storeContent = new Bloodhound({\n\t\t\t     name: \"store_content\",\n\t\t\t     limit: 20,\n\t\t\t     cache: false,\n\t\t\t     remote: {\n\t\t\t       url: config.http.locations.swish_typeahead +\n\t\t\t\t     \"?set=store_content&q=%QUERY\",\n\t\t\t       replace:bloodHoundURL\n\t\t\t     },\n\t\t\t     datumTokenizer: sourceLineTokenizer,\n\t\t\t     queryTokenizer: Bloodhound.tokenizers.whitespace\n\t                   });\n\tstoreContent.initialize();\n\n\tvar currentFile  = null;\n\tvar currentAlias = null;\n\tfunction renderStoreSourceLine(hit) {\n\t  var str = \"\";\n\n\t  if ( hit.file != currentFile || hit.alias != currentAlias ) {\n\t    var ext = hit.file.split('.').pop();\n\t    currentFile = hit.file;\n\t    currentAlias = hit.alias;\n\t    str = \"<div class=\\\"tt-file-header type-icon \"+ext+\"\\\">\"\n\t\t+ \"<span class=\\\"tt-path-file\\\">\"\n\t\t+ utils.htmlEncode(hit.file)\n\t\t+ \"</span>\"\n\t\t+ \"</div>\";\n\t  }\n\n\t  return str+renderSourceMatch(hit);\n\t}\n\n\t\t /*******************************\n\t\t *     SEARCH REMOTE SOURCES\t*\n\t\t *******************************/\n\n\tvar sources = new Bloodhound({\n\t\t\tname: \"source\",\n\t\t\tlimit: 15,\n\t\t\tcache: false,\n\t\t\tquery_cache_length: 1,\n\t\t\tremote: {\n\t\t\t  url: config.http.locations.swish_typeahead +\n\t\t\t\t\"?set=sources&q=%QUERY\",\n\t\t\t  replace: bloodHoundURL\n\t\t\t},\n\t\t\tdatumTokenizer: sourceLineTokenizer,\n\t\t\tqueryTokenizer: Bloodhound.tokenizers.whitespace\n\t               });\n\tsources.initialize();\n\n\tfunction sourceLineTokenizer(hit) {\n\t  return Bloodhound.tokenizers.whitespace(hit.text);\n\t}\n\n\tfunction renderSourceLine(hit) {\n\t  var str = \"\";\n\n\t  if ( hit.file != currentFile || hit.alias != currentAlias ) {\n\t    currentFile = hit.file;\n\t    currentAlias = hit.alias;\n\t    str = \"<div class=\\\"tt-file-header type-icon \"+hit.ext+\"\\\">\"\n\t        + \"<span class=\\\"tt-path-alias\\\">\"\n\t        + utils.htmlEncode(hit.alias)\n\t\t+ \"</span>(<span class=\\\"tt-path-file\\\">\"\n\t\t+ utils.htmlEncode(hit.file)\n\t\t+ \")</span>\"\n\t\t+ \"</div>\";\n\t  }\n\n\t  if ( hit.text )\n\t    str += renderSourceMatch(hit);\n\t  return str;\n\t}\n\n\n\t\t /*******************************\n\t\t *    PREDICATE COMPLETION\t*\n\t\t *******************************/\n\n\tfunction predicateMatcher(q, cb) {\n\t  var templates = config.swish.templates;\n\t  var matches = [];\n\t  var ql = q.split(\" \");\n\t  var pl = [];\n\n\t  for(var i=0; i<ql.length; i++)\n\t    pl.push({prefix:ql[i], regex:new RegExp(\"_\"+ql[i])});\n\n\t  for(var i=0; i<templates.length; i++) {\n\t    var templ = templates[i];\n\n\t    if ( templ.arity !== undefined ) {\n\t      for(var j=0, match=true; j<pl.length && match; j++) {\n\t\tif ( !(templ.name.startsWith(pl[j].prefix) ||\n\t\t       templ.name.match(pl[j].regex)) )\n\t\t  match=false;\n\t      }\n\t      if ( match )\n\t        matches.push(templ);\n\t    }\n\t  }\n\n\t  cb(matches);\n\t}\n\n\n\tfunction renderPredicate(p) {\n\t  var str = \"<div class=\\\"tt-match predicate\";\n\n\t  if ( p.type ) str += \" \" + p.type;\n\t  if ( p.mode ) str += \"\\\" title=\\\"\"\n                             + p.mode;\n\n\t  str += \"\\\">\"\n               + \"<span class=\\\"tt-label\\\">\"\n\t       + utils.htmlEncode(p.name)\n\t       + \"/\"\n\t       + p.arity\n\t       + \"</span>\";\n\n\t  if ( p.iso ) {\n\t    str += \"<span class=\\\"tt-tags\\\">\";\n\t    if ( p.iso )\n\t      str += \"<span class=\\\"tt-tag\\\">ISO</span>\";\n\t    str += \"</span>\";\n\t  }\n\n\t  if ( p.summary )\n\t    str += \"<div class=\\\"tt-title file\\\">\"\n\t\t + utils.htmlEncode(p.summary)\n\t\t + \"</div>\";\n\t  str += \"</div>\";\n\n\n\t  str += \"</div>\";\n\n\t  return str;\n\t}\n\n\t\t /*******************************\n\t\t *\t   SEARCH SOURCE\t*\n\t\t *******************************/\n\n\tvar sourceRE;\n\n\tfunction sourceMatcher(q, cb) {\n\t  query = q;\n\t  if ( q.length < 2 ) return [];\n\n\t  var matches = [];\n\t  var re = new RegExp(\"\\\\b\"+q, \"g\");\n\t  sourceRE = re;\n\n\t  $(\".prolog-editor\").each(function() {\n\t    var editor = this;\n\t    var m = $(editor).prologEditor('search', re, {max: 7});\n\n\t    for(var i=0; i<m.length; i++) {\n\t      m[i].editor = editor;\n\t      m[i].regex  = sourceRE;\n\t      matches.push(m[i]);\n\t    }\n\t  });\n\n\t  cb(matches);\n\t}\n\n\n\tfunction renderSourceMatch(hit) {\n\t  var text = hit.text;\n\t  var i;\n\n\t  if ( (i=text.search(sourceRE)) > 20 )\n\t    text = \"...\"+text.slice(i-17);\n\t  if ( text.length > 80 )\n\t    text = text.substring(0,80);\n\n\t  var str = \"<div class=\\\"tt-match source\\\">\"\n\t          + \"<span class=\\\"tt-line\\\">\"\n\t\t  + \"<span class=\\\"tt-lineno\\\">\"\n\t\t  + hit.line\n\t\t  + \"</span>\"\n\t\t  + \"<span class=\\\"tt-text\\\">\"\n\t\t  + utils.htmlEncode(text)\n\t          + \"</span>\"\n\t          + \"</span>\"\n\t\t  + \"</div>\";\n\n\t  return str;\n\t}\n\n\n\t\t /*******************************\n\t\t *\t       USERS\t\t*\n\t\t *******************************/\n\n\tvar users = new Bloodhound({\n\t\t\t     name: \"users\",\n\t\t\t     limit: 20,\n\t\t\t     cache: false,\n\t\t\t     remote: {\n\t\t\t       url: config.http.locations.swish_typeahead +\n\t\t\t\t     \"?set=user&q=%QUERY\",\n\t\t\t       replace:bloodHoundURL\n\t\t\t     },\n\t\t\t     datumTokenizer: sourceLineTokenizer,\n\t\t\t     queryTokenizer: Bloodhound.tokenizers.whitespace\n\t                   });\n\tusers.initialize();\n\n\tfunction renderUser(hit) {\n\t  function avatar(hit) {\n\t    if ( hit.avatar ) {\n\t      return '<img class=\"avatar\" src=\"'+encodeURI(hit.avatar)+'\">';\n\t    } else {\n\t      return \"\";\n\t    }\n\t  }\n\n\t  var str = '<div class=\"tt-match user\">'\n\t\t  + avatar(hit)\n\t\t  + '<span class=\"tt-label\">'\n\t\t  + utils.htmlEncode(hit.name)\n\t\t  + '</span>'\n\t\t  + '</div>';\n\n\t  return str;\n\t}\n\n\n\t\t /*******************************\n\t\t *\t      COMBINE\t\t*\n\t\t *******************************/\n\n\tvar typeaheadProperties = {\n\t  source:\t\t\t/* local source */\n\t  { name: \"source\",\n\t    display: 'text',\n\t    source: sourceMatcher,\n\t    templates: { suggestion: renderSourceMatch }\n\t  },\n\t  sources:\t\t\t/* remote sources */\n\t  { name: \"sources\",\n\t    display: 'file',\n\t    source: sources.ttAdapter(),\n\t    templates: { suggestion: renderSourceLine },\n\t    limit: 15\n\t  },\n\t  files:\t\t\t/* files in gitty on name and tags */\n\t  { name: \"files\",\n\t    display: 'name',\n\t    source: files.ttAdapter(),\n\t    templates: { suggestion: renderFile }\n\t  },\n\t  store_content:\t\t/* file content in gitty */\n\t  { name: \"store_content\",\n\t    display: 'file',\n\t    source: storeContent.ttAdapter(),\n\t    templates: { suggestion: renderStoreSourceLine }\n\t  },\n\t  predicates:\t\t\t/* built-in and library predicates */\n\t  { name: \"predicates\",\n\t    display: function(p) {\n\t      return p.name+\"/\"+p.arity;\n\t    },\n\t    source: predicateMatcher,\n\t    templates: { suggestion: renderPredicate }\n\t  },\n\t  users:\t\t\t/* Users (profiles) */\n\t  { name: \"users\",\n\t    display: \"name\",\n\t    source: users.ttAdapter(),\n\t    templates: { suggestion: renderUser }\n\t  }\n\t};\n\n\t// Get the actual query string exchanged between\n\t// typeahead and Bloodhound.\n\tvar of = typeaheadProperties.sources.source;\n\ttypeaheadProperties.sources.source = function(q, cb) {\n\t  currentFile = null;\n\t  currentAlias = null;\n\t  sourceRE = new RegExp(RegExp.escape(q));\n\t  return of(q, cb);\n\t}\n\n\t/**\n\t * Assemble the sources\n\t */\n\n\tfunction ttSources(from) {\n\t  var sources = [];\n\t  var src = from.replace(/\\s+/g, ' ').split(\" \");\n\n\t  for(var i=0; i<src.length; i++) {\n\t    sources.push(typeaheadProperties[src[i]]);\n\t  }\n\n\t  return sources;\n\t}\n\n\t\t /*******************************\n\t\t *\t     TYPEAHEAD\t\t*\n\t\t *******************************/\n\n\telem.typeahead({ minLength: 2,\n\t\t\t highlight: true\n\t\t       },\n\t\t       ttSources(elem.data(\"search-in\")))\n\t  .on('typeahead:selected typeahead:autocompleted',\n\t      function(ev, datum) {\n\n\t\tif ( options.search == false ) {\n\t\t  elem.data(\"json-value\", datum);\n\t\t} else {\n\t\t  if ( datum.type == \"store\" ) {\n\t\t    if ( datum.query ) {\n\t\t      datum.regex = new RegExp(RegExp.escape(datum.query), \"g\");\n\t\t      datum.showAllMatches = true;\n\t\t    }\n\t\t    $(ev.target).closest(\".swish\").swish('playFile', datum);\n\t\t  } else if ( datum.arity !== undefined ) {\n\t\t    $(\".swish-event-receiver\").trigger(\"pldoc\", datum);\n\t\t  } else if ( datum.editor !== undefined &&\n\t\t\t      datum.line !== undefined ) {\n\t\t    $(datum.editor).prologEditor('gotoLine', datum.line,\n\t\t\t\t\t\t { regex: datum.regex,\n\t\t\t\t\t\t   showAllMatches: true\n\t\t\t\t\t\t });\n\t\t  } else if ( datum.alias !== undefined ) {\n\t\t    var url = encodeURI(\"/\"+datum.alias+\n\t\t\t\t\t\"/\"+datum.file+\n\t\t\t\t\t\".\"+datum.ext);\n\t\t    var play = { url:url, line:datum.line };\n\n\t\t    if ( datum.query ) {\n\t\t      play.regex = new RegExp(RegExp.escape(datum.query), \"g\");\n\t\t      play.showAllMatches = true;\n\t\t    }\n\n\t\t    $(ev.target).closest(\".swish\").swish('playURL', play);\n\t\t  } else {\n\t\t    elem.data(\"json-value\", datum);\n\t\t    console.log(elem.data(\"json-value\"));\n\t\t  }\n\t\t}\n\t      });\n\n\tif ( options.search != false ) {\n\t  elem.closest(\"form\").submit(function(ev) {\n\t    var data = elem.data(\"json-value\");\n\t    var str  = elem.val();\n\n\t    if ( !(data && data.datum && data.datum.label == str) )\n\t      data = str;\n\n\t    elem.val(\"\");\n\t    elem.data(\"json-value\", null);\n\n\t    elem.search('search', data);\n\n\t    return false;\n\t  });\n\t}\n      });\n    },\n\n    /**\n     * Search for the a given query.\n     *\n     * @param {String|Object} q specifies the search target. If it is a\n     * string, no autocompletion was performed.  If it is an object, it\n     * is the object returned by Bloodhound\n     */\n    search: function(q) {\n      alert(\"Full search not yet implemented\\n\"+\n\t    \"Please select from auto completion list\");\n    }\n  }; // methods\n\n  function bloodHoundURL(url, query) {\n    var url = url.replace('%QUERY',\n\t\t\t  encodeURIComponent(query));\n    var match = $(\"label.active > input[name=smatch]\").val();\n    if ( match )\n      url += \"&match=\"+match;\n\n    return url;\n  }\n\n  /**\n   * <Class description>\n   *\n   * @class search\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.search = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\nRegExp.escape = function(string) {\n  return string.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')\n};\n\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// This is CodeMirror (https://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define('cm/lib/codemirror',factory) :\n  (global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n  // Kludges for bugs and behavior differences that can't be feature\n  // detected are enabled based on userAgent etc sniffing.\n  var userAgent = navigator.userAgent;\n  var platform = navigator.platform;\n\n  var gecko = /gecko\\/\\d/i.test(userAgent);\n  var ie_upto10 = /MSIE \\d/.test(userAgent);\n  var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n  var edge = /Edge\\/(\\d+)/.exec(userAgent);\n  var ie = ie_upto10 || ie_11up || edge;\n  var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n  var webkit = !edge && /WebKit\\//.test(userAgent);\n  var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n  var chrome = !edge && /Chrome\\//.test(userAgent);\n  var presto = /Opera\\//.test(userAgent);\n  var safari = /Apple Computer/.test(navigator.vendor);\n  var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n  var phantom = /PhantomJS/.test(userAgent);\n\n  var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent);\n  var android = /Android/.test(userAgent);\n  // This is woefully incomplete. Suggestions for alternative methods welcome.\n  var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n  var mac = ios || /Mac/.test(platform);\n  var chromeOS = /\\bCrOS\\b/.test(userAgent);\n  var windows = /win/i.test(platform);\n\n  var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n  if (presto_version) { presto_version = Number(presto_version[1]); }\n  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n  var captureRightClick = gecko || (ie && ie_version >= 9);\n\n  function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n  var rmClass = function(node, cls) {\n    var current = node.className;\n    var match = classTest(cls).exec(current);\n    if (match) {\n      var after = current.slice(match.index + match[0].length);\n      node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n    }\n  };\n\n  function removeChildren(e) {\n    for (var count = e.childNodes.length; count > 0; --count)\n      { e.removeChild(e.firstChild); }\n    return e\n  }\n\n  function removeChildrenAndAdd(parent, e) {\n    return removeChildren(parent).appendChild(e)\n  }\n\n  function elt(tag, content, className, style) {\n    var e = document.createElement(tag);\n    if (className) { e.className = className; }\n    if (style) { e.style.cssText = style; }\n    if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n    else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n    return e\n  }\n  // wrapper for elt, which removes the elt from the accessibility tree\n  function eltP(tag, content, className, style) {\n    var e = elt(tag, content, className, style);\n    e.setAttribute(\"role\", \"presentation\");\n    return e\n  }\n\n  var range;\n  if (document.createRange) { range = function(node, start, end, endNode) {\n    var r = document.createRange();\n    r.setEnd(endNode || node, end);\n    r.setStart(node, start);\n    return r\n  }; }\n  else { range = function(node, start, end) {\n    var r = document.body.createTextRange();\n    try { r.moveToElementText(node.parentNode); }\n    catch(e) { return r }\n    r.collapse(true);\n    r.moveEnd(\"character\", end);\n    r.moveStart(\"character\", start);\n    return r\n  }; }\n\n  function contains(parent, child) {\n    if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n      { child = child.parentNode; }\n    if (parent.contains)\n      { return parent.contains(child) }\n    do {\n      if (child.nodeType == 11) { child = child.host; }\n      if (child == parent) { return true }\n    } while (child = child.parentNode)\n  }\n\n  function activeElt() {\n    // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n    // IE < 10 will throw when accessed while the page is loading or in an iframe.\n    // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n    var activeElement;\n    try {\n      activeElement = document.activeElement;\n    } catch(e) {\n      activeElement = document.body || null;\n    }\n    while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n      { activeElement = activeElement.shadowRoot.activeElement; }\n    return activeElement\n  }\n\n  function addClass(node, cls) {\n    var current = node.className;\n    if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n  }\n  function joinClasses(a, b) {\n    var as = a.split(\" \");\n    for (var i = 0; i < as.length; i++)\n      { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n    return b\n  }\n\n  var selectInput = function(node) { node.select(); };\n  if (ios) // Mobile Safari apparently has a bug where select() is broken.\n    { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n  else if (ie) // Suppress mysterious IE10 errors\n    { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n  function bind(f) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    return function(){return f.apply(null, args)}\n  }\n\n  function copyObj(obj, target, overwrite) {\n    if (!target) { target = {}; }\n    for (var prop in obj)\n      { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n        { target[prop] = obj[prop]; } }\n    return target\n  }\n\n  // Counts the column offset in a string, taking tabs into account.\n  // Used mostly to find indentation.\n  function countColumn(string, end, tabSize, startIndex, startValue) {\n    if (end == null) {\n      end = string.search(/[^\\s\\u00a0]/);\n      if (end == -1) { end = string.length; }\n    }\n    for (var i = startIndex || 0, n = startValue || 0;;) {\n      var nextTab = string.indexOf(\"\\t\", i);\n      if (nextTab < 0 || nextTab >= end)\n        { return n + (end - i) }\n      n += nextTab - i;\n      n += tabSize - (n % tabSize);\n      i = nextTab + 1;\n    }\n  }\n\n  var Delayed = function() {this.id = null;};\n  Delayed.prototype.set = function (ms, f) {\n    clearTimeout(this.id);\n    this.id = setTimeout(f, ms);\n  };\n\n  function indexOf(array, elt) {\n    for (var i = 0; i < array.length; ++i)\n      { if (array[i] == elt) { return i } }\n    return -1\n  }\n\n  // Number of pixels added to scroller and sizer to hide scrollbar\n  var scrollerGap = 30;\n\n  // Returned or thrown by various protocols to signal 'I'm not\n  // handling this'.\n  var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n  // Reused option objects for setSelection & friends\n  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n  // The inverse of countColumn -- find the offset that corresponds to\n  // a particular column.\n  function findColumn(string, goal, tabSize) {\n    for (var pos = 0, col = 0;;) {\n      var nextTab = string.indexOf(\"\\t\", pos);\n      if (nextTab == -1) { nextTab = string.length; }\n      var skipped = nextTab - pos;\n      if (nextTab == string.length || col + skipped >= goal)\n        { return pos + Math.min(skipped, goal - col) }\n      col += nextTab - pos;\n      col += tabSize - (col % tabSize);\n      pos = nextTab + 1;\n      if (col >= goal) { return pos }\n    }\n  }\n\n  var spaceStrs = [\"\"];\n  function spaceStr(n) {\n    while (spaceStrs.length <= n)\n      { spaceStrs.push(lst(spaceStrs) + \" \"); }\n    return spaceStrs[n]\n  }\n\n  function lst(arr) { return arr[arr.length-1] }\n\n  function map(array, f) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n    return out\n  }\n\n  function insertSorted(array, value, score) {\n    var pos = 0, priority = score(value);\n    while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n    array.splice(pos, 0, value);\n  }\n\n  function nothing() {}\n\n  function createObj(base, props) {\n    var inst;\n    if (Object.create) {\n      inst = Object.create(base);\n    } else {\n      nothing.prototype = base;\n      inst = new nothing();\n    }\n    if (props) { copyObj(props, inst); }\n    return inst\n  }\n\n  var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n  function isWordCharBasic(ch) {\n    return /\\w/.test(ch) || ch > \"\\x80\" &&\n      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n  }\n  function isWordChar(ch, helper) {\n    if (!helper) { return isWordCharBasic(ch) }\n    if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n    return helper.test(ch)\n  }\n\n  function isEmpty(obj) {\n    for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n    return true\n  }\n\n  // Extending unicode characters. A series of a non-extending char +\n  // any number of extending chars is treated as a single unit as far\n  // as editing and measuring is concerned. This is not fully correct,\n  // since some scripts/fonts/browsers also treat other configurations\n  // of code points as a group.\n  var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n  // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n  function skipExtendingChars(str, pos, dir) {\n    while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n    return pos\n  }\n\n  // Returns the value from the range [`from`; `to`] that satisfies\n  // `pred` and is closest to `from`. Assumes that at least `to`\n  // satisfies `pred`. Supports `from` being greater than `to`.\n  function findFirst(pred, from, to) {\n    // At any point we are certain `to` satisfies `pred`, don't know\n    // whether `from` does.\n    var dir = from > to ? -1 : 1;\n    for (;;) {\n      if (from == to) { return from }\n      var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n      if (mid == from) { return pred(mid) ? from : to }\n      if (pred(mid)) { to = mid; }\n      else { from = mid + dir; }\n    }\n  }\n\n  // The display handles the DOM integration, both for input reading\n  // and content drawing. It holds references to DOM nodes and\n  // display-related state.\n\n  function Display(place, doc, input) {\n    var d = this;\n    this.input = input;\n\n    // Covers bottom-right square when both scrollbars are present.\n    d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n    d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Covers bottom of gutter when coverGutterNextToScrollbar is on\n    // and h scrollbar is present.\n    d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n    d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Will contain the actual code, positioned to cover the viewport.\n    d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n    // Elements are added to these to represent selection and cursors.\n    d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n    d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n    // A visibility: hidden element used to find the size of things.\n    d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n    // When lines outside of the viewport are measured, they are drawn in this.\n    d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n    // Wraps everything that needs to exist inside the vertically-padded coordinate system\n    d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n                      null, \"position: relative; outline: none\");\n    var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n    // Moved around its parent to cover visible view.\n    d.mover = elt(\"div\", [lines], null, \"position: relative\");\n    // Set to the height of the document, allowing scrolling.\n    d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n    d.sizerWidth = null;\n    // Behavior of elts with overflow: auto and padding is\n    // inconsistent across browsers. This is used to ensure the\n    // scrollable area is big enough.\n    d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n    // Will contain the gutters, if any.\n    d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n    d.lineGutter = null;\n    // Actual scrollable element.\n    d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n    d.scroller.setAttribute(\"tabIndex\", \"-1\");\n    // The element in which the editor lives.\n    d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n    if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n    if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n    if (place) {\n      if (place.appendChild) { place.appendChild(d.wrapper); }\n      else { place(d.wrapper); }\n    }\n\n    // Current rendered range (may be bigger than the view window).\n    d.viewFrom = d.viewTo = doc.first;\n    d.reportedViewFrom = d.reportedViewTo = doc.first;\n    // Information about the rendered lines.\n    d.view = [];\n    d.renderedView = null;\n    // Holds info about a single rendered line when it was rendered\n    // for measurement, while not in view.\n    d.externalMeasured = null;\n    // Empty space (in pixels) above the view\n    d.viewOffset = 0;\n    d.lastWrapHeight = d.lastWrapWidth = 0;\n    d.updateLineNumbers = null;\n\n    d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n    d.scrollbarsClipped = false;\n\n    // Used to only resize the line number gutter when necessary (when\n    // the amount of lines crosses a boundary that makes its width change)\n    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n    // Set to true when a non-horizontal-scrolling line widget is\n    // added. As an optimization, line widget aligning is skipped when\n    // this is false.\n    d.alignWidgets = false;\n\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n    // Tracks the maximum line length so that the horizontal scrollbar\n    // can be kept static when scrolling.\n    d.maxLine = null;\n    d.maxLineLength = 0;\n    d.maxLineChanged = false;\n\n    // Used for measuring wheel scrolling granularity\n    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n    // True when shift is held down.\n    d.shift = false;\n\n    // Used to track whether anything happened since the context menu\n    // was opened.\n    d.selForContextMenu = null;\n\n    d.activeTouch = null;\n\n    input.init(d);\n  }\n\n  // Find the line object corresponding to the given line number.\n  function getLine(doc, n) {\n    n -= doc.first;\n    if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n    var chunk = doc;\n    while (!chunk.lines) {\n      for (var i = 0;; ++i) {\n        var child = chunk.children[i], sz = child.chunkSize();\n        if (n < sz) { chunk = child; break }\n        n -= sz;\n      }\n    }\n    return chunk.lines[n]\n  }\n\n  // Get the part of a document between two positions, as an array of\n  // strings.\n  function getBetween(doc, start, end) {\n    var out = [], n = start.line;\n    doc.iter(start.line, end.line + 1, function (line) {\n      var text = line.text;\n      if (n == end.line) { text = text.slice(0, end.ch); }\n      if (n == start.line) { text = text.slice(start.ch); }\n      out.push(text);\n      ++n;\n    });\n    return out\n  }\n  // Get the lines between from and to, as array of strings.\n  function getLines(doc, from, to) {\n    var out = [];\n    doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n    return out\n  }\n\n  // Update the height of a line, propagating the height change\n  // upwards to parent nodes.\n  function updateLineHeight(line, height) {\n    var diff = height - line.height;\n    if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n  }\n\n  // Given a line object, find its line number by walking up through\n  // its parent links.\n  function lineNo(line) {\n    if (line.parent == null) { return null }\n    var cur = line.parent, no = indexOf(cur.lines, line);\n    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n      for (var i = 0;; ++i) {\n        if (chunk.children[i] == cur) { break }\n        no += chunk.children[i].chunkSize();\n      }\n    }\n    return no + cur.first\n  }\n\n  // Find the line at the given vertical position, using the height\n  // information in the document tree.\n  function lineAtHeight(chunk, h) {\n    var n = chunk.first;\n    outer: do {\n      for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n        var child = chunk.children[i$1], ch = child.height;\n        if (h < ch) { chunk = child; continue outer }\n        h -= ch;\n        n += child.chunkSize();\n      }\n      return n\n    } while (!chunk.lines)\n    var i = 0;\n    for (; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i], lh = line.height;\n      if (h < lh) { break }\n      h -= lh;\n    }\n    return n + i\n  }\n\n  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n  function lineNumberFor(options, i) {\n    return String(options.lineNumberFormatter(i + options.firstLineNumber))\n  }\n\n  // A Pos instance represents a position within the text.\n  function Pos(line, ch, sticky) {\n    if ( sticky === void 0 ) sticky = null;\n\n    if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n    this.line = line;\n    this.ch = ch;\n    this.sticky = sticky;\n  }\n\n  // Compare two positions, return 0 if they are the same, a negative\n  // number when a is less, and a positive number otherwise.\n  function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n  function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n  function copyPos(x) {return Pos(x.line, x.ch)}\n  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n  function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n  // Most of the external API clips given positions to make sure they\n  // actually exist within the document.\n  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n  function clipPos(doc, pos) {\n    if (pos.line < doc.first) { return Pos(doc.first, 0) }\n    var last = doc.first + doc.size - 1;\n    if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n    return clipToLen(pos, getLine(doc, pos.line).text.length)\n  }\n  function clipToLen(pos, linelen) {\n    var ch = pos.ch;\n    if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n    else if (ch < 0) { return Pos(pos.line, 0) }\n    else { return pos }\n  }\n  function clipPosArray(doc, array) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n    return out\n  }\n\n  // Optimize some code when these features are not used.\n  var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n  function seeReadOnlySpans() {\n    sawReadOnlySpans = true;\n  }\n\n  function seeCollapsedSpans() {\n    sawCollapsedSpans = true;\n  }\n\n  // TEXTMARKER SPANS\n\n  function MarkedSpan(marker, from, to) {\n    this.marker = marker;\n    this.from = from; this.to = to;\n  }\n\n  // Search an array of spans for a span matching the given marker.\n  function getMarkedSpanFor(spans, marker) {\n    if (spans) { for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.marker == marker) { return span }\n    } }\n  }\n  // Remove a span from an array, returning undefined if no spans are\n  // left (we don't store arrays for lines without spans).\n  function removeMarkedSpan(spans, span) {\n    var r;\n    for (var i = 0; i < spans.length; ++i)\n      { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n    return r\n  }\n  // Add a span to a line.\n  function addMarkedSpan(line, span) {\n    line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n    span.marker.attachLine(line);\n  }\n\n  // Used for the algorithm that adjusts markers for a change in the\n  // document. These functions cut an array of spans at a given\n  // character position, returning an array of remaining chunks (or\n  // undefined if nothing remains).\n  function markedSpansBefore(old, startCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n      if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n      }\n    } }\n    return nw\n  }\n  function markedSpansAfter(old, endCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n      if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n                                              span.to == null ? null : span.to - endCh));\n      }\n    } }\n    return nw\n  }\n\n  // Given a change object, compute the new set of marker spans that\n  // cover the line in which the change took place. Removes spans\n  // entirely within the change, reconnects spans belonging to the\n  // same marker that appear on both sides of the change, and cuts off\n  // spans partially within the change. Returns an array of span\n  // arrays with one element for each line in (after) the change.\n  function stretchSpansOverChange(doc, change) {\n    if (change.full) { return null }\n    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n    if (!oldFirst && !oldLast) { return null }\n\n    var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n    // Get the spans that 'stick out' on both sides\n    var first = markedSpansBefore(oldFirst, startCh, isInsert);\n    var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n    // Next, merge those two ends\n    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n    if (first) {\n      // Fix up .to properties of first\n      for (var i = 0; i < first.length; ++i) {\n        var span = first[i];\n        if (span.to == null) {\n          var found = getMarkedSpanFor(last, span.marker);\n          if (!found) { span.to = startCh; }\n          else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n        }\n      }\n    }\n    if (last) {\n      // Fix up .from in last (or move them into first in case of sameLine)\n      for (var i$1 = 0; i$1 < last.length; ++i$1) {\n        var span$1 = last[i$1];\n        if (span$1.to != null) { span$1.to += offset; }\n        if (span$1.from == null) {\n          var found$1 = getMarkedSpanFor(first, span$1.marker);\n          if (!found$1) {\n            span$1.from = offset;\n            if (sameLine) { (first || (first = [])).push(span$1); }\n          }\n        } else {\n          span$1.from += offset;\n          if (sameLine) { (first || (first = [])).push(span$1); }\n        }\n      }\n    }\n    // Make sure we didn't create any zero-length spans\n    if (first) { first = clearEmptySpans(first); }\n    if (last && last != first) { last = clearEmptySpans(last); }\n\n    var newMarkers = [first];\n    if (!sameLine) {\n      // Fill gap with whole-line-spans\n      var gap = change.text.length - 2, gapMarkers;\n      if (gap > 0 && first)\n        { for (var i$2 = 0; i$2 < first.length; ++i$2)\n          { if (first[i$2].to == null)\n            { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n      for (var i$3 = 0; i$3 < gap; ++i$3)\n        { newMarkers.push(gapMarkers); }\n      newMarkers.push(last);\n    }\n    return newMarkers\n  }\n\n  // Remove spans that are empty and don't have a clearWhenEmpty\n  // option of false.\n  function clearEmptySpans(spans) {\n    for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n        { spans.splice(i--, 1); }\n    }\n    if (!spans.length) { return null }\n    return spans\n  }\n\n  // Used to 'clip' out readOnly ranges when making a change.\n  function removeReadOnlyRanges(doc, from, to) {\n    var markers = null;\n    doc.iter(from.line, to.line + 1, function (line) {\n      if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n        var mark = line.markedSpans[i].marker;\n        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n          { (markers || (markers = [])).push(mark); }\n      } }\n    });\n    if (!markers) { return null }\n    var parts = [{from: from, to: to}];\n    for (var i = 0; i < markers.length; ++i) {\n      var mk = markers[i], m = mk.find(0);\n      for (var j = 0; j < parts.length; ++j) {\n        var p = parts[j];\n        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n          { newParts.push({from: p.from, to: m.from}); }\n        if (dto > 0 || !mk.inclusiveRight && !dto)\n          { newParts.push({from: m.to, to: p.to}); }\n        parts.splice.apply(parts, newParts);\n        j += newParts.length - 3;\n      }\n    }\n    return parts\n  }\n\n  // Connect or disconnect spans from a line.\n  function detachMarkedSpans(line) {\n    var spans = line.markedSpans;\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.detachLine(line); }\n    line.markedSpans = null;\n  }\n  function attachMarkedSpans(line, spans) {\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.attachLine(line); }\n    line.markedSpans = spans;\n  }\n\n  // Helpers used when computing which overlapping collapsed span\n  // counts as the larger one.\n  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n  // Returns a number indicating which of two overlapping collapsed\n  // spans is larger (and thus includes the other). Falls back to\n  // comparing ids when the spans cover exactly the same range.\n  function compareCollapsedMarkers(a, b) {\n    var lenDiff = a.lines.length - b.lines.length;\n    if (lenDiff != 0) { return lenDiff }\n    var aPos = a.find(), bPos = b.find();\n    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n    if (fromCmp) { return -fromCmp }\n    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n    if (toCmp) { return toCmp }\n    return b.id - a.id\n  }\n\n  // Find out whether a line ends or starts in a collapsed span. If\n  // so, return the marker for that span.\n  function collapsedSpanAtSide(line, start) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n        { found = sp.marker; }\n    } }\n    return found\n  }\n  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n  function collapsedSpanAround(line, ch) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n    } }\n    return found\n  }\n\n  // Test whether there exists a collapsed span that partially\n  // overlaps (covers the start or end, but not both) of a new span.\n  // Such overlap is not allowed.\n  function conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) {\n    var line = getLine(doc, lineNo$$1);\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      var found = sp.marker.find(0);\n      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n      if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n          fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n        { return true }\n    } }\n  }\n\n  // A visual line is a line as drawn on the screen. Folding, for\n  // example, can cause multiple logical lines to appear on the same\n  // visual line. This finds the start of the visual line that the\n  // given line is part of (usually that is the line itself).\n  function visualLine(line) {\n    var merged;\n    while (merged = collapsedSpanAtStart(line))\n      { line = merged.find(-1, true).line; }\n    return line\n  }\n\n  function visualLineEnd(line) {\n    var merged;\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return line\n  }\n\n  // Returns an array of logical lines that continue the visual line\n  // started by the argument, or undefined if there are no such lines.\n  function visualLineContinued(line) {\n    var merged, lines;\n    while (merged = collapsedSpanAtEnd(line)) {\n      line = merged.find(1, true).line\n      ;(lines || (lines = [])).push(line);\n    }\n    return lines\n  }\n\n  // Get the line number of the start of the visual line that the\n  // given line number is part of.\n  function visualLineNo(doc, lineN) {\n    var line = getLine(doc, lineN), vis = visualLine(line);\n    if (line == vis) { return lineN }\n    return lineNo(vis)\n  }\n\n  // Get the line number of the start of the next visual line after\n  // the given line.\n  function visualLineEndNo(doc, lineN) {\n    if (lineN > doc.lastLine()) { return lineN }\n    var line = getLine(doc, lineN), merged;\n    if (!lineIsHidden(doc, line)) { return lineN }\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return lineNo(line) + 1\n  }\n\n  // Compute whether a line is hidden. Lines count as hidden when they\n  // are part of a visual line that starts with another line, or when\n  // they are entirely covered by collapsed, non-widget span.\n  function lineIsHidden(doc, line) {\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      if (sp.from == null) { return true }\n      if (sp.marker.widgetNode) { continue }\n      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n        { return true }\n    } }\n  }\n  function lineIsHiddenInner(doc, line, span) {\n    if (span.to == null) {\n      var end = span.marker.find(1, true);\n      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n    }\n    if (span.marker.inclusiveRight && span.to == line.text.length)\n      { return true }\n    for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n      sp = line.markedSpans[i];\n      if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n          (sp.to == null || sp.to != span.from) &&\n          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n          lineIsHiddenInner(doc, line, sp)) { return true }\n    }\n  }\n\n  // Find the height above the given line.\n  function heightAtLine(lineObj) {\n    lineObj = visualLine(lineObj);\n\n    var h = 0, chunk = lineObj.parent;\n    for (var i = 0; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i];\n      if (line == lineObj) { break }\n      else { h += line.height; }\n    }\n    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n      for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n        var cur = p.children[i$1];\n        if (cur == chunk) { break }\n        else { h += cur.height; }\n      }\n    }\n    return h\n  }\n\n  // Compute the character length of a line, taking into account\n  // collapsed ranges (see markText) that might hide parts, and join\n  // other lines onto it.\n  function lineLength(line) {\n    if (line.height == 0) { return 0 }\n    var len = line.text.length, merged, cur = line;\n    while (merged = collapsedSpanAtStart(cur)) {\n      var found = merged.find(0, true);\n      cur = found.from.line;\n      len += found.from.ch - found.to.ch;\n    }\n    cur = line;\n    while (merged = collapsedSpanAtEnd(cur)) {\n      var found$1 = merged.find(0, true);\n      len -= cur.text.length - found$1.from.ch;\n      cur = found$1.to.line;\n      len += cur.text.length - found$1.to.ch;\n    }\n    return len\n  }\n\n  // Find the longest line in the document.\n  function findMaxLine(cm) {\n    var d = cm.display, doc = cm.doc;\n    d.maxLine = getLine(doc, doc.first);\n    d.maxLineLength = lineLength(d.maxLine);\n    d.maxLineChanged = true;\n    doc.iter(function (line) {\n      var len = lineLength(line);\n      if (len > d.maxLineLength) {\n        d.maxLineLength = len;\n        d.maxLine = line;\n      }\n    });\n  }\n\n  // BIDI HELPERS\n\n  function iterateBidiSections(order, from, to, f) {\n    if (!order) { return f(from, to, \"ltr\", 0) }\n    var found = false;\n    for (var i = 0; i < order.length; ++i) {\n      var part = order[i];\n      if (part.from < to && part.to > from || from == to && part.to == from) {\n        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n        found = true;\n      }\n    }\n    if (!found) { f(from, to, \"ltr\"); }\n  }\n\n  var bidiOther = null;\n  function getBidiPartAt(order, ch, sticky) {\n    var found;\n    bidiOther = null;\n    for (var i = 0; i < order.length; ++i) {\n      var cur = order[i];\n      if (cur.from < ch && cur.to > ch) { return i }\n      if (cur.to == ch) {\n        if (cur.from != cur.to && sticky == \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n      if (cur.from == ch) {\n        if (cur.from != cur.to && sticky != \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n    }\n    return found != null ? found : bidiOther\n  }\n\n  // Bidirectional ordering algorithm\n  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n  // that this (partially) implements.\n\n  // One-char codes used for character types:\n  // L (L):   Left-to-Right\n  // R (R):   Right-to-Left\n  // r (AL):  Right-to-Left Arabic\n  // 1 (EN):  European Number\n  // + (ES):  European Number Separator\n  // % (ET):  European Number Terminator\n  // n (AN):  Arabic Number\n  // , (CS):  Common Number Separator\n  // m (NSM): Non-Spacing Mark\n  // b (BN):  Boundary Neutral\n  // s (B):   Paragraph Separator\n  // t (S):   Segment Separator\n  // w (WS):  Whitespace\n  // N (ON):  Other Neutrals\n\n  // Returns null if characters are ordered as they appear\n  // (left-to-right), or an array of sections ({from, to, level}\n  // objects) in the order in which they occur visually.\n  var bidiOrdering = (function() {\n    // Character types for codepoints 0 to 0xff\n    var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n    // Character types for codepoints 0x600 to 0x6f9\n    var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n    function charType(code) {\n      if (code <= 0xf7) { return lowTypes.charAt(code) }\n      else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n      else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n      else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n      else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n      else if (code == 0x200c) { return \"b\" }\n      else { return \"L\" }\n    }\n\n    var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n    function BidiSpan(level, from, to) {\n      this.level = level;\n      this.from = from; this.to = to;\n    }\n\n    return function(str, direction) {\n      var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n      if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n      var len = str.length, types = [];\n      for (var i = 0; i < len; ++i)\n        { types.push(charType(str.charCodeAt(i))); }\n\n      // W1. Examine each non-spacing mark (NSM) in the level run, and\n      // change the type of the NSM to the type of the previous\n      // character. If the NSM is at the start of the level run, it will\n      // get the type of sor.\n      for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n        var type = types[i$1];\n        if (type == \"m\") { types[i$1] = prev; }\n        else { prev = type; }\n      }\n\n      // W2. Search backwards from each instance of a European number\n      // until the first strong type (R, L, AL, or sor) is found. If an\n      // AL is found, change the type of the European number to Arabic\n      // number.\n      // W3. Change all ALs to R.\n      for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n        var type$1 = types[i$2];\n        if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n        else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n      }\n\n      // W4. A single European separator between two European numbers\n      // changes to a European number. A single common separator between\n      // two numbers of the same type changes to that type.\n      for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n        var type$2 = types[i$3];\n        if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n        else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n                 (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n        prev$1 = type$2;\n      }\n\n      // W5. A sequence of European terminators adjacent to European\n      // numbers changes to all European numbers.\n      // W6. Otherwise, separators and terminators change to Other\n      // Neutral.\n      for (var i$4 = 0; i$4 < len; ++i$4) {\n        var type$3 = types[i$4];\n        if (type$3 == \",\") { types[i$4] = \"N\"; }\n        else if (type$3 == \"%\") {\n          var end = (void 0);\n          for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n          var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n          for (var j = i$4; j < end; ++j) { types[j] = replace; }\n          i$4 = end - 1;\n        }\n      }\n\n      // W7. Search backwards from each instance of a European number\n      // until the first strong type (R, L, or sor) is found. If an L is\n      // found, then change the type of the European number to L.\n      for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n        var type$4 = types[i$5];\n        if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n        else if (isStrong.test(type$4)) { cur$1 = type$4; }\n      }\n\n      // N1. A sequence of neutrals takes the direction of the\n      // surrounding strong text if the text on both sides has the same\n      // direction. European and Arabic numbers act as if they were R in\n      // terms of their influence on neutrals. Start-of-level-run (sor)\n      // and end-of-level-run (eor) are used at level run boundaries.\n      // N2. Any remaining neutrals take the embedding direction.\n      for (var i$6 = 0; i$6 < len; ++i$6) {\n        if (isNeutral.test(types[i$6])) {\n          var end$1 = (void 0);\n          for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n          var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n          var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n          var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n          for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n          i$6 = end$1 - 1;\n        }\n      }\n\n      // Here we depart from the documented algorithm, in order to avoid\n      // building up an actual levels array. Since there are only three\n      // levels (0, 1, 2) in an implementation that doesn't take\n      // explicit embedding into account, we can build up the order on\n      // the fly, without following the level-based algorithm.\n      var order = [], m;\n      for (var i$7 = 0; i$7 < len;) {\n        if (countsAsLeft.test(types[i$7])) {\n          var start = i$7;\n          for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n          order.push(new BidiSpan(0, start, i$7));\n        } else {\n          var pos = i$7, at = order.length;\n          for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n          for (var j$2 = pos; j$2 < i$7;) {\n            if (countsAsNum.test(types[j$2])) {\n              if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); }\n              var nstart = j$2;\n              for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n              order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n              pos = j$2;\n            } else { ++j$2; }\n          }\n          if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n        }\n      }\n      if (direction == \"ltr\") {\n        if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n          order[0].from = m[0].length;\n          order.unshift(new BidiSpan(0, 0, m[0].length));\n        }\n        if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n          lst(order).to -= m[0].length;\n          order.push(new BidiSpan(0, len - m[0].length, len));\n        }\n      }\n\n      return direction == \"rtl\" ? order.reverse() : order\n    }\n  })();\n\n  // Get the bidi ordering for the given line (and cache it). Returns\n  // false for lines that are fully left-to-right, and an array of\n  // BidiSpan objects otherwise.\n  function getOrder(line, direction) {\n    var order = line.order;\n    if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n    return order\n  }\n\n  // EVENT HANDLING\n\n  // Lightweight event framework. on/off also work on DOM nodes,\n  // registering native DOM handlers.\n\n  var noHandlers = [];\n\n  var on = function(emitter, type, f) {\n    if (emitter.addEventListener) {\n      emitter.addEventListener(type, f, false);\n    } else if (emitter.attachEvent) {\n      emitter.attachEvent(\"on\" + type, f);\n    } else {\n      var map$$1 = emitter._handlers || (emitter._handlers = {});\n      map$$1[type] = (map$$1[type] || noHandlers).concat(f);\n    }\n  };\n\n  function getHandlers(emitter, type) {\n    return emitter._handlers && emitter._handlers[type] || noHandlers\n  }\n\n  function off(emitter, type, f) {\n    if (emitter.removeEventListener) {\n      emitter.removeEventListener(type, f, false);\n    } else if (emitter.detachEvent) {\n      emitter.detachEvent(\"on\" + type, f);\n    } else {\n      var map$$1 = emitter._handlers, arr = map$$1 && map$$1[type];\n      if (arr) {\n        var index = indexOf(arr, f);\n        if (index > -1)\n          { map$$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n      }\n    }\n  }\n\n  function signal(emitter, type /*, values...*/) {\n    var handlers = getHandlers(emitter, type);\n    if (!handlers.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2);\n    for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n  }\n\n  // The DOM events that CodeMirror handles can be overridden by\n  // registering a (non-DOM) handler on the editor for the event name,\n  // and preventDefault-ing the event in that handler.\n  function signalDOMEvent(cm, e, override) {\n    if (typeof e == \"string\")\n      { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n    signal(cm, override || e.type, cm, e);\n    return e_defaultPrevented(e) || e.codemirrorIgnore\n  }\n\n  function signalCursorActivity(cm) {\n    var arr = cm._handlers && cm._handlers.cursorActivity;\n    if (!arr) { return }\n    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n    for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n      { set.push(arr[i]); } }\n  }\n\n  function hasHandler(emitter, type) {\n    return getHandlers(emitter, type).length > 0\n  }\n\n  // Add on and off methods to a constructor's prototype, to make\n  // registering events on such objects more convenient.\n  function eventMixin(ctor) {\n    ctor.prototype.on = function(type, f) {on(this, type, f);};\n    ctor.prototype.off = function(type, f) {off(this, type, f);};\n  }\n\n  // Due to the fact that we still support jurassic IE versions, some\n  // compatibility wrappers are needed.\n\n  function e_preventDefault(e) {\n    if (e.preventDefault) { e.preventDefault(); }\n    else { e.returnValue = false; }\n  }\n  function e_stopPropagation(e) {\n    if (e.stopPropagation) { e.stopPropagation(); }\n    else { e.cancelBubble = true; }\n  }\n  function e_defaultPrevented(e) {\n    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n  }\n  function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n  function e_target(e) {return e.target || e.srcElement}\n  function e_button(e) {\n    var b = e.which;\n    if (b == null) {\n      if (e.button & 1) { b = 1; }\n      else if (e.button & 2) { b = 3; }\n      else if (e.button & 4) { b = 2; }\n    }\n    if (mac && e.ctrlKey && b == 1) { b = 3; }\n    return b\n  }\n\n  // Detect drag-and-drop\n  var dragAndDrop = function() {\n    // There is *some* kind of drag-and-drop support in IE6-8, but I\n    // couldn't get it to work yet.\n    if (ie && ie_version < 9) { return false }\n    var div = elt('div');\n    return \"draggable\" in div || \"dragDrop\" in div\n  }();\n\n  var zwspSupported;\n  function zeroWidthElement(measure) {\n    if (zwspSupported == null) {\n      var test = elt(\"span\", \"\\u200b\");\n      removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n      if (measure.firstChild.offsetHeight != 0)\n        { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n    }\n    var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n      elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n    node.setAttribute(\"cm-text\", \"\");\n    return node\n  }\n\n  // Feature-detect IE's crummy client rect reporting for bidi text\n  var badBidiRects;\n  function hasBadBidiRects(measure) {\n    if (badBidiRects != null) { return badBidiRects }\n    var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n    var r0 = range(txt, 0, 1).getBoundingClientRect();\n    var r1 = range(txt, 1, 2).getBoundingClientRect();\n    removeChildren(measure);\n    if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n    return badBidiRects = (r1.right - r0.right < 3)\n  }\n\n  // See if \"\".split is the broken IE version, if so, provide an\n  // alternative way to split lines.\n  var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n    var pos = 0, result = [], l = string.length;\n    while (pos <= l) {\n      var nl = string.indexOf(\"\\n\", pos);\n      if (nl == -1) { nl = string.length; }\n      var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n      var rt = line.indexOf(\"\\r\");\n      if (rt != -1) {\n        result.push(line.slice(0, rt));\n        pos += rt + 1;\n      } else {\n        result.push(line);\n        pos = nl + 1;\n      }\n    }\n    return result\n  } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n  var hasSelection = window.getSelection ? function (te) {\n    try { return te.selectionStart != te.selectionEnd }\n    catch(e) { return false }\n  } : function (te) {\n    var range$$1;\n    try {range$$1 = te.ownerDocument.selection.createRange();}\n    catch(e) {}\n    if (!range$$1 || range$$1.parentElement() != te) { return false }\n    return range$$1.compareEndPoints(\"StartToEnd\", range$$1) != 0\n  };\n\n  var hasCopyEvent = (function () {\n    var e = elt(\"div\");\n    if (\"oncopy\" in e) { return true }\n    e.setAttribute(\"oncopy\", \"return;\");\n    return typeof e.oncopy == \"function\"\n  })();\n\n  var badZoomedRects = null;\n  function hasBadZoomedRects(measure) {\n    if (badZoomedRects != null) { return badZoomedRects }\n    var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n    var normal = node.getBoundingClientRect();\n    var fromRange = range(node, 0, 1).getBoundingClientRect();\n    return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n  }\n\n  // Known modes, by name and by MIME\n  var modes = {}, mimeModes = {};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  function defineMode(name, mode) {\n    if (arguments.length > 2)\n      { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n    modes[name] = mode;\n  }\n\n  function defineMIME(mime, spec) {\n    mimeModes[mime] = spec;\n  }\n\n  // Given a MIME type, a {name, ...options} config object, or a name\n  // string, return a mode config object.\n  function resolveMode(spec) {\n    if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n      spec = mimeModes[spec];\n    } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n      var found = mimeModes[spec.name];\n      if (typeof found == \"string\") { found = {name: found}; }\n      spec = createObj(found, spec);\n      spec.name = found.name;\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n      return resolveMode(\"application/xml\")\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n      return resolveMode(\"application/json\")\n    }\n    if (typeof spec == \"string\") { return {name: spec} }\n    else { return spec || {name: \"null\"} }\n  }\n\n  // Given a mode spec (anything that resolveMode accepts), find and\n  // initialize an actual mode object.\n  function getMode(options, spec) {\n    spec = resolveMode(spec);\n    var mfactory = modes[spec.name];\n    if (!mfactory) { return getMode(options, \"text/plain\") }\n    var modeObj = mfactory(options, spec);\n    if (modeExtensions.hasOwnProperty(spec.name)) {\n      var exts = modeExtensions[spec.name];\n      for (var prop in exts) {\n        if (!exts.hasOwnProperty(prop)) { continue }\n        if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n        modeObj[prop] = exts[prop];\n      }\n    }\n    modeObj.name = spec.name;\n    if (spec.helperType) { modeObj.helperType = spec.helperType; }\n    if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n      { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n    return modeObj\n  }\n\n  // This can be used to attach properties to mode objects from\n  // outside the actual mode definition.\n  var modeExtensions = {};\n  function extendMode(mode, properties) {\n    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n    copyObj(properties, exts);\n  }\n\n  function copyState(mode, state) {\n    if (state === true) { return state }\n    if (mode.copyState) { return mode.copyState(state) }\n    var nstate = {};\n    for (var n in state) {\n      var val = state[n];\n      if (val instanceof Array) { val = val.concat([]); }\n      nstate[n] = val;\n    }\n    return nstate\n  }\n\n  // Given a mode and a state (for that mode), find the inner mode and\n  // state at the position that the state refers to.\n  function innerMode(mode, state) {\n    var info;\n    while (mode.innerMode) {\n      info = mode.innerMode(state);\n      if (!info || info.mode == mode) { break }\n      state = info.state;\n      mode = info.mode;\n    }\n    return info || {mode: mode, state: state}\n  }\n\n  function startState(mode, a1, a2) {\n    return mode.startState ? mode.startState(a1, a2) : true\n  }\n\n  // STRING STREAM\n\n  // Fed to the mode parsers, provides helper functions to make\n  // parsers more succinct.\n\n  var StringStream = function(string, tabSize, lineOracle) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n    this.lineOracle = lineOracle;\n  };\n\n  StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n  StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n  StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n  StringStream.prototype.next = function () {\n    if (this.pos < this.string.length)\n      { return this.string.charAt(this.pos++) }\n  };\n  StringStream.prototype.eat = function (match) {\n    var ch = this.string.charAt(this.pos);\n    var ok;\n    if (typeof match == \"string\") { ok = ch == match; }\n    else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n    if (ok) {++this.pos; return ch}\n  };\n  StringStream.prototype.eatWhile = function (match) {\n    var start = this.pos;\n    while (this.eat(match)){}\n    return this.pos > start\n  };\n  StringStream.prototype.eatSpace = function () {\n      var this$1 = this;\n\n    var start = this.pos;\n    while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos; }\n    return this.pos > start\n  };\n  StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n  StringStream.prototype.skipTo = function (ch) {\n    var found = this.string.indexOf(ch, this.pos);\n    if (found > -1) {this.pos = found; return true}\n  };\n  StringStream.prototype.backUp = function (n) {this.pos -= n;};\n  StringStream.prototype.column = function () {\n    if (this.lastColumnPos < this.start) {\n      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n      this.lastColumnPos = this.start;\n    }\n    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.indentation = function () {\n    return countColumn(this.string, null, this.tabSize) -\n      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n    if (typeof pattern == \"string\") {\n      var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n      var substr = this.string.substr(this.pos, pattern.length);\n      if (cased(substr) == cased(pattern)) {\n        if (consume !== false) { this.pos += pattern.length; }\n        return true\n      }\n    } else {\n      var match = this.string.slice(this.pos).match(pattern);\n      if (match && match.index > 0) { return null }\n      if (match && consume !== false) { this.pos += match[0].length; }\n      return match\n    }\n  };\n  StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n  StringStream.prototype.hideFirstChars = function (n, inner) {\n    this.lineStart += n;\n    try { return inner() }\n    finally { this.lineStart -= n; }\n  };\n  StringStream.prototype.lookAhead = function (n) {\n    var oracle = this.lineOracle;\n    return oracle && oracle.lookAhead(n)\n  };\n  StringStream.prototype.baseToken = function () {\n    var oracle = this.lineOracle;\n    return oracle && oracle.baseToken(this.pos)\n  };\n\n  var SavedContext = function(state, lookAhead) {\n    this.state = state;\n    this.lookAhead = lookAhead;\n  };\n\n  var Context = function(doc, state, line, lookAhead) {\n    this.state = state;\n    this.doc = doc;\n    this.line = line;\n    this.maxLookAhead = lookAhead || 0;\n    this.baseTokens = null;\n    this.baseTokenPos = 1;\n  };\n\n  Context.prototype.lookAhead = function (n) {\n    var line = this.doc.getLine(this.line + n);\n    if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n    return line\n  };\n\n  Context.prototype.baseToken = function (n) {\n      var this$1 = this;\n\n    if (!this.baseTokens) { return null }\n    while (this.baseTokens[this.baseTokenPos] <= n)\n      { this$1.baseTokenPos += 2; }\n    var type = this.baseTokens[this.baseTokenPos + 1];\n    return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n            size: this.baseTokens[this.baseTokenPos] - n}\n  };\n\n  Context.prototype.nextLine = function () {\n    this.line++;\n    if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n  };\n\n  Context.fromSaved = function (doc, saved, line) {\n    if (saved instanceof SavedContext)\n      { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n    else\n      { return new Context(doc, copyState(doc.mode, saved), line) }\n  };\n\n  Context.prototype.save = function (copy) {\n    var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n    return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n  };\n\n\n  // Compute a style array (an array starting with a mode generation\n  // -- for invalidation -- followed by pairs of end positions and\n  // style strings), which is used to highlight the tokens on the\n  // line.\n  function highlightLine(cm, line, context, forceToEnd) {\n    // A styles array always starts with a number identifying the\n    // mode/overlays that it is based on (for easy invalidation).\n    var st = [cm.state.modeGen], lineClasses = {};\n    // Compute the base array of styles\n    runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n            lineClasses, forceToEnd);\n    var state = context.state;\n\n    // Run overlays, adjust style array.\n    var loop = function ( o ) {\n      context.baseTokens = st;\n      var overlay = cm.state.overlays[o], i = 1, at = 0;\n      context.state = true;\n      runMode(cm, line.text, overlay.mode, context, function (end, style) {\n        var start = i;\n        // Ensure there's a token end at the current position, and that i points at it\n        while (at < end) {\n          var i_end = st[i];\n          if (i_end > end)\n            { st.splice(i, 1, end, st[i+1], i_end); }\n          i += 2;\n          at = Math.min(end, i_end);\n        }\n        if (!style) { return }\n        if (overlay.opaque) {\n          st.splice(start, i - start, end, \"overlay \" + style);\n          i = start + 2;\n        } else {\n          for (; start < i; start += 2) {\n            var cur = st[start+1];\n            st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n          }\n        }\n      }, lineClasses);\n      context.state = state;\n      context.baseTokens = null;\n      context.baseTokenPos = 1;\n    };\n\n    for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n  }\n\n  function getLineStyles(cm, line, updateFrontier) {\n    if (!line.styles || line.styles[0] != cm.state.modeGen) {\n      var context = getContextBefore(cm, lineNo(line));\n      var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n      var result = highlightLine(cm, line, context);\n      if (resetState) { context.state = resetState; }\n      line.stateAfter = context.save(!resetState);\n      line.styles = result.styles;\n      if (result.classes) { line.styleClasses = result.classes; }\n      else if (line.styleClasses) { line.styleClasses = null; }\n      if (updateFrontier === cm.doc.highlightFrontier)\n        { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n    }\n    return line.styles\n  }\n\n  function getContextBefore(cm, n, precise) {\n    var doc = cm.doc, display = cm.display;\n    if (!doc.mode.startState) { return new Context(doc, true, n) }\n    var start = findStartLine(cm, n, precise);\n    var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n    var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n    doc.iter(start, n, function (line) {\n      processLine(cm, line.text, context);\n      var pos = context.line;\n      line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n      context.nextLine();\n    });\n    if (precise) { doc.modeFrontier = context.line; }\n    return context\n  }\n\n  // Lightweight form of highlight -- proceed over this line and\n  // update state, but don't save a style array. Used for lines that\n  // aren't currently visible.\n  function processLine(cm, text, context, startAt) {\n    var mode = cm.doc.mode;\n    var stream = new StringStream(text, cm.options.tabSize, context);\n    stream.start = stream.pos = startAt || 0;\n    if (text == \"\") { callBlankLine(mode, context.state); }\n    while (!stream.eol()) {\n      readToken(mode, stream, context.state);\n      stream.start = stream.pos;\n    }\n  }\n\n  function callBlankLine(mode, state) {\n    if (mode.blankLine) { return mode.blankLine(state) }\n    if (!mode.innerMode) { return }\n    var inner = innerMode(mode, state);\n    if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n  }\n\n  function readToken(mode, stream, state, inner) {\n    for (var i = 0; i < 10; i++) {\n      if (inner) { inner[0] = innerMode(mode, state).mode; }\n      var style = mode.token(stream, state);\n      if (stream.pos > stream.start) { return style }\n    }\n    throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n  }\n\n  var Token = function(stream, type, state) {\n    this.start = stream.start; this.end = stream.pos;\n    this.string = stream.current();\n    this.type = type || null;\n    this.state = state;\n  };\n\n  // Utility for getTokenAt and getLineTokens\n  function takeToken(cm, pos, precise, asArray) {\n    var doc = cm.doc, mode = doc.mode, style;\n    pos = clipPos(doc, pos);\n    var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n    var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n    if (asArray) { tokens = []; }\n    while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n      stream.start = stream.pos;\n      style = readToken(mode, stream, context.state);\n      if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n    }\n    return asArray ? tokens : new Token(stream, style, context.state)\n  }\n\n  function extractLineClasses(type, output) {\n    if (type) { for (;;) {\n      var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n      if (!lineClass) { break }\n      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n      var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n      if (output[prop] == null)\n        { output[prop] = lineClass[2]; }\n      else if (!(new RegExp(\"(?:^|\\s)\" + lineClass[2] + \"(?:$|\\s)\")).test(output[prop]))\n        { output[prop] += \" \" + lineClass[2]; }\n    } }\n    return type\n  }\n\n  // Run the given mode's parser over a line, calling f for each token.\n  function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n    var flattenSpans = mode.flattenSpans;\n    if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n    var curStart = 0, curStyle = null;\n    var stream = new StringStream(text, cm.options.tabSize, context), style;\n    var inner = cm.options.addModeClass && [null];\n    if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n    while (!stream.eol()) {\n      if (stream.pos > cm.options.maxHighlightLength) {\n        flattenSpans = false;\n        if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n        stream.pos = text.length;\n        style = null;\n      } else {\n        style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n      }\n      if (inner) {\n        var mName = inner[0].name;\n        if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n      }\n      if (!flattenSpans || curStyle != style) {\n        while (curStart < stream.start) {\n          curStart = Math.min(stream.start, curStart + 5000);\n          f(curStart, curStyle);\n        }\n        curStyle = style;\n      }\n      stream.start = stream.pos;\n    }\n    while (curStart < stream.pos) {\n      // Webkit seems to refuse to render text nodes longer than 57444\n      // characters, and returns inaccurate measurements in nodes\n      // starting around 5000 chars.\n      var pos = Math.min(stream.pos, curStart + 5000);\n      f(pos, curStyle);\n      curStart = pos;\n    }\n  }\n\n  // Finds the line to start with when starting a parse. Tries to\n  // find a line with a stateAfter, so that it can start with a\n  // valid state. If that fails, it returns the line with the\n  // smallest indentation, which tends to need the least context to\n  // parse correctly.\n  function findStartLine(cm, n, precise) {\n    var minindent, minline, doc = cm.doc;\n    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n    for (var search = n; search > lim; --search) {\n      if (search <= doc.first) { return doc.first }\n      var line = getLine(doc, search - 1), after = line.stateAfter;\n      if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n        { return search }\n      var indented = countColumn(line.text, null, cm.options.tabSize);\n      if (minline == null || minindent > indented) {\n        minline = search - 1;\n        minindent = indented;\n      }\n    }\n    return minline\n  }\n\n  function retreatFrontier(doc, n) {\n    doc.modeFrontier = Math.min(doc.modeFrontier, n);\n    if (doc.highlightFrontier < n - 10) { return }\n    var start = doc.first;\n    for (var line = n - 1; line > start; line--) {\n      var saved = getLine(doc, line).stateAfter;\n      // change is on 3\n      // state on line 1 looked ahead 2 -- so saw 3\n      // test 1 + 2 < 3 should cover this\n      if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n        start = line + 1;\n        break\n      }\n    }\n    doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n  }\n\n  // LINE DATA STRUCTURE\n\n  // Line objects. These hold state related to a line, including\n  // highlighting info (the styles array).\n  var Line = function(text, markedSpans, estimateHeight) {\n    this.text = text;\n    attachMarkedSpans(this, markedSpans);\n    this.height = estimateHeight ? estimateHeight(this) : 1;\n  };\n\n  Line.prototype.lineNo = function () { return lineNo(this) };\n  eventMixin(Line);\n\n  // Change the content (text, markers) of a line. Automatically\n  // invalidates cached information and tries to re-estimate the\n  // line's height.\n  function updateLine(line, text, markedSpans, estimateHeight) {\n    line.text = text;\n    if (line.stateAfter) { line.stateAfter = null; }\n    if (line.styles) { line.styles = null; }\n    if (line.order != null) { line.order = null; }\n    detachMarkedSpans(line);\n    attachMarkedSpans(line, markedSpans);\n    var estHeight = estimateHeight ? estimateHeight(line) : 1;\n    if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n  }\n\n  // Detach a line from the document tree and its markers.\n  function cleanUpLine(line) {\n    line.parent = null;\n    detachMarkedSpans(line);\n  }\n\n  // Convert a style as returned by a mode (either null, or a string\n  // containing one or more styles) to a CSS style. This is cached,\n  // and also looks for line-wide styles.\n  var styleToClassCache = {}, styleToClassCacheWithMode = {};\n  function interpretTokenStyle(style, options) {\n    if (!style || /^\\s*$/.test(style)) { return null }\n    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n    return cache[style] ||\n      (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n  }\n\n  // Render the DOM representation of the text of a line. Also builds\n  // up a 'line map', which points at the DOM nodes that represent\n  // specific stretches of text, and is used by the measuring code.\n  // The returned object contains the DOM node, this map, and\n  // information about line-wide styles that were set by the mode.\n  function buildLineContent(cm, lineView) {\n    // The padding-right forces the element to have a 'border', which\n    // is needed on Webkit to be able to get line-level bounding\n    // rectangles for it (in measureChar).\n    var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n    var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n                   col: 0, pos: 0, cm: cm,\n                   trailingSpace: false,\n                   splitSpaces: cm.getOption(\"lineWrapping\")};\n    lineView.measure = {};\n\n    // Iterate over the logical lines that make up this visual line.\n    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n      var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n      builder.pos = 0;\n      builder.addToken = buildToken;\n      // Optionally wire in some hacks into the token-rendering\n      // algorithm, to deal with browser quirks.\n      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n        { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n      builder.map = [];\n      var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n      insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n      if (line.styleClasses) {\n        if (line.styleClasses.bgClass)\n          { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n        if (line.styleClasses.textClass)\n          { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n      }\n\n      // Ensure at least a single node is present, for measuring.\n      if (builder.map.length == 0)\n        { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n      // Store the map and a cache object for the current logical line\n      if (i == 0) {\n        lineView.measure.map = builder.map;\n        lineView.measure.cache = {};\n      } else {\n  (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n        ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n      }\n    }\n\n    // See issue #2901\n    if (webkit) {\n      var last = builder.content.lastChild;\n      if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n        { builder.content.className = \"cm-tab-wrap-hack\"; }\n    }\n\n    signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n    if (builder.pre.className)\n      { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n    return builder\n  }\n\n  function defaultSpecialCharPlaceholder(ch) {\n    var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n    token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n    token.setAttribute(\"aria-label\", token.title);\n    return token\n  }\n\n  // Build up the DOM representation for a single token, and add it to\n  // the line map. Takes care to render special characters separately.\n  function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n    if (!text) { return }\n    var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n    var special = builder.cm.state.specialChars, mustWrap = false;\n    var content;\n    if (!special.test(text)) {\n      builder.col += text.length;\n      content = document.createTextNode(displayText);\n      builder.map.push(builder.pos, builder.pos + text.length, content);\n      if (ie && ie_version < 9) { mustWrap = true; }\n      builder.pos += text.length;\n    } else {\n      content = document.createDocumentFragment();\n      var pos = 0;\n      while (true) {\n        special.lastIndex = pos;\n        var m = special.exec(text);\n        var skipped = m ? m.index - pos : text.length - pos;\n        if (skipped) {\n          var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n          else { content.appendChild(txt); }\n          builder.map.push(builder.pos, builder.pos + skipped, txt);\n          builder.col += skipped;\n          builder.pos += skipped;\n        }\n        if (!m) { break }\n        pos += skipped + 1;\n        var txt$1 = (void 0);\n        if (m[0] == \"\\t\") {\n          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n          txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n          txt$1.setAttribute(\"role\", \"presentation\");\n          txt$1.setAttribute(\"cm-text\", \"\\t\");\n          builder.col += tabWidth;\n        } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n          txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          builder.col += 1;\n        } else {\n          txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n          else { content.appendChild(txt$1); }\n          builder.col += 1;\n        }\n        builder.map.push(builder.pos, builder.pos + 1, txt$1);\n        builder.pos++;\n      }\n    }\n    builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n    if (style || startStyle || endStyle || mustWrap || css) {\n      var fullStyle = style || \"\";\n      if (startStyle) { fullStyle += startStyle; }\n      if (endStyle) { fullStyle += endStyle; }\n      var token = elt(\"span\", [content], fullStyle, css);\n      if (attributes) {\n        for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n          { token.setAttribute(attr, attributes[attr]); } }\n      }\n      return builder.content.appendChild(token)\n    }\n    builder.content.appendChild(content);\n  }\n\n  // Change some spaces to NBSP to prevent the browser from collapsing\n  // trailing spaces at the end of a line when rendering text (issue #1362).\n  function splitSpaces(text, trailingBefore) {\n    if (text.length > 1 && !/  /.test(text)) { return text }\n    var spaceBefore = trailingBefore, result = \"\";\n    for (var i = 0; i < text.length; i++) {\n      var ch = text.charAt(i);\n      if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n        { ch = \"\\u00a0\"; }\n      result += ch;\n      spaceBefore = ch == \" \";\n    }\n    return result\n  }\n\n  // Work around nonsense dimensions being reported for stretches of\n  // right-to-left text.\n  function buildTokenBadBidi(inner, order) {\n    return function (builder, text, style, startStyle, endStyle, css, attributes) {\n      style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n      var start = builder.pos, end = start + text.length;\n      for (;;) {\n        // Find the part that overlaps with the start of this text\n        var part = (void 0);\n        for (var i = 0; i < order.length; i++) {\n          part = order[i];\n          if (part.to > start && part.from <= start) { break }\n        }\n        if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n        inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n        startStyle = null;\n        text = text.slice(part.to - start);\n        start = part.to;\n      }\n    }\n  }\n\n  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n    var widget = !ignoreWidget && marker.widgetNode;\n    if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n    if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n      if (!widget)\n        { widget = builder.content.appendChild(document.createElement(\"span\")); }\n      widget.setAttribute(\"cm-marker\", marker.id);\n    }\n    if (widget) {\n      builder.cm.display.input.setUneditable(widget);\n      builder.content.appendChild(widget);\n    }\n    builder.pos += size;\n    builder.trailingSpace = false;\n  }\n\n  // Outputs a number of spans to make up a line, taking highlighting\n  // and marked text into account.\n  function insertLineContent(line, builder, styles) {\n    var spans = line.markedSpans, allText = line.text, at = 0;\n    if (!spans) {\n      for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n        { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n      return\n    }\n\n    var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n    for (;;) {\n      if (nextChange == pos) { // Update current marker set\n        spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n        attributes = null;\n        collapsed = null; nextChange = Infinity;\n        var foundBookmarks = [], endStyles = (void 0);\n        for (var j = 0; j < spans.length; ++j) {\n          var sp = spans[j], m = sp.marker;\n          if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n            foundBookmarks.push(m);\n          } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n            if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n              nextChange = sp.to;\n              spanEndStyle = \"\";\n            }\n            if (m.className) { spanStyle += \" \" + m.className; }\n            if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n            if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n            if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n            // support for the old title property\n            // https://github.com/codemirror/CodeMirror/pull/5673\n            if (m.title) { (attributes || (attributes = {})).title = m.title; }\n            if (m.attributes) {\n              for (var attr in m.attributes)\n                { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n            }\n            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n              { collapsed = sp; }\n          } else if (sp.from > pos && nextChange > sp.from) {\n            nextChange = sp.from;\n          }\n        }\n        if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n          { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n        if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n          { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n        if (collapsed && (collapsed.from || 0) == pos) {\n          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n                             collapsed.marker, collapsed.from == null);\n          if (collapsed.to == null) { return }\n          if (collapsed.to == pos) { collapsed = false; }\n        }\n      }\n      if (pos >= len) { break }\n\n      var upto = Math.min(len, nextChange);\n      while (true) {\n        if (text) {\n          var end = pos + text.length;\n          if (!collapsed) {\n            var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n          }\n          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n          pos = end;\n          spanStartStyle = \"\";\n        }\n        text = allText.slice(at, at = styles[i++]);\n        style = interpretTokenStyle(styles[i++], builder.cm.options);\n      }\n    }\n  }\n\n\n  // These objects are used to represent the visible (currently drawn)\n  // part of the document. A LineView may correspond to multiple\n  // logical lines, if those are connected by collapsed ranges.\n  function LineView(doc, line, lineN) {\n    // The starting line\n    this.line = line;\n    // Continuing lines, if any\n    this.rest = visualLineContinued(line);\n    // Number of logical lines in this visual line\n    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n    this.node = this.text = null;\n    this.hidden = lineIsHidden(doc, line);\n  }\n\n  // Create a range of LineView objects for the given lines.\n  function buildViewArray(cm, from, to) {\n    var array = [], nextPos;\n    for (var pos = from; pos < to; pos = nextPos) {\n      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n      nextPos = pos + view.size;\n      array.push(view);\n    }\n    return array\n  }\n\n  var operationGroup = null;\n\n  function pushOperation(op) {\n    if (operationGroup) {\n      operationGroup.ops.push(op);\n    } else {\n      op.ownsGroup = operationGroup = {\n        ops: [op],\n        delayedCallbacks: []\n      };\n    }\n  }\n\n  function fireCallbacksForOps(group) {\n    // Calls delayed callbacks and cursorActivity handlers until no\n    // new ones appear\n    var callbacks = group.delayedCallbacks, i = 0;\n    do {\n      for (; i < callbacks.length; i++)\n        { callbacks[i].call(null); }\n      for (var j = 0; j < group.ops.length; j++) {\n        var op = group.ops[j];\n        if (op.cursorActivityHandlers)\n          { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n            { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n      }\n    } while (i < callbacks.length)\n  }\n\n  function finishOperation(op, endCb) {\n    var group = op.ownsGroup;\n    if (!group) { return }\n\n    try { fireCallbacksForOps(group); }\n    finally {\n      operationGroup = null;\n      endCb(group);\n    }\n  }\n\n  var orphanDelayedCallbacks = null;\n\n  // Often, we want to signal events at a point where we are in the\n  // middle of some work, but don't want the handler to start calling\n  // other methods on the editor, which might be in an inconsistent\n  // state or simply not expect any other events to happen.\n  // signalLater looks whether there are any handlers, and schedules\n  // them to be executed when the last operation ends, or, if no\n  // operation is active, when a timeout fires.\n  function signalLater(emitter, type /*, values...*/) {\n    var arr = getHandlers(emitter, type);\n    if (!arr.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2), list;\n    if (operationGroup) {\n      list = operationGroup.delayedCallbacks;\n    } else if (orphanDelayedCallbacks) {\n      list = orphanDelayedCallbacks;\n    } else {\n      list = orphanDelayedCallbacks = [];\n      setTimeout(fireOrphanDelayed, 0);\n    }\n    var loop = function ( i ) {\n      list.push(function () { return arr[i].apply(null, args); });\n    };\n\n    for (var i = 0; i < arr.length; ++i)\n      loop( i );\n  }\n\n  function fireOrphanDelayed() {\n    var delayed = orphanDelayedCallbacks;\n    orphanDelayedCallbacks = null;\n    for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n  }\n\n  // When an aspect of a line changes, a string is added to\n  // lineView.changes. This updates the relevant part of the line's\n  // DOM structure.\n  function updateLineForChanges(cm, lineView, lineN, dims) {\n    for (var j = 0; j < lineView.changes.length; j++) {\n      var type = lineView.changes[j];\n      if (type == \"text\") { updateLineText(cm, lineView); }\n      else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n      else if (type == \"class\") { updateLineClasses(cm, lineView); }\n      else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n    }\n    lineView.changes = null;\n  }\n\n  // Lines with gutter elements, widgets or a background class need to\n  // be wrapped, and have the extra elements added to the wrapper div\n  function ensureLineWrapped(lineView) {\n    if (lineView.node == lineView.text) {\n      lineView.node = elt(\"div\", null, null, \"position: relative\");\n      if (lineView.text.parentNode)\n        { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n      lineView.node.appendChild(lineView.text);\n      if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n    }\n    return lineView.node\n  }\n\n  function updateLineBackground(cm, lineView) {\n    var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n    if (cls) { cls += \" CodeMirror-linebackground\"; }\n    if (lineView.background) {\n      if (cls) { lineView.background.className = cls; }\n      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n    } else if (cls) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n      cm.display.input.setUneditable(lineView.background);\n    }\n  }\n\n  // Wrapper around buildLineContent which will reuse the structure\n  // in display.externalMeasured when possible.\n  function getLineContent(cm, lineView) {\n    var ext = cm.display.externalMeasured;\n    if (ext && ext.line == lineView.line) {\n      cm.display.externalMeasured = null;\n      lineView.measure = ext.measure;\n      return ext.built\n    }\n    return buildLineContent(cm, lineView)\n  }\n\n  // Redraw the line's text. Interacts with the background and text\n  // classes because the mode may output tokens that influence these\n  // classes.\n  function updateLineText(cm, lineView) {\n    var cls = lineView.text.className;\n    var built = getLineContent(cm, lineView);\n    if (lineView.text == lineView.node) { lineView.node = built.pre; }\n    lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n    lineView.text = built.pre;\n    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n      lineView.bgClass = built.bgClass;\n      lineView.textClass = built.textClass;\n      updateLineClasses(cm, lineView);\n    } else if (cls) {\n      lineView.text.className = cls;\n    }\n  }\n\n  function updateLineClasses(cm, lineView) {\n    updateLineBackground(cm, lineView);\n    if (lineView.line.wrapClass)\n      { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n    else if (lineView.node != lineView.text)\n      { lineView.node.className = \"\"; }\n    var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n    lineView.text.className = textClass || \"\";\n  }\n\n  function updateLineGutter(cm, lineView, lineN, dims) {\n    if (lineView.gutter) {\n      lineView.node.removeChild(lineView.gutter);\n      lineView.gutter = null;\n    }\n    if (lineView.gutterBackground) {\n      lineView.node.removeChild(lineView.gutterBackground);\n      lineView.gutterBackground = null;\n    }\n    if (lineView.line.gutterClass) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n                                      (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n      cm.display.input.setUneditable(lineView.gutterBackground);\n      wrap.insertBefore(lineView.gutterBackground, lineView.text);\n    }\n    var markers = lineView.line.gutterMarkers;\n    if (cm.options.lineNumbers || markers) {\n      var wrap$1 = ensureLineWrapped(lineView);\n      var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n      cm.display.input.setUneditable(gutterWrap);\n      wrap$1.insertBefore(gutterWrap, lineView.text);\n      if (lineView.line.gutterClass)\n        { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n      if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n        { lineView.lineNumber = gutterWrap.appendChild(\n          elt(\"div\", lineNumberFor(cm.options, lineN),\n              \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n              (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n      if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) {\n        var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];\n        if (found)\n          { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n                                     (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n      } }\n    }\n  }\n\n  function updateLineWidgets(cm, lineView, dims) {\n    if (lineView.alignable) { lineView.alignable = null; }\n    for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n      next = node.nextSibling;\n      if (node.className == \"CodeMirror-linewidget\")\n        { lineView.node.removeChild(node); }\n    }\n    insertLineWidgets(cm, lineView, dims);\n  }\n\n  // Build a line's DOM representation from scratch\n  function buildLineElement(cm, lineView, lineN, dims) {\n    var built = getLineContent(cm, lineView);\n    lineView.text = lineView.node = built.pre;\n    if (built.bgClass) { lineView.bgClass = built.bgClass; }\n    if (built.textClass) { lineView.textClass = built.textClass; }\n\n    updateLineClasses(cm, lineView);\n    updateLineGutter(cm, lineView, lineN, dims);\n    insertLineWidgets(cm, lineView, dims);\n    return lineView.node\n  }\n\n  // A lineView may contain multiple logical lines (when merged by\n  // collapsed spans). The widgets for all of them need to be drawn.\n  function insertLineWidgets(cm, lineView, dims) {\n    insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n    if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n      { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n  }\n\n  function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n    if (!line.widgets) { return }\n    var wrap = ensureLineWrapped(lineView);\n    for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n      var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\");\n      if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n      positionLineWidget(widget, node, lineView, dims);\n      cm.display.input.setUneditable(node);\n      if (allowAbove && widget.above)\n        { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n      else\n        { wrap.appendChild(node); }\n      signalLater(widget, \"redraw\");\n    }\n  }\n\n  function positionLineWidget(widget, node, lineView, dims) {\n    if (widget.noHScroll) {\n  (lineView.alignable || (lineView.alignable = [])).push(node);\n      var width = dims.wrapperWidth;\n      node.style.left = dims.fixedPos + \"px\";\n      if (!widget.coverGutter) {\n        width -= dims.gutterTotalWidth;\n        node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n      }\n      node.style.width = width + \"px\";\n    }\n    if (widget.coverGutter) {\n      node.style.zIndex = 5;\n      node.style.position = \"relative\";\n      if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n    }\n  }\n\n  function widgetHeight(widget) {\n    if (widget.height != null) { return widget.height }\n    var cm = widget.doc.cm;\n    if (!cm) { return 0 }\n    if (!contains(document.body, widget.node)) {\n      var parentStyle = \"position: relative;\";\n      if (widget.coverGutter)\n        { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n      if (widget.noHScroll)\n        { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n      removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n    }\n    return widget.height = widget.node.parentNode.offsetHeight\n  }\n\n  // Return true when the given mouse event happened in a widget\n  function eventInWidget(display, e) {\n    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n      if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n          (n.parentNode == display.sizer && n != display.mover))\n        { return true }\n    }\n  }\n\n  // POSITION MEASUREMENT\n\n  function paddingTop(display) {return display.lineSpace.offsetTop}\n  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n  function paddingH(display) {\n    if (display.cachedPaddingH) { return display.cachedPaddingH }\n    var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\"));\n    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n    if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n    return data\n  }\n\n  function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n  function displayWidth(cm) {\n    return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n  }\n  function displayHeight(cm) {\n    return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n  }\n\n  // Ensure the lineView.wrapping.heights array is populated. This is\n  // an array of bottom offsets for the lines that make up a drawn\n  // line. When lineWrapping is on, there might be more than one\n  // height.\n  function ensureLineHeights(cm, lineView, rect) {\n    var wrapping = cm.options.lineWrapping;\n    var curWidth = wrapping && displayWidth(cm);\n    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n      var heights = lineView.measure.heights = [];\n      if (wrapping) {\n        lineView.measure.width = curWidth;\n        var rects = lineView.text.firstChild.getClientRects();\n        for (var i = 0; i < rects.length - 1; i++) {\n          var cur = rects[i], next = rects[i + 1];\n          if (Math.abs(cur.bottom - next.bottom) > 2)\n            { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n        }\n      }\n      heights.push(rect.bottom - rect.top);\n    }\n  }\n\n  // Find a line map (mapping character offsets to text nodes) and a\n  // measurement cache for the given line number. (A line view might\n  // contain multiple lines when collapsed ranges are present.)\n  function mapFromLineView(lineView, line, lineN) {\n    if (lineView.line == line)\n      { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n    for (var i = 0; i < lineView.rest.length; i++)\n      { if (lineView.rest[i] == line)\n        { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n    for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n      { if (lineNo(lineView.rest[i$1]) > lineN)\n        { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n  }\n\n  // Render a line into the hidden node display.externalMeasured. Used\n  // when measurement is needed for a line that's not in the viewport.\n  function updateExternalMeasurement(cm, line) {\n    line = visualLine(line);\n    var lineN = lineNo(line);\n    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n    view.lineN = lineN;\n    var built = view.built = buildLineContent(cm, view);\n    view.text = built.pre;\n    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n    return view\n  }\n\n  // Get a {top, bottom, left, right} box (in line-local coordinates)\n  // for a given character.\n  function measureChar(cm, line, ch, bias) {\n    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n  }\n\n  // Find a line view that corresponds to the given line number.\n  function findViewForLine(cm, lineN) {\n    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n      { return cm.display.view[findViewIndex(cm, lineN)] }\n    var ext = cm.display.externalMeasured;\n    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n      { return ext }\n  }\n\n  // Measurement can be split in two steps, the set-up work that\n  // applies to the whole line, and the measurement of the actual\n  // character. Functions like coordsChar, that need to do a lot of\n  // measurements in a row, can thus ensure that the set-up work is\n  // only done once.\n  function prepareMeasureForLine(cm, line) {\n    var lineN = lineNo(line);\n    var view = findViewForLine(cm, lineN);\n    if (view && !view.text) {\n      view = null;\n    } else if (view && view.changes) {\n      updateLineForChanges(cm, view, lineN, getDimensions(cm));\n      cm.curOp.forceUpdate = true;\n    }\n    if (!view)\n      { view = updateExternalMeasurement(cm, line); }\n\n    var info = mapFromLineView(view, line, lineN);\n    return {\n      line: line, view: view, rect: null,\n      map: info.map, cache: info.cache, before: info.before,\n      hasHeights: false\n    }\n  }\n\n  // Given a prepared measurement object, measures the position of an\n  // actual character (or fetches it from the cache).\n  function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n    if (prepared.before) { ch = -1; }\n    var key = ch + (bias || \"\"), found;\n    if (prepared.cache.hasOwnProperty(key)) {\n      found = prepared.cache[key];\n    } else {\n      if (!prepared.rect)\n        { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n      if (!prepared.hasHeights) {\n        ensureLineHeights(cm, prepared.view, prepared.rect);\n        prepared.hasHeights = true;\n      }\n      found = measureCharInner(cm, prepared, ch, bias);\n      if (!found.bogus) { prepared.cache[key] = found; }\n    }\n    return {left: found.left, right: found.right,\n            top: varHeight ? found.rtop : found.top,\n            bottom: varHeight ? found.rbottom : found.bottom}\n  }\n\n  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n  function nodeAndOffsetInLineMap(map$$1, ch, bias) {\n    var node, start, end, collapse, mStart, mEnd;\n    // First, search the line map for the text node corresponding to,\n    // or closest to, the target character.\n    for (var i = 0; i < map$$1.length; i += 3) {\n      mStart = map$$1[i];\n      mEnd = map$$1[i + 1];\n      if (ch < mStart) {\n        start = 0; end = 1;\n        collapse = \"left\";\n      } else if (ch < mEnd) {\n        start = ch - mStart;\n        end = start + 1;\n      } else if (i == map$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) {\n        end = mEnd - mStart;\n        start = end - 1;\n        if (ch >= mEnd) { collapse = \"right\"; }\n      }\n      if (start != null) {\n        node = map$$1[i + 2];\n        if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n          { collapse = bias; }\n        if (bias == \"left\" && start == 0)\n          { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) {\n            node = map$$1[(i -= 3) + 2];\n            collapse = \"left\";\n          } }\n        if (bias == \"right\" && start == mEnd - mStart)\n          { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) {\n            node = map$$1[(i += 3) + 2];\n            collapse = \"right\";\n          } }\n        break\n      }\n    }\n    return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n  }\n\n  function getUsefulRect(rects, bias) {\n    var rect = nullRect;\n    if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n      if ((rect = rects[i]).left != rect.right) { break }\n    } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n      if ((rect = rects[i$1]).left != rect.right) { break }\n    } }\n    return rect\n  }\n\n  function measureCharInner(cm, prepared, ch, bias) {\n    var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n    var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n    var rect;\n    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n      for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n        while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n        while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n        if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n          { rect = node.parentNode.getBoundingClientRect(); }\n        else\n          { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n        if (rect.left || rect.right || start == 0) { break }\n        end = start;\n        start = start - 1;\n        collapse = \"right\";\n      }\n      if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n    } else { // If it is a widget, simply get the box for the whole widget.\n      if (start > 0) { collapse = bias = \"right\"; }\n      var rects;\n      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n        { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n      else\n        { rect = node.getBoundingClientRect(); }\n    }\n    if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n      var rSpan = node.parentNode.getClientRects()[0];\n      if (rSpan)\n        { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n      else\n        { rect = nullRect; }\n    }\n\n    var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n    var mid = (rtop + rbot) / 2;\n    var heights = prepared.view.measure.heights;\n    var i = 0;\n    for (; i < heights.length - 1; i++)\n      { if (mid < heights[i]) { break } }\n    var top = i ? heights[i - 1] : 0, bot = heights[i];\n    var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n                  right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n                  top: top, bottom: bot};\n    if (!rect.left && !rect.right) { result.bogus = true; }\n    if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n    return result\n  }\n\n  // Work around problem with bounding client rects on ranges being\n  // returned incorrectly when zoomed on IE10 and below.\n  function maybeUpdateRectForZooming(measure, rect) {\n    if (!window.screen || screen.logicalXDPI == null ||\n        screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n      { return rect }\n    var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n    var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n    return {left: rect.left * scaleX, right: rect.right * scaleX,\n            top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n  }\n\n  function clearLineMeasurementCacheFor(lineView) {\n    if (lineView.measure) {\n      lineView.measure.cache = {};\n      lineView.measure.heights = null;\n      if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n        { lineView.measure.caches[i] = {}; } }\n    }\n  }\n\n  function clearLineMeasurementCache(cm) {\n    cm.display.externalMeasure = null;\n    removeChildren(cm.display.lineMeasure);\n    for (var i = 0; i < cm.display.view.length; i++)\n      { clearLineMeasurementCacheFor(cm.display.view[i]); }\n  }\n\n  function clearCaches(cm) {\n    clearLineMeasurementCache(cm);\n    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n    if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n    cm.display.lineNumChars = null;\n  }\n\n  function pageScrollX() {\n    // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n    // which causes page_Offset and bounding client rects to use\n    // different reference viewports and invalidate our calculations.\n    if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }\n    return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n  }\n  function pageScrollY() {\n    if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }\n    return window.pageYOffset || (document.documentElement || document.body).scrollTop\n  }\n\n  function widgetTopHeight(lineObj) {\n    var height = 0;\n    if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)\n      { height += widgetHeight(lineObj.widgets[i]); } } }\n    return height\n  }\n\n  // Converts a {top, bottom, left, right} box from line-local\n  // coordinates into another coordinate system. Context may be one of\n  // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n  // or \"page\".\n  function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n    if (!includeWidgets) {\n      var height = widgetTopHeight(lineObj);\n      rect.top += height; rect.bottom += height;\n    }\n    if (context == \"line\") { return rect }\n    if (!context) { context = \"local\"; }\n    var yOff = heightAtLine(lineObj);\n    if (context == \"local\") { yOff += paddingTop(cm.display); }\n    else { yOff -= cm.display.viewOffset; }\n    if (context == \"page\" || context == \"window\") {\n      var lOff = cm.display.lineSpace.getBoundingClientRect();\n      yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n      var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n      rect.left += xOff; rect.right += xOff;\n    }\n    rect.top += yOff; rect.bottom += yOff;\n    return rect\n  }\n\n  // Coverts a box from \"div\" coords to another coordinate system.\n  // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n  function fromCoordSystem(cm, coords, context) {\n    if (context == \"div\") { return coords }\n    var left = coords.left, top = coords.top;\n    // First move into \"page\" coordinate system\n    if (context == \"page\") {\n      left -= pageScrollX();\n      top -= pageScrollY();\n    } else if (context == \"local\" || !context) {\n      var localBox = cm.display.sizer.getBoundingClientRect();\n      left += localBox.left;\n      top += localBox.top;\n    }\n\n    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n  }\n\n  function charCoords(cm, pos, context, lineObj, bias) {\n    if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n  }\n\n  // Returns a box for a given cursor position, which may have an\n  // 'other' property containing the position of the secondary cursor\n  // on a bidi boundary.\n  // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n  // and after `char - 1` in writing order of `char - 1`\n  // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n  // and before `char` in writing order of `char`\n  // Examples (upper-case letters are RTL, lower-case are LTR):\n  //     Pos(0, 1, ...)\n  //     before   after\n  // ab     a|b     a|b\n  // aB     a|B     aB|\n  // Ab     |Ab     A|b\n  // AB     B|A     B|A\n  // Every position after the last character on a line is considered to stick\n  // to the last character on the line.\n  function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n    lineObj = lineObj || getLine(cm.doc, pos.line);\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    function get(ch, right) {\n      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n      if (right) { m.left = m.right; } else { m.right = m.left; }\n      return intoCoordSystem(cm, lineObj, m, context)\n    }\n    var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n    if (ch >= lineObj.text.length) {\n      ch = lineObj.text.length;\n      sticky = \"before\";\n    } else if (ch <= 0) {\n      ch = 0;\n      sticky = \"after\";\n    }\n    if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n    function getBidi(ch, partPos, invert) {\n      var part = order[partPos], right = part.level == 1;\n      return get(invert ? ch - 1 : ch, right != invert)\n    }\n    var partPos = getBidiPartAt(order, ch, sticky);\n    var other = bidiOther;\n    var val = getBidi(ch, partPos, sticky == \"before\");\n    if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n    return val\n  }\n\n  // Used to cheaply estimate the coordinates for a position. Used for\n  // intermediate scroll updates.\n  function estimateCoords(cm, pos) {\n    var left = 0;\n    pos = clipPos(cm.doc, pos);\n    if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n    var lineObj = getLine(cm.doc, pos.line);\n    var top = heightAtLine(lineObj) + paddingTop(cm.display);\n    return {left: left, right: left, top: top, bottom: top + lineObj.height}\n  }\n\n  // Positions returned by coordsChar contain some extra information.\n  // xRel is the relative x position of the input coordinates compared\n  // to the found position (so xRel > 0 means the coordinates are to\n  // the right of the character position, for example). When outside\n  // is true, that means the coordinates lie outside the line's\n  // vertical range.\n  function PosWithInfo(line, ch, sticky, outside, xRel) {\n    var pos = Pos(line, ch, sticky);\n    pos.xRel = xRel;\n    if (outside) { pos.outside = true; }\n    return pos\n  }\n\n  // Compute the character position closest to the given coordinates.\n  // Input must be lineSpace-local (\"div\" coordinate system).\n  function coordsChar(cm, x, y) {\n    var doc = cm.doc;\n    y += cm.display.viewOffset;\n    if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) }\n    var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n    if (lineN > last)\n      { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) }\n    if (x < 0) { x = 0; }\n\n    var lineObj = getLine(doc, lineN);\n    for (;;) {\n      var found = coordsCharInner(cm, lineObj, lineN, x, y);\n      var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 ? 1 : 0));\n      if (!collapsed) { return found }\n      var rangeEnd = collapsed.find(1);\n      if (rangeEnd.line == lineN) { return rangeEnd }\n      lineObj = getLine(doc, lineN = rangeEnd.line);\n    }\n  }\n\n  function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n    y -= widgetTopHeight(lineObj);\n    var end = lineObj.text.length;\n    var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n    end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n    return {begin: begin, end: end}\n  }\n\n  function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n    return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n  }\n\n  // Returns true if the given side of a box is after the given\n  // coordinates, in top-to-bottom, left-to-right order.\n  function boxIsAfter(box, x, y, left) {\n    return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n  }\n\n  function coordsCharInner(cm, lineObj, lineNo$$1, x, y) {\n    // Move y into line-local coordinate space\n    y -= heightAtLine(lineObj);\n    var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n    // When directly calling `measureCharPrepared`, we have to adjust\n    // for the widgets at this line.\n    var widgetHeight$$1 = widgetTopHeight(lineObj);\n    var begin = 0, end = lineObj.text.length, ltr = true;\n\n    var order = getOrder(lineObj, cm.doc.direction);\n    // If the line isn't plain left-to-right text, first figure out\n    // which bidi section the coordinates fall into.\n    if (order) {\n      var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n                   (cm, lineObj, lineNo$$1, preparedMeasure, order, x, y);\n      ltr = part.level != 1;\n      // The awkward -1 offsets are needed because findFirst (called\n      // on these below) will treat its first bound as inclusive,\n      // second as exclusive, but we want to actually address the\n      // characters in the part's range\n      begin = ltr ? part.from : part.to - 1;\n      end = ltr ? part.to : part.from - 1;\n    }\n\n    // A binary search to find the first character whose bounding box\n    // starts after the coordinates. If we run across any whose box wrap\n    // the coordinates, store that.\n    var chAround = null, boxAround = null;\n    var ch = findFirst(function (ch) {\n      var box = measureCharPrepared(cm, preparedMeasure, ch);\n      box.top += widgetHeight$$1; box.bottom += widgetHeight$$1;\n      if (!boxIsAfter(box, x, y, false)) { return false }\n      if (box.top <= y && box.left <= x) {\n        chAround = ch;\n        boxAround = box;\n      }\n      return true\n    }, begin, end);\n\n    var baseX, sticky, outside = false;\n    // If a box around the coordinates was found, use that\n    if (boxAround) {\n      // Distinguish coordinates nearer to the left or right side of the box\n      var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n      ch = chAround + (atStart ? 0 : 1);\n      sticky = atStart ? \"after\" : \"before\";\n      baseX = atLeft ? boxAround.left : boxAround.right;\n    } else {\n      // (Adjust for extended bound, if necessary.)\n      if (!ltr && (ch == end || ch == begin)) { ch++; }\n      // To determine which side to associate with, get the box to the\n      // left of the character and compare it's vertical position to the\n      // coordinates\n      sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n        (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight$$1 <= y) == ltr ?\n        \"after\" : \"before\";\n      // Now get accurate coordinates for this place, in order to get a\n      // base X position\n      var coords = cursorCoords(cm, Pos(lineNo$$1, ch, sticky), \"line\", lineObj, preparedMeasure);\n      baseX = coords.left;\n      outside = y < coords.top || y >= coords.bottom;\n    }\n\n    ch = skipExtendingChars(lineObj.text, ch, 1);\n    return PosWithInfo(lineNo$$1, ch, sticky, outside, x - baseX)\n  }\n\n  function coordsBidiPart(cm, lineObj, lineNo$$1, preparedMeasure, order, x, y) {\n    // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n    // situation, we can take this ordering to correspond to the visual\n    // ordering. This finds the first part whose end is after the given\n    // coordinates.\n    var index = findFirst(function (i) {\n      var part = order[i], ltr = part.level != 1;\n      return boxIsAfter(cursorCoords(cm, Pos(lineNo$$1, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n                                     \"line\", lineObj, preparedMeasure), x, y, true)\n    }, 0, order.length - 1);\n    var part = order[index];\n    // If this isn't the first part, the part's start is also after\n    // the coordinates, and the coordinates aren't on the same line as\n    // that start, move one part back.\n    if (index > 0) {\n      var ltr = part.level != 1;\n      var start = cursorCoords(cm, Pos(lineNo$$1, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n                               \"line\", lineObj, preparedMeasure);\n      if (boxIsAfter(start, x, y, true) && start.top > y)\n        { part = order[index - 1]; }\n    }\n    return part\n  }\n\n  function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n    // In a wrapped line, rtl text on wrapping boundaries can do things\n    // that don't correspond to the ordering in our `order` array at\n    // all, so a binary search doesn't work, and we want to return a\n    // part that only spans one line so that the binary search in\n    // coordsCharInner is safe. As such, we first find the extent of the\n    // wrapped line, and then do a flat search in which we discard any\n    // spans that aren't on the line.\n    var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n    var begin = ref.begin;\n    var end = ref.end;\n    if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n    var part = null, closestDist = null;\n    for (var i = 0; i < order.length; i++) {\n      var p = order[i];\n      if (p.from >= end || p.to <= begin) { continue }\n      var ltr = p.level != 1;\n      var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n      // Weigh against spans ending before this, so that they are only\n      // picked if nothing ends after\n      var dist = endX < x ? x - endX + 1e9 : endX - x;\n      if (!part || closestDist > dist) {\n        part = p;\n        closestDist = dist;\n      }\n    }\n    if (!part) { part = order[order.length - 1]; }\n    // Clip the part to the wrapped line.\n    if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n    if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n    return part\n  }\n\n  var measureText;\n  // Compute the default text height.\n  function textHeight(display) {\n    if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n    if (measureText == null) {\n      measureText = elt(\"pre\");\n      // Measure a bunch of lines, for browsers that compute\n      // fractional heights.\n      for (var i = 0; i < 49; ++i) {\n        measureText.appendChild(document.createTextNode(\"x\"));\n        measureText.appendChild(elt(\"br\"));\n      }\n      measureText.appendChild(document.createTextNode(\"x\"));\n    }\n    removeChildrenAndAdd(display.measure, measureText);\n    var height = measureText.offsetHeight / 50;\n    if (height > 3) { display.cachedTextHeight = height; }\n    removeChildren(display.measure);\n    return height || 1\n  }\n\n  // Compute the default character width.\n  function charWidth(display) {\n    if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n    var anchor = elt(\"span\", \"xxxxxxxxxx\");\n    var pre = elt(\"pre\", [anchor]);\n    removeChildrenAndAdd(display.measure, pre);\n    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n    if (width > 2) { display.cachedCharWidth = width; }\n    return width || 10\n  }\n\n  // Do a bulk-read of the DOM positions and sizes needed to draw the\n  // view, so that we don't interleave reading and writing to the DOM.\n  function getDimensions(cm) {\n    var d = cm.display, left = {}, width = {};\n    var gutterLeft = d.gutters.clientLeft;\n    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n      left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft;\n      width[cm.options.gutters[i]] = n.clientWidth;\n    }\n    return {fixedPos: compensateForHScroll(d),\n            gutterTotalWidth: d.gutters.offsetWidth,\n            gutterLeft: left,\n            gutterWidth: width,\n            wrapperWidth: d.wrapper.clientWidth}\n  }\n\n  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n  // but using getBoundingClientRect to get a sub-pixel-accurate\n  // result.\n  function compensateForHScroll(display) {\n    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n  }\n\n  // Returns a function that estimates the height of a line, to use as\n  // first approximation until the line becomes visible (and is thus\n  // properly measurable).\n  function estimateHeight(cm) {\n    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n    return function (line) {\n      if (lineIsHidden(cm.doc, line)) { return 0 }\n\n      var widgetsHeight = 0;\n      if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n        if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n      } }\n\n      if (wrapping)\n        { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n      else\n        { return widgetsHeight + th }\n    }\n  }\n\n  function estimateLineHeights(cm) {\n    var doc = cm.doc, est = estimateHeight(cm);\n    doc.iter(function (line) {\n      var estHeight = est(line);\n      if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n    });\n  }\n\n  // Given a mouse event, find the corresponding position. If liberal\n  // is false, it checks whether a gutter or scrollbar was clicked,\n  // and returns null if it was. forRect is used by rectangular\n  // selections, and tries to estimate a character position even for\n  // coordinates beyond the right of the text.\n  function posFromMouse(cm, e, liberal, forRect) {\n    var display = cm.display;\n    if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n    var x, y, space = display.lineSpace.getBoundingClientRect();\n    // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n    try { x = e.clientX - space.left; y = e.clientY - space.top; }\n    catch (e) { return null }\n    var coords = coordsChar(cm, x, y), line;\n    if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n    }\n    return coords\n  }\n\n  // Find the view element corresponding to a given line. Return null\n  // when the line isn't visible.\n  function findViewIndex(cm, n) {\n    if (n >= cm.display.viewTo) { return null }\n    n -= cm.display.viewFrom;\n    if (n < 0) { return null }\n    var view = cm.display.view;\n    for (var i = 0; i < view.length; i++) {\n      n -= view[i].size;\n      if (n < 0) { return i }\n    }\n  }\n\n  function updateSelection(cm) {\n    cm.display.input.showSelection(cm.display.input.prepareSelection());\n  }\n\n  function prepareSelection(cm, primary) {\n    if ( primary === void 0 ) primary = true;\n\n    var doc = cm.doc, result = {};\n    var curFragment = result.cursors = document.createDocumentFragment();\n    var selFragment = result.selection = document.createDocumentFragment();\n\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      if (!primary && i == doc.sel.primIndex) { continue }\n      var range$$1 = doc.sel.ranges[i];\n      if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue }\n      var collapsed = range$$1.empty();\n      if (collapsed || cm.options.showCursorWhenSelecting)\n        { drawSelectionCursor(cm, range$$1.head, curFragment); }\n      if (!collapsed)\n        { drawSelectionRange(cm, range$$1, selFragment); }\n    }\n    return result\n  }\n\n  // Draws a cursor for the given range\n  function drawSelectionCursor(cm, head, output) {\n    var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n    var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n    cursor.style.left = pos.left + \"px\";\n    cursor.style.top = pos.top + \"px\";\n    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n    if (pos.other) {\n      // Secondary cursor, shown when on a 'jump' in bi-directional text\n      var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n      otherCursor.style.display = \"\";\n      otherCursor.style.left = pos.other.left + \"px\";\n      otherCursor.style.top = pos.other.top + \"px\";\n      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n    }\n  }\n\n  function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n  // Draws the given range as a highlighted selection\n  function drawSelectionRange(cm, range$$1, output) {\n    var display = cm.display, doc = cm.doc;\n    var fragment = document.createDocumentFragment();\n    var padding = paddingH(cm.display), leftSide = padding.left;\n    var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n    var docLTR = doc.direction == \"ltr\";\n\n    function add(left, top, width, bottom) {\n      if (top < 0) { top = 0; }\n      top = Math.round(top);\n      bottom = Math.round(bottom);\n      fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n                             top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n                             height: \" + (bottom - top) + \"px\")));\n    }\n\n    function drawForLine(line, fromArg, toArg) {\n      var lineObj = getLine(doc, line);\n      var lineLen = lineObj.text.length;\n      var start, end;\n      function coords(ch, bias) {\n        return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n      }\n\n      function wrapX(pos, dir, side) {\n        var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n        var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n        var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n        return coords(ch, prop)[prop]\n      }\n\n      var order = getOrder(lineObj, doc.direction);\n      iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n        var ltr = dir == \"ltr\";\n        var fromPos = coords(from, ltr ? \"left\" : \"right\");\n        var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n        var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n        var first = i == 0, last = !order || i == order.length - 1;\n        if (toPos.top - fromPos.top <= 3) { // Single line\n          var openLeft = (docLTR ? openStart : openEnd) && first;\n          var openRight = (docLTR ? openEnd : openStart) && last;\n          var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n          var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n          add(left, fromPos.top, right - left, fromPos.bottom);\n        } else { // Multiple lines\n          var topLeft, topRight, botLeft, botRight;\n          if (ltr) {\n            topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n            topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n            botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n            botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n          } else {\n            topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n            topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n            botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n            botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n          }\n          add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n          if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n          add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n        }\n\n        if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n        if (cmpCoords(toPos, start) < 0) { start = toPos; }\n        if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n        if (cmpCoords(toPos, end) < 0) { end = toPos; }\n      });\n      return {start: start, end: end}\n    }\n\n    var sFrom = range$$1.from(), sTo = range$$1.to();\n    if (sFrom.line == sTo.line) {\n      drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n    } else {\n      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n      var singleVLine = visualLine(fromLine) == visualLine(toLine);\n      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n      if (singleVLine) {\n        if (leftEnd.top < rightStart.top - 2) {\n          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n        } else {\n          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n        }\n      }\n      if (leftEnd.bottom < rightStart.top)\n        { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n    }\n\n    output.appendChild(fragment);\n  }\n\n  // Cursor-blinking\n  function restartBlink(cm) {\n    if (!cm.state.focused) { return }\n    var display = cm.display;\n    clearInterval(display.blinker);\n    var on = true;\n    display.cursorDiv.style.visibility = \"\";\n    if (cm.options.cursorBlinkRate > 0)\n      { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\"; },\n        cm.options.cursorBlinkRate); }\n    else if (cm.options.cursorBlinkRate < 0)\n      { display.cursorDiv.style.visibility = \"hidden\"; }\n  }\n\n  function ensureFocus(cm) {\n    if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }\n  }\n\n  function delayBlurEvent(cm) {\n    cm.state.delayingBlurEvent = true;\n    setTimeout(function () { if (cm.state.delayingBlurEvent) {\n      cm.state.delayingBlurEvent = false;\n      onBlur(cm);\n    } }, 100);\n  }\n\n  function onFocus(cm, e) {\n    if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; }\n\n    if (cm.options.readOnly == \"nocursor\") { return }\n    if (!cm.state.focused) {\n      signal(cm, \"focus\", cm, e);\n      cm.state.focused = true;\n      addClass(cm.display.wrapper, \"CodeMirror-focused\");\n      // This test prevents this from firing when a context\n      // menu is closed (since the input reset would kill the\n      // select-all detection hack)\n      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n        cm.display.input.reset();\n        if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n      }\n      cm.display.input.receivedFocus();\n    }\n    restartBlink(cm);\n  }\n  function onBlur(cm, e) {\n    if (cm.state.delayingBlurEvent) { return }\n\n    if (cm.state.focused) {\n      signal(cm, \"blur\", cm, e);\n      cm.state.focused = false;\n      rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n    }\n    clearInterval(cm.display.blinker);\n    setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n  }\n\n  // Read the actual heights of the rendered lines, and update their\n  // stored heights to match.\n  function updateHeightsInViewport(cm) {\n    var display = cm.display;\n    var prevBottom = display.lineDiv.offsetTop;\n    for (var i = 0; i < display.view.length; i++) {\n      var cur = display.view[i], wrapping = cm.options.lineWrapping;\n      var height = (void 0), width = 0;\n      if (cur.hidden) { continue }\n      if (ie && ie_version < 8) {\n        var bot = cur.node.offsetTop + cur.node.offsetHeight;\n        height = bot - prevBottom;\n        prevBottom = bot;\n      } else {\n        var box = cur.node.getBoundingClientRect();\n        height = box.bottom - box.top;\n        // Check that lines don't extend past the right of the current\n        // editor width\n        if (!wrapping && cur.text.firstChild)\n          { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n      }\n      var diff = cur.line.height - height;\n      if (diff > .005 || diff < -.005) {\n        updateLineHeight(cur.line, height);\n        updateWidgetHeight(cur.line);\n        if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n          { updateWidgetHeight(cur.rest[j]); } }\n      }\n      if (width > cm.display.sizerWidth) {\n        var chWidth = Math.ceil(width / charWidth(cm.display));\n        if (chWidth > cm.display.maxLineLength) {\n          cm.display.maxLineLength = chWidth;\n          cm.display.maxLine = cur.line;\n          cm.display.maxLineChanged = true;\n        }\n      }\n    }\n  }\n\n  // Read and store the height of line widgets associated with the\n  // given line.\n  function updateWidgetHeight(line) {\n    if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n      var w = line.widgets[i], parent = w.node.parentNode;\n      if (parent) { w.height = parent.offsetHeight; }\n    } }\n  }\n\n  // Compute the lines that are visible in a given viewport (defaults\n  // the the current scroll position). viewport may contain top,\n  // height, and ensure (see op.scrollToPos) properties.\n  function visibleLines(display, doc, viewport) {\n    var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n    top = Math.floor(top - paddingTop(display));\n    var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n    // forces those lines into the viewport (if possible).\n    if (viewport && viewport.ensure) {\n      var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n      if (ensureFrom < from) {\n        from = ensureFrom;\n        to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n      } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n        from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n        to = ensureTo;\n      }\n    }\n    return {from: from, to: Math.max(to, from + 1)}\n  }\n\n  // Re-align line numbers and gutter marks to compensate for\n  // horizontal scrolling.\n  function alignHorizontally(cm) {\n    var display = cm.display, view = display.view;\n    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n    var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n    for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n      if (cm.options.fixedGutter) {\n        if (view[i].gutter)\n          { view[i].gutter.style.left = left; }\n        if (view[i].gutterBackground)\n          { view[i].gutterBackground.style.left = left; }\n      }\n      var align = view[i].alignable;\n      if (align) { for (var j = 0; j < align.length; j++)\n        { align[j].style.left = left; } }\n    } }\n    if (cm.options.fixedGutter)\n      { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n  }\n\n  // Used to ensure that the line number gutter is still the right\n  // size for the current document size. Returns true when an update\n  // is needed.\n  function maybeUpdateLineNumberWidth(cm) {\n    if (!cm.options.lineNumbers) { return false }\n    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n    if (last.length != display.lineNumChars) {\n      var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n                                                 \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n      display.lineGutter.style.width = \"\";\n      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n      display.lineNumWidth = display.lineNumInnerWidth + padding;\n      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n      display.lineGutter.style.width = display.lineNumWidth + \"px\";\n      updateGutterSpace(cm);\n      return true\n    }\n    return false\n  }\n\n  // SCROLLING THINGS INTO VIEW\n\n  // If an editor sits on the top or bottom of the window, partially\n  // scrolled out of view, this ensures that the cursor is visible.\n  function maybeScrollWindow(cm, rect) {\n    if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n    var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n    if (rect.top + box.top < 0) { doScroll = true; }\n    else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }\n    if (doScroll != null && !phantom) {\n      var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n                         top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n                         height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n                         left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n      cm.display.lineSpace.appendChild(scrollNode);\n      scrollNode.scrollIntoView(doScroll);\n      cm.display.lineSpace.removeChild(scrollNode);\n    }\n  }\n\n  // Scroll a given position into view (immediately), verifying that\n  // it actually became visible (as line heights are accurately\n  // measured, the position of something may 'drift' during drawing).\n  function scrollPosIntoView(cm, pos, end, margin) {\n    if (margin == null) { margin = 0; }\n    var rect;\n    if (!cm.options.lineWrapping && pos == end) {\n      // Set pos and end to the cursor positions around the character pos sticks to\n      // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n      // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n      pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n      end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n    }\n    for (var limit = 0; limit < 5; limit++) {\n      var changed = false;\n      var coords = cursorCoords(cm, pos);\n      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n      rect = {left: Math.min(coords.left, endCoords.left),\n              top: Math.min(coords.top, endCoords.top) - margin,\n              right: Math.max(coords.left, endCoords.left),\n              bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n      var scrollPos = calculateScrollPos(cm, rect);\n      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n      if (scrollPos.scrollTop != null) {\n        updateScrollTop(cm, scrollPos.scrollTop);\n        if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n      }\n      if (scrollPos.scrollLeft != null) {\n        setScrollLeft(cm, scrollPos.scrollLeft);\n        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n      }\n      if (!changed) { break }\n    }\n    return rect\n  }\n\n  // Scroll a given set of coordinates into view (immediately).\n  function scrollIntoView(cm, rect) {\n    var scrollPos = calculateScrollPos(cm, rect);\n    if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n    if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n  }\n\n  // Calculate a new scroll position needed to scroll the given\n  // rectangle into view. Returns an object with scrollTop and\n  // scrollLeft properties. When these are undefined, the\n  // vertical/horizontal position does not need to be adjusted.\n  function calculateScrollPos(cm, rect) {\n    var display = cm.display, snapMargin = textHeight(cm.display);\n    if (rect.top < 0) { rect.top = 0; }\n    var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n    var screen = displayHeight(cm), result = {};\n    if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n    var docBottom = cm.doc.height + paddingVert(display);\n    var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n    if (rect.top < screentop) {\n      result.scrollTop = atTop ? 0 : rect.top;\n    } else if (rect.bottom > screentop + screen) {\n      var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n      if (newTop != screentop) { result.scrollTop = newTop; }\n    }\n\n    var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;\n    var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);\n    var tooWide = rect.right - rect.left > screenw;\n    if (tooWide) { rect.right = rect.left + screenw; }\n    if (rect.left < 10)\n      { result.scrollLeft = 0; }\n    else if (rect.left < screenleft)\n      { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); }\n    else if (rect.right > screenw + screenleft - 3)\n      { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n    return result\n  }\n\n  // Store a relative adjustment to the scroll position in the current\n  // operation (to be applied when the operation finishes).\n  function addToScrollTop(cm, top) {\n    if (top == null) { return }\n    resolveScrollToPos(cm);\n    cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n  }\n\n  // Make sure that at the end of the operation the current cursor is\n  // shown.\n  function ensureCursorVisible(cm) {\n    resolveScrollToPos(cm);\n    var cur = cm.getCursor();\n    cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n  }\n\n  function scrollToCoords(cm, x, y) {\n    if (x != null || y != null) { resolveScrollToPos(cm); }\n    if (x != null) { cm.curOp.scrollLeft = x; }\n    if (y != null) { cm.curOp.scrollTop = y; }\n  }\n\n  function scrollToRange(cm, range$$1) {\n    resolveScrollToPos(cm);\n    cm.curOp.scrollToPos = range$$1;\n  }\n\n  // When an operation has its scrollToPos property set, and another\n  // scroll action is applied before the end of the operation, this\n  // 'simulates' scrolling that position into view in a cheap way, so\n  // that the effect of intermediate scroll commands is not ignored.\n  function resolveScrollToPos(cm) {\n    var range$$1 = cm.curOp.scrollToPos;\n    if (range$$1) {\n      cm.curOp.scrollToPos = null;\n      var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to);\n      scrollToCoordsRange(cm, from, to, range$$1.margin);\n    }\n  }\n\n  function scrollToCoordsRange(cm, from, to, margin) {\n    var sPos = calculateScrollPos(cm, {\n      left: Math.min(from.left, to.left),\n      top: Math.min(from.top, to.top) - margin,\n      right: Math.max(from.right, to.right),\n      bottom: Math.max(from.bottom, to.bottom) + margin\n    });\n    scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n  }\n\n  // Sync the scrollable area and scrollbars, ensure the viewport\n  // covers the visible area.\n  function updateScrollTop(cm, val) {\n    if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n    if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n    setScrollTop(cm, val, true);\n    if (gecko) { updateDisplaySimple(cm); }\n    startWorker(cm, 100);\n  }\n\n  function setScrollTop(cm, val, forceScroll) {\n    val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val);\n    if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n    cm.doc.scrollTop = val;\n    cm.display.scrollbars.setScrollTop(val);\n    if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n  }\n\n  // Sync scroller and scrollbar, ensure the gutter elements are\n  // aligned.\n  function setScrollLeft(cm, val, isScroller, forceScroll) {\n    val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);\n    if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n    cm.doc.scrollLeft = val;\n    alignHorizontally(cm);\n    if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n    cm.display.scrollbars.setScrollLeft(val);\n  }\n\n  // SCROLLBARS\n\n  // Prepare DOM reads needed to update the scrollbars. Done in one\n  // shot to minimize update/measure roundtrips.\n  function measureForScrollbars(cm) {\n    var d = cm.display, gutterW = d.gutters.offsetWidth;\n    var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n    return {\n      clientHeight: d.scroller.clientHeight,\n      viewHeight: d.wrapper.clientHeight,\n      scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n      viewWidth: d.wrapper.clientWidth,\n      barLeft: cm.options.fixedGutter ? gutterW : 0,\n      docHeight: docH,\n      scrollHeight: docH + scrollGap(cm) + d.barHeight,\n      nativeBarWidth: d.nativeBarWidth,\n      gutterWidth: gutterW\n    }\n  }\n\n  var NativeScrollbars = function(place, scroll, cm) {\n    this.cm = cm;\n    var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n    var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n    vert.tabIndex = horiz.tabIndex = -1;\n    place(vert); place(horiz);\n\n    on(vert, \"scroll\", function () {\n      if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n    });\n    on(horiz, \"scroll\", function () {\n      if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n    });\n\n    this.checkedZeroWidth = false;\n    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n    if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n  };\n\n  NativeScrollbars.prototype.update = function (measure) {\n    var needsH = measure.scrollWidth > measure.clientWidth + 1;\n    var needsV = measure.scrollHeight > measure.clientHeight + 1;\n    var sWidth = measure.nativeBarWidth;\n\n    if (needsV) {\n      this.vert.style.display = \"block\";\n      this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n      var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n      // A bug in IE8 can cause this value to be negative, so guard it.\n      this.vert.firstChild.style.height =\n        Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n    } else {\n      this.vert.style.display = \"\";\n      this.vert.firstChild.style.height = \"0\";\n    }\n\n    if (needsH) {\n      this.horiz.style.display = \"block\";\n      this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n      this.horiz.style.left = measure.barLeft + \"px\";\n      var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n      this.horiz.firstChild.style.width =\n        Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n    } else {\n      this.horiz.style.display = \"\";\n      this.horiz.firstChild.style.width = \"0\";\n    }\n\n    if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n      if (sWidth == 0) { this.zeroWidthHack(); }\n      this.checkedZeroWidth = true;\n    }\n\n    return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n  };\n\n  NativeScrollbars.prototype.setScrollLeft = function (pos) {\n    if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n    if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n  };\n\n  NativeScrollbars.prototype.setScrollTop = function (pos) {\n    if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n    if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n  };\n\n  NativeScrollbars.prototype.zeroWidthHack = function () {\n    var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n    this.horiz.style.height = this.vert.style.width = w;\n    this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n    this.disableHoriz = new Delayed;\n    this.disableVert = new Delayed;\n  };\n\n  NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n    bar.style.pointerEvents = \"auto\";\n    function maybeDisable() {\n      // To find out whether the scrollbar is still visible, we\n      // check whether the element under the pixel in the bottom\n      // right corner of the scrollbar box is the scrollbar box\n      // itself (when the bar is still visible) or its filler child\n      // (when the bar is hidden). If it is still visible, we keep\n      // it enabled, if it's hidden, we disable pointer events.\n      var box = bar.getBoundingClientRect();\n      var elt$$1 = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n          : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n      if (elt$$1 != bar) { bar.style.pointerEvents = \"none\"; }\n      else { delay.set(1000, maybeDisable); }\n    }\n    delay.set(1000, maybeDisable);\n  };\n\n  NativeScrollbars.prototype.clear = function () {\n    var parent = this.horiz.parentNode;\n    parent.removeChild(this.horiz);\n    parent.removeChild(this.vert);\n  };\n\n  var NullScrollbars = function () {};\n\n  NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n  NullScrollbars.prototype.setScrollLeft = function () {};\n  NullScrollbars.prototype.setScrollTop = function () {};\n  NullScrollbars.prototype.clear = function () {};\n\n  function updateScrollbars(cm, measure) {\n    if (!measure) { measure = measureForScrollbars(cm); }\n    var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n    updateScrollbarsInner(cm, measure);\n    for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n      if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n        { updateHeightsInViewport(cm); }\n      updateScrollbarsInner(cm, measureForScrollbars(cm));\n      startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n    }\n  }\n\n  // Re-synchronize the fake scrollbars with the actual size of the\n  // content.\n  function updateScrollbarsInner(cm, measure) {\n    var d = cm.display;\n    var sizes = d.scrollbars.update(measure);\n\n    d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n    d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n    d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n    if (sizes.right && sizes.bottom) {\n      d.scrollbarFiller.style.display = \"block\";\n      d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n      d.scrollbarFiller.style.width = sizes.right + \"px\";\n    } else { d.scrollbarFiller.style.display = \"\"; }\n    if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n      d.gutterFiller.style.display = \"block\";\n      d.gutterFiller.style.height = sizes.bottom + \"px\";\n      d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n    } else { d.gutterFiller.style.display = \"\"; }\n  }\n\n  var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n  function initScrollbars(cm) {\n    if (cm.display.scrollbars) {\n      cm.display.scrollbars.clear();\n      if (cm.display.scrollbars.addClass)\n        { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n    }\n\n    cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n      cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n      // Prevent clicks in the scrollbars from killing focus\n      on(node, \"mousedown\", function () {\n        if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n      });\n      node.setAttribute(\"cm-not-content\", \"true\");\n    }, function (pos, axis) {\n      if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n      else { updateScrollTop(cm, pos); }\n    }, cm);\n    if (cm.display.scrollbars.addClass)\n      { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n  }\n\n  // Operations are used to wrap a series of changes to the editor\n  // state in such a way that each change won't have to update the\n  // cursor and display (which would be awkward, slow, and\n  // error-prone). Instead, display updates are batched and then all\n  // combined and executed at once.\n\n  var nextOpId = 0;\n  // Start a new operation.\n  function startOperation(cm) {\n    cm.curOp = {\n      cm: cm,\n      viewChanged: false,      // Flag that indicates that lines might need to be redrawn\n      startHeight: cm.doc.height, // Used to detect need to update scrollbar\n      forceUpdate: false,      // Used to force a redraw\n      updateInput: 0,       // Whether to reset the input textarea\n      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)\n      changeObjs: null,        // Accumulated changes, for firing change events\n      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n      cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n      selectionChanged: false, // Whether the selection needs to be redrawn\n      updateMaxLine: false,    // Set when the widest line needs to be determined anew\n      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n      scrollToPos: null,       // Used to scroll to a specific position\n      focus: false,\n      id: ++nextOpId           // Unique ID\n    };\n    pushOperation(cm.curOp);\n  }\n\n  // Finish an operation, updating the display and signalling delayed events\n  function endOperation(cm) {\n    var op = cm.curOp;\n    if (op) { finishOperation(op, function (group) {\n      for (var i = 0; i < group.ops.length; i++)\n        { group.ops[i].cm.curOp = null; }\n      endOperations(group);\n    }); }\n  }\n\n  // The DOM updates done when an operation finishes are batched so\n  // that the minimum number of relayouts are required.\n  function endOperations(group) {\n    var ops = group.ops;\n    for (var i = 0; i < ops.length; i++) // Read DOM\n      { endOperation_R1(ops[i]); }\n    for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n      { endOperation_W1(ops[i$1]); }\n    for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n      { endOperation_R2(ops[i$2]); }\n    for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n      { endOperation_W2(ops[i$3]); }\n    for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n      { endOperation_finish(ops[i$4]); }\n  }\n\n  function endOperation_R1(op) {\n    var cm = op.cm, display = cm.display;\n    maybeClipScrollbars(cm);\n    if (op.updateMaxLine) { findMaxLine(cm); }\n\n    op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n      op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n                         op.scrollToPos.to.line >= display.viewTo) ||\n      display.maxLineChanged && cm.options.lineWrapping;\n    op.update = op.mustUpdate &&\n      new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n  }\n\n  function endOperation_W1(op) {\n    op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n  }\n\n  function endOperation_R2(op) {\n    var cm = op.cm, display = cm.display;\n    if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n    op.barMeasure = measureForScrollbars(cm);\n\n    // If the max line changed since it was last measured, measure it,\n    // and ensure the document's width matches it.\n    // updateDisplay_W2 will use these properties to do the actual resizing\n    if (display.maxLineChanged && !cm.options.lineWrapping) {\n      op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n      cm.display.sizerWidth = op.adjustWidthTo;\n      op.barMeasure.scrollWidth =\n        Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n      op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n    }\n\n    if (op.updatedDisplay || op.selectionChanged)\n      { op.preparedSelection = display.input.prepareSelection(); }\n  }\n\n  function endOperation_W2(op) {\n    var cm = op.cm;\n\n    if (op.adjustWidthTo != null) {\n      cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n      if (op.maxScrollLeft < cm.doc.scrollLeft)\n        { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n      cm.display.maxLineChanged = false;\n    }\n\n    var takeFocus = op.focus && op.focus == activeElt();\n    if (op.preparedSelection)\n      { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n    if (op.updatedDisplay || op.startHeight != cm.doc.height)\n      { updateScrollbars(cm, op.barMeasure); }\n    if (op.updatedDisplay)\n      { setDocumentHeight(cm, op.barMeasure); }\n\n    if (op.selectionChanged) { restartBlink(cm); }\n\n    if (cm.state.focused && op.updateInput)\n      { cm.display.input.reset(op.typing); }\n    if (takeFocus) { ensureFocus(op.cm); }\n  }\n\n  function endOperation_finish(op) {\n    var cm = op.cm, display = cm.display, doc = cm.doc;\n\n    if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n    // Abort mouse wheel delta measurement, when scrolling explicitly\n    if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n      { display.wheelStartX = display.wheelStartY = null; }\n\n    // Propagate the scroll position to the actual DOM scroller\n    if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n    if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n    // If we need to scroll a specific position into view, do so.\n    if (op.scrollToPos) {\n      var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n                                   clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n      maybeScrollWindow(cm, rect);\n    }\n\n    // Fire events for markers that are hidden/unidden by editing or\n    // undoing\n    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n    if (hidden) { for (var i = 0; i < hidden.length; ++i)\n      { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n    if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n      { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n    if (display.wrapper.offsetHeight)\n      { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n    // Fire change events, and delayed event handlers\n    if (op.changeObjs)\n      { signal(cm, \"changes\", cm, op.changeObjs); }\n    if (op.update)\n      { op.update.finish(); }\n  }\n\n  // Run the given function in an operation\n  function runInOp(cm, f) {\n    if (cm.curOp) { return f() }\n    startOperation(cm);\n    try { return f() }\n    finally { endOperation(cm); }\n  }\n  // Wraps a function in an operation. Returns the wrapped function.\n  function operation(cm, f) {\n    return function() {\n      if (cm.curOp) { return f.apply(cm, arguments) }\n      startOperation(cm);\n      try { return f.apply(cm, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n  // Used to add methods to editor and doc instances, wrapping them in\n  // operations.\n  function methodOp(f) {\n    return function() {\n      if (this.curOp) { return f.apply(this, arguments) }\n      startOperation(this);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(this); }\n    }\n  }\n  function docMethodOp(f) {\n    return function() {\n      var cm = this.cm;\n      if (!cm || cm.curOp) { return f.apply(this, arguments) }\n      startOperation(cm);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n\n  // Updates the display.view data structure for a given change to the\n  // document. From and to are in pre-change coordinates. Lendiff is\n  // the amount of lines added or subtracted by the change. This is\n  // used for changes that span multiple lines, or change the way\n  // lines are divided into visual lines. regLineChange (below)\n  // registers single-line changes.\n  function regChange(cm, from, to, lendiff) {\n    if (from == null) { from = cm.doc.first; }\n    if (to == null) { to = cm.doc.first + cm.doc.size; }\n    if (!lendiff) { lendiff = 0; }\n\n    var display = cm.display;\n    if (lendiff && to < display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers > from))\n      { display.updateLineNumbers = from; }\n\n    cm.curOp.viewChanged = true;\n\n    if (from >= display.viewTo) { // Change after\n      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n        { resetView(cm); }\n    } else if (to <= display.viewFrom) { // Change before\n      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n        resetView(cm);\n      } else {\n        display.viewFrom += lendiff;\n        display.viewTo += lendiff;\n      }\n    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n      resetView(cm);\n    } else if (from <= display.viewFrom) { // Top overlap\n      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cut) {\n        display.view = display.view.slice(cut.index);\n        display.viewFrom = cut.lineN;\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    } else if (to >= display.viewTo) { // Bottom overlap\n      var cut$1 = viewCuttingPoint(cm, from, from, -1);\n      if (cut$1) {\n        display.view = display.view.slice(0, cut$1.index);\n        display.viewTo = cut$1.lineN;\n      } else {\n        resetView(cm);\n      }\n    } else { // Gap in the middle\n      var cutTop = viewCuttingPoint(cm, from, from, -1);\n      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cutTop && cutBot) {\n        display.view = display.view.slice(0, cutTop.index)\n          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n          .concat(display.view.slice(cutBot.index));\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    }\n\n    var ext = display.externalMeasured;\n    if (ext) {\n      if (to < ext.lineN)\n        { ext.lineN += lendiff; }\n      else if (from < ext.lineN + ext.size)\n        { display.externalMeasured = null; }\n    }\n  }\n\n  // Register a change to a single line. Type must be one of \"text\",\n  // \"gutter\", \"class\", \"widget\"\n  function regLineChange(cm, line, type) {\n    cm.curOp.viewChanged = true;\n    var display = cm.display, ext = cm.display.externalMeasured;\n    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n      { display.externalMeasured = null; }\n\n    if (line < display.viewFrom || line >= display.viewTo) { return }\n    var lineView = display.view[findViewIndex(cm, line)];\n    if (lineView.node == null) { return }\n    var arr = lineView.changes || (lineView.changes = []);\n    if (indexOf(arr, type) == -1) { arr.push(type); }\n  }\n\n  // Clear the view.\n  function resetView(cm) {\n    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n    cm.display.view = [];\n    cm.display.viewOffset = 0;\n  }\n\n  function viewCuttingPoint(cm, oldN, newN, dir) {\n    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n      { return {index: index, lineN: newN} }\n    var n = cm.display.viewFrom;\n    for (var i = 0; i < index; i++)\n      { n += view[i].size; }\n    if (n != oldN) {\n      if (dir > 0) {\n        if (index == view.length - 1) { return null }\n        diff = (n + view[index].size) - oldN;\n        index++;\n      } else {\n        diff = n - oldN;\n      }\n      oldN += diff; newN += diff;\n    }\n    while (visualLineNo(cm.doc, newN) != newN) {\n      if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n      index += dir;\n    }\n    return {index: index, lineN: newN}\n  }\n\n  // Force the view to cover a given range, adding empty view element\n  // or clipping off existing ones as needed.\n  function adjustView(cm, from, to) {\n    var display = cm.display, view = display.view;\n    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n      display.view = buildViewArray(cm, from, to);\n      display.viewFrom = from;\n    } else {\n      if (display.viewFrom > from)\n        { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n      else if (display.viewFrom < from)\n        { display.view = display.view.slice(findViewIndex(cm, from)); }\n      display.viewFrom = from;\n      if (display.viewTo < to)\n        { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n      else if (display.viewTo > to)\n        { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n    }\n    display.viewTo = to;\n  }\n\n  // Count the number of lines in the view whose DOM representation is\n  // out of date (or nonexistent).\n  function countDirtyView(cm) {\n    var view = cm.display.view, dirty = 0;\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n    }\n    return dirty\n  }\n\n  // HIGHLIGHT WORKER\n\n  function startWorker(cm, time) {\n    if (cm.doc.highlightFrontier < cm.display.viewTo)\n      { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n  }\n\n  function highlightWorker(cm) {\n    var doc = cm.doc;\n    if (doc.highlightFrontier >= cm.display.viewTo) { return }\n    var end = +new Date + cm.options.workTime;\n    var context = getContextBefore(cm, doc.highlightFrontier);\n    var changedLines = [];\n\n    doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n      if (context.line >= cm.display.viewFrom) { // Visible\n        var oldStyles = line.styles;\n        var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n        var highlighted = highlightLine(cm, line, context, true);\n        if (resetState) { context.state = resetState; }\n        line.styles = highlighted.styles;\n        var oldCls = line.styleClasses, newCls = highlighted.classes;\n        if (newCls) { line.styleClasses = newCls; }\n        else if (oldCls) { line.styleClasses = null; }\n        var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n          oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n        for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n        if (ischange) { changedLines.push(context.line); }\n        line.stateAfter = context.save();\n        context.nextLine();\n      } else {\n        if (line.text.length <= cm.options.maxHighlightLength)\n          { processLine(cm, line.text, context); }\n        line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n        context.nextLine();\n      }\n      if (+new Date > end) {\n        startWorker(cm, cm.options.workDelay);\n        return true\n      }\n    });\n    doc.highlightFrontier = context.line;\n    doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n    if (changedLines.length) { runInOp(cm, function () {\n      for (var i = 0; i < changedLines.length; i++)\n        { regLineChange(cm, changedLines[i], \"text\"); }\n    }); }\n  }\n\n  // DISPLAY DRAWING\n\n  var DisplayUpdate = function(cm, viewport, force) {\n    var display = cm.display;\n\n    this.viewport = viewport;\n    // Store some values that we'll need later (but don't want to force a relayout for)\n    this.visible = visibleLines(display, cm.doc, viewport);\n    this.editorIsHidden = !display.wrapper.offsetWidth;\n    this.wrapperHeight = display.wrapper.clientHeight;\n    this.wrapperWidth = display.wrapper.clientWidth;\n    this.oldDisplayWidth = displayWidth(cm);\n    this.force = force;\n    this.dims = getDimensions(cm);\n    this.events = [];\n  };\n\n  DisplayUpdate.prototype.signal = function (emitter, type) {\n    if (hasHandler(emitter, type))\n      { this.events.push(arguments); }\n  };\n  DisplayUpdate.prototype.finish = function () {\n      var this$1 = this;\n\n    for (var i = 0; i < this.events.length; i++)\n      { signal.apply(null, this$1.events[i]); }\n  };\n\n  function maybeClipScrollbars(cm) {\n    var display = cm.display;\n    if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n      display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n      display.heightForcer.style.height = scrollGap(cm) + \"px\";\n      display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n      display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n      display.scrollbarsClipped = true;\n    }\n  }\n\n  function selectionSnapshot(cm) {\n    if (cm.hasFocus()) { return null }\n    var active = activeElt();\n    if (!active || !contains(cm.display.lineDiv, active)) { return null }\n    var result = {activeElt: active};\n    if (window.getSelection) {\n      var sel = window.getSelection();\n      if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n        result.anchorNode = sel.anchorNode;\n        result.anchorOffset = sel.anchorOffset;\n        result.focusNode = sel.focusNode;\n        result.focusOffset = sel.focusOffset;\n      }\n    }\n    return result\n  }\n\n  function restoreSelection(snapshot) {\n    if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }\n    snapshot.activeElt.focus();\n    if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n      var sel = window.getSelection(), range$$1 = document.createRange();\n      range$$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n      range$$1.collapse(false);\n      sel.removeAllRanges();\n      sel.addRange(range$$1);\n      sel.extend(snapshot.focusNode, snapshot.focusOffset);\n    }\n  }\n\n  // Does the actual updating of the line display. Bails out\n  // (returning false) when there is nothing to be done and forced is\n  // false.\n  function updateDisplayIfNeeded(cm, update) {\n    var display = cm.display, doc = cm.doc;\n\n    if (update.editorIsHidden) {\n      resetView(cm);\n      return false\n    }\n\n    // Bail out if the visible area is already rendered and nothing changed.\n    if (!update.force &&\n        update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n        display.renderedView == display.view && countDirtyView(cm) == 0)\n      { return false }\n\n    if (maybeUpdateLineNumberWidth(cm)) {\n      resetView(cm);\n      update.dims = getDimensions(cm);\n    }\n\n    // Compute a suitable new viewport (from & to)\n    var end = doc.first + doc.size;\n    var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n    var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n    if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n    if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n    if (sawCollapsedSpans) {\n      from = visualLineNo(cm.doc, from);\n      to = visualLineEndNo(cm.doc, to);\n    }\n\n    var different = from != display.viewFrom || to != display.viewTo ||\n      display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n    adjustView(cm, from, to);\n\n    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n    // Position the mover div to align with the current scroll position\n    cm.display.mover.style.top = display.viewOffset + \"px\";\n\n    var toUpdate = countDirtyView(cm);\n    if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n      { return false }\n\n    // For big changes, we hide the enclosing element during the\n    // update, since that speeds up the operations on most browsers.\n    var selSnapshot = selectionSnapshot(cm);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n    patchDisplay(cm, display.updateLineNumbers, update.dims);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n    display.renderedView = display.view;\n    // There might have been a widget with a focused element that got\n    // hidden or updated, if so re-focus it.\n    restoreSelection(selSnapshot);\n\n    // Prevent selection and cursors from interfering with the scroll\n    // width and height.\n    removeChildren(display.cursorDiv);\n    removeChildren(display.selectionDiv);\n    display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n    if (different) {\n      display.lastWrapHeight = update.wrapperHeight;\n      display.lastWrapWidth = update.wrapperWidth;\n      startWorker(cm, 400);\n    }\n\n    display.updateLineNumbers = null;\n\n    return true\n  }\n\n  function postUpdateDisplay(cm, update) {\n    var viewport = update.viewport;\n\n    for (var first = true;; first = false) {\n      if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n        // Clip forced viewport to actual scrollable area.\n        if (viewport && viewport.top != null)\n          { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n        // Updated line heights might result in the drawn area not\n        // actually covering the viewport. Keep looping until it does.\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n          { break }\n      }\n      if (!updateDisplayIfNeeded(cm, update)) { break }\n      updateHeightsInViewport(cm);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.force = false;\n    }\n\n    update.signal(cm, \"update\", cm);\n    if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n      update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n      cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n    }\n  }\n\n  function updateDisplaySimple(cm, viewport) {\n    var update = new DisplayUpdate(cm, viewport);\n    if (updateDisplayIfNeeded(cm, update)) {\n      updateHeightsInViewport(cm);\n      postUpdateDisplay(cm, update);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.finish();\n    }\n  }\n\n  // Sync the actual display DOM structure with display.view, removing\n  // nodes for lines that are no longer in view, and creating the ones\n  // that are not there yet, and updating the ones that are out of\n  // date.\n  function patchDisplay(cm, updateNumbersFrom, dims) {\n    var display = cm.display, lineNumbers = cm.options.lineNumbers;\n    var container = display.lineDiv, cur = container.firstChild;\n\n    function rm(node) {\n      var next = node.nextSibling;\n      // Works around a throw-scroll bug in OS X Webkit\n      if (webkit && mac && cm.display.currentWheelTarget == node)\n        { node.style.display = \"none\"; }\n      else\n        { node.parentNode.removeChild(node); }\n      return next\n    }\n\n    var view = display.view, lineN = display.viewFrom;\n    // Loop over the elements in the view, syncing cur (the DOM nodes\n    // in display.lineDiv) with the view as we go.\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n        var node = buildLineElement(cm, lineView, lineN, dims);\n        container.insertBefore(node, cur);\n      } else { // Already drawn\n        while (cur != lineView.node) { cur = rm(cur); }\n        var updateNumber = lineNumbers && updateNumbersFrom != null &&\n          updateNumbersFrom <= lineN && lineView.lineNumber;\n        if (lineView.changes) {\n          if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n          updateLineForChanges(cm, lineView, lineN, dims);\n        }\n        if (updateNumber) {\n          removeChildren(lineView.lineNumber);\n          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n        }\n        cur = lineView.node.nextSibling;\n      }\n      lineN += lineView.size;\n    }\n    while (cur) { cur = rm(cur); }\n  }\n\n  function updateGutterSpace(cm) {\n    var width = cm.display.gutters.offsetWidth;\n    cm.display.sizer.style.marginLeft = width + \"px\";\n  }\n\n  function setDocumentHeight(cm, measure) {\n    cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n    cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n    cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n  }\n\n  // Rebuild the gutter elements, ensure the margin to the left of the\n  // code matches their width.\n  function updateGutters(cm) {\n    var gutters = cm.display.gutters, specs = cm.options.gutters;\n    removeChildren(gutters);\n    var i = 0;\n    for (; i < specs.length; ++i) {\n      var gutterClass = specs[i];\n      var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + gutterClass));\n      if (gutterClass == \"CodeMirror-linenumbers\") {\n        cm.display.lineGutter = gElt;\n        gElt.style.width = (cm.display.lineNumWidth || 1) + \"px\";\n      }\n    }\n    gutters.style.display = i ? \"\" : \"none\";\n    updateGutterSpace(cm);\n  }\n\n  // Make sure the gutters options contains the element\n  // \"CodeMirror-linenumbers\" when the lineNumbers option is true.\n  function setGuttersForLineNumbers(options) {\n    var found = indexOf(options.gutters, \"CodeMirror-linenumbers\");\n    if (found == -1 && options.lineNumbers) {\n      options.gutters = options.gutters.concat([\"CodeMirror-linenumbers\"]);\n    } else if (found > -1 && !options.lineNumbers) {\n      options.gutters = options.gutters.slice(0);\n      options.gutters.splice(found, 1);\n    }\n  }\n\n  // Since the delta values reported on mouse wheel events are\n  // unstandardized between browsers and even browser versions, and\n  // generally horribly unpredictable, this code starts by measuring\n  // the scroll effect that the first few mouse wheel events have,\n  // and, from that, detects the way it can convert deltas to pixel\n  // offsets afterwards.\n  //\n  // The reason we want to know the amount a wheel event will scroll\n  // is that it gives us a chance to update the display before the\n  // actual scrolling happens, reducing flickering.\n\n  var wheelSamples = 0, wheelPixelsPerUnit = null;\n  // Fill in a browser-detected starting value on browsers where we\n  // know one. These don't have to be accurate -- the result of them\n  // being wrong would just be a slight flicker on the first wheel\n  // scroll (if it is large enough).\n  if (ie) { wheelPixelsPerUnit = -.53; }\n  else if (gecko) { wheelPixelsPerUnit = 15; }\n  else if (chrome) { wheelPixelsPerUnit = -.7; }\n  else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n  function wheelEventDelta(e) {\n    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n    else if (dy == null) { dy = e.wheelDelta; }\n    return {x: dx, y: dy}\n  }\n  function wheelEventPixels(e) {\n    var delta = wheelEventDelta(e);\n    delta.x *= wheelPixelsPerUnit;\n    delta.y *= wheelPixelsPerUnit;\n    return delta\n  }\n\n  function onScrollWheel(cm, e) {\n    var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n\n    var display = cm.display, scroll = display.scroller;\n    // Quit if there's nothing to scroll here\n    var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n    var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n    if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n    // Webkit browsers on OS X abort momentum scrolls when the target\n    // of the scroll event is removed from the scrollable element.\n    // This hack (see related code in patchDisplay) makes sure the\n    // element is kept around.\n    if (dy && mac && webkit) {\n      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n        for (var i = 0; i < view.length; i++) {\n          if (view[i].node == cur) {\n            cm.display.currentWheelTarget = cur;\n            break outer\n          }\n        }\n      }\n    }\n\n    // On some browsers, horizontal scrolling will cause redraws to\n    // happen before the gutter has been realigned, causing it to\n    // wriggle around in a most unseemly way. When we have an\n    // estimated pixels/delta value, we just handle horizontal\n    // scrolling entirely here. It'll be slightly off from native, but\n    // better than glitching out.\n    if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n      if (dy && canScrollY)\n        { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }\n      setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));\n      // Only prevent default scrolling if vertical scrolling is\n      // actually possible. Otherwise, it causes vertical scroll\n      // jitter on OSX trackpads when deltaX is small and deltaY\n      // is large (issue #3579)\n      if (!dy || (dy && canScrollY))\n        { e_preventDefault(e); }\n      display.wheelStartX = null; // Abort measurement, if in progress\n      return\n    }\n\n    // 'Project' the visible viewport to cover the area that is being\n    // scrolled into view (if we know enough to estimate it).\n    if (dy && wheelPixelsPerUnit != null) {\n      var pixels = dy * wheelPixelsPerUnit;\n      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n      if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n      else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n      updateDisplaySimple(cm, {top: top, bottom: bot});\n    }\n\n    if (wheelSamples < 20) {\n      if (display.wheelStartX == null) {\n        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n        display.wheelDX = dx; display.wheelDY = dy;\n        setTimeout(function () {\n          if (display.wheelStartX == null) { return }\n          var movedX = scroll.scrollLeft - display.wheelStartX;\n          var movedY = scroll.scrollTop - display.wheelStartY;\n          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n            (movedX && display.wheelDX && movedX / display.wheelDX);\n          display.wheelStartX = display.wheelStartY = null;\n          if (!sample) { return }\n          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n          ++wheelSamples;\n        }, 200);\n      } else {\n        display.wheelDX += dx; display.wheelDY += dy;\n      }\n    }\n  }\n\n  // Selection objects are immutable. A new one is created every time\n  // the selection changes. A selection is one or more non-overlapping\n  // (and non-touching) ranges, sorted, and an integer that indicates\n  // which one is the primary selection (the one that's scrolled into\n  // view, that getCursor returns, etc).\n  var Selection = function(ranges, primIndex) {\n    this.ranges = ranges;\n    this.primIndex = primIndex;\n  };\n\n  Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n  Selection.prototype.equals = function (other) {\n      var this$1 = this;\n\n    if (other == this) { return true }\n    if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var here = this$1.ranges[i], there = other.ranges[i];\n      if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n    }\n    return true\n  };\n\n  Selection.prototype.deepCopy = function () {\n      var this$1 = this;\n\n    var out = [];\n    for (var i = 0; i < this.ranges.length; i++)\n      { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)); }\n    return new Selection(out, this.primIndex)\n  };\n\n  Selection.prototype.somethingSelected = function () {\n      var this$1 = this;\n\n    for (var i = 0; i < this.ranges.length; i++)\n      { if (!this$1.ranges[i].empty()) { return true } }\n    return false\n  };\n\n  Selection.prototype.contains = function (pos, end) {\n      var this$1 = this;\n\n    if (!end) { end = pos; }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var range = this$1.ranges[i];\n      if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n        { return i }\n    }\n    return -1\n  };\n\n  var Range = function(anchor, head) {\n    this.anchor = anchor; this.head = head;\n  };\n\n  Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n  Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n  Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n  // Take an unsorted, potentially overlapping set of ranges, and\n  // build a selection out of it. 'Consumes' ranges array (modifying\n  // it).\n  function normalizeSelection(cm, ranges, primIndex) {\n    var mayTouch = cm && cm.options.selectionsMayTouch;\n    var prim = ranges[primIndex];\n    ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n    primIndex = indexOf(ranges, prim);\n    for (var i = 1; i < ranges.length; i++) {\n      var cur = ranges[i], prev = ranges[i - 1];\n      var diff = cmp(prev.to(), cur.from());\n      if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n        if (i <= primIndex) { --primIndex; }\n        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n      }\n    }\n    return new Selection(ranges, primIndex)\n  }\n\n  function simpleSelection(anchor, head) {\n    return new Selection([new Range(anchor, head || anchor)], 0)\n  }\n\n  // Compute the position of the end of a change (its 'to' property\n  // refers to the pre-change end).\n  function changeEnd(change) {\n    if (!change.text) { return change.to }\n    return Pos(change.from.line + change.text.length - 1,\n               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n  }\n\n  // Adjust a position to refer to the post-change position of the\n  // same text, or the end of the change if the change covers it.\n  function adjustForChange(pos, change) {\n    if (cmp(pos, change.from) < 0) { return pos }\n    if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n    var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n    if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n    return Pos(line, ch)\n  }\n\n  function computeSelAfterChange(doc, change) {\n    var out = [];\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      var range = doc.sel.ranges[i];\n      out.push(new Range(adjustForChange(range.anchor, change),\n                         adjustForChange(range.head, change)));\n    }\n    return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n  }\n\n  function offsetPos(pos, old, nw) {\n    if (pos.line == old.line)\n      { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n    else\n      { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n  }\n\n  // Used by replaceSelections to allow moving the selection to the\n  // start or around the replaced test. Hint may be \"start\" or \"around\".\n  function computeReplacedSel(doc, changes, hint) {\n    var out = [];\n    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n    for (var i = 0; i < changes.length; i++) {\n      var change = changes[i];\n      var from = offsetPos(change.from, oldPrev, newPrev);\n      var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n      oldPrev = change.to;\n      newPrev = to;\n      if (hint == \"around\") {\n        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n        out[i] = new Range(inv ? to : from, inv ? from : to);\n      } else {\n        out[i] = new Range(from, from);\n      }\n    }\n    return new Selection(out, doc.sel.primIndex)\n  }\n\n  // Used to get the editor into a consistent state again when options change.\n\n  function loadMode(cm) {\n    cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n    resetModeState(cm);\n  }\n\n  function resetModeState(cm) {\n    cm.doc.iter(function (line) {\n      if (line.stateAfter) { line.stateAfter = null; }\n      if (line.styles) { line.styles = null; }\n    });\n    cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n    startWorker(cm, 100);\n    cm.state.modeGen++;\n    if (cm.curOp) { regChange(cm); }\n  }\n\n  // DOCUMENT DATA STRUCTURE\n\n  // By default, updates that start and end at the beginning of a line\n  // are treated specially, in order to make the association of line\n  // widgets and marker elements with the text behave more intuitive.\n  function isWholeLineUpdate(doc, change) {\n    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n      (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n  }\n\n  // Perform a change on the document data structure.\n  function updateDoc(doc, change, markedSpans, estimateHeight$$1) {\n    function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n    function update(line, text, spans) {\n      updateLine(line, text, spans, estimateHeight$$1);\n      signalLater(line, \"change\", line, change);\n    }\n    function linesFor(start, end) {\n      var result = [];\n      for (var i = start; i < end; ++i)\n        { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)); }\n      return result\n    }\n\n    var from = change.from, to = change.to, text = change.text;\n    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n    // Adjust the line structure\n    if (change.full) {\n      doc.insert(0, linesFor(0, text.length));\n      doc.remove(text.length, doc.size - text.length);\n    } else if (isWholeLineUpdate(doc, change)) {\n      // This is a whole-line replace. Treated specially to make\n      // sure line objects move the way they are supposed to.\n      var added = linesFor(0, text.length - 1);\n      update(lastLine, lastLine.text, lastSpans);\n      if (nlines) { doc.remove(from.line, nlines); }\n      if (added.length) { doc.insert(from.line, added); }\n    } else if (firstLine == lastLine) {\n      if (text.length == 1) {\n        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n      } else {\n        var added$1 = linesFor(1, text.length - 1);\n        added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1));\n        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n        doc.insert(from.line + 1, added$1);\n      }\n    } else if (text.length == 1) {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n      doc.remove(from.line + 1, nlines);\n    } else {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n      var added$2 = linesFor(1, text.length - 1);\n      if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n      doc.insert(from.line + 1, added$2);\n    }\n\n    signalLater(doc, \"change\", doc, change);\n  }\n\n  // Call f for all linked documents.\n  function linkedDocs(doc, f, sharedHistOnly) {\n    function propagate(doc, skip, sharedHist) {\n      if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n        var rel = doc.linked[i];\n        if (rel.doc == skip) { continue }\n        var shared = sharedHist && rel.sharedHist;\n        if (sharedHistOnly && !shared) { continue }\n        f(rel.doc, shared);\n        propagate(rel.doc, doc, shared);\n      } }\n    }\n    propagate(doc, null, true);\n  }\n\n  // Attach a document to an editor.\n  function attachDoc(cm, doc) {\n    if (doc.cm) { throw new Error(\"This document is already in use.\") }\n    cm.doc = doc;\n    doc.cm = cm;\n    estimateLineHeights(cm);\n    loadMode(cm);\n    setDirectionClass(cm);\n    if (!cm.options.lineWrapping) { findMaxLine(cm); }\n    cm.options.mode = doc.modeOption;\n    regChange(cm);\n  }\n\n  function setDirectionClass(cm) {\n  (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n  }\n\n  function directionChanged(cm) {\n    runInOp(cm, function () {\n      setDirectionClass(cm);\n      regChange(cm);\n    });\n  }\n\n  function History(startGen) {\n    // Arrays of change events and selections. Doing something adds an\n    // event to done and clears undo. Undoing moves events from done\n    // to undone, redoing moves them in the other direction.\n    this.done = []; this.undone = [];\n    this.undoDepth = Infinity;\n    // Used to track when changes can be merged into a single undo\n    // event\n    this.lastModTime = this.lastSelTime = 0;\n    this.lastOp = this.lastSelOp = null;\n    this.lastOrigin = this.lastSelOrigin = null;\n    // Used by the isClean() method\n    this.generation = this.maxGeneration = startGen || 1;\n  }\n\n  // Create a history change event from an updateDoc-style change\n  // object.\n  function historyChangeFromChange(doc, change) {\n    var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n    linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n    return histChange\n  }\n\n  // Pop all selection events off the end of a history array. Stop at\n  // a change event.\n  function clearSelectionEvents(array) {\n    while (array.length) {\n      var last = lst(array);\n      if (last.ranges) { array.pop(); }\n      else { break }\n    }\n  }\n\n  // Find the top change event in the history. Pop off selection\n  // events that are in the way.\n  function lastChangeEvent(hist, force) {\n    if (force) {\n      clearSelectionEvents(hist.done);\n      return lst(hist.done)\n    } else if (hist.done.length && !lst(hist.done).ranges) {\n      return lst(hist.done)\n    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n      hist.done.pop();\n      return lst(hist.done)\n    }\n  }\n\n  // Register a change in the history. Merges changes that are within\n  // a single operation, or are close together with an origin that\n  // allows merging (starting with \"+\") into a single event.\n  function addChangeToHistory(doc, change, selAfter, opId) {\n    var hist = doc.history;\n    hist.undone.length = 0;\n    var time = +new Date, cur;\n    var last;\n\n    if ((hist.lastOp == opId ||\n         hist.lastOrigin == change.origin && change.origin &&\n         ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n          change.origin.charAt(0) == \"*\")) &&\n        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n      // Merge this change into the last event\n      last = lst(cur.changes);\n      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n        // Optimized case for simple insertion -- don't want to add\n        // new changesets for every character typed\n        last.to = changeEnd(change);\n      } else {\n        // Add new sub-event\n        cur.changes.push(historyChangeFromChange(doc, change));\n      }\n    } else {\n      // Can not be merged, start a new event.\n      var before = lst(hist.done);\n      if (!before || !before.ranges)\n        { pushSelectionToHistory(doc.sel, hist.done); }\n      cur = {changes: [historyChangeFromChange(doc, change)],\n             generation: hist.generation};\n      hist.done.push(cur);\n      while (hist.done.length > hist.undoDepth) {\n        hist.done.shift();\n        if (!hist.done[0].ranges) { hist.done.shift(); }\n      }\n    }\n    hist.done.push(selAfter);\n    hist.generation = ++hist.maxGeneration;\n    hist.lastModTime = hist.lastSelTime = time;\n    hist.lastOp = hist.lastSelOp = opId;\n    hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n    if (!last) { signal(doc, \"historyAdded\"); }\n  }\n\n  function selectionEventCanBeMerged(doc, origin, prev, sel) {\n    var ch = origin.charAt(0);\n    return ch == \"*\" ||\n      ch == \"+\" &&\n      prev.ranges.length == sel.ranges.length &&\n      prev.somethingSelected() == sel.somethingSelected() &&\n      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n  }\n\n  // Called whenever the selection changes, sets the new selection as\n  // the pending selection in the history, and pushes the old pending\n  // selection into the 'done' array when it was significantly\n  // different (in number of selected ranges, emptiness, or time).\n  function addSelectionToHistory(doc, sel, opId, options) {\n    var hist = doc.history, origin = options && options.origin;\n\n    // A new event is started when the previous origin does not match\n    // the current, or the origins don't allow matching. Origins\n    // starting with * are always merged, those starting with + are\n    // merged when similar and close together in time.\n    if (opId == hist.lastSelOp ||\n        (origin && hist.lastSelOrigin == origin &&\n         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n      { hist.done[hist.done.length - 1] = sel; }\n    else\n      { pushSelectionToHistory(sel, hist.done); }\n\n    hist.lastSelTime = +new Date;\n    hist.lastSelOrigin = origin;\n    hist.lastSelOp = opId;\n    if (options && options.clearRedo !== false)\n      { clearSelectionEvents(hist.undone); }\n  }\n\n  function pushSelectionToHistory(sel, dest) {\n    var top = lst(dest);\n    if (!(top && top.ranges && top.equals(sel)))\n      { dest.push(sel); }\n  }\n\n  // Used to store marked span information in the history.\n  function attachLocalSpans(doc, change, from, to) {\n    var existing = change[\"spans_\" + doc.id], n = 0;\n    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n      if (line.markedSpans)\n        { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n      ++n;\n    });\n  }\n\n  // When un/re-doing restores text containing marked spans, those\n  // that have been explicitly cleared should not be restored.\n  function removeClearedSpans(spans) {\n    if (!spans) { return null }\n    var out;\n    for (var i = 0; i < spans.length; ++i) {\n      if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n      else if (out) { out.push(spans[i]); }\n    }\n    return !out ? spans : out.length ? out : null\n  }\n\n  // Retrieve and filter the old marked spans stored in a change event.\n  function getOldSpans(doc, change) {\n    var found = change[\"spans_\" + doc.id];\n    if (!found) { return null }\n    var nw = [];\n    for (var i = 0; i < change.text.length; ++i)\n      { nw.push(removeClearedSpans(found[i])); }\n    return nw\n  }\n\n  // Used for un/re-doing changes from the history. Combines the\n  // result of computing the existing spans with the set of spans that\n  // existed in the history (so that deleting around a span and then\n  // undoing brings back the span).\n  function mergeOldSpans(doc, change) {\n    var old = getOldSpans(doc, change);\n    var stretched = stretchSpansOverChange(doc, change);\n    if (!old) { return stretched }\n    if (!stretched) { return old }\n\n    for (var i = 0; i < old.length; ++i) {\n      var oldCur = old[i], stretchCur = stretched[i];\n      if (oldCur && stretchCur) {\n        spans: for (var j = 0; j < stretchCur.length; ++j) {\n          var span = stretchCur[j];\n          for (var k = 0; k < oldCur.length; ++k)\n            { if (oldCur[k].marker == span.marker) { continue spans } }\n          oldCur.push(span);\n        }\n      } else if (stretchCur) {\n        old[i] = stretchCur;\n      }\n    }\n    return old\n  }\n\n  // Used both to provide a JSON-safe object in .getHistory, and, when\n  // detaching a document, to split the history in two\n  function copyHistoryArray(events, newGroup, instantiateSel) {\n    var copy = [];\n    for (var i = 0; i < events.length; ++i) {\n      var event = events[i];\n      if (event.ranges) {\n        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n        continue\n      }\n      var changes = event.changes, newChanges = [];\n      copy.push({changes: newChanges});\n      for (var j = 0; j < changes.length; ++j) {\n        var change = changes[j], m = (void 0);\n        newChanges.push({from: change.from, to: change.to, text: change.text});\n        if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n          if (indexOf(newGroup, Number(m[1])) > -1) {\n            lst(newChanges)[prop] = change[prop];\n            delete change[prop];\n          }\n        } } }\n      }\n    }\n    return copy\n  }\n\n  // The 'scroll' parameter given to many of these indicated whether\n  // the new cursor position should be scrolled into view after\n  // modifying the selection.\n\n  // If shift is held or the extend flag is set, extends a range to\n  // include a given position (and optionally a second position).\n  // Otherwise, simply returns the range between the given positions.\n  // Used for cursor motion and such.\n  function extendRange(range, head, other, extend) {\n    if (extend) {\n      var anchor = range.anchor;\n      if (other) {\n        var posBefore = cmp(head, anchor) < 0;\n        if (posBefore != (cmp(other, anchor) < 0)) {\n          anchor = head;\n          head = other;\n        } else if (posBefore != (cmp(head, other) < 0)) {\n          head = other;\n        }\n      }\n      return new Range(anchor, head)\n    } else {\n      return new Range(other || head, head)\n    }\n  }\n\n  // Extend the primary selection range, discard the rest.\n  function extendSelection(doc, head, other, options, extend) {\n    if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n    setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n  }\n\n  // Extend all selections (pos is an array of selections with length\n  // equal the number of selections)\n  function extendSelections(doc, heads, options) {\n    var out = [];\n    var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n    for (var i = 0; i < doc.sel.ranges.length; i++)\n      { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n    var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n    setSelection(doc, newSel, options);\n  }\n\n  // Updates a single range in the selection.\n  function replaceOneSelection(doc, i, range, options) {\n    var ranges = doc.sel.ranges.slice(0);\n    ranges[i] = range;\n    setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n  }\n\n  // Reset the selection to a single range.\n  function setSimpleSelection(doc, anchor, head, options) {\n    setSelection(doc, simpleSelection(anchor, head), options);\n  }\n\n  // Give beforeSelectionChange handlers a change to influence a\n  // selection update.\n  function filterSelectionChange(doc, sel, options) {\n    var obj = {\n      ranges: sel.ranges,\n      update: function(ranges) {\n        var this$1 = this;\n\n        this.ranges = [];\n        for (var i = 0; i < ranges.length; i++)\n          { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n                                     clipPos(doc, ranges[i].head)); }\n      },\n      origin: options && options.origin\n    };\n    signal(doc, \"beforeSelectionChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n    if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n    else { return sel }\n  }\n\n  function setSelectionReplaceHistory(doc, sel, options) {\n    var done = doc.history.done, last = lst(done);\n    if (last && last.ranges) {\n      done[done.length - 1] = sel;\n      setSelectionNoUndo(doc, sel, options);\n    } else {\n      setSelection(doc, sel, options);\n    }\n  }\n\n  // Set a new selection.\n  function setSelection(doc, sel, options) {\n    setSelectionNoUndo(doc, sel, options);\n    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n  }\n\n  function setSelectionNoUndo(doc, sel, options) {\n    if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n      { sel = filterSelectionChange(doc, sel, options); }\n\n    var bias = options && options.bias ||\n      (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n    if (!(options && options.scroll === false) && doc.cm)\n      { ensureCursorVisible(doc.cm); }\n  }\n\n  function setSelectionInner(doc, sel) {\n    if (sel.equals(doc.sel)) { return }\n\n    doc.sel = sel;\n\n    if (doc.cm) {\n      doc.cm.curOp.updateInput = 1;\n      doc.cm.curOp.selectionChanged = true;\n      signalCursorActivity(doc.cm);\n    }\n    signalLater(doc, \"cursorActivity\", doc);\n  }\n\n  // Verify that the selection does not partially select any atomic\n  // marked ranges.\n  function reCheckSelection(doc) {\n    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n  }\n\n  // Return a selection that does not partially select any atomic\n  // ranges.\n  function skipAtomicInSelection(doc, sel, bias, mayClear) {\n    var out;\n    for (var i = 0; i < sel.ranges.length; i++) {\n      var range = sel.ranges[i];\n      var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n      var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n      var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n      if (out || newAnchor != range.anchor || newHead != range.head) {\n        if (!out) { out = sel.ranges.slice(0, i); }\n        out[i] = new Range(newAnchor, newHead);\n      }\n    }\n    return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n  }\n\n  function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n    var line = getLine(doc, pos.line);\n    if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n      var sp = line.markedSpans[i], m = sp.marker;\n      if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n          (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n        if (mayClear) {\n          signal(m, \"beforeCursorEnter\");\n          if (m.explicitlyCleared) {\n            if (!line.markedSpans) { break }\n            else {--i; continue}\n          }\n        }\n        if (!m.atomic) { continue }\n\n        if (oldPos) {\n          var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n          if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)\n            { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n          if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n            { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n        }\n\n        var far = m.find(dir < 0 ? -1 : 1);\n        if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)\n          { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n        return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n      }\n    } }\n    return pos\n  }\n\n  // Ensure a given position is not inside an atomic range.\n  function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n    var dir = bias || 1;\n    var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n        skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n    if (!found) {\n      doc.cantEdit = true;\n      return Pos(doc.first, 0)\n    }\n    return found\n  }\n\n  function movePos(doc, pos, dir, line) {\n    if (dir < 0 && pos.ch == 0) {\n      if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n      else { return null }\n    } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n      if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n      else { return null }\n    } else {\n      return new Pos(pos.line, pos.ch + dir)\n    }\n  }\n\n  function selectAll(cm) {\n    cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n  }\n\n  // UPDATING\n\n  // Allow \"beforeChange\" event handlers to influence a change\n  function filterChange(doc, change, update) {\n    var obj = {\n      canceled: false,\n      from: change.from,\n      to: change.to,\n      text: change.text,\n      origin: change.origin,\n      cancel: function () { return obj.canceled = true; }\n    };\n    if (update) { obj.update = function (from, to, text, origin) {\n      if (from) { obj.from = clipPos(doc, from); }\n      if (to) { obj.to = clipPos(doc, to); }\n      if (text) { obj.text = text; }\n      if (origin !== undefined) { obj.origin = origin; }\n    }; }\n    signal(doc, \"beforeChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n    if (obj.canceled) {\n      if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n      return null\n    }\n    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n  }\n\n  // Apply a change to a document, and add it to the document's\n  // history, and propagating it to all linked documents.\n  function makeChange(doc, change, ignoreReadOnly) {\n    if (doc.cm) {\n      if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n      if (doc.cm.state.suppressEdits) { return }\n    }\n\n    if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n      change = filterChange(doc, change, true);\n      if (!change) { return }\n    }\n\n    // Possibly split or suppress the update based on the presence\n    // of read-only spans in its range.\n    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n    if (split) {\n      for (var i = split.length - 1; i >= 0; --i)\n        { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n    } else {\n      makeChangeInner(doc, change);\n    }\n  }\n\n  function makeChangeInner(doc, change) {\n    if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n    var selAfter = computeSelAfterChange(doc, change);\n    addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n    var rebased = [];\n\n    linkedDocs(doc, function (doc, sharedHist) {\n      if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n        rebaseHist(doc.history, change);\n        rebased.push(doc.history);\n      }\n      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n    });\n  }\n\n  // Revert a change stored in a document's history.\n  function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n    var suppress = doc.cm && doc.cm.state.suppressEdits;\n    if (suppress && !allowSelectionOnly) { return }\n\n    var hist = doc.history, event, selAfter = doc.sel;\n    var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n    // Verify that there is a useable event (so that ctrl-z won't\n    // needlessly clear selection events)\n    var i = 0;\n    for (; i < source.length; i++) {\n      event = source[i];\n      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n        { break }\n    }\n    if (i == source.length) { return }\n    hist.lastOrigin = hist.lastSelOrigin = null;\n\n    for (;;) {\n      event = source.pop();\n      if (event.ranges) {\n        pushSelectionToHistory(event, dest);\n        if (allowSelectionOnly && !event.equals(doc.sel)) {\n          setSelection(doc, event, {clearRedo: false});\n          return\n        }\n        selAfter = event;\n      } else if (suppress) {\n        source.push(event);\n        return\n      } else { break }\n    }\n\n    // Build up a reverse change object to add to the opposite history\n    // stack (redo when undoing, and vice versa).\n    var antiChanges = [];\n    pushSelectionToHistory(selAfter, dest);\n    dest.push({changes: antiChanges, generation: hist.generation});\n    hist.generation = event.generation || ++hist.maxGeneration;\n\n    var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n    var loop = function ( i ) {\n      var change = event.changes[i];\n      change.origin = type;\n      if (filter && !filterChange(doc, change, false)) {\n        source.length = 0;\n        return {}\n      }\n\n      antiChanges.push(historyChangeFromChange(doc, change));\n\n      var after = i ? computeSelAfterChange(doc, change) : lst(source);\n      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n      if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n      var rebased = [];\n\n      // Propagate to the linked documents\n      linkedDocs(doc, function (doc, sharedHist) {\n        if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n          rebaseHist(doc.history, change);\n          rebased.push(doc.history);\n        }\n        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n      });\n    };\n\n    for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n      var returned = loop( i$1 );\n\n      if ( returned ) return returned.v;\n    }\n  }\n\n  // Sub-views need their line numbers shifted when text is added\n  // above or below them in the parent document.\n  function shiftDoc(doc, distance) {\n    if (distance == 0) { return }\n    doc.first += distance;\n    doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n      Pos(range.anchor.line + distance, range.anchor.ch),\n      Pos(range.head.line + distance, range.head.ch)\n    ); }), doc.sel.primIndex);\n    if (doc.cm) {\n      regChange(doc.cm, doc.first, doc.first - distance, distance);\n      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n        { regLineChange(doc.cm, l, \"gutter\"); }\n    }\n  }\n\n  // More lower-level change function, handling only a single document\n  // (not linked ones).\n  function makeChangeSingleDoc(doc, change, selAfter, spans) {\n    if (doc.cm && !doc.cm.curOp)\n      { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n    if (change.to.line < doc.first) {\n      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n      return\n    }\n    if (change.from.line > doc.lastLine()) { return }\n\n    // Clip the change to the size of this doc\n    if (change.from.line < doc.first) {\n      var shift = change.text.length - 1 - (doc.first - change.from.line);\n      shiftDoc(doc, shift);\n      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n                text: [lst(change.text)], origin: change.origin};\n    }\n    var last = doc.lastLine();\n    if (change.to.line > last) {\n      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n                text: [change.text[0]], origin: change.origin};\n    }\n\n    change.removed = getBetween(doc, change.from, change.to);\n\n    if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n    if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n    else { updateDoc(doc, change, spans); }\n    setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n  }\n\n  // Handle the interaction of a change to a document with the editor\n  // that this document is part of.\n  function makeChangeSingleDocInEditor(cm, change, spans) {\n    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n    var recomputeMaxLength = false, checkWidthStart = from.line;\n    if (!cm.options.lineWrapping) {\n      checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n      doc.iter(checkWidthStart, to.line + 1, function (line) {\n        if (line == display.maxLine) {\n          recomputeMaxLength = true;\n          return true\n        }\n      });\n    }\n\n    if (doc.sel.contains(change.from, change.to) > -1)\n      { signalCursorActivity(cm); }\n\n    updateDoc(doc, change, spans, estimateHeight(cm));\n\n    if (!cm.options.lineWrapping) {\n      doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n        var len = lineLength(line);\n        if (len > display.maxLineLength) {\n          display.maxLine = line;\n          display.maxLineLength = len;\n          display.maxLineChanged = true;\n          recomputeMaxLength = false;\n        }\n      });\n      if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n    }\n\n    retreatFrontier(doc, from.line);\n    startWorker(cm, 400);\n\n    var lendiff = change.text.length - (to.line - from.line) - 1;\n    // Remember that these lines changed, for updating the display\n    if (change.full)\n      { regChange(cm); }\n    else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n      { regLineChange(cm, from.line, \"text\"); }\n    else\n      { regChange(cm, from.line, to.line + 1, lendiff); }\n\n    var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n    if (changeHandler || changesHandler) {\n      var obj = {\n        from: from, to: to,\n        text: change.text,\n        removed: change.removed,\n        origin: change.origin\n      };\n      if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n      if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n    }\n    cm.display.selForContextMenu = null;\n  }\n\n  function replaceRange(doc, code, from, to, origin) {\n    var assign;\n\n    if (!to) { to = from; }\n    if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n    if (typeof code == \"string\") { code = doc.splitLines(code); }\n    makeChange(doc, {from: from, to: to, text: code, origin: origin});\n  }\n\n  // Rebasing/resetting history to deal with externally-sourced changes\n\n  function rebaseHistSelSingle(pos, from, to, diff) {\n    if (to < pos.line) {\n      pos.line += diff;\n    } else if (from < pos.line) {\n      pos.line = from;\n      pos.ch = 0;\n    }\n  }\n\n  // Tries to rebase an array of history events given a change in the\n  // document. If the change touches the same lines as the event, the\n  // event, and everything 'behind' it, is discarded. If the change is\n  // before the event, the event's positions are updated. Uses a\n  // copy-on-write scheme for the positions, to avoid having to\n  // reallocate them all on every rebase, but also avoid problems with\n  // shared position objects being unsafely updated.\n  function rebaseHistArray(array, from, to, diff) {\n    for (var i = 0; i < array.length; ++i) {\n      var sub = array[i], ok = true;\n      if (sub.ranges) {\n        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n        for (var j = 0; j < sub.ranges.length; j++) {\n          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n        }\n        continue\n      }\n      for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n        var cur = sub.changes[j$1];\n        if (to < cur.from.line) {\n          cur.from = Pos(cur.from.line + diff, cur.from.ch);\n          cur.to = Pos(cur.to.line + diff, cur.to.ch);\n        } else if (from <= cur.to.line) {\n          ok = false;\n          break\n        }\n      }\n      if (!ok) {\n        array.splice(0, i + 1);\n        i = 0;\n      }\n    }\n  }\n\n  function rebaseHist(hist, change) {\n    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n    rebaseHistArray(hist.done, from, to, diff);\n    rebaseHistArray(hist.undone, from, to, diff);\n  }\n\n  // Utility for applying a change to a line by handle or number,\n  // returning the number and optionally registering the line as\n  // changed.\n  function changeLine(doc, handle, changeType, op) {\n    var no = handle, line = handle;\n    if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n    else { no = lineNo(handle); }\n    if (no == null) { return null }\n    if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n    return line\n  }\n\n  // The document is represented as a BTree consisting of leaves, with\n  // chunk of lines in them, and branches, with up to ten leaves or\n  // other branch nodes below them. The top node is always a branch\n  // node, and is the document object itself (meaning it has\n  // additional methods and properties).\n  //\n  // All nodes have parent links. The tree is used both to go from\n  // line numbers to line objects, and to go from objects to numbers.\n  // It also indexes by height, and is used to convert between height\n  // and line object, and to find the total height of the document.\n  //\n  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n  function LeafChunk(lines) {\n    var this$1 = this;\n\n    this.lines = lines;\n    this.parent = null;\n    var height = 0;\n    for (var i = 0; i < lines.length; ++i) {\n      lines[i].parent = this$1;\n      height += lines[i].height;\n    }\n    this.height = height;\n  }\n\n  LeafChunk.prototype = {\n    chunkSize: function() { return this.lines.length },\n\n    // Remove the n lines at offset 'at'.\n    removeInner: function(at, n) {\n      var this$1 = this;\n\n      for (var i = at, e = at + n; i < e; ++i) {\n        var line = this$1.lines[i];\n        this$1.height -= line.height;\n        cleanUpLine(line);\n        signalLater(line, \"delete\");\n      }\n      this.lines.splice(at, n);\n    },\n\n    // Helper used to collapse a small branch into a single leaf.\n    collapse: function(lines) {\n      lines.push.apply(lines, this.lines);\n    },\n\n    // Insert the given array of lines at offset 'at', count them as\n    // having the given height.\n    insertInner: function(at, lines, height) {\n      var this$1 = this;\n\n      this.height += height;\n      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n      for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1; }\n    },\n\n    // Used to iterate over a part of the tree.\n    iterN: function(at, n, op) {\n      var this$1 = this;\n\n      for (var e = at + n; at < e; ++at)\n        { if (op(this$1.lines[at])) { return true } }\n    }\n  };\n\n  function BranchChunk(children) {\n    var this$1 = this;\n\n    this.children = children;\n    var size = 0, height = 0;\n    for (var i = 0; i < children.length; ++i) {\n      var ch = children[i];\n      size += ch.chunkSize(); height += ch.height;\n      ch.parent = this$1;\n    }\n    this.size = size;\n    this.height = height;\n    this.parent = null;\n  }\n\n  BranchChunk.prototype = {\n    chunkSize: function() { return this.size },\n\n    removeInner: function(at, n) {\n      var this$1 = this;\n\n      this.size -= n;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this$1.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var rm = Math.min(n, sz - at), oldHeight = child.height;\n          child.removeInner(at, rm);\n          this$1.height -= oldHeight - child.height;\n          if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null; }\n          if ((n -= rm) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n      // If the result is smaller than 25 lines, ensure that it is a\n      // single leaf node.\n      if (this.size - n < 25 &&\n          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n        var lines = [];\n        this.collapse(lines);\n        this.children = [new LeafChunk(lines)];\n        this.children[0].parent = this;\n      }\n    },\n\n    collapse: function(lines) {\n      var this$1 = this;\n\n      for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); }\n    },\n\n    insertInner: function(at, lines, height) {\n      var this$1 = this;\n\n      this.size += lines.length;\n      this.height += height;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this$1.children[i], sz = child.chunkSize();\n        if (at <= sz) {\n          child.insertInner(at, lines, height);\n          if (child.lines && child.lines.length > 50) {\n            // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n            // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n            var remaining = child.lines.length % 25 + 25;\n            for (var pos = remaining; pos < child.lines.length;) {\n              var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n              child.height -= leaf.height;\n              this$1.children.splice(++i, 0, leaf);\n              leaf.parent = this$1;\n            }\n            child.lines = child.lines.slice(0, remaining);\n            this$1.maybeSpill();\n          }\n          break\n        }\n        at -= sz;\n      }\n    },\n\n    // When a node has grown, check whether it should be split.\n    maybeSpill: function() {\n      if (this.children.length <= 10) { return }\n      var me = this;\n      do {\n        var spilled = me.children.splice(me.children.length - 5, 5);\n        var sibling = new BranchChunk(spilled);\n        if (!me.parent) { // Become the parent node\n          var copy = new BranchChunk(me.children);\n          copy.parent = me;\n          me.children = [copy, sibling];\n          me = copy;\n       } else {\n          me.size -= sibling.size;\n          me.height -= sibling.height;\n          var myIndex = indexOf(me.parent.children, me);\n          me.parent.children.splice(myIndex + 1, 0, sibling);\n        }\n        sibling.parent = me.parent;\n      } while (me.children.length > 10)\n      me.parent.maybeSpill();\n    },\n\n    iterN: function(at, n, op) {\n      var this$1 = this;\n\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this$1.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var used = Math.min(n, sz - at);\n          if (child.iterN(at, used, op)) { return true }\n          if ((n -= used) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n    }\n  };\n\n  // Line widgets are block elements displayed above or below a line.\n\n  var LineWidget = function(doc, node, options) {\n    var this$1 = this;\n\n    if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n      { this$1[opt] = options[opt]; } } }\n    this.doc = doc;\n    this.node = node;\n  };\n\n  LineWidget.prototype.clear = function () {\n      var this$1 = this;\n\n    var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n    if (no == null || !ws) { return }\n    for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1); } }\n    if (!ws.length) { line.widgets = null; }\n    var height = widgetHeight(this);\n    updateLineHeight(line, Math.max(0, line.height - height));\n    if (cm) {\n      runInOp(cm, function () {\n        adjustScrollWhenAboveVisible(cm, line, -height);\n        regLineChange(cm, no, \"widget\");\n      });\n      signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n    }\n  };\n\n  LineWidget.prototype.changed = function () {\n      var this$1 = this;\n\n    var oldH = this.height, cm = this.doc.cm, line = this.line;\n    this.height = null;\n    var diff = widgetHeight(this) - oldH;\n    if (!diff) { return }\n    if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n    if (cm) {\n      runInOp(cm, function () {\n        cm.curOp.forceUpdate = true;\n        adjustScrollWhenAboveVisible(cm, line, diff);\n        signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n      });\n    }\n  };\n  eventMixin(LineWidget);\n\n  function adjustScrollWhenAboveVisible(cm, line, diff) {\n    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n      { addToScrollTop(cm, diff); }\n  }\n\n  function addLineWidget(doc, handle, node, options) {\n    var widget = new LineWidget(doc, node, options);\n    var cm = doc.cm;\n    if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n    changeLine(doc, handle, \"widget\", function (line) {\n      var widgets = line.widgets || (line.widgets = []);\n      if (widget.insertAt == null) { widgets.push(widget); }\n      else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); }\n      widget.line = line;\n      if (cm && !lineIsHidden(doc, line)) {\n        var aboveVisible = heightAtLine(line) < doc.scrollTop;\n        updateLineHeight(line, line.height + widgetHeight(widget));\n        if (aboveVisible) { addToScrollTop(cm, widget.height); }\n        cm.curOp.forceUpdate = true;\n      }\n      return true\n    });\n    if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n    return widget\n  }\n\n  // TEXTMARKERS\n\n  // Created with markText and setBookmark methods. A TextMarker is a\n  // handle that can be used to clear or find a marked position in the\n  // document. Line objects hold arrays (markedSpans) containing\n  // {from, to, marker} object pointing to such marker objects, and\n  // indicating that such a marker is present on that line. Multiple\n  // lines may point to the same marker when it spans across lines.\n  // The spans will have null for their from/to properties when the\n  // marker continues beyond the start/end of the line. Markers have\n  // links back to the lines they currently touch.\n\n  // Collapsed markers have unique ids, in order to be able to order\n  // them, which is needed for uniquely determining an outer marker\n  // when they overlap (they may nest, but not partially overlap).\n  var nextMarkerId = 0;\n\n  var TextMarker = function(doc, type) {\n    this.lines = [];\n    this.type = type;\n    this.doc = doc;\n    this.id = ++nextMarkerId;\n  };\n\n  // Clear the marker.\n  TextMarker.prototype.clear = function () {\n      var this$1 = this;\n\n    if (this.explicitlyCleared) { return }\n    var cm = this.doc.cm, withOp = cm && !cm.curOp;\n    if (withOp) { startOperation(cm); }\n    if (hasHandler(this, \"clear\")) {\n      var found = this.find();\n      if (found) { signalLater(this, \"clear\", found.from, found.to); }\n    }\n    var min = null, max = null;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this$1.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this$1);\n      if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n      else if (cm) {\n        if (span.to != null) { max = lineNo(line); }\n        if (span.from != null) { min = lineNo(line); }\n      }\n      line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n      if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm)\n        { updateLineHeight(line, textHeight(cm.display)); }\n    }\n    if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n      var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual);\n      if (len > cm.display.maxLineLength) {\n        cm.display.maxLine = visual;\n        cm.display.maxLineLength = len;\n        cm.display.maxLineChanged = true;\n      }\n    } }\n\n    if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n    this.lines.length = 0;\n    this.explicitlyCleared = true;\n    if (this.atomic && this.doc.cantEdit) {\n      this.doc.cantEdit = false;\n      if (cm) { reCheckSelection(cm.doc); }\n    }\n    if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n    if (withOp) { endOperation(cm); }\n    if (this.parent) { this.parent.clear(); }\n  };\n\n  // Find the position of the marker in the document. Returns a {from,\n  // to} object by default. Side can be passed to get a specific side\n  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n  // Pos objects returned contain a line object, rather than a line\n  // number (used to prevent looking up the same line twice).\n  TextMarker.prototype.find = function (side, lineObj) {\n      var this$1 = this;\n\n    if (side == null && this.type == \"bookmark\") { side = 1; }\n    var from, to;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this$1.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this$1);\n      if (span.from != null) {\n        from = Pos(lineObj ? line : lineNo(line), span.from);\n        if (side == -1) { return from }\n      }\n      if (span.to != null) {\n        to = Pos(lineObj ? line : lineNo(line), span.to);\n        if (side == 1) { return to }\n      }\n    }\n    return from && {from: from, to: to}\n  };\n\n  // Signals that the marker's widget changed, and surrounding layout\n  // should be recomputed.\n  TextMarker.prototype.changed = function () {\n      var this$1 = this;\n\n    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n    if (!pos || !cm) { return }\n    runInOp(cm, function () {\n      var line = pos.line, lineN = lineNo(pos.line);\n      var view = findViewForLine(cm, lineN);\n      if (view) {\n        clearLineMeasurementCacheFor(view);\n        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n      }\n      cm.curOp.updateMaxLine = true;\n      if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n        var oldHeight = widget.height;\n        widget.height = null;\n        var dHeight = widgetHeight(widget) - oldHeight;\n        if (dHeight)\n          { updateLineHeight(line, line.height + dHeight); }\n      }\n      signalLater(cm, \"markerChanged\", cm, this$1);\n    });\n  };\n\n  TextMarker.prototype.attachLine = function (line) {\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp;\n      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n        { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n    }\n    this.lines.push(line);\n  };\n\n  TextMarker.prototype.detachLine = function (line) {\n    this.lines.splice(indexOf(this.lines, line), 1);\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp\n      ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n    }\n  };\n  eventMixin(TextMarker);\n\n  // Create a marker, wire it up to the right lines, and\n  function markText(doc, from, to, options, type) {\n    // Shared markers (across linked documents) are handled separately\n    // (markTextShared will call out to this again, once per\n    // document).\n    if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n    // Ensure we are in an operation.\n    if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n    var marker = new TextMarker(doc, type), diff = cmp(from, to);\n    if (options) { copyObj(options, marker, false); }\n    // Don't connect empty markers unless clearWhenEmpty is false\n    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n      { return marker }\n    if (marker.replacedWith) {\n      // Showing up as a widget implies collapsed (widget replaces text)\n      marker.collapsed = true;\n      marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n      if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n      if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n    }\n    if (marker.collapsed) {\n      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n        { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n      seeCollapsedSpans();\n    }\n\n    if (marker.addToHistory)\n      { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n    var curLine = from.line, cm = doc.cm, updateMaxLine;\n    doc.iter(curLine, to.line + 1, function (line) {\n      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n        { updateMaxLine = true; }\n      if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n      addMarkedSpan(line, new MarkedSpan(marker,\n                                         curLine == from.line ? from.ch : null,\n                                         curLine == to.line ? to.ch : null));\n      ++curLine;\n    });\n    // lineIsHidden depends on the presence of the spans, so needs a second pass\n    if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n      if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n    }); }\n\n    if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n    if (marker.readOnly) {\n      seeReadOnlySpans();\n      if (doc.history.done.length || doc.history.undone.length)\n        { doc.clearHistory(); }\n    }\n    if (marker.collapsed) {\n      marker.id = ++nextMarkerId;\n      marker.atomic = true;\n    }\n    if (cm) {\n      // Sync editor state\n      if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n      if (marker.collapsed)\n        { regChange(cm, from.line, to.line + 1); }\n      else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n               marker.attributes || marker.title)\n        { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n      if (marker.atomic) { reCheckSelection(cm.doc); }\n      signalLater(cm, \"markerAdded\", cm, marker);\n    }\n    return marker\n  }\n\n  // SHARED TEXTMARKERS\n\n  // A shared marker spans multiple linked documents. It is\n  // implemented as a meta-marker-object controlling multiple normal\n  // markers.\n  var SharedTextMarker = function(markers, primary) {\n    var this$1 = this;\n\n    this.markers = markers;\n    this.primary = primary;\n    for (var i = 0; i < markers.length; ++i)\n      { markers[i].parent = this$1; }\n  };\n\n  SharedTextMarker.prototype.clear = function () {\n      var this$1 = this;\n\n    if (this.explicitlyCleared) { return }\n    this.explicitlyCleared = true;\n    for (var i = 0; i < this.markers.length; ++i)\n      { this$1.markers[i].clear(); }\n    signalLater(this, \"clear\");\n  };\n\n  SharedTextMarker.prototype.find = function (side, lineObj) {\n    return this.primary.find(side, lineObj)\n  };\n  eventMixin(SharedTextMarker);\n\n  function markTextShared(doc, from, to, options, type) {\n    options = copyObj(options);\n    options.shared = false;\n    var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n    var widget = options.widgetNode;\n    linkedDocs(doc, function (doc) {\n      if (widget) { options.widgetNode = widget.cloneNode(true); }\n      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n      for (var i = 0; i < doc.linked.length; ++i)\n        { if (doc.linked[i].isParent) { return } }\n      primary = lst(markers);\n    });\n    return new SharedTextMarker(markers, primary)\n  }\n\n  function findSharedMarkers(doc) {\n    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n  }\n\n  function copySharedMarkers(doc, markers) {\n    for (var i = 0; i < markers.length; i++) {\n      var marker = markers[i], pos = marker.find();\n      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n      if (cmp(mFrom, mTo)) {\n        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n        marker.markers.push(subMark);\n        subMark.parent = marker;\n      }\n    }\n  }\n\n  function detachSharedMarkers(markers) {\n    var loop = function ( i ) {\n      var marker = markers[i], linked = [marker.primary.doc];\n      linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n      for (var j = 0; j < marker.markers.length; j++) {\n        var subMarker = marker.markers[j];\n        if (indexOf(linked, subMarker.doc) == -1) {\n          subMarker.parent = null;\n          marker.markers.splice(j--, 1);\n        }\n      }\n    };\n\n    for (var i = 0; i < markers.length; i++) loop( i );\n  }\n\n  var nextDocId = 0;\n  var Doc = function(text, mode, firstLine, lineSep, direction) {\n    if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n    if (firstLine == null) { firstLine = 0; }\n\n    BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n    this.first = firstLine;\n    this.scrollTop = this.scrollLeft = 0;\n    this.cantEdit = false;\n    this.cleanGeneration = 1;\n    this.modeFrontier = this.highlightFrontier = firstLine;\n    var start = Pos(firstLine, 0);\n    this.sel = simpleSelection(start);\n    this.history = new History(null);\n    this.id = ++nextDocId;\n    this.modeOption = mode;\n    this.lineSep = lineSep;\n    this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n    this.extend = false;\n\n    if (typeof text == \"string\") { text = this.splitLines(text); }\n    updateDoc(this, {from: start, to: start, text: text});\n    setSelection(this, simpleSelection(start), sel_dontScroll);\n  };\n\n  Doc.prototype = createObj(BranchChunk.prototype, {\n    constructor: Doc,\n    // Iterate over the document. Supports two forms -- with only one\n    // argument, it calls that for each line in the document. With\n    // three, it iterates over the range given by the first two (with\n    // the second being non-inclusive).\n    iter: function(from, to, op) {\n      if (op) { this.iterN(from - this.first, to - from, op); }\n      else { this.iterN(this.first, this.first + this.size, from); }\n    },\n\n    // Non-public interface for adding and removing lines.\n    insert: function(at, lines) {\n      var height = 0;\n      for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n      this.insertInner(at - this.first, lines, height);\n    },\n    remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n    // From here, the methods are part of the public interface. Most\n    // are also available from CodeMirror (editor) instances.\n\n    getValue: function(lineSep) {\n      var lines = getLines(this, this.first, this.first + this.size);\n      if (lineSep === false) { return lines }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n    setValue: docMethodOp(function(code) {\n      var top = Pos(this.first, 0), last = this.first + this.size - 1;\n      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n                        text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n      if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n      setSelection(this, simpleSelection(top), sel_dontScroll);\n    }),\n    replaceRange: function(code, from, to, origin) {\n      from = clipPos(this, from);\n      to = to ? clipPos(this, to) : from;\n      replaceRange(this, code, from, to, origin);\n    },\n    getRange: function(from, to, lineSep) {\n      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n      if (lineSep === false) { return lines }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n\n    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n    getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n    getLineNumber: function(line) {return lineNo(line)},\n\n    getLineHandleVisualStart: function(line) {\n      if (typeof line == \"number\") { line = getLine(this, line); }\n      return visualLine(line)\n    },\n\n    lineCount: function() {return this.size},\n    firstLine: function() {return this.first},\n    lastLine: function() {return this.first + this.size - 1},\n\n    clipPos: function(pos) {return clipPos(this, pos)},\n\n    getCursor: function(start) {\n      var range$$1 = this.sel.primary(), pos;\n      if (start == null || start == \"head\") { pos = range$$1.head; }\n      else if (start == \"anchor\") { pos = range$$1.anchor; }\n      else if (start == \"end\" || start == \"to\" || start === false) { pos = range$$1.to(); }\n      else { pos = range$$1.from(); }\n      return pos\n    },\n    listSelections: function() { return this.sel.ranges },\n    somethingSelected: function() {return this.sel.somethingSelected()},\n\n    setCursor: docMethodOp(function(line, ch, options) {\n      setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n    }),\n    setSelection: docMethodOp(function(anchor, head, options) {\n      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n    }),\n    extendSelection: docMethodOp(function(head, other, options) {\n      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n    }),\n    extendSelections: docMethodOp(function(heads, options) {\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    extendSelectionsBy: docMethodOp(function(f, options) {\n      var heads = map(this.sel.ranges, f);\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    setSelections: docMethodOp(function(ranges, primary, options) {\n      var this$1 = this;\n\n      if (!ranges.length) { return }\n      var out = [];\n      for (var i = 0; i < ranges.length; i++)\n        { out[i] = new Range(clipPos(this$1, ranges[i].anchor),\n                           clipPos(this$1, ranges[i].head)); }\n      if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n      setSelection(this, normalizeSelection(this.cm, out, primary), options);\n    }),\n    addSelection: docMethodOp(function(anchor, head, options) {\n      var ranges = this.sel.ranges.slice(0);\n      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n      setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n    }),\n\n    getSelection: function(lineSep) {\n      var this$1 = this;\n\n      var ranges = this.sel.ranges, lines;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());\n        lines = lines ? lines.concat(sel) : sel;\n      }\n      if (lineSep === false) { return lines }\n      else { return lines.join(lineSep || this.lineSeparator()) }\n    },\n    getSelections: function(lineSep) {\n      var this$1 = this;\n\n      var parts = [], ranges = this.sel.ranges;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());\n        if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()); }\n        parts[i] = sel;\n      }\n      return parts\n    },\n    replaceSelection: function(code, collapse, origin) {\n      var dup = [];\n      for (var i = 0; i < this.sel.ranges.length; i++)\n        { dup[i] = code; }\n      this.replaceSelections(dup, collapse, origin || \"+input\");\n    },\n    replaceSelections: docMethodOp(function(code, collapse, origin) {\n      var this$1 = this;\n\n      var changes = [], sel = this.sel;\n      for (var i = 0; i < sel.ranges.length; i++) {\n        var range$$1 = sel.ranges[i];\n        changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin};\n      }\n      var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n      for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n        { makeChange(this$1, changes[i$1]); }\n      if (newSel) { setSelectionReplaceHistory(this, newSel); }\n      else if (this.cm) { ensureCursorVisible(this.cm); }\n    }),\n    undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n    redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n    setExtending: function(val) {this.extend = val;},\n    getExtending: function() {return this.extend},\n\n    historySize: function() {\n      var hist = this.history, done = 0, undone = 0;\n      for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n      for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n      return {undo: done, redo: undone}\n    },\n    clearHistory: function() {this.history = new History(this.history.maxGeneration);},\n\n    markClean: function() {\n      this.cleanGeneration = this.changeGeneration(true);\n    },\n    changeGeneration: function(forceSplit) {\n      if (forceSplit)\n        { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n      return this.history.generation\n    },\n    isClean: function (gen) {\n      return this.history.generation == (gen || this.cleanGeneration)\n    },\n\n    getHistory: function() {\n      return {done: copyHistoryArray(this.history.done),\n              undone: copyHistoryArray(this.history.undone)}\n    },\n    setHistory: function(histData) {\n      var hist = this.history = new History(this.history.maxGeneration);\n      hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n    },\n\n    setGutterMarker: docMethodOp(function(line, gutterID, value) {\n      return changeLine(this, line, \"gutter\", function (line) {\n        var markers = line.gutterMarkers || (line.gutterMarkers = {});\n        markers[gutterID] = value;\n        if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n        return true\n      })\n    }),\n\n    clearGutter: docMethodOp(function(gutterID) {\n      var this$1 = this;\n\n      this.iter(function (line) {\n        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n          changeLine(this$1, line, \"gutter\", function () {\n            line.gutterMarkers[gutterID] = null;\n            if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n            return true\n          });\n        }\n      });\n    }),\n\n    lineInfo: function(line) {\n      var n;\n      if (typeof line == \"number\") {\n        if (!isLine(this, line)) { return null }\n        n = line;\n        line = getLine(this, line);\n        if (!line) { return null }\n      } else {\n        n = lineNo(line);\n        if (n == null) { return null }\n      }\n      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n              widgets: line.widgets}\n    },\n\n    addLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        if (!line[prop]) { line[prop] = cls; }\n        else if (classTest(cls).test(line[prop])) { return false }\n        else { line[prop] += \" \" + cls; }\n        return true\n      })\n    }),\n    removeLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        var cur = line[prop];\n        if (!cur) { return false }\n        else if (cls == null) { line[prop] = null; }\n        else {\n          var found = cur.match(classTest(cls));\n          if (!found) { return false }\n          var end = found.index + found[0].length;\n          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n        }\n        return true\n      })\n    }),\n\n    addLineWidget: docMethodOp(function(handle, node, options) {\n      return addLineWidget(this, handle, node, options)\n    }),\n    removeLineWidget: function(widget) { widget.clear(); },\n\n    markText: function(from, to, options) {\n      return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n    },\n    setBookmark: function(pos, options) {\n      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n                      insertLeft: options && options.insertLeft,\n                      clearWhenEmpty: false, shared: options && options.shared,\n                      handleMouseEvents: options && options.handleMouseEvents};\n      pos = clipPos(this, pos);\n      return markText(this, pos, pos, realOpts, \"bookmark\")\n    },\n    findMarksAt: function(pos) {\n      pos = clipPos(this, pos);\n      var markers = [], spans = getLine(this, pos.line).markedSpans;\n      if (spans) { for (var i = 0; i < spans.length; ++i) {\n        var span = spans[i];\n        if ((span.from == null || span.from <= pos.ch) &&\n            (span.to == null || span.to >= pos.ch))\n          { markers.push(span.marker.parent || span.marker); }\n      } }\n      return markers\n    },\n    findMarks: function(from, to, filter) {\n      from = clipPos(this, from); to = clipPos(this, to);\n      var found = [], lineNo$$1 = from.line;\n      this.iter(from.line, to.line + 1, function (line) {\n        var spans = line.markedSpans;\n        if (spans) { for (var i = 0; i < spans.length; i++) {\n          var span = spans[i];\n          if (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to ||\n                span.from == null && lineNo$$1 != from.line ||\n                span.from != null && lineNo$$1 == to.line && span.from >= to.ch) &&\n              (!filter || filter(span.marker)))\n            { found.push(span.marker.parent || span.marker); }\n        } }\n        ++lineNo$$1;\n      });\n      return found\n    },\n    getAllMarks: function() {\n      var markers = [];\n      this.iter(function (line) {\n        var sps = line.markedSpans;\n        if (sps) { for (var i = 0; i < sps.length; ++i)\n          { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n      });\n      return markers\n    },\n\n    posFromIndex: function(off) {\n      var ch, lineNo$$1 = this.first, sepSize = this.lineSeparator().length;\n      this.iter(function (line) {\n        var sz = line.text.length + sepSize;\n        if (sz > off) { ch = off; return true }\n        off -= sz;\n        ++lineNo$$1;\n      });\n      return clipPos(this, Pos(lineNo$$1, ch))\n    },\n    indexFromPos: function (coords) {\n      coords = clipPos(this, coords);\n      var index = coords.ch;\n      if (coords.line < this.first || coords.ch < 0) { return 0 }\n      var sepSize = this.lineSeparator().length;\n      this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n        index += line.text.length + sepSize;\n      });\n      return index\n    },\n\n    copy: function(copyHistory) {\n      var doc = new Doc(getLines(this, this.first, this.first + this.size),\n                        this.modeOption, this.first, this.lineSep, this.direction);\n      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n      doc.sel = this.sel;\n      doc.extend = false;\n      if (copyHistory) {\n        doc.history.undoDepth = this.history.undoDepth;\n        doc.setHistory(this.getHistory());\n      }\n      return doc\n    },\n\n    linkedDoc: function(options) {\n      if (!options) { options = {}; }\n      var from = this.first, to = this.first + this.size;\n      if (options.from != null && options.from > from) { from = options.from; }\n      if (options.to != null && options.to < to) { to = options.to; }\n      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n      if (options.sharedHist) { copy.history = this.history\n      ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n      copySharedMarkers(copy, findSharedMarkers(this));\n      return copy\n    },\n    unlinkDoc: function(other) {\n      var this$1 = this;\n\n      if (other instanceof CodeMirror) { other = other.doc; }\n      if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n        var link = this$1.linked[i];\n        if (link.doc != other) { continue }\n        this$1.linked.splice(i, 1);\n        other.unlinkDoc(this$1);\n        detachSharedMarkers(findSharedMarkers(this$1));\n        break\n      } }\n      // If the histories were shared, split them again\n      if (other.history == this.history) {\n        var splitIds = [other.id];\n        linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n        other.history = new History(null);\n        other.history.done = copyHistoryArray(this.history.done, splitIds);\n        other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n      }\n    },\n    iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n    getMode: function() {return this.mode},\n    getEditor: function() {return this.cm},\n\n    splitLines: function(str) {\n      if (this.lineSep) { return str.split(this.lineSep) }\n      return splitLinesAuto(str)\n    },\n    lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n    setDirection: docMethodOp(function (dir) {\n      if (dir != \"rtl\") { dir = \"ltr\"; }\n      if (dir == this.direction) { return }\n      this.direction = dir;\n      this.iter(function (line) { return line.order = null; });\n      if (this.cm) { directionChanged(this.cm); }\n    })\n  });\n\n  // Public alias.\n  Doc.prototype.eachLine = Doc.prototype.iter;\n\n  // Kludge to work around strange IE behavior where it'll sometimes\n  // re-fire a series of drag-related events right after the drop (#1551)\n  var lastDrop = 0;\n\n  function onDrop(e) {\n    var cm = this;\n    clearDragCursor(cm);\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n      { return }\n    e_preventDefault(e);\n    if (ie) { lastDrop = +new Date; }\n    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n    if (!pos || cm.isReadOnly()) { return }\n    // Might be a file drop, in which case we simply extract the text\n    // and insert it.\n    if (files && files.length && window.FileReader && window.File) {\n      var n = files.length, text = Array(n), read = 0;\n      var loadFile = function (file, i) {\n        if (cm.options.allowDropFileTypes &&\n            indexOf(cm.options.allowDropFileTypes, file.type) == -1)\n          { return }\n\n        var reader = new FileReader;\n        reader.onload = operation(cm, function () {\n          var content = reader.result;\n          if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) { content = \"\"; }\n          text[i] = content;\n          if (++read == n) {\n            pos = clipPos(cm.doc, pos);\n            var change = {from: pos, to: pos,\n                          text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),\n                          origin: \"paste\"};\n            makeChange(cm.doc, change);\n            setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));\n          }\n        });\n        reader.readAsText(file);\n      };\n      for (var i = 0; i < n; ++i) { loadFile(files[i], i); }\n    } else { // Normal drop\n      // Don't do a replace if the drop happened inside of the selected text.\n      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n        cm.state.draggingText(e);\n        // Ensure the editor is re-focused\n        setTimeout(function () { return cm.display.input.focus(); }, 20);\n        return\n      }\n      try {\n        var text$1 = e.dataTransfer.getData(\"Text\");\n        if (text$1) {\n          var selected;\n          if (cm.state.draggingText && !cm.state.draggingText.copy)\n            { selected = cm.listSelections(); }\n          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n          if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n            { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n          cm.replaceSelection(text$1, \"around\", \"paste\");\n          cm.display.input.focus();\n        }\n      }\n      catch(e){}\n    }\n  }\n\n  function onDragStart(cm, e) {\n    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n    e.dataTransfer.setData(\"Text\", cm.getSelection());\n    e.dataTransfer.effectAllowed = \"copyMove\";\n\n    // Use dummy image instead of default browsers image.\n    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n    if (e.dataTransfer.setDragImage && !safari) {\n      var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n      img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n      if (presto) {\n        img.width = img.height = 1;\n        cm.display.wrapper.appendChild(img);\n        // Force a relayout, or Opera won't use our image for some obscure reason\n        img._top = img.offsetTop;\n      }\n      e.dataTransfer.setDragImage(img, 0, 0);\n      if (presto) { img.parentNode.removeChild(img); }\n    }\n  }\n\n  function onDragOver(cm, e) {\n    var pos = posFromMouse(cm, e);\n    if (!pos) { return }\n    var frag = document.createDocumentFragment();\n    drawSelectionCursor(cm, pos, frag);\n    if (!cm.display.dragCursor) {\n      cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n      cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n    }\n    removeChildrenAndAdd(cm.display.dragCursor, frag);\n  }\n\n  function clearDragCursor(cm) {\n    if (cm.display.dragCursor) {\n      cm.display.lineSpace.removeChild(cm.display.dragCursor);\n      cm.display.dragCursor = null;\n    }\n  }\n\n  // These must be handled carefully, because naively registering a\n  // handler for each editor will cause the editors to never be\n  // garbage collected.\n\n  function forEachCodeMirror(f) {\n    if (!document.getElementsByClassName) { return }\n    var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n    for (var i = 0; i < byClass.length; i++) {\n      var cm = byClass[i].CodeMirror;\n      if (cm) { editors.push(cm); }\n    }\n    if (editors.length) { editors[0].operation(function () {\n      for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n    }); }\n  }\n\n  var globalsRegistered = false;\n  function ensureGlobalHandlers() {\n    if (globalsRegistered) { return }\n    registerGlobalHandlers();\n    globalsRegistered = true;\n  }\n  function registerGlobalHandlers() {\n    // When the window resizes, we need to refresh active editors.\n    var resizeTimer;\n    on(window, \"resize\", function () {\n      if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n        resizeTimer = null;\n        forEachCodeMirror(onResize);\n      }, 100); }\n    });\n    // When the window loses focus, we want to show the editor as blurred\n    on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n  }\n  // Called when the window resizes\n  function onResize(cm) {\n    var d = cm.display;\n    // Might be a text scaling operation, clear size caches.\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n    d.scrollbarsClipped = false;\n    cm.setSize();\n  }\n\n  var keyNames = {\n    3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n    19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n    36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n    46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n    106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 127: \"Delete\", 145: \"ScrollLock\",\n    173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n    221: \"]\", 222: \"'\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n    63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n  };\n\n  // Number keys\n  for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n  // Alphabetic keys\n  for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n  // Function keys\n  for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n  var keyMap = {};\n\n  keyMap.basic = {\n    \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n    \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n    \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n    \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n    \"Esc\": \"singleSelection\"\n  };\n  // Note that the save and find-related commands aren't defined by\n  // default. User code or addons can define them. Unknown commands\n  // are simply ignored.\n  keyMap.pcDefault = {\n    \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n    \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n    \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n    \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n    \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n    \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n    \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n    \"fallthrough\": \"basic\"\n  };\n  // Very basic readline/emacs-style bindings, which are standard on Mac.\n  keyMap.emacsy = {\n    \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n    \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n    \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n    \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\",\n    \"Ctrl-O\": \"openLine\"\n  };\n  keyMap.macDefault = {\n    \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n    \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n    \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n    \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n    \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n    \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n    \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n    \"fallthrough\": [\"basic\", \"emacsy\"]\n  };\n  keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n  // KEYMAP DISPATCH\n\n  function normalizeKeyName(name) {\n    var parts = name.split(/-(?!$)/);\n    name = parts[parts.length - 1];\n    var alt, ctrl, shift, cmd;\n    for (var i = 0; i < parts.length - 1; i++) {\n      var mod = parts[i];\n      if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n      else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n      else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n      else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n      else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n    }\n    if (alt) { name = \"Alt-\" + name; }\n    if (ctrl) { name = \"Ctrl-\" + name; }\n    if (cmd) { name = \"Cmd-\" + name; }\n    if (shift) { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // This is a kludge to keep keymaps mostly working as raw objects\n  // (backwards compatibility) while at the same time support features\n  // like normalization and multi-stroke key bindings. It compiles a\n  // new normalized keymap, and then updates the old object to reflect\n  // this.\n  function normalizeKeyMap(keymap) {\n    var copy = {};\n    for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n      var value = keymap[keyname];\n      if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n      if (value == \"...\") { delete keymap[keyname]; continue }\n\n      var keys = map(keyname.split(\" \"), normalizeKeyName);\n      for (var i = 0; i < keys.length; i++) {\n        var val = (void 0), name = (void 0);\n        if (i == keys.length - 1) {\n          name = keys.join(\" \");\n          val = value;\n        } else {\n          name = keys.slice(0, i + 1).join(\" \");\n          val = \"...\";\n        }\n        var prev = copy[name];\n        if (!prev) { copy[name] = val; }\n        else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n      }\n      delete keymap[keyname];\n    } }\n    for (var prop in copy) { keymap[prop] = copy[prop]; }\n    return keymap\n  }\n\n  function lookupKey(key, map$$1, handle, context) {\n    map$$1 = getKeyMap(map$$1);\n    var found = map$$1.call ? map$$1.call(key, context) : map$$1[key];\n    if (found === false) { return \"nothing\" }\n    if (found === \"...\") { return \"multi\" }\n    if (found != null && handle(found)) { return \"handled\" }\n\n    if (map$$1.fallthrough) {\n      if (Object.prototype.toString.call(map$$1.fallthrough) != \"[object Array]\")\n        { return lookupKey(key, map$$1.fallthrough, handle, context) }\n      for (var i = 0; i < map$$1.fallthrough.length; i++) {\n        var result = lookupKey(key, map$$1.fallthrough[i], handle, context);\n        if (result) { return result }\n      }\n    }\n  }\n\n  // Modifier key presses don't count as 'real' key presses for the\n  // purpose of keymap fallthrough.\n  function isModifierKey(value) {\n    var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n    return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n  }\n\n  function addModifierNames(name, event, noShift) {\n    var base = name;\n    if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n    if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Cmd\") { name = \"Cmd-\" + name; }\n    if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // Look up the name of a key as indicated by an event object.\n  function keyName(event, noShift) {\n    if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n    var name = keyNames[event.keyCode];\n    if (name == null || event.altGraphKey) { return false }\n    // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n    // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n    if (event.keyCode == 3 && event.code) { name = event.code; }\n    return addModifierNames(name, event, noShift)\n  }\n\n  function getKeyMap(val) {\n    return typeof val == \"string\" ? keyMap[val] : val\n  }\n\n  // Helper for deleting text near the selection(s), used to implement\n  // backspace, delete, and similar functionality.\n  function deleteNearSelection(cm, compute) {\n    var ranges = cm.doc.sel.ranges, kill = [];\n    // Build up a set of ranges to kill first, merging overlapping\n    // ranges.\n    for (var i = 0; i < ranges.length; i++) {\n      var toKill = compute(ranges[i]);\n      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n        var replaced = kill.pop();\n        if (cmp(replaced.from, toKill.from) < 0) {\n          toKill.from = replaced.from;\n          break\n        }\n      }\n      kill.push(toKill);\n    }\n    // Next, remove those actual ranges.\n    runInOp(cm, function () {\n      for (var i = kill.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n      ensureCursorVisible(cm);\n    });\n  }\n\n  function moveCharLogically(line, ch, dir) {\n    var target = skipExtendingChars(line.text, ch + dir, dir);\n    return target < 0 || target > line.text.length ? null : target\n  }\n\n  function moveLogically(line, start, dir) {\n    var ch = moveCharLogically(line, start.ch, dir);\n    return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n  }\n\n  function endOfLine(visually, cm, lineObj, lineNo, dir) {\n    if (visually) {\n      var order = getOrder(lineObj, cm.doc.direction);\n      if (order) {\n        var part = dir < 0 ? lst(order) : order[0];\n        var moveInStorageOrder = (dir < 0) == (part.level == 1);\n        var sticky = moveInStorageOrder ? \"after\" : \"before\";\n        var ch;\n        // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n        // it could be that the last bidi part is not on the last visual line,\n        // since visual lines contain content order-consecutive chunks.\n        // Thus, in rtl, we are looking for the first (content-order) character\n        // in the rtl chunk that is on the last line (that is, the same line\n        // as the last (content-order) character).\n        if (part.level > 0 || cm.doc.direction == \"rtl\") {\n          var prep = prepareMeasureForLine(cm, lineObj);\n          ch = dir < 0 ? lineObj.text.length - 1 : 0;\n          var targetTop = measureCharPrepared(cm, prep, ch).top;\n          ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n          if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n        } else { ch = dir < 0 ? part.to : part.from; }\n        return new Pos(lineNo, ch, sticky)\n      }\n    }\n    return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n  }\n\n  function moveVisually(cm, line, start, dir) {\n    var bidi = getOrder(line, cm.doc.direction);\n    if (!bidi) { return moveLogically(line, start, dir) }\n    if (start.ch >= line.text.length) {\n      start.ch = line.text.length;\n      start.sticky = \"before\";\n    } else if (start.ch <= 0) {\n      start.ch = 0;\n      start.sticky = \"after\";\n    }\n    var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n    if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n      // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n      // nothing interesting happens.\n      return moveLogically(line, start, dir)\n    }\n\n    var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n    var prep;\n    var getWrappedLineExtent = function (ch) {\n      if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n      prep = prep || prepareMeasureForLine(cm, line);\n      return wrappedLineExtentChar(cm, line, prep, ch)\n    };\n    var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n    if (cm.doc.direction == \"rtl\" || part.level == 1) {\n      var moveInStorageOrder = (part.level == 1) == (dir < 0);\n      var ch = mv(start, moveInStorageOrder ? 1 : -1);\n      if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n        // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n        var sticky = moveInStorageOrder ? \"before\" : \"after\";\n        return new Pos(start.line, ch, sticky)\n      }\n    }\n\n    // Case 3: Could not move within this bidi part in this visual line, so leave\n    // the current bidi part\n\n    var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n      var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n        ? new Pos(start.line, mv(ch, 1), \"before\")\n        : new Pos(start.line, ch, \"after\"); };\n\n      for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n        var part = bidi[partPos];\n        var moveInStorageOrder = (dir > 0) == (part.level != 1);\n        var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n        if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n        ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n        if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n      }\n    };\n\n    // Case 3a: Look for other bidi parts on the same visual line\n    var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n    if (res) { return res }\n\n    // Case 3b: Look for other bidi parts on the next visual line\n    var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n    if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n      res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n      if (res) { return res }\n    }\n\n    // Case 4: Nowhere to move\n    return null\n  }\n\n  // Commands are parameter-less actions that can be performed on an\n  // editor, mostly used for keybindings.\n  var commands = {\n    selectAll: selectAll,\n    singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n    killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n      if (range.empty()) {\n        var len = getLine(cm.doc, range.head.line).text.length;\n        if (range.head.ch == len && range.head.line < cm.lastLine())\n          { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n        else\n          { return {from: range.head, to: Pos(range.head.line, len)} }\n      } else {\n        return {from: range.from(), to: range.to()}\n      }\n    }); },\n    deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0),\n      to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n    }); }); },\n    delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0), to: range.from()\n    }); }); },\n    delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n      return {from: leftPos, to: range.from()}\n    }); },\n    delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n      return {from: range.from(), to: rightPos }\n    }); },\n    undo: function (cm) { return cm.undo(); },\n    redo: function (cm) { return cm.redo(); },\n    undoSelection: function (cm) { return cm.undoSelection(); },\n    redoSelection: function (cm) { return cm.redoSelection(); },\n    goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n    goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n    goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n      {origin: \"+move\", bias: -1}\n    ); },\n    goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: 0, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n      if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n      return pos\n    }, sel_move); },\n    goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n    goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n    goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n    goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n    goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n    goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n    goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n    goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n    goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n    goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n    goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n    goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n    delCharBefore: function (cm) { return cm.deleteH(-1, \"char\"); },\n    delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n    delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n    delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n    delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n    delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n    indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n    indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n    indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n    insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n    insertSoftTab: function (cm) {\n      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n      for (var i = 0; i < ranges.length; i++) {\n        var pos = ranges[i].from();\n        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n        spaces.push(spaceStr(tabSize - col % tabSize));\n      }\n      cm.replaceSelections(spaces);\n    },\n    defaultTab: function (cm) {\n      if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n      else { cm.execCommand(\"insertTab\"); }\n    },\n    // Swap the two chars left and right of each selection's head.\n    // Move cursor behind the two swapped characters afterwards.\n    //\n    // Doesn't consider line feeds a character.\n    // Doesn't scan more than one line above to find a character.\n    // Doesn't do anything on an empty line.\n    // Doesn't do anything with non-empty selections.\n    transposeChars: function (cm) { return runInOp(cm, function () {\n      var ranges = cm.listSelections(), newSel = [];\n      for (var i = 0; i < ranges.length; i++) {\n        if (!ranges[i].empty()) { continue }\n        var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n        if (line) {\n          if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n          if (cur.ch > 0) {\n            cur = new Pos(cur.line, cur.ch + 1);\n            cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n                            Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n          } else if (cur.line > cm.doc.first) {\n            var prev = getLine(cm.doc, cur.line - 1).text;\n            if (prev) {\n              cur = new Pos(cur.line, 1);\n              cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n                              prev.charAt(prev.length - 1),\n                              Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n            }\n          }\n        }\n        newSel.push(new Range(cur, cur));\n      }\n      cm.setSelections(newSel);\n    }); },\n    newlineAndIndent: function (cm) { return runInOp(cm, function () {\n      var sels = cm.listSelections();\n      for (var i = sels.length - 1; i >= 0; i--)\n        { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n      sels = cm.listSelections();\n      for (var i$1 = 0; i$1 < sels.length; i$1++)\n        { cm.indentLine(sels[i$1].from().line, null, true); }\n      ensureCursorVisible(cm);\n    }); },\n    openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n    toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n  };\n\n\n  function lineStart(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLine(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, visual, lineN, 1)\n  }\n  function lineEnd(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLineEnd(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, line, lineN, -1)\n  }\n  function lineStartSmart(cm, pos) {\n    var start = lineStart(cm, pos.line);\n    var line = getLine(cm.doc, start.line);\n    var order = getOrder(line, cm.doc.direction);\n    if (!order || order[0].level == 0) {\n      var firstNonWS = Math.max(0, line.text.search(/\\S/));\n      var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n      return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n    }\n    return start\n  }\n\n  // Run a handler that was bound to a key.\n  function doHandleBinding(cm, bound, dropShift) {\n    if (typeof bound == \"string\") {\n      bound = commands[bound];\n      if (!bound) { return false }\n    }\n    // Ensure previous input has been read, so that the handler sees a\n    // consistent view of the document\n    cm.display.input.ensurePolled();\n    var prevShift = cm.display.shift, done = false;\n    try {\n      if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n      if (dropShift) { cm.display.shift = false; }\n      done = bound(cm) != Pass;\n    } finally {\n      cm.display.shift = prevShift;\n      cm.state.suppressEdits = false;\n    }\n    return done\n  }\n\n  function lookupKeyForEditor(cm, name, handle) {\n    for (var i = 0; i < cm.state.keyMaps.length; i++) {\n      var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n      if (result) { return result }\n    }\n    return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n      || lookupKey(name, cm.options.keyMap, handle, cm)\n  }\n\n  // Note that, despite the name, this function is also used to check\n  // for bound mouse clicks.\n\n  var stopSeq = new Delayed;\n\n  function dispatchKey(cm, name, e, handle) {\n    var seq = cm.state.keySeq;\n    if (seq) {\n      if (isModifierKey(name)) { return \"handled\" }\n      if (/\\'$/.test(name))\n        { cm.state.keySeq = null; }\n      else\n        { stopSeq.set(50, function () {\n          if (cm.state.keySeq == seq) {\n            cm.state.keySeq = null;\n            cm.display.input.reset();\n          }\n        }); }\n      if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n    }\n    return dispatchKeyInner(cm, name, e, handle)\n  }\n\n  function dispatchKeyInner(cm, name, e, handle) {\n    var result = lookupKeyForEditor(cm, name, handle);\n\n    if (result == \"multi\")\n      { cm.state.keySeq = name; }\n    if (result == \"handled\")\n      { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n    if (result == \"handled\" || result == \"multi\") {\n      e_preventDefault(e);\n      restartBlink(cm);\n    }\n\n    return !!result\n  }\n\n  // Handle a key from the keydown event.\n  function handleKeyBinding(cm, e) {\n    var name = keyName(e, true);\n    if (!name) { return false }\n\n    if (e.shiftKey && !cm.state.keySeq) {\n      // First try to resolve full name (including 'Shift-'). Failing\n      // that, see if there is a cursor-motion command (starting with\n      // 'go') bound to the keyname without 'Shift-'.\n      return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n          || dispatchKey(cm, name, e, function (b) {\n               if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n                 { return doHandleBinding(cm, b) }\n             })\n    } else {\n      return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n    }\n  }\n\n  // Handle a key from the keypress event\n  function handleCharBinding(cm, e, ch) {\n    return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n  }\n\n  var lastStoppedKey = null;\n  function onKeyDown(e) {\n    var cm = this;\n    cm.curOp.focus = activeElt();\n    if (signalDOMEvent(cm, e)) { return }\n    // IE does strange things with escape.\n    if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n    var code = e.keyCode;\n    cm.display.shift = code == 16 || e.shiftKey;\n    var handled = handleKeyBinding(cm, e);\n    if (presto) {\n      lastStoppedKey = handled ? code : null;\n      // Opera has no cut event... we try to at least catch the key combo\n      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n        { cm.replaceSelection(\"\", null, \"cut\"); }\n    }\n\n    // Turn mouse into crosshair when Alt is held on Mac.\n    if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n      { showCrossHair(cm); }\n  }\n\n  function showCrossHair(cm) {\n    var lineDiv = cm.display.lineDiv;\n    addClass(lineDiv, \"CodeMirror-crosshair\");\n\n    function up(e) {\n      if (e.keyCode == 18 || !e.altKey) {\n        rmClass(lineDiv, \"CodeMirror-crosshair\");\n        off(document, \"keyup\", up);\n        off(document, \"mouseover\", up);\n      }\n    }\n    on(document, \"keyup\", up);\n    on(document, \"mouseover\", up);\n  }\n\n  function onKeyUp(e) {\n    if (e.keyCode == 16) { this.doc.sel.shift = false; }\n    signalDOMEvent(this, e);\n  }\n\n  function onKeyPress(e) {\n    var cm = this;\n    if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n    var keyCode = e.keyCode, charCode = e.charCode;\n    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n    if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n    // Some browsers fire keypress events for backspace\n    if (ch == \"\\x08\") { return }\n    if (handleCharBinding(cm, e, ch)) { return }\n    cm.display.input.onKeyPress(e);\n  }\n\n  var DOUBLECLICK_DELAY = 400;\n\n  var PastClick = function(time, pos, button) {\n    this.time = time;\n    this.pos = pos;\n    this.button = button;\n  };\n\n  PastClick.prototype.compare = function (time, pos, button) {\n    return this.time + DOUBLECLICK_DELAY > time &&\n      cmp(pos, this.pos) == 0 && button == this.button\n  };\n\n  var lastClick, lastDoubleClick;\n  function clickRepeat(pos, button) {\n    var now = +new Date;\n    if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n      lastClick = lastDoubleClick = null;\n      return \"triple\"\n    } else if (lastClick && lastClick.compare(now, pos, button)) {\n      lastDoubleClick = new PastClick(now, pos, button);\n      lastClick = null;\n      return \"double\"\n    } else {\n      lastClick = new PastClick(now, pos, button);\n      lastDoubleClick = null;\n      return \"single\"\n    }\n  }\n\n  // A mouse down can be a single click, double click, triple click,\n  // start of selection drag, start of text drag, new cursor\n  // (ctrl-click), rectangle drag (alt-drag), or xwin\n  // middle-click-paste. Or it might be a click on something we should\n  // not interfere with, such as a scrollbar or widget.\n  function onMouseDown(e) {\n    var cm = this, display = cm.display;\n    if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n    display.input.ensurePolled();\n    display.shift = e.shiftKey;\n\n    if (eventInWidget(display, e)) {\n      if (!webkit) {\n        // Briefly turn off draggability, to allow widgets to do\n        // normal dragging things.\n        display.scroller.draggable = false;\n        setTimeout(function () { return display.scroller.draggable = true; }, 100);\n      }\n      return\n    }\n    if (clickInGutter(cm, e)) { return }\n    var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n    window.focus();\n\n    // #3261: make sure, that we're not starting a second selection\n    if (button == 1 && cm.state.selectingText)\n      { cm.state.selectingText(e); }\n\n    if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n    if (button == 1) {\n      if (pos) { leftButtonDown(cm, pos, repeat, e); }\n      else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n    } else if (button == 2) {\n      if (pos) { extendSelection(cm.doc, pos); }\n      setTimeout(function () { return display.input.focus(); }, 20);\n    } else if (button == 3) {\n      if (captureRightClick) { cm.display.input.onContextMenu(e); }\n      else { delayBlurEvent(cm); }\n    }\n  }\n\n  function handleMappedButton(cm, button, pos, repeat, event) {\n    var name = \"Click\";\n    if (repeat == \"double\") { name = \"Double\" + name; }\n    else if (repeat == \"triple\") { name = \"Triple\" + name; }\n    name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n    return dispatchKey(cm,  addModifierNames(name, event), event, function (bound) {\n      if (typeof bound == \"string\") { bound = commands[bound]; }\n      if (!bound) { return false }\n      var done = false;\n      try {\n        if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n        done = bound(cm, pos) != Pass;\n      } finally {\n        cm.state.suppressEdits = false;\n      }\n      return done\n    })\n  }\n\n  function configureMouse(cm, repeat, event) {\n    var option = cm.getOption(\"configureMouse\");\n    var value = option ? option(cm, repeat, event) : {};\n    if (value.unit == null) {\n      var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n      value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n    }\n    if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n    if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n    if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n    return value\n  }\n\n  function leftButtonDown(cm, pos, repeat, event) {\n    if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n    else { cm.curOp.focus = activeElt(); }\n\n    var behavior = configureMouse(cm, repeat, event);\n\n    var sel = cm.doc.sel, contained;\n    if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n        repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n        (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n        (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n      { leftButtonStartDrag(cm, event, pos, behavior); }\n    else\n      { leftButtonSelect(cm, event, pos, behavior); }\n  }\n\n  // Start a text drag. When it ends, see if any dragging actually\n  // happen, and treat as a click if it didn't.\n  function leftButtonStartDrag(cm, event, pos, behavior) {\n    var display = cm.display, moved = false;\n    var dragEnd = operation(cm, function (e) {\n      if (webkit) { display.scroller.draggable = false; }\n      cm.state.draggingText = false;\n      off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n      off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n      off(display.scroller, \"dragstart\", dragStart);\n      off(display.scroller, \"drop\", dragEnd);\n      if (!moved) {\n        e_preventDefault(e);\n        if (!behavior.addNew)\n          { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n        // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n        if (webkit || ie && ie_version == 9)\n          { setTimeout(function () {display.wrapper.ownerDocument.body.focus(); display.input.focus();}, 20); }\n        else\n          { display.input.focus(); }\n      }\n    });\n    var mouseMove = function(e2) {\n      moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n    };\n    var dragStart = function () { return moved = true; };\n    // Let the drag handler handle this.\n    if (webkit) { display.scroller.draggable = true; }\n    cm.state.draggingText = dragEnd;\n    dragEnd.copy = !behavior.moveOnDrag;\n    // IE's approach to draggable\n    if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n    on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n    on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n    on(display.scroller, \"dragstart\", dragStart);\n    on(display.scroller, \"drop\", dragEnd);\n\n    delayBlurEvent(cm);\n    setTimeout(function () { return display.input.focus(); }, 20);\n  }\n\n  function rangeForUnit(cm, pos, unit) {\n    if (unit == \"char\") { return new Range(pos, pos) }\n    if (unit == \"word\") { return cm.findWordAt(pos) }\n    if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n    var result = unit(cm, pos);\n    return new Range(result.from, result.to)\n  }\n\n  // Normal selection, as opposed to text dragging.\n  function leftButtonSelect(cm, event, start, behavior) {\n    var display = cm.display, doc = cm.doc;\n    e_preventDefault(event);\n\n    var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n    if (behavior.addNew && !behavior.extend) {\n      ourIndex = doc.sel.contains(start);\n      if (ourIndex > -1)\n        { ourRange = ranges[ourIndex]; }\n      else\n        { ourRange = new Range(start, start); }\n    } else {\n      ourRange = doc.sel.primary();\n      ourIndex = doc.sel.primIndex;\n    }\n\n    if (behavior.unit == \"rectangle\") {\n      if (!behavior.addNew) { ourRange = new Range(start, start); }\n      start = posFromMouse(cm, event, true, true);\n      ourIndex = -1;\n    } else {\n      var range$$1 = rangeForUnit(cm, start, behavior.unit);\n      if (behavior.extend)\n        { ourRange = extendRange(ourRange, range$$1.anchor, range$$1.head, behavior.extend); }\n      else\n        { ourRange = range$$1; }\n    }\n\n    if (!behavior.addNew) {\n      ourIndex = 0;\n      setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n      startSel = doc.sel;\n    } else if (ourIndex == -1) {\n      ourIndex = ranges.length;\n      setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n                   {scroll: false, origin: \"*mouse\"});\n    } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n      setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n                   {scroll: false, origin: \"*mouse\"});\n      startSel = doc.sel;\n    } else {\n      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n    }\n\n    var lastPos = start;\n    function extendTo(pos) {\n      if (cmp(lastPos, pos) == 0) { return }\n      lastPos = pos;\n\n      if (behavior.unit == \"rectangle\") {\n        var ranges = [], tabSize = cm.options.tabSize;\n        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n             line <= end; line++) {\n          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n          if (left == right)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n          else if (text.length > leftPos)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n        }\n        if (!ranges.length) { ranges.push(new Range(start, start)); }\n        setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n                     {origin: \"*mouse\", scroll: false});\n        cm.scrollIntoView(pos);\n      } else {\n        var oldRange = ourRange;\n        var range$$1 = rangeForUnit(cm, pos, behavior.unit);\n        var anchor = oldRange.anchor, head;\n        if (cmp(range$$1.anchor, anchor) > 0) {\n          head = range$$1.head;\n          anchor = minPos(oldRange.from(), range$$1.anchor);\n        } else {\n          head = range$$1.anchor;\n          anchor = maxPos(oldRange.to(), range$$1.head);\n        }\n        var ranges$1 = startSel.ranges.slice(0);\n        ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n        setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n      }\n    }\n\n    var editorSize = display.wrapper.getBoundingClientRect();\n    // Used to ensure timeout re-tries don't fire when another extend\n    // happened in the meantime (clearTimeout isn't reliable -- at\n    // least on Chrome, the timeouts still happen even when cleared,\n    // if the clear happens after their scheduled firing time).\n    var counter = 0;\n\n    function extend(e) {\n      var curCount = ++counter;\n      var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n      if (!cur) { return }\n      if (cmp(cur, lastPos) != 0) {\n        cm.curOp.focus = activeElt();\n        extendTo(cur);\n        var visible = visibleLines(display, doc);\n        if (cur.line >= visible.to || cur.line < visible.from)\n          { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n      } else {\n        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n        if (outside) { setTimeout(operation(cm, function () {\n          if (counter != curCount) { return }\n          display.scroller.scrollTop += outside;\n          extend(e);\n        }), 50); }\n      }\n    }\n\n    function done(e) {\n      cm.state.selectingText = false;\n      counter = Infinity;\n      e_preventDefault(e);\n      display.input.focus();\n      off(display.wrapper.ownerDocument, \"mousemove\", move);\n      off(display.wrapper.ownerDocument, \"mouseup\", up);\n      doc.history.lastSelOrigin = null;\n    }\n\n    var move = operation(cm, function (e) {\n      if (e.buttons === 0 || !e_button(e)) { done(e); }\n      else { extend(e); }\n    });\n    var up = operation(cm, done);\n    cm.state.selectingText = up;\n    on(display.wrapper.ownerDocument, \"mousemove\", move);\n    on(display.wrapper.ownerDocument, \"mouseup\", up);\n  }\n\n  // Used when mouse-selecting to adjust the anchor to the proper side\n  // of a bidi jump depending on the visual position of the head.\n  function bidiSimplify(cm, range$$1) {\n    var anchor = range$$1.anchor;\n    var head = range$$1.head;\n    var anchorLine = getLine(cm.doc, anchor.line);\n    if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range$$1 }\n    var order = getOrder(anchorLine);\n    if (!order) { return range$$1 }\n    var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n    if (part.from != anchor.ch && part.to != anchor.ch) { return range$$1 }\n    var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n    if (boundary == 0 || boundary == order.length) { return range$$1 }\n\n    // Compute the relative visual position of the head compared to the\n    // anchor (<0 is to the left, >0 to the right)\n    var leftSide;\n    if (head.line != anchor.line) {\n      leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n    } else {\n      var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n      var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n      if (headIndex == boundary - 1 || headIndex == boundary)\n        { leftSide = dir < 0; }\n      else\n        { leftSide = dir > 0; }\n    }\n\n    var usePart = order[boundary + (leftSide ? -1 : 0)];\n    var from = leftSide == (usePart.level == 1);\n    var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n    return anchor.ch == ch && anchor.sticky == sticky ? range$$1 : new Range(new Pos(anchor.line, ch, sticky), head)\n  }\n\n\n  // Determines whether an event happened in the gutter, and fires the\n  // handlers for the corresponding event.\n  function gutterEvent(cm, e, type, prevent) {\n    var mX, mY;\n    if (e.touches) {\n      mX = e.touches[0].clientX;\n      mY = e.touches[0].clientY;\n    } else {\n      try { mX = e.clientX; mY = e.clientY; }\n      catch(e) { return false }\n    }\n    if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n    if (prevent) { e_preventDefault(e); }\n\n    var display = cm.display;\n    var lineBox = display.lineDiv.getBoundingClientRect();\n\n    if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n    mY -= lineBox.top - display.viewOffset;\n\n    for (var i = 0; i < cm.options.gutters.length; ++i) {\n      var g = display.gutters.childNodes[i];\n      if (g && g.getBoundingClientRect().right >= mX) {\n        var line = lineAtHeight(cm.doc, mY);\n        var gutter = cm.options.gutters[i];\n        signal(cm, type, cm, line, gutter, e);\n        return e_defaultPrevented(e)\n      }\n    }\n  }\n\n  function clickInGutter(cm, e) {\n    return gutterEvent(cm, e, \"gutterClick\", true)\n  }\n\n  // CONTEXT MENU HANDLING\n\n  // To make the context menu work, we need to briefly unhide the\n  // textarea (making it as unobtrusive as possible) to let the\n  // right-click take effect on it.\n  function onContextMenu(cm, e) {\n    if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n    if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n    if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n  }\n\n  function contextMenuInGutter(cm, e) {\n    if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n    return gutterEvent(cm, e, \"gutterContextMenu\", false)\n  }\n\n  function themeChanged(cm) {\n    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n      cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n    clearCaches(cm);\n  }\n\n  var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n  var defaults = {};\n  var optionHandlers = {};\n\n  function defineOptions(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    function option(name, deflt, handle, notOnInit) {\n      CodeMirror.defaults[name] = deflt;\n      if (handle) { optionHandlers[name] =\n        notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n    }\n\n    CodeMirror.defineOption = option;\n\n    // Passed to option handlers when there is no old value.\n    CodeMirror.Init = Init;\n\n    // These two are, on init, called from the constructor because they\n    // have to be initialized before the editor can start at all.\n    option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n    option(\"mode\", null, function (cm, val) {\n      cm.doc.modeOption = val;\n      loadMode(cm);\n    }, true);\n\n    option(\"indentUnit\", 2, loadMode, true);\n    option(\"indentWithTabs\", false);\n    option(\"smartIndent\", true);\n    option(\"tabSize\", 4, function (cm) {\n      resetModeState(cm);\n      clearCaches(cm);\n      regChange(cm);\n    }, true);\n\n    option(\"lineSeparator\", null, function (cm, val) {\n      cm.doc.lineSep = val;\n      if (!val) { return }\n      var newBreaks = [], lineNo = cm.doc.first;\n      cm.doc.iter(function (line) {\n        for (var pos = 0;;) {\n          var found = line.text.indexOf(val, pos);\n          if (found == -1) { break }\n          pos = found + val.length;\n          newBreaks.push(Pos(lineNo, found));\n        }\n        lineNo++;\n      });\n      for (var i = newBreaks.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n    });\n    option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200f\\u2028\\u2029\\ufeff]/g, function (cm, val, old) {\n      cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n      if (old != Init) { cm.refresh(); }\n    });\n    option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n    option(\"electricChars\", true);\n    option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n      throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n    }, true);\n    option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n    option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n    option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n    option(\"rtlMoveVisually\", !windows);\n    option(\"wholeLineUpdateBefore\", true);\n\n    option(\"theme\", \"default\", function (cm) {\n      themeChanged(cm);\n      guttersChanged(cm);\n    }, true);\n    option(\"keyMap\", \"default\", function (cm, val, old) {\n      var next = getKeyMap(val);\n      var prev = old != Init && getKeyMap(old);\n      if (prev && prev.detach) { prev.detach(cm, next); }\n      if (next.attach) { next.attach(cm, prev || null); }\n    });\n    option(\"extraKeys\", null);\n    option(\"configureMouse\", null);\n\n    option(\"lineWrapping\", false, wrappingChanged, true);\n    option(\"gutters\", [], function (cm) {\n      setGuttersForLineNumbers(cm.options);\n      guttersChanged(cm);\n    }, true);\n    option(\"fixedGutter\", true, function (cm, val) {\n      cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n      cm.refresh();\n    }, true);\n    option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n    option(\"scrollbarStyle\", \"native\", function (cm) {\n      initScrollbars(cm);\n      updateScrollbars(cm);\n      cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n      cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n    }, true);\n    option(\"lineNumbers\", false, function (cm) {\n      setGuttersForLineNumbers(cm.options);\n      guttersChanged(cm);\n    }, true);\n    option(\"firstLineNumber\", 1, guttersChanged, true);\n    option(\"lineNumberFormatter\", function (integer) { return integer; }, guttersChanged, true);\n    option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n    option(\"resetSelectionOnContextMenu\", true);\n    option(\"lineWiseCopyCut\", true);\n    option(\"pasteLinesPerSelection\", true);\n    option(\"selectionsMayTouch\", false);\n\n    option(\"readOnly\", false, function (cm, val) {\n      if (val == \"nocursor\") {\n        onBlur(cm);\n        cm.display.input.blur();\n      }\n      cm.display.input.readOnlyChanged(val);\n    });\n    option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n    option(\"dragDrop\", true, dragDropChanged);\n    option(\"allowDropFileTypes\", null);\n\n    option(\"cursorBlinkRate\", 530);\n    option(\"cursorScrollMargin\", 0);\n    option(\"cursorHeight\", 1, updateSelection, true);\n    option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n    option(\"workTime\", 100);\n    option(\"workDelay\", 100);\n    option(\"flattenSpans\", true, resetModeState, true);\n    option(\"addModeClass\", false, resetModeState, true);\n    option(\"pollInterval\", 100);\n    option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n    option(\"historyEventDelay\", 1250);\n    option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n    option(\"maxHighlightLength\", 10000, resetModeState, true);\n    option(\"moveInputWithCursor\", true, function (cm, val) {\n      if (!val) { cm.display.input.resetPosition(); }\n    });\n\n    option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n    option(\"autofocus\", null);\n    option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n    option(\"phrases\", null);\n  }\n\n  function guttersChanged(cm) {\n    updateGutters(cm);\n    regChange(cm);\n    alignHorizontally(cm);\n  }\n\n  function dragDropChanged(cm, value, old) {\n    var wasOn = old && old != Init;\n    if (!value != !wasOn) {\n      var funcs = cm.display.dragFunctions;\n      var toggle = value ? on : off;\n      toggle(cm.display.scroller, \"dragstart\", funcs.start);\n      toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n      toggle(cm.display.scroller, \"dragover\", funcs.over);\n      toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n      toggle(cm.display.scroller, \"drop\", funcs.drop);\n    }\n  }\n\n  function wrappingChanged(cm) {\n    if (cm.options.lineWrapping) {\n      addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      cm.display.sizer.style.minWidth = \"\";\n      cm.display.sizerWidth = null;\n    } else {\n      rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      findMaxLine(cm);\n    }\n    estimateLineHeights(cm);\n    regChange(cm);\n    clearCaches(cm);\n    setTimeout(function () { return updateScrollbars(cm); }, 100);\n  }\n\n  // A CodeMirror instance represents an editor. This is the object\n  // that user code is usually dealing with.\n\n  function CodeMirror(place, options) {\n    var this$1 = this;\n\n    if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n    this.options = options = options ? copyObj(options) : {};\n    // Determine effective options based on given values and defaults.\n    copyObj(defaults, options, false);\n    setGuttersForLineNumbers(options);\n\n    var doc = options.value;\n    if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n    else if (options.mode) { doc.modeOption = options.mode; }\n    this.doc = doc;\n\n    var input = new CodeMirror.inputStyles[options.inputStyle](this);\n    var display = this.display = new Display(place, doc, input);\n    display.wrapper.CodeMirror = this;\n    updateGutters(this);\n    themeChanged(this);\n    if (options.lineWrapping)\n      { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n    initScrollbars(this);\n\n    this.state = {\n      keyMaps: [],  // stores maps added by addKeyMap\n      overlays: [], // highlighting overlays, as added by addOverlay\n      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info\n      overwrite: false,\n      delayingBlurEvent: false,\n      focused: false,\n      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n      pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n      selectingText: false,\n      draggingText: false,\n      highlight: new Delayed(), // stores highlight worker timeout\n      keySeq: null,  // Unfinished key sequence\n      specialChars: null\n    };\n\n    if (options.autofocus && !mobile) { display.input.focus(); }\n\n    // Override magic textarea content restore that IE sometimes does\n    // on our hidden textarea on reload\n    if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n    registerEventHandlers(this);\n    ensureGlobalHandlers();\n\n    startOperation(this);\n    this.curOp.forceUpdate = true;\n    attachDoc(this, doc);\n\n    if ((options.autofocus && !mobile) || this.hasFocus())\n      { setTimeout(bind(onFocus, this), 20); }\n    else\n      { onBlur(this); }\n\n    for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n      { optionHandlers[opt](this$1, options[opt], Init); } }\n    maybeUpdateLineNumberWidth(this);\n    if (options.finishInit) { options.finishInit(this); }\n    for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1); }\n    endOperation(this);\n    // Suppress optimizelegibility in Webkit, since it breaks text\n    // measuring on line wrapping boundaries.\n    if (webkit && options.lineWrapping &&\n        getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n      { display.lineDiv.style.textRendering = \"auto\"; }\n  }\n\n  // The default configuration options.\n  CodeMirror.defaults = defaults;\n  // Functions to run when options are changed.\n  CodeMirror.optionHandlers = optionHandlers;\n\n  // Attach the necessary event handlers when initializing the editor\n  function registerEventHandlers(cm) {\n    var d = cm.display;\n    on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n    // Older IE's will not fire a second mousedown for a double click\n    if (ie && ie_version < 11)\n      { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n        if (signalDOMEvent(cm, e)) { return }\n        var pos = posFromMouse(cm, e);\n        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n        e_preventDefault(e);\n        var word = cm.findWordAt(pos);\n        extendSelection(cm.doc, word.anchor, word.head);\n      })); }\n    else\n      { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n    // Some browsers fire contextmenu *after* opening the menu, at\n    // which point we can't mess with it anymore. Context menu is\n    // handled in onMouseDown for these browsers.\n    on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n\n    // Used to suppress mouse event handling when a touch happens\n    var touchFinished, prevTouch = {end: 0};\n    function finishTouch() {\n      if (d.activeTouch) {\n        touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n        prevTouch = d.activeTouch;\n        prevTouch.end = +new Date;\n      }\n    }\n    function isMouseLikeTouchEvent(e) {\n      if (e.touches.length != 1) { return false }\n      var touch = e.touches[0];\n      return touch.radiusX <= 1 && touch.radiusY <= 1\n    }\n    function farAway(touch, other) {\n      if (other.left == null) { return true }\n      var dx = other.left - touch.left, dy = other.top - touch.top;\n      return dx * dx + dy * dy > 20 * 20\n    }\n    on(d.scroller, \"touchstart\", function (e) {\n      if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n        d.input.ensurePolled();\n        clearTimeout(touchFinished);\n        var now = +new Date;\n        d.activeTouch = {start: now, moved: false,\n                         prev: now - prevTouch.end <= 300 ? prevTouch : null};\n        if (e.touches.length == 1) {\n          d.activeTouch.left = e.touches[0].pageX;\n          d.activeTouch.top = e.touches[0].pageY;\n        }\n      }\n    });\n    on(d.scroller, \"touchmove\", function () {\n      if (d.activeTouch) { d.activeTouch.moved = true; }\n    });\n    on(d.scroller, \"touchend\", function (e) {\n      var touch = d.activeTouch;\n      if (touch && !eventInWidget(d, e) && touch.left != null &&\n          !touch.moved && new Date - touch.start < 300) {\n        var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n        if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n          { range = new Range(pos, pos); }\n        else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n          { range = cm.findWordAt(pos); }\n        else // Triple tap\n          { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n        cm.setSelection(range.anchor, range.head);\n        cm.focus();\n        e_preventDefault(e);\n      }\n      finishTouch();\n    });\n    on(d.scroller, \"touchcancel\", finishTouch);\n\n    // Sync scrolling between fake scrollbars and real scrollable\n    // area, ensure viewport is updated when scrolling.\n    on(d.scroller, \"scroll\", function () {\n      if (d.scroller.clientHeight) {\n        updateScrollTop(cm, d.scroller.scrollTop);\n        setScrollLeft(cm, d.scroller.scrollLeft, true);\n        signal(cm, \"scroll\", cm);\n      }\n    });\n\n    // Listen to wheel events in order to try and update the viewport on time.\n    on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n    on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n    // Prevent wrapper from ever scrolling\n    on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n    d.dragFunctions = {\n      enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n      over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n      start: function (e) { return onDragStart(cm, e); },\n      drop: operation(cm, onDrop),\n      leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n    };\n\n    var inp = d.input.getField();\n    on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n    on(inp, \"keydown\", operation(cm, onKeyDown));\n    on(inp, \"keypress\", operation(cm, onKeyPress));\n    on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n    on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n  }\n\n  var initHooks = [];\n  CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n  // Indent the given line. The how parameter can be \"smart\",\n  // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n  // (typically set to true for forced single-line indents), empty\n  // lines are not indented, and places where the mode returns Pass\n  // are left alone.\n  function indentLine(cm, n, how, aggressive) {\n    var doc = cm.doc, state;\n    if (how == null) { how = \"add\"; }\n    if (how == \"smart\") {\n      // Fall back to \"prev\" when the mode doesn't have an indentation\n      // method.\n      if (!doc.mode.indent) { how = \"prev\"; }\n      else { state = getContextBefore(cm, n).state; }\n    }\n\n    var tabSize = cm.options.tabSize;\n    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n    if (line.stateAfter) { line.stateAfter = null; }\n    var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n    if (!aggressive && !/\\S/.test(line.text)) {\n      indentation = 0;\n      how = \"not\";\n    } else if (how == \"smart\") {\n      indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n      if (indentation == Pass || indentation > 150) {\n        if (!aggressive) { return }\n        how = \"prev\";\n      }\n    }\n    if (how == \"prev\") {\n      if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n      else { indentation = 0; }\n    } else if (how == \"add\") {\n      indentation = curSpace + cm.options.indentUnit;\n    } else if (how == \"subtract\") {\n      indentation = curSpace - cm.options.indentUnit;\n    } else if (typeof how == \"number\") {\n      indentation = curSpace + how;\n    }\n    indentation = Math.max(0, indentation);\n\n    var indentString = \"\", pos = 0;\n    if (cm.options.indentWithTabs)\n      { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n    if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n    if (indentString != curSpaceString) {\n      replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n      line.stateAfter = null;\n      return true\n    } else {\n      // Ensure that, if the cursor was in the whitespace at the start\n      // of the line, it is moved to the end of that space.\n      for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n        var range = doc.sel.ranges[i$1];\n        if (range.head.line == n && range.head.ch < curSpaceString.length) {\n          var pos$1 = Pos(n, curSpaceString.length);\n          replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n          break\n        }\n      }\n    }\n  }\n\n  // This will be set to a {lineWise: bool, text: [string]} object, so\n  // that, when pasting, we know what kind of selections the copied\n  // text was made out of.\n  var lastCopied = null;\n\n  function setLastCopied(newLastCopied) {\n    lastCopied = newLastCopied;\n  }\n\n  function applyTextInput(cm, inserted, deleted, sel, origin) {\n    var doc = cm.doc;\n    cm.display.shift = false;\n    if (!sel) { sel = doc.sel; }\n\n    var recent = +new Date - 200;\n    var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n    var textLines = splitLinesAuto(inserted), multiPaste = null;\n    // When pasting N lines into N selections, insert one line per selection\n    if (paste && sel.ranges.length > 1) {\n      if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n        if (sel.ranges.length % lastCopied.text.length == 0) {\n          multiPaste = [];\n          for (var i = 0; i < lastCopied.text.length; i++)\n            { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n        }\n      } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n        multiPaste = map(textLines, function (l) { return [l]; });\n      }\n    }\n\n    var updateInput = cm.curOp.updateInput;\n    // Normal behavior is to insert the new text into every selection\n    for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n      var range$$1 = sel.ranges[i$1];\n      var from = range$$1.from(), to = range$$1.to();\n      if (range$$1.empty()) {\n        if (deleted && deleted > 0) // Handle deletion\n          { from = Pos(from.line, from.ch - deleted); }\n        else if (cm.state.overwrite && !paste) // Handle overwrite\n          { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n        else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == inserted)\n          { from = to = Pos(from.line, 0); }\n      }\n      var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n                         origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n      makeChange(cm.doc, changeEvent);\n      signalLater(cm, \"inputRead\", cm, changeEvent);\n    }\n    if (inserted && !paste)\n      { triggerElectric(cm, inserted); }\n\n    ensureCursorVisible(cm);\n    if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n    cm.curOp.typing = true;\n    cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n  }\n\n  function handlePaste(e, cm) {\n    var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n    if (pasted) {\n      e.preventDefault();\n      if (!cm.isReadOnly() && !cm.options.disableInput)\n        { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n      return true\n    }\n  }\n\n  function triggerElectric(cm, inserted) {\n    // When an 'electric' character is inserted, immediately trigger a reindent\n    if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n    var sel = cm.doc.sel;\n\n    for (var i = sel.ranges.length - 1; i >= 0; i--) {\n      var range$$1 = sel.ranges[i];\n      if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue }\n      var mode = cm.getModeAt(range$$1.head);\n      var indented = false;\n      if (mode.electricChars) {\n        for (var j = 0; j < mode.electricChars.length; j++)\n          { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n            indented = indentLine(cm, range$$1.head.line, \"smart\");\n            break\n          } }\n      } else if (mode.electricInput) {\n        if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch)))\n          { indented = indentLine(cm, range$$1.head.line, \"smart\"); }\n      }\n      if (indented) { signalLater(cm, \"electricInput\", cm, range$$1.head.line); }\n    }\n  }\n\n  function copyableRanges(cm) {\n    var text = [], ranges = [];\n    for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n      var line = cm.doc.sel.ranges[i].head.line;\n      var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n      ranges.push(lineRange);\n      text.push(cm.getRange(lineRange.anchor, lineRange.head));\n    }\n    return {text: text, ranges: ranges}\n  }\n\n  function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n    field.setAttribute(\"autocorrect\", !!autocorrect);\n    field.setAttribute(\"autocapitalize\", !!autocapitalize);\n    field.setAttribute(\"spellcheck\", !!spellcheck);\n  }\n\n  function hiddenTextarea() {\n    var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n    var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n    // The textarea is kept positioned near the cursor to prevent the\n    // fact that it'll be scrolled into view on input from scrolling\n    // our fake cursor out of view. On webkit, when wrap=off, paste is\n    // very slow. So make the area wide instead.\n    if (webkit) { te.style.width = \"1000px\"; }\n    else { te.setAttribute(\"wrap\", \"off\"); }\n    // If border: 0; -- iOS fails to open keyboard (issue #1287)\n    if (ios) { te.style.border = \"1px solid black\"; }\n    disableBrowserMagic(te);\n    return div\n  }\n\n  // The publicly visible API. Note that methodOp(f) means\n  // 'wrap f in an operation, performed on its `this` parameter'.\n\n  // This is not the complete set of editor methods. Most of the\n  // methods defined on the Doc type are also injected into\n  // CodeMirror.prototype, for backwards compatibility and\n  // convenience.\n\n  function addEditorMethods(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    var helpers = CodeMirror.helpers = {};\n\n    CodeMirror.prototype = {\n      constructor: CodeMirror,\n      focus: function(){window.focus(); this.display.input.focus();},\n\n      setOption: function(option, value) {\n        var options = this.options, old = options[option];\n        if (options[option] == value && option != \"mode\") { return }\n        options[option] = value;\n        if (optionHandlers.hasOwnProperty(option))\n          { operation(this, optionHandlers[option])(this, value, old); }\n        signal(this, \"optionChange\", this, option);\n      },\n\n      getOption: function(option) {return this.options[option]},\n      getDoc: function() {return this.doc},\n\n      addKeyMap: function(map$$1, bottom) {\n        this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map$$1));\n      },\n      removeKeyMap: function(map$$1) {\n        var maps = this.state.keyMaps;\n        for (var i = 0; i < maps.length; ++i)\n          { if (maps[i] == map$$1 || maps[i].name == map$$1) {\n            maps.splice(i, 1);\n            return true\n          } }\n      },\n\n      addOverlay: methodOp(function(spec, options) {\n        var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n        if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n        insertSorted(this.state.overlays,\n                     {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n                      priority: (options && options.priority) || 0},\n                     function (overlay) { return overlay.priority; });\n        this.state.modeGen++;\n        regChange(this);\n      }),\n      removeOverlay: methodOp(function(spec) {\n        var this$1 = this;\n\n        var overlays = this.state.overlays;\n        for (var i = 0; i < overlays.length; ++i) {\n          var cur = overlays[i].modeSpec;\n          if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n            overlays.splice(i, 1);\n            this$1.state.modeGen++;\n            regChange(this$1);\n            return\n          }\n        }\n      }),\n\n      indentLine: methodOp(function(n, dir, aggressive) {\n        if (typeof dir != \"string\" && typeof dir != \"number\") {\n          if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n          else { dir = dir ? \"add\" : \"subtract\"; }\n        }\n        if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n      }),\n      indentSelection: methodOp(function(how) {\n        var this$1 = this;\n\n        var ranges = this.doc.sel.ranges, end = -1;\n        for (var i = 0; i < ranges.length; i++) {\n          var range$$1 = ranges[i];\n          if (!range$$1.empty()) {\n            var from = range$$1.from(), to = range$$1.to();\n            var start = Math.max(end, from.line);\n            end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n            for (var j = start; j < end; ++j)\n              { indentLine(this$1, j, how); }\n            var newRanges = this$1.doc.sel.ranges;\n            if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n              { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n          } else if (range$$1.head.line > end) {\n            indentLine(this$1, range$$1.head.line, how, true);\n            end = range$$1.head.line;\n            if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1); }\n          }\n        }\n      }),\n\n      // Fetch the parser token for a given character. Useful for hacks\n      // that want to inspect the mode state (say, for completion).\n      getTokenAt: function(pos, precise) {\n        return takeToken(this, pos, precise)\n      },\n\n      getLineTokens: function(line, precise) {\n        return takeToken(this, Pos(line), precise, true)\n      },\n\n      getTokenTypeAt: function(pos) {\n        pos = clipPos(this.doc, pos);\n        var styles = getLineStyles(this, getLine(this.doc, pos.line));\n        var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n        var type;\n        if (ch == 0) { type = styles[2]; }\n        else { for (;;) {\n          var mid = (before + after) >> 1;\n          if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n          else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n          else { type = styles[mid * 2 + 2]; break }\n        } }\n        var cut = type ? type.indexOf(\"overlay \") : -1;\n        return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n      },\n\n      getModeAt: function(pos) {\n        var mode = this.doc.mode;\n        if (!mode.innerMode) { return mode }\n        return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n      },\n\n      getHelper: function(pos, type) {\n        return this.getHelpers(pos, type)[0]\n      },\n\n      getHelpers: function(pos, type) {\n        var this$1 = this;\n\n        var found = [];\n        if (!helpers.hasOwnProperty(type)) { return found }\n        var help = helpers[type], mode = this.getModeAt(pos);\n        if (typeof mode[type] == \"string\") {\n          if (help[mode[type]]) { found.push(help[mode[type]]); }\n        } else if (mode[type]) {\n          for (var i = 0; i < mode[type].length; i++) {\n            var val = help[mode[type][i]];\n            if (val) { found.push(val); }\n          }\n        } else if (mode.helperType && help[mode.helperType]) {\n          found.push(help[mode.helperType]);\n        } else if (help[mode.name]) {\n          found.push(help[mode.name]);\n        }\n        for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n          var cur = help._global[i$1];\n          if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1)\n            { found.push(cur.val); }\n        }\n        return found\n      },\n\n      getStateAfter: function(line, precise) {\n        var doc = this.doc;\n        line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n        return getContextBefore(this, line + 1, precise).state\n      },\n\n      cursorCoords: function(start, mode) {\n        var pos, range$$1 = this.doc.sel.primary();\n        if (start == null) { pos = range$$1.head; }\n        else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n        else { pos = start ? range$$1.from() : range$$1.to(); }\n        return cursorCoords(this, pos, mode || \"page\")\n      },\n\n      charCoords: function(pos, mode) {\n        return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n      },\n\n      coordsChar: function(coords, mode) {\n        coords = fromCoordSystem(this, coords, mode || \"page\");\n        return coordsChar(this, coords.left, coords.top)\n      },\n\n      lineAtHeight: function(height, mode) {\n        height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n        return lineAtHeight(this.doc, height + this.display.viewOffset)\n      },\n      heightAtLine: function(line, mode, includeWidgets) {\n        var end = false, lineObj;\n        if (typeof line == \"number\") {\n          var last = this.doc.first + this.doc.size - 1;\n          if (line < this.doc.first) { line = this.doc.first; }\n          else if (line > last) { line = last; end = true; }\n          lineObj = getLine(this.doc, line);\n        } else {\n          lineObj = line;\n        }\n        return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n          (end ? this.doc.height - heightAtLine(lineObj) : 0)\n      },\n\n      defaultTextHeight: function() { return textHeight(this.display) },\n      defaultCharWidth: function() { return charWidth(this.display) },\n\n      getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n      addWidget: function(pos, node, scroll, vert, horiz) {\n        var display = this.display;\n        pos = cursorCoords(this, clipPos(this.doc, pos));\n        var top = pos.bottom, left = pos.left;\n        node.style.position = \"absolute\";\n        node.setAttribute(\"cm-ignore-events\", \"true\");\n        this.display.input.setUneditable(node);\n        display.sizer.appendChild(node);\n        if (vert == \"over\") {\n          top = pos.top;\n        } else if (vert == \"above\" || vert == \"near\") {\n          var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n          hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n          // Default to positioning above (if specified and possible); otherwise default to positioning below\n          if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n            { top = pos.top - node.offsetHeight; }\n          else if (pos.bottom + node.offsetHeight <= vspace)\n            { top = pos.bottom; }\n          if (left + node.offsetWidth > hspace)\n            { left = hspace - node.offsetWidth; }\n        }\n        node.style.top = top + \"px\";\n        node.style.left = node.style.right = \"\";\n        if (horiz == \"right\") {\n          left = display.sizer.clientWidth - node.offsetWidth;\n          node.style.right = \"0px\";\n        } else {\n          if (horiz == \"left\") { left = 0; }\n          else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n          node.style.left = left + \"px\";\n        }\n        if (scroll)\n          { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n      },\n\n      triggerOnKeyDown: methodOp(onKeyDown),\n      triggerOnKeyPress: methodOp(onKeyPress),\n      triggerOnKeyUp: onKeyUp,\n      triggerOnMouseDown: methodOp(onMouseDown),\n\n      execCommand: function(cmd) {\n        if (commands.hasOwnProperty(cmd))\n          { return commands[cmd].call(null, this) }\n      },\n\n      triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n      findPosH: function(from, amount, unit, visually) {\n        var this$1 = this;\n\n        var dir = 1;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          cur = findPosH(this$1.doc, cur, dir, unit, visually);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveH: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        this.extendSelectionsBy(function (range$$1) {\n          if (this$1.display.shift || this$1.doc.extend || range$$1.empty())\n            { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) }\n          else\n            { return dir < 0 ? range$$1.from() : range$$1.to() }\n        }, sel_move);\n      }),\n\n      deleteH: methodOp(function(dir, unit) {\n        var sel = this.doc.sel, doc = this.doc;\n        if (sel.somethingSelected())\n          { doc.replaceSelection(\"\", null, \"+delete\"); }\n        else\n          { deleteNearSelection(this, function (range$$1) {\n            var other = findPosH(doc, range$$1.head, dir, unit, false);\n            return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other}\n          }); }\n      }),\n\n      findPosV: function(from, amount, unit, goalColumn) {\n        var this$1 = this;\n\n        var dir = 1, x = goalColumn;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          var coords = cursorCoords(this$1, cur, \"div\");\n          if (x == null) { x = coords.left; }\n          else { coords.left = x; }\n          cur = findPosV(this$1, coords, dir, unit);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveV: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        var doc = this.doc, goals = [];\n        var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n        doc.extendSelectionsBy(function (range$$1) {\n          if (collapse)\n            { return dir < 0 ? range$$1.from() : range$$1.to() }\n          var headPos = cursorCoords(this$1, range$$1.head, \"div\");\n          if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn; }\n          goals.push(headPos.left);\n          var pos = findPosV(this$1, headPos, dir, unit);\n          if (unit == \"page\" && range$$1 == doc.sel.primary())\n            { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n          return pos\n        }, sel_move);\n        if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n          { doc.sel.ranges[i].goalColumn = goals[i]; } }\n      }),\n\n      // Find the word at the given position (as returned by coordsChar).\n      findWordAt: function(pos) {\n        var doc = this.doc, line = getLine(doc, pos.line).text;\n        var start = pos.ch, end = pos.ch;\n        if (line) {\n          var helper = this.getHelper(pos, \"wordChars\");\n          if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n          var startChar = line.charAt(start);\n          var check = isWordChar(startChar, helper)\n            ? function (ch) { return isWordChar(ch, helper); }\n            : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n            : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n          while (start > 0 && check(line.charAt(start - 1))) { --start; }\n          while (end < line.length && check(line.charAt(end))) { ++end; }\n        }\n        return new Range(Pos(pos.line, start), Pos(pos.line, end))\n      },\n\n      toggleOverwrite: function(value) {\n        if (value != null && value == this.state.overwrite) { return }\n        if (this.state.overwrite = !this.state.overwrite)\n          { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n        else\n          { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n        signal(this, \"overwriteToggle\", this, this.state.overwrite);\n      },\n      hasFocus: function() { return this.display.input.getField() == activeElt() },\n      isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n      scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n      getScrollInfo: function() {\n        var scroller = this.display.scroller;\n        return {left: scroller.scrollLeft, top: scroller.scrollTop,\n                height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n                width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n                clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n      },\n\n      scrollIntoView: methodOp(function(range$$1, margin) {\n        if (range$$1 == null) {\n          range$$1 = {from: this.doc.sel.primary().head, to: null};\n          if (margin == null) { margin = this.options.cursorScrollMargin; }\n        } else if (typeof range$$1 == \"number\") {\n          range$$1 = {from: Pos(range$$1, 0), to: null};\n        } else if (range$$1.from == null) {\n          range$$1 = {from: range$$1, to: null};\n        }\n        if (!range$$1.to) { range$$1.to = range$$1.from; }\n        range$$1.margin = margin || 0;\n\n        if (range$$1.from.line != null) {\n          scrollToRange(this, range$$1);\n        } else {\n          scrollToCoordsRange(this, range$$1.from, range$$1.to, range$$1.margin);\n        }\n      }),\n\n      setSize: methodOp(function(width, height) {\n        var this$1 = this;\n\n        var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n        if (width != null) { this.display.wrapper.style.width = interpret(width); }\n        if (height != null) { this.display.wrapper.style.height = interpret(height); }\n        if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n        var lineNo$$1 = this.display.viewFrom;\n        this.doc.iter(lineNo$$1, this.display.viewTo, function (line) {\n          if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n            { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, \"widget\"); break } } }\n          ++lineNo$$1;\n        });\n        this.curOp.forceUpdate = true;\n        signal(this, \"refresh\", this);\n      }),\n\n      operation: function(f){return runInOp(this, f)},\n      startOperation: function(){return startOperation(this)},\n      endOperation: function(){return endOperation(this)},\n\n      refresh: methodOp(function() {\n        var oldHeight = this.display.cachedTextHeight;\n        regChange(this);\n        this.curOp.forceUpdate = true;\n        clearCaches(this);\n        scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n        updateGutterSpace(this);\n        if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)\n          { estimateLineHeights(this); }\n        signal(this, \"refresh\", this);\n      }),\n\n      swapDoc: methodOp(function(doc) {\n        var old = this.doc;\n        old.cm = null;\n        attachDoc(this, doc);\n        clearCaches(this);\n        this.display.input.reset();\n        scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n        this.curOp.forceScroll = true;\n        signalLater(this, \"swapDoc\", this, old);\n        return old\n      }),\n\n      phrase: function(phraseText) {\n        var phrases = this.options.phrases;\n        return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n      },\n\n      getInputField: function(){return this.display.input.getField()},\n      getWrapperElement: function(){return this.display.wrapper},\n      getScrollerElement: function(){return this.display.scroller},\n      getGutterElement: function(){return this.display.gutters}\n    };\n    eventMixin(CodeMirror);\n\n    CodeMirror.registerHelper = function(type, name, value) {\n      if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n      helpers[type][name] = value;\n    };\n    CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n      CodeMirror.registerHelper(type, name, value);\n      helpers[type]._global.push({pred: predicate, val: value});\n    };\n  }\n\n  // Used for horizontal relative motion. Dir is -1 or 1 (left or\n  // right), unit can be \"char\", \"column\" (like char, but doesn't\n  // cross line boundaries), \"word\" (across next word), or \"group\" (to\n  // the start of next group of word or non-word-non-whitespace\n  // chars). The visually param controls whether, in right-to-left\n  // text, direction 1 means to move towards the next index in the\n  // string, or towards the character to the right of the current\n  // position. The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\n  function findPosH(doc, pos, dir, unit, visually) {\n    var oldPos = pos;\n    var origDir = dir;\n    var lineObj = getLine(doc, pos.line);\n    function findNextLine() {\n      var l = pos.line + dir;\n      if (l < doc.first || l >= doc.first + doc.size) { return false }\n      pos = new Pos(l, pos.ch, pos.sticky);\n      return lineObj = getLine(doc, l)\n    }\n    function moveOnce(boundToLine) {\n      var next;\n      if (visually) {\n        next = moveVisually(doc.cm, lineObj, pos, dir);\n      } else {\n        next = moveLogically(lineObj, pos, dir);\n      }\n      if (next == null) {\n        if (!boundToLine && findNextLine())\n          { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir); }\n        else\n          { return false }\n      } else {\n        pos = next;\n      }\n      return true\n    }\n\n    if (unit == \"char\") {\n      moveOnce();\n    } else if (unit == \"column\") {\n      moveOnce(true);\n    } else if (unit == \"word\" || unit == \"group\") {\n      var sawType = null, group = unit == \"group\";\n      var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n      for (var first = true;; first = false) {\n        if (dir < 0 && !moveOnce(!first)) { break }\n        var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n        var type = isWordChar(cur, helper) ? \"w\"\n          : group && cur == \"\\n\" ? \"n\"\n          : !group || /\\s/.test(cur) ? null\n          : \"p\";\n        if (group && !first && !type) { type = \"s\"; }\n        if (sawType && sawType != type) {\n          if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n          break\n        }\n\n        if (type) { sawType = type; }\n        if (dir > 0 && !moveOnce(!first)) { break }\n      }\n    }\n    var result = skipAtomic(doc, pos, oldPos, origDir, true);\n    if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n    return result\n  }\n\n  // For relative vertical movement. Dir may be -1 or 1. Unit can be\n  // \"page\" or \"line\". The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\n  function findPosV(cm, pos, dir, unit) {\n    var doc = cm.doc, x = pos.left, y;\n    if (unit == \"page\") {\n      var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n      var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n      y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n    } else if (unit == \"line\") {\n      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n    }\n    var target;\n    for (;;) {\n      target = coordsChar(cm, x, y);\n      if (!target.outside) { break }\n      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n      y += dir * 5;\n    }\n    return target\n  }\n\n  // CONTENTEDITABLE INPUT STYLE\n\n  var ContentEditableInput = function(cm) {\n    this.cm = cm;\n    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n    this.polling = new Delayed();\n    this.composing = null;\n    this.gracePeriod = false;\n    this.readDOMTimeout = null;\n  };\n\n  ContentEditableInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = input.cm;\n    var div = input.div = display.lineDiv;\n    disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n    on(div, \"paste\", function (e) {\n      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n      // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n      if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n    });\n\n    on(div, \"compositionstart\", function (e) {\n      this$1.composing = {data: e.data, done: false};\n    });\n    on(div, \"compositionupdate\", function (e) {\n      if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n    });\n    on(div, \"compositionend\", function (e) {\n      if (this$1.composing) {\n        if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n        this$1.composing.done = true;\n      }\n    });\n\n    on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n    on(div, \"input\", function () {\n      if (!this$1.composing) { this$1.readFromDOMSoon(); }\n    });\n\n    function onCopyCut(e) {\n      if (signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n        if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.operation(function () {\n            cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n            cm.replaceSelection(\"\", null, \"cut\");\n          });\n        }\n      }\n      if (e.clipboardData) {\n        e.clipboardData.clearData();\n        var content = lastCopied.text.join(\"\\n\");\n        // iOS exposes the clipboard API, but seems to discard content inserted into it\n        e.clipboardData.setData(\"Text\", content);\n        if (e.clipboardData.getData(\"Text\") == content) {\n          e.preventDefault();\n          return\n        }\n      }\n      // Old-fashioned briefly-focus-a-textarea hack\n      var kludge = hiddenTextarea(), te = kludge.firstChild;\n      cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n      te.value = lastCopied.text.join(\"\\n\");\n      var hadFocus = document.activeElement;\n      selectInput(te);\n      setTimeout(function () {\n        cm.display.lineSpace.removeChild(kludge);\n        hadFocus.focus();\n        if (hadFocus == div) { input.showPrimarySelection(); }\n      }, 50);\n    }\n    on(div, \"copy\", onCopyCut);\n    on(div, \"cut\", onCopyCut);\n  };\n\n  ContentEditableInput.prototype.prepareSelection = function () {\n    var result = prepareSelection(this.cm, false);\n    result.focus = this.cm.state.focused;\n    return result\n  };\n\n  ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n    if (!info || !this.cm.display.view.length) { return }\n    if (info.focus || takeFocus) { this.showPrimarySelection(); }\n    this.showMultipleSelections(info);\n  };\n\n  ContentEditableInput.prototype.getSelection = function () {\n    return this.cm.display.wrapper.ownerDocument.getSelection()\n  };\n\n  ContentEditableInput.prototype.showPrimarySelection = function () {\n    var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n    var from = prim.from(), to = prim.to();\n\n    if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n        cmp(minPos(curAnchor, curFocus), from) == 0 &&\n        cmp(maxPos(curAnchor, curFocus), to) == 0)\n      { return }\n\n    var view = cm.display.view;\n    var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n        {node: view[0].measure.map[2], offset: 0};\n    var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n    if (!end) {\n      var measure = view[view.length - 1].measure;\n      var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n      end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]};\n    }\n\n    if (!start || !end) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var old = sel.rangeCount && sel.getRangeAt(0), rng;\n    try { rng = range(start.node, start.offset, end.offset, end.node); }\n    catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n    if (rng) {\n      if (!gecko && cm.state.focused) {\n        sel.collapse(start.node, start.offset);\n        if (!rng.collapsed) {\n          sel.removeAllRanges();\n          sel.addRange(rng);\n        }\n      } else {\n        sel.removeAllRanges();\n        sel.addRange(rng);\n      }\n      if (old && sel.anchorNode == null) { sel.addRange(old); }\n      else if (gecko) { this.startGracePeriod(); }\n    }\n    this.rememberSelection();\n  };\n\n  ContentEditableInput.prototype.startGracePeriod = function () {\n      var this$1 = this;\n\n    clearTimeout(this.gracePeriod);\n    this.gracePeriod = setTimeout(function () {\n      this$1.gracePeriod = false;\n      if (this$1.selectionChanged())\n        { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n    }, 20);\n  };\n\n  ContentEditableInput.prototype.showMultipleSelections = function (info) {\n    removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n    removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n  };\n\n  ContentEditableInput.prototype.rememberSelection = function () {\n    var sel = this.getSelection();\n    this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n    this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n  };\n\n  ContentEditableInput.prototype.selectionInEditor = function () {\n    var sel = this.getSelection();\n    if (!sel.rangeCount) { return false }\n    var node = sel.getRangeAt(0).commonAncestorContainer;\n    return contains(this.div, node)\n  };\n\n  ContentEditableInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\") {\n      if (!this.selectionInEditor())\n        { this.showSelection(this.prepareSelection(), true); }\n      this.div.focus();\n    }\n  };\n  ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n  ContentEditableInput.prototype.getField = function () { return this.div };\n\n  ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n  ContentEditableInput.prototype.receivedFocus = function () {\n    var input = this;\n    if (this.selectionInEditor())\n      { this.pollSelection(); }\n    else\n      { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n    function poll() {\n      if (input.cm.state.focused) {\n        input.pollSelection();\n        input.polling.set(input.cm.options.pollInterval, poll);\n      }\n    }\n    this.polling.set(this.cm.options.pollInterval, poll);\n  };\n\n  ContentEditableInput.prototype.selectionChanged = function () {\n    var sel = this.getSelection();\n    return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n      sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n  };\n\n  ContentEditableInput.prototype.pollSelection = function () {\n    if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n    var sel = this.getSelection(), cm = this.cm;\n    // On Android Chrome (version 56, at least), backspacing into an\n    // uneditable block element will put the cursor in that element,\n    // and then, because it's not editable, hide the virtual keyboard.\n    // Because Android doesn't allow us to actually detect backspace\n    // presses in a sane way, this code checks for when that happens\n    // and simulates a backspace press in this case.\n    if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) {\n      this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n      this.blur();\n      this.focus();\n      return\n    }\n    if (this.composing) { return }\n    this.rememberSelection();\n    var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (anchor && head) { runInOp(cm, function () {\n      setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n      if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n    }); }\n  };\n\n  ContentEditableInput.prototype.pollContent = function () {\n    if (this.readDOMTimeout != null) {\n      clearTimeout(this.readDOMTimeout);\n      this.readDOMTimeout = null;\n    }\n\n    var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n    var from = sel.from(), to = sel.to();\n    if (from.ch == 0 && from.line > cm.firstLine())\n      { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n    if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n      { to = Pos(to.line + 1, 0); }\n    if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n    var fromIndex, fromLine, fromNode;\n    if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n      fromLine = lineNo(display.view[0].line);\n      fromNode = display.view[0].node;\n    } else {\n      fromLine = lineNo(display.view[fromIndex].line);\n      fromNode = display.view[fromIndex - 1].node.nextSibling;\n    }\n    var toIndex = findViewIndex(cm, to.line);\n    var toLine, toNode;\n    if (toIndex == display.view.length - 1) {\n      toLine = display.viewTo - 1;\n      toNode = display.lineDiv.lastChild;\n    } else {\n      toLine = lineNo(display.view[toIndex + 1].line) - 1;\n      toNode = display.view[toIndex + 1].node.previousSibling;\n    }\n\n    if (!fromNode) { return false }\n    var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n    var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n    while (newText.length > 1 && oldText.length > 1) {\n      if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n      else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n      else { break }\n    }\n\n    var cutFront = 0, cutEnd = 0;\n    var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n    while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n      { ++cutFront; }\n    var newBot = lst(newText), oldBot = lst(oldText);\n    var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n                             oldBot.length - (oldText.length == 1 ? cutFront : 0));\n    while (cutEnd < maxCutEnd &&\n           newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n      { ++cutEnd; }\n    // Try to move start of change to start of selection if ambiguous\n    if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n      while (cutFront && cutFront > from.ch &&\n             newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n        cutFront--;\n        cutEnd++;\n      }\n    }\n\n    newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n    newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n    var chFrom = Pos(fromLine, cutFront);\n    var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n    if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n      replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n      return true\n    }\n  };\n\n  ContentEditableInput.prototype.ensurePolled = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.reset = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.forceCompositionEnd = function () {\n    if (!this.composing) { return }\n    clearTimeout(this.readDOMTimeout);\n    this.composing = null;\n    this.updateFromDOM();\n    this.div.blur();\n    this.div.focus();\n  };\n  ContentEditableInput.prototype.readFromDOMSoon = function () {\n      var this$1 = this;\n\n    if (this.readDOMTimeout != null) { return }\n    this.readDOMTimeout = setTimeout(function () {\n      this$1.readDOMTimeout = null;\n      if (this$1.composing) {\n        if (this$1.composing.done) { this$1.composing = null; }\n        else { return }\n      }\n      this$1.updateFromDOM();\n    }, 80);\n  };\n\n  ContentEditableInput.prototype.updateFromDOM = function () {\n      var this$1 = this;\n\n    if (this.cm.isReadOnly() || !this.pollContent())\n      { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n  };\n\n  ContentEditableInput.prototype.setUneditable = function (node) {\n    node.contentEditable = \"false\";\n  };\n\n  ContentEditableInput.prototype.onKeyPress = function (e) {\n    if (e.charCode == 0 || this.composing) { return }\n    e.preventDefault();\n    if (!this.cm.isReadOnly())\n      { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n  };\n\n  ContentEditableInput.prototype.readOnlyChanged = function (val) {\n    this.div.contentEditable = String(val != \"nocursor\");\n  };\n\n  ContentEditableInput.prototype.onContextMenu = function () {};\n  ContentEditableInput.prototype.resetPosition = function () {};\n\n  ContentEditableInput.prototype.needsContentAttribute = true;\n\n  function posToDOM(cm, pos) {\n    var view = findViewForLine(cm, pos.line);\n    if (!view || view.hidden) { return null }\n    var line = getLine(cm.doc, pos.line);\n    var info = mapFromLineView(view, line, pos.line);\n\n    var order = getOrder(line, cm.doc.direction), side = \"left\";\n    if (order) {\n      var partPos = getBidiPartAt(order, pos.ch);\n      side = partPos % 2 ? \"right\" : \"left\";\n    }\n    var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n    result.offset = result.collapse == \"right\" ? result.end : result.start;\n    return result\n  }\n\n  function isInGutter(node) {\n    for (var scan = node; scan; scan = scan.parentNode)\n      { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n    return false\n  }\n\n  function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n  function domTextBetween(cm, from, to, fromLine, toLine) {\n    var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n    function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n    function close() {\n      if (closing) {\n        text += lineSep;\n        if (extraLinebreak) { text += lineSep; }\n        closing = extraLinebreak = false;\n      }\n    }\n    function addText(str) {\n      if (str) {\n        close();\n        text += str;\n      }\n    }\n    function walk(node) {\n      if (node.nodeType == 1) {\n        var cmText = node.getAttribute(\"cm-text\");\n        if (cmText) {\n          addText(cmText);\n          return\n        }\n        var markerID = node.getAttribute(\"cm-marker\"), range$$1;\n        if (markerID) {\n          var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n          if (found.length && (range$$1 = found[0].find(0)))\n            { addText(getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep)); }\n          return\n        }\n        if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n        var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n        if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n        if (isBlock) { close(); }\n        for (var i = 0; i < node.childNodes.length; i++)\n          { walk(node.childNodes[i]); }\n\n        if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n        if (isBlock) { closing = true; }\n      } else if (node.nodeType == 3) {\n        addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n      }\n    }\n    for (;;) {\n      walk(from);\n      if (from == to) { break }\n      from = from.nextSibling;\n      extraLinebreak = false;\n    }\n    return text\n  }\n\n  function domToPos(cm, node, offset) {\n    var lineNode;\n    if (node == cm.display.lineDiv) {\n      lineNode = cm.display.lineDiv.childNodes[offset];\n      if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n      node = null; offset = 0;\n    } else {\n      for (lineNode = node;; lineNode = lineNode.parentNode) {\n        if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n        if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n      }\n    }\n    for (var i = 0; i < cm.display.view.length; i++) {\n      var lineView = cm.display.view[i];\n      if (lineView.node == lineNode)\n        { return locateNodeInLineView(lineView, node, offset) }\n    }\n  }\n\n  function locateNodeInLineView(lineView, node, offset) {\n    var wrapper = lineView.text.firstChild, bad = false;\n    if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n    if (node == wrapper) {\n      bad = true;\n      node = wrapper.childNodes[offset];\n      offset = 0;\n      if (!node) {\n        var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n        return badPos(Pos(lineNo(line), line.text.length), bad)\n      }\n    }\n\n    var textNode = node.nodeType == 3 ? node : null, topNode = node;\n    if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n      textNode = node.firstChild;\n      if (offset) { offset = textNode.nodeValue.length; }\n    }\n    while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n    var measure = lineView.measure, maps = measure.maps;\n\n    function find(textNode, topNode, offset) {\n      for (var i = -1; i < (maps ? maps.length : 0); i++) {\n        var map$$1 = i < 0 ? measure.map : maps[i];\n        for (var j = 0; j < map$$1.length; j += 3) {\n          var curNode = map$$1[j + 2];\n          if (curNode == textNode || curNode == topNode) {\n            var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n            var ch = map$$1[j] + offset;\n            if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)]; }\n            return Pos(line, ch)\n          }\n        }\n      }\n    }\n    var found = find(textNode, topNode, offset);\n    if (found) { return badPos(found, bad) }\n\n    // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n    for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n      found = find(after, after.firstChild, 0);\n      if (found)\n        { return badPos(Pos(found.line, found.ch - dist), bad) }\n      else\n        { dist += after.textContent.length; }\n    }\n    for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n      found = find(before, before.firstChild, -1);\n      if (found)\n        { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n      else\n        { dist$1 += before.textContent.length; }\n    }\n  }\n\n  // TEXTAREA INPUT STYLE\n\n  var TextareaInput = function(cm) {\n    this.cm = cm;\n    // See input.poll and input.reset\n    this.prevInput = \"\";\n\n    // Flag that indicates whether we expect input to appear real soon\n    // now (after some event like 'keypress' or 'input') and are\n    // polling intensively.\n    this.pollingFast = false;\n    // Self-resetting timeout for the poller\n    this.polling = new Delayed();\n    // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n    this.hasSelection = false;\n    this.composing = null;\n  };\n\n  TextareaInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = this.cm;\n    this.createField(display);\n    var te = this.textarea;\n\n    display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n    // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n    if (ios) { te.style.width = \"0px\"; }\n\n    on(te, \"input\", function () {\n      if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n      input.poll();\n    });\n\n    on(te, \"paste\", function (e) {\n      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n      cm.state.pasteIncoming = +new Date;\n      input.fastPoll();\n    });\n\n    function prepareCopyCut(e) {\n      if (signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.setSelections(ranges.ranges, null, sel_dontScroll);\n        } else {\n          input.prevInput = \"\";\n          te.value = ranges.text.join(\"\\n\");\n          selectInput(te);\n        }\n      }\n      if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n    }\n    on(te, \"cut\", prepareCopyCut);\n    on(te, \"copy\", prepareCopyCut);\n\n    on(display.scroller, \"paste\", function (e) {\n      if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n      if (!te.dispatchEvent) {\n        cm.state.pasteIncoming = +new Date;\n        input.focus();\n        return\n      }\n\n      // Pass the `paste` event to the textarea so it's handled by its event listener.\n      var event = new Event(\"paste\");\n      event.clipboardData = e.clipboardData;\n      te.dispatchEvent(event);\n    });\n\n    // Prevent normal selection in the editor (we handle our own)\n    on(display.lineSpace, \"selectstart\", function (e) {\n      if (!eventInWidget(display, e)) { e_preventDefault(e); }\n    });\n\n    on(te, \"compositionstart\", function () {\n      var start = cm.getCursor(\"from\");\n      if (input.composing) { input.composing.range.clear(); }\n      input.composing = {\n        start: start,\n        range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n      };\n    });\n    on(te, \"compositionend\", function () {\n      if (input.composing) {\n        input.poll();\n        input.composing.range.clear();\n        input.composing = null;\n      }\n    });\n  };\n\n  TextareaInput.prototype.createField = function (_display) {\n    // Wraps and hides input textarea\n    this.wrapper = hiddenTextarea();\n    // The semihidden textarea that is focused when the editor is\n    // focused, and receives input.\n    this.textarea = this.wrapper.firstChild;\n  };\n\n  TextareaInput.prototype.prepareSelection = function () {\n    // Redraw the selection and/or cursor\n    var cm = this.cm, display = cm.display, doc = cm.doc;\n    var result = prepareSelection(cm);\n\n    // Move the hidden textarea near the cursor to prevent scrolling artifacts\n    if (cm.options.moveInputWithCursor) {\n      var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n      var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n      result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n                                          headPos.top + lineOff.top - wrapOff.top));\n      result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n                                           headPos.left + lineOff.left - wrapOff.left));\n    }\n\n    return result\n  };\n\n  TextareaInput.prototype.showSelection = function (drawn) {\n    var cm = this.cm, display = cm.display;\n    removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n    removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n    if (drawn.teTop != null) {\n      this.wrapper.style.top = drawn.teTop + \"px\";\n      this.wrapper.style.left = drawn.teLeft + \"px\";\n    }\n  };\n\n  // Reset the input to correspond to the selection (or to be empty,\n  // when not typing and nothing is selected)\n  TextareaInput.prototype.reset = function (typing) {\n    if (this.contextMenuPending || this.composing) { return }\n    var cm = this.cm;\n    if (cm.somethingSelected()) {\n      this.prevInput = \"\";\n      var content = cm.getSelection();\n      this.textarea.value = content;\n      if (cm.state.focused) { selectInput(this.textarea); }\n      if (ie && ie_version >= 9) { this.hasSelection = content; }\n    } else if (!typing) {\n      this.prevInput = this.textarea.value = \"\";\n      if (ie && ie_version >= 9) { this.hasSelection = null; }\n    }\n  };\n\n  TextareaInput.prototype.getField = function () { return this.textarea };\n\n  TextareaInput.prototype.supportsTouch = function () { return false };\n\n  TextareaInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n      try { this.textarea.focus(); }\n      catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n    }\n  };\n\n  TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n  TextareaInput.prototype.resetPosition = function () {\n    this.wrapper.style.top = this.wrapper.style.left = 0;\n  };\n\n  TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n  // Poll for input changes, using the normal rate of polling. This\n  // runs as long as the editor is focused.\n  TextareaInput.prototype.slowPoll = function () {\n      var this$1 = this;\n\n    if (this.pollingFast) { return }\n    this.polling.set(this.cm.options.pollInterval, function () {\n      this$1.poll();\n      if (this$1.cm.state.focused) { this$1.slowPoll(); }\n    });\n  };\n\n  // When an event has just come in that is likely to add or change\n  // something in the input textarea, we poll faster, to ensure that\n  // the change appears on the screen quickly.\n  TextareaInput.prototype.fastPoll = function () {\n    var missed = false, input = this;\n    input.pollingFast = true;\n    function p() {\n      var changed = input.poll();\n      if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n      else {input.pollingFast = false; input.slowPoll();}\n    }\n    input.polling.set(20, p);\n  };\n\n  // Read input from the textarea, and update the document to match.\n  // When something is selected, it is present in the textarea, and\n  // selected (unless it is huge, in which case a placeholder is\n  // used). When nothing is selected, the cursor sits after previously\n  // seen text (can be empty), which is stored in prevInput (we must\n  // not reset the textarea when typing, because that breaks IME).\n  TextareaInput.prototype.poll = function () {\n      var this$1 = this;\n\n    var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n    // Since this is called a *lot*, try to bail out as cheaply as\n    // possible when it is clear that nothing happened. hasSelection\n    // will be the case when there is a lot of text in the textarea,\n    // in which case reading its value would be expensive.\n    if (this.contextMenuPending || !cm.state.focused ||\n        (hasSelection(input) && !prevInput && !this.composing) ||\n        cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n      { return false }\n\n    var text = input.value;\n    // If nothing changed, bail.\n    if (text == prevInput && !cm.somethingSelected()) { return false }\n    // Work around nonsensical selection resetting in IE9/10, and\n    // inexplicable appearance of private area unicode characters on\n    // some key combos in Mac (#2689).\n    if (ie && ie_version >= 9 && this.hasSelection === text ||\n        mac && /[\\uf700-\\uf7ff]/.test(text)) {\n      cm.display.input.reset();\n      return false\n    }\n\n    if (cm.doc.sel == cm.display.selForContextMenu) {\n      var first = text.charCodeAt(0);\n      if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n      if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n    }\n    // Find the part of the input that is actually new\n    var same = 0, l = Math.min(prevInput.length, text.length);\n    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n    runInOp(cm, function () {\n      applyTextInput(cm, text.slice(same), prevInput.length - same,\n                     null, this$1.composing ? \"*compose\" : null);\n\n      // Don't leave long text in the textarea, since it makes further polling slow\n      if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n      else { this$1.prevInput = text; }\n\n      if (this$1.composing) {\n        this$1.composing.range.clear();\n        this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n                                           {className: \"CodeMirror-composing\"});\n      }\n    });\n    return true\n  };\n\n  TextareaInput.prototype.ensurePolled = function () {\n    if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n  };\n\n  TextareaInput.prototype.onKeyPress = function () {\n    if (ie && ie_version >= 9) { this.hasSelection = null; }\n    this.fastPoll();\n  };\n\n  TextareaInput.prototype.onContextMenu = function (e) {\n    var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n    if (input.contextMenuPending) { input.contextMenuPending(); }\n    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n    if (!pos || presto) { return } // Opera is difficult.\n\n    // Reset the current text selection only if the click is done outside of the selection\n    // and 'resetSelectionOnContextMenu' option is true.\n    var reset = cm.options.resetSelectionOnContextMenu;\n    if (reset && cm.doc.sel.contains(pos) == -1)\n      { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n    var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n    var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n    input.wrapper.style.cssText = \"position: static\";\n    te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n      top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n      z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n    var oldScrollY;\n    if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)\n    display.input.focus();\n    if (webkit) { window.scrollTo(null, oldScrollY); }\n    display.input.reset();\n    // Adds \"Select all\" to context menu in FF\n    if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n    input.contextMenuPending = rehide;\n    display.selForContextMenu = cm.doc.sel;\n    clearTimeout(display.detectingSelectAll);\n\n    // Select-all will be greyed out if there's nothing to select, so\n    // this adds a zero-width space so that we can later check whether\n    // it got selected.\n    function prepareSelectAllHack() {\n      if (te.selectionStart != null) {\n        var selected = cm.somethingSelected();\n        var extval = \"\\u200b\" + (selected ? te.value : \"\");\n        te.value = \"\\u21da\"; // Used to catch context-menu undo\n        te.value = extval;\n        input.prevInput = selected ? \"\" : \"\\u200b\";\n        te.selectionStart = 1; te.selectionEnd = extval.length;\n        // Re-set this, in case some other handler touched the\n        // selection in the meantime.\n        display.selForContextMenu = cm.doc.sel;\n      }\n    }\n    function rehide() {\n      if (input.contextMenuPending != rehide) { return }\n      input.contextMenuPending = false;\n      input.wrapper.style.cssText = oldWrapperCSS;\n      te.style.cssText = oldCSS;\n      if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n      // Try to detect the user choosing select-all\n      if (te.selectionStart != null) {\n        if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n        var i = 0, poll = function () {\n          if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n              te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n            operation(cm, selectAll)(cm);\n          } else if (i++ < 10) {\n            display.detectingSelectAll = setTimeout(poll, 500);\n          } else {\n            display.selForContextMenu = null;\n            display.input.reset();\n          }\n        };\n        display.detectingSelectAll = setTimeout(poll, 200);\n      }\n    }\n\n    if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n    if (captureRightClick) {\n      e_stop(e);\n      var mouseup = function () {\n        off(window, \"mouseup\", mouseup);\n        setTimeout(rehide, 20);\n      };\n      on(window, \"mouseup\", mouseup);\n    } else {\n      setTimeout(rehide, 50);\n    }\n  };\n\n  TextareaInput.prototype.readOnlyChanged = function (val) {\n    if (!val) { this.reset(); }\n    this.textarea.disabled = val == \"nocursor\";\n  };\n\n  TextareaInput.prototype.setUneditable = function () {};\n\n  TextareaInput.prototype.needsContentAttribute = false;\n\n  function fromTextArea(textarea, options) {\n    options = options ? copyObj(options) : {};\n    options.value = textarea.value;\n    if (!options.tabindex && textarea.tabIndex)\n      { options.tabindex = textarea.tabIndex; }\n    if (!options.placeholder && textarea.placeholder)\n      { options.placeholder = textarea.placeholder; }\n    // Set autofocus to true if this textarea is focused, or if it has\n    // autofocus and no other element is focused.\n    if (options.autofocus == null) {\n      var hasFocus = activeElt();\n      options.autofocus = hasFocus == textarea ||\n        textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n    }\n\n    function save() {textarea.value = cm.getValue();}\n\n    var realSubmit;\n    if (textarea.form) {\n      on(textarea.form, \"submit\", save);\n      // Deplorable hack to make the submit method do the right thing.\n      if (!options.leaveSubmitMethodAlone) {\n        var form = textarea.form;\n        realSubmit = form.submit;\n        try {\n          var wrappedSubmit = form.submit = function () {\n            save();\n            form.submit = realSubmit;\n            form.submit();\n            form.submit = wrappedSubmit;\n          };\n        } catch(e) {}\n      }\n    }\n\n    options.finishInit = function (cm) {\n      cm.save = save;\n      cm.getTextArea = function () { return textarea; };\n      cm.toTextArea = function () {\n        cm.toTextArea = isNaN; // Prevent this from being ran twice\n        save();\n        textarea.parentNode.removeChild(cm.getWrapperElement());\n        textarea.style.display = \"\";\n        if (textarea.form) {\n          off(textarea.form, \"submit\", save);\n          if (typeof textarea.form.submit == \"function\")\n            { textarea.form.submit = realSubmit; }\n        }\n      };\n    };\n\n    textarea.style.display = \"none\";\n    var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n      options);\n    return cm\n  }\n\n  function addLegacyProps(CodeMirror) {\n    CodeMirror.off = off;\n    CodeMirror.on = on;\n    CodeMirror.wheelEventPixels = wheelEventPixels;\n    CodeMirror.Doc = Doc;\n    CodeMirror.splitLines = splitLinesAuto;\n    CodeMirror.countColumn = countColumn;\n    CodeMirror.findColumn = findColumn;\n    CodeMirror.isWordChar = isWordCharBasic;\n    CodeMirror.Pass = Pass;\n    CodeMirror.signal = signal;\n    CodeMirror.Line = Line;\n    CodeMirror.changeEnd = changeEnd;\n    CodeMirror.scrollbarModel = scrollbarModel;\n    CodeMirror.Pos = Pos;\n    CodeMirror.cmpPos = cmp;\n    CodeMirror.modes = modes;\n    CodeMirror.mimeModes = mimeModes;\n    CodeMirror.resolveMode = resolveMode;\n    CodeMirror.getMode = getMode;\n    CodeMirror.modeExtensions = modeExtensions;\n    CodeMirror.extendMode = extendMode;\n    CodeMirror.copyState = copyState;\n    CodeMirror.startState = startState;\n    CodeMirror.innerMode = innerMode;\n    CodeMirror.commands = commands;\n    CodeMirror.keyMap = keyMap;\n    CodeMirror.keyName = keyName;\n    CodeMirror.isModifierKey = isModifierKey;\n    CodeMirror.lookupKey = lookupKey;\n    CodeMirror.normalizeKeyMap = normalizeKeyMap;\n    CodeMirror.StringStream = StringStream;\n    CodeMirror.SharedTextMarker = SharedTextMarker;\n    CodeMirror.TextMarker = TextMarker;\n    CodeMirror.LineWidget = LineWidget;\n    CodeMirror.e_preventDefault = e_preventDefault;\n    CodeMirror.e_stopPropagation = e_stopPropagation;\n    CodeMirror.e_stop = e_stop;\n    CodeMirror.addClass = addClass;\n    CodeMirror.contains = contains;\n    CodeMirror.rmClass = rmClass;\n    CodeMirror.keyNames = keyNames;\n  }\n\n  // EDITOR CONSTRUCTOR\n\n  defineOptions(CodeMirror);\n\n  addEditorMethods(CodeMirror);\n\n  // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n  var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n  for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n    { CodeMirror.prototype[prop] = (function(method) {\n      return function() {return method.apply(this.doc, arguments)}\n    })(Doc.prototype[prop]); } }\n\n  eventMixin(Doc);\n  CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  CodeMirror.defineMode = function(name/*, mode, …*/) {\n    if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n    defineMode.apply(this, arguments);\n  };\n\n  CodeMirror.defineMIME = defineMIME;\n\n  // Minimal default mode.\n  CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n  CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n  // EXTENSIONS\n\n  CodeMirror.defineExtension = function (name, func) {\n    CodeMirror.prototype[name] = func;\n  };\n  CodeMirror.defineDocExtension = function (name, func) {\n    Doc.prototype[name] = func;\n  };\n\n  CodeMirror.fromTextArea = fromTextArea;\n\n  addLegacyProps(CodeMirror);\n\n  CodeMirror.version = \"5.44.0\";\n\n  return CodeMirror;\n\n})));\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2017, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Provide the chat window.  The communication is handled by chat.js\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('chatroom',[ \"jquery\", \"form\", \"cm/lib/codemirror\", \"utils\", \"config\",\n\t \"modal\", \"links\", \"chat\",\n\t \"laconic\"\n       ],\n       function($, form, CodeMirror, utils, config, modal, links, chat) {\n\n(function($) {\n  var pluginName = 'chatroom';\n  var lasthangoutwarning = 0;\n\n  /** @lends $.fn.chatroom */\n  var methods = {\n    /**\n     * {Object} [options]\n     * {String} [options.docid] Document identifier\n     */\n\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = { messages: [] };\t\t/* private data */\n\tvar btn, send;\n\tvar close;\n\tvar text;\n\tvar hangout = \"gitty:\"+config.swish.hangout;\n\n\tdata.docid = options.docid;\n\telem.data(pluginName, data);\t/* store with element */\n\n\telem.addClass(\"chatroom each-minute swish-event-receiver\");\n\n\t\t\t\t\t/* build DOM */\n\n\tbtn  = $.el.div({class:\"btn-group dropup\"},\n\t\t send = $.el.button({ type:\"button\",\n\t\t\t\t      class:\"btn btn-primary btn-xs\"\n\t\t\t\t    }, \"Send\"),\n\t\t\t$.el.button({ type:\"button\",\n\t\t\t\t      class:\"btn btn-info btn-xs \"+\n\t\t\t\t            \"dropdown-toggle\",\n\t\t\t\t      'data-toggle':\"dropdown\",\n\t\t\t\t      'aria-haspopup':true,\n\t\t\t\t      'aria-expanded':false\n\t\t\t\t    },\n\t\t\t\t    $.el.span({class:\"caret\"})),\n\t\t   ul = $.el.ul({class:\"dropdown-menu pull-right\"}));\n\ttext = $.el.textarea({ placeholder:\"Type chat message here ...\"\n\t\t\t     }),\n\n\telem.append($.el.div(\n\t\t      {class:\"chat-conversation\"},\n\t\t      $.el.div({class:\"chat-outer-wrapper\"},\n\t\t\t $.el.div({class:\"chat-inner-wrapper\"},\n\t\t\t   $.el.div({class:\"chat-content-wrapper\"},\n\t\t\t      $.el.div({class:\"chat-stretch\"}),\n\t\t\t      $.el.div({class:\"chat-content\"}))))),\n\t    close = $.el.span({class:\"glyphicon menu glyphicon-remove-circle\"}),\n\t\t    $.el.div({class:\"chat-input\"},\n\t\t\t     $.el.table({class:\"chat-input\"},\n\t\t\t\t\t$.el.tr($.el.td({class:\"chat-text\"}, text),\n\t\t\t\t\t\t$.el.td({class:\"chat-send\"}, btn)))));\n\n\t$(send).on(\"click\", function() {\n\t  elem.chatroom('send');\n\t});\n\n\t\t\t\t\t/* event handling */\n\tform.widgets.populateMenu($(btn), elem, {\n\t  \"Include my query\": function() {\n\t    var query = $(\".prolog-query-editor\").queryEditor('getQuery');\n\t    if ( query.trim() != \"\" ) {\n\t      this.chatroom('send',\n\t\t\t    {payload: [{type:\"query\", query:query}]});\n\t    } else {\n\t      modal.alert(\"Your query editor is empty\");\n\t    }\n\t  }\n\t});\n\tif ( options.docid != hangout ) {\n\t  form.widgets.populateMenu($(btn), elem, {\n\t    \"Broadcast to hangout\": function() {\n\t      this.chatroom('send',\n\t\t\t    { broadcast: \"gitty:\"+config.swish.hangout\n\t\t\t    });\n\t    }\n\t  });\n\t}\n\t$(close).on(\"click\", function() {\n\t  elem.tile('close');\n\t});\n\tif ( options.oneline ) {\n\t  $(text).keypress(function(ev) {\n\t    if ( ev.which == 13 ) {\n\t      elem.chatroom('send');\n\t      ev.preventDefault();\n\t      return false;\n\t    }\n\t  });\n\t} else {\n\t  $(text).on('keyup', function() {\n\t    var that = $(this);\n\t    var h;\n\n\t    if ( that.scrollTop() != 0 && (h=that.height()) < 500 ) {\n\t      h += parseFloat(that.css('line-height'));\n\n\t      that.animate({ height: h }, 200,\n\t\t\t   function() { elem.chatroom('scrollToBottom'); });\n\t    }\n\t  });\n\t}\n\tif ( options.docid == hangout ) {\n\t  $(text).focus(function() {\n\t    if ( $(text).val() == \"\" ) {\n\t      var now = new Date().getTime();\n\n\t      if ( now-lasthangoutwarning > 300000 ) {\n\t\tlasthangoutwarning = now;\n\n\t\tmodal.help({file:\"hangout.html\", notagain:\"hangout\"});\n\t      }\n\t    }\n\t  });\n\t}\n\telem.on(\"click\", \".chat-message button\", function(ev) {\n\t  var button = $(ev.target).closest(\"button\");\n\t  var val;\n\n\t  if ( (val = button.data(\"commit\")) ) {\n\t    elem.closest(\".swish\").swish('playFile', val);\n\t  } else if ( (val = button.data(\"diff\")) ) {\n\t    elem.chatroom('diff', val);\n\t  }\n\n\t  ev.preventDefault();\n\t  return false;\n\t});\n\telem.on(\"click\", \".chat-content a\", links.followLink);\n\telem.on(\"pane.resize\", function() {\n\t  elem.chatroom('scrollToBottom', true);\n\t});\n\telem.on(\"minute\", function() {\n\t  elem.chatroom('update_time');\n\t});\n\telem.on(\"activate-tab\", function() {\n\t  elem.chatroom('read_until');\n\t});\n\n\t$(text).height(parseFloat($(text).css('line-height'))+5);\n\n\telem.chatroom('load_from_server');\n      });\n    },\n\n    close: function() {\n      return this.tile('close');\n    },\n\n    /**\n     * Send a chat message.\n     * @param {Object} [options]\n     * @param {Array}  [options.payload] Payloads (queries, etc)\n     * @param {String} [options.docid] Addressed document of not self\n     * @param {String} [options.broadcast] Also broadcast the message\n     * to the indicated document id.\n     * @param {Bool}   [options.clear] if `false`, do not clear the\n     * message window after sending.\n     */\n    send: function(options) {\n      options = options||{};\n      var data = this.data(pluginName);\n      var msg = {type:\"chat-message\"};\n      var ta = this.find(\"textarea\");\n      msg.text = ta.val().trim();\n      var payload = options.payload||[];\n      var has_payload = false;\n      var selection = this.chatroom('storage').storage('getSelection');\n      var hangout = \"gitty:\" + config.swish.hangout;\n\n      if ( selection )\n\tpayload.push({type:\"selection\", selection:selection});\n\n      for(var i=0; i<payload.length; i++) {\n\tif ( payload[i].type != 'about' ) {\n\t  has_payload = true;\n\t  break;\n\t}\n      }\n\t\t\t\t\t/* send first message to hangout */\n      if ( !options.broadcast &&\n\t   data.docid != hangout &&\n\t   data.messages.length == 0 )\n\toptions.broadcast = hangout;\n\n      if ( msg.text != \"\" || has_payload ) {\n\tmsg.uuid    = utils.generateUUID();\n\tmsg.payload = payload;\n\tmsg.docid   = options.docid||data.docid;\n\tif ( options.class )\n\t  msg.class = options.class;\n\n\tif ( options.clear == true ) {\n\t  this.chatroom('clear');\n\t} else {\n\t  data.clear = msg.uuid;\n\t}\n\n\t$(\"#chat\").chat('send', msg);\n\tif ( options.broadcast ) {\n\t  msg.payload.unshift({type:\"about\", docid:data.docid});\n\t  msg.docid = options.broadcast;\n\t  $(\"#chat\").chat('send', msg);\n\t}\n      } else if ( !options.payload ) {\n\tmodal.alert(\"No message to send\");\n      }\n    },\n\n    /**\n     * Get the related storage object\n     */\n    storage: function() {\n      return this.closest(\".tab-pane\").find(\".storage\");\n    },\n\n    /**\n     * @param {Object} msg is the chat message object\n     * @return {Bool} `true` if the msg is sent by the current user.\n     */\n    is_self: function(msg) {\n      var muser = msg.user||{};\n      var suser = config.swish.user||{};\n\n      var self = $(\"#chat\").chat('self');\n\n      return ((muser.id && muser.id == self.id) ||\n\t      (muser.avatar && muser.avatar == self.avatar) ||\n\t      (muser.profile_id && muser.profile_id == suser.profile_id));\n    },\n\n    /**\n     * Indicate we have read all content\n     */\n    read_until: function(msg) {\n      var data;\n\n      if ( msg == undefined &&\n\t   (data = this.data(pluginName)) &&\n\t   data.messages.length > 0 )\n\tmsg = data.messages[data.messages.length-1];\n\n      if ( msg ) {\n\t$(\"#chat\").chat('read_until', msg.docid, msg.time);\n\t$(\".chat-bell\").chatbell('read_until', msg.docid, msg.time);\n      }\n    },\n\n    /**\n     * Render a chat message.\n     * @param {Object} msg\n     * @param {String} msg.html is the HTML content of the object\n     * @param {String} msg.text is the ext of the object\n     * @param {Object} msg.user Sender description\n     */\n    render: function(msg) {\n      var muser = msg.user||{};\n      var suser = config.swish.user||{};\n\n      if ( msg.is_self === undefined )\n\tmsg.is_self = this.chatroom('is_self', msg);\n\n      elem = $($.el.div({class:\"chat-message\"+(msg.is_self ? \" self\" : \"\"),\n\t\t\t 'data-userid':muser.wsid}));\n      if ( !msg.is_self && muser.avatar ) {\n\telem.append(chat.avatar(muser));\n      }\n      elem.append($.el.span({class:\"chat-sender\"},\n\t\t\t    msg.is_self ? \"Me\" : muser.name));\n\n      if ( msg.time ) {\n\tvar title = new Date(msg.time*1000).toLocaleString();\n\telem.append($.el.span({class:\"chat-time\", title:title},\n\t\t\t      \"(\", utils.ago(msg.time), \") \"));\n\telem.data('time', msg.time);\n      }\n\n      if ( msg.payload ) {\n\tfor(var i=0; i<msg.payload.length; i++) {\n\t  var pl = msg.payload[i];\n\t  if ( payload_handlers[pl.type] )\n\t    payload_handlers[pl.type].call(elem, pl);\n\t  else\n\t    console.log(pl);\n\t}\n      }\n\n      var html;\n      if ( msg.html ) {\n\thtml = msg.html;\n      } else if ( msg.text ) {\n\thtml = $($.el.span(msg.text)).html();\n\thtml = markdown(html);\n      }\n\n      if ( html ) {\n\tvar span = $.el.span({class:\"chat-message html\"});\n\t$(span).html(html);\n\telem.append(span);\n      }\n\n      return elem;\n    },\n\n    /**\n     * Add a message to the chatroom.\n     * @param {Object} msg is the message to display\n     * @param {Bool} [seen] if `true`, claim that the message is read.\n     * When omitted it is `true` if the chatroom is visible.\n     */\n    add: function(msg, seen) {\n      var data = this.data(pluginName);\n\n      if ( msg.docid == data.docid )\n      { var elem;\n\n\tif ( seen == undefined )\n\t  seen = this.is(\":visible\");\n\n\tif ( msg.is_self == undefined )\n\t  msg.is_self = this.chatroom('is_self', msg);\n\tdata.messages.push(msg);\n\n\telem = this.chatroom('render', msg);\n\tthis.find(\".chat-content\").append(elem);\n\tthis.chatroom('scrollToBottom');\n\n\tif ( seen )\n\t  this.chatroom('read_until', msg);\n      }\n\n      if ( msg.uuid && msg.uuid == data.clear ) {\n\tthis.chatroom('clear');\n      }\n\n      return this;\n    },\n\n    clear: function() {\n      var ta = this.find(\"textarea\");\n\n      ta.val(\"\");\n      ta.height(parseFloat(ta.css('line-height')+5));\n    },\n\n    load_from_server: function(ifempty) {\n      var data = this.data(pluginName);\n      var elem = $(this);\n\n      $.get(config.http.locations.chat_messages,\n\t    { docid: data.docid\n\t    },\n\t    function(messages) {\n\t      if ( messages.length == 0 ) {\n\t\tif ( ifempty )\n\t\t  elem.chatroom('close');\n\t\telse if ( data.docid != \"gitty:\"+config.swish.hangout )\n\t\t  modal.help({file:\"newchat.html\", notagain:\"newchat\"});\n\t      } else {\n\t\tfor(var i=0; i<messages.length; i++) {\n\t\t  elem.chatroom('add', messages[i], i == messages.length-1 );\n\t\t}\n\t      }\n\t    }).fail(function(jqXHR, textStatus, errorThrown) {\n\t      modal.ajaxError(jqXHR);\n\t    });\n\n      return this;\n    },\n\n    update_time: function() {\n      return this.find(\".chat-message\").each(function() {\n\tvar elem = $(this);\n\tvar time;\n\tif ( (time=elem.data('time')) )\n\t  elem.find(\".chat-time\").text(\"(\"+utils.ago(time)+\") \");\n      });\n    },\n\n    /**\n     * Show diff between versions\n     * @param {Object} options\n     * @param {String} options.from Base commit\n     * @param {String} options.to Target commit\n     * @param {String} options.name Name of the file\n     */\n\n    diff: function(options) {\n      function error(jqXHR) {\n\tmodal.ajaxError(jqXHR);\n      }\n\n      $.ajax({\n        url: config.http.locations.web_storage + options.from,\n\tdata: {format: \"raw\"},\n\tsuccess: function(from) {\n\t  $.ajax({\n\t    url: config.http.locations.web_storage + options.to,\n\t    data: {format: \"raw\"},\n\t    success: function(to) {\n\n\t      function diffBody() {\n\t\tvar diff = $.el.div();\n\n\t\tthis.append(diff);\n\t\t$(diff).diff({\n\t\t  base: from,\n\t\t  head: to,\n\t\t  baseName: options.name + \" (before)\",\n\t\t  headName: options.name + \" (after)\"\n\t\t});\n\t\tthis.parents(\"div.modal-dialog\").addClass(\"modal-wide\");\n\t      }\n\n\t      form.showDialog({\n\t        title: \"Update differences\",\n\t\tbody:  diffBody\n\t      });\n\t    },\n\t    error: error\n\t  })\n\t},\n\terror: error\n      });\n    },\n\n\n    /**\n     * Associate with a new document\n     */\n    docid: function(docid, ifempty) {\n      var data = this.data(pluginName);\n\n      if ( data.docid != docid ) {\n\tthis.find(\".chat-content\").html(\"\");\n\tdata.docid = docid;\n\tthis.chatroom('load_from_server', ifempty);\n      }\n    },\n\n    /**\n     * @param {String} docid docid of rooms we are looking for\n     * @returns {jQuery} set of chatrooms pointing at document id\n     */\n    rooms: function(docid) {\n      var rooms = [];\n\n      this.each(function() {\n\tvar room = $(this);\n\tvar data = room.data(pluginName);\n\tif ( data.docid == docid )\n\t  rooms.push(this);\n      });\n\n      return $(rooms);\n    },\n\n    scrollToBottom: function(onlydown) {\n      this.each(function() {\n\tvar elem = $(this);\n\tscroll  =   elem.find(\"div.chat-inner-wrapper\");\n\twrap    = scroll.find(\"div.chat-content-wrapper\");\n\tcontent =   wrap.find(\"div.chat-content\");\n\tvar height = content[0].scrollHeight;\n\tvar room   = wrap.height() - height - 8;\n\n\tif ( room > 0 || onlydown !== true ) {\n\t  wrap.find(\"div.chat-stretch\").height(room > 0 ? room : 0);\n\t  scroll.scrollTop(height);\n\t}\n      });\n\n      return this;\n    }\n  }; // methods\n\n\n\t\t /*******************************\n\t\t *\t PAYLOAD HANDLERS\t*\n\t\t *******************************/\n\n  var payload_handlers = {\n    selection: function(selection) {\n      var label   = $().storage('getSelectionLabel', selection.selection);\n      var btn = $($.el.button({ class:\"btn btn-xs btn-primary\"\n\t\t\t      },\n\t\t\t      label + \" \",\n\t\t\t      form.widgets.glyphIcon(\"eye-open\")));\n      btn.on(\"click\", function(ev) {\n\t$(ev.target).chatroom('storage')\n\t            .storage('restoreSelection', selection.selection);\n      });\n\n      this.append(\" \", btn, \" \");\n    },\n\n    query: function(query) {\n      var btn = $($.el.button({ class:\"btn btn-xs btn-primary\"\n\t\t\t      },\n\t\t\t      \"Query \",\n\t\t\t      form.widgets.glyphIcon(\"download\")));\n      btn.on(\"click\", function() {\n\tvar qe = $(\".prolog-query-editor\");\n\n\tqe.queryEditor('setQuery', query.query);\n\tutils.flash(qe.find(\".CodeMirror\"));\n      });\n      sourceToolTip(btn, query.query);\n\n      this.append(\" \", btn, \" \");\n    },\n\n    update: function(update) {\n      var old, dif, nwe;\n\n      this.append(\" \", $.el.span(\n        {class:\"update\"},\n\told = btn(\"play\",    \"btn-primary\", \"Open old version\"),\n\tdif = btn(\"zoom-in\", \"btn-info\",    \"View changes\"),\n        nwe = btn(\"play\",    \"btn-primary\", \"Open new version\")), \" \");\n\n      $(old).data('commit', update.previous);\n      $(dif).data('diff',   {from:update.previous, to:update.commit,\n\t\t\t     name:update.name});\n      $(nwe).data('commit', update.commit);\n    },\n\n    about: function(about) {\n      var file = about.docid.replace(\"gitty:\", \"\");\n\n      this.append(\" \",\n\t$.el.a({\n\t  href:config.http.locations.web_storage+file,\n\t  class:\"store btn btn-primary btn-xs\"\n\t}, file), \" \");\n    }\n  };\n\n\n  // private functions\n\n  function sourceToolTip(elem, src) {\n    var pre = $.el.pre({class:\"cm-s-prolog\"});\n\n    CodeMirror.runMode(src, \"prolog\", pre);\n\n    elem.attr(\"title\", $.el.div(pre).innerHTML);\n    elem.data(\"html\", true);\n    elem.data(\"placement\", \"bottom\");\n    elem.data(\"trigger\", \"hover\");\n    elem.tooltip();\n  }\n\n  function btn(glyph, type, title) {\n    return form.widgets.glyphIconButton(glyph,\n\t\t\t\t\t{class:\"btn-xs \"+type, title:title});\n  }\n\n  /**\n   * Perform very simple regex based markdown processing\n   */\n  function markdown(text) {\n    var replace = [\n      { regex: /[a-z][a-zA-Z0-9_]*\\/[0-9]/g,\n        func:  function(match) {\n\t  return '<a class=\"builtin\" href=\"/pldoc/man?predicate='+match+'\">'\n\t         +match+'</a>';\n\t}\n      },\n      { regex: /[a-zA-Z0-9_-]+\\.(pl|swinb)\\b/g,\n        func:  function(match) {\n\t  return '<a class=\"builtin\" href=\"'+\n\t\t config.http.locations.web_storage+\n\t         match+'\">'\n\t         +match+'</a>';\n\t}\n      },\n      { regex: /`(.)`/g,\n        func:  function(match, content) {\n\t  return '<code>'+content+'</code>';\n\t}\n      },\n      { regex: /`([\\w\\[\\{\\(][^`]*[\\w\\]\\}\\)])`/g,\n        func:  function(match, content) {\n\t  return '<code>'+content+'</code>';\n\t}\n      },\n      { delim: \"\\\\*\", a: \"\\\\*\\\\b\", z: \"\\\\b\\\\*\", tag: \"b\" },\n      { delim: \"__\",  a: \"\\\\b__\",  z: \"__\\\\b\",  tag: \"b\" },\n      { delim: \"_\",   a: \"\\\\b_\",   z: \"_\\\\b\",   tag: \"i\" }\n    ];\n\n    function wrap(tag) {\n      return function(match, content) {\n\treturn \"<\"+tag+\">\"+content+\"</\"+tag+\">\";\n      };\n    }\n\n    for(var i=0; i<replace.length; i++) {\n      var r = replace[i];\n\n      if ( r.regex ) {\n\ttext = text.replace(r.regex, r.func);\n      } else if ( r.delim ) {\n\ttext = text.replace(RegExp(r.a+\"([^\"+r.delim+\"]+)\"+r.z,\"g\"),\n\t\t\t    wrap(r.tag));\n      }\n    }\n\n    return text;\n  }\n\n  /**\n   * <Class description>\n   *\n   * @class chatroom\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.chatroom = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2017, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * <Description of the File>\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('chatbell',[ \"jquery\", \"form\", \"modal\", \"config\", \"preferences\",\n\t \"laconic\", \"chatroom\"\n       ],\n       function($, form, modal, config, preferences) {\n\n(function($) {\n  var pluginName = 'chatbell';\n\n  /** @lends $.fn.chatbell */\n  var methods = {\n    /**\n     * @param {Object} [options]\n     * @param {String} [options.docid] Associate with a document id.\n     * If default, try the `data-document` attribute.\n     * @param {String} [options.empty_title] Title attribute if there\n     * are no new messages\n     */\n    _init: function(options) {\n      options = options||{};\n\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = $.extend({}, options); /* private data */\n\n\tdata.docid = options.docid||elem.data('document');\n\telem.data(pluginName, data);\t/* store with element */\n\n\telem.addClass(\"chat-bell\");\n\telem.attr('title', \"Messages available\");\n\telem.append(form.widgets.glyphIcon(\"bell\"),\n\t\t    $.el.span({class:\"chat-bell-count\"}, \"-\"));\n\telem.chatbell('update');\n      });\n    },\n\n    /**\n     * Set the chat counter and optionally associate the chat bell\n     * with a document (`docid`)\n     * @param {Object} chats\n     * @param {Number} chats.count number of chat messages to report\n     * @param {String} [chats.docid] associate bell with document\n     */\n    chats: function(chats) {\n      var data = this.data(pluginName);\n      var span = this.find(\".chat-bell-count\");\n      var elem = this;\n\n      function empty() {\n\tspan.text(\"-\");\n\telem.removeClass('chat-available chat-alert');\n\telem.attr('title', data.empty_title||\"No messages available\");\n      }\n\n      if ( chats == undefined ) {\n\tdelete data.docid;\n\tdelete data.count;\n\tdelete data.total;\n\n\tempty();\n      } else {\n\tvar count = chats.count == undefined ? chats.total : chats.count;\n\n\tif ( chats.docid ) data.docid = chats.docid;\n\tif ( chats.count ) data.count = chats.count;\n\tif ( chats.total ) data.total = chats.total;\n\n\tif ( chats.total > 0 ) {\n\t  this.addClass('chat-available');\n\t  if ( count > 0 ) {\n\t    span.text(count);\n\t    this.addClass('chat-alert');\n\t    this.attr('title', count + \" new messages\");\n\t  } else {\n\t    span.text(chats.total);\n\t    this.removeClass('chat-alert');\n\t    this.attr('title', chats.total + \" old messages\");\n\t  }\n\t} else {\n\t  empty();\n\t}\n      }\n\n      return this;\n    },\n\n    'chats++': function(docid) {\n      var data = this.data(pluginName);\n\n      if ( data.total != undefined ) data.total++; else data.total = 1;\n      if ( data.count != undefined ) data.count++;\n      if (      docid != undefined ) data.docid = docid;\n\n      if ( data.total ) {\n\tthis.chatbell('chats', {\n\t  total: data.total,\n\t  count: data.count\n\t});\n      }\n\n      return this;\n    },\n\n    /**\n     * Update the chat bell.\n     * @param {Object} [chats]\n     * @param {Number} [chats.total]\n     * @param {Number} [chats.count]\n     * @param {Number} [chats.docid]\n     */\n    update: function(chats) {\n      var data = this.data(pluginName);\n\n      chats = chats||{};\n\n      if ( chats.total != undefined &&\n\t   chats.count != undefined ) {\n\tthis.chatbell('chats', chats);\n      } else {\n\tvar docid = chats.docid||data.docid;\n\tvar after = preferences.getDocVal(docid, 'chatBar', 0);\n\n\t\t\t/* fetch if we want unread or we don't know total */\n\tif ( docid && (after || chats.total == undefined) ) {\n\t  var elem = $(this);\n\n\t  $.get(config.http.locations.chat_status,\n\t\t{ docid: docid,\n\t\t  after: after\n\t\t},\n\t\tfunction(chats) {\n\t\t  elem.chatbell('chats', chats);\n\t\t});\n\t} else if ( chats.total != undefined ) {\n\t  this.chatbell('chats', chats);\n\t}\n      }\n\n      return this;\n    },\n\n    /**\n     * Sent by the chatroom if the user saw the last message.\n     */\n    read_until: function(docid, time) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName);\n\n\tif ( data.docid == docid && data.total ) {\n\t  elem.chatbell('chats', {total: data.total, count:0});\n\t}\n      });\n    },\n\n    /**\n     * Handle an incomming chat message.  If the message is not from\n     * myself, display as a short notification.\n     */\n    'chat-message': function(msg) {\n      if ( msg.is_self == undefined )\n\tmsg.is_self = this.chatroom('is_self', msg);\n\n      this.chatbell('chats++');\n\n      if ( !msg.is_self ) {\n\tvar elem = this.chatroom('render', msg);\n\tvar options = {\n\t  dom: elem\n\t};\n\n\tmodal.notify(this, options);\n      }\n    }\n  }; // methods\n\n  /**\n   * <Class description>\n   *\n   * @class chatbell\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.chatbell = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * List available sources.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('sourcelist',[ \"jquery\", \"config\", \"form\", \"modal\", \"laconic\" ],\n       function($, config, form, modal) {\n\n(function($) {\n  var pluginName = 'sourcelist';\n\n  var current_query = {q: config.swish.default_query || \"\"};\n  var current_profile;\n  var query_cache = [];\n  var pending = [];\n  var qid = 0;\n\n  /** @lends $.fn.sourcelist */\n  var methods = {\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\t\t\t/* private data */\n\n\telem.data(pluginName, data);\t/* store with element */\n\t\t\t\t\t/* populate search page */\n\telem[pluginName]('fill', undefined, current_query);\n\telem[pluginName]('check_cache');\n\telem[pluginName]('update', current_query);\n\telem.on(\"login\", function() {\n\t  if ( elem[pluginName]('check_cache') )\n\t    elem[pluginName]('update', current_query);\n\t});\n      });\n    },\n\n    check_cache: function() {\n      var profile = $(\"#login\").login('get_profile',\n\t\t\t\t      [ \"display_name\", \"avatar\"\n\t\t\t\t      ]);\n      if ( !(current_profile &&\n\t     current_profile.display_name == profile.display_name &&\n\t     current_profile.avatar == profile.avatar) ) {\n\tquery_cache = [];\n\tcurrent_profile = profile;\n\treturn true;\n      } else {\n\tif ( !current_profile )\n\t  current_profile = profile;\n\treturn false;\n      }\n    },\n\n    /**\n     * Post an update query and process the result\n     */\n    update: function(query) {\n      var elem = this;\n      var reply;\n\n      this[pluginName]('check_cache');\n\n      if ( (reply = from_cache(query_cache, query)) ) {\n\t$.ajax({\n\t  url: config.http.locations.source_modified,\n\t  dataType: \"json\",\n\t  success: function(json) {\n\t    if ( json.modified < reply.modified+10 ) {\n\t      elem.sourcelist('fill', reply, query);\n\t    } else {\n\t      query_cache = [];\n\t      elem[pluginName]('update', query);\n\t    }\n\t  },\n\t  error: function(jqXHDR) {\n\t    modal.ajaxError(jqXHDR);\n\t  }\n\t});\n      } else {\n\tquery = query||{};\n\n\t$.extend(query, current_profile);\n\tquery.q = query.q||\"\";\n\tquery.offset = query.offset||0;\n\tquery.limit  = query.limit||10;\n\tquery.qid    = qid++;\n\n\tpending.push(query);\n\telem[pluginName]('busy', true);\n\n\t$.ajax({\n\t  url: config.http.locations.source_list,\n\t  data: query,\n\t  dataType: \"json\",\n\t  success: function(reply) {\n\t    reply.query = query;\n\t    pending.pop();\t\t/* should match qid */\n\t    if ( pending.length == 0 )\n\t      elem[pluginName]('busy', false);\n\t    add_to_cache(query_cache, reply);\n\t    elem.sourcelist('fill', reply, query);\n\t  },\n\t  error: function(jqXHDR) {\n\t    pending.pop();\n\t    modal.ajaxError(jqXHDR);\n\t  }\n\t});\n      }\n    },\n\n    /**\n     * Go to a page\n     */\n\n    page: function(move) {\n      var data = this.data(pluginName);\n\n      if ( data && data.page ) {\n\tvar q = $.extend({}, data.page.query);\n\n\tif ( q.offset == undefined )\n\t  q.offset = 0;\n\n\tfunction roundUp(v, n) {\n\t  return Math.floor((v+(n-1))/n) * n;\n\t}\n\n\tswitch(move) {\n\t  case \"first\": q.offset  = 0; break;\n\t  case \"prev\":  q.offset -= data.page.size; break;\n\t  case \"next\":  q.offset += data.page.size; break;\n\t  case \"last\":  q.offset  = roundUp(data.page.total, data.page.size) -\n\t\t\t\t    data.page.size; break;\n\t  default: return;\n\t}\n\n\tq.offset = Math.max(0, q.offset);\n\tthis[pluginName]('update', q);\n      }\n    },\n\n    /**\n     * Fill the result table\n     */\n    fill: function(results, query) {\n      var data = this.data(pluginName);\n      var body;\n\n      if ( !data )\t\t\t\t/* has gone */\n\treturn this;\n\n      if ( results ) {\n\tcurrent_query = query;\n\tdata.page = { query:  query,\n\t\t      offset: query.offset,\n\t\t      size:   query.limit,\n\t\t      total:  results.total\n\t\t    };\n      }\n\n      function h(title) {\n\treturn $.el.th(title);\n      }\n\n      function humanize(stamp) {\n\tvar d = new Date(stamp*1000);\n\tvar s = d.toISOString();\n\n\treturn s.slice(0, 10) + \" \" + s.slice(11,19);\n      }\n\n      body = this.find(\"tbody\");\n      if ( body.length == 0 ) {\n\tthis.append($.el.div({class:\"search-form input-group\"}),\n\t\t    $.el.div({class:\"search-results\"},\n\t\t      table =\n\t\t      $.el.table({class:\"table table-striped table-hover \"+\n\t\t\t\t\t\"table-condensed\"},\n\t\t\t\t $.el.thead($.el.tr(h(\"Type\"),\n\t\t\t\t\t\t    h(\"Name\"),\n\t\t\t\t\t\t    h(\"Tags\"),\n\t\t\t\t\t\t    h(\"User\"),\n\t\t\t\t\t\t    h(\"Modified\"))),\n\t\t\t\t body = $.el.tbody()),\n\t\t      $.el.div({class:\"search-no-results\"}),\n\t\t      $.el.div({class:\"loading search\"})),\n\t\t    $.el.div({class:\"search-footer\"}));\n\tthis[pluginName]('search_form');\n\tbody = $(body);\n\tbody.on(\"click\", \"tr\", function(ev) {\n\t  var tr = $(ev.target).closest(\"tr\");\n\t  $(\"body\").swish('playFile', { file:tr.attr(\"data-name\") });\n\t});\n      } else {\n\t$(body).html(\"\");\n      }\n\n      // set the query, unless we are typing one\n      var input = this.find(\"input.search\");\n      if ( !input.is(\":focus\") ) {\n\tinput.val(results ? results.query.q : query ? query.q : \"\");\n\tinput.trigger(\"propertychange\", false);\n      }\n\n      if ( results ) {\n\tvar i = query.offset - results.query.offset;\n\tvar e = Math.min(i+query.limit, results.matches.length);\n\n\tif ( i<e )\n\t  $(table).show();\n\telse\n\t  $(table).hide();\n\n\tfor(; i<e; i++)\n\t{ var match = results.matches[i];\n\t  var ext   = match.name.split(\".\").pop();\n\t  var base  = match.name.slice(0, -(ext.length+1));\n\n\t  var tdtags = $.el.td({class:\"tags\"});\n\t  var tags = match.tags||[];\n\t  tags.forEach(function(tag) {\n\t    $(tdtags).append($.el.span({class:\"tag\"}, tag));\n\t  });\n\n\t  body.append($.el.tr({\"data-name\":match.name},\n\t\t\t      $.el.td(form.widgets.typeIcon(ext)),\n\t\t\t      $.el.td(base),\n\t\t\t      tdtags,\n\t\t\t      $.el.td(match.author),\n\t\t\t      $.el.td(humanize(match.time))));\n\t}\n\tthis[pluginName]('search_footer', results, query);\n      }\n    },\n\n    search_footer: function(results, query) {\n      var footer = this.find(\"div.search-footer\");\n      var noresults = this.find(\"div.search-no-results\");\n      var bopts = {};\n\n      function btn(action, dir, icon) {\n\tbopts.action = action;\n\tbopts.class  = \"btn-primary \"+dir;\n\treturn form.widgets.glyphIconButton(icon, bopts);\n      }\n\n      if ( footer.find(\".f-total\").length == 0 ) {\n\tfooter.append(btn(\"first\", \"backward\", \"fast-backward\"),\n\t\t      btn(\"prev\",  \"backward\", \"step-backward\"),\n\t\t      $.el.button({class:\"btn btn-default\"},\n\t\t\t\t  $.el.span({class: \"f-from\"}),\n\t\t\t\t  $.el.label(\"to\"),\n\t\t\t\t  $.el.span({class: \"f-to\"}),\n\t\t\t\t  $.el.label(\"from\"),\n\t\t\t\t  $.el.span({class: \"f-total\"})),\n\t\t      btn(\"next\", \"forward\", \"step-forward\"),\n\t\t      btn(\"last\", \"forward\", \"fast-forward\"));\n\n\tfooter.on(\"click\", \"button\", function(ev) {\n\t  var b   = $(ev.target).closest(\"button\");\n\t  var act = b.data('action');\n\n\t  if ( act )\n\t    b.closest(\"div.sourcelist\")[pluginName](\"page\", act)\n\t});\n      }\n\n      var end = Math.min(query.offset+query.limit, results.total);\n\n      if ( results.total == 0 ) {\n\tif ( noresults.find(\"div\").length == 0 ) {\n\t  var a;\n\t  noresults.append(\n\t    $.el.div($.el.span({class:\"no-search-results-warning\"},\n\t\t\t       form.widgets.glyphIcon(\"alert\"),\n\t\t\t       \" No matching files\"), $.el.br(),\n\t\t     \"If you are a new user you may\",\n\t\t     $.el.ul($.el.li(\"Use the Examples menu from the navigation bar\"),\n\t\t\t     $.el.li(\"Use the Program or Notebook button above\")),\n\t\t     $.el.div(a=$.el.a({href:\"#\"}, \"help on search\"))));\n\t  $(a).on(\"click\", function() {\n\t    console.log(\"help\");\n\t    modal.help({file:\"sourcelist.html\"});\n\t  });\n\t}\n\tnoresults.show();\n\tfooter.hide();\n      } else\n      { noresults.hide();\n\n\tif ( query.offset > 0 || end < results.total ) {\n\t  footer.show();\n\t  if ( query.offset == 0 ) {\n\t    footer.find(\".backward\").attr(\"disabled\", \"disabled\");\n\t  } else {\n\t    footer.find(\".backward\").removeAttr(\"disabled\");\n\t  }\n\t  if ( end >= results.total ) {\n\t    footer.find(\".forward\").attr(\"disabled\", \"disabled\");\n\t  } else {\n\t    footer.find(\".forward\").removeAttr(\"disabled\");\n\t  }\n\t  footer.find(\".f-from\") .text(\"\"+query.offset);\n\t  footer.find(\".f-to\")   .text(\"\"+end);\n\t  footer.find(\".f-total\").text(\"\"+results.total);\n\t} else {\n\t  footer.hide();\n\t}\n      }\n    },\n\n    search_form: function() {\n      var data = this.data(pluginName);\n      var elem = this;\n      var div = this.find(\"div.search-form\");\n      var btnsubmit;\n\n      function btn(title, members) {\n\tvar ul;\n\tvar div = $.el.div({class:\"btn-group\"},\n\t\t    $.el.button({ type:\"button\",\n\t\t\t          class:\"btn btn-default dropdown-toggle\",\n\t\t\t          'data-toggle':\"dropdown\",\n\t\t\t          'aria-haspopup': true,\n\t\t\t          'aria-expanded': false\n\t\t\t        },\n\t\t\t\ttitle, \" \",\n\t\t\t\t$.el.span({class:\"caret\"})),\n\t\t    ul=$.el.ul({class:\"dropdown-menu\"}));\n\n\tfunction add(item) {\n\t  var a;\n\n\t  if ( typeof(item) == \"string\" ) {\n\t    return $.el.a({'data-tag':item}, item);\n\t  } else if ( item.i) {\n\t    a = $.el.a({'data-tag':item.t, 'data-value':item.v},\n\t\t       form.widgets.typeIcon(item.i), \" \"+item.l);\n\t  } else {\n\t    a = $.el.a({'data-tag':item.t, 'data-value':item.v},\n\t\t       item.l);\n\t  }\n\t  $(a).data('quote', item.q == undefined ? \"\\\"\" : item.q);\n\n\t  return a;\n\t}\n\n\tfor(var i=0; i<members.length; i++) {\n\t  $(ul).append($.el.li(add(members[i])));\n\t}\n\n\treturn div;\n      }\n\n      function resettimeout(set) {\n\tif ( data.tmo ) {\n\t  clearTimeout(data.tmo);\n\t  data.tmo = undefined;\n\t}\n\tif ( set == true )\n\t  set = 1000;\n\tif ( set )\n\t  data.tmo = setTimeout(submit, set);\n      }\n\n      function submit(ev) {\n\tif ( ev )\n\t  ev.preventDefault();\n\tresettimeout();\n\tvar q = elem.find(\"input\").val();\n\telem[pluginName]('update', {q:q});\n\treturn false;\n      }\n\n      div.append(\n\t$.el.div({class:\"form-group has-feedback has-clear\"},\n\t\t $.el.input({\n\t\t   type: \"text\",\n\t\t   class: \"form-control search\",\n\t\t   placeholder: \"Find files\"\n\t\t }),\n\t\t $.el.span({class:\"form-control-clear glyphicon \"+\n\t\t\t\t  \"glyphicon-remove form-control-feedback \"+\n\t\t\t\t  \"hidden\"})),\n\t$.el.div({ class: \"input-group-btn\" },\n\t\t btn(\"Filter\", [{t:\"user\", l:\"My files\",        v:\"me\", q:\"\\\"\"},\n\t\t\t\t{t:\"user\", l:\"By user\",         v:\"\",   q:\"\\\"\"},\n\t\t\t\t{t:\"user\", l:\"By user (regex)\", v:\"\",   q:\"/\"},\n\t\t\t\t{t:\"tag\",  l:\"By tag\",          v:\"\",   q:\"\\\"\"},\n\t\t\t\t{t:\"tag\",  l:\"By tag (regex)\",  v:\"\",   q:\"/\"},\n\t\t\t\t{t:\"name\", l:\"By name\",         v:\"\",   q:\"\\\"\"},\n\t\t\t\t{t:\"name\", l:\"By name (regex)\", v:\"\",   q:\"/\"}\n\t\t\t       ]),\n\t\t btn(\"Type\",   [{t:\"type\", l:\"Program\",   i:\"pl\",    v:\"pl\",    q:\"\"},\n\t\t\t\t{t:\"type\", l:\"Notebook\",  i:\"swinb\", v:\"swinb\", q:\"\"},\n\t\t\t\t{t:\"type\", l:\"Permalink\", i:\"lnk\",   v:\"lnk\",   q:\"\"}\n\t\t\t       ]),\n\t\t btnsubmit=\n\t\t $.el.button({class:\"btn btn-default\", type:\"submit\"},\n\t\t\t     $.el.i({class:\"glyphicon glyphicon-search\"}))));\n\n      form.dyn_clear(div, submit);\n\n      div.on(\"click\", \"a\", function(ev) {\n\tvar a = $(ev.target).closest(\"a\");\n\n\tfunction tag(tag, value, q) {\n\t  var input = div.find(\"input\");\n\t  var val = input.val();\n\t  var tagv = tag + \":\" + q + (value||\"\") + q;\n\n\t  if ( val.trim() == \"\" ) {\n\t    val = tagv;\n\t  } else {\n\t    if ( value && RegExp(\"\\\\b\"+tag+\":\").test(val) ) {\n\t      val = val.replace(RegExp(\"\\\\b\"+tag+\":(\\\\S*|\\\\s*\\\"[^\\\"]*\\\")\"), tagv);\n\t    } else {\n\t      val = val.trim() + \" \" + tagv;\n\t    }\n\t  }\n\n\t  input.val(val).trigger('propertychange');\n\t  if ( value || tag == \"tag\" )\n\t    submit();\n\t}\n\n\ttag(a.data('tag'), a.data('value'), a.data('quote'));\n      });\n\n      $(btnsubmit).on(\"click\", function(ev) {\n\treturn submit(ev);\n      });\n\n      var inputel = elem.find(\"input\");\n      inputel.keydown(function(ev) {\n\tif ( ev.which == 13 )\n\t  return submit(ev);\n      }).on(\"input propertychange\", function(ev, propagate) {\n\tif ( propagate != false ) {\n\t  if ( from_cache(query_cache, inputel.val()) ) {\n\t    resettimeout(200);\n\t  } else\n\t    resettimeout(true);\n\t}\n      });\n    },\n\n    busy: function(busy) {\n      var div = this.find(\"div.loading\");\n\n      if ( busy )\n\tdiv.show();\n      else\n\tdiv.hide();\n    }\n  }; // methods\n\n\n  /**\n   * Cache management.  These functions should eventually merge results\n   * and select sub-results without contacting the server.\n   */\n  function from_cache(cache, query) {\n    function qmatch(entry) {\n      var e = entry.query;\n      if ( query.q == e.q ) {\n\tif ( query.offset >= e.offset &&\n\t     (query.offset+query.limit <= e.offset + entry.matches.length ||\n\t      e.offset + entry.matches.length == entry.total) )\n\t  return e;\n\t}\n    }\n\n    if ( query != undefined ) {\n      query.offset = query.offset || 0;\n      query.limit  = query.limit  || 10;\n\n      for(var i=cache.length-1; i>=0; i--) {\n\tvar entry = cache[i];\n\tif ( qmatch(entry) )\n\t  return entry;\n      }\n    }\n  }\n\n  function add_to_cache(cache, result) {\n    var qr = result.query;\n\n    qr.offset = qr.offset || 0;\n    qr.limit  = qr.limit  || 10;\n\n    for(var i=cache.length-1; i>=0; i--) {\n      var entry = cache[i];\n      var qc = entry.query;\n\n      if ( qc.q == qr.q ) {\n\tif ( qc.offset + entry.matches.length == qr.offset ) {\n\t  for(var i=0; i<result.matches.length; i++)\n\t    entry.matches.push(result.matches[i]);\n\t  return;\n\t}\n      }\n    }\n\n    cache.push(result);\n  }\n\n  /**\n   * List available sources.\n   *\n   * @class sourcelist\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.sourcelist = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * This file deals with tabbed panes.  It implements dynamic tabs on top\n * if Bootstrap.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('tabbed',[ \"jquery\", \"form\", \"config\", \"preferences\", \"modal\",\n\t \"laconic\", \"search\", \"chatbell\", \"sourcelist\" ],\n       function($, form, config, preferences, modal) {\nvar tabbed = {\n  tabTypes: {},\n  type: function(from) {\n    var ext = from.split('.').pop();\n\n    for(var k in tabbed.tabTypes) {\n      if ( tabbed.tabTypes.hasOwnProperty(k) &&\n\t   tabbed.tabTypes[k].dataType == ext )\n\treturn tabbed.tabTypes[k];\n    }\n  }\n};\n\ntabbed.tabTypes.permalink = {\n  dataType: \"lnk\",\n  typeName: \"program\",\n  label: \"Program\",\n  create: function(dom, options) {\n    $(dom).addClass(\"prolog-editor\")\n\t  .prologEditor($.extend({save:true}, options))\n\t  .prologEditor('makeCurrent');\n  }\n};\n\n\n(function($) {\n  var pluginName = 'tabbed';\n  var tabid = 0;\n\n  /** @lends $.fn.tabbed */\n  var methods = {\n    /**\n     * Turn the current element into a Bootstrap tabbed pane. All\n     * children of the current element are changed into tabs.  The\n     * child can control the mapping using:\n     *\n     *   - `data-label = \"Label\"`\n     *   - `data-close = \"disabled\"`\n     */\n    _init: function(options) {\n      options = options||{};\n\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\t\t\t/* private data */\n\n\tdata.newTab   = options.newTab;\n\tdata.tabTypes = options.tabTypes || tabbed.tabTypes;\n\telem.data(pluginName, data);\t/* store with element */\n\n\telem.addClass(\"tabbed unloadable\");\n\telem.tabbed('makeTabbed');\n\telem.on(\"trace-location\", function(ev, prompt) {\n\t  elem.tabbed('showTracePort', prompt);\n\t});\n\telem.on(\"data-is-clean\", function(ev, clean) {\n\t  var tab = $(ev.target).closest(\".tab-pane\");\n\t  var a   = elem.tabbed('navTab', tab.attr('id'));\n\n\t  if ( a )\n\t  { if ( clean )\n\t      a.removeClass(\"data-dirty\");\n\t    else\n\t      a.addClass(\"data-dirty\");\n\t  }\n\t});\n\telem.on(\"unload\", function(ev) {\n\t  if ( ev.target == elem[0] &&\n\t       elem.closest(\".swish\").swish('preserve_state') ) {\n\t    var state = elem[pluginName]('getState');\n\t    localStorage.setItem(\"tabs\", JSON.stringify(state));\n\t  }\n\t});\n\telem.on(\"restore\", function(ev) {\n\t  var state;\n\n\t  if ( ev.target == elem[0] ) {\n\t    try {\n\t      var str = localStorage.getItem(\"tabs\");\n\t      if ( str )\n\t\tstate = JSON.parse(str);\n\t    } catch(err) {\n\t    }\n\n\t    if ( state && typeof(state) == \"object\" ) {\n\t      elem[pluginName]('setState', state);\n\t    }\n\t  }\n\t});\n\telem.on(\"preference\", function(ev, pref) {\n\t  if ( pref.name == \"preserve-state\" &&\n\t       pref.value == false ) {\n\t    localStorage.removeItem(\"tabs\");\n\t  }\n\t});\n      });\n    },\n\n    /**\n     * Turn the pane into a tabbed pane\n     */\n    makeTabbed: function() {\n      var children = this.children();\n      var ul = $.el.ul({ class:\"nav nav-tabs\",\n\t\t\t role:\"tablist\"\n\t\t       });\n      var contents = $.el.div({class:\"tab-content\"});\n\n      this.prepend(contents);\n      this.prepend(ul);\n\n      $(ul).on(\"click\", \"span.xclose\", function(ev) {\n\tvar id = $(ev.target).parent().attr(\"data-id\");\n\t$(ev.target).parents(\".tabbed\").first().tabbed('removeTab', id);\n\tev.preventDefault();\n      });\n      $(ul).on(\"click\", \"a\", function(ev) {\n\t$(ev.target).closest(\"a\").tab('show');\n\tev.preventDefault();\n      });\n\n\t\t\t/* Turn children into tabs */\n      for(var i=0; i<children.length; i++) {\n\tvar child = $(children[i]);\n\tvar id = genId();\n\tvar label = child.attr(\"data-label\") || \"Unknown\";\n\tvar close = child.attr(\"data-close\") != \"disabled\";\n\tvar active = (i == children.length-1);\t/* activate last */\n\n\tvar li = this.tabbed('tabLabel', id, label, close);\n\tif ( active )\n\t  $(li).addClass(\"active\");\n\t$(ul).append(li);\n\t$(contents).append(wrapInTab($(children[i]), id, active));\n      }\n\n\t\t\t/* Create and handle \"+\" button */\n      var create = $.el.a({ class: \"tab-new compact\",\n\t\t\t    title: \"Open a new tab\"\n\t\t\t  },\n\t\t\t  glyphicon(\"plus\"));\n      $(ul).append($.el.li({ class: \"tab-new\", role:\"presentation\" }, create));\n      $(create).on(\"click\", function(ev) {\n\tvar tabbed = $(ev.target).parents(\".tabbed\").first();\n\n\ttabbed.tabbed('newTab');\n\tev.preventDefault();\n\treturn false;\n      });\n\n\t\t\t/* Handle tab-switching */\n      $(ul).on(\"shown.bs.tab\", \"a\", function(ev) {\n\tvar newContentID  = $(ev.target).data(\"id\");\n\t$(\"#\"+newContentID+\" .swish-event-receiver\").trigger(\"activate-tab\");\n\t$(\"#\"+newContentID+\" .storage\").storage(\"activate\");\n      });\n\n      if ( this.tabbed('navContent').children().length == 0 ) {\n\tthis.tabbed('newTab');\n      }\n    },\n\n    /**\n     * Add an empty new tab from the \"+\" button.  This calls\n     * options.newTab() to return a DOM element for the new\n     * tab.\n     * @param {HTMLElement} [content] Content for the new tab\n     * If omitted, it calls `options.newTab` or uses the method\n     * `tabSelect`.\n     * @return {jQuery} object representing the created tab\n     */\n    newTab: function(dom, active) {\n      var data = this.data(pluginName);\n\n      if ( dom == undefined ) {\n\tif ( data.newTab ) {\n\t  dom = data.newTab();\n\t} else {\n\t  var sl;\n\t  dom = this.tabbed('tabSelect');\n\t  $(dom).append(this.tabbed('profileForm'),\n\t\t\t$.el.hr(),\n\t\t\t//this.tabbed('searchForm'),\n\t\t        sl = $.el.div({class:\"sourcelist\"}));\n\t  $(sl).sourcelist();\n\t}\n      }\n\n      if ( active == undefined )\n\tactive = true;\n\n      return this.tabbed('addTab', dom, {active:active,close:true});\n    },\n\n    getState: function() {\n      var state = this[pluginName]('get_ordered_storage').storage('getState');\n\n      state.pathname = window.location.pathname;\n      state.time     = new Date().getTime();\n\n      return state;\n    },\n\n    setState: function(state) {\n      var elem = this;\n      var fromURL = this.find(\".storage\").length > 0;\n\n      for(var i=0; i<state.tabs.length; i++) {\n\tvar data = state.tabs[i];\n\tthis[pluginName]('restoreTab', data, fromURL);\n      }\n    },\n\n    restoreTab: function(data, fromURL) {\n      var elem = this;\n      var tab;\n\n      data.query = null;\t\t/* null keeps query */\n      data.noHistory = true;\t\t/* do not update window path */\n\n      var existing = this.find(\".storage\").storage('match', data);\n      if ( existing ) {\n\texisting.data('storage').url = data.url;\n\ttab = existing.closest(\".tab-pane\");\n\telem.tabbed('move_right', tab);\n      } else\n      { tab = undefined;\n      }\n\n      function restoreData(into, from) {\n\tif ( from.data ) {\n\t  into.find(\".storage\").storage('setValue', {\n\t    data: from.data,\n\t    role: 'source'\n\t  });\n\t}\n\tif ( from.chatroom ) {\n\t  into.find(\".storage\").storage('chat', from.chatroom);\n\t}\n      }\n\n      if ( existing ) {\n\trestoreData(tab, data);\n      } else if ( existing ) {\n\t/* nothing to do? */\n      } else {\t\t\t\t/* TBD: Centralise */\n\tvar select = this.find(\"div.tabbed-select\");\n\tvar newtab;\n\tvar restoring = '<div class=\"restore-tab\">Restoring ' +\n\t                   (data.file||data.url) + \" ...\" +\n\t\t\t'</div>';\n\n\tif ( select.length > 0 )  {\n\t  newtab = select.first().closest(\".tab-pane\");\n\t  newtab.html(restoring);\n\t} else {\n\t  var active = (!fromURL && Boolean(data.active));\n\t  newtab = elem.tabbed('newTab', $(restoring), active);\n\t}\n\n\tif ( data.st_type == \"gitty\" ) {\n\t  var url = config.http.locations.web_storage + data.file;\n\t  $.ajax({ url: url,\n\t\t   type: \"GET\",\n\t\t   data: {format: \"json\"},\n\t\t   success: function(reply) {\n\t\t     reply.url = url;\n\t\t     reply.st_type = \"gitty\";\n\t\t     reply.noHistory = true;\n\t\t     if ( !elem.tabbed('setSource', newtab, reply) ) {\n\t\t       console.log(\"Failed to restore\", data.file);\n\t\t       elem.tabbed('removeTab', tab.attr(\"id\"));\n\t\t     }\n\t\t     restoreData(newtab, data);\n\t\t     if ( !fromURL && newtab.hasClass(\"active\") )\n\t\t       newtab.find(\".storage\").storage(\"activate\");\n\t\t   },\n\t\t   error: function(jqXHR) {\n\t\t     modal.ajaxError(jqXHR);\n\t\t   }\n\t  });\n\t} else if ( data.url ) {\n\t  $.ajax({ url: data.url,\n\t\t   type: \"GET\",\n\t\t   data: {format: \"json\"},\n\t\t   success: function(source) {\n\t\t     var msg;\n\n\t\t     if ( typeof(source) == \"string\" ) {\n\t\t       msg = { data: source };\n\t\t       msg.st_type = \"external\";\n\t\t     } else if ( typeof(source) == \"object\" &&\n\t\t\t\t typeof(source.data) == \"string\" ) {\n\t\t       msg = source;\n\t\t       msg.st_type = \"filesys\";\n\t\t     } else {\n\t\t       alert(\"Invalid data\");\n\t\t       return;\n\t\t     }\n\t\t     msg.noHistory = true;\n\t\t     msg.url = data.url;\n\t\t     if ( !elem.tabbed('setSource', newtab, msg) ) {\n\t\t       console.log(\"Failed to restore\", data.url);\n\t\t       elem.tabbed('removeTab', newtab.attr(\"id\"));\n\t\t     }\n\t\t     restoreData(newtab, data);\n\t\t     if ( !fromURL && newtab.hasClass(\"active\") )\n\t\t       newtab.find(\".storage\").storage(\"activate\");\n\t\t   },\n\t\t   error: function(jqXHR) {\n\t\t     modal.ajaxError(jqXHR);\n\t\t   }\n\t  });\n\t} else {\n\t  console.log(\"Cannot restore \", data);\n\t}\n      }\n    },\n\n\n    /**\n     * Add a new tab from the provided source.  If there is a _select_\n     * (new) tab, open the data in this tab.\n     */\n    tabFromSource: function(src) {\n      var elem = this;\n      var select = this.find(\"div.tabbed-select\");\n\n      if ( typeof(src) == \"string\" )\n\tsrc = {data:src};\n\n      function inNewTab() {\n\tvar tab = elem.tabbed('newTab', $(\"<span></span>\"));\n\tif ( !elem.tabbed('setSource', tab, src) ) {\n\t  elem.tabbed('removeTab', tab.attr(\"id\"));\n\t}\n      }\n\n      if ( select.length > 0 ) {\n\tvar tab = select.first().closest(\".tab-pane\");\n\tthis.tabbed('show', tab.attr(\"id\"));\n\tthis.tabbed('setSource', tab, src);\n      } else if ( src.newTab || preferences.getVal(\"new-tab\") ) {\n\tinNewTab();\n      } else\n      { var tab;\n\n\tthis.find(\".storage\").each(function(i, st) {\n\t  if ( $(st).storage('setSource', src) ) {\n\t    tab = $(st).closest(\".tab-pane\");\n\t    return false;\n\t  }\n        });\n\n\tif ( tab )\n\t  this.tabbed('show', tab.attr(\"id\"));\n\telse\n\t  inNewTab();\n      }\n\n      return this;\n    },\n\n    /**\n     * Transform the new tab into a tab that can hold the requested\n     * source.\n     * @return {Boolean} `true` if a suitable type was found\n     */\n    setSource: function(tab, src) {\n      if ( typeof(src) == \"object\" &&\n\t   ((src.meta && src.meta.name) || src.url) )\n      { var name = (src.meta && src.meta.name) ? src.meta.name : src.url;\n\tvar tabType = tabbed.type(name);\n\tvar content = $.el.div();\n\tvar options = {};\n\n\tif ( src.noHistory )\n\t  options.noHistory = true;\n\n\ttab.html(\"\");\n\ttab.tabbed('title', tabType.label, tabType.dataType);\n\ttab.append(content);\n\ttabType.create(content, options);\n\t$(content).storage('setSource', src);\n\treturn true;\n      }\n\n      return false;\n    },\n\n    /**\n     * Show a tracer port. This implies finding the proper editor,\n     * making sure it is visible and ask it to show to port or, if\n     * no editor is displaying this source, create a new one.\n     * @param {Object} prompt\n     * @param {Object} [prompt.source]\n     * @param {Object} [prompt.source.file] is the file associated\n     * with the debug event.  Currently, we accept\n     *\n     *   - `pengine://<pengine>/src` refers to the editor that provided\n     *     the source for pengine <pengine>\n     *\t - `swish://<file>.pl` refers to an included file from the\n     *\t   store.\n     */\n    showTracePort: function(prompt) {\n      if ( prompt && prompt.source && prompt.source.file ) {\n\tvar file = prompt.source.file;\n\tvar pengineID, store;\n\tvar editors;\n\n\tfunction isPengineSrc() {\n\t  var id;\n\n\t  if ( file.startsWith(\"pengine://\") )\n\t    return file.split(\"/\")[2];\n\t}\n\n\tfunction isStoreSrc() {\n\t  var prefix = \"swish://\";\n\t  if ( file.startsWith(prefix) )\n\t    return file.slice(prefix.length);\n\t}\n\n\tif ( (pengineID=isPengineSrc()) ) {\n\t  editors = this.find(\".prolog-editor\")\n\t\t\t.filter(function(i, e) {\n\t\t\t  return $(e).prologEditor('pengine', {has:pengineID});\n\t\t\t});\n\t} else if ( (store=isStoreSrc()) ) {\n\t  editors = this.find(\".storage\")\n\t\t\t.storage('match', {file:store});\n\n\t  if ( !editors ) {\n\t    this.closest(\".swish\")\n\t        .swish('playFile',\n\t\t       { file: store,\n\t\t\t newTab: true,\n\t\t\t noHistory: true,\n\t\t\t prompt: prompt\n\t\t       });\n\t    return this;\n\t  }\n\t}\n\n\tif ( editors )\n\t  editors.prologEditor('showTracePort', prompt);\n      }\n\n      return this;\n    },\n\n\n    /**\n     * Add a new tab using content\n     * @param {Object} content is the DOM node to use as content for the\n     * tab.\n     * @param {Object} options\n     * @param {Boolean} [options.active] if `true`, make the new tab\n     * active\n     * @param {Boolean} [options.close] if `true`, allow closing the new\n     * tab.\n     * @return {jQuery} the created tab element\n     */\n    addTab: function(content, options) {\n      var ul  = this.tabbed('navTabs');\n      var id  = genId();\n      var tab =\twrapInTab(content, id, options.active);\n\n      this.tabbed('navContent').append(tab);\n\n      var li  = this.tabbed('tabLabel', id, \"New tab\", close, \"select\");\n\n      var create = ul.find(\"a.tab-new\");\n      if ( create.length == 1 )\n\t$(li).insertBefore(create.first().parent());\n      else\n\tul.append(li);\n\n      if ( options.active )\n\t$(li).find(\"a\").first().tab('show');\n\n      return tab;\n    },\n\n    /**\n     * Remove tab with given Id. If the tab is the active tab, make the\n     * previous tab active, or if there is no previous, the next. If the\n     * tabbed environment becomes empty, add a virgin tab.\n     *\n     * @param {String} id is the id of the tab to destroy\n     */\n    removeTab: function(id) {\n      var li  = this.tabbed('navTabs').find(\"a[data-id='\"+id+\"']\").parent();\n      var tab = $(\"#\"+id);\n      var new_active;\n\n      if ( tab.find(\".storage\").storage('unload', \"closetab\") == false )\n\treturn;\n\n      if ( tab.is(\":visible\") )\n\tnew_active = li.prev() || li.next();\n      li.remove();\n\t\t\t\t\t/* HACK: close embedded runners */\n      tab.find(\".prolog-runner\").prologRunner('close');\n      tab.find(\".storage\").storage('close');\n      tab.remove();\n      if ( new_active && new_active.length > 0 ) {\n\tnew_active.find(\"a\").first().tab('show');\n      } else if ( this.tabbed('navContent').children().length == 0 ) {\n\tthis.tabbed('newTab');\n      }\n\n      $(\".storage\").storage('chat_status', true);\n    },\n\n    /**\n     * Show indicated tab.\n     * @param {String} id is the id of the tab to show.\n     */\n    show: function(id) {\n      var a = this.tabbed('navTab', id);\n      if ( a ) {\n\ta.tab('show');\n      }\n\n      $(\".storage\").storage('chat_status', true);\n    },\n\n    /**\n     * Move the argument tab or tab id to the right of all\n     * tabs.\n     */\n    move_right: function(tab) {\n      var id;\n      var ul = this.find(\">ul\");\n\n      if ( typeof(tab) == \"string\" )\n\tid = tab;\n      else\n\tid = tab.attr('id');\n\n      ul.find(\"a[data-id=\"+id+\"]\")\n        .closest(\"li\")\n        .insertBefore(ul.children().last());\n    },\n\n    /**\n     * Create a label (`li`) for a new tab.\n     * @param {String} id is the identifier of the new tab\n     * @param {String} label is the textual label of the new tab\n     * @param {Boolean} close determines whether or nor a close button\n     * is added to the tab.\n     * @param {String} [type=\"pl\"] indicates the type of the tab. This\n     * is used for associating an icon with the tab.\n     */\n    tabLabel: function(id, label, close, type) {\n      var close_button;\n      var chat;\n\n      if ( close )\n      { close_button = glyphicon(\"remove\", \"xclose\");\n\t$(close_button).attr(\"title\", \"Close tab\");\n      }\n      type = type||\"pl\";\n\n      var a1 = $.el.a({class:\"compact\", href:\"#\"+id, \"data-id\":id},\n\t\t      $.el.span({class:\"tab-icon type-icon \"+type}),\n\t\t      $.el.span({class:\"tab-dirty\",\n\t\t                 title:\"Tab is modified. \"+\n\t\t\t\t       \"See File/Save and Edit/View changes\"}),\n\t       chat = $.el.a({class:'tab-chat'}),\n\t\t      $.el.span({class:\"tab-title\"}, label),\n\t\t      close_button);\n      var li = $.el.li({role:\"presentation\"}, a1);\n\n      $(chat).chatbell()\n             .on(\"click\", function(ev) {\n\tvar id = $(ev.target).closest(\"a.compact\").data(\"id\");\n\t$(\"#\"+id).find(\".storage\").storage('chat');\n\treturn false;\n      });\n\n      return li;\n    },\n\n    /**\n     * Calling obj.tabbed('anchor') finds the <a> element\n     * representing the tab label from the node obj that appears\n     * somewhere on the tab\n     */\n    anchor: function() {\n      var tab    = this.closest(\".tab-pane\");\n\n      if ( tab.length == 0 ) {\n\treturn undefined;\t\t/* e.g., fullscreen mode */\n      }\n\n      var tabbed = tab.closest(\".tabbed\");\n      var id     = tab.attr(\"id\");\n      var ul\t = tabbed.tabbed('navTabs');\n      var a      = ul.find(\"a[data-id=\"+id+\"]\");\n\n      return a;\n    },\n\n    /**\n     * Find the storage objects in the tabbed environment in the\n     * order of the tabs.  Note that the content divs maye be ordered\n     * differently.\n     */\n    get_ordered_storage: function() {\n      var elem = this;\n      var result = [];\n\n      this.find(\">ul>li\").each(function() {\n\tvar id = $(this).find(\">a\").data('id');\n\telem.find(\">div.tab-content>div[id=\"+id+\"] .storage\").each(function() {\n\t  result.push(this);\n\t});\n      });\n\n      return $(result);\n    },\n\n    /**\n     * This method is typically _not_ called on the tab, but on some\n     * inner element of the tab.  It changes the title of the tab.\n     * @param {String} title is the new title for the tab.\n     * @param {String} [type=\"pl\"] is the new type for the tab.\n     */\n    title: function(title, type) {\n      var a = this.tabbed('anchor');\n\n      if ( a ) {\n\ta.find(\".tab-title\").text(title);\n\tif ( type ) {\n\t  var icon = a.find(\".tab-icon\");\n\t  icon.removeClass();\n\t  icon.addClass(\"tab-icon type-icon \"+type);\n\t}\n      }\n\n      return this;\n    },\n\n    /**\n     * Set the chat message feedback for this tab\n     * @param {Object} [chats]\n     * @param {Number} [chats.count] number of available chat messages\n     * on the document.\n     */\n    chats: function(chats) {\n      var a = this.tabbed('anchor');\n\n      if ( a ) {\n\ta.find(\".chat-bell\").chatbell('update', chats);\n      }\n\n      return this;\n    },\n\n    /**\n     * Increment the chat count and possibly associate the bell\n     * with the document identifier.\n     * @param {String} [docid] is the document identifier to associate\n     * with.\n     */\n    'chats++': function(docid) {\n      var a = this.tabbed('anchor');\n\n      if ( a ) {\n\ta.find(\".chat-bell\").chatbell('chats++', docid);\n      }\n\n      return this;\n    },\n\n\n    /**\n     * Default empty tab content that allows the user to transform\n     * the tab into the desired object.\n     * @return {Object} containing content for the new tab\n     */\n    tabSelect: function() {\n      var data = this.data(pluginName);\n      var dom = $.el.div({class:\"tabbed-select\"},\n\t\t\t $.el.div({class: \"tabbed-create\"},\n\t\t\t\t  $.el.label({class: \"tabbed-left\"},\n\t\t\t\t\t     \"Create a \"),\n\t\t\t\t  g=$.el.div({class:\"btn-group\",role:\"group\"}),\n\t\t\t\t  $.el.label({class: \"tabbed-right\"}, \"here\")));\n      var types = [];\n\n      for(var k in data.tabTypes) {\n\tif ( data.tabTypes.hasOwnProperty(k) &&\n\t     data.tabTypes[k].order )\n\t  types.push(k);\n      }\n      types.sort(function(a,b) {\n\treturn data.tabTypes[a].order - data.tabTypes[b].order;\n      });\n\n      for(var i = 0; i<types.length; i++) {\n\tvar type = data.tabTypes[types[i]];\n\n\t$(g).append($.el.button({ type:\"button\",\n\t\t\t\t  class:\"btn btn-primary\",\n\t\t\t\t  \"data-type\":type.typeName,\n\t\t\t\t  \"data-ext\":type.dataType\n\t\t\t\t},\n\t\t\t\ttype.label));\n      }\n\n      $(g).on(\"click\", \".btn\", function(ev) {\n\tvar type    = $(ev.target).data('type');\n\tvar tab     = $(ev.target).closest(\".tab-pane\");\n\tvar content = $.el.div();\n\tvar options = $.extend({}, tabbed.tabTypes[type]);\n\tvar profile = tab.find(\"label.active > input[name=profile]\").val();\n\n\tif ( profile ) {\n\t  options.profile = profile;\n\t  options.value   = tab.tabbed('profileValue', profile,\n\t\t\t\t       tabbed.tabTypes[type].dataType);\n\t  if ( options.value != undefined )\n\t    preferences.setVal(\"default-profile\", profile);\n\t}\n\n\ttab.html(\"\");\n\ttab.tabbed('title', options.label, options.dataType);\n\ttab.append(content);\n\ttabbed.tabTypes[type].create(content, options);\n      });\n      $(g).addClass(\"swish-event-receiver\");\n      $(g).on(\"download save fileInfo print\", function(ev) {\n\tvar tab = $(ev.target).closest(\".tab-pane\");\n\tif ( tab.is(\":visible\") ) {\n\t  var typelabel = { \"download\" : \"you wish to download\",\n\t\t\t    \"save\"     : \"you wish to save\",\n\t\t\t    \"print\"    : \"you wish to print\",\n\t\t\t    \"fileInfo\" : \"for which you want details\"\n\t  };\n\n\t  modal.alert(\"Please activate the tab \"+typelabel[ev.type]);\n\t  ev.stopPropagation();\n\t}\n      });\n      $(g).on(\"profile-selected\", function(ev, profile) {\n\t$(ev.target).find(\"button\").each(function() {\n\t  $(this).prop('disabled',\n\t\t       profile.type.indexOf($(this).data('ext')) < 0);\n\t});\n      });\n\n      return dom;\n    },\n\n    /**\n     * Find sources\n     */\n    searchForm: function() {\n      var sform = $.el.form({class: \"search-sources\"},\n\t$.el.label({class:\"control-label\"}, 'Open source file containing'),\n        $.el.div(\n\t  {class: \"input-group\"},\n\t  $.el.input({ type: \"text\",\n\t\t       class: \"form-control search\",\n\t\t       placeholder: \"Search sources\",\n\t\t       'data-search-in': \"sources store_content\",\n\t\t     }),\n\t  $.el.div({ class: \"input-group-btn\" },\n\t\t   $.el.button({class:\"btn btn-default\", type:\"submit\"},\n\t\t\t       $.el.i({class:\"glyphicon glyphicon-search\"})))),\n\t$.el.div({class: \"input-group\"},\n\t  form.fields.radio(\"smatch\",\n\t    [ { label:\"Start of line\", value:\"sol\"},\n\t      { label:\"Start of word\", value:\"sow\", active:true},\n\t      { label:\"Anywhere\", value:\"anywhere\" }\n\t    ])));\n      $(sform).find(\"input.search\").search();\n\n      return sform;\n    },\n\n    sourceList: function() {\n\n\n    },\n\n    profileForm: function() {\n      if ( config.swish.profiles && config.swish.profiles.length > 0 ) {\n\tvar def;\n\n\tfor(var i=0; i<config.swish.profiles.length; i++) {\n\t  delete config.swish.profiles[i].active;\n\t}\n\n\tif ( (def=preferences.getVal(\"default-profile\")) ) {\n\t  for(var i=0; i<config.swish.profiles.length; i++) {\n\t    if ( config.swish.profiles[i].value == def )\n\t      config.swish.profiles[i].active = true\n\t  }\n\t} else {\n\t  config.swish.profiles[0].active = true;\n\t}\n\n\tvar pform =\n\t$.el.div(\n\t  {class:\"tabbed-profile\"},\n\t  $.el.label({class: \"tabbed-left\"}, \"based on\"),\n\t  $.el.div({class: \"input-group select-profile\"},\n\t\t   form.fields.radio(\"profile\", config.swish.profiles)),\n\t  $.el.label({class: \"tabbed-right\"}, \"profile\"));\n\n\t$(pform).on(\"click\", function(ev) {\n\t  var select = $(ev.target).find(\"input\").val();\n\t  var profile = profileObject(select);\n\t  $(ev.target).closest(\".tab-pane\")\n\t\t      .find(\".tabbed-create .btn-group\")\n\t\t      .trigger(\"profile-selected\", profile);\n\t});\n\n\treturn pform;\n      }\n    },\n\n    profileValue: function(name, ext) {\n      var url = config.http.locations.swish + \"profile/\" + name + \".\" + ext;\n      return $.ajax({ url: url,\n\t\t      type: \"GET\",\n\t\t      data: {format: \"raw\"},\n\t\t      async: false,\n\t\t      error: function(jqXHR) {\n\t\t\tmodal.ajaxError(jqXHR);\n\t\t      }\n      }).responseText;\n    },\n\n    /**\n     * Get the UL list that represents the nav tabs\n     */\n    navTabs: function() {\n      return this.find(\"ul.nav-tabs\").first();\n    },\n\n    navTab: function(id) {\n      var a = this.find(\"ul.nav-tabs\").first().find(\"a[data-id='\"+id+\"']\");\n      if ( a.length > 0 )\n\treturn a;\n    },\n\n    navContent: function() {\n      return this.find(\"div.tab-content\").first();\n    }\n  }; // methods\n\n  /**\n   * Wrap a content element in a Bootstrap tab content.\n   * @param {Object} dom is the object that must be wrapped\n   * @param {String} id is the identifier to give to the new content\n   * @param {Boolean} active sets the tab to active if `true`\n   * @return {jQuery} `div` object of class `tab-pane` and the\n   * passed `id`.\n   */\n  function wrapInTab(dom, id, active) {\n    $(dom).wrap('<div role=\"tabpanel\" class=\"tab-pane\" id=\"'+id+'\"></div>');\n    var wrapped = $(dom).parent();\n\n    if ( active )\n      wrapped.addClass(\"active\");\n\n    return wrapped;\n  }\n\n  function glyphicon(glyph, className) {\n    var span = $.el.span({class:\"glyphicon glyphicon-\"+glyph});\n\n    if ( className )\n      $(span).addClass(className);\n\n    return span;\n  }\n\n  function genId()\n  { return \"tabbed-tab-\"+tabid++;\n  }\n\n  function profileObject(name) {\n    if ( config.swish.profiles ) {\n      for(var i=0; i<config.swish.profiles.length; i++) {\n\tif ( config.swish.profiles[i].value == name )\n\t  return config.swish.profiles[i];\n      }\n    }\n  }\n\n  /**\n   * <Class description>\n   *\n   * @class tabbed\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.tabbed = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n  return tabbed;\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2016, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * RequireJS module providing some general support methods for accessing\n * Prolog\n *\n * @version 0.1.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\n/* Also depends on \"editor\", but requireJS cannot handle cyclic dependencies.\n   As downloadCSV() is only called after initialisation we dropped this\n   dependency.\n*/\n\ndefine('prolog',[ \"jquery\", \"config\", \"form\", \"preferences\",\n\t /* \"editor\" */\n       ],\n       function($, config, form, preferences) {\n  var prolog = {\n    /**\n     * Download query results as CSV.\n     * @param {Object} [options]\n     * @param {String} [options.projection] holds the Prolog projection\n     * variables, separated by commas, e.g., `\"X,Y\"`\n     * @param {String} [options.format=\"prolog\"] holds a string that\n     * defines the variation of the CSV format, e.g., `\"prolog\"` or\n     * `\"rdf\"`\n     * @param {String|Number} [options.limit] defines the max number of\n     * results.\n     * @param {Boolean} [options.distinct] requests only distinct\n     * results.\n     * @param {String} [options.disposition] provides the default for\n     * the download file.  If no extension is given, \".csv\" is added.\n     */\n    downloadCSV: function(query, source, options) {\n      options = options||{};\n      options.disposition = (options.disposition||\n\t\t\t     options.filename||\n\t\t\t     \"swish-results.csv\");\n\n      if ( options.projection ) {\n\tvar formel;\n\tvar format = options.format||\"prolog\";\n\n\tfunction attr(name,value) {\n\t  return $.el.input({type:\"hidden\", name:name, value:value});\n\t}\n\n\tif ( options.distinct )\n\t  query = \"distinct([\"+options.projection+\"],(\"+query+\"))\";\n\tif ( options.limit ) {\n\t  var limit = parseInt(options.limit.replace(/[ _]/g,\"\"));\n\n\t  if ( typeof(limit) == \"number\" ) {\n\t    query = \"limit(\"+limit+\",(\"+query+\"))\";\n\t  } else {\n\t    alert(\"Not an integer: \", options.limit);\n\t    return false;\n\t  }\n\t}\n\n\tformel = $.el.form({ method:\"POST\",\n                             action:config.http.locations.pengines+\"/create\",\n\t\t\t     target:\"_blank\"\n\t\t           },\n\t\t\t   attr(\"format\", \"csv\"),\n\t\t\t   attr(\"chunk\", \"10\"),\n\t\t\t   attr(\"solutions\", \"all\"),\n\t\t\t   attr(\"disposition\", options.disposition),\n\t\t\t   attr(\"application\", \"swish\"),\n\t\t\t   attr(\"ask\", query),\n\t\t\t   attr(\"src_text\", source),\n\t\t\t   attr(\"template\", format+\"(\"+options.projection+\")\"));\n\tconsole.log(formel);\n\t$(\"body\").append(formel);\n\tformel.submit();\n\t$(formel).remove();\n      } else {\n\tvar vars = $().prologEditor('variables', query);\n\tvar disposition = options.disposition;\n\tif ( disposition.indexOf(\".\") < 0 )\n\t  disposition += \".csv\";\n\n\tfunction infoBody() {\n\t  var formel = $.el.form(\n            {class:\"form-horizontal\"},\n\t    form.fields.projection(vars.join(\",\")),\n\t    form.fields.csvFormat(config.swish.csv_formats,\n\t\t\t\t  preferences.getVal(\"csvFormat\")),\n\t    form.fields.limit(\"10 000\", false),\n\t    form.fields.filename(disposition, 2),\n\t    form.fields.buttons(\n\t      { label: \"Download CSV\",\n\t\taction: function(ev, params) {\n\t\t  ev.preventDefault();\n\t\t  if ( config.swish.csv_formats.length > 1 )\n\t\t    preferences.setVal(\"csvFormat\", params.format);\n\t\t  prolog.downloadCSV(query, source, params);\n\n\t\t  return false;\n\t\t}\n\t      }));\n\t  this.append(formel);\n\t}\n\n\tform.showDialog({ title: \"Download query results as CSV\",\n\t\t\t  body:  infoBody\n\t\t        });\n      }\n\n      return this;\n      },\n\n    /**\n     * Remove the full-stop from a query string\n     */\n    trimFullStop: function(s) {\n      return s.replace(/\\.\\s*$/m, \"\");\n    },\n\n    /**\n     * Default options for $.swish()\n     */\n    options: {\n      application: \"swish\",\n      chunk: 5\n    }\n  }\n\n\t\t /*******************************\n\t\t *\t     PENGINES\t\t*\n\t\t *******************************/\n\n  /**\n   * $.swish(options) creates a new Pengine with given default\n   * options.  The default options are determined by `prolog.options`.\n   * This function expects pengines.js to be already loaded.  The\n   * bootstrapping of that is achieved in `swish.js`.\n   *\n   * @return {Pengine} the created pengine object\n   */\n  $.swish = function(options) {\n    for(var opt in prolog.options) {\n      if ( prolog.options.hasOwnProperty(opt) &&\n\t   !options.hasOwnProperty(opt) ) {\n\toptions[opt] = prolog.options[opt];\n      }\n    }\n\n    return new Pengine(options);\n  };\n\n  return prolog;\n});\n\n\n","(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/hint/templates-hint',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  var templatesMap = [];\n  var Pos = CodeMirror.Pos;\n\n  function startsWith(str, token) {\n    return str.slice(0, token.length).toUpperCase() == token.toUpperCase();\n  }\n\n  function DEBUG(topic) {\n    //console.log.apply(null, Array.slice(arguments, 1));\n  }\n\n  CodeMirror.templatesHint = {};\n\n  function getLabel(proposal) {\n    var template = proposal.template;\n    return document.createTextNode(template.name);\n  }\n\n  var ourMap = {\n    Tab : selectNextVariable,\n    Enter : function(cm) { selectNextVariable(cm, true) },\n    Esc : uninstall,\n    \"Ctrl-Space\": hintValue\n  }\n\n  function TemplateState() {\n    this.marked = [];\n    this.selectableMarkers = [];\n    this.varIndex = -1;\n  }\n\n  function isNested(cm) {\n    return cm._templateStack ? cm._templateStack.length : 0;\n  }\n\n\n  // A Template instance represents an autocompletion template.\n  // It can be parsed from an eclipse-type template string,\n  // or supplied with a pre-parsed token array.\n  //\n  // The token array may consist of the following tokens:\n  //   \"\\n\" (newline character)\n  //       Single newline character per token.\n  //   text (string)\n  //       Normal text, no newline characters allowed.\n  //   { variable: \"name\" }\n  //       Variable token, to be populated by the user.\n  //   { cursor: true }\n  //       The cursor will be placed here after completing the template\n  //   { line_separator: true }\n  //       If the template surrounds existing text, the existing text will be\n  //       placed here. Not implemented currently.\n  function Template(data) {\n    this.name = data.name; // Optional\n    this.description = data.description; // Optional\n    this.text = data.text; // Optional\n    if ( data.varTemplates ) {\n      this.varTemplates = data.varTemplates;\n    }\n    if(data.template != null) {\n      this.source = data.template;\n    } else if(data.tokens != null) {\n      this._tokens = data.tokens;\n    }\n  }\n\n  Template.prototype.tokens = function() {\n    if(this._tokens == null) {\n      this._tokens = parseTemplate(this.source);\n    }\n    return this._tokens;\n  };\n\n  Template.prototype.content = function() {\n    if(this._content == null) {\n      var tokens = this.tokens();\n      var content = '';\n      for ( var i = 0; i < tokens.length; i++) {\n        var token = tokens[i];\n        if (typeof token == 'string') {\n          content += token;\n        } else if (token.variable) {\n          content += token.variable;\n        } else {\n          // Ignore special tokens\n        }\n      }\n      this._content = content;\n    }\n    return this._content;\n  };\n\n  function parseTemplate(content) {\n    var tokens = [];\n    var varParsing = false;\n    var last = null;\n    var token = '';\n    for ( var i = 0; i < content.length; i++) {\n      var current = content.charAt(i);\n      if (current == \"\\n\") {\n        if (token != '') {\n          tokens.push(token);\n        }\n        token = '';\n        tokens.push(current);\n        last = null;\n      } else {\n        var addChar = true;\n        if (varParsing) {\n          if (current == \"}\") {\n            varParsing = false;\n            addChar = false;\n            if(token == 'cursor') {\n              tokens.push({\n                \"cursor\" : true\n              });\n            } else if(token == 'line_selection') {\n              tokens.push({\n                \"line_selection\" : true\n              });\n            } else {\n              tokens.push({\n                \"variable\" : token\n              });\n            }\n            token = '';\n          }\n        } else {\n          if (current == \"$\" && (i + 1) <= content.length) {\n            i++;\n            var next = content.charAt(i);\n            if (next == \"{\") {\n              varParsing = true;\n              addChar = false;\n              if (token != '') {\n                tokens.push(token);\n              }\n              token = '';\n            }\n          }\n\n        }\n        if (addChar && last != \"$\") {\n          token += current;\n          last = current;\n        } else {\n          last = null;\n        }\n      }\n    }\n    if (token != '') {\n      tokens.push(token);\n    }\n    return tokens;\n  }\n\n\n  function getMarkerChanged(cm, textChanged) {\n    var markers = cm.findMarksAt(textChanged.from);\n    if (markers) {\n      for ( var i = 0; i < markers.length; i++) {\n        var marker = markers[i];\n        if (marker._templateVar) {\n          return marker;\n        }\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Track changes.  If the change is outside any template variable,\n   * uninstall() the template editing.  If it is inside, see whether\n   * there are any other template variables with the same name and\n   * update them accordingly.\n   */\n  function onChange(cm, textChanged) {\n    var state = cm._templateState;\n    if (!textChanged.origin || !state || state.updating) {\n      return;\n    }\n    try {\n      state.updating = true;\n      var markerChanged = getMarkerChanged(cm, textChanged);\n      if (markerChanged == null) {\n        uninstall(cm);\n      } else {\n        var posChanged = markerChanged.find();\n        var newContent = cm.getRange(posChanged.from, posChanged.to);\n        for ( var i = 0; i < state.marked.length; i++) {\n          var marker = state.marked[i];\n          if (marker != markerChanged\n              && marker._templateVar == markerChanged._templateVar) {\n            var pos = marker.find();\n            cm.replaceRange(newContent, pos.from, pos.to);\n          }\n        }\n      }\n    } finally {\n      state.updating = false;\n    }\n  }\n\n  function onEndCompletion(cm) {\n    DEBUG(\"template\", \"endCompletion()\", isNested(cm));\n    if ( isNested(cm) )\n      uninstall(cm, true);\n  }\n\n  function selectNextVariable(cm, exitOnEnd) {\n    var state = cm._templateState;\n    if (state.selectableMarkers.length > 0) {\n      state.varIndex++;\n      if (state.varIndex >= state.selectableMarkers.length) {\n        // If we reach the last token and exitOnEnd is true, we exit instead of\n        // looping back to the first token.\n        if (exitOnEnd) {\n          exit(cm);\n          return;\n        }\n        state.varIndex = 0;\n      }\n      var marker = state.selectableMarkers[state.varIndex];\n      var pos = marker.find();\n      cm.setSelection(pos.from, pos.to);\n      var templateVar = marker._templateVar;\n      for ( var i = 0; i < state.marked.length; i++) {\n        var m = state.marked[i];\n        if (m == marker) {\n          m.className = \"\";\n          m.startStyle = \"\";\n          m.endStyle = \"\";\n        } else {\n          if (m._templateVar == marker._templateVar) {\n            m.className = \"CodeMirror-templates-variable-selected\";\n            m.startStyle = \"\";\n            m.endStyle = \"\";\n          } else {\n            m.className = \"CodeMirror-templates-variable\";\n            m.startStyle = \"CodeMirror-templates-variable-start\";\n            m.endStyle = \"CodeMirror-templates-variable-end\";\n          }\n        }\n      }\n      cm.refresh();\n    } else {\n      // No tokens - exit.\n      exit(cm);\n    }\n  }\n\n  /**\n   * Recursively use hinting for the values\n   */\n  function hintValue(cm) {\n    var state  = cm._templateState;\n    var marker = state.selectableMarkers[state.varIndex];\n    var prev   = {state:state};\n\n    if ( cm._hintTemplateMarker )\n      prev.marker = cm._hintTemplateMarker;\n\n    if ( !cm._templateStack )\n      cm._templateStack = [];\n    cm._templateStack.push(prev);\n    delete cm._templateState;\n\n    function samePos(p1, p2) {\n      return p1.ch == p2.ch && p1.line == p2.line;\n    }\n\n    cm._hintTemplateMarker = marker;\n    var pos = marker.find();\n    var sels = cm.listSelections();\n    if ( sels.length == 1 &&\n\t samePos(sels[0].anchor, pos.from) &&\n\t samePos(sels[0].head,   pos.to) ) {\n      cm.replaceRange(\"\\u2630\", pos.from, pos.to);\n    }\n\n    CodeMirror.commands.autocomplete(cm);\n  }\n\n  Template.prototype.insert = function(cm, data) {\n    var template = this;\n    var nested = isNested(cm);\n\n    DEBUG(\"template\", \"Insert, nested\", nested, \"template\", template);\n    if ( cm._templateState || nested ) {\n      DEBUG(\"template\", \"Uninstall from insert()\", nested);\n      uninstall(cm);\n    }\n\n    if ( template.text ) {\n      cm.replaceRange(template.text, data.from, data.to);\n      return;\n    }\n\n    var state = new TemplateState();\n    cm._templateState = state;\n\n    var tokens = this.tokens();\n    var content = '';\n    var line = data.from.line;\n    var col = data.from.ch;\n    var markers = [];\n    var variables = [];\n    var cursor = null;\n    for ( var i = 0; i < tokens.length; i++) {\n      var token = tokens[i];\n      if(typeof token == 'string') {\n        content += token;\n        if (token == \"\\n\") {\n          line++;\n          col = 0;\n        } else {\n          col += token.length;\n        }\n      } else if (token.variable) {\n        content += token.variable;\n        var from = Pos(line, col);\n        var to = Pos(line, col\n            + token.variable.length);\n        var selectable = variables[token.variable] != false;\n        col += token.variable.length;\n        markers.push({\n          from : from,\n          to : to,\n          variable : token.variable,\n          selectable : selectable\n        });\n        variables[token.variable] = false;\n      } else if(token.cursor) {\n        cursor = Pos(line, col);\n      } else {\n        // Unhandled tokens, e.g. line_selection. Ignore.\n      }\n    }\n\n    var from = data.from;\n    var to = data.to;\n    var startLine = from.line;\n    cm.replaceRange(content, from, to);\n\n    for ( var i = 0; i < markers.length; i++) {\n      function subTemplate(tvar) {\n\tif ( template.varTemplates && template.varTemplates[tvar] )\n\t  return template.varTemplates[tvar];\n\treturn undefined;\n      }\n\n      var marker = markers[i], from = marker.from, to = marker.to;\n      var markText = cm.markText(from, to, {\n        className : \"CodeMirror-templates-variable\",\n        startStyle : \"CodeMirror-templates-variable-start\",\n        endStyle : \"CodeMirror-templates-variable-end\",\n        inclusiveLeft : true,\n        inclusiveRight : true,\n        clearWhenEmpty: false,  // Works in CodeMirror 4.6\n        _templateVar : marker.variable,\n\t_templates : subTemplate(marker.variable)\n      });\n      state.marked.push(markText);\n      if (marker.selectable == true) {\n        state.selectableMarkers.push(markText);\n      }\n    }\n\n    if (cursor != null) {\n      state.cursor = cm.setBookmark(cursor);\n    }\n\n    // Auto-indent everything except the first line.\n    // This will typically indent the rest of the code according\n    // to the indentation of the first line.\n    // We do the indentation after creating the markers, so that the\n    // markers are moved accordingly.\n    var lines = content.split(\"\\n\");\n    for ( var x = 1; x < lines.length; x++) {\n      var targetLine = startLine + x;\n      cm.indentLine(targetLine);\n    }\n\n    // Have to be before selectNextVariable, since selectNextVariable\n    // may exit and remove the keymap again.\n    if ( !nested ) {\n      cm.on(\"change\", onChange);\n      DEBUG(\"template\", \"Installing endCompletion\");\n      cm.on(\"endCompletion\", onEndCompletion);\n      cm.addKeyMap(ourMap);\n    }\n\n    selectNextVariable(cm, true);\n  }\n\n  function exit(cm) {\n    // Move to ${cursor} in the template, then uninstall.\n    var cursor = cm._templateState.cursor;\n    if (cursor != null) {\n      var cursorPos = cursor.find();\n      if (cursorPos != null) {\n        cm.setSelection(cursorPos, cursorPos);\n      }\n    }\n    uninstall(cm);\n  }\n\n  function uninstall(cm, canceled) {\n    var state = cm._templateState;\n\n    function canceledMarker() {\n      DEBUG(\"template\", \"Canceled?\");\n\n      for ( var i = 0; i < state.marked.length; i++) {\n\tvar mark = state.marked[i];\n\tif ( mark == cm._hintTemplateMarker ) {\n\t  var pos = mark.find();\n\t  if ( pos && cm.getRange(pos.from, pos.to) == \"\\u2630\" )\n\t    cm.replaceRange(mark._templateVar, pos.from, pos.to);\n\t}\n      }\n    }\n\n    if ( state ) {\n      DEBUG(\"template\", \"Uninstall, clearing: \", state.marked.length);\n      for ( var i = 0; i < state.marked.length; i++) {\n\tstate.marked[i].clear();\n      }\n      if (state.cursor != null) {\n\tstate.cursor.clear();\n      }\n      state.marked.length = 0;\n      state.selectableMarkers.length = 0;\n    } else {\n      DEBUG(\"template\", \"Uninstall, no state\");\n    }\n\n    if ( cm._templateStack && cm._templateStack.length > 0 ) {\n      DEBUG(\"template\", \"Popping from level\", cm._templateStack.length);\n      var prev = cm._templateStack.pop();\n      state = cm._templateState = prev.state;\n      if ( canceled && cm._hintTemplateMarker )\n\tcanceledMarker();\n      if ( prev.marker ) {\n\tcm._hintTemplateMarker = prev.marker;\n      } else {\n\tdelete cm._hintTemplateMarker;\n      }\n    } else {\n      DEBUG(\"template\", \"Leaving template mode\");\n      cm.off(\"change\", onChange);\n      cm.off(\"endCompletion\", onEndCompletion);\n      cm.removeKeyMap(ourMap);\n      delete cm._templateState;\n      delete cm._hintTemplateMarker;\n    }\n  }\n\n  CodeMirror.templatesHint.getCompletions = function(cm, completions, text) {\n    var mode = cm.doc.mode.name;\n    var list = templatesMap[mode];\n    if (list) {\n      for ( var i = 0; i < list.length; i++) {\n        var template = list[i];\n        if (startsWith(template.name, text)) {\n          var label = template.name;\n          if (template.description) {\n            label += '- ' + template.description;\n          }\n          var className = \"CodeMirror-hint-template\";\n          if (template.className)\n            className = template.className;\n          var completion = {\n            \"className\" : className,\n            \"text\" : label,\n            \"template\" : template,\n          };\n          completion.data = completion;\n          completion.hint = function(cm, data, completion) {\n            completion.template.insert(cm, data);\n          };\n          completion.info = function(completion) {\n            var content = completion.template.content();\n\n            if (CodeMirror.runMode) {\n              var result = document.createElement('div');\n              result.className = 'cm-s-default';\n              if (cm.options && cm.options.theme)\n                result.className = 'cm-s-' + cm.options.theme;\n              CodeMirror.runMode(content, cm.getMode().name, result);\n              return result;\n            }\n            return content;\n          };\n          completions.push(completion);\n        }\n      }\n    }\n  }\n\n  CodeMirror.templatesHint.Template = Template;\n\n  CodeMirror.templatesHint.addTemplates = function(templates) {\n    var context = templates.context;\n    if (context) {\n      var list = templatesMap[context];\n      if (!list) {\n        list = [];\n        templatesMap[context] = list;\n      }\n      templates.templates.forEach(function(template) {\n        list.push(new Template(template));\n      });\n    }\n  }\n\n});\n\n\n","// Loosely based on codemirror/addon/hint/xml-hint.js\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/prolog/prolog-template-hint',[ \"../../lib/codemirror\",\n\t     \"../../addon/hint/templates-hint\",\n\t     \"jquery\", \"config\", \"laconic\"\n\t   ], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror, TemplatesHint, $, config) {\n  \"use strict\";\n\n  var templates = config.swish.templates || [];\n\n  function PrologHint(options) {\n    var hint = this;\n\n    function modeToTemplate(mode) {\n      var varp = /[-+?:^@!]*([A-Z][A-Za-z_0-9]*)/g;\n      var detp = /\\bis\\s+(det|nondet|semidet|fail|multi)$/;\n\n      if ( !hint.template ) {\n\thint.template    = mode.replace(varp, \"$${$1}\")\n\t\t\t       .replace(detp, \"\");\n\tif ( !hint.template.match(/\\${cursor}/) )\n\t  hint.template += \"${cursor}\";\n      }\n\n      if ( !hint.displayText )\n\thint.displayText = mode;\n\n      if ( !hint.varTemplates ) {\n\tvar metav = mode.match(/:[A-Z][A-Za-z_0-9]*/g);\n\n\tif ( metav && metav.length > 0 ) {\n\t  var vt = {};\n\n\t  for(var i=0; i<metav.length; i++) {\n\t    vt[metav[i].substring(1)] = templates;\n\t  }\n\t  hint.varTemplates = vt;\n\t}\n      }\n    }\n\n    var copy = [ \"template\",\n\t\t \"displayText\",\n\t\t \"text\",\n\t\t {from:\"summary\", to:\"description\"},\n\t\t \"className\",\n\t\t \"varTemplates\"\n\t       ];\n\n    if ( typeof(options) == \"string\" ) {\n      this.displayText = options;\n      this.text = options;\n    } else {\n      for(var i=0; i<copy.length; i++) {\n\tvar spec = copy[i];\n\tif ( typeof(spec) == \"string\" ) {\n\t  if ( options[spec] )\n\t    this[spec] = options[spec];\n\t} else {\n\t  if ( options[spec.from] )\n\t    this[spec.to] = options[spec.from];\n\t}\n      }\n\n      if ( options.mode )\n\tmodeToTemplate(options.mode);\n\n      if ( options.classes )\n\toptions.className = options.classes.join(\" \");\n    }\n\n    /**\n     * Render a completion label inside a <li>.  This hook is called\n     * from standard CM addons/hint/show-hint.js to render the hinting\n     * alternatives.\n     * @param li is the list element\n     * @param data seems to be the result from getHints()\n     * @param me is this PrologHint instance\n     */\n    this.render = function(li, data, me) {\n      $(li).append(me.displayText);\n    }\n    /**\n     * Provide an HTML string or element that describes the completion.\n     * used by addon/hint/show-context-info.js\n     * @param me is this PrologHint instance\n     */\n    this.info = function(me) {\n      return me.description;\n    }\n  }\n\n  PrologHint.prototype.hint = function(cm, data, completion) {\n    var template = new CodeMirror.templatesHint.Template(this);\n    template.insert(cm, data);\n  };\n\n  function hintsFor(cm, state, options) {\n    var text = state.token.string;\n    var results = [];\n    var myTemplates = templates;\n\n    function startsWith(str, start) {\n      return str.slice(0, start.length) == start;\n    }\n\n    if ( cm._hintTemplateMarker ) {\n      if ( text == \"\\u2630\" )\n\ttext = \"\";\n      myTemplates = cm._hintTemplateMarker._templates;\n    }\n\n    var symbol = text.length > 0 && !text.match(/\\w/);\n\n    if ( myTemplates ) {\n      for(var i=0; i<myTemplates.length; i++) {\n\tvar templ = myTemplates[i];\n\tif ( typeof(templ) == \"string\" ) {\n\t  if ( startsWith(templ, text) )\n\t    results.push(new PrologHint(templ));\n\t} else {\n\t  var fields = [\"name\", \"mode\", \"template\", \"text\"];\n\n\t  if ( symbol ) {\n\t    if ( templ.name && templ.name.indexOf(text) >= 0 )\n\t      results.push(new PrologHint(templ));\n\t  } else {\n\t    for(var j=0; j<fields.length; j++) {\n\t      if ( templ[fields[j]] )\n\t      { if ( startsWith(templ[fields[j]], text) ) {\n\t\t  results.push(new PrologHint(templ));\n\t        }\n\t\tbreak;\n\t      }\n\t    }\n\t  }\n\t}\n      }\n    }\n\n    if ( results.length == 0 ) {\t/* Include AnyWord hinting completions */\n      var anyword = CodeMirror.hint.anyword;\n      var opts = (text==\"\"&&cm._hintTemplateMarker) ?\n\t\t  { word: /[A-Z][A-Za-z0-9_]*/ } : options;\n      var anyhint = anyword(cm, opts);\n      for(var i=0; i<anyhint.list.length; i++)\n\tresults.push(new PrologHint(anyhint.list[i]));\n    }\n\n    return { list: results,\n             from: state.position.from,\n\t     to:   state.position.to\n           };\n  }\n\n  function getHints(cm, callback, options) {\n    var state = getState(cm);\n  //console.log(state);\n    var data  = hintsFor(cm, state, options);\n    CodeMirror.attachContextInfo(data);\n    callback(data);\n  }\n  getHints.async = true;\n\n  function getState(cm) {\n    var cur = cm.getCursor();\n    var token = cm.getTokenAt(cur);\n//  var enriched = cm.getEnrichedToken(token);\n    var inner = CodeMirror.innerMode(cm.getMode(), token.state);\n    if (inner.mode.name != \"prolog\") {\n      return null;\n    }\n\n    var tokenPosition = {\n      from: new CodeMirror.Pos(cur.line, token.start),\n      to:   new CodeMirror.Pos(cur.line, token.end)\n    };\n\n    return { token:    token,\n\t     position: tokenPosition\n           };\n  }\n\n  CodeMirror.registerHelper(\"hint\", \"prologTemplate\", getHints);\n\n  return {\n    getHints: getHints,\n    getState: getState\n  };\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Dialog components to interact with the gitty store.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('gitty',[ \"jquery\", \"config\", \"form\", \"modal\", \"laconic\" ],\n       function($, config, form, modal) {\n\n(function($) {\n  var pluginName = 'gitty';\n\n  /** @lends $.fn.gitty */\n  var methods = {\n    /**\n     * @param {Object} options\n     * @param {Object.meta} provides the gitty meta-data\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName)||{};\n\tvar meta = options.meta;\n\tvar tabs;\n\n\tdata.commits = [];\n\tdata.commits[meta.commit] = meta;\n\tdata.commit  = meta.commit;\n\tdata.editor  = options.editor;\n\n\tfunction tab(label, active, id, disabled) {\n\t  var attrs = {role:\"presentation\"};\n\t  var classes = [];\n\t  if ( active   ) classes.push(\"active\");\n\t  if ( disabled ) classes.push(\"disabled\");\n\t  if ( classes != [] )\n\t    attrs.class = classes.join(\" \");\n\t  var elem =\n\t  $.el.li(attrs, $.el.a({href:\"#\"+id, 'data-toggle':\"tab\"}, label));\n\t  return elem;\n\t}\n\n\thenabled = !Boolean(meta.previous);\n\ttabs     = $($.el.div({class:\"tab-content\"}));\n\n\telem.append($.el.ul(\n\t  {class:\"nav nav-tabs\"},\n\t  tab(\"Meta data\", true,  \"gitty-meta-data\"),\n\t  tab(\"History\",   false, \"gitty-history\",  henabled),\n\t  tab(\"Changes\",   false, \"gitty-diff\",     henabled)));\n\telem.append(tabs);\n\n\t/* meta-data tab */\n\ttabs.append($.el.div({ class:\"tab-pane fade in active gitty-meta-data\",\n\t                       id:\"gitty-meta-data\"}));\n\telem.find('[href=\"#gitty-meta-data\"]').on(\"show.bs.tab\", function(ev) {\n\t  elem.gitty('showMetaData');\n\t});\n\n\t/* history tab */\n\ttabs.append($.el.div({ class:\"tab-pane fade gitty-history\",\n\t                       id:\"gitty-history\"}));\n\telem.find('[href=\"#gitty-history\"]').on(\"show.bs.tab\", function(ev) {\n\t  elem.gitty('showHistory');\n\t});\n\n\t/* diff/changes tab */\n\ttabs.append($.el.div({ class:\"tab-pane fade gitty-diff\",\n\t                       id:\"gitty-diff\"}));\n\telem.find('[href=\"#gitty-diff\"]').on(\"show.bs.tab\", function(ev) {\n\t  elem.gitty('showDiff');\n\t});\n\n\telem.data(pluginName, data);\n\n\telem.gitty('showMetaData');\n      });\n    },\n\n    /**\n     * @param is the gitty meta-object\n     * @return {DOM} node holding the title\n     */\n    title: function(meta) {\n      var title = $.el.span(\"File \", $.el.span({class:\"filename\"}, meta.name));\n      if ( meta.symbolic != \"HEAD\" && meta.commit )\n\t$(title).append(\"@\", $.el.span({class:\"sha1 abbrev\"},\n\t\t\t\t       meta.commit.substring(0,7)));\n\n      return title;\n    },\n\n\n\t\t /*******************************\n\t\t *\t     META DATA\t\t*\n\t\t *******************************/\n\n    /**\n     * Show meta data for the current version.  If this is the HEAD,\n     * allow updating the meta-data\n     */\n    showMetaData: function() {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName);\n\tvar tab  = elem.find(\".gitty-meta-data\");\n\tvar formel;\n\tvar meta = data.commits[data.commit];\n\n\tif ( data.metaData == data.commit )\n\t  return;\n\tdata.metaData = data.commit;\n\n\ttab.html(\"\");\n\tformel = $.el.form({class:\"form-horizontal\"},\n\t\t      form.fields.fileName(meta.name, meta.public, meta.example,\n\t\t\t\t\t   true), // disabled\n\t\t      form.fields.title(meta.title),\n\t\t      form.fields.author(meta.author),\n\t\t      form.fields.date(meta.time, \"Date\", \"date\"),\n\t\t      form.fields.tags(meta.tags));\n\n\tif ( meta.symbolic == \"HEAD\" ) {\n\t  $(formel).append(\n\t      form.fields.buttons(\n\t\t{ label: \"Update meta data\",\n\t\t  action: function(ev, newMetaData) {\n\t\t    data.editor.storage('save', newMetaData, \"only-meta-data\");\n\t\t    return false;\n\t\t  }\n\t\t}));\n\t}\n\n\ttab.append(formel);\n      });\n    },\n\n\n\t\t /*******************************\n\t\t *\t     COMMIT LOG\t\t*\n\t\t *******************************/\n\n    /**\n     * Fill the commit log tab\n     */\n    showHistory: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName);\n\tvar tab  = elem.find(\".gitty-history\");\n\tvar meta = data.commits[data.commit];\n\tvar playButton;\n\n\tif ( data.history )\n\t  return;\n\n\toptions = options||{};\n\tif ( !options.depth )\n\t  options.depth = 100;\n\n\ttab.html(\"\");\n\ttab.append($.el.div({class:\"gitty-history-table\"},\n\t\t\t    $.el.table(\n\t  { class:\"table table-striped table-condensed gitty-history\",\n\t    'data-click-to-select':true,\n\t    'data-single-select':true\n\t  },\n\t  $.el.tr($.el.th(\"Comment\"),\n\t\t  $.el.th(\"Date\"),\n\t\t  $.el.th(\"User\"),\n\t\t  $.el.th(\"Changed\")),\n\t  $.el.tbody())));\n\n\tplayButton = form.widgets.glyphIconButton(\n           \"play\",\n\t   { title:\"Open the highlighted version in SWISH\",\n\t     class:\"btn-primary\"\n\t   });\n\ttab.append(playButton);\n\t$(playButton).on(\"click\", function(ev) {\n\t  var row = elem.find(\"tr.success\");\n\t  if ( row.length == 1 ) {\n\t    var commit = row.data('commit');\n\n\t    if ( data.commits[commit].symbolic == \"HEAD\" )\n\t      file = data.commits[commit].name;\n\t    else\n\t      file = commit;\n\n\t    elem.parents(\".swish\").swish('playFile', file);\n\t    $(\"#ajaxModal\").modal('hide');\n\t  }\n\t  return false;\n\t});\n\n\tvar url  = config.http.locations.web_storage\n\t\t + encodeURI(meta.name);\n\n\t$.ajax({ url: url,\n\t\t contentType: \"application/json\",\n\t\t type: \"GET\",\n\t\t data: { format: \"history\",\n\t\t         depth: options.depth,\t/* might skip last */\n\t\t         to: data.commit\n\t\t       },\n\t\t success: function(reply) {\n\t\t   elem.gitty('fillHistoryTable', reply);\n\t\t   data.history = data.commit;\n\t\t },\n\t\t error: function(jqXHDR) {\n\t\t   modal.ajaxError(jqXHR);\n\t\t }\n\t       });\n      });\n    },\n\n    /**\n     * Fill the history table\n     */\n    fillHistoryTable: function(historyobj) {\n      var gitty = this;\n      var data  = this.data(pluginName);\n      var table = this.find(\".table.gitty-history tbody\");\n      var history = historyobj.history ? historyobj.history : historyobj;\n\n      for(var i=0; i<history.length; i++) {\n\tvar h = history[i];\n\n\tif ( !data.commits[h.commit] )\n\t  data.commits[h.commit] = h;\n      }\n\n      function changedAttributes(m1) {\n\tvar m2, diff;\n\tvar elem = $.el.span();\n\n\tif ( m1.previous ) {\n\t  if ( (m2 = data.commits[m1.previous]) &&\n\t       (diff = diffMeta(m1, m2)) ) {\n\t    var change = 0;\n\n\t    for( var d in diff ) {\n\t      if ( diff.hasOwnProperty(d) ) {\n\t\tvar ch = (d == \"name\" ? \"forked \"+m2.name : d);\n\t\t$(elem).append((change++ == 0 ? undefined : \", \"),\n\t\t\t       $.el.span({class:\"change-type\"}, ch));\n\t      }\n\t    }\n\t  }\n\t} else {\n\t  $(elem).append(\"initial\");\n\t}\n\n\treturn elem;\n      }\n\n      if ( historyobj.skipped ) {\n\ttable.append($.el.tr(\n\t  $.el.td({class:\"skipped-commits\",\n\t           colspan:4},\n\t\t  \"(Skipped \"+historyobj.skipped+\" commits)\")));\n      }\n\n      for(var i=0; i<history.length; i++) {\n\tvar h = history[i];\n\tvar tr;\n\n\tif ( i == history.length-1 &&\n\t     h.previous && !data.commit[h.previous] )\n\t  break;\n\n\tvar attrs = {'data-commit':h.commit};\n\tif ( data.commit == h.commit )\n\t  attrs.class = \"success\";\n\n\ttr = $.el.tr(attrs,\n\t\t     h.commit_message ?\n\t\t       $.el.td({class:\"commit-message\"},\n\t\t\t       h.commit_message) :\n\t\t       $.el.td({class:\"commit-message no-comment\"},\n\t\t\t       \"No comment\"),\n\t\t     $.el.td({class:\"date\"},\n\t\t\t     new Date(h.time*1000).toLocaleString()),\n\t\t     $.el.td({class:\"author\"},\n\t\t\t     h.author||\"No author\"),\n\t\t     $.el.td({class:\"changes\"},\n\t\t\t     changedAttributes(h)));\n\ttable.append(tr);\n      }\n\n      table.on(\"click\", \"tr\", function(ev) {\n\tvar tr = $(ev.target).parents(\"tr\");\n\tvar commit = tr.data('commit');\n\n\tgitty.gitty('setCommit', commit);\n      });\n    },\n\n    /**\n     * Select a row in the table and set the title.\n     * @param {String} version is the SHA1 of the new version\n     */\n\n    setCommit: function(commit) {\n      var data = this.data(pluginName);\t/* private data */\n      var h2   = this.parent(\".modal-content\").find(\"h2\");\n\n      h2.html(\"\");\n      h2.append(this.gitty('title', data.commits[commit]));\n      this.find(\"tr.success\").removeClass(\"success\");\n      this.find(\"tr[data-commit=\"+commit+\"]\").addClass(\"success\");\n      data.commit = commit;\n\n      return this;\n    },\n\n\t\t /*******************************\n\t\t *\t       DIFFS\t\t*\n\t\t *******************************/\n\n    /**\n     * Show diff of a given file\n     * @param {Object} options\n     * @param {String} options.file is the file for which to show diffs\n     * @param {String} [options.base] is the base SHA1 (defaults to\n     * HEAD^)\n     */\n\n    showDiff: function() {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName);\n\n\tif ( data.diff == data.commit )\n\t  return;\n\n\telem.find(\".gitty-diff\").html(\"\");\n\tvar url  = config.http.locations.web_storage\n\t\t + encodeURI(data.commit);\n\n\t$.ajax({ url: url,\n\t\t contentType: \"application/json\",\n\t\t type: \"GET\",\n\t\t data: { format: \"diff\"\n\t\t },\n\t\t success: function(reply) {\n\t\t   elem.gitty('fillDiff', reply);\n\t\t   data.diff = data.commit;\n\t\t },\n\t\t error: function(jqXHR) {\n\t\t   modal.ajaxError(jqXHR);\n\t\t }\n\t       });\n      });\n    },\n\n    fillDiff: function(diff) {\n      if ( diff.tags ) this.gitty('diffTags', diff.tags);\n      if ( diff.data ) this.gitty('udiffData', diff.data);\n    },\n\n    diffTags: function(diff) {\n      var tab  = this.find(\".gitty-diff\");\n      var div = $($.el.div({class:\"diff-tags\"},\n\t\t\t    $.el.label(\"Tags\")));\n      var span = $($.el.span({class:\"diff-tags\"}));\n\n      div.append(span);\n\n      function addTag(tag, className) {\n\tspan.append($.el.span({class: \"diff-tag \"+className}, tag));\n      }\n\n      if ( diff.deleted.length ) {\n\tspan.append(\"Removed: \");\n\tfor(var i=0; i<diff.deleted.length; i++)\n\t  addTag(diff.deleted[i], \"deleted\");\n      }\n      if ( diff.added.length ) {\n\tspan.append(diff.deleted.length ? \", \" : \"\", \"Added: \");\n\tfor(var i=0; i<diff.added.length; i++)\n\t  addTag(diff.added[i], \"added\");\n      }\n\n      tab.append(div);\n\n      return this;\n    },\n\n    udiffData: function(diff) {\n      var tab  = this.find(\".gitty-diff\");\n      var lines = diff.split(\"\\n\");\n      var pre = $($.el.pre({class:\"udiff\"}));\n\n      for(var i=0; i<lines.length; i++) {\n\tvar line = lines[i];\n\tvar classmap = { '@': 'udiff-hdr',\n\t\t\t ' ': 'udiff-ctx',\n\t\t\t '+': 'udiff-add',\n\t\t\t '-': 'udiff-del'\n\t\t       };\n\tpre.append($.el.span({class:classmap[line.charAt(0)]}, line),\n\t\t   $.el.br());\n      }\n\n      tab.append(pre);\n    }\n  }; // methods\n\n  /**\n   * <Class description>\n   *\n   * @class gitty\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.gitty = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n  /**\n   * Diff meta data\n   * @returns {Object|null}, where object holds `author`, `title` and/or\n   * `tags`\n   */\n\n  function diffMeta(m1, m2) {\n    var diff = {};\n\n    function diffAttr(a) {\n      if ( (m1[a] || m2[a]) && m1[a] != m2[a] )\n\tdiff[a] = {from: m1[a], to: m2[a]};\n    }\n\n    diffAttr(\"author\");\n    diffAttr(\"title\");\n    diffAttr(\"data\");\n    diffAttr(\"public\");\n    diffAttr(\"example\");\n    diffAttr(\"name\");\n\n    if ( (d=diffTags(m1.tags, m2.tags)) )\n      diff.tags = d;\n\n    return $.isEmptyObject(diff) ? null : diff;\n  }\n\n  function reduceMeta(meta, old) {\n    var r = {};\n\n    for( var k in meta ) {\n      if ( meta.hasOwnProperty(k) ) {\n\tswitch(typeof(meta[k])) {\n\t  case \"object\":\n\t    if ( $.isArray(meta[k]) ) {\n\t      if ( !diffTags(meta[k], old[k]) )\n\t\tcontinue;\n\t    }\n\t    break;\n\t  case \"string\":\n\t  case \"boolean\":\n\t    if ( old[k] == meta[k] )\n\t      continue;\n\t}\n\n\tr[k] = meta[k];\n      }\n    }\n\n    return r;\n  }\n\n  /**\n   * Diff two tag arrays (arrays of strings)\n   * @returns {Object|null}, where object.added is an array with new\n   * tags and object.deleted contains deleted tags.\n   */\n  function diffTags(t1, t2) {\n    var d, diff = {};\n\n    t1 = t1||[];\n    t2 = t2||[];\n\n    function added(t1, t2) {\n      var a = [];\n\n      for(var i=0; i<t2.length; i++) {\n\tif ( t1.indexOf(t2[i]) < 0 )\n\t  a.push(t2[i]);\n      }\n\n      return a;\n    }\n\n    if ( (d=added(t1,t2)).length > 0 ) diff.added = d;\n    if ( (d=added(t2,t1)).length > 0 ) diff.deleted = d;\n\n    return $.isEmptyObject(diff) ? null : diff;\n  }\n\n  return {\n    diffMeta:   diffMeta,\n    reduceMeta: reduceMeta,\n    diffTags:   diffTags\n  };\n});\n\n","/***\nThis is part of jsdifflib v1.0. <http://snowtide.com/jsdifflib>\n\nCopyright (c) 2007, Snowtide Informatics Systems, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n\t* Redistributions of source code must retain the above copyright notice, this\n\t\tlist of conditions and the following disclaimer.\n\t* Redistributions in binary form must reproduce the above copyright notice,\n\t\tthis list of conditions and the following disclaimer in the documentation\n\t\tand/or other materials provided with the distribution.\n\t* Neither the name of the Snowtide Informatics Systems nor the names of its\n\t\tcontributors may be used to endorse or promote products derived from this\n\t\tsoftware without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n***/\n/* Author: Chas Emerick <cemerick@snowtide.com> */\nvar __whitespace = {\" \":true, \"\\t\":true, \"\\n\":true, \"\\f\":true, \"\\r\":true};\n\nvar difflib = {\n\tdefaultJunkFunction: function (c) {\n\t\treturn __whitespace.hasOwnProperty(c);\n\t},\n\t\n\tstripLinebreaks: function (str) { return str.replace(/^[\\n\\r]*|[\\n\\r]*$/g, \"\"); },\n\t\n\tstringAsLines: function (str) {\n\t\tvar lfpos = str.indexOf(\"\\n\");\n\t\tvar crpos = str.indexOf(\"\\r\");\n\t\tvar linebreak = ((lfpos > -1 && crpos > -1) || crpos < 0) ? \"\\n\" : \"\\r\";\n\t\t\n\t\tvar lines = str.split(linebreak);\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tlines[i] = difflib.stripLinebreaks(lines[i]);\n\t\t}\n\t\t\n\t\treturn lines;\n\t},\n\t\n\t// iteration-based reduce implementation\n\t__reduce: function (func, list, initial) {\n\t\tif (initial != null) {\n\t\t\tvar value = initial;\n\t\t\tvar idx = 0;\n\t\t} else if (list) {\n\t\t\tvar value = list[0];\n\t\t\tvar idx = 1;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t\t\n\t\tfor (; idx < list.length; idx++) {\n\t\t\tvalue = func(value, list[idx]);\n\t\t}\n\t\t\n\t\treturn value;\n\t},\n\t\n\t// comparison function for sorting lists of numeric tuples\n\t__ntuplecomp: function (a, b) {\n\t\tvar mlen = Math.max(a.length, b.length);\n\t\tfor (var i = 0; i < mlen; i++) {\n\t\t\tif (a[i] < b[i]) return -1;\n\t\t\tif (a[i] > b[i]) return 1;\n\t\t}\n\t\t\n\t\treturn a.length == b.length ? 0 : (a.length < b.length ? -1 : 1);\n\t},\n\t\n\t__calculate_ratio: function (matches, length) {\n\t\treturn length ? 2.0 * matches / length : 1.0;\n\t},\n\t\n\t// returns a function that returns true if a key passed to the returned function\n\t// is in the dict (js object) provided to this function; replaces being able to\n\t// carry around dict.has_key in python...\n\t__isindict: function (dict) {\n\t\treturn function (key) { return dict.hasOwnProperty(key); };\n\t},\n\t\n\t// replacement for python's dict.get function -- need easy default values\n\t__dictget: function (dict, key, defaultValue) {\n\t\treturn dict.hasOwnProperty(key) ? dict[key] : defaultValue;\n\t},\t\n\t\n\tSequenceMatcher: function (a, b, isjunk) {\n\t\tthis.set_seqs = function (a, b) {\n\t\t\tthis.set_seq1(a);\n\t\t\tthis.set_seq2(b);\n\t\t}\n\t\t\n\t\tthis.set_seq1 = function (a) {\n\t\t\tif (a == this.a) return;\n\t\t\tthis.a = a;\n\t\t\tthis.matching_blocks = this.opcodes = null;\n\t\t}\n\t\t\n\t\tthis.set_seq2 = function (b) {\n\t\t\tif (b == this.b) return;\n\t\t\tthis.b = b;\n\t\t\tthis.matching_blocks = this.opcodes = this.fullbcount = null;\n\t\t\tthis.__chain_b();\n\t\t}\n\t\t\n\t\tthis.__chain_b = function () {\n\t\t\tvar b = this.b;\n\t\t\tvar n = b.length;\n\t\t\tvar b2j = this.b2j = {};\n\t\t\tvar populardict = {};\n\t\t\tfor (var i = 0; i < b.length; i++) {\n\t\t\t\tvar elt = b[i];\n\t\t\t\tif (b2j.hasOwnProperty(elt)) {\n\t\t\t\t\tvar indices = b2j[elt];\n\t\t\t\t\tif (n >= 200 && indices.length * 100 > n) {\n\t\t\t\t\t\tpopulardict[elt] = 1;\n\t\t\t\t\t\tdelete b2j[elt];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tindices.push(i);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tb2j[elt] = [i];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor (var elt in populardict) {\n\t\t\t\tif (populardict.hasOwnProperty(elt)) {\n\t\t\t\t\tdelete b2j[elt];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar isjunk = this.isjunk;\n\t\t\tvar junkdict = {};\n\t\t\tif (isjunk) {\n\t\t\t\tfor (var elt in populardict) {\n\t\t\t\t\tif (populardict.hasOwnProperty(elt) && isjunk(elt)) {\n\t\t\t\t\t\tjunkdict[elt] = 1;\n\t\t\t\t\t\tdelete populardict[elt];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (var elt in b2j) {\n\t\t\t\t\tif (b2j.hasOwnProperty(elt) && isjunk(elt)) {\n\t\t\t\t\t\tjunkdict[elt] = 1;\n\t\t\t\t\t\tdelete b2j[elt];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tthis.isbjunk = difflib.__isindict(junkdict);\n\t\t\tthis.isbpopular = difflib.__isindict(populardict);\n\t\t}\n\t\t\n\t\tthis.find_longest_match = function (alo, ahi, blo, bhi) {\n\t\t\tvar a = this.a;\n\t\t\tvar b = this.b;\n\t\t\tvar b2j = this.b2j;\n\t\t\tvar isbjunk = this.isbjunk;\n\t\t\tvar besti = alo;\n\t\t\tvar bestj = blo;\n\t\t\tvar bestsize = 0;\n\t\t\tvar j = null;\n\t\t\tvar k;\n\t\n\t\t\tvar j2len = {};\n\t\t\tvar nothing = [];\n\t\t\tfor (var i = alo; i < ahi; i++) {\n\t\t\t\tvar newj2len = {};\n\t\t\t\tvar jdict = difflib.__dictget(b2j, a[i], nothing);\n\t\t\t\tfor (var jkey in jdict) {\n\t\t\t\t\tif (jdict.hasOwnProperty(jkey)) {\n\t\t\t\t\t\tj = jdict[jkey];\n\t\t\t\t\t\tif (j < blo) continue;\n\t\t\t\t\t\tif (j >= bhi) break;\n\t\t\t\t\t\tnewj2len[j] = k = difflib.__dictget(j2len, j - 1, 0) + 1;\n\t\t\t\t\t\tif (k > bestsize) {\n\t\t\t\t\t\t\tbesti = i - k + 1;\n\t\t\t\t\t\t\tbestj = j - k + 1;\n\t\t\t\t\t\t\tbestsize = k;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tj2len = newj2len;\n\t\t\t}\n\t\n\t\t\twhile (besti > alo && bestj > blo && !isbjunk(b[bestj - 1]) && a[besti - 1] == b[bestj - 1]) {\n\t\t\t\tbesti--;\n\t\t\t\tbestj--;\n\t\t\t\tbestsize++;\n\t\t\t}\n\t\t\t\t\n\t\t\twhile (besti + bestsize < ahi && bestj + bestsize < bhi &&\n\t\t\t\t\t!isbjunk(b[bestj + bestsize]) &&\n\t\t\t\t\ta[besti + bestsize] == b[bestj + bestsize]) {\n\t\t\t\tbestsize++;\n\t\t\t}\n\t\n\t\t\twhile (besti > alo && bestj > blo && isbjunk(b[bestj - 1]) && a[besti - 1] == b[bestj - 1]) {\n\t\t\t\tbesti--;\n\t\t\t\tbestj--;\n\t\t\t\tbestsize++;\n\t\t\t}\n\t\t\t\n\t\t\twhile (besti + bestsize < ahi && bestj + bestsize < bhi && isbjunk(b[bestj + bestsize]) &&\n\t\t\t\t\ta[besti + bestsize] == b[bestj + bestsize]) {\n\t\t\t\tbestsize++;\n\t\t\t}\n\t\n\t\t\treturn [besti, bestj, bestsize];\n\t\t}\n\t\t\n\t\tthis.get_matching_blocks = function () {\n\t\t\tif (this.matching_blocks != null) return this.matching_blocks;\n\t\t\tvar la = this.a.length;\n\t\t\tvar lb = this.b.length;\n\t\n\t\t\tvar queue = [[0, la, 0, lb]];\n\t\t\tvar matching_blocks = [];\n\t\t\tvar alo, ahi, blo, bhi, qi, i, j, k, x;\n\t\t\twhile (queue.length) {\n\t\t\t\tqi = queue.pop();\n\t\t\t\talo = qi[0];\n\t\t\t\tahi = qi[1];\n\t\t\t\tblo = qi[2];\n\t\t\t\tbhi = qi[3];\n\t\t\t\tx = this.find_longest_match(alo, ahi, blo, bhi);\n\t\t\t\ti = x[0];\n\t\t\t\tj = x[1];\n\t\t\t\tk = x[2];\n\t\n\t\t\t\tif (k) {\n\t\t\t\t\tmatching_blocks.push(x);\n\t\t\t\t\tif (alo < i && blo < j)\n\t\t\t\t\t\tqueue.push([alo, i, blo, j]);\n\t\t\t\t\tif (i+k < ahi && j+k < bhi)\n\t\t\t\t\t\tqueue.push([i + k, ahi, j + k, bhi]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tmatching_blocks.sort(difflib.__ntuplecomp);\n\t\n\t\t\tvar i1 = 0, j1 = 0, k1 = 0, block = 0;\n\t\t\tvar i2, j2, k2;\n\t\t\tvar non_adjacent = [];\n\t\t\tfor (var idx in matching_blocks) {\n\t\t\t\tif (matching_blocks.hasOwnProperty(idx)) {\n\t\t\t\t\tblock = matching_blocks[idx];\n\t\t\t\t\ti2 = block[0];\n\t\t\t\t\tj2 = block[1];\n\t\t\t\t\tk2 = block[2];\n\t\t\t\t\tif (i1 + k1 == i2 && j1 + k1 == j2) {\n\t\t\t\t\t\tk1 += k2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (k1) non_adjacent.push([i1, j1, k1]);\n\t\t\t\t\t\ti1 = i2;\n\t\t\t\t\t\tj1 = j2;\n\t\t\t\t\t\tk1 = k2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (k1) non_adjacent.push([i1, j1, k1]);\n\t\n\t\t\tnon_adjacent.push([la, lb, 0]);\n\t\t\tthis.matching_blocks = non_adjacent;\n\t\t\treturn this.matching_blocks;\n\t\t}\n\t\t\n\t\tthis.get_opcodes = function () {\n\t\t\tif (this.opcodes != null) return this.opcodes;\n\t\t\tvar i = 0;\n\t\t\tvar j = 0;\n\t\t\tvar answer = [];\n\t\t\tthis.opcodes = answer;\n\t\t\tvar block, ai, bj, size, tag;\n\t\t\tvar blocks = this.get_matching_blocks();\n\t\t\tfor (var idx in blocks) {\n\t\t\t\tif (blocks.hasOwnProperty(idx)) {\n\t\t\t\t\tblock = blocks[idx];\n\t\t\t\t\tai = block[0];\n\t\t\t\t\tbj = block[1];\n\t\t\t\t\tsize = block[2];\n\t\t\t\t\ttag = '';\n\t\t\t\t\tif (i < ai && j < bj) {\n\t\t\t\t\t\ttag = 'replace';\n\t\t\t\t\t} else if (i < ai) {\n\t\t\t\t\t\ttag = 'delete';\n\t\t\t\t\t} else if (j < bj) {\n\t\t\t\t\t\ttag = 'insert';\n\t\t\t\t\t}\n\t\t\t\t\tif (tag) answer.push([tag, i, ai, j, bj]);\n\t\t\t\t\ti = ai + size;\n\t\t\t\t\tj = bj + size;\n\t\t\t\t\t\n\t\t\t\t\tif (size) answer.push(['equal', ai, i, bj, j]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn answer;\n\t\t}\n\t\t\n\t\t// this is a generator function in the python lib, which of course is not supported in javascript\n\t\t// the reimplementation builds up the grouped opcodes into a list in their entirety and returns that.\n\t\tthis.get_grouped_opcodes = function (n) {\n\t\t\tif (!n) n = 3;\n\t\t\tvar codes = this.get_opcodes();\n\t\t\tif (!codes) codes = [[\"equal\", 0, 1, 0, 1]];\n\t\t\tvar code, tag, i1, i2, j1, j2;\n\t\t\tif (codes[0][0] == 'equal') {\n\t\t\t\tcode = codes[0];\n\t\t\t\ttag = code[0];\n\t\t\t\ti1 = code[1];\n\t\t\t\ti2 = code[2];\n\t\t\t\tj1 = code[3];\n\t\t\t\tj2 = code[4];\n\t\t\t\tcodes[0] = [tag, Math.max(i1, i2 - n), i2, Math.max(j1, j2 - n), j2];\n\t\t\t}\n\t\t\tif (codes[codes.length - 1][0] == 'equal') {\n\t\t\t\tcode = codes[codes.length - 1];\n\t\t\t\ttag = code[0];\n\t\t\t\ti1 = code[1];\n\t\t\t\ti2 = code[2];\n\t\t\t\tj1 = code[3];\n\t\t\t\tj2 = code[4];\n\t\t\t\tcodes[codes.length - 1] = [tag, i1, Math.min(i2, i1 + n), j1, Math.min(j2, j1 + n)];\n\t\t\t}\n\t\n\t\t\tvar nn = n + n;\n\t\t\tvar group = [];\n\t\t\tvar groups = [];\n\t\t\tfor (var idx in codes) {\n\t\t\t\tif (codes.hasOwnProperty(idx)) {\n\t\t\t\t\tcode = codes[idx];\n\t\t\t\t\ttag = code[0];\n\t\t\t\t\ti1 = code[1];\n\t\t\t\t\ti2 = code[2];\n\t\t\t\t\tj1 = code[3];\n\t\t\t\t\tj2 = code[4];\n\t\t\t\t\tif (tag == 'equal' && i2 - i1 > nn) {\n\t\t\t\t\t\tgroup.push([tag, i1, Math.min(i2, i1 + n), j1, Math.min(j2, j1 + n)]);\n\t\t\t\t\t\tgroups.push(group);\n\t\t\t\t\t\tgroup = [];\n\t\t\t\t\t\ti1 = Math.max(i1, i2-n);\n\t\t\t\t\t\tj1 = Math.max(j1, j2-n);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tgroup.push([tag, i1, i2, j1, j2]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (group && !(group.length == 1 && group[0][0] == 'equal')) groups.push(group)\n\t\t\t\n\t\t\treturn groups;\n\t\t}\n\t\t\n\t\tthis.ratio = function () {\n\t\t\tmatches = difflib.__reduce(\n\t\t\t\t\t\t\tfunction (sum, triple) { return sum + triple[triple.length - 1]; },\n\t\t\t\t\t\t\tthis.get_matching_blocks(), 0);\n\t\t\treturn difflib.__calculate_ratio(matches, this.a.length + this.b.length);\n\t\t}\n\t\t\n\t\tthis.quick_ratio = function () {\n\t\t\tvar fullbcount, elt;\n\t\t\tif (this.fullbcount == null) {\n\t\t\t\tthis.fullbcount = fullbcount = {};\n\t\t\t\tfor (var i = 0; i < this.b.length; i++) {\n\t\t\t\t\telt = this.b[i];\n\t\t\t\t\tfullbcount[elt] = difflib.__dictget(fullbcount, elt, 0) + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfullbcount = this.fullbcount;\n\t\n\t\t\tvar avail = {};\n\t\t\tvar availhas = difflib.__isindict(avail);\n\t\t\tvar matches = numb = 0;\n\t\t\tfor (var i = 0; i < this.a.length; i++) {\n\t\t\t\telt = this.a[i];\n\t\t\t\tif (availhas(elt)) {\n\t\t\t\t\tnumb = avail[elt];\n\t\t\t\t} else {\n\t\t\t\t\tnumb = difflib.__dictget(fullbcount, elt, 0);\n\t\t\t\t}\n\t\t\t\tavail[elt] = numb - 1;\n\t\t\t\tif (numb > 0) matches++;\n\t\t\t}\n\t\t\t\n\t\t\treturn difflib.__calculate_ratio(matches, this.a.length + this.b.length);\n\t\t}\n\t\t\n\t\tthis.real_quick_ratio = function () {\n\t\t\tvar la = this.a.length;\n\t\t\tvar lb = this.b.length;\n\t\t\treturn _calculate_ratio(Math.min(la, lb), la + lb);\n\t\t}\n\t\t\n\t\tthis.isjunk = isjunk ? isjunk : difflib.defaultJunkFunction;\n\t\tthis.a = this.b = null;\n\t\tthis.set_seqs(a, b);\n\t}\n};\n\n\ndefine(\"difflib\", function(){});\n\n","/*\nThis is part of jsdifflib v1.0. <http://github.com/cemerick/jsdifflib>\n\nCopyright 2007 - 2011 Chas Emerick <cemerick@snowtide.com>. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are\npermitted provided that the following conditions are met:\n\n   1. Redistributions of source code must retain the above copyright notice, this list of\n      conditions and the following disclaimer.\n\n   2. Redistributions in binary form must reproduce the above copyright notice, this list\n      of conditions and the following disclaimer in the documentation and/or other materials\n      provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY Chas Emerick ``AS IS'' AND ANY EXPRESS OR IMPLIED\nWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Chas Emerick OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nThe views and conclusions contained in the software and documentation are those of the\nauthors and should not be interpreted as representing official policies, either expressed\nor implied, of Chas Emerick.\n*/\ndiffview = {\n\t/**\n\t * Builds and returns a visual diff view.  The single parameter, `params', should contain\n\t * the following values:\n\t *\n\t * - baseTextLines: the array of strings that was used as the base text input to SequenceMatcher\n\t * - newTextLines: the array of strings that was used as the new text input to SequenceMatcher\n\t * - opcodes: the array of arrays returned by SequenceMatcher.get_opcodes()\n\t * - baseTextName: the title to be displayed above the base text listing in the diff view; defaults\n\t *\t   to \"Base Text\"\n\t * - newTextName: the title to be displayed above the new text listing in the diff view; defaults\n\t *\t   to \"New Text\"\n\t * - contextSize: the number of lines of context to show around differences; by default, all lines\n\t *\t   are shown\n\t * - viewType: if 0, a side-by-side diff view is generated (default); if 1, an inline diff view is\n\t *\t   generated\n\t */\n\tbuildView: function (params) {\n\t\tvar baseTextLines = params.baseTextLines;\n\t\tvar newTextLines = params.newTextLines;\n\t\tvar opcodes = params.opcodes;\n\t\tvar baseTextName = params.baseTextName ? params.baseTextName : \"Base Text\";\n\t\tvar newTextName = params.newTextName ? params.newTextName : \"New Text\";\n\t\tvar contextSize = params.contextSize;\n\t\tvar inline = (params.viewType == 0 || params.viewType == 1) ? params.viewType : 0;\n\n\t\tif (baseTextLines == null)\n\t\t\tthrow \"Cannot build diff view; baseTextLines is not defined.\";\n\t\tif (newTextLines == null)\n\t\t\tthrow \"Cannot build diff view; newTextLines is not defined.\";\n\t\tif (!opcodes)\n\t\t\tthrow \"Canno build diff view; opcodes is not defined.\";\n\t\t\n\t\tfunction celt (name, clazz) {\n\t\t\tvar e = document.createElement(name);\n\t\t\te.className = clazz;\n\t\t\treturn e;\n\t\t}\n\t\t\n\t\tfunction telt (name, text) {\n\t\t\tvar e = document.createElement(name);\n\t\t\te.appendChild(document.createTextNode(text));\n\t\t\treturn e;\n\t\t}\n\t\t\n\t\tfunction ctelt (name, clazz, text) {\n\t\t\tvar e = document.createElement(name);\n\t\t\te.className = clazz;\n\t\t\te.appendChild(document.createTextNode(text));\n\t\t\treturn e;\n\t\t}\n\t\n\t\tvar tdata = document.createElement(\"thead\");\n\t\tvar node = document.createElement(\"tr\");\n\t\ttdata.appendChild(node);\n\t\tif (inline) {\n\t\t\tnode.appendChild(document.createElement(\"th\"));\n\t\t\tnode.appendChild(document.createElement(\"th\"));\n\t\t\tnode.appendChild(ctelt(\"th\", \"texttitle\", baseTextName + \" vs. \" + newTextName));\n\t\t} else {\n\t\t\tnode.appendChild(document.createElement(\"th\"));\n\t\t\tnode.appendChild(ctelt(\"th\", \"texttitle\", baseTextName));\n\t\t\tnode.appendChild(document.createElement(\"th\"));\n\t\t\tnode.appendChild(ctelt(\"th\", \"texttitle\", newTextName));\n\t\t}\n\t\ttdata = [tdata];\n\t\t\n\t\tvar rows = [];\n\t\tvar node2;\n\t\t\n\t\t/**\n\t\t * Adds two cells to the given row; if the given row corresponds to a real\n\t\t * line number (based on the line index tidx and the endpoint of the \n\t\t * range in question tend), then the cells will contain the line number\n\t\t * and the line of text from textLines at position tidx (with the class of\n\t\t * the second cell set to the name of the change represented), and tidx + 1 will\n\t\t * be returned.\t Otherwise, tidx is returned, and two empty cells are added\n\t\t * to the given row.\n\t\t */\n\t\tfunction addCells (row, tidx, tend, textLines, change) {\n\t\t\tif (tidx < tend) {\n\t\t\t\trow.appendChild(telt(\"th\", (tidx + 1).toString()));\n\t\t\t\trow.appendChild(ctelt(\"td\", change, textLines[tidx].replace(/\\t/g, \"\\u00a0\\u00a0\\u00a0\\u00a0\")));\n\t\t\t\treturn tidx + 1;\n\t\t\t} else {\n\t\t\t\trow.appendChild(document.createElement(\"th\"));\n\t\t\t\trow.appendChild(celt(\"td\", \"empty\"));\n\t\t\t\treturn tidx;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction addCellsInline (row, tidx, tidx2, textLines, change) {\n\t\t\trow.appendChild(telt(\"th\", tidx == null ? \"\" : (tidx + 1).toString()));\n\t\t\trow.appendChild(telt(\"th\", tidx2 == null ? \"\" : (tidx2 + 1).toString()));\n\t\t\trow.appendChild(ctelt(\"td\", change, textLines[tidx != null ? tidx : tidx2].replace(/\\t/g, \"\\u00a0\\u00a0\\u00a0\\u00a0\")));\n\t\t}\n\t\t\n\t\tfor (var idx = 0; idx < opcodes.length; idx++) {\n\t\t\tcode = opcodes[idx];\n\t\t\tchange = code[0];\n\t\t\tvar b = code[1];\n\t\t\tvar be = code[2];\n\t\t\tvar n = code[3];\n\t\t\tvar ne = code[4];\n\t\t\tvar rowcnt = Math.max(be - b, ne - n);\n\t\t\tvar toprows = [];\n\t\t\tvar botrows = [];\n\t\t\tfor (var i = 0; i < rowcnt; i++) {\n\t\t\t\t// jump ahead if we've alredy provided leading context or if this is the first range\n\t\t\t\tif (contextSize && opcodes.length > 1 && ((idx > 0 && i == contextSize) || (idx == 0 && i == 0)) && change==\"equal\") {\n\t\t\t\t\tvar jump = rowcnt - ((idx == 0 ? 1 : 2) * contextSize);\n\t\t\t\t\tif (jump > 1) {\n\t\t\t\t\t\ttoprows.push(node = document.createElement(\"tr\"));\n\t\t\t\t\t\t\n\t\t\t\t\t\tb += jump;\n\t\t\t\t\t\tn += jump;\n\t\t\t\t\t\ti += jump - 1;\n\t\t\t\t\t\tnode.appendChild(telt(\"th\", \"...\"));\n\t\t\t\t\t\tif (!inline) node.appendChild(ctelt(\"td\", \"skip\", \"\"));\n\t\t\t\t\t\tnode.appendChild(telt(\"th\", \"...\"));\n\t\t\t\t\t\tnode.appendChild(ctelt(\"td\", \"skip\", \"\"));\n\t\t\t\t\t\t\n\t\t\t\t\t\t// skip last lines if they're all equal\n\t\t\t\t\t\tif (idx + 1 == opcodes.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttoprows.push(node = document.createElement(\"tr\"));\n\t\t\t\tif (inline) {\n\t\t\t\t\tif (change == \"insert\") {\n\t\t\t\t\t\taddCellsInline(node, null, n++, newTextLines, change);\n\t\t\t\t\t} else if (change == \"replace\") {\n\t\t\t\t\t\tbotrows.push(node2 = document.createElement(\"tr\"));\n\t\t\t\t\t\tif (b < be) addCellsInline(node, b++, null, baseTextLines, \"delete\");\n\t\t\t\t\t\tif (n < ne) addCellsInline(node2, null, n++, newTextLines, \"insert\");\n\t\t\t\t\t} else if (change == \"delete\") {\n\t\t\t\t\t\taddCellsInline(node, b++, null, baseTextLines, change);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// equal\n\t\t\t\t\t\taddCellsInline(node, b++, n++, baseTextLines, change);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tb = addCells(node, b, be, baseTextLines, change);\n\t\t\t\t\tn = addCells(node, n, ne, newTextLines, change);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < toprows.length; i++) rows.push(toprows[i]);\n\t\t\tfor (var i = 0; i < botrows.length; i++) rows.push(botrows[i]);\n\t\t}\n\t\t\n\t\trows.push(node = ctelt(\"th\", \"author\", \"diff view generated by \"));\n\t\tnode.setAttribute(\"colspan\", inline ? 3 : 4);\n\t\tnode.appendChild(node2 = telt(\"a\", \"jsdifflib\"));\n\t\tnode2.setAttribute(\"href\", \"http://github.com/cemerick/jsdifflib\");\n\t\t\n\t\ttdata.push(node = document.createElement(\"tbody\"));\n\t\tfor (var idx in rows) rows.hasOwnProperty(idx) && node.appendChild(rows[idx]);\n\t\t\n\t\tnode = celt(\"table\", \"diff\" + (inline ? \" inlinediff\" : \"\"));\n\t\tfor (var idx in tdata) tdata.hasOwnProperty(idx) && node.appendChild(tdata[idx]);\n\t\treturn node;\n\t}\n};\n\n\ndefine(\"diffview\", function(){});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2015-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * View diffs between versions\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('diff',[ \"jquery\", \"difflib\", \"diffview\" ],\n       function() {\n\n(function($) {\n  var pluginName = 'diff';\n\n  /** @lends $.fn.diff */\n  var methods = {\n    /**\n     * Render diff between two strings in the target element (must\n     * be a `<div>`).\n     *\n     * @param {Object} [options]\n     * @param {String} [base] Old version\n     * @param {String} [head] New version\n     * @param {String} [baseName=\"Base text\"] Name for old version\n     * @param {String} [headName=\"Current text\"] Name for current version\n     * @param {Number} [context=3] Number of context lines\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar base        = difflib.stringAsLines(options.base);\n\tvar newtxt      = difflib.stringAsLines(options.head);\n\tvar sm          = new difflib.SequenceMatcher(base, newtxt);\n\tvar opcodes     = sm.get_opcodes();\n\tvar contextSize = options.contextSize == undefined\n\t\t\t\t? 3 : options.contextSize;\n\n\tthis.appendChild(diffview.buildView(\n\t  { baseTextLines: base,\n\t    newTextLines: newtxt,\n\t    opcodes: opcodes,\n\t    baseTextName: options.baseName || \"Base text\",\n\t    newTextName:  options.headName || \"Current text\",\n\t    contextSize: contextSize,\n\t    viewType: $(\"inline\").checked ? 1 : 0\n\t  }));\n      });\n    }\n  }; // methods\n\n  /**\n   * This class is a jQuery wrapper around\n   *\n   * @class diff\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.diff = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Defines the interaction with the `File` menu and gitty storage\n * module of the server.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('storage',[ \"jquery\", \"config\", \"modal\", \"form\", \"gitty\",\n\t \"history\", \"tabbed\", \"utils\",\n\t \"laconic\", \"diff\"\n       ],\n       function($, config, modal, form, gitty, history, tabbed, utils) {\n\n(function($) {\n  var pluginName = 'storage';\n\n  var defaults = {\n    typeName: \"program\",\n    is_clean: true,\n    markClean: function(clean) {}\n  }\n\n  /** @lends $.fn.storage */\n  var methods = {\n    /**\n     * @param {Object} options\n     * @param {Function} options.setValue sets the new document value\n     * @param {Function} options.getValue gets the current document value\n     * @param {Function} options.changeGen identifies the current state\n     * @param {String}   options.cleanData identifies the clean state\n     * @param {String}\t options.cleanCheckpoint is the action that\n     * caused the clean state\n     * @param {Any}\t options.cleanGeneration identifies the clean\n     * state.\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = $.extend({}, defaults, options);\n\n\telem.data(pluginName, data);\t/* store with element */\n\telem.addClass(\"storage unloadable\");\n\telem.storage('update_tab_title');\n\n\t/**\n\t * Execute a method on the storage plugin. This particularly\n\t * avoids handling events that have bubbled up from children\n\t * that have a storage plugin attached, which may happen in\n\t * notebooks.\n\t */\n\tfunction onStorage(ev, method) {\n\t  var target = $(ev.target);\n\n\t  if ( target.hasClass(\"storage\") && target.is(\":visible\") ) {\n\t    var rc = target.storage.apply(\n\t\t       target,\n\t\t       Array.prototype.slice.call(arguments, 1));\n\t    if ( rc == \"propagate\" )\n\t      return;\n\t  }\n\t  ev.stopPropagation();\n\t}\n\n\telem.on(\"save\", function(ev, data) {\n\t  onStorage(ev, 'save', data);\n\t});\n\telem.on(\"download\", function(ev) {\n\t  onStorage(ev, 'download');\n\t});\n\telem.on(\"fileInfo\", function(ev) {\n\t  onStorage(ev, 'info');\n\t});\n\telem.on(\"diff\", function(ev) {\n\t  onStorage(ev, 'diff');\n\t});\n\telem.on(\"revert\", function(ev) {\n\t  onStorage(ev, 'revert');\n\t});\n\telem.on(\"reload\", function(ev) {\n\t  onStorage(ev, 'reload');\n\t});\n\telem.on(\"chat-about-file\", function(ev) {\n\t  onStorage(ev, 'chat');\n\t});\n\telem.on(\"follow-file\", function(ev) {\n\t  onStorage(ev, 'follow');\n\t});\n\telem.on(\"activate-tab\", function(ev) {\n\t\t\t\t\t\t/* TBD: What exactly? */\n\t});\n\telem.on(\"data-is-clean\", function(ev, clean) {\n\t  elem.storage('markClean', clean);\n\t});\n\telem.on(\"fullscreen\", function(ev, val) {\n\t  if ( !val )\n\t    elem.storage('update_tab_title');\n\t});\n\telem.on(\"unload\", function(ev, rc) {\n\t  rc.rc = elem.storage('unload', \"beforeunload\", ev);\n\t});\n\n\telem.storage('chat', (data.meta||{}).chat||'update');\n      });\n    },\n\n    /**\n     * @returns {Boolean} `true` if the storage can represent the\n     * requested type\n     */\n    supportsType: function(src) {\n      var data = this.data(pluginName);\n      var type = tabbed.tabTypes[data.typeName];\n\n      if ( typeof(src) == \"string\" )\n\tsrc = {data:src};\n\n      if ( (src.meta && src.meta.name) || src.url )\n      { var name = (src.meta && src.meta.name) ? src.meta.name : src.url;\n\n\tif ( tabbed.type(name)[\"typeName\"] != type.typeName )\n\t  return false;\n      }\n\n      return true;\n    },\n\n    /**\n     * @param {String|Object} src becomes the new contents of the editor\n     * @param {String} src.data contains the data in the case that\n     * `src` is an object.\n     * @return {Object|String} The string `\"propagate\"` is\n     * returned if the provided src does not match the supported type.\n     */\n    setSource: function(src) {\n      var data = this.data(pluginName);\n\n      if ( typeof(src) == \"string\" )\n\tsrc = {data:src};\n\n      if ( !this.storage('supportsType', src) )\n\treturn undefined;\n\n      if ( this.storage('unload', \"setSource\") == false )\n\treturn false;\n\n      if ( src.meta ) {\n\tdata.file = src.meta.name;\n\tdata.meta = src.meta;\n\tdata.url  = null;\n\tif ( src.meta.symbolic == \"HEAD\" )\n\t  src.url = config.http.locations.web_storage + src.meta.name;\n      } else {\n\tdata.file = null;\n\tdata.meta = null;\n      }\n      data.url     = src.url;\n      data.st_type = src.st_type;\n      data.chats   = src.chats;\n\n      data.setValue(src);\n      data.cleanGeneration = data.changeGen();\n      data.cleanData       = data.getValue();\n      data.cleanCheckpoint = src.cleanCheckpoint || \"load\";\n      data.markClean(true);\n\n      this.storage('update_tab_title');\n\n      if ( !src.url       ) src.url = config.http.locations.swish;\n      if ( !src.noHistory ) history.push({ url: src.url,\n\t\t\t\t\t   reason: 'load'\n\t\t\t\t\t });\n\n      this.storage('chat', src.chat||(src.meta||{}).chat||'update');\n      $(\".storage\").storage('chat_status', true);\n\n      return this;\n    },\n\n    is_clean: function() {\n      var data = this.data(pluginName);\n      return data.isClean(data.cleanGeneration);\n    },\n\n    /**\n     * Set the value, but do not update the clean generation, meta-\n     * data, etc.  This is used for restoring a modified state.\n     * See tabbed.setState().\n     */\n    setValue: function(value) {\n      var data = this.data(pluginName);\n\n      data.setValue(value);\n      this.trigger(\"data-is-clean\", data.isClean(data.cleanGeneration));\n\n      return this;\n    },\n\n    /**\n     * Update the label and icon shown in the tab\n     */\n    update_tab_title: function(action) {\n      return this.each(function() {\n\tvar elem  = $(this);\n\tvar docid = elem.storage('docid');\n\n\tif ( action == 'chats++' ) {\n\t  elem.tabbed('chats++', docid);\n\t} else {\n\t  var data = elem.data(pluginName);\n\t  var file = data.file||data.url;\n\t  var type;\n\t  var title;\n\n\t  if ( !file || !(type = tabbed.type(file)) )\n\t    type = tabbed.tabTypes[data.typeName];\n\n\t  if ( file ) {\n\t    title = filebase(utils.basename(file));\n\t    if ( data.meta &&\n\t\t data.meta.symbolic != \"HEAD\" &&\n\t         data.meta.commit ) {\n\t      title += \"@\" + data.meta.commit.substring(0,7);\n\t    }\n\t  } else {\n\t    title = type.label;\n\t  }\n\n\t  if ( docid && data.chats )\n\t    data.chats.docid = docid;\n\n\t  elem.tabbed('title', title, type.dataType);\n\t  elem.tabbed('chats', data.chats);\n\t}\n      });\n    },\n\n    /**\n     * Load document from the server.\n     */\n    load: function(file) {\n      if ( file ) {\n\tvar that = this;\n\tvar options = this.data(pluginName);\n\n\t$.ajax({ url: config.http.locations.web_storage + file,\n\t\t dataType: \"text\",\n\t\t success: function(data) {\n\t\t   that.storage('setSource',\n\t\t\t\t{ data: data,\n\t\t\t\t  meta: { name:file\n\t\t\t\t        }\n\t\t\t\t});\n\t\t },\n\t\t error: function(jqXHDR) {\n\t\t   modal.ajaxError(jqXHR);\n\t\t }\n\t       });\n      }\n      return this;\n    },\n\n    /**\n     * Revert to upstream version\n     */\n    revert: function() {\n      var data = this.data(pluginName);\n\n      data.setValue(data.cleanData);\n      data.cleanGeneration = data.changeGen();\n      data.markClean(true);\n      return this;\n    },\n\n    /**\n     * Reload from server.\n     * @param {String} file Name of the file to reload.  Default is to\n     * reload the current `data.file`.\n     */\n    reload: function(file) {\n      var elem = this;\n      var data = elem.data(pluginName);\n          file = file||data.file;\n      var url  = config.http.locations.web_storage +\n\t\t encodeURI(file);\n\n      $.ajax({ url: url,\n\t       type: \"GET\",\n\t       data: { format: \"json\" },\n\t       success: function(reply) {\n\t\t reply.url = url;\n\t\t reply.st_type = \"gitty\";\n\t\t reply.noHistory = true;\n\t\t elem.storage('setSource', reply);\n\t\t $(\"#chat\").trigger('send',\n\t\t\t\t    { type:'reloaded',\n\t\t\t\t      file:file,\n\t\t\t\t      commit:reply.meta.commit\n\t\t\t\t    });\n\t       },\n\t       error: function(jqXHR) {\n\t\t modal.ajaxError(jqXHR);\n\t       }\n\t     });\n\n      return this;\n    },\n\n    /**\n     * Save the current document to the server.  Depending on the\n     * arguments, this function implements several forms of saving:\n     *\n     *   - Without arguments arguments, it implements \"Save\".\n     *   - With (\"as\"), it implements \"Save as\", which opens a\n     *     dialog which calls this method again, but now with\n     *     meta-data in the first argument.\n     *   - With ({...}) it performs the save operation of \"Save as\"\n     *   - With ({...}, \"only-meta-data\") it only updates the meta\n     *     data on the server.\n     *\n     * @param {Object} [meta] provides additional meta-information.\n     * Currently defined fields are `author`, `email`,\n     * `title`, `keywords` and `description`. Illegal fields are ignored\n     * by the server.\n     * @param {String} [what] If `\"only-meta-data\"`, only the meta-data\n     * is updated.\n     */\n    save: function(meta, what) {\n      var data   = this.data(pluginName);\n      var type   = tabbed.tabTypes[data.typeName];\n      var url    = config.http.locations.web_storage;\n      var method = \"POST\";\n      var elem   = this;\n      var post;\n\n      if ( (data.st_type == \"filesys\" || data.st_type == \"external\") && data.url )\n\treturn this.storage('saveURL');\n\n      if ( meta == \"as\" ) {\n\tthis.storage('saveAs');\n\treturn this;\n      }\n\n      if ( data.file &&\n\t   ( what == \"only-meta-data\" ||\n\t     ( !(meta && meta.default) &&\n\t       (!meta || meta.name == data.file)\n\t     )\n\t   ) ) {\n\turl += encodeURI(data.file);\n\tmethod = \"PUT\";\n      }\n\n      if ( what == \"only-meta-data\" ) {\n\tif ( $.isEmptyObject(gitty.reduceMeta(meta, data.meta)) ) {\n\t  alert(\"No change\");\n\t  return;\n\t}\n\tpost = { update: \"meta-data\" };\n      } else if ( method == \"POST\" ) {\n\tpost = { data: data.getValue(),\n\t\t type: type.dataType\n\t       };\n      } else {\n\tif ( !data.isClean(data.cleanGeneration) ) {\n\t  post = { data: data.getValue(),\n\t\t   type: type.dataType\n\t\t };\n\t} else if ( gitty.diffTags(data.meta.tags, meta.tags) == null ) {\n\t  alert(\"No change\");\n\t  return;\n\t}\n      }\n\n      if ( meta )\n\tpost.meta = meta;\n      if ( data.meta )\n\tpost.previous = data.meta.commit;\n\n      $.ajax({ url: url,\n               dataType: \"json\",\n\t       contentType: \"application/json\",\n\t       type: method,\n\t       data: JSON.stringify(post),\n\t       success: function(reply) {\n\t\t if ( reply.error ) {\n\t\t   modal.alert(errorString(\"Could not save\", reply));\n\t\t } else {\n\t\t   if ( data.meta &&\n\t\t\tdata.meta.example != reply.meta.example ) {\n\t\t     elem.closest(\".swish\").trigger('examples-changed');\n\t\t   }\n\t\t   data.file = reply.file;\n\t\t   data.meta = reply.meta;\n\t\t   data.st_type = \"gitty\";\n\t\t   data.cleanGeneration = data.changeGen();\n\t\t   data.cleanData       = data.getValue();\n\t\t   data.cleanCheckpoint = \"save\";\n\t\t   data.markClean(true);\n\t\t   modal.feedback({ html: \"Saved\",\n\t\t\t\t    owner: elem\n\t\t                  });\n\n\t\t   if ( method == \"POST\" )\n\t\t     data.chats = {\t\t/* forked file has no chats */\n\t\t       docid: elem.storage('docid'),\n\t\t       total: 0\n\t\t     };\n\t\t   elem.storage('update_tab_title');\n\t\t   elem.storage('chat', (data.meta||{}).chat||'update');\n\t\t   elem.storage('load_messages', reply.messages||[]);\n\t\t   $(\".storage\").storage('chat_status', true);\n\t\t   history.push({url: reply.url, reason: \"save\"});\n\t\t }\n\t       },\n\t       error: function(jqXHR, textStatus, errorThrown) {\n\t\t if ( jqXHR.status == 409 ) {\n\t\t   elem.storage('resolveEditConflict',\n\t\t\t\tJSON.parse(jqXHR.responseText));\n\t\t } else if ( jqXHR.status == 403 ) {\n\t\t   modal.alert(\"Permission denied.  Please try a different name\");\n\t\t } else {\n\t\t   alert('Save failed; click \"ok\" to try again');\n\t\t   elem.storage('saveAs');\n\t\t }\n\t       }\n\t     });\n\n      return this;\n    },\n\n    /**\n     * Provide a Save As dialog\n     */\n    saveAs: function(options) {\n      var data = this.data(pluginName);\n      var meta    = data.meta||{};\n      var editor  = this;\n      var update  = Boolean(data.file);\n      var fork    = data.meta && meta.symbolic != \"HEAD\" && !meta.default;\n      var type    = tabbed.tabTypes[data.typeName];\n      var profile = $(\"#login\").login('get_profile',\n\t\t\t\t      [ \"display_name\", \"avatar\", \"email\",\n\t\t\t\t\t\"identity\"\n\t\t\t\t      ]);\n      var author  = profile.display_name;\n      var modify  = meta.modify;\n      var canmodify;\n\n      if ( meta.public === undefined )\n\tmeta.public = true;\n\n      if ( profile.identity ) {\n\tif ( !modify )\n\t  modify = [\"login\", \"owner\"];\n      } else\n      { modify = [\"any\", \"login\", \"owner\"];\n      }\n\n      if ( profile.identity ) {\n\tcanmodify = (profile.identity == meta.identity ||\n\t\t     !(meta.identity||meta.user));\n      } else {\n\tcanmodify = false;\n      }\n\n      options = options||{};\n\n      function saveAsBody() {\n\tthis.append($.el.form(\n          { class:\"form-horizontal\"},\n\t    form.fields.hidden(\"identity\", profile.identity),\n\t    form.fields.hidden(\"default\", meta.default),\n\t    form.fields.hidden(\"chat\", meta.chat),\n\t    profile.identity ? undefined :\n\t\t\t       form.fields.hidden(\"avatar\", profile.avatar),\n\t    form.fields.fileName(fork ? null: data.file,\n\t\t\t\t meta.public, meta.example),\n\t    form.fields.title(meta.title),\n\t    form.fields.author(author, profile.identity),\n\t    update ? form.fields.commit_message() : undefined,\n\t    form.fields.tags(meta.tags),\n\t    form.fields.modify(modify, canmodify),\n\t    form.fields.follow(profile.email),\n\t    form.fields.buttons(\n\t      { label: fork   ? \"Fork \"+type.label :\n\t\t       update ? \"Update \"+type.label :\n\t\t\t\t\"Save \"+type.label,\n\t\taction: function(ev, as) {\n\t\t\t  editor.storage('save', as);\n\t\t\t  return false;\n\t\t\t}\n\t      })));\n      }\n\n      form.showDialog({ title: options.title ? options.title :\n\t\t\t       fork   ? \"Fork from \"+meta.commit.substring(0,7) :\n\t\t\t       update ? \"Save new version\" :\n\t\t\t                \"Save \"+type.label+\" as\",\n\t\t\tbody:  saveAsBody\n\t\t      });\n\n      return this;\n    },\n\n    /**\n     * Save data to the URL it was loaded from.\n     * FIXME: feedback, allow recompilation (if Prolog source)\n     */\n    saveURL: function() {\n      var options = this.data(pluginName);\n      var data = options.getValue();\n      var type = tabbed.type(options.url)||{};\n      var elem = this;\n\n      if ( options.isClean(options.cleanGeneration) ) {\n\talert(\"No change\");\n\treturn this;\n      }\n\n      $.ajax({ url: options.url,\n               dataType: \"json\",\n\t       contentType: type.contentType||\"text/plain\",\n\t       type: \"PUT\",\n\t       data: data,\n\t       success: function(reply) {\n\t\t if ( reply.error ) {\n\t\t   modal.alert(errorString(\"Could not save\", reply));\n\t\t } else {\n\t\t   options.cleanGeneration = options.changeGen();\n\t\t   options.cleanData       = options.getValue();\n\t\t   options.cleanCheckpoint = \"save\";\n\t\t   options.markClean(true);\n\t\t   modal.feedback({ html: \"Saved\",\n\t\t\t\t    owner: elem\n\t\t                  });\n\t\t }\n\t       },\n\t       error: function(jqXHR) {\n\t\t if ( jqXHR.status == 403 ) {\n\t\t   var url = options.url;\n\t\t   delete(options.meta);\n\t\t   delete(options.st_type);\n\t\t   delete(options.url);\n\t\t   elem.storage('saveAs', {\n\t\t     title: \"<div class='warning'>Could not save to \"+url+\n\t\t\t    \"</div> Save a copy as\"\n\t\t   });\n\t\t } else\n\t\t { modal.ajaxError(jqXHR);\n\t\t }\n\t       }\n\t     });\n\n      return this;\n    },\n\n    /**\n     * Storage was activated (e.g., a tab switch)\n     */\n    activate: function() {\n      var data = this.data(pluginName);\n\n      if ( data && data.url ) {\n\thistory.push({url: data.url, reason: 'activate'});\n      }\n\n      return this;\n    },\n\n    /**\n     * @return {Object} state of a set of storage objects, typically\n     * called from a tabbed environment to save the state of all tabs.\n     */\n    getState: function(always) {\n      var state = {\n        tabs: []\n      };\n\n      this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName);\n\tvar meta = elem.meta || {};\n\tvar h;\n\n\t\t\t\t\t/* avoid incomplete elements */\n\tif ( (data.file || data.url) && data.isClean && data.cleanGeneration ) {\n\t  if ( !meta.name && data.file )\n\t    meta.name = data.file;\n\n\t  var tab = {\n\t    file:    meta.name,\n\t    st_type: data.st_type,\n\t    url:     data.url\n\t  };\n\t  if ( elem[pluginName]('getActive') )\n\t    tab.active = true;\n\t  if ( (h=elem[pluginName]('chatroom_size')) )\n\t    tab.chatroom = h;\n\n\t  state.tabs.push(tab);\n\n\t  if ( always ||\n\t       !data.isClean(data.cleanGeneration) ) {\n\t    tab.meta = meta;\n\t    tab.data = data.getValue();\n\t  }\n\t}\n      });\n\n      return state;\n    },\n\n    /**\n     * Restore a storage object from local (when modified) or remote\n     * version.\n     *\n     * @param {String} name is the name of the document to retrieve.\n     */\n    restoreLocal: function(name) {\n      var str = localStorage.getItem(\"$file$\"+name);\n      var data;\n\n      try {\n\tdata = JSON.parse(str);\n\tif ( typeof(data) != \"object\" )\n\t  data = undefined;\n      } catch(err) {\n\tdata = undefined;\n      }\n\n      if ( data ) {\n\tthis[pluginName]('setSource', data);\n      } else {\n\tthis[pluginName]('reload', name);\n      }\n    },\n\n\t\t /*******************************\n\t\t *\t    EDIT CONFLICTS\t*\n\t\t *******************************/\n\n    resolveEditConflict: function(options) {\n      var bdiv;\n\n      options.storage = this;\n\n      function body() {\n\tvar elem = $(this);\n\n\telem.addClass(\"edit-conflict\");\n\n\tfunction tabLabel(label, active, id, disabled) {\n\t  var attrs = {role:\"presentation\"};\n\t  var classes = [];\n\t  if ( active   ) classes.push(\"active\");\n\t  if ( disabled ) classes.push(\"disabled\");\n\t  if ( classes != [] )\n\t    attrs.class = classes.join(\" \");\n\t  var elem =\n\t  $.el.li(attrs, $.el.a({href:\"#\"+id, 'data-toggle':\"tab\"}, label));\n\t  return elem;\n\t}\n\n\ttabs = $($.el.div({class:\"tab-content\"}));\n\telem.append($.el.ul(\n\t  {class:\"nav nav-tabs\"},\n\t  tabLabel(\"My edits\",    true,  \"merge-my-edits\"),\n\t  tabLabel(\"Their edits\", false, \"merge-server-edits\"),\n\t  tabLabel(\"Conflicts\",   false, \"merge-conflicts\")));\n\telem.append(tabs);\n\n\tfunction tabContent(id, cls) {\n\t  tabs.append($.el.div({class:\"tab-pane fade \"+id+\" \"+cls, id:id}));\n\t  elem.find('[href=\"#'+id+'\"]').on(\"show.bs.tab\", function(ev) {\n\t    elem.storage(id);\n\t  });\n\t}\n\n\ttabContent(\"merge-my-edits\",    \"in active\");\n\ttabContent(\"merge-server-edits\", \"\");\n\ttabContent(\"merge-conflicts\",   \"\");\n\n\telem.data(\"edit-conflict\", options);\n\n\telem.storage('merge-my-edits');\n\n\telem.append(bdiv =\n\t  $.el.div({class:\"form-group\"},\n\t\t   $.el.button({name:\"merge\",\n\t\t\t\tclass:\"btn btn-primary\"},\n\t\t\t       \"Merge\"),\n\t\t   $.el.button({name:\"discard-my-edits\",\n\t\t\t\tclass:\"btn btn-primary\"},\n\t\t\t       \"Discard my changes\"),\n\t\t   $.el.button({name:\"discard-server-edits\",\n\t\t\t\tclass:\"btn btn-primary\"},\n\t\t\t       \"Discard changes on server\"),\n\t\t   $.el.button({name:\"cancel\",\n\t\t\t\tclass:\"btn btn-danger\",\n\t\t\t\t'data-dismiss':\"modal\"},\n\t\t\t       \"Cancel\")));\n\n\n\t$(bdiv).on(\"click\", \"button\", function(ev) {\n\t  elem.storage('editConflictAction', $(ev.target).attr(\"name\"));\n\t  $(ev.target).parents(\".modal\").modal('hide');\n\t  ev.preventDefault();\n\t  return false;\n\t});\n      }\n\n      form.showDialog({ title: \"Edit conflict\",\n\t\t\tbody: body\n\t\t      });\n\n      return this;\n    },\n\n    'merge-my-edits': function() {\n      var data = $(this).data(\"edit-conflict\");\n      $(this).find(\".merge-my-edits\")\n        .empty()\n        .append(udiff(data.edit.me.data));\n    },\n\n    'merge-server-edits': function() {\n      var data = $(this).data(\"edit-conflict\");\n      $(this).find(\".merge-server-edits\")\n        .empty()\n        .append(udiff(data.edit.server.data));\n    },\n\n    'merge-conflicts': function() {\n      var data = $(this).data(\"edit-conflict\");\n      var tab  = $(this).find(\".merge-conflicts\");\n\n      tab.empty();\n      if ( data.patch_status != 0 ) {\n\ttab.append(editConflicts(data.merged));\n      } else {\n\ttab.html(\"No merge conflicts\");\n      }\n    },\n\n    editConflictAction: function(action) {\n      var options = $(this).data(\"edit-conflict\");\n      var data = $(options.storage).data(pluginName);\n\n      if ( action == \"merge\" ) {\n\tdata.setValue(options.merged);\n\tdata.meta.commit = options.edit.server.to.commit;\n      } else if ( action == \"discard-my-edits\" ) {\n\t$(options.storage).storage('reload');\n      } else if ( action == \"discard-server-edits\" ) {\n\tvar data = $(options.storage).data(pluginName);\n\tdata.meta.commit = options.edit.server.to.commit;\n      }\n    },\n\n\n\t\t /*******************************\n\t\t *\t   DOWNLOADING\t\t*\n\t\t *******************************/\n\n    download: function() {\n      var options = this.data(pluginName);\n      var type    = tabbed.tabTypes[options.typeName];\n      var data    = options.getValue();\n      var href    = \"data:text/plain;charset=UTF-8,\"\n\t          + encodeURIComponent(data);\n\n      var a = $.el.a({ href:href,\n\t\t       download:options.file||(\"swish.\"+type.dataType)\n\t\t     });\n      this.append(a);\n      a.click();\n      $(a).remove();\n\n      return this;\n    },\n\n    /**\n     * @param {Object} [options]\n     * @param {String|Boolean} [options.data=false] if `true`, always\n     * include the content of the storage.  If `\"if_modified\"`, only\n     * include the content if it is modified.\n     * @param {String} [options.type] if provided, only return objects\n     * associated with files with the given extension.\n     * @return {Array.Object}\n     */\n    getData: function(options) {\n      var result = [];\n\n      options = options||{};\n\n      this.each(function() {\n\tvar data = $(this).data(pluginName);\n\tvar obj = {};\n\n\tobj.type = data.st_type;\n\tif ( data.url ) obj.url = data.url;\n\tif ( data.meta ) {\n\t  function copyMeta(name) {\n\t    if ( data.meta[name] )\n\t      obj[name] = data.meta[name];\n\t  }\n\n\t  copyMeta(\"name\");\n\t  copyMeta(\"path\");\n\t  copyMeta(\"modified\");\n\t  copyMeta(\"loaded\");\n\t  copyMeta(\"modified_since_loaded\");\n\t  copyMeta(\"module\");\n\t}\n\n\tif ( $(this)[pluginName]('getActive') )\n\t  obj.active = true;\n\n\tif ( !options.type ||\n\t     ( options.name &&\n\t       options.name.split(\".\").pop() == options.type ) ) {\n\t  if ( options.data ) {\n\t    var value = data.getValue();\n\n\t    obj.modified = (value != data.cleanData);\n\t    if ( options.data == true ||\n\t\t (obj.modified && options.data == \"if_modified\") )\n\t      obj.data = value;\n\t  }\n\n\t  result.push(obj);\n        }\n      });\n\n      return result;\n    },\n\n    /**\n     * @return {jQuery|undefined} the jQuery storage element that\n     * matches `to`\n     */\n    match: function(to) {\n      for(var k=0; k<this.length; k++) {\n\tme = $(this[k]);\n\tvar data = me.data(pluginName);\n\n\tif ( to.file && to.file == data.file )\n\t  return me;\n\tif ( to.url && to.url == data.url )\n\t  return me;\n      }\n    },\n\n    /**\n     * Expose associateted tab\n     * @return {jQuery|undefined} storage plugin if tab could be\n     * exposed.\n     */\n    expose: function(reason) {\n      var tab = this.closest(\".tab-pane\");\n      if ( tab.length == 1 ) {\n\tvar tabbed = tab.closest(\".tabbed\");\n\ttabbed.tabbed('show', tab.attr('id'));\n\tif ( reason )\n\t  modal.feedback({ html: reason,\n\t                   owner: this\n\t                 });\n\n\treturn this;\n      }\n    },\n\n    /**\n     * Provide information about the current source in a modal\n     * dialog.\n     */\n    info: function() {\n      var data = this.data(pluginName);\n      var meta = data.meta||{};\n      var editor = this;\n      var title;\n\n      if ( data.st_type == \"gitty\" ) {\n\ttitle = $().gitty('title', meta);\n      } else if ( data.st_type == \"filesys\" ) {\n\ttitle = \"File system -- \" + utils.basename(meta.path);\n      } else if ( data.st_type == \"external\" ) {\n\ttitle = \"External -- \" + data.url;\n      } else {\n\ttitle = \"Scratch source\";\n      }\n\n      function infoBody() {\n\tif ( data.st_type == \"gitty\" ) {\n\t  data.editor = editor;\t\t/* circular reference */\n\t  this.gitty(data);\n\t} else if ( data.st_type == \"filesys\" ) {\n\t  filesysInfo(this, meta);\n\t} else if ( !data.st_type ) {\n\t  this.append($.el.p(\"The source is not associated with a file. \",\n\t\t\t     \"Use \",\n\t\t\t     $.el.b(\"Save ...\"),\n\t\t\t     \" to save the source with meta information.\"\n\t\t\t    ));\n\t}\n      }\n\n      form.showDialog({ title: title,\n\t\t\tbody:  infoBody\n\t\t      });\n\n      return this;\n    },\n\n    /**\n     * Generate diff relative to last checkpoint.\n     */\n    diff: function() {\n      var data = this.data(pluginName);\n      var baseName = { load: \"Loaded text\",\n\t\t       new: \"New text\",\n\t\t       save: \"Saved text\"\n\t\t     };\n\n      function infoBody() {\n\tvar diff = $.el.div();\n\tvar current = data.getValue();\n\n\tthis.append(diff);\n\n\tif ( current == data.cleanData ) {\n\t  $(diff).append($.el.p(\"No changes\"));\n\t} else {\n\t  var rb;\n\t  var buttons = $.el.div({ class:\"btn-group diff\",\n\t\t\t           role:\"group\"\n\t\t\t\t },\n\t\t\t\t $.el.button({ name:\"close\",\n\t\t\t\t\t       'data-dismiss':\"modal\",\n\t\t\t\t               class:\"btn btn-primary\"\n\t\t\t\t\t     },\n\t\t\t\t\t     \"Close\"),\n\t\t\t\t rb=\n\t\t\t\t $.el.button({ name:\"revert\",\n\t\t\t\t               class:\"btn btn-danger\",\n\t\t\t\t\t       'data-dismiss':\"modal\"\n\t\t\t\t\t     },\n\t\t\t\t\t     \"Revert changes\"));\n\t  $(diff).diff({ base: data.cleanData,\n\t\t\t head: current,\n\t\t\t baseName: baseName[data.cleanCheckpoint]\n\t\t       });\n\t  this.append($.el.div({class: \"wrapper text-center\"}, buttons));\n\t  $(rb).on(\"click\", function(ev) {\n\t    $(\".swish-event-receiver\").trigger(\"revert\");\n\t  });\n\t  this.parents(\"div.modal-dialog\").addClass(\"modal-wide\");\n\t}\n      }\n\n      form.showDialog({ title: \"Changes since \" + baseName[data.cleanCheckpoint],\n\t\t\tbody:  infoBody\n\t\t      });\n\n      return this;\n    },\n\n    /**\n     * Get a description of the selection to be transferred with a\n     * chat message.\n     */\n    getSelection: function() {\n      if ( this.hasClass(\"prolog-editor\") ) {\t/* plain editor */\n\tvar sel = this.prologEditor('getSelection');\n\treturn sel ? sel[0].selections : null;\n      } else if ( this.hasClass(\"notebook\") ) {\n\treturn this.notebook('getSelection');\n      } else {\n\tconsole.log(\"Don't know how to get selection from\", this);\n      }\n    },\n\n    /**\n     * @returns {String} description of the selection to use inside\n     * a link or button\n     */\n    getSelectionLabel: function(sel) {\n      function editorLabel(sels) {\n\tvar label = \"\";\n\tfor(var i=0; i<sels.length; i++) {\n\t  var s = sels[i];\n\t  if ( label != \"\" )\n\t    label += \";\";\n\t  label += \"@L\"+(s.from.line+1);\n\t  if ( s.to.line != s.from.line )\n\t    label += \"-\"+(s.to.line+1);\n\t}\n\treturn label;\n      }\n\n      if ( sel[0].selections ) {\n\tvar label = \"\";\n\n\tfor(var i=0; i<sel.length; i++) {\n\t  var ed = sel[i];\n\t  if ( label != \"\" )\n\t    label += \",\";\n\t  label += (ed.cell||\"\") + editorLabel(ed.selections);\n\t}\n\treturn label;\n      } else {\n\treturn editorLabel(sel);\n      }\n    },\n\n    /**\n     * Restore a selection retrieved using `getSelection`.\n     */\n    restoreSelection: function(sel) {\n      if ( this.hasClass(\"prolog-editor\") ) {\t/* plain editor */\n\treturn this.prologEditor('restoreSelection', sel);\n      } else if ( this.hasClass(\"notebook\") ) { /* notebook */\n\treturn this.notebook('restoreSelection', sel);\n      } else {\n\tconsole.log(sel);\n      }\n    },\n\n    /**\n     * @return {Boolean} `true` if storage is in an active tab\n     */\n    getActive: function() {\n      return $(this).closest(\".tab-pane.active\").length == 1;\n    },\n\n    /**\n     * Get a document identification string for chats, status, etc.\n     * @param {String} [type] defines the type of storage supported\n     * @param {Object} [data] is the data object from which to derive\n     * the id.\n     * @return {String} identifier for the document\n     */\n    docid: function(type, data) {\n      data = data||this.data(pluginName);\n\n      if ( !type || type == data.st_type ) {\n\tvar meta = data.meta||{};\n\n\tif ( data.st_type == \"gitty\" ) {\n\t  return \"gitty:\"+meta.name;\n\t} else if ( data.st_type == \"filesys\" ) {\n\t  return \"filesys:\"+meta.path;\n\t} else if ( data.st_type == \"external\" ) {\n\t  return \"url:\"+data.url;\n\t}\n      }\n    },\n\n    /**\n     * Open the chat window for the current file\n     */\n    chat: function(action) {\n      var data = this.data(pluginName);\n      var docid = this.storage('docid', 'gitty');\n\n      if ( docid ) {\n\tvar chat = this.closest(\".tab-pane\").find(\".chatroom\");\n\n\tif ( chat.length > 0 ) {\n\t  if ( action == 'update' )\n\t    chat.chatroom('docid', docid, 'close');\n\t  else\n\t    utils.flash(chat);\n\t} else if ( action != 'update' ) {\n\t  chat = $($.el.div({class:\"chatroom\"}));\n\t  var percentage;\n\n\t  if ( typeof(action) == \"number\" )\n\t    percentage = action;\n\t  else if ( action == 'large' )\n\t    percentage = 80;\n\t  else\n\t    percentage = 20;\n\n\t  chat.chatroom({docid:docid});\n\t  this.tile('split', chat, \"below\", percentage, 150)\n\t      .addClass(\"chat-container\");\n\t}\n      } else if ( action == 'update' ) {\n\tthis.storage('close_chat');\n      } else if ( !data.st_type ) {\n\tmodal.alert(\"You can only chat about a saved document.<br>\"+\n\t\t    \"Please save your document and try again.\");\n      } else {\n\tmodal.alert(\"The chat facility is only available for \"+\n\t\t    \"user-saved files.<br>\"+\n\t\t    \"You can use the <b>Open hangout</b> menu from \"+\n\t\t    \"the top-right bell to access the hangout room.\");\n      }\n\n      return this;\n    },\n\n    /**\n     * Close associated chat\n     */\n    close_chat: function() {\n      this.closest(\".chat-container\").find(\".chatroom\").chatroom('close');\n    },\n\n    /**\n     * @return percentage of the chatroom, `true` when undefined or\n     * `false` if there is no chatroom.\n     */\n    chatroom_size: function() {\n      var tab = this.closest(\".tab-pane\");\n      var cr = tab.find(\".chatroom\").closest(\".pane-wrapper\");\n      if ( cr.length > 0 ) {\n\tvar h = tab.height();\n\tif ( h == 0 )\n\t  return 20;\t\t\t/* default */\n\treturn Math.round(cr.height()*100/h);\n      }\n      return false;\n    },\n\n    /**\n     * Act upon the arrival of a chat message.  Update the tab title.\n     * If the message is not displayed and it is not permanent\n     * (`create == false`) we should not update the counter.\n     */\n    chat_message: function(msg) {\n      if ( !msg.displayed && msg.create == false )\n\treturn this;\n\n      return this.each(function() {\n\tvar elem = $(this);\n\n\tif ( msg.docid == elem.storage('docid') ) {\n\t  var data = elem.data(pluginName);\n\n\t  if ( data.chats ) {\n\t    if ( data.chats.total != undefined ) data.chats.total++;\n\t    if ( data.chats.count != undefined ) data.chats.count++;\n\t  } else {\n\t    data.chats = {total:1};\n\t  }\n\n\t  elem.storage('update_tab_title', 'chats++');\n\t}\n      });\n    },\n\n    /**\n     * Handle (error) messages when reloading a plugin registered using\n     * `:- use_gitty_file(File)`.\n     *\n     * @param {Array.Object} messages\n     */\n\n    load_messages: function(messages) {\n      var warnings = 0;\n      var errors = 0;\n      var html = \"\";\n      var done;\n\n      for(var i=0; i<messages.length; i++) {\n\tvar msg = messages[i];\n\n\tif ( msg.kind == \"warning\" ) {\n\t  warnings++;\n\t} else if ( msg.kind == \"error\" ) {\n\t  errors++;\n\t} else if ( msg.code == done )\n\t{ done = msg.data[0];\n\t  continue;\n\t} else\n\t  continue;\n\n\tif ( msg.html )\n\t  html += msg.html;\n\telse\n\t  html += $($.el.div($.el.pre({class:\"msg-\"+msg.kind},\n\t\t\t\t      msg.data[0]))).html();\n\n\tthis.prologEditor('highlightError', msg);\n      }\n\n      if ( errors || warnings ) {\n\tvar explain;\n\n\texplain = $($.el.div(\n\t\t    $.el.p(\"The following messages where generated while \"+\n\t\t\t   \"compiling the file.  These messages are inserted \"+\n\t\t\t   \"in the editor.\"))).html();\n\n\tmodal.alert(explain + html);\n      } else if ( done ) {\n\tmodal.feedback({ html: done,\n\t\t\t owner: this\n\t\t       });\n      }\n\n      return this;\n    },\n\n    /**\n     * Edit the _follow_ options for this file.\n     */\n\n    follow: function() {\n      var docid = this.storage('docid', 'gitty');\n\n      if ( docid ) {\n\tmodal.server_form({\n\t  title: \"Follow file options\",\n\t  url:   config.http.locations.follow_file_options,\n\t  data:  {docid: docid}\n\t});\n      } else {\n\tmodal.alert(\"Sorry, can only follow files\");\n      }\n    },\n\n    /**\n     * Called if the editor is destroyed to see whether it has pending\n     * modifications.\n     *\n     * @param {String} why is one of `\"beforeunload\" if the window is\n     * left or \"setSource\" if the source will be replaced.\n     */\n    unload: function(why, ev) {\n      var data = this.data(pluginName);\n\n      if ( !data )\t\t\t\t/* how can this happen? */\n\treturn undefined;\n\n      if ( data.meta ) {\n\thistory.addRecent({ st_type: \"gitty\",\n\t\t\t    id:\t  data.meta.name\t/* FIXME: add hash? */\n\t\t\t  });\n      }\n\n      if ( data.cleanData && data.getValue &&\n\t   data.cleanData != data.getValue() ) {\n\tif ( why == \"beforeunload\" ) {\n\t  var message = \"The source editor has unsaved changes.\\n\"+\n\t                \"These will be lost if you leave the page\";\n\n\t  ev = ev||window.event;\n\t  if ( ev )\n\t    ev.returnValue = message;\n\n\t  return message;\n\t} else {\n\t  var message = \"The source editor has unsaved changes.\\n\"+\n\t                \"These will be lost\"+\n\t\t\t( why == \"setSource\" ? \" if you load a new program\" :\n\t\t\t  why == \"closetab\"  ? \" close this tab\" : \"\"\n\t\t\t);\n\n\t  return confirm(message);\n\t}\n      }\n\n      return undefined;\n    },\n\n    /**\n     * Called if this element is inside a tab this is being closed\n     */\n    close: function() {\n    },\n\n    /**\n     * maintain `data.is_clean`\n     */\n    markClean: function(clean) {\n      var data = this.data(pluginName);\n\n      data.is_clean = clean;\n    },\n\n    /**\n     * Broadcast all open (gitty) files. This is used to synchronise\n     * state.  Each state object has the property `file`.  If the file\n     * is locally modified, `state.modified` is `true` and if the file\n     * is the visible one, `state.visible` is true\n     * @param {Bool} [always] if `true`, also report if no files are\n     * open.\n     */\n    chat_status: function(always) {\n      var opened = [];\n\n      this.each(function() {\n\tvar data = $(this).data(pluginName);\n\n\tif ( data.st_type == \"gitty\" && data.meta && data.meta.name ) {\n\t  var state = { file:  data.meta.name };\n\n\t  if ( !data.is_clean ) state.modified = true;\n\t  if ( $(this).is(\":visible\") ) state.visible = true;\n\t  opened.push(state);\n\t}\n      });\n\n      if ( always || opened.length > 0 )\n\t$(\"#chat\").trigger('send',\n\t\t\t   { type:'has-open-files',\n\t\t\t     files:opened\n\t\t\t   });\n    }\n  }; // methods\n\n  function capitalizeFirstLetter(string) {\n    return string.charAt(0).toUpperCase() + string.slice(1);\n  }\n\n  function filesysInfo(form, meta) {\n    var table = $.el.table({class:\"table table-striped\"});\n\n    $(table).append($.el.tr($.el.th(\"Path\"),\n\t\t\t    $.el.td(meta.path)));\n    $(table).append($.el.tr($.el.th(\"Modified\"),\n\t\t\t    $.el.td(new Date(meta.last_modified*1000)\n\t\t\t\t    .toLocaleString())));\n    $(table).append($.el.tr($.el.th(\"Loaded\"),\n\t\t\t    $.el.td(meta.modified_since_loaded ? \"yes (modified)\":\n\t\t\t\t    meta.loaded ? \"yes\" : \"no\")));\n\n    form.append(table);\n  }\n\n  function errorString(action, error) {\n    if ( error.error == \"file_exists\" ) {\n      return action + \": file exists: \" + error.file;\n    }\n\n    return JSON.stringify(error);\n  }\n\n\n  /**\n   * <Class description>\n   *\n   * @class storage\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.storage = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n  function filebase(file) {\n    return file ? file.split('.').slice(0,-1).join(\".\") : null;\n  }\n\n  function udiff(diff) {\n    if ( diff ) {\n      var lines = diff.split(\"\\n\");\n      var pre = $($.el.pre({class:\"udiff\"}));\n\n      for(var i=0; i<lines.length; i++) {\n\tvar line = lines[i];\n\tvar classmap = { '@': 'udiff-hdr',\n\t\t\t ' ': 'udiff-ctx',\n\t\t\t '+': 'udiff-add',\n\t\t\t '-': 'udiff-del'\n\t\t       };\n\tpre.append($.el.span({class:classmap[line.charAt(0)]}, line),\n\t\t   $.el.br());\n      }\n      return pre;\n    } else {\n      return $($.el.div({class:\"udiff\"}, \"No changes\"));\n    }\n  }\n\n  function editConflicts(merged) {\n    var lines = merged.split(\"\\n\");\n    var pre = $($.el.pre({class:\"udiff\"}));\n    var cls = null;\n\n    function addLine(line, cls) {\n      pre.append($.el.span({class:cls}, line),\n\t\t $.el.br());\n    }\n\n    for(var i=0; i<lines.length; i++) {\n      var line = lines[i];\n\n      if ( line == \"<<<<<<<\" ) {\n\taddLine(line, \"edit-conflict-sep\");\n\tcls = \"edit-conflict-me\";\n      } else if ( cls == \"edit-conflict-me\" && line == \"=======\" ) {\n\taddLine(line, \"edit-conflict-sep\");\n\tcls = \"edit-conflict-them\";\n      } else if ( cls == \"edit-conflict-them\" && line == \">>>>>>>\" ) {\n\taddLine(line, \"edit-conflict-sep\");\n\tcls = null;\n      } else if ( cls ) {\n\taddLine(line, cls);\n     }\n   }\n\n   return pre;\n  }\n});\n\n","/*  Generated file.  Do not edit!\n    Generated by Unicode/prolog_syntax_map.pl\n*/\n\ndefine('cm/mode/prolog/prolog-ctype',[], function() {\nvar UNICODE_MAP_SIZE     = 4353;\nvar U_ID_START            = 0x1;\nvar U_ID_CONTINUE         = 0x2;\nvar U_UPPERCASE           = 0x4;\nvar U_SEPARATOR           = 0x8;\nvar U_SYMBOL             = 0x10;\nvar U_OTHER              = 0x20;\nvar U_CONTROL            = 0x40;\n\n\nvar ucp0x00 = \"\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x00\\x00\\x00\\x10\\x10\\x00\\x10\\x00\\x00\\x00\\x10\\x10\\x00\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x10\\x00\\x10\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x10\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x10\\x10\\x40\\x10\\x10\\x10\\x10\\x20\\x20\\x10\\x03\\x10\\x10\\x10\\x20\\x03\\x10\\x20\\x20\\x20\\x10\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x10\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0x01 = \"\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x03\\x07\\x07\\x03\\x07\\x03\\x07\\x07\\x03\\x07\\x07\\x07\\x03\\x03\\x07\\x07\\x07\\x07\\x03\\x07\\x07\\x03\\x07\\x07\\x07\\x03\\x03\\x03\\x07\\x07\\x03\\x07\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x07\\x03\\x07\\x03\\x03\\x07\\x03\\x07\\x07\\x03\\x07\\x07\\x07\\x03\\x07\\x03\\x07\\x07\\x03\\x03\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x03\\x07\\x03\\x03\\x07\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x07\\x03\\x03\\x07\\x03\\x07\\x07\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\";\nvar ucp0x02 = \"\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x03\\x07\\x07\\x03\\x03\\x07\\x03\\x07\\x07\\x07\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x10\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\";\nvar ucp0x03 = \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x07\\x03\\x07\\x03\\x03\\x10\\x07\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x10\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x07\\x12\\x07\\x07\\x07\\x00\\x07\\x00\\x07\\x07\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x03\\x07\\x07\\x07\\x03\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x10\\x07\\x03\\x07\\x07\\x03\\x03\\x07\\x07\\x07\";\nvar ucp0x04 = \"\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x10\\x02\\x02\\x02\\x02\\x02\\x20\\x20\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\";\nvar ucp0x05 = \"\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x00\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x10\\x10\\x00\\x00\\x00\\x00\\x10\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x02\\x10\\x02\\x02\\x10\\x02\\x02\\x10\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x06 = \"\\x40\\x40\\x40\\x40\\x40\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x40\\x00\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x03\\x03\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x40\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x02\\x02\\x10\\x02\\x02\\x02\\x02\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x10\\x10\\x03\";\nvar ucp0x07 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x40\\x03\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x10\\x10\\x10\\x10\\x03\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x08 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x00\\x00\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\";\nvar ucp0x09 = \"\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x02\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x03\\x03\\x00\\x03\\x03\\x03\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x10\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x00\\x00\\x00\\x00\";\nvar ucp0x0a = \"\\x00\\x02\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x03\\x00\\x00\\x02\\x00\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x00\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x0b = \"\\x00\\x02\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x00\\x00\\x00\\x00\\x03\\x03\\x00\\x03\\x03\\x03\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x03\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x00\\x03\\x00\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x02\\x00\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x0c = \"\\x00\\x02\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x00\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x00\\x00\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\x03\\x03\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x0d = \"\\x00\\x00\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x02\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x0e = \"\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x00\\x03\\x00\\x00\\x03\\x03\\x00\\x03\\x00\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x00\\x03\\x00\\x03\\x00\\x00\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x02\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x0f = \"\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x02\\x10\\x02\\x10\\x02\\x10\\x10\\x10\\x10\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x10 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x07\\x00\\x00\\x00\\x00\\x00\\x07\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\";\nvar ucp0x12 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0x13 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x22\\x22\\x22\\x22\\x22\\x22\\x22\\x22\\x22\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x14 = \"\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0x16 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x08\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x17 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x00\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x03\\x10\\x10\\x10\\x10\\x03\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x18 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x40\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x03\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x19 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x10\\x00\\x00\\x00\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x22\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\";\nvar ucp0x1a = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1b = \"\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\";\nvar ucp0x1c = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1d = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\";\nvar ucp0x1e = \"\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\";\nvar ucp0x1f = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x07\\x00\\x07\\x00\\x07\\x00\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x07\\x07\\x07\\x07\\x03\\x10\\x03\\x10\\x10\\x10\\x03\\x03\\x03\\x00\\x03\\x03\\x07\\x07\\x07\\x07\\x03\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x07\\x07\\x07\\x07\\x00\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x10\\x10\\x10\\x00\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x07\\x07\\x07\\x07\\x03\\x10\\x10\\x00\";\nvar ucp0x20 = \"\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x40\\x40\\x40\\x40\\x40\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x08\\x08\\x40\\x40\\x40\\x40\\x40\\x08\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x12\\x12\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x12\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x08\\x40\\x40\\x40\\x40\\x40\\x00\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x20\\x03\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x03\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x20\\x20\\x20\\x20\\x02\\x20\\x20\\x20\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x21 = \"\\x10\\x10\\x07\\x10\\x10\\x10\\x10\\x07\\x10\\x10\\x03\\x07\\x07\\x07\\x03\\x03\\x07\\x07\\x07\\x03\\x10\\x07\\x10\\x10\\x13\\x07\\x07\\x07\\x07\\x07\\x10\\x10\\x10\\x10\\x10\\x10\\x07\\x10\\x07\\x10\\x07\\x10\\x07\\x07\\x07\\x07\\x13\\x03\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x03\\x03\\x07\\x07\\x10\\x10\\x10\\x10\\x10\\x07\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x03\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\";\nvar ucp0x23 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x24 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\";\nvar ucp0x27 = \"\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\";\nvar ucp0x2b = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x2c = \"\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x07\\x03\\x07\\x07\\x07\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x07\\x07\\x07\\x03\\x07\\x03\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x07\\x03\\x07\\x03\\x02\\x02\\x02\\x07\\x03\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x20\\x10\\x10\";\nvar ucp0x2d = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\";\nvar ucp0x2e = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x2f = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\";\nvar ucp0x30 = \"\\x08\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x02\\x13\\x13\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\";\nvar ucp0x31 = \"\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x10\\x10\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0x32 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\";\nvar ucp0x4d = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\";\nvar ucp0x9f = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xa4 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\";\nvar ucp0xa6 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x02\\x20\\x20\\x20\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xa7 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x10\\x10\\x07\\x03\\x07\\x03\\x00\\x07\\x03\\x07\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0xa8 = \"\\x03\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x03\\x00\\x00\\x00\\x00\";\nvar ucp0xa9 = \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xaa = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x03\\x02\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x03\\x02\\x02\\x02\\x03\\x03\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x03\\x02\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x03\\x03\\x03\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xab = \"\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xd7 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\";\nvar ucp0xd8 = \"\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xdb = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\";\nvar ucp0xdc = \"\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xdf = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\";\nvar ucp0xe0 = \"\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xf8 = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\";\nvar ucp0xfa = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xfb = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x03\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0xfd = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x00\\x00\";\nvar ucp0xfe = \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x12\\x12\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x12\\x12\\x12\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x40\";\nvar ucp0xff = \"\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x10\\x10\\x10\\x10\\x12\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\\x40\\x40\\x10\\x10\\x00\\x00\";\nvar ucp0x100 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x101 = \"\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x20\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x00\\x00\";\nvar ucp0x102 = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x103 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x104 = \"\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x108 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x00\\x00\\x00\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x109 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x10a = \"\\x03\\x02\\x02\\x02\\x00\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x02\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x20\\x20\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x10b = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x10c = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x10e = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x110 = \"\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x40\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x111 = \"\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x116 = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x123 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x124 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x134 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x16a = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x16f = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1b0 = \"\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1d0 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1d1 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1d2 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1d3 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1d4 = \"\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x00\\x07\\x07\\x00\\x00\\x07\\x00\\x00\\x07\\x07\\x00\\x00\\x07\\x07\\x07\\x07\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0x1d5 = \"\\x03\\x03\\x03\\x03\\x07\\x07\\x00\\x07\\x07\\x07\\x07\\x00\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x00\\x07\\x07\\x07\\x07\\x00\\x07\\x07\\x07\\x07\\x07\\x00\\x07\\x00\\x00\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0x1d6 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x10\\x03\\x03\\x03\\x03\";\nvar ucp0x1d7 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\";\nvar ucp0x1ee = \"\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x00\\x00\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x00\\x03\\x00\\x03\\x00\\x03\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x00\\x00\\x03\\x00\\x03\\x00\\x03\\x00\\x03\\x00\\x03\\x00\\x03\\x03\\x00\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1f0 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1f1 = \"\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\";\nvar ucp0x1f2 = \"\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1f3 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1f4 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x00\\x00\\x00\";\nvar ucp0x1f5 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\";\nvar ucp0x1f6 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1f7 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x2a6 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x2b7 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0x2b8 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x2fa = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xe00 = \"\\x00\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xe01 = \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xf00 = \"\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xfff = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\\x00\\x00\";\nvar ucp0x1000 = \"\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x10ff = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\\x00\\x00\";\nvar uflags_map = [ucp0x00, ucp0x01, ucp0x02, ucp0x03, ucp0x04, ucp0x05, ucp0x06, ucp0x07,\n  ucp0x08, ucp0x09, ucp0x0a, ucp0x0b, ucp0x0c, ucp0x0d, ucp0x0e, ucp0x0f,\n  ucp0x10, 0x3, ucp0x12, ucp0x13, ucp0x14, 0x3, ucp0x16, ucp0x17,\n  ucp0x18, ucp0x19, ucp0x1a, ucp0x1b, ucp0x1c, ucp0x1d, ucp0x1e, ucp0x1f,\n  ucp0x20, ucp0x21, 0x10, ucp0x23, ucp0x24, 0x10, 0x10, ucp0x27,\n  0x10, 0x10, 0x10, ucp0x2b, ucp0x2c, ucp0x2d, ucp0x2e, ucp0x2f,\n  ucp0x30, ucp0x31, ucp0x32, 0x10, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, ucp0x4d, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, ucp0x9f,\n  0x3, 0x3, 0x3, 0x3, ucp0xa4, 0x3, ucp0xa6, ucp0xa7,\n  ucp0xa8, ucp0xa9, ucp0xaa, ucp0xab, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, ucp0xd7,\n  ucp0xd8, 0x0, 0x0, ucp0xdb, ucp0xdc, 0x0, 0x0, ucp0xdf,\n  ucp0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  ucp0xf8, 0x3, ucp0xfa, ucp0xfb, 0x3, ucp0xfd, ucp0xfe, ucp0xff,\n  ucp0x100, ucp0x101, ucp0x102, ucp0x103, ucp0x104, 0x0, 0x0, 0x0,\n  ucp0x108, ucp0x109, ucp0x10a, ucp0x10b, ucp0x10c, 0x0, ucp0x10e, 0x0,\n  ucp0x110, ucp0x111, 0x0, 0x0, 0x0, 0x0, ucp0x116, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x3, 0x3, 0x3, ucp0x123, ucp0x124, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x3, 0x3, 0x3, 0x3, ucp0x134, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x3, 0x3, ucp0x16a, 0x0, 0x0, 0x0, 0x0, ucp0x16f,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  ucp0x1b0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  ucp0x1d0, ucp0x1d1, ucp0x1d2, ucp0x1d3, ucp0x1d4, ucp0x1d5, ucp0x1d6, ucp0x1d7,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ucp0x1ee, 0x0,\n  ucp0x1f0, ucp0x1f1, ucp0x1f2, ucp0x1f3, ucp0x1f4, ucp0x1f5, ucp0x1f6, ucp0x1f7,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, ucp0x2a6, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, ucp0x2b7,\n  ucp0x2b8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x3, 0x3, ucp0x2fa, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  ucp0xe00, ucp0xe01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  ucp0xf00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ucp0xfff,\n  ucp0x1000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ucp0x10ff,\n  0x0];\n\nfunction uflagsW(chr) {\n  var code = chr.charCodeAt(0);\n  var cp = Math.floor(code/0x100);\n  if ( cp < UNICODE_MAP_SIZE ) {\n    var map = uflags_map[cp];\n\n    if ( typeof(map) == \"number\" ) {\n      return map;\n    } else {\n      return map.charCodeAt(code&0xff);\n    }\n  }\n  return 0;\n}\n\nreturn {\n  flags:       uflagsW,\n  id_start:    function(chr) { return (uflagsW(chr) & U_ID_START)    != 0 },\n  id_continue: function(chr) { return (uflagsW(chr) & U_ID_CONTINUE) != 0 },\n  uppercase:   function(chr) { return (uflagsW(chr) & U_UPPERCASE)   != 0 },\n  separator:   function(chr) { return (uflagsW(chr) & U_SEPARATOR)   != 0 },\n  symbol:      function(chr) { return (uflagsW(chr) & U_SYMBOL)      != 0 },\n  other:       function(chr) { return (uflagsW(chr) & U_OTHER)       != 0 },\n  control:     function(chr) { return (uflagsW(chr) & U_CONTROL)     != 0 }\n}\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/prolog/prolog',[\"../../lib/codemirror\", \"./prolog-ctype\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror, ctype) {\n\"use strict\";\n\n  CodeMirror.defineMode(\"prolog\", function(cmConfig, parserConfig) {\n\n  function chain(stream, state, f) {\n    state.tokenize = f;\n    return f(stream, state);\n  }\n\n\t\t /*******************************\n\t\t *\t   CONFIG DATA\t\t*\n\t\t *******************************/\n\n  var config = { quasiQuotations: true,\t\t/* {|Syntax||Quotation|} */\n\t         dicts: true,\t\t\t/* tag{k:v, ...} */\n\t\t unicodeEscape: true,\t\t/* \\uXXXX and \\UXXXXXXXX */\n\t\t multiLineQuoted: true,\t\t/* \"...\\n...\" */\n\t\t groupedIntegers: true\t\t/* 10 000 or 10_000 */\n\t       };\n\n  var quoteType = { '\"': \"string\",\n\t\t    \"'\": \"qatom\",\n\t\t    \"`\": \"bqstring\"\n\t\t  };\n\n  var isSingleEscChar = /[abref\\\\'\"nrtsv]/;\n  var isOctalDigit    = /[0-7]/;\n  var isHexDigit      = /[0-9a-fA-F]/;\n\n  var isSymbolChar = /[-#$&*+./:<=>?@\\\\^~]/;\t/* Prolog glueing symbols chars */\n  var isSoloChar   = /[[\\]{}(),;|!]/;\t\t/* Prolog solo chars */\n  var isNeck       = /^(:-|-->)$/;\n  var isControlOp  = /^(,|;|->|\\*->|\\\\+|\\|)$/;\n\n\n\t\t /*******************************\n\t\t *\t CHARACTER ESCAPES\t*\n\t\t *******************************/\n\n  function readDigits(stream, re, count) {\n    if ( count > 0 ) {\n      while( count-- > 0 ) {\n\tif ( !re.test(stream.next()) )\n\t  return false;\n      }\n    } else {\n      while ( re.test(stream.peek()) )\n\tstream.next();\n    }\n    return true;\n  }\n\n  function readEsc(stream) {\n    var next = stream.next();\n    if ( isSingleEscChar.test(next) )\n      return true;\n    switch( next )\n    { case \"u\":\n\tif ( config.unicodeEscape )\n\t  return readDigits(stream, isHexDigit, 4); /* SWI */\n        return false;\n      case \"U\":\n\tif ( config.unicodeEscape )\n\t  return readDigits(stream, isHexDigit, 8); /* SWI */\n        return false;\n      case null: return true;\t\t\t/* end of line */\n      case \"c\": stream.eatSpace(); return true;\n      case \"x\": return readDigits(stream, isHexDigit, 2);\n    }\n    if ( isOctalDigit.test(next) ) {\n      if ( !readDigits(stream, isOctalDigit, -1) )\n\treturn false;\n      if ( stream.peek() == \"\\\\\" )\t\t/* SWI: optional closing \\ */\n\tstream.next();\n      return true;\n    }\n    return false;\n  }\n\n  function nextUntilUnescaped(stream, state, end) {\n    var next;\n    while ((next = stream.next()) != null) {\n      if ( next == end && end != stream.peek() )\n      { state.nesting.pop();\n        return false;\n      }\n      if ( next == \"\\\\\" )\n      { if ( !readEsc(stream) )\n\t  return false;\n      }\n    }\n    return config.multiLineQuoted;\n  }\n\n\t\t /*******************************\n\t\t *\tCONTEXT NESTING\t\t*\n\t\t *******************************/\n\n  function nesting(state) {\n    return state.nesting.slice(-1)[0];\n  }\n\n  /* Called on every non-comment token */\n  function setArg1(state) {\n    var nest = nesting(state);\n    if ( nest ) {\n      if ( nest.arg == 0 )\t\t/* nested in a compound */\n\tnest.arg = 1;\n      else if ( nest.type == \"control\" )\n\tstate.goalStart = false;\n    } else\n      state.goalStart = false;\n  }\n\n  function setArgAlignment(state) {\n    var nest = nesting(state);\n    if ( nest && !nest.alignment && nest.arg != undefined ) {\n      if ( nest.arg == 0 )\n\tnest.alignment = nest.leftCol ? nest.leftCol+4 : nest.column+4;\n      else\n\tnest.alignment = nest.column+1;\n    }\n  }\n\n  function nextArg(state) {\n    var nest = nesting(state);\n    if ( nest ) {\n      if ( nest.arg )\t\t\t/* nested in a compound */\n\tnest.arg++;\n      else if ( nest.type == \"control\" )\n\tstate.goalStart = true;\t\t/* FIXME: also needed for ; and -> */\n    } else\n      state.goalStart = true;\n  }\n\n  function isControl(state) {\t\t/* our terms are goals */\n    var nest = nesting(state);\n    if ( nest ) {\n      if ( nest.type == \"control\" ) {\n\treturn true;\n      }\n      return false;\n    } else\n      return state.inBody;\n  }\n\n  // Used as scratch variables to communicate multiple values without\n  // consing up tons of objects.\n  var type, content;\n  function ret(tp, style, cont) {\n    type = tp; content = cont;\n    return style;\n  }\n\n  function peekSpace(stream) {\t\t/* TBD: handle block comment as space */\n    if ( stream.eol() ||\n\t /[\\s%]/.test(stream.peek()) )\n      return true;\n    return false;\n  }\n\n\n\t\t /*******************************\n\t\t *\t   SUB TOKENISERS\t*\n\t\t *******************************/\n\n  function plTokenBase(stream, state) {\n    var ch = stream.next();\n\n    if ( ch == \"(\" ) {\n      if ( state.lastType == \"functor\" ) {\n\tstate.nesting.push({ functor: state.functorName,\n\t\t\t     column: stream.column(),\n\t\t\t     leftCol: state.functorColumn,\n\t\t\t     arg: 0\n\t\t\t   });\n\tdelete state.functorName;\n\tdelete state.functorColumn;\n      } else {\n\tstate.nesting.push({ type: \"control\",\n\t\t\t     closeColumn: stream.column(),\n\t\t\t     alignment: stream.column()+4\n\t\t\t   });\n      }\n      return ret(\"solo\", null, \"(\");\n    }\n\n    if ( ch == \"{\" && state.lastType == \"tag\" ) {\n      state.nesting.push({ tag: state.tagName,\n\t\t\t   column: stream.column(),\n\t\t\t   leftCol: state.tagColumn,\n\t\t\t   arg: 0\n\t\t\t });\n      delete state.tagName;\n      delete state.tagColumn;\n      return ret(\"dict_open\", null);\n    }\n\n    if ( ch == \"/\" && stream.eat(\"*\") )\n      return chain(stream, state, plTokenComment);\n\n    if ( ch == \"%\" ) {\n      stream.skipToEnd();\n      return ret(\"comment\", \"comment\");\n    }\n\n    setArg1(state);\n\n    if ( isSoloChar.test(ch) ) {\n      switch ( ch )\n      { case \")\":\n\t  state.nesting.pop();\n\t  break;\n\tcase \"]\":\n\t  state.nesting.pop();\n\t  return ret(\"list_close\", null, \"]\");\n\tcase \"}\":\n\t{ var nest = nesting(state);\n\t  var type = (nest && nest.tag) ? \"dict_close\" : \"brace_term_close\";\n\n\t  state.nesting.pop();\n\t  return ret(type, null);\n\t}\n\tcase \",\":\n\t  if ( stream.eol() )\n\t    state.commaAtEOL = true;\n\t  nextArg(state);\n          /*FALLTHROUGH*/\n\tcase \";\":\n\t  if ( isControl(state) )\n\t    state.goalStart = true;\n\t  break;\n\tcase \"[\":\n\t  state.nesting.push({ type: \"list\",\n\t\t\t       closeColumn: stream.column(),\n\t\t\t       alignment: stream.column()+2\n\t\t\t     });\n\t  return ret(\"list_open\", null, \"[\");\n\t  break;\n\tcase \"{\":\n\t  if ( config.quasiQuotations && stream.eat(\"|\") ) {\n\t    state.nesting.push({ type: \"quasi-quotation\",\n\t\t\t         alignment: stream.column()+1\n\t\t\t       });\n\t    return ret(\"qq_open\", \"qq_open\");\n\t  } else {\n\t    state.nesting.push({ type: \"curly\",\n\t\t\t         closeColumn: stream.column(),\n\t\t\t\t alignment: stream.column()+2\n\t\t\t       });\n\t    return ret(\"brace_term_open\", null);\n\t  }\n\t  break;\n\tcase \"|\":\n\t  if ( config.quasiQuotations ) {\n\t    if ( stream.eat(\"|\") ) {\n\t      state.tokenize = plTokenQuasiQuotation;\n\t      return ret(\"qq_sep\", \"qq_sep\");\n\t    } else if ( stream.eat(\"}\") ) {\n\t      state.nesting.pop();\n\t      return ret(\"qq_close\", \"qq_close\");\n\t    }\n\t  }\n\t  if ( isControl(state) )\n\t    state.goalStart = true;\n\t  break;\n      }\n      return ret(\"solo\", null, ch);\n    }\n\n    if (ch == '\"' || ch == \"'\" || ch == \"`\")\n    { state.nesting.push({ type: \"quoted\",\n\t\t\t   alignment: stream.column()+1\n\t\t\t });\n      return chain(stream, state, plTokenString(ch));\n    }\n\n    if ( ch == \"0\" ) {\n      if ( stream.eat(/x/i)) {\n\tstream.eatWhile(/[\\da-f]/i);\n\treturn ret(\"number\", \"number\");\n      }\n      if ( stream.eat(/o/i)) {\n\tstream.eatWhile(/[0-7]/i);\n\treturn ret(\"number\", \"number\");\n      }\n      if ( stream.eat(/'/) ) {\t\t\t/* 0' */\n\tvar next = stream.next();\n\tif ( next == \"\\\\\" ) {\n\t  if ( !readEsc(stream) )\n\t    return ret(\"error\", \"error\");\n\t}\n\treturn ret(\"code\", \"code\");\n      }\n    }\n\n    if ( /\\d/.test(ch) || /[+-]/.test(ch) && stream.eat(/\\d/)) {\n      if ( config.groupedIntegers )\n\tstream.match(/^\\d*((_|\\s+)\\d+)*(?:\\.\\d+)?(?:[eE][+\\-]?\\d+)?/);\n      else\n\tstream.match(/^\\d*(?:\\.\\d+)?(?:[eE][+\\-]?\\d+)?/);\n      return ret(ch == \"-\" ? \"neg-number\" :\n\t\t ch == \"+\" ? \"pos-number\" :\n\t\t \"number\");\n    }\n\n    if ( ctype.symbol(ch) ) {\n      stream.eatWhile(ctype.symbol);\n      var atom = stream.current();\n      if ( atom == \".\" && peekSpace(stream) ) {\n\tif ( nesting(state) ) {\n\t  return ret(\"fullstop\", \"error\", atom);\n\t} else {\n\t} return ret(\"fullstop\", \"fullstop\", atom);\n      } else if ( isNeck.test(atom) ) {\n\treturn ret(\"neck\", \"neck\", atom);\n      } else if ( isControl(state) && isControlOp.test(atom) ) {\n\tstate.goalStart = true;\n\treturn ret(\"symbol\", \"operator\", atom);\n      } else\n\treturn ret(\"symbol\", \"operator\", atom);\n    }\n\n    stream.eatWhile(ctype.id_continue);\n    var word = stream.current();\n    if ( stream.peek() == \"{\" && config.dicts ) {\n      state.tagName = word;\t\t\t/* tmp state extension */\n      state.tagColumn = stream.column();\n      return ret(\"tag\", \"tag\", word);\n    } else if ( ch == \"_\" ) {\n      if ( word.length == 1 ) {\n\treturn ret(\"var\", \"anon\", word);\n      } else {\n\tvar sec = word.charAt(1);\n\tif ( ctype.uppercase(sec) )\n\t  return ret(\"var\", \"var-2\", word);\n      }\n      return ret(\"var\", \"var\", word);\n    } else if ( ctype.uppercase(ch) ) {\n      return ret(\"var\", \"var\", word);\n    } else if ( stream.peek() == \"(\" ) {\n      state.functorName = word;\t\t\t/* tmp state extension */\n      state.functorColumn = stream.column();\n      return ret(\"functor\", \"functor\", word);\n    } else\n      return ret(\"atom\", \"atom\", word);\n  }\n\n  function plTokenString(quote) {\n    return function(stream, state) {\n      if (!nextUntilUnescaped(stream, state, quote)) {\n        state.tokenize = plTokenBase;\n\tif ( stream.peek() == \"(\" ) {\t\t/* 'quoted functor'() */\n\t  var word = stream.current();\n\t  state.functorName = word;\t\t/* tmp state extension */\n\t  return ret(\"functor\", \"functor\", word);\n\t}\n\tif ( stream.peek() == \"{\" && config.dicts ) { /* 'quoted tag'{} */\n\t  var word = stream.current();\n\t  state.tagName = word;\t\t\t/* tmp state extension */\n\t  return ret(\"tag\", \"tag\", word);\n\t}\n      }\n      return ret(quoteType[quote], quoteType[quote]);\n    };\n  }\n\n  function plTokenQuasiQuotation(stream, state) {\n    var maybeEnd = false, ch;\n    while (ch = stream.next()) {\n      if (ch == \"}\" && maybeEnd) {\n        state.tokenize = plTokenBase;\n\tstream.backUp(2);\n\tbreak;\n      }\n      maybeEnd = (ch == \"|\");\n    }\n    return ret(\"qq_content\", \"qq_content\");\n  }\n\n  function plTokenComment(stream, state) {\n    var maybeEnd = false, ch;\n    while (ch = stream.next()) {\n      if (ch == \"/\" && maybeEnd) {\n        state.tokenize = plTokenBase;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return ret(\"comment\", \"comment\");\n  }\n\n\n\t\t /*******************************\n\t\t *\t   RETURN OBJECT\t*\n\t\t *******************************/\n\n  return {\n    startState: function() {\n      return {\n        tokenize: plTokenBase,\n\tinBody: false,\n\tgoalStart: false,\n\tlastType: null,\n\tnesting: new Array(),\t\t/* ([{}]) nesting FIXME: copy this */\n\tcurTerm: null,\t\t\t/* term index in metainfo */\n\tcurToken: null\t\t\t/* token in term */\n      };\n    },\n\n    token: function(stream, state) {\n      var nest;\n\n      if ( state.curTerm == null && parserConfig.metainfo ) {\n\tstate.curTerm = 0;\n\tstate.curToken = 0;\n      }\n\n      if ( stream.sol() )\n\tdelete state.commaAtEOL;\n\n      if ( state.tokenize == plTokenBase && stream.eatSpace() ) {\n\tif ( stream.eol() )\n\t  setArgAlignment(state);\n\treturn null;\n      }\n\n      var style = state.tokenize(stream, state);\n\n      if ( stream.eol() )\n\tsetArgAlignment(state);\n\n      if ( type == \"neck\" ) {\n\tstate.inBody = true;\n\tstate.goalStart = true;\n      } else if ( type == \"fullstop\" ) {\n\tstate.inBody = false;\n\tstate.goalStart = false;\n      }\n\n      state.lastType = type;\n\n      if ( typeof(parserConfig.enrich) == \"function\" )\n\tstyle = parserConfig.enrich(stream, state, type, content, style);\n\n      return style;\n    },\n\n    indent: function(state, textAfter) {\n      if (state.tokenize == plTokenComment) return CodeMirror.Pass;\n\n      var nest;\n      if ( (nest=nesting(state)) ) {\n\tif ( nest.closeColumn && !state.commaAtEOL )\n\t  return nest.closeColumn;\n\treturn nest.alignment;\n      }\n      if ( !state.inBody )\n\treturn 0;\n\n      return 4;\n    },\n\n    theme: \"prolog\",\n\n    blockCommentStart: \"/*\",\t\t/* continuecomment.js support */\n    blockCommentEnd: \"*/\",\n    blockCommentContinue: \" * \",\n    lineComment: \"%\",\n  };\n});\n\nCodeMirror.defineMIME(\"text/x-prolog\", \"prolog\");\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/prolog/prolog_keys',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\n\n\t\t /*******************************\n\t\t *\t    ACTIVE KEYS\t\t*\n\t\t *******************************/\n\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\nSupport if-then-else layout like this:\n\ngoal :-\n    (\tCondition\n    ->  IfTrue\n    ;   IfFalse\n    ).\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\n\n  CodeMirror.commands.prologStartIfThenElse = function(cm) {\n    var start = cm.getCursor(\"start\");\n    var token = cm.getTokenAt(start, true);\n\n    if ( token.state.goalStart == true )\n    { cm.replaceSelection(\"(   \", \"end\");\n      return;\n    }\n\n    return CodeMirror.Pass;\n  }\n\n  CodeMirror.commands.prologStartThen = function(cm) {\n    var start = cm.getCursor(\"start\");\n    var token = cm.getTokenAt(start, true);\n\n    /* FIXME: These functions are copied from prolog.js.  How\n       can we reuse these?\n    */\n    function nesting(state) {\n      var len = state.nesting.length;\n      if ( len > 0 )\n\treturn state.nesting[len-1];\n      return null;\n    }\n\n    function isControl(state) {\t\t/* our terms are goals */\n      var nest = nesting(state);\n      if ( nest ) {\n\tif ( nest.type == \"control\" ) {\n\t  return true;\n\t}\n\treturn false;\n      } else\n\treturn state.inBody;\n    }\n\n    if ( start.ch == token.end &&\n\t token.type == \"operator\" &&\n\t token.string == \"-\" &&\n\t isControl(token.state) )\n    { cm.replaceSelection(\">  \", \"end\");\n      return;\n    }\n\n    return CodeMirror.Pass;\n  }\n\n  CodeMirror.commands.prologStartElse = function(cm) {\n    var start = cm.getCursor(\"start\");\n    var token = cm.getTokenAt(start, true);\n\n    if ( token.start == 0 && start.ch == token.end &&\n\t !/\\S/.test(token.string) )\n    { cm.replaceSelection(\";   \", \"end\");\n      return;\n    }\n\n    return CodeMirror.Pass;\n  }\n\n  CodeMirror.defineOption(\"prologKeys\", null, function(cm, val, prev) {\n    if (prev && prev != CodeMirror.Init)\n      cm.removeKeyMap(\"prolog\");\n    if ( val ) {\n      var map = { name:     \"prolog\",\n\t\t  \"'('\":    \"prologStartIfThenElse\",\n\t\t  \"'>'\":    \"prologStartThen\",\n\t\t  \"';'\":    \"prologStartElse\",\n\t\t  \"Ctrl-L\": \"refreshHighlight\"\n\t\t};\n      cm.addKeyMap(map);\n    }\n  });\n\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/prolog/prolog_query',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\n  CodeMirror.commands.prologMaybeFireQuery = function(cm) {\n    var lastl  = cm.lineCount()-1;\n\n    while(lastl >= 0 && cm.getLine(lastl).trim() == \"\")\n      lastl--;\n\n    if ( lastl >= 0 ) {\n      var endc  = cm.getLine(lastl).length;\n      var token = cm.getTokenAt({line:lastl, ch:endc}, true);\n\n      if ( token.type == \"fullstop\" ) {\n\tvar c = cm.getCursor();\n\n\tif ( c.line > lastl || (c.line == lastl && c.ch >= token.end) ) {\n\t  $(\".swish-event-receiver\")\n\t     .trigger(\"feedback\",\n\t\t      { html: \"Use <b>Ctrl+Enter</b> to execute the query\",\n\t\t\towner: $(cm.display.wrapper).closest(\".pane-wrapper\")\n\t\t      });\n\t}\n      }\n    }\n\n    return CodeMirror.Pass;\n  }\n\n  CodeMirror.commands.prologFireQuery = function(cm) {\n\n    return cm.prologFireQuery(cm.getValue());\n  }\n\n  CodeMirror.defineOption(\"prologQuery\", null, function(cm, func, prev) {\n    if (prev && prev != CodeMirror.Init)\n      cm.removeKeyMap(\"prologQuery\");\n    if ( typeof(func) == \"function\" ) {\n      var map = { name:         \"prologQuery\",\n\t\t  \"Ctrl-Enter\": \"prologFireQuery\",\n\t\t  \"Enter\":\t\"prologMaybeFireQuery\"\n\t\t};\n      cm.addKeyMap(map);\n      cm.prologFireQuery = func;\n    }\n  });\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\nThis  addon  extends  the  \"prolog\"   mode  to  perform  server-assisted\nhighlighting.   Server-assisted   highlighting   provides   a   semantic\nclassification of tokens.\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/prolog/prolog_server',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var DEFAULT_DELAY = 1000;\n  var USE_CHANGES_IF_LONGER_THEN = 1000;\n\n  function State(options) {\n    if (typeof options == \"object\") {\n      this.enabled = options.enabled || false;\n      this.role    = options.role    || \"source\";\n      if ( options.sourceID )\n\tthis.sourceID = options.sourceID;\n      this.url  = { change: options.url + \"change\",\n\t\t    tokens: options.url + \"tokens\",\n\t\t    leave:  options.url + \"leave\",\n\t\t    info:   options.url + \"info\"\n\t\t  },\n      this.delay = options.delay ? options.delay : DEFAULT_DELAY;\n      this.generationFromServer = -1;\n      this.tmo = null;\t\t\t/* timeout handle */\n    }\n  }\n\n  /**\n   * Trap CodeMirror change events. This asks for\n   * serverAssistedHighlight() after a configured delay.  If there\n   * is a mirror on the server, we collect the changes in an array\n   * and post them when we ask for server tokens.  Earlier versions\n   * posted immediately, but this is a waste of resources.  We might\n   * want to restore that behaviour if we want to forward changes to\n   * other users.\n   */\n  function changeEditor(cm, change) {\n    var state = cm.state.prologHighlightServer;\n\n    if ( state == null || state.url == null || !state.enabled )\n      return;\n\n    if ( state.tmo ) {\t\t\t/* changing: delay refresh */\n      cm.askRefresh();\n    }\n\n    if ( state.changes !== undefined )\n      state.changes.push(change);\n\n    if ( change.origin == \"setValue\" ||\n\t state.generationFromServer == -1 ) {\n      state.changes = undefined;\t/* force a clean start */\n      cm.serverAssistedHighlight();\n    }\n  }\n\n  function leaveEditor(cm) {\n    var state = cm.state.prologHighlightServer;\n\n    if ( state == null || state.url == null || state.uuid == null )\n      return;\n    var uuid = state.uuid;\n    delete state.uuid;\n\n    $.ajax({ url: state.url.leave,\n\t     async: false,  // otherwise it is killed before completion\n\t     contentType: 'application/json',\n\t     type: \"POST\",\n\t     dataType: \"json\",\n\t     data: JSON.stringify({ uuid: uuid\n\t\t\t\t  })\n\t   });\n  }\n\n  /**\n   * control server side highlight support. This can be in three states:\n   * (1) absent, in which case `cm.state.prologHighlightServer` is not\n   * present, (2) disabled and (3) enabled.\n   */\n  CodeMirror.defineOption(\"prologHighlightServer\", false, function(cm, val, old) {\n    function leaveCM() { leaveEditor(cm); }\n\n    if ( cm.state.prologHighlightServer ) {\n      if ( val == null ) {\t\t/* remove the highlight server */\n\tleaveEditor(cm);\n\tcm.off(\"change\", changeEditor);\n\twindow.removeEventListener(\"unload\", leaveCM);\n\tdelete cm.state.prologHighlightServer;\n\tcm.setOption(\"mode\", {name:\"prolog\"});\n      } else {\n\tif ( val.enabled != old.enabled ) {\n\t  cm.state.prologHighlightServer.enabled = val.enabled;\n\t  if ( val.enabled ) {\t\t/* enable the highlight server */\n\t    cm.on(\"change\", changeEditor);\n\t    window.addEventListener(\"unload\", leaveCM);\n\t    if ( cm.lineCount() > 0 ) {\n\t      cm.serverAssistedHighlight(true);\n\t    }\n\t  } else {\t\t\t/* disable */\n\t    leaveEditor(cm);\n\t    cm.off(\"change\", changeEditor);\n\t    window.removeEventListener(\"unload\", leaveCM);\n\t    cm.setOption(\"mode\", {name:\"prolog\"});\n\t  }\n\t}\n      }\n    } else if ( val ) {\t\t\t/* create for the first time */\n      cm.state.prologHighlightServer = new State(val);\n      if ( cm.state.prologHighlightServer.enabled ) {\n\tcm.on(\"change\", changeEditor);\n\twindow.addEventListener(\"unload\", leaveCM);\n\tif ( cm.lineCount() > 0 ) {\n\t  cm.serverAssistedHighlight(true);\n\t}\n      }\n    }\n  });\n\n\n  CodeMirror.prototype.askRefresh = function(time) {\n    var cm = this;\n    var state = cm.state.prologHighlightServer;\n\n    if ( state == null )\n      return;\n\n    if ( time === undefined )\n      time = state.delay;\n\n    if ( state.tmo )\n      clearTimeout(state.tmo);\n\n    state.tmo = setTimeout(function() { cm.serverAssistedHighlight(); },\n\t\t\t   time);\n  };\n\n\n  CodeMirror.prototype.serverAssistedHighlight = function(always) {\n    var cm = this;\n    var state = cm.state.prologHighlightServer;\n    var msg = {};\n\n    state.tmo = null;\n\n    if ( state == null || state.url == null || !state.enabled ||\n\t (cm.isClean(state.generationFromServer) && !always) )\n      return;\n\n    function modeOptions() {\n      var opts = cm.getOption(\"mode\");\n\n      if ( typeof(opts) != \"object\" ) {\n\topts = { name:\"prolog\",\n\t\t enrich:enrichStyle,\n\t\t editor:cm\n\t       };\n      } else if ( !opts.enrich ) {\n\topts.enrich = enrichStyle;\n\topts.editor = cm;\n      }\n      return opts;\n    }\n\n    if ( state.uuid ) {\t\t\t/* server has a mirror */\n      msg.uuid = state.uuid;\n      if ( state.changes == undefined ) {\n\tmsg.text = cm.getValue();\n\tif ( msg.text.length > USE_CHANGES_IF_LONGER_THEN )\n\t  state.changes = [];\n      } else {\n\tmsg.changes = state.changes;\n\tstate.changes = [];\n      }\n    } else {\n      msg.text   = cm.getValue();\n      if ( msg.text.trim() == \"\" )\n\treturn;\n      state.uuid = generateUUID();\n      msg.uuid   = state.uuid;\n    }\n    msg.role = state.role;\n    if ( typeof(state.sourceID) == \"function\" )\n      msg.sourceID = state.sourceID();\n\n    state.generationFromServer = cm.changeGeneration();\n    $.ajax({ url: state.url.tokens,\n\t     dataType: \"json\",\n\t     contentType: 'application/json',\n\t     type: \"POST\",\n\t     data: JSON.stringify(msg),\n\t     success: function(data, status) {\n\t       var opts = modeOptions();\n\t       opts.metainfo = data.tokens;\n\t       cm.setOption(\"mode\", opts);\n\t     },\n\t     error: function(jqXHR) {\n\t       if ( jqXHR.status == 409 ) {\n\t\t delete state.uuid;\n\t\t /* And refresh?  problem is this might get us into\n\t\t  * a loop.  We'd need some info from the server that\n\t\t  * this won't happen again\n\t\t  */\n\t       }\n\t     }\n\t   });\n  }\n\n  CodeMirror.commands.refreshHighlight = function(cm) {\n    cm.serverAssistedHighlight(true);\n  }\n\n  function generateUUID() {\n    var d = new Date().getTime();\n    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n      .replace(/[xy]/g, function(c) {\n        var r = (d + Math.random()*16)%16 | 0;\n        d = Math.floor(d/16);\n        return (c=='x' ? r : (r&0x7|0x8)).toString(16);\n    });\n    return uuid;\n  }\n\n  var syncOnType = { \"var\": \"var\",\t/* JavaScript Types */\n\t\t     \"atom\": \"atom\",\n\t\t     \"qatom\": \"qatom\",\n\t\t     \"bqstring\": \"string\",\n\t\t     \"symbol\": \"atom\",\n\t\t     \"functor\": \"functor\",\n\t\t     \"tag\": \"tag\",\n\t\t     \"number\": \"number\",\n\t\t     \"string\": \"string\",\n\t\t     \"code\": \"number\",\n\t\t     \"neg-number\": \"number\",\n\t\t     \"pos-number\": \"number\",\n\t\t     \"list_open\": \"list_open\",\n\t\t     \"list_close\": \"list_close\",\n\t\t     \"qq_open\": \"qq_open\",\n\t\t     \"qq_sep\": \"qq_sep\",\n\t\t     \"qq_close\": \"qq_close\",\n\t\t     \"dict_open\": \"dict_open\",\n\t\t     \"dict_close\": \"dict_close\",\n\t\t     \"brace_term_open\": \"brace_term_open\",\n\t\t     \"brace_term_close\": \"brace_term_close\",\n\t\t     \"neck\": \"neck\",\n\t\t     \"fullstop\": \"fullstop\"\n\t\t   };\n  var serverSync = { \"var\": \"var\",\t/* Server Types */\n\t\t     \"singleton\": \"var\",\n\t\t     \"uatom\": \"var\",\t/* var_prefix in effect */\n\t\t     \"atom\": \"atom\",\n\t\t     \"qatom\": \"qatom\",\n\t\t     \"string\": \"string\",\n\t\t     \"codes\": \"string\",\n\t\t     \"chars\": \"string\",\n\t\t     \"functor\": \"functor\",\n\t\t     \"tag\": \"tag\",\n\t\t     \"control\": \"atom\",\n\t\t     \"meta\": \"atom\",\t/* or number 0-9 */\n\t\t     \"op_type\": \"atom\",\n\t\t     \"int\": \"number\",\n\t\t     \"float\": \"number\",\n\t\t     \"key\": \"atom\",\t/* TBD: or integer */\n\t\t     \"sep\": \"atom\",\t/* : in dict */\n\t\t     \"ext_quant\": \"atom\", /* setof ^-symbol */\n\n\t\t     \"expanded\": \"expanded\",\n\t\t     \"comment_string\":\"string\",\n\t\t     \"identifier\": \"atom\",\n\t\t     \"delimiter\": \"atom\",\n\t\t     \"module\": \"atom\",\n\n\t\t     \"constraint\": \"atom\",\n\n\t\t     \"head_exported\": \"atom\",\n\t\t     \"head_public\": \"atom\",\n\t\t     \"head_extern\": \"atom\",\n\t\t     \"head_dynamic\": \"atom\",\n\t\t     \"head_multifile\": \"atom\",\n\t\t     \"head_unreferenced\": \"atom\",\n\t\t     \"head_hook\": \"atom\",\n\t\t     \"head_meta\": \"atom\",\n\t\t     \"head_constraint\": \"atom\",\n\t\t     \"head_imported\": \"atom\",\n\t\t     \"head_built_in\": \"atom\",\n\t\t     \"head_iso\": \"atom\",\n\t\t     \"head_def_iso\": \"atom\",\n\t\t     \"head_def_swi\": \"atom\",\n\t\t     \"head\": \"atom\",\n\n\t\t     \"goal_built_in\": \"atom\",\n\t\t     \"goal_imported\": \"atom\",\n\t\t     \"goal_autoload\": \"atom\",\n\t\t     \"goal_global\": \"atom\",\n\t\t     \"goal_undefined\": \"atom\",\n\t\t     \"goal_thread_local\": \"atom\",\n\t\t     \"goal_dynamic\": \"atom\",\n\t\t     \"goal_multifile\": \"atom\",\n\t\t     \"goal_expanded\": \"atom\",\n\t\t     \"goal_extern\": \"atom\",\n\t\t     \"goal_recursion\": \"atom\",\n\t\t     \"goal_meta\": \"atom\",\n\t\t     \"goal_foreign\": \"atom\",\n\t\t     \"goal_local\": \"atom\",\n\t\t     \"goal_constraint\": \"atom\",\n\t\t     \"goal_not_callable\": \"atom\",\n\n\t\t     \"xpce_method\": \"functor\",\n\t\t     \"xpce_class_builtin\":\"atom\",\n\t\t     \"xpce_class_lib\":\"atom\",\n\t\t     \"xpce_class_user\":\"atom\",\n\t\t     \"xpce_class_undef\":\"atom\",\n\n\t\t     \"option_name\": \"atom\",\n\t\t     \"no_option_name\": \"atom\",\n\t\t     \"flag_name\": \"atom\",\n\t\t     \"no_flag_name\": \"atom\",\n\t\t     \"format_string\": \"text\",\n\n\t\t     \"file_no_depends\": \"atom\",\n\t\t     \"file\": \"atom\",\n\t\t     \"nofile\": \"atom\",\n\n\t\t     \"list_open\": \"list_open\",\n\t\t     \"list_close\": \"list_close\",\n\t\t     \"qq_open\": \"qq_open\",\n\t\t     \"qq_sep\": \"qq_sep\",\n\t\t     \"qq_close\": \"qq_close\",\n\t\t     \"qq_type\": \"atom\",\n\t\t     \"dict_open\": \"dict_open\",\n\t\t     \"dict_close\": \"dict_close\",\n\t\t     \"brace_term_open\": \"brace_term_open\",\n\t\t     \"brace_term_close\": \"brace_term_close\",\n\t\t     \"neck\": \"neck\",\n\t\t     \"fullstop\": \"fullstop\",\n\n\t\t     \"string_terminal\": \"string\",\n\n\t\t     \"html\": \"functor\",\n\t\t     \"entity\": \"atom\",\n\t\t     \"html_attribute\": \"functor\",\n\t\t     \"sgml_attr_function\": \"atom\",\n\t\t     \"http_location_for_id\": \"atom\",\n\t\t     \"http_no_location_for_id\": \"atom\"\n\t\t   };\n\n  /* Enrich the style using the token list from the server.\n\n  @param stream  is the CM input stream\n  @param state   is the mode state object\n  @param type    is the syntactic category detected by the mode\n  @param content is the textual content of the token (if any)\n  @param style   is the style determined by the mode.\n  */\n\n  function enrichStyle(stream, state, type, content, style) {\n    var parserConfig = this;\n\n    /* serverToken(state) returns the server token at\n       state.curTerm.curToken or null\n    */\n\n    function serverToken(state) {\n      var term = parserConfig.metainfo[state.curTerm];\n      if ( !term ) return null;\n      var token = term[state.curToken];\n      if ( !token ) return null;\n\n      return token;\n    }\n\n    /* outOfSync() is called whenever we lost synchronization.  It\n       records the position where we lost sync and asks the server\n       for a fresh analysis.\n    */\n\n    function outOfSync() {\n      if ( !state.outOfSync ) {\n\tconsole.log(\"Mismatch: (\"+content+\") \"+type+\"/\"+token.type);\n\tstate.outOfSync = { okToken:       state.curToken,\n\t\t\t    okTerm:        state.curTerm,\n\t\t\t    skippedTerms:  0,\n\t\t\t    skippedTokens: [],\n\t\t\t  };\n      }\n      parserConfig.editor.askRefresh();\n    }\n\n    /* reSync() tries to re-synchronize after we lost synchronization\n       with the server due to local edits.  If successful, it clears\n       state.outOfSync and returns the enriched token.  Else it returns\n       null.\n\n       Data to work from:\n\n\t state.outOfSync.skipped: skipped tokens since out-of-sync or\n\t\tlast term\n\t state.outOfSync.skippedTerms: number of fullstop seen since\n\t\twe lost synchronisation\n    */\n\n    function reSync() {\n      var oos = state.outOfSync;\n      var resyncState = { curToken: oos.okToken,\n\t\t\t  curTerm:  oos.okTerm\n\t\t\t};\n\n      /* TBD */\n      if ( oos.skippedTerms ) {\n\n      } else {\n      }\n\n      return null;\n    }\n\n\n    /* match the next token.  It is possible that the server has combined\n       several tokens into one logical unit.  In that case the token is\n       merely a prefix of what the server returned and we try to eat the\n       remainder.  Examples are files specifications such as\n       library(lists).\n    */\n\n    function matchTokenText(tokenText) {\n      var start;\n\n      if ( content == tokenText )\n\treturn true;\n\n      if ( (start=tokenText.lastIndexOf(content,1)) >= 0 ) {\n\tvar left = tokenText.substring(content.length+start);\n\tfor(var i=0; i<left.length; i++) {\n\t  if ( !stream.eat(left.charAt(i)) ) {\n\t    stream.backUp(i);\n\t    return false;\n\t  }\n\t}\n\treturn true;\n      }\n\n      return false;\n    }\n\n    /**\n     * Test whether we are nested in quoted material.  That happens if\n     * a newline appears in the quoted value, where our CodeMirror\n     * tokeniser gives multiple \"string\", etc. tokens, while the server\n     * only gives one, so we should not increment the server curToken.\n     */\n    function isQuoted(nesting) {\n      var last = nesting.slice(-1)[0];\n      return last && last.type == \"quoted\";\n    }\n\n    /**\n     * Matches the server token `token` to the current token and updates\n     * state.curToken and/or state.curTerm if the two matches.\n     *\n     * @param {Object} token is the next token from the server array\n     * @param {Object} state is the mode state object\n     * @returns {String|undefined} enriched style, the original style\n     * or `undefined` if the mode token does not match the server token.\n    */\n\n    function matchToken(token, state) {\n      if ( token ) {\n\tif ( syncOnType[type] ) {\n\t  if ( token.text && content ) {\n\t    if ( matchTokenText(token.text) ) {\n\t      state.curToken++;\n\t      return token.type;\n\t    }\n\n\t    return undefined;\n\t  } else if ( syncOnType[type] == serverSync[token.type] ) {\n\t    if ( type == \"fullstop\" ) {\n\t      state.curTerm++;\n\t      state.curToken = 0;\n\t    } else if ( !isQuoted(state.nesting) ) {\n\t      state.curToken++;\n\t    }\n\t    return token.type;\n\t  } else if ( syncOnType[type] == token.base ) {\n\t    state.curToken++;\n\t    return token.type;\n\t  } else if ( type == \"qatom\" && serverSync[token.type] == \"atom\" ) {\n\t    state.curToken++;\n\t    return token.type;\n\t  } else if ( type == \"number\" && token.type == \"meta\" ) {\n\t    state.curToken++;\t/* 0-9 as meta_predicate arguments */\n\t    return token.type;\n\t  } else if ( serverSync[token.type] == \"text\" &&\n\t\t      (type == \"atom\" || type == \"qatom\" || type == \"string\") ) {\n\t    state.curToken++;\t/* 0-9 as meta_predicate arguments */\n\t    return token.type;\n\t  } else if ( type == \"neg-number\" &&\n\t\t      token.text && token.text == \"-\" ) {\n\t\t/* HACK: A-1 is tokenised as \"var\" \"neg-number\" */\n\t\t/* But the server says \"var\" \"atom\" \"number\" */\n\t\t/* Needs operator logic to fix at the client */\n\t    state.curToken += 2;\n\t    return \"number\";\n\t  } else if ( type == \"pos-number\" &&\n\t\t      token.text && token.text == \"+\" ) {\n\t\t/* HACK: A+1 is tokenised as \"var\" \"pos-number\" */\n\t\t/* But the server says \"var\" \"atom\" \"number\" */\n\t\t/* Needs operator logic to fix at the client */\n\t    state.curToken += 2;\n\t    return \"number\";\n\t  }\n\t} else if ( content && token.text == content ) {\n\t  state.curToken++;\t\t/* ,; are not synced */\n\t  return token.type;\n\t} else {\n\t  return style;\t\t\t/* not-synced client token */\n\t}\n      }\n\n      return undefined;\n    }\n\n    /* enrichStyle() body */\n\n    if ( state.curTerm != null ) {\n      var token;\n      var serverStyle;\n\n      //console.log(type,style,content,state);\n\n      if ( state.syntax_error ) {\t\t/* error state; recap after . */\n\tif ( type == \"fullstop\" ) {\n\t  parserConfig.editor.askRefresh();\n\t  delete state.syntax_error;\n\t}\n\treturn style;\n      }\n\n      if ( state.outOfSync ) {\t\t\t/* lost synchronization */\n\tvar oos = state.outOfSync;\n\n\tif ( oos.skippedTerms <= 3 ) {\n\t  oos.skippedTokens.push({ type:    type,\n\t\t\t           style:   style,\n\t\t\t\t   content: content\n\t\t\t         });\n\n\t  if ( (serverStyle=reSync()) ) {\n\t    return serverStyle;\t\t\t/* re-synchronized! */\n\t  } else if ( type == \"fullstop\" ) {\n\t    oos.skippedTokens = [];\n\t    oos.skippedTerms++;\n\t  }\n\t}\n\n\treturn style;\n      }\n\n      if ( !(token=serverToken(state)) ) {\n\tparserConfig.editor.askRefresh();\t/* more text added at the end */\n\treturn style;\n      }\n\n      //console.log(\"Enrich: (\"+content+\") \"+type+\"/\"+token.type);\n\n      if ( (serverStyle=matchToken(token, state)) !== undefined ) {\n\treturn serverStyle;\n      } else if ( token.type == \"syntax_error\" ) {\n\tstate.syntax_error = true;\n\tstate.curToken = 0;\n\tstate.curTerm++;\n\treturn style;\n      } else {\n\toutOfSync();\n\treturn style + \" outofsync\";\n      }\n    }\n\n    return style;\n  }\n\n\t\t /*******************************\n\t\t *\t  FETCH ENRICHED\t*\n\t\t *******************************/\n\n  CodeMirror.prototype.getEnrichedToken = function(token) {\n    if ( token.state.curTerm != null && token.state.curToken != null )\n    { var state = this.getOption(\"mode\");\n      var terminfo;\n\n      if ( state.metainfo && (terminfo=state.metainfo[token.state.curTerm]) )\n\treturn terminfo[token.state.curToken-1];\n    }\n\n    return undefined;\n  }\n\n  /**\n   * @param {Object} [elem] is the element that will be filled with\n   * the token information.  If not provided, a `<span>` of class\n   * `token-info` is returned.\n   * @returns {Object} DOM object providing info that will be filled\n   * later from the ajax call.\n   */\n  CodeMirror.prototype.tokenInfo = function(token, elem) {\n    var state = this.state.prologHighlightServer;\n\n    if ( !elem )\n      elem = $($.el.span({class:\"token-info\"}, \"...\"));\n\n    $.ajax({ url: state.url.info,\n\t     data: token,\n\t     success: function(data) {\n\t       elem.html(data);\n\t     }\n           });\n\n    return elem[0];\n  }\n\n  /**\n   * @param {Object} token is an enriched token\n   * @returns {Array(Object)} is an array of source references.\n   */\n\n  CodeMirror.prototype.getTokenReferences = function(token) {\n    var result = [];\n\n    function setFile(obj, from) {\n      if ( from && from.indexOf(\"swish://\") == 0 ) {\n\tobj.file = from.substring(8);\n\treturn true;\n      }\n    }\n\n    switch(token.type) {\n      case \"goal_local\":\n\tvar obj = {\n\t  title: \"Source for \"+token.text+\"/\"+token.arity,\n\t  line:  token.line,\n\t  regex: new RegExp(\"\\\\b\"+RegExp.escape(token.text), \"g\"),\n\t  showAllMatches: true\n\t};\n\tsetFile(obj, token.file);\n\tresult.push(obj);\n\tbreak;\n      case \"file\":\n\tvar obj = {};\n\n\tif ( setFile(obj, token.path) ) {\n\t  obj.title = \"Included file \" + obj.file;\n\t  result.push(obj);\n\t}\n        break;\n    }\n\n    return result;\n  }\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/xml/xml',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n  autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n                    'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n                    'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n                    'track': true, 'wbr': true, 'menuitem': true},\n  implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n                     'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n                     'th': true, 'tr': true},\n  contextGrabbers: {\n    'dd': {'dd': true, 'dt': true},\n    'dt': {'dd': true, 'dt': true},\n    'li': {'li': true},\n    'option': {'option': true, 'optgroup': true},\n    'optgroup': {'optgroup': true},\n    'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n          'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n          'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n          'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n          'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n    'rp': {'rp': true, 'rt': true},\n    'rt': {'rp': true, 'rt': true},\n    'tbody': {'tbody': true, 'tfoot': true},\n    'td': {'td': true, 'th': true},\n    'tfoot': {'tbody': true},\n    'th': {'td': true, 'th': true},\n    'thead': {'tbody': true, 'tfoot': true},\n    'tr': {'tr': true}\n  },\n  doNotIndent: {\"pre\": true},\n  allowUnquoted: true,\n  allowMissing: true,\n  caseFold: true\n}\n\nvar xmlConfig = {\n  autoSelfClosers: {},\n  implicitlyClosed: {},\n  contextGrabbers: {},\n  doNotIndent: {},\n  allowUnquoted: false,\n  allowMissing: false,\n  allowMissingTagName: false,\n  caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n  var indentUnit = editorConf.indentUnit\n  var config = {}\n  var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n  for (var prop in defaults) config[prop] = defaults[prop]\n  for (var prop in config_) config[prop] = config_[prop]\n\n  // Return variables for tokenizers\n  var type, setStyle;\n\n  function inText(stream, state) {\n    function chain(parser) {\n      state.tokenize = parser;\n      return parser(stream, state);\n    }\n\n    var ch = stream.next();\n    if (ch == \"<\") {\n      if (stream.eat(\"!\")) {\n        if (stream.eat(\"[\")) {\n          if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n          else return null;\n        } else if (stream.match(\"--\")) {\n          return chain(inBlock(\"comment\", \"-->\"));\n        } else if (stream.match(\"DOCTYPE\", true, true)) {\n          stream.eatWhile(/[\\w\\._\\-]/);\n          return chain(doctype(1));\n        } else {\n          return null;\n        }\n      } else if (stream.eat(\"?\")) {\n        stream.eatWhile(/[\\w\\._\\-]/);\n        state.tokenize = inBlock(\"meta\", \"?>\");\n        return \"meta\";\n      } else {\n        type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n        state.tokenize = inTag;\n        return \"tag bracket\";\n      }\n    } else if (ch == \"&\") {\n      var ok;\n      if (stream.eat(\"#\")) {\n        if (stream.eat(\"x\")) {\n          ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n        } else {\n          ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n        }\n      } else {\n        ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n      }\n      return ok ? \"atom\" : \"error\";\n    } else {\n      stream.eatWhile(/[^&<]/);\n      return null;\n    }\n  }\n  inText.isInText = true;\n\n  function inTag(stream, state) {\n    var ch = stream.next();\n    if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n      state.tokenize = inText;\n      type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n      return \"tag bracket\";\n    } else if (ch == \"=\") {\n      type = \"equals\";\n      return null;\n    } else if (ch == \"<\") {\n      state.tokenize = inText;\n      state.state = baseState;\n      state.tagName = state.tagStart = null;\n      var next = state.tokenize(stream, state);\n      return next ? next + \" tag error\" : \"tag error\";\n    } else if (/[\\'\\\"]/.test(ch)) {\n      state.tokenize = inAttribute(ch);\n      state.stringStartCol = stream.column();\n      return state.tokenize(stream, state);\n    } else {\n      stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n      return \"word\";\n    }\n  }\n\n  function inAttribute(quote) {\n    var closure = function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.next() == quote) {\n          state.tokenize = inTag;\n          break;\n        }\n      }\n      return \"string\";\n    };\n    closure.isInAttribute = true;\n    return closure;\n  }\n\n  function inBlock(style, terminator) {\n    return function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.match(terminator)) {\n          state.tokenize = inText;\n          break;\n        }\n        stream.next();\n      }\n      return style;\n    }\n  }\n\n  function doctype(depth) {\n    return function(stream, state) {\n      var ch;\n      while ((ch = stream.next()) != null) {\n        if (ch == \"<\") {\n          state.tokenize = doctype(depth + 1);\n          return state.tokenize(stream, state);\n        } else if (ch == \">\") {\n          if (depth == 1) {\n            state.tokenize = inText;\n            break;\n          } else {\n            state.tokenize = doctype(depth - 1);\n            return state.tokenize(stream, state);\n          }\n        }\n      }\n      return \"meta\";\n    };\n  }\n\n  function Context(state, tagName, startOfLine) {\n    this.prev = state.context;\n    this.tagName = tagName;\n    this.indent = state.indented;\n    this.startOfLine = startOfLine;\n    if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n      this.noIndent = true;\n  }\n  function popContext(state) {\n    if (state.context) state.context = state.context.prev;\n  }\n  function maybePopContext(state, nextTagName) {\n    var parentTagName;\n    while (true) {\n      if (!state.context) {\n        return;\n      }\n      parentTagName = state.context.tagName;\n      if (!config.contextGrabbers.hasOwnProperty(parentTagName) ||\n          !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n        return;\n      }\n      popContext(state);\n    }\n  }\n\n  function baseState(type, stream, state) {\n    if (type == \"openTag\") {\n      state.tagStart = stream.column();\n      return tagNameState;\n    } else if (type == \"closeTag\") {\n      return closeTagNameState;\n    } else {\n      return baseState;\n    }\n  }\n  function tagNameState(type, stream, state) {\n    if (type == \"word\") {\n      state.tagName = stream.current();\n      setStyle = \"tag\";\n      return attrState;\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return attrState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return tagNameState;\n    }\n  }\n  function closeTagNameState(type, stream, state) {\n    if (type == \"word\") {\n      var tagName = stream.current();\n      if (state.context && state.context.tagName != tagName &&\n          config.implicitlyClosed.hasOwnProperty(state.context.tagName))\n        popContext(state);\n      if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n        setStyle = \"tag\";\n        return closeState;\n      } else {\n        setStyle = \"tag error\";\n        return closeStateErr;\n      }\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return closeState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return closeStateErr;\n    }\n  }\n\n  function closeState(type, _stream, state) {\n    if (type != \"endTag\") {\n      setStyle = \"error\";\n      return closeState;\n    }\n    popContext(state);\n    return baseState;\n  }\n  function closeStateErr(type, stream, state) {\n    setStyle = \"error\";\n    return closeState(type, stream, state);\n  }\n\n  function attrState(type, _stream, state) {\n    if (type == \"word\") {\n      setStyle = \"attribute\";\n      return attrEqState;\n    } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n      var tagName = state.tagName, tagStart = state.tagStart;\n      state.tagName = state.tagStart = null;\n      if (type == \"selfcloseTag\" ||\n          config.autoSelfClosers.hasOwnProperty(tagName)) {\n        maybePopContext(state, tagName);\n      } else {\n        maybePopContext(state, tagName);\n        state.context = new Context(state, tagName, tagStart == state.indented);\n      }\n      return baseState;\n    }\n    setStyle = \"error\";\n    return attrState;\n  }\n  function attrEqState(type, stream, state) {\n    if (type == \"equals\") return attrValueState;\n    if (!config.allowMissing) setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrValueState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n    setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrContinuedState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    return attrState(type, stream, state);\n  }\n\n  return {\n    startState: function(baseIndent) {\n      var state = {tokenize: inText,\n                   state: baseState,\n                   indented: baseIndent || 0,\n                   tagName: null, tagStart: null,\n                   context: null}\n      if (baseIndent != null) state.baseIndent = baseIndent\n      return state\n    },\n\n    token: function(stream, state) {\n      if (!state.tagName && stream.sol())\n        state.indented = stream.indentation();\n\n      if (stream.eatSpace()) return null;\n      type = null;\n      var style = state.tokenize(stream, state);\n      if ((style || type) && style != \"comment\") {\n        setStyle = null;\n        state.state = state.state(type || style, stream, state);\n        if (setStyle)\n          style = setStyle == \"error\" ? style + \" error\" : setStyle;\n      }\n      return style;\n    },\n\n    indent: function(state, textAfter, fullLine) {\n      var context = state.context;\n      // Indent multi-line strings (e.g. css).\n      if (state.tokenize.isInAttribute) {\n        if (state.tagStart == state.indented)\n          return state.stringStartCol + 1;\n        else\n          return state.indented + indentUnit;\n      }\n      if (context && context.noIndent) return CodeMirror.Pass;\n      if (state.tokenize != inTag && state.tokenize != inText)\n        return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n      // Indent the starts of attribute names.\n      if (state.tagName) {\n        if (config.multilineTagIndentPastTag !== false)\n          return state.tagStart + state.tagName.length + 2;\n        else\n          return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n      }\n      if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n      var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n      if (tagAfter && tagAfter[1]) { // Closing tag spotted\n        while (context) {\n          if (context.tagName == tagAfter[2]) {\n            context = context.prev;\n            break;\n          } else if (config.implicitlyClosed.hasOwnProperty(context.tagName)) {\n            context = context.prev;\n          } else {\n            break;\n          }\n        }\n      } else if (tagAfter) { // Opening tag spotted\n        while (context) {\n          var grabbers = config.contextGrabbers[context.tagName];\n          if (grabbers && grabbers.hasOwnProperty(tagAfter[2]))\n            context = context.prev;\n          else\n            break;\n        }\n      }\n      while (context && context.prev && !context.startOfLine)\n        context = context.prev;\n      if (context) return context.indent + indentUnit;\n      else return state.baseIndent || 0;\n    },\n\n    electricInput: /<\\/[\\s\\w:]+>$/,\n    blockCommentStart: \"<!--\",\n    blockCommentEnd: \"-->\",\n\n    configuration: config.htmlMode ? \"html\" : \"xml\",\n    helperType: config.htmlMode ? \"html\" : \"xml\",\n\n    skipAttribute: function(state) {\n      if (state.state == attrValueState)\n        state.state = attrState\n    }\n  };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n  CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/meta',[\"../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.modeInfo = [\n    {name: \"APL\", mime: \"text/apl\", mode: \"apl\", ext: [\"dyalog\", \"apl\"]},\n    {name: \"PGP\", mimes: [\"application/pgp\", \"application/pgp-encrypted\", \"application/pgp-keys\", \"application/pgp-signature\"], mode: \"asciiarmor\", ext: [\"asc\", \"pgp\", \"sig\"]},\n    {name: \"ASN.1\", mime: \"text/x-ttcn-asn\", mode: \"asn.1\", ext: [\"asn\", \"asn1\"]},\n    {name: \"Asterisk\", mime: \"text/x-asterisk\", mode: \"asterisk\", file: /^extensions\\.conf$/i},\n    {name: \"Brainfuck\", mime: \"text/x-brainfuck\", mode: \"brainfuck\", ext: [\"b\", \"bf\"]},\n    {name: \"C\", mime: \"text/x-csrc\", mode: \"clike\", ext: [\"c\", \"h\", \"ino\"]},\n    {name: \"C++\", mime: \"text/x-c++src\", mode: \"clike\", ext: [\"cpp\", \"c++\", \"cc\", \"cxx\", \"hpp\", \"h++\", \"hh\", \"hxx\"], alias: [\"cpp\"]},\n    {name: \"Cobol\", mime: \"text/x-cobol\", mode: \"cobol\", ext: [\"cob\", \"cpy\"]},\n    {name: \"C#\", mime: \"text/x-csharp\", mode: \"clike\", ext: [\"cs\"], alias: [\"csharp\"]},\n    {name: \"Clojure\", mime: \"text/x-clojure\", mode: \"clojure\", ext: [\"clj\", \"cljc\", \"cljx\"]},\n    {name: \"ClojureScript\", mime: \"text/x-clojurescript\", mode: \"clojure\", ext: [\"cljs\"]},\n    {name: \"Closure Stylesheets (GSS)\", mime: \"text/x-gss\", mode: \"css\", ext: [\"gss\"]},\n    {name: \"CMake\", mime: \"text/x-cmake\", mode: \"cmake\", ext: [\"cmake\", \"cmake.in\"], file: /^CMakeLists.txt$/},\n    {name: \"CoffeeScript\", mimes: [\"application/vnd.coffeescript\", \"text/coffeescript\", \"text/x-coffeescript\"], mode: \"coffeescript\", ext: [\"coffee\"], alias: [\"coffee\", \"coffee-script\"]},\n    {name: \"Common Lisp\", mime: \"text/x-common-lisp\", mode: \"commonlisp\", ext: [\"cl\", \"lisp\", \"el\"], alias: [\"lisp\"]},\n    {name: \"Cypher\", mime: \"application/x-cypher-query\", mode: \"cypher\", ext: [\"cyp\", \"cypher\"]},\n    {name: \"Cython\", mime: \"text/x-cython\", mode: \"python\", ext: [\"pyx\", \"pxd\", \"pxi\"]},\n    {name: \"Crystal\", mime: \"text/x-crystal\", mode: \"crystal\", ext: [\"cr\"]},\n    {name: \"CSS\", mime: \"text/css\", mode: \"css\", ext: [\"css\"]},\n    {name: \"CQL\", mime: \"text/x-cassandra\", mode: \"sql\", ext: [\"cql\"]},\n    {name: \"D\", mime: \"text/x-d\", mode: \"d\", ext: [\"d\"]},\n    {name: \"Dart\", mimes: [\"application/dart\", \"text/x-dart\"], mode: \"dart\", ext: [\"dart\"]},\n    {name: \"diff\", mime: \"text/x-diff\", mode: \"diff\", ext: [\"diff\", \"patch\"]},\n    {name: \"Django\", mime: \"text/x-django\", mode: \"django\"},\n    {name: \"Dockerfile\", mime: \"text/x-dockerfile\", mode: \"dockerfile\", file: /^Dockerfile$/},\n    {name: \"DTD\", mime: \"application/xml-dtd\", mode: \"dtd\", ext: [\"dtd\"]},\n    {name: \"Dylan\", mime: \"text/x-dylan\", mode: \"dylan\", ext: [\"dylan\", \"dyl\", \"intr\"]},\n    {name: \"EBNF\", mime: \"text/x-ebnf\", mode: \"ebnf\"},\n    {name: \"ECL\", mime: \"text/x-ecl\", mode: \"ecl\", ext: [\"ecl\"]},\n    {name: \"edn\", mime: \"application/edn\", mode: \"clojure\", ext: [\"edn\"]},\n    {name: \"Eiffel\", mime: \"text/x-eiffel\", mode: \"eiffel\", ext: [\"e\"]},\n    {name: \"Elm\", mime: \"text/x-elm\", mode: \"elm\", ext: [\"elm\"]},\n    {name: \"Embedded Javascript\", mime: \"application/x-ejs\", mode: \"htmlembedded\", ext: [\"ejs\"]},\n    {name: \"Embedded Ruby\", mime: \"application/x-erb\", mode: \"htmlembedded\", ext: [\"erb\"]},\n    {name: \"Erlang\", mime: \"text/x-erlang\", mode: \"erlang\", ext: [\"erl\"]},\n    {name: \"Esper\", mime: \"text/x-esper\", mode: \"sql\"},\n    {name: \"Factor\", mime: \"text/x-factor\", mode: \"factor\", ext: [\"factor\"]},\n    {name: \"FCL\", mime: \"text/x-fcl\", mode: \"fcl\"},\n    {name: \"Forth\", mime: \"text/x-forth\", mode: \"forth\", ext: [\"forth\", \"fth\", \"4th\"]},\n    {name: \"Fortran\", mime: \"text/x-fortran\", mode: \"fortran\", ext: [\"f\", \"for\", \"f77\", \"f90\", \"f95\"]},\n    {name: \"F#\", mime: \"text/x-fsharp\", mode: \"mllike\", ext: [\"fs\"], alias: [\"fsharp\"]},\n    {name: \"Gas\", mime: \"text/x-gas\", mode: \"gas\", ext: [\"s\"]},\n    {name: \"Gherkin\", mime: \"text/x-feature\", mode: \"gherkin\", ext: [\"feature\"]},\n    {name: \"GitHub Flavored Markdown\", mime: \"text/x-gfm\", mode: \"gfm\", file: /^(readme|contributing|history).md$/i},\n    {name: \"Go\", mime: \"text/x-go\", mode: \"go\", ext: [\"go\"]},\n    {name: \"Groovy\", mime: \"text/x-groovy\", mode: \"groovy\", ext: [\"groovy\", \"gradle\"], file: /^Jenkinsfile$/},\n    {name: \"HAML\", mime: \"text/x-haml\", mode: \"haml\", ext: [\"haml\"]},\n    {name: \"Haskell\", mime: \"text/x-haskell\", mode: \"haskell\", ext: [\"hs\"]},\n    {name: \"Haskell (Literate)\", mime: \"text/x-literate-haskell\", mode: \"haskell-literate\", ext: [\"lhs\"]},\n    {name: \"Haxe\", mime: \"text/x-haxe\", mode: \"haxe\", ext: [\"hx\"]},\n    {name: \"HXML\", mime: \"text/x-hxml\", mode: \"haxe\", ext: [\"hxml\"]},\n    {name: \"ASP.NET\", mime: \"application/x-aspx\", mode: \"htmlembedded\", ext: [\"aspx\"], alias: [\"asp\", \"aspx\"]},\n    {name: \"HTML\", mime: \"text/html\", mode: \"htmlmixed\", ext: [\"html\", \"htm\", \"handlebars\", \"hbs\"], alias: [\"xhtml\"]},\n    {name: \"HTTP\", mime: \"message/http\", mode: \"http\"},\n    {name: \"IDL\", mime: \"text/x-idl\", mode: \"idl\", ext: [\"pro\"]},\n    {name: \"Pug\", mime: \"text/x-pug\", mode: \"pug\", ext: [\"jade\", \"pug\"], alias: [\"jade\"]},\n    {name: \"Java\", mime: \"text/x-java\", mode: \"clike\", ext: [\"java\"]},\n    {name: \"Java Server Pages\", mime: \"application/x-jsp\", mode: \"htmlembedded\", ext: [\"jsp\"], alias: [\"jsp\"]},\n    {name: \"JavaScript\", mimes: [\"text/javascript\", \"text/ecmascript\", \"application/javascript\", \"application/x-javascript\", \"application/ecmascript\"],\n     mode: \"javascript\", ext: [\"js\"], alias: [\"ecmascript\", \"js\", \"node\"]},\n    {name: \"JSON\", mimes: [\"application/json\", \"application/x-json\"], mode: \"javascript\", ext: [\"json\", \"map\"], alias: [\"json5\"]},\n    {name: \"JSON-LD\", mime: \"application/ld+json\", mode: \"javascript\", ext: [\"jsonld\"], alias: [\"jsonld\"]},\n    {name: \"JSX\", mime: \"text/jsx\", mode: \"jsx\", ext: [\"jsx\"]},\n    {name: \"Jinja2\", mime: \"text/jinja2\", mode: \"jinja2\", ext: [\"j2\", \"jinja\", \"jinja2\"]},\n    {name: \"Julia\", mime: \"text/x-julia\", mode: \"julia\", ext: [\"jl\"]},\n    {name: \"Kotlin\", mime: \"text/x-kotlin\", mode: \"clike\", ext: [\"kt\"]},\n    {name: \"LESS\", mime: \"text/x-less\", mode: \"css\", ext: [\"less\"]},\n    {name: \"LiveScript\", mime: \"text/x-livescript\", mode: \"livescript\", ext: [\"ls\"], alias: [\"ls\"]},\n    {name: \"Lua\", mime: \"text/x-lua\", mode: \"lua\", ext: [\"lua\"]},\n    {name: \"Markdown\", mime: \"text/x-markdown\", mode: \"markdown\", ext: [\"markdown\", \"md\", \"mkd\"]},\n    {name: \"mIRC\", mime: \"text/mirc\", mode: \"mirc\"},\n    {name: \"MariaDB SQL\", mime: \"text/x-mariadb\", mode: \"sql\"},\n    {name: \"Mathematica\", mime: \"text/x-mathematica\", mode: \"mathematica\", ext: [\"m\", \"nb\"]},\n    {name: \"Modelica\", mime: \"text/x-modelica\", mode: \"modelica\", ext: [\"mo\"]},\n    {name: \"MUMPS\", mime: \"text/x-mumps\", mode: \"mumps\", ext: [\"mps\"]},\n    {name: \"MS SQL\", mime: \"text/x-mssql\", mode: \"sql\"},\n    {name: \"mbox\", mime: \"application/mbox\", mode: \"mbox\", ext: [\"mbox\"]},\n    {name: \"MySQL\", mime: \"text/x-mysql\", mode: \"sql\"},\n    {name: \"Nginx\", mime: \"text/x-nginx-conf\", mode: \"nginx\", file: /nginx.*\\.conf$/i},\n    {name: \"NSIS\", mime: \"text/x-nsis\", mode: \"nsis\", ext: [\"nsh\", \"nsi\"]},\n    {name: \"NTriples\", mimes: [\"application/n-triples\", \"application/n-quads\", \"text/n-triples\"],\n     mode: \"ntriples\", ext: [\"nt\", \"nq\"]},\n    {name: \"Objective-C\", mime: \"text/x-objectivec\", mode: \"clike\", ext: [\"m\", \"mm\"], alias: [\"objective-c\", \"objc\"]},\n    {name: \"OCaml\", mime: \"text/x-ocaml\", mode: \"mllike\", ext: [\"ml\", \"mli\", \"mll\", \"mly\"]},\n    {name: \"Octave\", mime: \"text/x-octave\", mode: \"octave\", ext: [\"m\"]},\n    {name: \"Oz\", mime: \"text/x-oz\", mode: \"oz\", ext: [\"oz\"]},\n    {name: \"Pascal\", mime: \"text/x-pascal\", mode: \"pascal\", ext: [\"p\", \"pas\"]},\n    {name: \"PEG.js\", mime: \"null\", mode: \"pegjs\", ext: [\"jsonld\"]},\n    {name: \"Perl\", mime: \"text/x-perl\", mode: \"perl\", ext: [\"pl\", \"pm\"]},\n    {name: \"PHP\", mimes: [\"text/x-php\", \"application/x-httpd-php\", \"application/x-httpd-php-open\"], mode: \"php\", ext: [\"php\", \"php3\", \"php4\", \"php5\", \"php7\", \"phtml\"]},\n    {name: \"Pig\", mime: \"text/x-pig\", mode: \"pig\", ext: [\"pig\"]},\n    {name: \"Plain Text\", mime: \"text/plain\", mode: \"null\", ext: [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\"]},\n    {name: \"PLSQL\", mime: \"text/x-plsql\", mode: \"sql\", ext: [\"pls\"]},\n    {name: \"PowerShell\", mime: \"application/x-powershell\", mode: \"powershell\", ext: [\"ps1\", \"psd1\", \"psm1\"]},\n    {name: \"Properties files\", mime: \"text/x-properties\", mode: \"properties\", ext: [\"properties\", \"ini\", \"in\"], alias: [\"ini\", \"properties\"]},\n    {name: \"ProtoBuf\", mime: \"text/x-protobuf\", mode: \"protobuf\", ext: [\"proto\"]},\n    {name: \"Python\", mime: \"text/x-python\", mode: \"python\", ext: [\"BUILD\", \"bzl\", \"py\", \"pyw\"], file: /^(BUCK|BUILD)$/},\n    {name: \"Puppet\", mime: \"text/x-puppet\", mode: \"puppet\", ext: [\"pp\"]},\n    {name: \"Q\", mime: \"text/x-q\", mode: \"q\", ext: [\"q\"]},\n    {name: \"R\", mime: \"text/x-rsrc\", mode: \"r\", ext: [\"r\", \"R\"], alias: [\"rscript\"]},\n    {name: \"reStructuredText\", mime: \"text/x-rst\", mode: \"rst\", ext: [\"rst\"], alias: [\"rst\"]},\n    {name: \"RPM Changes\", mime: \"text/x-rpm-changes\", mode: \"rpm\"},\n    {name: \"RPM Spec\", mime: \"text/x-rpm-spec\", mode: \"rpm\", ext: [\"spec\"]},\n    {name: \"Ruby\", mime: \"text/x-ruby\", mode: \"ruby\", ext: [\"rb\"], alias: [\"jruby\", \"macruby\", \"rake\", \"rb\", \"rbx\"]},\n    {name: \"Rust\", mime: \"text/x-rustsrc\", mode: \"rust\", ext: [\"rs\"]},\n    {name: \"SAS\", mime: \"text/x-sas\", mode: \"sas\", ext: [\"sas\"]},\n    {name: \"Sass\", mime: \"text/x-sass\", mode: \"sass\", ext: [\"sass\"]},\n    {name: \"Scala\", mime: \"text/x-scala\", mode: \"clike\", ext: [\"scala\"]},\n    {name: \"Scheme\", mime: \"text/x-scheme\", mode: \"scheme\", ext: [\"scm\", \"ss\"]},\n    {name: \"SCSS\", mime: \"text/x-scss\", mode: \"css\", ext: [\"scss\"]},\n    {name: \"Shell\", mimes: [\"text/x-sh\", \"application/x-sh\"], mode: \"shell\", ext: [\"sh\", \"ksh\", \"bash\"], alias: [\"bash\", \"sh\", \"zsh\"], file: /^PKGBUILD$/},\n    {name: \"Sieve\", mime: \"application/sieve\", mode: \"sieve\", ext: [\"siv\", \"sieve\"]},\n    {name: \"Slim\", mimes: [\"text/x-slim\", \"application/x-slim\"], mode: \"slim\", ext: [\"slim\"]},\n    {name: \"Smalltalk\", mime: \"text/x-stsrc\", mode: \"smalltalk\", ext: [\"st\"]},\n    {name: \"Smarty\", mime: \"text/x-smarty\", mode: \"smarty\", ext: [\"tpl\"]},\n    {name: \"Solr\", mime: \"text/x-solr\", mode: \"solr\"},\n    {name: \"SML\", mime: \"text/x-sml\", mode: \"mllike\", ext: [\"sml\", \"sig\", \"fun\", \"smackspec\"]},\n    {name: \"Soy\", mime: \"text/x-soy\", mode: \"soy\", ext: [\"soy\"], alias: [\"closure template\"]},\n    {name: \"SPARQL\", mime: \"application/sparql-query\", mode: \"sparql\", ext: [\"rq\", \"sparql\"], alias: [\"sparul\"]},\n    {name: \"Spreadsheet\", mime: \"text/x-spreadsheet\", mode: \"spreadsheet\", alias: [\"excel\", \"formula\"]},\n    {name: \"SQL\", mime: \"text/x-sql\", mode: \"sql\", ext: [\"sql\"]},\n    {name: \"SQLite\", mime: \"text/x-sqlite\", mode: \"sql\"},\n    {name: \"Squirrel\", mime: \"text/x-squirrel\", mode: \"clike\", ext: [\"nut\"]},\n    {name: \"Stylus\", mime: \"text/x-styl\", mode: \"stylus\", ext: [\"styl\"]},\n    {name: \"Swift\", mime: \"text/x-swift\", mode: \"swift\", ext: [\"swift\"]},\n    {name: \"sTeX\", mime: \"text/x-stex\", mode: \"stex\"},\n    {name: \"LaTeX\", mime: \"text/x-latex\", mode: \"stex\", ext: [\"text\", \"ltx\", \"tex\"], alias: [\"tex\"]},\n    {name: \"SystemVerilog\", mime: \"text/x-systemverilog\", mode: \"verilog\", ext: [\"v\", \"sv\", \"svh\"]},\n    {name: \"Tcl\", mime: \"text/x-tcl\", mode: \"tcl\", ext: [\"tcl\"]},\n    {name: \"Textile\", mime: \"text/x-textile\", mode: \"textile\", ext: [\"textile\"]},\n    {name: \"TiddlyWiki \", mime: \"text/x-tiddlywiki\", mode: \"tiddlywiki\"},\n    {name: \"Tiki wiki\", mime: \"text/tiki\", mode: \"tiki\"},\n    {name: \"TOML\", mime: \"text/x-toml\", mode: \"toml\", ext: [\"toml\"]},\n    {name: \"Tornado\", mime: \"text/x-tornado\", mode: \"tornado\"},\n    {name: \"troff\", mime: \"text/troff\", mode: \"troff\", ext: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]},\n    {name: \"TTCN\", mime: \"text/x-ttcn\", mode: \"ttcn\", ext: [\"ttcn\", \"ttcn3\", \"ttcnpp\"]},\n    {name: \"TTCN_CFG\", mime: \"text/x-ttcn-cfg\", mode: \"ttcn-cfg\", ext: [\"cfg\"]},\n    {name: \"Turtle\", mime: \"text/turtle\", mode: \"turtle\", ext: [\"ttl\"]},\n    {name: \"TypeScript\", mime: \"application/typescript\", mode: \"javascript\", ext: [\"ts\"], alias: [\"ts\"]},\n    {name: \"TypeScript-JSX\", mime: \"text/typescript-jsx\", mode: \"jsx\", ext: [\"tsx\"], alias: [\"tsx\"]},\n    {name: \"Twig\", mime: \"text/x-twig\", mode: \"twig\"},\n    {name: \"Web IDL\", mime: \"text/x-webidl\", mode: \"webidl\", ext: [\"webidl\"]},\n    {name: \"VB.NET\", mime: \"text/x-vb\", mode: \"vb\", ext: [\"vb\"]},\n    {name: \"VBScript\", mime: \"text/vbscript\", mode: \"vbscript\", ext: [\"vbs\"]},\n    {name: \"Velocity\", mime: \"text/velocity\", mode: \"velocity\", ext: [\"vtl\"]},\n    {name: \"Verilog\", mime: \"text/x-verilog\", mode: \"verilog\", ext: [\"v\"]},\n    {name: \"VHDL\", mime: \"text/x-vhdl\", mode: \"vhdl\", ext: [\"vhd\", \"vhdl\"]},\n    {name: \"Vue.js Component\", mimes: [\"script/x-vue\", \"text/x-vue\"], mode: \"vue\", ext: [\"vue\"]},\n    {name: \"XML\", mimes: [\"application/xml\", \"text/xml\"], mode: \"xml\", ext: [\"xml\", \"xsl\", \"xsd\", \"svg\"], alias: [\"rss\", \"wsdl\", \"xsd\"]},\n    {name: \"XQuery\", mime: \"application/xquery\", mode: \"xquery\", ext: [\"xy\", \"xquery\"]},\n    {name: \"Yacas\", mime: \"text/x-yacas\", mode: \"yacas\", ext: [\"ys\"]},\n    {name: \"YAML\", mimes: [\"text/x-yaml\", \"text/yaml\"], mode: \"yaml\", ext: [\"yaml\", \"yml\"], alias: [\"yml\"]},\n    {name: \"Z80\", mime: \"text/x-z80\", mode: \"z80\", ext: [\"z80\"]},\n    {name: \"mscgen\", mime: \"text/x-mscgen\", mode: \"mscgen\", ext: [\"mscgen\", \"mscin\", \"msc\"]},\n    {name: \"xu\", mime: \"text/x-xu\", mode: \"mscgen\", ext: [\"xu\"]},\n    {name: \"msgenny\", mime: \"text/x-msgenny\", mode: \"mscgen\", ext: [\"msgenny\"]}\n  ];\n  // Ensure all modes have a mime property for backwards compatibility\n  for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n    var info = CodeMirror.modeInfo[i];\n    if (info.mimes) info.mime = info.mimes[0];\n  }\n\n  CodeMirror.findModeByMIME = function(mime) {\n    mime = mime.toLowerCase();\n    for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n      var info = CodeMirror.modeInfo[i];\n      if (info.mime == mime) return info;\n      if (info.mimes) for (var j = 0; j < info.mimes.length; j++)\n        if (info.mimes[j] == mime) return info;\n    }\n    if (/\\+xml$/.test(mime)) return CodeMirror.findModeByMIME(\"application/xml\")\n    if (/\\+json$/.test(mime)) return CodeMirror.findModeByMIME(\"application/json\")\n  };\n\n  CodeMirror.findModeByExtension = function(ext) {\n    for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n      var info = CodeMirror.modeInfo[i];\n      if (info.ext) for (var j = 0; j < info.ext.length; j++)\n        if (info.ext[j] == ext) return info;\n    }\n  };\n\n  CodeMirror.findModeByFileName = function(filename) {\n    for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n      var info = CodeMirror.modeInfo[i];\n      if (info.file && info.file.test(filename)) return info;\n    }\n    var dot = filename.lastIndexOf(\".\");\n    var ext = dot > -1 && filename.substring(dot + 1, filename.length);\n    if (ext) return CodeMirror.findModeByExtension(ext);\n  };\n\n  CodeMirror.findModeByName = function(name) {\n    name = name.toLowerCase();\n    for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n      var info = CodeMirror.modeInfo[i];\n      if (info.name.toLowerCase() == name) return info;\n      if (info.alias) for (var j = 0; j < info.alias.length; j++)\n        if (info.alias[j].toLowerCase() == name) return info;\n    }\n  };\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../meta\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/markdown/markdown',[\"../../lib/codemirror\", \"../xml/xml\", \"../meta\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"markdown\", function(cmCfg, modeCfg) {\n\n  var htmlMode = CodeMirror.getMode(cmCfg, \"text/html\");\n  var htmlModeMissing = htmlMode.name == \"null\"\n\n  function getMode(name) {\n    if (CodeMirror.findModeByName) {\n      var found = CodeMirror.findModeByName(name);\n      if (found) name = found.mime || found.mimes[0];\n    }\n    var mode = CodeMirror.getMode(cmCfg, name);\n    return mode.name == \"null\" ? null : mode;\n  }\n\n  // Should characters that affect highlighting be highlighted separate?\n  // Does not include characters that will be output (such as `1.` and `-` for lists)\n  if (modeCfg.highlightFormatting === undefined)\n    modeCfg.highlightFormatting = false;\n\n  // Maximum number of nested blockquotes. Set to 0 for infinite nesting.\n  // Excess `>` will emit `error` token.\n  if (modeCfg.maxBlockquoteDepth === undefined)\n    modeCfg.maxBlockquoteDepth = 0;\n\n  // Turn on task lists? (\"- [ ] \" and \"- [x] \")\n  if (modeCfg.taskLists === undefined) modeCfg.taskLists = false;\n\n  // Turn on strikethrough syntax\n  if (modeCfg.strikethrough === undefined)\n    modeCfg.strikethrough = false;\n\n  if (modeCfg.emoji === undefined)\n    modeCfg.emoji = false;\n\n  if (modeCfg.fencedCodeBlockHighlighting === undefined)\n    modeCfg.fencedCodeBlockHighlighting = true;\n\n  if (modeCfg.xml === undefined)\n    modeCfg.xml = true;\n\n  // Allow token types to be overridden by user-provided token types.\n  if (modeCfg.tokenTypeOverrides === undefined)\n    modeCfg.tokenTypeOverrides = {};\n\n  var tokenTypes = {\n    header: \"header\",\n    code: \"comment\",\n    quote: \"quote\",\n    list1: \"variable-2\",\n    list2: \"variable-3\",\n    list3: \"keyword\",\n    hr: \"hr\",\n    image: \"image\",\n    imageAltText: \"image-alt-text\",\n    imageMarker: \"image-marker\",\n    formatting: \"formatting\",\n    linkInline: \"link\",\n    linkEmail: \"link\",\n    linkText: \"link\",\n    linkHref: \"string\",\n    em: \"em\",\n    strong: \"strong\",\n    strikethrough: \"strikethrough\",\n    emoji: \"builtin\"\n  };\n\n  for (var tokenType in tokenTypes) {\n    if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) {\n      tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType];\n    }\n  }\n\n  var hrRE = /^([*\\-_])(?:\\s*\\1){2,}\\s*$/\n  ,   listRE = /^(?:[*\\-+]|^[0-9]+([.)]))\\s+/\n  ,   taskListRE = /^\\[(x| )\\](?=\\s)/i // Must follow listRE\n  ,   atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/\n  ,   setextHeaderRE = /^ *(?:\\={1,}|-{1,})\\s*$/\n  ,   textRE = /^[^#!\\[\\]*_\\\\<>` \"'(~:]+/\n  ,   fencedCodeRE = /^(~~~+|```+)[ \\t]*([\\w+#-]*)[^\\n`]*$/\n  ,   linkDefRE = /^\\s*\\[[^\\]]+?\\]:.*$/ // naive link-definition\n  ,   punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/\n  ,   expandedTab = \"    \" // CommonMark specifies tab as 4 spaces\n\n  function switchInline(stream, state, f) {\n    state.f = state.inline = f;\n    return f(stream, state);\n  }\n\n  function switchBlock(stream, state, f) {\n    state.f = state.block = f;\n    return f(stream, state);\n  }\n\n  function lineIsEmpty(line) {\n    return !line || !/\\S/.test(line.string)\n  }\n\n  // Blocks\n\n  function blankLine(state) {\n    // Reset linkTitle state\n    state.linkTitle = false;\n    state.linkHref = false;\n    state.linkText = false;\n    // Reset EM state\n    state.em = false;\n    // Reset STRONG state\n    state.strong = false;\n    // Reset strikethrough state\n    state.strikethrough = false;\n    // Reset state.quote\n    state.quote = 0;\n    // Reset state.indentedCode\n    state.indentedCode = false;\n    if (state.f == htmlBlock) {\n      var exit = htmlModeMissing\n      if (!exit) {\n        var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n        exit = inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n          (!inner.state.context && inner.state.tokenize.isInText)\n      }\n      if (exit) {\n        state.f = inlineNormal;\n        state.block = blockNormal;\n        state.htmlState = null;\n      }\n    }\n    // Reset state.trailingSpace\n    state.trailingSpace = 0;\n    state.trailingSpaceNewLine = false;\n    // Mark this line as blank\n    state.prevLine = state.thisLine\n    state.thisLine = {stream: null}\n    return null;\n  }\n\n  function blockNormal(stream, state) {\n    var firstTokenOnLine = stream.column() === state.indentation;\n    var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream);\n    var prevLineIsIndentedCode = state.indentedCode;\n    var prevLineIsHr = state.prevLine.hr;\n    var prevLineIsList = state.list !== false;\n    var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3;\n\n    state.indentedCode = false;\n\n    var lineIndentation = state.indentation;\n    // compute once per line (on first token)\n    if (state.indentationDiff === null) {\n      state.indentationDiff = state.indentation;\n      if (prevLineIsList) {\n        // Reset inline styles which shouldn't propagate aross list items\n        state.em = false;\n        state.strong = false;\n        state.code = false;\n        state.strikethrough = false;\n\n        state.list = null;\n        // While this list item's marker's indentation is less than the deepest\n        //  list item's content's indentation,pop the deepest list item\n        //  indentation off the stack, and update block indentation state\n        while (lineIndentation < state.listStack[state.listStack.length - 1]) {\n          state.listStack.pop();\n          if (state.listStack.length) {\n            state.indentation = state.listStack[state.listStack.length - 1];\n          // less than the first list's indent -> the line is no longer a list\n          } else {\n            state.list = false;\n          }\n        }\n        if (state.list !== false) {\n          state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1]\n        }\n      }\n    }\n\n    // not comprehensive (currently only for setext detection purposes)\n    var allowsInlineContinuation = (\n        !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header &&\n        (!prevLineIsList || !prevLineIsIndentedCode) &&\n        !state.prevLine.fencedCodeEnd\n    );\n\n    var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) &&\n      state.indentation <= maxNonCodeIndentation && stream.match(hrRE);\n\n    var match = null;\n    if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd ||\n         state.prevLine.header || prevLineLineIsEmpty)) {\n      stream.skipToEnd();\n      state.indentedCode = true;\n      return tokenTypes.code;\n    } else if (stream.eatSpace()) {\n      return null;\n    } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) {\n      state.quote = 0;\n      state.header = match[1].length;\n      state.thisLine.header = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"header\";\n      state.f = state.inline;\n      return getType(state);\n    } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) {\n      state.quote = firstTokenOnLine ? 1 : state.quote + 1;\n      if (modeCfg.highlightFormatting) state.formatting = \"quote\";\n      stream.eatSpace();\n      return getType(state);\n    } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) {\n      var listType = match[1] ? \"ol\" : \"ul\";\n\n      state.indentation = lineIndentation + stream.current().length;\n      state.list = true;\n      state.quote = 0;\n\n      // Add this list item's content's indentation to the stack\n      state.listStack.push(state.indentation);\n\n      if (modeCfg.taskLists && stream.match(taskListRE, false)) {\n        state.taskList = true;\n      }\n      state.f = state.inline;\n      if (modeCfg.highlightFormatting) state.formatting = [\"list\", \"list-\" + listType];\n      return getType(state);\n    } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) {\n      state.quote = 0;\n      state.fencedEndRE = new RegExp(match[1] + \"+ *$\");\n      // try switching mode\n      state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2]);\n      if (state.localMode) state.localState = CodeMirror.startState(state.localMode);\n      state.f = state.block = local;\n      if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n      state.code = -1\n      return getType(state);\n    // SETEXT has lowest block-scope precedence after HR, so check it after\n    //  the others (code, blockquote, list...)\n    } else if (\n      // if setext set, indicates line after ---/===\n      state.setext || (\n        // line before ---/===\n        (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false &&\n        !state.code && !isHr && !linkDefRE.test(stream.string) &&\n        (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))\n      )\n    ) {\n      if ( !state.setext ) {\n        state.header = match[0].charAt(0) == '=' ? 1 : 2;\n        state.setext = state.header;\n      } else {\n        state.header = state.setext;\n        // has no effect on type so we can reset it now\n        state.setext = 0;\n        stream.skipToEnd();\n        if (modeCfg.highlightFormatting) state.formatting = \"header\";\n      }\n      state.thisLine.header = true;\n      state.f = state.inline;\n      return getType(state);\n    } else if (isHr) {\n      stream.skipToEnd();\n      state.hr = true;\n      state.thisLine.hr = true;\n      return tokenTypes.hr;\n    } else if (stream.peek() === '[') {\n      return switchInline(stream, state, footnoteLink);\n    }\n\n    return switchInline(stream, state, state.inline);\n  }\n\n  function htmlBlock(stream, state) {\n    var style = htmlMode.token(stream, state.htmlState);\n    if (!htmlModeMissing) {\n      var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n      if ((inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n           (!inner.state.context && inner.state.tokenize.isInText)) ||\n          (state.md_inside && stream.current().indexOf(\">\") > -1)) {\n        state.f = inlineNormal;\n        state.block = blockNormal;\n        state.htmlState = null;\n      }\n    }\n    return style;\n  }\n\n  function local(stream, state) {\n    var currListInd = state.listStack[state.listStack.length - 1] || 0;\n    var hasExitedList = state.indentation < currListInd;\n    var maxFencedEndInd = currListInd + 3;\n    if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) {\n      if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n      var returnType;\n      if (!hasExitedList) returnType = getType(state)\n      state.localMode = state.localState = null;\n      state.block = blockNormal;\n      state.f = inlineNormal;\n      state.fencedEndRE = null;\n      state.code = 0\n      state.thisLine.fencedCodeEnd = true;\n      if (hasExitedList) return switchBlock(stream, state, state.block);\n      return returnType;\n    } else if (state.localMode) {\n      return state.localMode.token(stream, state.localState);\n    } else {\n      stream.skipToEnd();\n      return tokenTypes.code;\n    }\n  }\n\n  // Inline\n  function getType(state) {\n    var styles = [];\n\n    if (state.formatting) {\n      styles.push(tokenTypes.formatting);\n\n      if (typeof state.formatting === \"string\") state.formatting = [state.formatting];\n\n      for (var i = 0; i < state.formatting.length; i++) {\n        styles.push(tokenTypes.formatting + \"-\" + state.formatting[i]);\n\n        if (state.formatting[i] === \"header\") {\n          styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.header);\n        }\n\n        // Add `formatting-quote` and `formatting-quote-#` for blockquotes\n        // Add `error` instead if the maximum blockquote nesting depth is passed\n        if (state.formatting[i] === \"quote\") {\n          if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n            styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.quote);\n          } else {\n            styles.push(\"error\");\n          }\n        }\n      }\n    }\n\n    if (state.taskOpen) {\n      styles.push(\"meta\");\n      return styles.length ? styles.join(' ') : null;\n    }\n    if (state.taskClosed) {\n      styles.push(\"property\");\n      return styles.length ? styles.join(' ') : null;\n    }\n\n    if (state.linkHref) {\n      styles.push(tokenTypes.linkHref, \"url\");\n    } else { // Only apply inline styles to non-url text\n      if (state.strong) { styles.push(tokenTypes.strong); }\n      if (state.em) { styles.push(tokenTypes.em); }\n      if (state.strikethrough) { styles.push(tokenTypes.strikethrough); }\n      if (state.emoji) { styles.push(tokenTypes.emoji); }\n      if (state.linkText) { styles.push(tokenTypes.linkText); }\n      if (state.code) { styles.push(tokenTypes.code); }\n      if (state.image) { styles.push(tokenTypes.image); }\n      if (state.imageAltText) { styles.push(tokenTypes.imageAltText, \"link\"); }\n      if (state.imageMarker) { styles.push(tokenTypes.imageMarker); }\n    }\n\n    if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + \"-\" + state.header); }\n\n    if (state.quote) {\n      styles.push(tokenTypes.quote);\n\n      // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth\n      if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n        styles.push(tokenTypes.quote + \"-\" + state.quote);\n      } else {\n        styles.push(tokenTypes.quote + \"-\" + modeCfg.maxBlockquoteDepth);\n      }\n    }\n\n    if (state.list !== false) {\n      var listMod = (state.listStack.length - 1) % 3;\n      if (!listMod) {\n        styles.push(tokenTypes.list1);\n      } else if (listMod === 1) {\n        styles.push(tokenTypes.list2);\n      } else {\n        styles.push(tokenTypes.list3);\n      }\n    }\n\n    if (state.trailingSpaceNewLine) {\n      styles.push(\"trailing-space-new-line\");\n    } else if (state.trailingSpace) {\n      styles.push(\"trailing-space-\" + (state.trailingSpace % 2 ? \"a\" : \"b\"));\n    }\n\n    return styles.length ? styles.join(' ') : null;\n  }\n\n  function handleText(stream, state) {\n    if (stream.match(textRE, true)) {\n      return getType(state);\n    }\n    return undefined;\n  }\n\n  function inlineNormal(stream, state) {\n    var style = state.text(stream, state);\n    if (typeof style !== 'undefined')\n      return style;\n\n    if (state.list) { // List marker (*, +, -, 1., etc)\n      state.list = null;\n      return getType(state);\n    }\n\n    if (state.taskList) {\n      var taskOpen = stream.match(taskListRE, true)[1] === \" \";\n      if (taskOpen) state.taskOpen = true;\n      else state.taskClosed = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"task\";\n      state.taskList = false;\n      return getType(state);\n    }\n\n    state.taskOpen = false;\n    state.taskClosed = false;\n\n    if (state.header && stream.match(/^#+$/, true)) {\n      if (modeCfg.highlightFormatting) state.formatting = \"header\";\n      return getType(state);\n    }\n\n    var ch = stream.next();\n\n    // Matches link titles present on next line\n    if (state.linkTitle) {\n      state.linkTitle = false;\n      var matchCh = ch;\n      if (ch === '(') {\n        matchCh = ')';\n      }\n      matchCh = (matchCh+'').replace(/([.?*+^\\[\\]\\\\(){}|-])/g, \"\\\\$1\");\n      var regex = '^\\\\s*(?:[^' + matchCh + '\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)' + matchCh;\n      if (stream.match(new RegExp(regex), true)) {\n        return tokenTypes.linkHref;\n      }\n    }\n\n    // If this block is changed, it may need to be updated in GFM mode\n    if (ch === '`') {\n      var previousFormatting = state.formatting;\n      if (modeCfg.highlightFormatting) state.formatting = \"code\";\n      stream.eatWhile('`');\n      var count = stream.current().length\n      if (state.code == 0 && (!state.quote || count == 1)) {\n        state.code = count\n        return getType(state)\n      } else if (count == state.code) { // Must be exact\n        var t = getType(state)\n        state.code = 0\n        return t\n      } else {\n        state.formatting = previousFormatting\n        return getType(state)\n      }\n    } else if (state.code) {\n      return getType(state);\n    }\n\n    if (ch === '\\\\') {\n      stream.next();\n      if (modeCfg.highlightFormatting) {\n        var type = getType(state);\n        var formattingEscape = tokenTypes.formatting + \"-escape\";\n        return type ? type + \" \" + formattingEscape : formattingEscape;\n      }\n    }\n\n    if (ch === '!' && stream.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/, false)) {\n      state.imageMarker = true;\n      state.image = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"image\";\n      return getType(state);\n    }\n\n    if (ch === '[' && state.imageMarker && stream.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/, false)) {\n      state.imageMarker = false;\n      state.imageAltText = true\n      if (modeCfg.highlightFormatting) state.formatting = \"image\";\n      return getType(state);\n    }\n\n    if (ch === ']' && state.imageAltText) {\n      if (modeCfg.highlightFormatting) state.formatting = \"image\";\n      var type = getType(state);\n      state.imageAltText = false;\n      state.image = false;\n      state.inline = state.f = linkHref;\n      return type;\n    }\n\n    if (ch === '[' && !state.image) {\n      if (state.linkText && stream.match(/^.*?\\]/)) return getType(state)\n      state.linkText = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      return getType(state);\n    }\n\n    if (ch === ']' && state.linkText) {\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      state.linkText = false;\n      state.inline = state.f = stream.match(/\\(.*?\\)| ?\\[.*?\\]/, false) ? linkHref : inlineNormal\n      return type;\n    }\n\n    if (ch === '<' && stream.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/, false)) {\n      state.f = state.inline = linkInline;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      if (type){\n        type += \" \";\n      } else {\n        type = \"\";\n      }\n      return type + tokenTypes.linkInline;\n    }\n\n    if (ch === '<' && stream.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/, false)) {\n      state.f = state.inline = linkInline;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      if (type){\n        type += \" \";\n      } else {\n        type = \"\";\n      }\n      return type + tokenTypes.linkEmail;\n    }\n\n    if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i, false)) {\n      var end = stream.string.indexOf(\">\", stream.pos);\n      if (end != -1) {\n        var atts = stream.string.substring(stream.start, end);\n        if (/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(atts)) state.md_inside = true;\n      }\n      stream.backUp(1);\n      state.htmlState = CodeMirror.startState(htmlMode);\n      return switchBlock(stream, state, htmlBlock);\n    }\n\n    if (modeCfg.xml && ch === '<' && stream.match(/^\\/\\w*?>/)) {\n      state.md_inside = false;\n      return \"tag\";\n    } else if (ch === \"*\" || ch === \"_\") {\n      var len = 1, before = stream.pos == 1 ? \" \" : stream.string.charAt(stream.pos - 2)\n      while (len < 3 && stream.eat(ch)) len++\n      var after = stream.peek() || \" \"\n      // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis\n      var leftFlanking = !/\\s/.test(after) && (!punctuation.test(after) || /\\s/.test(before) || punctuation.test(before))\n      var rightFlanking = !/\\s/.test(before) && (!punctuation.test(before) || /\\s/.test(after) || punctuation.test(after))\n      var setEm = null, setStrong = null\n      if (len % 2) { // Em\n        if (!state.em && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n          setEm = true\n        else if (state.em == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n          setEm = false\n      }\n      if (len > 1) { // Strong\n        if (!state.strong && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n          setStrong = true\n        else if (state.strong == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n          setStrong = false\n      }\n      if (setStrong != null || setEm != null) {\n        if (modeCfg.highlightFormatting) state.formatting = setEm == null ? \"strong\" : setStrong == null ? \"em\" : \"strong em\"\n        if (setEm === true) state.em = ch\n        if (setStrong === true) state.strong = ch\n        var t = getType(state)\n        if (setEm === false) state.em = false\n        if (setStrong === false) state.strong = false\n        return t\n      }\n    } else if (ch === ' ') {\n      if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces\n        if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n          return getType(state);\n        } else { // Not surrounded by spaces, back up pointer\n          stream.backUp(1);\n        }\n      }\n    }\n\n    if (modeCfg.strikethrough) {\n      if (ch === '~' && stream.eatWhile(ch)) {\n        if (state.strikethrough) {// Remove strikethrough\n          if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n          var t = getType(state);\n          state.strikethrough = false;\n          return t;\n        } else if (stream.match(/^[^\\s]/, false)) {// Add strikethrough\n          state.strikethrough = true;\n          if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n          return getType(state);\n        }\n      } else if (ch === ' ') {\n        if (stream.match(/^~~/, true)) { // Probably surrounded by space\n          if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n            return getType(state);\n          } else { // Not surrounded by spaces, back up pointer\n            stream.backUp(2);\n          }\n        }\n      }\n    }\n\n    if (modeCfg.emoji && ch === \":\" && stream.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)) {\n      state.emoji = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"emoji\";\n      var retType = getType(state);\n      state.emoji = false;\n      return retType;\n    }\n\n    if (ch === ' ') {\n      if (stream.match(/^ +$/, false)) {\n        state.trailingSpace++;\n      } else if (state.trailingSpace) {\n        state.trailingSpaceNewLine = true;\n      }\n    }\n\n    return getType(state);\n  }\n\n  function linkInline(stream, state) {\n    var ch = stream.next();\n\n    if (ch === \">\") {\n      state.f = state.inline = inlineNormal;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      if (type){\n        type += \" \";\n      } else {\n        type = \"\";\n      }\n      return type + tokenTypes.linkInline;\n    }\n\n    stream.match(/^[^>]+/, true);\n\n    return tokenTypes.linkInline;\n  }\n\n  function linkHref(stream, state) {\n    // Check if space, and return NULL if so (to avoid marking the space)\n    if(stream.eatSpace()){\n      return null;\n    }\n    var ch = stream.next();\n    if (ch === '(' || ch === '[') {\n      state.f = state.inline = getLinkHrefInside(ch === \"(\" ? \")\" : \"]\");\n      if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n      state.linkHref = true;\n      return getType(state);\n    }\n    return 'error';\n  }\n\n  var linkRE = {\n    \")\": /^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\n    \"]\": /^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/\n  }\n\n  function getLinkHrefInside(endChar) {\n    return function(stream, state) {\n      var ch = stream.next();\n\n      if (ch === endChar) {\n        state.f = state.inline = inlineNormal;\n        if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n        var returnState = getType(state);\n        state.linkHref = false;\n        return returnState;\n      }\n\n      stream.match(linkRE[endChar])\n      state.linkHref = true;\n      return getType(state);\n    };\n  }\n\n  function footnoteLink(stream, state) {\n    if (stream.match(/^([^\\]\\\\]|\\\\.)*\\]:/, false)) {\n      state.f = footnoteLinkInside;\n      stream.next(); // Consume [\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      state.linkText = true;\n      return getType(state);\n    }\n    return switchInline(stream, state, inlineNormal);\n  }\n\n  function footnoteLinkInside(stream, state) {\n    if (stream.match(/^\\]:/, true)) {\n      state.f = state.inline = footnoteUrl;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var returnType = getType(state);\n      state.linkText = false;\n      return returnType;\n    }\n\n    stream.match(/^([^\\]\\\\]|\\\\.)+/, true);\n\n    return tokenTypes.linkText;\n  }\n\n  function footnoteUrl(stream, state) {\n    // Check if space, and return NULL if so (to avoid marking the space)\n    if(stream.eatSpace()){\n      return null;\n    }\n    // Match URL\n    stream.match(/^[^\\s]+/, true);\n    // Check for link title\n    if (stream.peek() === undefined) { // End of line, set flag to check next line\n      state.linkTitle = true;\n    } else { // More content on line, check if link title\n      stream.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\\\\\|\\\\.)+\"|'(?:[^'\\\\]|\\\\\\\\|\\\\.)+'|\\((?:[^)\\\\]|\\\\\\\\|\\\\.)+\\)))?/, true);\n    }\n    state.f = state.inline = inlineNormal;\n    return tokenTypes.linkHref + \" url\";\n  }\n\n  var mode = {\n    startState: function() {\n      return {\n        f: blockNormal,\n\n        prevLine: {stream: null},\n        thisLine: {stream: null},\n\n        block: blockNormal,\n        htmlState: null,\n        indentation: 0,\n\n        inline: inlineNormal,\n        text: handleText,\n\n        formatting: false,\n        linkText: false,\n        linkHref: false,\n        linkTitle: false,\n        code: 0,\n        em: false,\n        strong: false,\n        header: 0,\n        setext: 0,\n        hr: false,\n        taskList: false,\n        list: false,\n        listStack: [],\n        quote: 0,\n        trailingSpace: 0,\n        trailingSpaceNewLine: false,\n        strikethrough: false,\n        emoji: false,\n        fencedEndRE: null\n      };\n    },\n\n    copyState: function(s) {\n      return {\n        f: s.f,\n\n        prevLine: s.prevLine,\n        thisLine: s.thisLine,\n\n        block: s.block,\n        htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),\n        indentation: s.indentation,\n\n        localMode: s.localMode,\n        localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,\n\n        inline: s.inline,\n        text: s.text,\n        formatting: false,\n        linkText: s.linkText,\n        linkTitle: s.linkTitle,\n        linkHref: s.linkHref,\n        code: s.code,\n        em: s.em,\n        strong: s.strong,\n        strikethrough: s.strikethrough,\n        emoji: s.emoji,\n        header: s.header,\n        setext: s.setext,\n        hr: s.hr,\n        taskList: s.taskList,\n        list: s.list,\n        listStack: s.listStack.slice(0),\n        quote: s.quote,\n        indentedCode: s.indentedCode,\n        trailingSpace: s.trailingSpace,\n        trailingSpaceNewLine: s.trailingSpaceNewLine,\n        md_inside: s.md_inside,\n        fencedEndRE: s.fencedEndRE\n      };\n    },\n\n    token: function(stream, state) {\n\n      // Reset state.formatting\n      state.formatting = false;\n\n      if (stream != state.thisLine.stream) {\n        state.header = 0;\n        state.hr = false;\n\n        if (stream.match(/^\\s*$/, true)) {\n          blankLine(state);\n          return null;\n        }\n\n        state.prevLine = state.thisLine\n        state.thisLine = {stream: stream}\n\n        // Reset state.taskList\n        state.taskList = false;\n\n        // Reset state.trailingSpace\n        state.trailingSpace = 0;\n        state.trailingSpaceNewLine = false;\n\n        if (!state.localState) {\n          state.f = state.block;\n          if (state.f != htmlBlock) {\n            var indentation = stream.match(/^\\s*/, true)[0].replace(/\\t/g, expandedTab).length;\n            state.indentation = indentation;\n            state.indentationDiff = null;\n            if (indentation > 0) return null;\n          }\n        }\n      }\n      return state.f(stream, state);\n    },\n\n    innerMode: function(state) {\n      if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode};\n      if (state.localState) return {state: state.localState, mode: state.localMode};\n      return {state: state, mode: mode};\n    },\n\n    indent: function(state, textAfter, line) {\n      if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line)\n      if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line)\n      return CodeMirror.Pass\n    },\n\n    blankLine: blankLine,\n\n    getType: getType,\n\n    blockCommentStart: \"<!--\",\n    blockCommentEnd: \"-->\",\n    closeBrackets: \"()[]{}''\\\"\\\"``\",\n    fold: \"markdown\"\n  };\n  return mode;\n}, \"xml\");\n\nCodeMirror.defineMIME(\"text/markdown\", \"markdown\");\n\nCodeMirror.defineMIME(\"text/x-markdown\", \"markdown\");\n\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/edit/matchbrackets',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  var ie_lt8 = /MSIE \\d/.test(navigator.userAgent) &&\n    (document.documentMode == null || document.documentMode < 8);\n\n  var Pos = CodeMirror.Pos;\n\n  var matching = {\"(\": \")>\", \")\": \"(<\", \"[\": \"]>\", \"]\": \"[<\", \"{\": \"}>\", \"}\": \"{<\", \"<\": \">>\", \">\": \"<<\"};\n\n  function bracketRegex(config) {\n    return config && config.bracketRegex || /[(){}[\\]]/\n  }\n\n  function findMatchingBracket(cm, where, config) {\n    var line = cm.getLineHandle(where.line), pos = where.ch - 1;\n    var afterCursor = config && config.afterCursor\n    if (afterCursor == null)\n      afterCursor = /(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className)\n    var re = bracketRegex(config)\n\n    // A cursor is defined as between two characters, but in in vim command mode\n    // (i.e. not insert mode), the cursor is visually represented as a\n    // highlighted box on top of the 2nd character. Otherwise, we allow matches\n    // from before or after the cursor.\n    var match = (!afterCursor && pos >= 0 && re.test(line.text.charAt(pos)) && matching[line.text.charAt(pos)]) ||\n        re.test(line.text.charAt(pos + 1)) && matching[line.text.charAt(++pos)];\n    if (!match) return null;\n    var dir = match.charAt(1) == \">\" ? 1 : -1;\n    if (config && config.strict && (dir > 0) != (pos == where.ch)) return null;\n    var style = cm.getTokenTypeAt(Pos(where.line, pos + 1));\n\n    var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config);\n    if (found == null) return null;\n    return {from: Pos(where.line, pos), to: found && found.pos,\n            match: found && found.ch == match.charAt(0), forward: dir > 0};\n  }\n\n  // bracketRegex is used to specify which type of bracket to scan\n  // should be a regexp, e.g. /[[\\]]/\n  //\n  // Note: If \"where\" is on an open bracket, then this bracket is ignored.\n  //\n  // Returns false when no bracket was found, null when it reached\n  // maxScanLines and gave up\n  function scanForBracket(cm, where, dir, style, config) {\n    var maxScanLen = (config && config.maxScanLineLength) || 10000;\n    var maxScanLines = (config && config.maxScanLines) || 1000;\n\n    var stack = [];\n    var re = bracketRegex(config)\n    var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1)\n                          : Math.max(cm.firstLine() - 1, where.line - maxScanLines);\n    for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) {\n      var line = cm.getLine(lineNo);\n      if (!line) continue;\n      var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1;\n      if (line.length > maxScanLen) continue;\n      if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0);\n      for (; pos != end; pos += dir) {\n        var ch = line.charAt(pos);\n        if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) {\n          var match = matching[ch];\n          if ((match.charAt(1) == \">\") == (dir > 0)) stack.push(ch);\n          else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch};\n          else stack.pop();\n        }\n      }\n    }\n    return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null;\n  }\n\n  function matchBrackets(cm, autoclear, config) {\n    // Disable brace matching in long lines, since it'll cause hugely slow updates\n    var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000;\n    var marks = [], ranges = cm.listSelections();\n    for (var i = 0; i < ranges.length; i++) {\n      var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, config);\n      if (match && cm.getLine(match.from.line).length <= maxHighlightLen) {\n        var style = match.match ? \"CodeMirror-matchingbracket\" : \"CodeMirror-nonmatchingbracket\";\n        marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style}));\n        if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen)\n          marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style}));\n      }\n    }\n\n    if (marks.length) {\n      // Kludge to work around the IE bug from issue #1193, where text\n      // input stops going to the textare whever this fires.\n      if (ie_lt8 && cm.state.focused) cm.focus();\n\n      var clear = function() {\n        cm.operation(function() {\n          for (var i = 0; i < marks.length; i++) marks[i].clear();\n        });\n      };\n      if (autoclear) setTimeout(clear, 800);\n      else return clear;\n    }\n  }\n\n  function doMatchBrackets(cm) {\n    cm.operation(function() {\n      if (cm.state.matchBrackets.currentlyHighlighted) {\n        cm.state.matchBrackets.currentlyHighlighted();\n        cm.state.matchBrackets.currentlyHighlighted = null;\n      }\n      cm.state.matchBrackets.currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets);\n    });\n  }\n\n  CodeMirror.defineOption(\"matchBrackets\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      cm.off(\"cursorActivity\", doMatchBrackets);\n      if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) {\n        cm.state.matchBrackets.currentlyHighlighted();\n        cm.state.matchBrackets.currentlyHighlighted = null;\n      }\n    }\n    if (val) {\n      cm.state.matchBrackets = typeof val == \"object\" ? val : {};\n      cm.on(\"cursorActivity\", doMatchBrackets);\n    }\n  });\n\n  CodeMirror.defineExtension(\"matchBrackets\", function() {matchBrackets(this, true);});\n  CodeMirror.defineExtension(\"findMatchingBracket\", function(pos, config, oldConfig){\n    // Backwards-compatibility kludge\n    if (oldConfig || typeof config == \"boolean\") {\n      if (!oldConfig) {\n        config = config ? {strict: true} : null\n      } else {\n        oldConfig.strict = config\n        config = oldConfig\n      }\n    }\n    return findMatchingBracket(this, pos, config)\n  });\n  CodeMirror.defineExtension(\"scanForBracket\", function(pos, dir, style, config){\n    return scanForBracket(this, pos, dir, style, config);\n  });\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/comment/continuecomment',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  function continueComment(cm) {\n    if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n    var ranges = cm.listSelections(), mode, inserts = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var pos = ranges[i].head\n      if (!/\\bcomment\\b/.test(cm.getTokenTypeAt(pos))) return CodeMirror.Pass;\n      var modeHere = cm.getModeAt(pos)\n      if (!mode) mode = modeHere;\n      else if (mode != modeHere) return CodeMirror.Pass;\n\n      var insert = null;\n      if (mode.blockCommentStart && mode.blockCommentContinue) {\n        var line = cm.getLine(pos.line).slice(0, pos.ch)\n        var end = line.lastIndexOf(mode.blockCommentEnd), found\n        if (end != -1 && end == pos.ch - mode.blockCommentEnd.length) {\n          // Comment ended, don't continue it\n        } else if ((found = line.lastIndexOf(mode.blockCommentStart)) > -1 && found > end) {\n          insert = line.slice(0, found)\n          if (/\\S/.test(insert)) {\n            insert = \"\"\n            for (var j = 0; j < found; ++j) insert += \" \"\n          }\n        } else if ((found = line.indexOf(mode.blockCommentContinue)) > -1 && !/\\S/.test(line.slice(0, found))) {\n          insert = line.slice(0, found)\n        }\n        if (insert != null) insert += mode.blockCommentContinue\n      }\n      if (insert == null && mode.lineComment && continueLineCommentEnabled(cm)) {\n        var line = cm.getLine(pos.line), found = line.indexOf(mode.lineComment);\n        if (found > -1) {\n          insert = line.slice(0, found);\n          if (/\\S/.test(insert)) insert = null;\n          else insert += mode.lineComment + line.slice(found + mode.lineComment.length).match(/^\\s*/)[0];\n        }\n      }\n      if (insert == null) return CodeMirror.Pass;\n      inserts[i] = \"\\n\" + insert;\n    }\n\n    cm.operation(function() {\n      for (var i = ranges.length - 1; i >= 0; i--)\n        cm.replaceRange(inserts[i], ranges[i].from(), ranges[i].to(), \"+insert\");\n    });\n  }\n\n  function continueLineCommentEnabled(cm) {\n    var opt = cm.getOption(\"continueComments\");\n    if (opt && typeof opt == \"object\")\n      return opt.continueLineComment !== false;\n    return true;\n  }\n\n  CodeMirror.defineOption(\"continueComments\", null, function(cm, val, prev) {\n    if (prev && prev != CodeMirror.Init)\n      cm.removeKeyMap(\"continueComment\");\n    if (val) {\n      var key = \"Enter\";\n      if (typeof val == \"string\")\n        key = val;\n      else if (typeof val == \"object\" && val.key)\n        key = val.key;\n      var map = {name: \"continueComment\"};\n      map[key] = continueComment;\n      cm.addKeyMap(map);\n    }\n  });\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/comment/comment',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var noOptions = {};\n  var nonWS = /[^\\s\\u00a0]/;\n  var Pos = CodeMirror.Pos;\n\n  function firstNonWS(str) {\n    var found = str.search(nonWS);\n    return found == -1 ? 0 : found;\n  }\n\n  CodeMirror.commands.toggleComment = function(cm) {\n    cm.toggleComment();\n  };\n\n  CodeMirror.defineExtension(\"toggleComment\", function(options) {\n    if (!options) options = noOptions;\n    var cm = this;\n    var minLine = Infinity, ranges = this.listSelections(), mode = null;\n    for (var i = ranges.length - 1; i >= 0; i--) {\n      var from = ranges[i].from(), to = ranges[i].to();\n      if (from.line >= minLine) continue;\n      if (to.line >= minLine) to = Pos(minLine, 0);\n      minLine = from.line;\n      if (mode == null) {\n        if (cm.uncomment(from, to, options)) mode = \"un\";\n        else { cm.lineComment(from, to, options); mode = \"line\"; }\n      } else if (mode == \"un\") {\n        cm.uncomment(from, to, options);\n      } else {\n        cm.lineComment(from, to, options);\n      }\n    }\n  });\n\n  // Rough heuristic to try and detect lines that are part of multi-line string\n  function probablyInsideString(cm, pos, line) {\n    return /\\bstring\\b/.test(cm.getTokenTypeAt(Pos(pos.line, 0))) && !/^[\\'\\\"\\`]/.test(line)\n  }\n\n  function getMode(cm, pos) {\n    var mode = cm.getMode()\n    return mode.useInnerComments === false || !mode.innerMode ? mode : cm.getModeAt(pos)\n  }\n\n  CodeMirror.defineExtension(\"lineComment\", function(from, to, options) {\n    if (!options) options = noOptions;\n    var self = this, mode = getMode(self, from);\n    var firstLine = self.getLine(from.line);\n    if (firstLine == null || probablyInsideString(self, from, firstLine)) return;\n\n    var commentString = options.lineComment || mode.lineComment;\n    if (!commentString) {\n      if (options.blockCommentStart || mode.blockCommentStart) {\n        options.fullLines = true;\n        self.blockComment(from, to, options);\n      }\n      return;\n    }\n\n    var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1);\n    var pad = options.padding == null ? \" \" : options.padding;\n    var blankLines = options.commentBlankLines || from.line == to.line;\n\n    self.operation(function() {\n      if (options.indent) {\n        var baseString = null;\n        for (var i = from.line; i < end; ++i) {\n          var line = self.getLine(i);\n          var whitespace = line.slice(0, firstNonWS(line));\n          if (baseString == null || baseString.length > whitespace.length) {\n            baseString = whitespace;\n          }\n        }\n        for (var i = from.line; i < end; ++i) {\n          var line = self.getLine(i), cut = baseString.length;\n          if (!blankLines && !nonWS.test(line)) continue;\n          if (line.slice(0, cut) != baseString) cut = firstNonWS(line);\n          self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut));\n        }\n      } else {\n        for (var i = from.line; i < end; ++i) {\n          if (blankLines || nonWS.test(self.getLine(i)))\n            self.replaceRange(commentString + pad, Pos(i, 0));\n        }\n      }\n    });\n  });\n\n  CodeMirror.defineExtension(\"blockComment\", function(from, to, options) {\n    if (!options) options = noOptions;\n    var self = this, mode = getMode(self, from);\n    var startString = options.blockCommentStart || mode.blockCommentStart;\n    var endString = options.blockCommentEnd || mode.blockCommentEnd;\n    if (!startString || !endString) {\n      if ((options.lineComment || mode.lineComment) && options.fullLines != false)\n        self.lineComment(from, to, options);\n      return;\n    }\n    if (/\\bcomment\\b/.test(self.getTokenTypeAt(Pos(from.line, 0)))) return\n\n    var end = Math.min(to.line, self.lastLine());\n    if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end;\n\n    var pad = options.padding == null ? \" \" : options.padding;\n    if (from.line > end) return;\n\n    self.operation(function() {\n      if (options.fullLines != false) {\n        var lastLineHasText = nonWS.test(self.getLine(end));\n        self.replaceRange(pad + endString, Pos(end));\n        self.replaceRange(startString + pad, Pos(from.line, 0));\n        var lead = options.blockCommentLead || mode.blockCommentLead;\n        if (lead != null) for (var i = from.line + 1; i <= end; ++i)\n          if (i != end || lastLineHasText)\n            self.replaceRange(lead + pad, Pos(i, 0));\n      } else {\n        self.replaceRange(endString, to);\n        self.replaceRange(startString, from);\n      }\n    });\n  });\n\n  CodeMirror.defineExtension(\"uncomment\", function(from, to, options) {\n    if (!options) options = noOptions;\n    var self = this, mode = getMode(self, from);\n    var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), start = Math.min(from.line, end);\n\n    // Try finding line comments\n    var lineString = options.lineComment || mode.lineComment, lines = [];\n    var pad = options.padding == null ? \" \" : options.padding, didSomething;\n    lineComment: {\n      if (!lineString) break lineComment;\n      for (var i = start; i <= end; ++i) {\n        var line = self.getLine(i);\n        var found = line.indexOf(lineString);\n        if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1;\n        if (found == -1 && nonWS.test(line)) break lineComment;\n        if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment;\n        lines.push(line);\n      }\n      self.operation(function() {\n        for (var i = start; i <= end; ++i) {\n          var line = lines[i - start];\n          var pos = line.indexOf(lineString), endPos = pos + lineString.length;\n          if (pos < 0) continue;\n          if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length;\n          didSomething = true;\n          self.replaceRange(\"\", Pos(i, pos), Pos(i, endPos));\n        }\n      });\n      if (didSomething) return true;\n    }\n\n    // Try block comments\n    var startString = options.blockCommentStart || mode.blockCommentStart;\n    var endString = options.blockCommentEnd || mode.blockCommentEnd;\n    if (!startString || !endString) return false;\n    var lead = options.blockCommentLead || mode.blockCommentLead;\n    var startLine = self.getLine(start), open = startLine.indexOf(startString)\n    if (open == -1) return false\n    var endLine = end == start ? startLine : self.getLine(end)\n    var close = endLine.indexOf(endString, end == start ? open + startString.length : 0);\n    var insideStart = Pos(start, open + 1), insideEnd = Pos(end, close + 1)\n    if (close == -1 ||\n        !/comment/.test(self.getTokenTypeAt(insideStart)) ||\n        !/comment/.test(self.getTokenTypeAt(insideEnd)) ||\n        self.getRange(insideStart, insideEnd, \"\\n\").indexOf(endString) > -1)\n      return false;\n\n    // Avoid killing block comments completely outside the selection.\n    // Positions of the last startString before the start of the selection, and the first endString after it.\n    var lastStart = startLine.lastIndexOf(startString, from.ch);\n    var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length);\n    if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false;\n    // Positions of the first endString after the end of the selection, and the last startString before it.\n    firstEnd = endLine.indexOf(endString, to.ch);\n    var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch);\n    lastStart = (firstEnd == -1 || almostLastStart == -1) ? -1 : to.ch + almostLastStart;\n    if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false;\n\n    self.operation(function() {\n      self.replaceRange(\"\", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)),\n                        Pos(end, close + endString.length));\n      var openEnd = open + startString.length;\n      if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length;\n      self.replaceRange(\"\", Pos(start, open), Pos(start, openEnd));\n      if (lead) for (var i = start + 1; i <= end; ++i) {\n        var line = self.getLine(i), found = line.indexOf(lead);\n        if (found == -1 || nonWS.test(line.slice(0, found))) continue;\n        var foundEnd = found + lead.length;\n        if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length;\n        self.replaceRange(\"\", Pos(i, found), Pos(i, foundEnd));\n      }\n    });\n    return true;\n  });\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/hint/show-hint',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var HINT_ELEMENT_CLASS        = \"CodeMirror-hint\";\n  var ACTIVE_HINT_ELEMENT_CLASS = \"CodeMirror-hint-active\";\n\n  // This is the old interface, kept around for now to stay\n  // backwards-compatible.\n  CodeMirror.showHint = function(cm, getHints, options) {\n    if (!getHints) return cm.showHint(options);\n    if (options && options.async) getHints.async = true;\n    var newOpts = {hint: getHints};\n    if (options) for (var prop in options) newOpts[prop] = options[prop];\n    return cm.showHint(newOpts);\n  };\n\n  CodeMirror.defineExtension(\"showHint\", function(options) {\n    options = parseOptions(this, this.getCursor(\"start\"), options);\n    var selections = this.listSelections()\n    if (selections.length > 1) return;\n    // By default, don't allow completion when something is selected.\n    // A hint function can have a `supportsSelection` property to\n    // indicate that it can handle selections.\n    if (this.somethingSelected()) {\n      if (!options.hint.supportsSelection) return;\n      // Don't try with cross-line selections\n      for (var i = 0; i < selections.length; i++)\n        if (selections[i].head.line != selections[i].anchor.line) return;\n    }\n\n    if (this.state.completionActive) this.state.completionActive.close();\n    var completion = this.state.completionActive = new Completion(this, options);\n    if (!completion.options.hint) return;\n\n    CodeMirror.signal(this, \"startCompletion\", this);\n    completion.update(true);\n  });\n\n  CodeMirror.defineExtension(\"closeHint\", function() {\n    if (this.state.completionActive) this.state.completionActive.close()\n  })\n\n  function Completion(cm, options) {\n    this.cm = cm;\n    this.options = options;\n    this.widget = null;\n    this.debounce = 0;\n    this.tick = 0;\n    this.startPos = this.cm.getCursor(\"start\");\n    this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length;\n\n    var self = this;\n    cm.on(\"cursorActivity\", this.activityFunc = function() { self.cursorActivity(); });\n  }\n\n  var requestAnimationFrame = window.requestAnimationFrame || function(fn) {\n    return setTimeout(fn, 1000/60);\n  };\n  var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout;\n\n  Completion.prototype = {\n    close: function() {\n      if (!this.active()) return;\n      this.cm.state.completionActive = null;\n      this.tick = null;\n      this.cm.off(\"cursorActivity\", this.activityFunc);\n\n      if (this.widget && this.data) CodeMirror.signal(this.data, \"close\");\n      if (this.widget) this.widget.close();\n      CodeMirror.signal(this.cm, \"endCompletion\", this.cm);\n    },\n\n    active: function() {\n      return this.cm.state.completionActive == this;\n    },\n\n    pick: function(data, i) {\n      var completion = data.list[i];\n      if (completion.hint) completion.hint(this.cm, data, completion);\n      else this.cm.replaceRange(getText(completion), completion.from || data.from,\n                                completion.to || data.to, \"complete\");\n      CodeMirror.signal(data, \"pick\", completion);\n      this.close();\n    },\n\n    cursorActivity: function() {\n      if (this.debounce) {\n        cancelAnimationFrame(this.debounce);\n        this.debounce = 0;\n      }\n\n      var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line);\n      if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch ||\n          pos.ch < this.startPos.ch || this.cm.somethingSelected() ||\n          (!pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) {\n        this.close();\n      } else {\n        var self = this;\n        this.debounce = requestAnimationFrame(function() {self.update();});\n        if (this.widget) this.widget.disable();\n      }\n    },\n\n    update: function(first) {\n      if (this.tick == null) return\n      var self = this, myTick = ++this.tick\n      fetchHints(this.options.hint, this.cm, this.options, function(data) {\n        if (self.tick == myTick) self.finishUpdate(data, first)\n      })\n    },\n\n    finishUpdate: function(data, first) {\n      if (this.data) CodeMirror.signal(this.data, \"update\");\n\n      var picked = (this.widget && this.widget.picked) || (first && this.options.completeSingle);\n      if (this.widget) this.widget.close();\n\n      this.data = data;\n\n      if (data && data.list.length) {\n        if (picked && data.list.length == 1) {\n          this.pick(data, 0);\n        } else {\n          this.widget = new Widget(this, data);\n          CodeMirror.signal(data, \"shown\");\n        }\n      }\n    }\n  };\n\n  function parseOptions(cm, pos, options) {\n    var editor = cm.options.hintOptions;\n    var out = {};\n    for (var prop in defaultOptions) out[prop] = defaultOptions[prop];\n    if (editor) for (var prop in editor)\n      if (editor[prop] !== undefined) out[prop] = editor[prop];\n    if (options) for (var prop in options)\n      if (options[prop] !== undefined) out[prop] = options[prop];\n    if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos)\n    return out;\n  }\n\n  function getText(completion) {\n    if (typeof completion == \"string\") return completion;\n    else return completion.text;\n  }\n\n  function buildKeyMap(completion, handle) {\n    var baseMap = {\n      Up: function() {handle.moveFocus(-1);},\n      Down: function() {handle.moveFocus(1);},\n      PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);},\n      PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);},\n      Home: function() {handle.setFocus(0);},\n      End: function() {handle.setFocus(handle.length - 1);},\n      Enter: handle.pick,\n      Tab: handle.pick,\n      Esc: handle.close\n    };\n\n    var mac = /Mac/.test(navigator.platform);\n\n    if (mac) {\n      baseMap[\"Ctrl-P\"] = function() {handle.moveFocus(-1);};\n      baseMap[\"Ctrl-N\"] = function() {handle.moveFocus(1);};\n    }\n\n    var custom = completion.options.customKeys;\n    var ourMap = custom ? {} : baseMap;\n    function addBinding(key, val) {\n      var bound;\n      if (typeof val != \"string\")\n        bound = function(cm) { return val(cm, handle); };\n      // This mechanism is deprecated\n      else if (baseMap.hasOwnProperty(val))\n        bound = baseMap[val];\n      else\n        bound = val;\n      ourMap[key] = bound;\n    }\n    if (custom)\n      for (var key in custom) if (custom.hasOwnProperty(key))\n        addBinding(key, custom[key]);\n    var extra = completion.options.extraKeys;\n    if (extra)\n      for (var key in extra) if (extra.hasOwnProperty(key))\n        addBinding(key, extra[key]);\n    return ourMap;\n  }\n\n  function getHintElement(hintsElement, el) {\n    while (el && el != hintsElement) {\n      if (el.nodeName.toUpperCase() === \"LI\" && el.parentNode == hintsElement) return el;\n      el = el.parentNode;\n    }\n  }\n\n  function Widget(completion, data) {\n    this.completion = completion;\n    this.data = data;\n    this.picked = false;\n    var widget = this, cm = completion.cm;\n    var ownerDocument = cm.getInputField().ownerDocument;\n    var parentWindow = ownerDocument.defaultView || ownerDocument.parentWindow;\n\n    var hints = this.hints = ownerDocument.createElement(\"ul\");\n    var theme = completion.cm.options.theme;\n    hints.className = \"CodeMirror-hints \" + theme;\n    this.selectedHint = data.selectedHint || 0;\n\n    var completions = data.list;\n    for (var i = 0; i < completions.length; ++i) {\n      var elt = hints.appendChild(ownerDocument.createElement(\"li\")), cur = completions[i];\n      var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? \"\" : \" \" + ACTIVE_HINT_ELEMENT_CLASS);\n      if (cur.className != null) className = cur.className + \" \" + className;\n      elt.className = className;\n      if (cur.render) cur.render(elt, data, cur);\n      else elt.appendChild(ownerDocument.createTextNode(cur.displayText || getText(cur)));\n      elt.hintId = i;\n    }\n\n    var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null);\n    var left = pos.left, top = pos.bottom, below = true;\n    hints.style.left = left + \"px\";\n    hints.style.top = top + \"px\";\n    // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.\n    var winW = parentWindow.innerWidth || Math.max(ownerDocument.body.offsetWidth, ownerDocument.documentElement.offsetWidth);\n    var winH = parentWindow.innerHeight || Math.max(ownerDocument.body.offsetHeight, ownerDocument.documentElement.offsetHeight);\n    (completion.options.container || ownerDocument.body).appendChild(hints);\n    var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH;\n    var scrolls = hints.scrollHeight > hints.clientHeight + 1\n    var startScroll = cm.getScrollInfo();\n\n    if (overlapY > 0) {\n      var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top);\n      if (curTop - height > 0) { // Fits above cursor\n        hints.style.top = (top = pos.top - height) + \"px\";\n        below = false;\n      } else if (height > winH) {\n        hints.style.height = (winH - 5) + \"px\";\n        hints.style.top = (top = pos.bottom - box.top) + \"px\";\n        var cursor = cm.getCursor();\n        if (data.from.ch != cursor.ch) {\n          pos = cm.cursorCoords(cursor);\n          hints.style.left = (left = pos.left) + \"px\";\n          box = hints.getBoundingClientRect();\n        }\n      }\n    }\n    var overlapX = box.right - winW;\n    if (overlapX > 0) {\n      if (box.right - box.left > winW) {\n        hints.style.width = (winW - 5) + \"px\";\n        overlapX -= (box.right - box.left) - winW;\n      }\n      hints.style.left = (left = pos.left - overlapX) + \"px\";\n    }\n    if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling)\n      node.style.paddingRight = cm.display.nativeBarWidth + \"px\"\n\n    cm.addKeyMap(this.keyMap = buildKeyMap(completion, {\n      moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); },\n      setFocus: function(n) { widget.changeActive(n); },\n      menuSize: function() { return widget.screenAmount(); },\n      length: completions.length,\n      close: function() { completion.close(); },\n      pick: function() { widget.pick(); },\n      data: data\n    }));\n\n    if (completion.options.closeOnUnfocus) {\n      var closingOnBlur;\n      cm.on(\"blur\", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); });\n      cm.on(\"focus\", this.onFocus = function() { clearTimeout(closingOnBlur); });\n    }\n\n    cm.on(\"scroll\", this.onScroll = function() {\n      var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect();\n      var newTop = top + startScroll.top - curScroll.top;\n      var point = newTop - (parentWindow.pageYOffset || (ownerDocument.documentElement || ownerDocument.body).scrollTop);\n      if (!below) point += hints.offsetHeight;\n      if (point <= editor.top || point >= editor.bottom) return completion.close();\n      hints.style.top = newTop + \"px\";\n      hints.style.left = (left + startScroll.left - curScroll.left) + \"px\";\n    });\n\n    CodeMirror.on(hints, \"dblclick\", function(e) {\n      var t = getHintElement(hints, e.target || e.srcElement);\n      if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();}\n    });\n\n    CodeMirror.on(hints, \"click\", function(e) {\n      var t = getHintElement(hints, e.target || e.srcElement);\n      if (t && t.hintId != null) {\n        widget.changeActive(t.hintId);\n        if (completion.options.completeOnSingleClick) widget.pick();\n      }\n    });\n\n    CodeMirror.on(hints, \"mousedown\", function() {\n      setTimeout(function(){cm.focus();}, 20);\n    });\n\n    CodeMirror.signal(data, \"select\", completions[this.selectedHint], hints.childNodes[this.selectedHint]);\n    return true;\n  }\n\n  Widget.prototype = {\n    close: function() {\n      if (this.completion.widget != this) return;\n      this.completion.widget = null;\n      this.hints.parentNode.removeChild(this.hints);\n      this.completion.cm.removeKeyMap(this.keyMap);\n\n      var cm = this.completion.cm;\n      if (this.completion.options.closeOnUnfocus) {\n        cm.off(\"blur\", this.onBlur);\n        cm.off(\"focus\", this.onFocus);\n      }\n      cm.off(\"scroll\", this.onScroll);\n    },\n\n    disable: function() {\n      this.completion.cm.removeKeyMap(this.keyMap);\n      var widget = this;\n      this.keyMap = {Enter: function() { widget.picked = true; }};\n      this.completion.cm.addKeyMap(this.keyMap);\n    },\n\n    pick: function() {\n      this.completion.pick(this.data, this.selectedHint);\n    },\n\n    changeActive: function(i, avoidWrap) {\n      if (i >= this.data.list.length)\n        i = avoidWrap ? this.data.list.length - 1 : 0;\n      else if (i < 0)\n        i = avoidWrap ? 0  : this.data.list.length - 1;\n      if (this.selectedHint == i) return;\n      var node = this.hints.childNodes[this.selectedHint];\n      if (node) node.className = node.className.replace(\" \" + ACTIVE_HINT_ELEMENT_CLASS, \"\");\n      node = this.hints.childNodes[this.selectedHint = i];\n      node.className += \" \" + ACTIVE_HINT_ELEMENT_CLASS;\n      if (node.offsetTop < this.hints.scrollTop)\n        this.hints.scrollTop = node.offsetTop - 3;\n      else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight)\n        this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3;\n      CodeMirror.signal(this.data, \"select\", this.data.list[this.selectedHint], node);\n    },\n\n    screenAmount: function() {\n      return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;\n    }\n  };\n\n  function applicableHelpers(cm, helpers) {\n    if (!cm.somethingSelected()) return helpers\n    var result = []\n    for (var i = 0; i < helpers.length; i++)\n      if (helpers[i].supportsSelection) result.push(helpers[i])\n    return result\n  }\n\n  function fetchHints(hint, cm, options, callback) {\n    if (hint.async) {\n      hint(cm, callback, options)\n    } else {\n      var result = hint(cm, options)\n      if (result && result.then) result.then(callback)\n      else callback(result)\n    }\n  }\n\n  function resolveAutoHints(cm, pos) {\n    var helpers = cm.getHelpers(pos, \"hint\"), words\n    if (helpers.length) {\n      var resolved = function(cm, callback, options) {\n        var app = applicableHelpers(cm, helpers);\n        function run(i) {\n          if (i == app.length) return callback(null)\n          fetchHints(app[i], cm, options, function(result) {\n            if (result && result.list.length > 0) callback(result)\n            else run(i + 1)\n          })\n        }\n        run(0)\n      }\n      resolved.async = true\n      resolved.supportsSelection = true\n      return resolved\n    } else if (words = cm.getHelper(cm.getCursor(), \"hintWords\")) {\n      return function(cm) { return CodeMirror.hint.fromList(cm, {words: words}) }\n    } else if (CodeMirror.hint.anyword) {\n      return function(cm, options) { return CodeMirror.hint.anyword(cm, options) }\n    } else {\n      return function() {}\n    }\n  }\n\n  CodeMirror.registerHelper(\"hint\", \"auto\", {\n    resolve: resolveAutoHints\n  });\n\n  CodeMirror.registerHelper(\"hint\", \"fromList\", function(cm, options) {\n    var cur = cm.getCursor(), token = cm.getTokenAt(cur)\n    var term, from = CodeMirror.Pos(cur.line, token.start), to = cur\n    if (token.start < cur.ch && /\\w/.test(token.string.charAt(cur.ch - token.start - 1))) {\n      term = token.string.substr(0, cur.ch - token.start)\n    } else {\n      term = \"\"\n      from = cur\n    }\n    var found = [];\n    for (var i = 0; i < options.words.length; i++) {\n      var word = options.words[i];\n      if (word.slice(0, term.length) == term)\n        found.push(word);\n    }\n\n    if (found.length) return {list: found, from: from, to: to};\n  });\n\n  CodeMirror.commands.autocomplete = CodeMirror.showHint;\n\n  var defaultOptions = {\n    hint: CodeMirror.hint.auto,\n    completeSingle: true,\n    alignWithWord: true,\n    closeCharacters: /[\\s()\\[\\]{};:>,]/,\n    closeOnUnfocus: true,\n    completeOnSingleClick: true,\n    container: null,\n    customKeys: null,\n    extraKeys: null\n  };\n\n  CodeMirror.defineOption(\"hintOptions\", null);\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/hint/anyword-hint',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var WORD = /[\\w$]+/, RANGE = 500;\n\n  CodeMirror.registerHelper(\"hint\", \"anyword\", function(editor, options) {\n    var word = options && options.word || WORD;\n    var range = options && options.range || RANGE;\n    var cur = editor.getCursor(), curLine = editor.getLine(cur.line);\n    var end = cur.ch, start = end;\n    while (start && word.test(curLine.charAt(start - 1))) --start;\n    var curWord = start != end && curLine.slice(start, end);\n\n    var list = options && options.list || [], seen = {};\n    var re = new RegExp(word.source, \"g\");\n    for (var dir = -1; dir <= 1; dir += 2) {\n      var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir;\n      for (; line != endLine; line += dir) {\n        var text = editor.getLine(line), m;\n        while (m = re.exec(text)) {\n          if (line == cur.line && m[0] === curWord) continue;\n          if ((!curWord || m[0].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[0])) {\n            seen[m[0]] = true;\n            list.push(m[0]);\n          }\n        }\n      }\n    }\n    return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)};\n  });\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/display/placeholder',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  CodeMirror.defineOption(\"placeholder\", \"\", function(cm, val, old) {\n    var prev = old && old != CodeMirror.Init;\n    if (val && !prev) {\n      cm.on(\"blur\", onBlur);\n      cm.on(\"change\", onChange);\n      cm.on(\"swapDoc\", onChange);\n      onChange(cm);\n    } else if (!val && prev) {\n      cm.off(\"blur\", onBlur);\n      cm.off(\"change\", onChange);\n      cm.off(\"swapDoc\", onChange);\n      clearPlaceholder(cm);\n      var wrapper = cm.getWrapperElement();\n      wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\");\n    }\n\n    if (val && !cm.hasFocus()) onBlur(cm);\n  });\n\n  function clearPlaceholder(cm) {\n    if (cm.state.placeholder) {\n      cm.state.placeholder.parentNode.removeChild(cm.state.placeholder);\n      cm.state.placeholder = null;\n    }\n  }\n  function setPlaceholder(cm) {\n    clearPlaceholder(cm);\n    var elt = cm.state.placeholder = document.createElement(\"pre\");\n    elt.style.cssText = \"height: 0; overflow: visible\";\n    elt.style.direction = cm.getOption(\"direction\");\n    elt.className = \"CodeMirror-placeholder\";\n    var placeHolder = cm.getOption(\"placeholder\")\n    if (typeof placeHolder == \"string\") placeHolder = document.createTextNode(placeHolder)\n    elt.appendChild(placeHolder)\n    cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);\n  }\n\n  function onBlur(cm) {\n    if (isEmpty(cm)) setPlaceholder(cm);\n  }\n  function onChange(cm) {\n    var wrapper = cm.getWrapperElement(), empty = isEmpty(cm);\n    wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\") + (empty ? \" CodeMirror-empty\" : \"\");\n\n    if (empty) setPlaceholder(cm);\n    else clearPlaceholder(cm);\n  }\n\n  function isEmpty(cm) {\n    return (cm.lineCount() === 1) && (cm.getLine(0) === \"\");\n  }\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/runmode/runmode',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.runMode = function(string, modespec, callback, options) {\n  var mode = CodeMirror.getMode(CodeMirror.defaults, modespec);\n  var ie = /MSIE \\d/.test(navigator.userAgent);\n  var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9);\n\n  if (callback.appendChild) {\n    var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize;\n    var node = callback, col = 0;\n    node.innerHTML = \"\";\n    callback = function(text, style) {\n      if (text == \"\\n\") {\n        // Emitting LF or CRLF on IE8 or earlier results in an incorrect display.\n        // Emitting a carriage return makes everything ok.\n        node.appendChild(document.createTextNode(ie_lt9 ? '\\r' : text));\n        col = 0;\n        return;\n      }\n      var content = \"\";\n      // replace tabs\n      for (var pos = 0;;) {\n        var idx = text.indexOf(\"\\t\", pos);\n        if (idx == -1) {\n          content += text.slice(pos);\n          col += text.length - pos;\n          break;\n        } else {\n          col += idx - pos;\n          content += text.slice(pos, idx);\n          var size = tabSize - col % tabSize;\n          col += size;\n          for (var i = 0; i < size; ++i) content += \" \";\n          pos = idx + 1;\n        }\n      }\n\n      if (style) {\n        var sp = node.appendChild(document.createElement(\"span\"));\n        sp.className = \"cm-\" + style.replace(/ +/g, \" cm-\");\n        sp.appendChild(document.createTextNode(content));\n      } else {\n        node.appendChild(document.createTextNode(content));\n      }\n    };\n  }\n\n  var lines = CodeMirror.splitLines(string), state = (options && options.state) || CodeMirror.startState(mode);\n  for (var i = 0, e = lines.length; i < e; ++i) {\n    if (i) callback(\"\\n\");\n    var stream = new CodeMirror.StringStream(lines[i]);\n    if (!stream.string && mode.blankLine) mode.blankLine(state);\n    while (!stream.eol()) {\n      var style = mode.token(stream, state);\n      callback(stream.current(), style, i, stream.start, state);\n      stream.start = stream.pos;\n    }\n  }\n};\n\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"))\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/search/searchcursor',[\"../../lib/codemirror\"], mod)\n  else // Plain browser env\n    mod(CodeMirror)\n})(function(CodeMirror) {\n  \"use strict\"\n  var Pos = CodeMirror.Pos\n\n  function regexpFlags(regexp) {\n    var flags = regexp.flags\n    return flags != null ? flags : (regexp.ignoreCase ? \"i\" : \"\")\n      + (regexp.global ? \"g\" : \"\")\n      + (regexp.multiline ? \"m\" : \"\")\n  }\n\n  function ensureFlags(regexp, flags) {\n    var current = regexpFlags(regexp), target = current\n    for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1)\n      target += flags.charAt(i)\n    return current == target ? regexp : new RegExp(regexp.source, target)\n  }\n\n  function maybeMultiline(regexp) {\n    return /\\\\s|\\\\n|\\n|\\\\W|\\\\D|\\[\\^/.test(regexp.source)\n  }\n\n  function searchRegexpForward(doc, regexp, start) {\n    regexp = ensureFlags(regexp, \"g\")\n    for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) {\n      regexp.lastIndex = ch\n      var string = doc.getLine(line), match = regexp.exec(string)\n      if (match)\n        return {from: Pos(line, match.index),\n                to: Pos(line, match.index + match[0].length),\n                match: match}\n    }\n  }\n\n  function searchRegexpForwardMultiline(doc, regexp, start) {\n    if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start)\n\n    regexp = ensureFlags(regexp, \"gm\")\n    var string, chunk = 1\n    for (var line = start.line, last = doc.lastLine(); line <= last;) {\n      // This grows the search buffer in exponentially-sized chunks\n      // between matches, so that nearby matches are fast and don't\n      // require concatenating the whole document (in case we're\n      // searching for something that has tons of matches), but at the\n      // same time, the amount of retries is limited.\n      for (var i = 0; i < chunk; i++) {\n        if (line > last) break\n        var curLine = doc.getLine(line++)\n        string = string == null ? curLine : string + \"\\n\" + curLine\n      }\n      chunk = chunk * 2\n      regexp.lastIndex = start.ch\n      var match = regexp.exec(string)\n      if (match) {\n        var before = string.slice(0, match.index).split(\"\\n\"), inside = match[0].split(\"\\n\")\n        var startLine = start.line + before.length - 1, startCh = before[before.length - 1].length\n        return {from: Pos(startLine, startCh),\n                to: Pos(startLine + inside.length - 1,\n                        inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),\n                match: match}\n      }\n    }\n  }\n\n  function lastMatchIn(string, regexp) {\n    var cutOff = 0, match\n    for (;;) {\n      regexp.lastIndex = cutOff\n      var newMatch = regexp.exec(string)\n      if (!newMatch) return match\n      match = newMatch\n      cutOff = match.index + (match[0].length || 1)\n      if (cutOff == string.length) return match\n    }\n  }\n\n  function searchRegexpBackward(doc, regexp, start) {\n    regexp = ensureFlags(regexp, \"g\")\n    for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) {\n      var string = doc.getLine(line)\n      if (ch > -1) string = string.slice(0, ch)\n      var match = lastMatchIn(string, regexp)\n      if (match)\n        return {from: Pos(line, match.index),\n                to: Pos(line, match.index + match[0].length),\n                match: match}\n    }\n  }\n\n  function searchRegexpBackwardMultiline(doc, regexp, start) {\n    regexp = ensureFlags(regexp, \"gm\")\n    var string, chunk = 1\n    for (var line = start.line, first = doc.firstLine(); line >= first;) {\n      for (var i = 0; i < chunk; i++) {\n        var curLine = doc.getLine(line--)\n        string = string == null ? curLine.slice(0, start.ch) : curLine + \"\\n\" + string\n      }\n      chunk *= 2\n\n      var match = lastMatchIn(string, regexp)\n      if (match) {\n        var before = string.slice(0, match.index).split(\"\\n\"), inside = match[0].split(\"\\n\")\n        var startLine = line + before.length, startCh = before[before.length - 1].length\n        return {from: Pos(startLine, startCh),\n                to: Pos(startLine + inside.length - 1,\n                        inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),\n                match: match}\n      }\n    }\n  }\n\n  var doFold, noFold\n  if (String.prototype.normalize) {\n    doFold = function(str) { return str.normalize(\"NFD\").toLowerCase() }\n    noFold = function(str) { return str.normalize(\"NFD\") }\n  } else {\n    doFold = function(str) { return str.toLowerCase() }\n    noFold = function(str) { return str }\n  }\n\n  // Maps a position in a case-folded line back to a position in the original line\n  // (compensating for codepoints increasing in number during folding)\n  function adjustPos(orig, folded, pos, foldFunc) {\n    if (orig.length == folded.length) return pos\n    for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) {\n      if (min == max) return min\n      var mid = (min + max) >> 1\n      var len = foldFunc(orig.slice(0, mid)).length\n      if (len == pos) return mid\n      else if (len > pos) max = mid\n      else min = mid + 1\n    }\n  }\n\n  function searchStringForward(doc, query, start, caseFold) {\n    // Empty string would match anything and never progress, so we\n    // define it to match nothing instead.\n    if (!query.length) return null\n    var fold = caseFold ? doFold : noFold\n    var lines = fold(query).split(/\\r|\\n\\r?/)\n\n    search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) {\n      var orig = doc.getLine(line).slice(ch), string = fold(orig)\n      if (lines.length == 1) {\n        var found = string.indexOf(lines[0])\n        if (found == -1) continue search\n        var start = adjustPos(orig, string, found, fold) + ch\n        return {from: Pos(line, adjustPos(orig, string, found, fold) + ch),\n                to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch)}\n      } else {\n        var cutFrom = string.length - lines[0].length\n        if (string.slice(cutFrom) != lines[0]) continue search\n        for (var i = 1; i < lines.length - 1; i++)\n          if (fold(doc.getLine(line + i)) != lines[i]) continue search\n        var end = doc.getLine(line + lines.length - 1), endString = fold(end), lastLine = lines[lines.length - 1]\n        if (endString.slice(0, lastLine.length) != lastLine) continue search\n        return {from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch),\n                to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold))}\n      }\n    }\n  }\n\n  function searchStringBackward(doc, query, start, caseFold) {\n    if (!query.length) return null\n    var fold = caseFold ? doFold : noFold\n    var lines = fold(query).split(/\\r|\\n\\r?/)\n\n    search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) {\n      var orig = doc.getLine(line)\n      if (ch > -1) orig = orig.slice(0, ch)\n      var string = fold(orig)\n      if (lines.length == 1) {\n        var found = string.lastIndexOf(lines[0])\n        if (found == -1) continue search\n        return {from: Pos(line, adjustPos(orig, string, found, fold)),\n                to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold))}\n      } else {\n        var lastLine = lines[lines.length - 1]\n        if (string.slice(0, lastLine.length) != lastLine) continue search\n        for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++)\n          if (fold(doc.getLine(start + i)) != lines[i]) continue search\n        var top = doc.getLine(line + 1 - lines.length), topString = fold(top)\n        if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search\n        return {from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)),\n                to: Pos(line, adjustPos(orig, string, lastLine.length, fold))}\n      }\n    }\n  }\n\n  function SearchCursor(doc, query, pos, options) {\n    this.atOccurrence = false\n    this.doc = doc\n    pos = pos ? doc.clipPos(pos) : Pos(0, 0)\n    this.pos = {from: pos, to: pos}\n\n    var caseFold\n    if (typeof options == \"object\") {\n      caseFold = options.caseFold\n    } else { // Backwards compat for when caseFold was the 4th argument\n      caseFold = options\n      options = null\n    }\n\n    if (typeof query == \"string\") {\n      if (caseFold == null) caseFold = false\n      this.matches = function(reverse, pos) {\n        return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold)\n      }\n    } else {\n      query = ensureFlags(query, \"gm\")\n      if (!options || options.multiline !== false)\n        this.matches = function(reverse, pos) {\n          return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos)\n        }\n      else\n        this.matches = function(reverse, pos) {\n          return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos)\n        }\n    }\n  }\n\n  SearchCursor.prototype = {\n    findNext: function() {return this.find(false)},\n    findPrevious: function() {return this.find(true)},\n\n    find: function(reverse) {\n      var result = this.matches(reverse, this.doc.clipPos(reverse ? this.pos.from : this.pos.to))\n\n      // Implements weird auto-growing behavior on null-matches for\n      // backwards-compatiblity with the vim code (unfortunately)\n      while (result && CodeMirror.cmpPos(result.from, result.to) == 0) {\n        if (reverse) {\n          if (result.from.ch) result.from = Pos(result.from.line, result.from.ch - 1)\n          else if (result.from.line == this.doc.firstLine()) result = null\n          else result = this.matches(reverse, this.doc.clipPos(Pos(result.from.line - 1)))\n        } else {\n          if (result.to.ch < this.doc.getLine(result.to.line).length) result.to = Pos(result.to.line, result.to.ch + 1)\n          else if (result.to.line == this.doc.lastLine()) result = null\n          else result = this.matches(reverse, Pos(result.to.line + 1, 0))\n        }\n      }\n\n      if (result) {\n        this.pos = result\n        this.atOccurrence = true\n        return this.pos.match || true\n      } else {\n        var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0)\n        this.pos = {from: end, to: end}\n        return this.atOccurrence = false\n      }\n    },\n\n    from: function() {if (this.atOccurrence) return this.pos.from},\n    to: function() {if (this.atOccurrence) return this.pos.to},\n\n    replace: function(newText, origin) {\n      if (!this.atOccurrence) return\n      var lines = CodeMirror.splitLines(newText)\n      this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin)\n      this.pos.to = Pos(this.pos.from.line + lines.length - 1,\n                        lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0))\n    }\n  }\n\n  CodeMirror.defineExtension(\"getSearchCursor\", function(query, pos, caseFold) {\n    return new SearchCursor(this.doc, query, pos, caseFold)\n  })\n  CodeMirror.defineDocExtension(\"getSearchCursor\", function(query, pos, caseFold) {\n    return new SearchCursor(this, query, pos, caseFold)\n  })\n\n  CodeMirror.defineExtension(\"selectMatches\", function(query, caseFold) {\n    var ranges = []\n    var cur = this.getSearchCursor(query, this.getCursor(\"from\"), caseFold)\n    while (cur.findNext()) {\n      if (CodeMirror.cmpPos(cur.to(), this.getCursor(\"to\")) > 0) break\n      ranges.push({anchor: cur.from(), head: cur.to()})\n    }\n    if (ranges.length)\n      this.setSelections(ranges, 0)\n  })\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Open simple dialogs on top of an editor. Relies on dialog.css.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/dialog/dialog',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  function dialogDiv(cm, template, bottom) {\n    var wrap = cm.getWrapperElement();\n    var dialog;\n    dialog = wrap.appendChild(document.createElement(\"div\"));\n    if (bottom)\n      dialog.className = \"CodeMirror-dialog CodeMirror-dialog-bottom\";\n    else\n      dialog.className = \"CodeMirror-dialog CodeMirror-dialog-top\";\n\n    if (typeof template == \"string\") {\n      dialog.innerHTML = template;\n    } else { // Assuming it's a detached DOM element.\n      dialog.appendChild(template);\n    }\n    CodeMirror.addClass(wrap, 'dialog-opened');\n    return dialog;\n  }\n\n  function closeNotification(cm, newVal) {\n    if (cm.state.currentNotificationClose)\n      cm.state.currentNotificationClose();\n    cm.state.currentNotificationClose = newVal;\n  }\n\n  CodeMirror.defineExtension(\"openDialog\", function(template, callback, options) {\n    if (!options) options = {};\n\n    closeNotification(this, null);\n\n    var dialog = dialogDiv(this, template, options.bottom);\n    var closed = false, me = this;\n    function close(newVal) {\n      if (typeof newVal == 'string') {\n        inp.value = newVal;\n      } else {\n        if (closed) return;\n        closed = true;\n        CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');\n        dialog.parentNode.removeChild(dialog);\n        me.focus();\n\n        if (options.onClose) options.onClose(dialog);\n      }\n    }\n\n    var inp = dialog.getElementsByTagName(\"input\")[0], button;\n    if (inp) {\n      inp.focus();\n\n      if (options.value) {\n        inp.value = options.value;\n        if (options.selectValueOnOpen !== false) {\n          inp.select();\n        }\n      }\n\n      if (options.onInput)\n        CodeMirror.on(inp, \"input\", function(e) { options.onInput(e, inp.value, close);});\n      if (options.onKeyUp)\n        CodeMirror.on(inp, \"keyup\", function(e) {options.onKeyUp(e, inp.value, close);});\n\n      CodeMirror.on(inp, \"keydown\", function(e) {\n        if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; }\n        if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) {\n          inp.blur();\n          CodeMirror.e_stop(e);\n          close();\n        }\n        if (e.keyCode == 13) callback(inp.value, e);\n      });\n\n      if (options.closeOnBlur !== false) CodeMirror.on(inp, \"blur\", close);\n    } else if (button = dialog.getElementsByTagName(\"button\")[0]) {\n      CodeMirror.on(button, \"click\", function() {\n        close();\n        me.focus();\n      });\n\n      if (options.closeOnBlur !== false) CodeMirror.on(button, \"blur\", close);\n\n      button.focus();\n    }\n    return close;\n  });\n\n  CodeMirror.defineExtension(\"openConfirm\", function(template, callbacks, options) {\n    closeNotification(this, null);\n    var dialog = dialogDiv(this, template, options && options.bottom);\n    var buttons = dialog.getElementsByTagName(\"button\");\n    var closed = false, me = this, blurring = 1;\n    function close() {\n      if (closed) return;\n      closed = true;\n      CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');\n      dialog.parentNode.removeChild(dialog);\n      me.focus();\n    }\n    buttons[0].focus();\n    for (var i = 0; i < buttons.length; ++i) {\n      var b = buttons[i];\n      (function(callback) {\n        CodeMirror.on(b, \"click\", function(e) {\n          CodeMirror.e_preventDefault(e);\n          close();\n          if (callback) callback(me);\n        });\n      })(callbacks[i]);\n      CodeMirror.on(b, \"blur\", function() {\n        --blurring;\n        setTimeout(function() { if (blurring <= 0) close(); }, 200);\n      });\n      CodeMirror.on(b, \"focus\", function() { ++blurring; });\n    }\n  });\n\n  /*\n   * openNotification\n   * Opens a notification, that can be closed with an optional timer\n   * (default 5000ms timer) and always closes on click.\n   *\n   * If a notification is opened while another is opened, it will close the\n   * currently opened one and open the new one immediately.\n   */\n  CodeMirror.defineExtension(\"openNotification\", function(template, options) {\n    closeNotification(this, close);\n    var dialog = dialogDiv(this, template, options && options.bottom);\n    var closed = false, doneTimer;\n    var duration = options && typeof options.duration !== \"undefined\" ? options.duration : 5000;\n\n    function close() {\n      if (closed) return;\n      closed = true;\n      clearTimeout(doneTimer);\n      CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');\n      dialog.parentNode.removeChild(dialog);\n    }\n\n    CodeMirror.on(dialog, 'click', function(e) {\n      CodeMirror.e_preventDefault(e);\n      close();\n    });\n\n    if (duration)\n      doneTimer = setTimeout(close, duration);\n\n    return close;\n  });\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Define search commands. Depends on dialog.js or another\n// implementation of the openDialog method.\n\n// Replace works a little oddly -- it will do the replace on the next\n// Ctrl-G (or whatever is bound to findNext) press. You prevent a\n// replace by making sure the match is no longer selected when hitting\n// Ctrl-G.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"./searchcursor\"), require(\"../dialog/dialog\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/search/search',[\"../../lib/codemirror\", \"./searchcursor\", \"../dialog/dialog\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  function searchOverlay(query, caseInsensitive) {\n    if (typeof query == \"string\")\n      query = new RegExp(query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\"), caseInsensitive ? \"gi\" : \"g\");\n    else if (!query.global)\n      query = new RegExp(query.source, query.ignoreCase ? \"gi\" : \"g\");\n\n    return {token: function(stream) {\n      query.lastIndex = stream.pos;\n      var match = query.exec(stream.string);\n      if (match && match.index == stream.pos) {\n        stream.pos += match[0].length || 1;\n        return \"searching\";\n      } else if (match) {\n        stream.pos = match.index;\n      } else {\n        stream.skipToEnd();\n      }\n    }};\n  }\n\n  function SearchState() {\n    this.posFrom = this.posTo = this.lastQuery = this.query = null;\n    this.overlay = null;\n  }\n\n  function getSearchState(cm) {\n    return cm.state.search || (cm.state.search = new SearchState());\n  }\n\n  function queryCaseInsensitive(query) {\n    return typeof query == \"string\" && query == query.toLowerCase();\n  }\n\n  function getSearchCursor(cm, query, pos) {\n    // Heuristic: if the query string is all lowercase, do a case insensitive search.\n    return cm.getSearchCursor(query, pos, {caseFold: queryCaseInsensitive(query), multiline: true});\n  }\n\n  function persistentDialog(cm, text, deflt, onEnter, onKeyDown) {\n    cm.openDialog(text, onEnter, {\n      value: deflt,\n      selectValueOnOpen: true,\n      closeOnEnter: false,\n      onClose: function() { clearSearch(cm); },\n      onKeyDown: onKeyDown\n    });\n  }\n\n  function dialog(cm, text, shortText, deflt, f) {\n    if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true});\n    else f(prompt(shortText, deflt));\n  }\n\n  function confirmDialog(cm, text, shortText, fs) {\n    if (cm.openConfirm) cm.openConfirm(text, fs);\n    else if (confirm(shortText)) fs[0]();\n  }\n\n  function parseString(string) {\n    return string.replace(/\\\\(.)/g, function(_, ch) {\n      if (ch == \"n\") return \"\\n\"\n      if (ch == \"r\") return \"\\r\"\n      return ch\n    })\n  }\n\n  function parseQuery(query) {\n    var isRE = query.match(/^\\/(.*)\\/([a-z]*)$/);\n    if (isRE) {\n      try { query = new RegExp(isRE[1], isRE[2].indexOf(\"i\") == -1 ? \"\" : \"i\"); }\n      catch(e) {} // Not a regular expression after all, do a string search\n    } else {\n      query = parseString(query)\n    }\n    if (typeof query == \"string\" ? query == \"\" : query.test(\"\"))\n      query = /x^/;\n    return query;\n  }\n\n  function startSearch(cm, state, query) {\n    state.queryText = query;\n    state.query = parseQuery(query);\n    cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query));\n    state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query));\n    cm.addOverlay(state.overlay);\n    if (cm.showMatchesOnScrollbar) {\n      if (state.annotate) { state.annotate.clear(); state.annotate = null; }\n      state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query));\n    }\n  }\n\n  function doSearch(cm, rev, persistent, immediate) {\n    var state = getSearchState(cm);\n    if (state.query) return findNext(cm, rev);\n    var q = cm.getSelection() || state.lastQuery;\n    if (q instanceof RegExp && q.source == \"x^\") q = null\n    if (persistent && cm.openDialog) {\n      var hiding = null\n      var searchNext = function(query, event) {\n        CodeMirror.e_stop(event);\n        if (!query) return;\n        if (query != state.queryText) {\n          startSearch(cm, state, query);\n          state.posFrom = state.posTo = cm.getCursor();\n        }\n        if (hiding) hiding.style.opacity = 1\n        findNext(cm, event.shiftKey, function(_, to) {\n          var dialog\n          if (to.line < 3 && document.querySelector &&\n              (dialog = cm.display.wrapper.querySelector(\".CodeMirror-dialog\")) &&\n              dialog.getBoundingClientRect().bottom - 4 > cm.cursorCoords(to, \"window\").top)\n            (hiding = dialog).style.opacity = .4\n        })\n      };\n      persistentDialog(cm, getQueryDialog(cm), q, searchNext, function(event, query) {\n        var keyName = CodeMirror.keyName(event)\n        var extra = cm.getOption('extraKeys'), cmd = (extra && extra[keyName]) || CodeMirror.keyMap[cm.getOption(\"keyMap\")][keyName]\n        if (cmd == \"findNext\" || cmd == \"findPrev\" ||\n          cmd == \"findPersistentNext\" || cmd == \"findPersistentPrev\") {\n          CodeMirror.e_stop(event);\n          startSearch(cm, getSearchState(cm), query);\n          cm.execCommand(cmd);\n        } else if (cmd == \"find\" || cmd == \"findPersistent\") {\n          CodeMirror.e_stop(event);\n          searchNext(query, event);\n        }\n      });\n      if (immediate && q) {\n        startSearch(cm, state, q);\n        findNext(cm, rev);\n      }\n    } else {\n      dialog(cm, getQueryDialog(cm), \"Search for:\", q, function(query) {\n        if (query && !state.query) cm.operation(function() {\n          startSearch(cm, state, query);\n          state.posFrom = state.posTo = cm.getCursor();\n          findNext(cm, rev);\n        });\n      });\n    }\n  }\n\n  function findNext(cm, rev, callback) {cm.operation(function() {\n    var state = getSearchState(cm);\n    var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo);\n    if (!cursor.find(rev)) {\n      cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0));\n      if (!cursor.find(rev)) return;\n    }\n    cm.setSelection(cursor.from(), cursor.to());\n    cm.scrollIntoView({from: cursor.from(), to: cursor.to()}, 20);\n    state.posFrom = cursor.from(); state.posTo = cursor.to();\n    if (callback) callback(cursor.from(), cursor.to())\n  });}\n\n  function clearSearch(cm) {cm.operation(function() {\n    var state = getSearchState(cm);\n    state.lastQuery = state.query;\n    if (!state.query) return;\n    state.query = state.queryText = null;\n    cm.removeOverlay(state.overlay);\n    if (state.annotate) { state.annotate.clear(); state.annotate = null; }\n  });}\n\n\n  function getQueryDialog(cm)  {\n    return '<span class=\"CodeMirror-search-label\">' + cm.phrase(\"Search:\") + '</span> <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">' + cm.phrase(\"(Use /re/ syntax for regexp search)\") + '</span>';\n  }\n  function getReplaceQueryDialog(cm) {\n    return ' <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">' + cm.phrase(\"(Use /re/ syntax for regexp search)\") + '</span>';\n  }\n  function getReplacementQueryDialog(cm) {\n    return '<span class=\"CodeMirror-search-label\">' + cm.phrase(\"With:\") + '</span> <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/>';\n  }\n  function getDoReplaceConfirm(cm) {\n    return '<span class=\"CodeMirror-search-label\">' + cm.phrase(\"Replace?\") + '</span> <button>' + cm.phrase(\"Yes\") + '</button> <button>' + cm.phrase(\"No\") + '</button> <button>' + cm.phrase(\"All\") + '</button> <button>' + cm.phrase(\"Stop\") + '</button> ';\n  }\n\n  function replaceAll(cm, query, text) {\n    cm.operation(function() {\n      for (var cursor = getSearchCursor(cm, query); cursor.findNext();) {\n        if (typeof query != \"string\") {\n          var match = cm.getRange(cursor.from(), cursor.to()).match(query);\n          cursor.replace(text.replace(/\\$(\\d)/g, function(_, i) {return match[i];}));\n        } else cursor.replace(text);\n      }\n    });\n  }\n\n  function replace(cm, all) {\n    if (cm.getOption(\"readOnly\")) return;\n    var query = cm.getSelection() || getSearchState(cm).lastQuery;\n    var dialogText = '<span class=\"CodeMirror-search-label\">' + (all ? cm.phrase(\"Replace all:\") : cm.phrase(\"Replace:\")) + '</span>';\n    dialog(cm, dialogText + getReplaceQueryDialog(cm), dialogText, query, function(query) {\n      if (!query) return;\n      query = parseQuery(query);\n      dialog(cm, getReplacementQueryDialog(cm), cm.phrase(\"Replace with:\"), \"\", function(text) {\n        text = parseString(text)\n        if (all) {\n          replaceAll(cm, query, text)\n        } else {\n          clearSearch(cm);\n          var cursor = getSearchCursor(cm, query, cm.getCursor(\"from\"));\n          var advance = function() {\n            var start = cursor.from(), match;\n            if (!(match = cursor.findNext())) {\n              cursor = getSearchCursor(cm, query);\n              if (!(match = cursor.findNext()) ||\n                  (start && cursor.from().line == start.line && cursor.from().ch == start.ch)) return;\n            }\n            cm.setSelection(cursor.from(), cursor.to());\n            cm.scrollIntoView({from: cursor.from(), to: cursor.to()});\n            confirmDialog(cm, getDoReplaceConfirm(cm), cm.phrase(\"Replace?\"),\n                          [function() {doReplace(match);}, advance,\n                           function() {replaceAll(cm, query, text)}]);\n          };\n          var doReplace = function(match) {\n            cursor.replace(typeof query == \"string\" ? text :\n                           text.replace(/\\$(\\d)/g, function(_, i) {return match[i];}));\n            advance();\n          };\n          advance();\n        }\n      });\n    });\n  }\n\n  CodeMirror.commands.find = function(cm) {clearSearch(cm); doSearch(cm);};\n  CodeMirror.commands.findPersistent = function(cm) {clearSearch(cm); doSearch(cm, false, true);};\n  CodeMirror.commands.findPersistentNext = function(cm) {doSearch(cm, false, true, true);};\n  CodeMirror.commands.findPersistentPrev = function(cm) {doSearch(cm, true, true, true);};\n  CodeMirror.commands.findNext = doSearch;\n  CodeMirror.commands.findPrev = function(cm) {doSearch(cm, true);};\n  CodeMirror.commands.clearSearch = clearSearch;\n  CodeMirror.commands.replace = replace;\n  CodeMirror.commands.replaceAll = function(cm) {replace(cm, true);};\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Defines jumpToLine command. Uses dialog.js if present.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../dialog/dialog\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/search/jump-to-line',[\"../../lib/codemirror\", \"../dialog/dialog\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  function dialog(cm, text, shortText, deflt, f) {\n    if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true});\n    else f(prompt(shortText, deflt));\n  }\n\n  function getJumpDialog(cm) {\n    return cm.phrase(\"Jump to line:\") + ' <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">' + cm.phrase(\"(Use line:column or scroll% syntax)\") + '</span>';\n  }\n\n  function interpretLine(cm, string) {\n    var num = Number(string)\n    if (/^[-+]/.test(string)) return cm.getCursor().line + num\n    else return num - 1\n  }\n\n  CodeMirror.commands.jumpToLine = function(cm) {\n    var cur = cm.getCursor();\n    dialog(cm, getJumpDialog(cm), cm.phrase(\"Jump to line:\"), (cur.line + 1) + \":\" + cur.ch, function(posStr) {\n      if (!posStr) return;\n\n      var match;\n      if (match = /^\\s*([\\+\\-]?\\d+)\\s*\\:\\s*(\\d+)\\s*$/.exec(posStr)) {\n        cm.setCursor(interpretLine(cm, match[1]), Number(match[2]))\n      } else if (match = /^\\s*([\\+\\-]?\\d+(\\.\\d+)?)\\%\\s*/.exec(posStr)) {\n        var line = Math.round(cm.lineCount() * Number(match[1]) / 100);\n        if (/^[-+]/.test(match[1])) line = cur.line + line + 1;\n        cm.setCursor(line - 1, cur.ch);\n      } else if (match = /^\\s*\\:?\\s*([\\+\\-]?\\d+)\\s*/.exec(posStr)) {\n        cm.setCursor(interpretLine(cm, match[1]), cur.ch);\n      }\n    });\n  };\n\n  CodeMirror.keyMap[\"default\"][\"Alt-G\"] = \"jumpToLine\";\n});\n\n","(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/hover/text-hover',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\n(function() {\n  \"use strict\";\n\n  var HOVER_CLASS = \" CodeMirror-hover\";\n\n  function showTooltip(e, content) {\n    var tt = document.createElement(\"div\");\n    tt.className = \"CodeMirror-hover-tooltip\";\n    if (typeof content == \"string\") {\n      content = document.createTextNode(content);\n    }\n    tt.appendChild(content);\n    document.body.appendChild(tt);\n\n    function position(e) {\n      if (!tt.parentNode)\n        return CodeMirror.off(document, \"mousemove\", position);\n      tt.style.top = Math.max(0, e.clientY - tt.offsetHeight - 5) + \"px\";\n      tt.style.left = (e.clientX + 5) + \"px\";\n    }\n    CodeMirror.on(document, \"mousemove\", position);\n    position(e);\n    if (tt.style.opacity != null)\n      tt.style.opacity = 1;\n    return tt;\n  }\n  function rm(elt) {\n    if (elt.parentNode)\n      elt.parentNode.removeChild(elt);\n  }\n  function hideTooltip(tt) {\n    if (!tt.parentNode)\n      return;\n    if (tt.style.opacity == null)\n      rm(tt);\n    tt.style.opacity = 0;\n    setTimeout(function() {\n      rm(tt);\n    }, 600);\n  }\n\n  function showTooltipFor(e, content, node, state, cm) {\n    var tooltip = showTooltip(e, content);\n    function hide() {\n      CodeMirror.off(node, \"mouseout\", hide);\n      CodeMirror.off(node, \"click\", hide);\n      node.className = node.className.replace(HOVER_CLASS, \"\");\n      if (tooltip) {\n        hideTooltip(tooltip);\n        tooltip = null;\n      }\n      cm.removeKeyMap(state.keyMap);\n    }\n    var poll = setInterval(function() {\n      if (tooltip)\n        for ( var n = node;; n = n.parentNode) {\n          if (n == document.body)\n            return;\n          if (!n) {\n            hide();\n            break;\n          }\n        }\n      if (!tooltip)\n        return clearInterval(poll);\n    }, 400);\n    CodeMirror.on(node, \"mouseout\", hide);\n    CodeMirror.on(node, \"click\", hide);\n    state.keyMap = {Esc: hide};\n    cm.addKeyMap(state.keyMap);\n  }\n\n  function TextHoverState(cm, options) {\n    this.options = options;\n    this.timeout = null;\n    if (options.delay) {\n      this.onMouseOver = function(e) {\n        onMouseOverWithDelay(cm, e);\n      };\n    } else {\n      this.onMouseOver = function(e) {\n        onMouseOver(cm, e);\n      };\n    }\n    this.keyMap = null;\n  }\n\n  function parseOptions(cm, options) {\n    if (options instanceof Function)\n      return {\n        getTextHover : options\n      };\n    if (!options || options === true)\n      options = {};\n    if (!options.getTextHover)\n      options.getTextHover = cm.getHelper(CodeMirror.Pos(0, 0), \"textHover\");\n    if (!options.getTextHover)\n      throw new Error(\n          \"Required option 'getTextHover' missing (text-hover addon)\");\n    return options;\n  }\n\n  function onMouseOverWithDelay(cm, e) {\n    var state = cm.state.textHover, delay = state.options.delay;\n    clearTimeout(state.timeout);\n    if (e.srcElement) {\n\t// hack for IE, because e.srcElement failed when it is used in the tiemout function\n\tvar newE = {srcElement: e.srcElement, clientX : e.clientX, clientY: e.clientY};\n\te = newE;\n    }\n    state.timeout = setTimeout(function() {onMouseOver(cm, e);}, delay);\n  }\n\n  function onMouseOver(cm, e) {\n    var node = e.target || e.srcElement;\n    if (node) {\n      var state = cm.state.textHover, data = getTokenAndPosAt(cm, e);\n      var content = state.options.getTextHover(cm, data, e);\n      if (content) {\n        node.className += HOVER_CLASS;\n        if (typeof content == 'function')\n\t      content(showTooltipFor, data, e, node, state, cm);\n        else\n          showTooltipFor(e, content, node, state, cm);\n      }\n    }\n  }\n\n  function optionHandler(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      CodeMirror.off(cm.getWrapperElement(), \"mouseover\",\n          cm.state.textHover.onMouseOver);\n      delete cm.state.textHover;\n    }\n\n    if (val) {\n      var state = cm.state.textHover = new TextHoverState(cm, parseOptions(cm,\n          val));\n      CodeMirror.on(cm.getWrapperElement(), \"mouseover\", state.onMouseOver);\n    }\n  }\n\n  // When the mouseover fires, the cursor might not actually be over\n  // the character itself yet. These pairs of x,y offsets are used to\n  // probe a few nearby points when no suitable marked range is found.\n  var nearby = [ 0, 0, 0, 5, 0, -5, 5, 0, -5, 0 ];\n\n  function getTokenAndPosAt(cm, e) {\n    var node = e.target || e.srcElement, text = node.innerText\n        || node.textContent;\n    for ( var i = 0; i < nearby.length; i += 2) {\n      var pos = cm.coordsChar({\n        left : e.clientX + nearby[i],\n        top : e.clientY + nearby[i + 1]\n      });\n      var token = cm.getTokenAt(pos);\n      if (token && token.string === text) {\n        return {\n          token : token,\n          pos : pos\n        };\n      }\n    }\n  }\n\n  CodeMirror.defineOption(\"textHover\", false, optionHandler); // deprecated\n\n})();\n\n});\n\n","define('cm/addon/hover/prolog-hover',[ \"../../lib/codemirror\",\n\t \"jquery\",\n\t \"laconic\"\n       ],\n       function(CodeMirror, $) {\n\"use strict\";\n\nvar pathTranslations = {};\n\nvar tokenHelp = {\n  \"goal_built_in\":  function(data, cm) {\n    if ( data ) {\n      return $.el.div(predName(data),\n\t\t      cm.tokenInfo(data));\n    } else {\n      return \"Built-in predicate\";\n    }\n  },\n\n  \"goal_global\":  function(data, cm) {\n    if ( data ) {\n      return $.el.div(predName(data),\n\t\t      cm.tokenInfo(data));\n    } else {\n      return \"Global predicate\";\n    }\n  },\n\n  \"goal_autoload\":  function(data, cm) {\n    if ( data ) {\n      return $.el.div(predName(data), \" (autoload from \",\n\t\t      fileName(data, cm), \"): \",\n\t\t      cm.tokenInfo(data));\n    } else {\n      return \"Autoloaded predicate\";\n    }\n  },\n\n  \"goal_imported\":  function(data, cm) {\n    if ( data ) {\n      return $.el.div(predName(data), \" (imported from \",\n\t\t      fileName(data, cm), \"): \",\n\t\t      cm.tokenInfo(data));\n    } else {\n      return \"Imported predicate\";\n    }\n  },\n\n  \"goal_recursion\":    \"Recursive call\",\n  \"goal_dynamic\":      \"Dynamic predicate\",\n  \"goal_undefined\":    \"Undefined predicate\",\n  \"goal_local\":        function(data, cm) {\n\t\t\t return localDef(\"predicate\",data,cm)\n\t\t       },\n  \"goal_constraint\":   function(data, cm) {\n\t\t\t return localDef(\"CHR constraint\",data,cm)\n\t\t       },\n  \"head_unreferenced\": \"Predicate is not called\",\n  \"unused_import\":     \"Imported predicate is not used\",\n  \"undefined_import\":  \"Imported predicate is not defined\",\n  \"head_constraint\":   \"CHR constraint\",\n\n  \"file\": function(data, cm) {\n    if ( data ) {\n      addFileTranslation(cm, data.text, data.path);\n      return $.el.div(\"File: \",\n\t\t      $.el.span({class:\"file-path\"},\n\t\t\t\tdata.path));\n    } else {\n      return \"File name\";\n    }\n  },\n\n  \"file_no_depends\": function(data, cm) {\n    if ( data ) {\n      addFileTranslation(cm, data.text, data.path);\n      return $.el.div(\"File: \",\n\t\t      $.el.span({class:\"file-path\"},\n\t\t\t\tdata.path),\n\t\t      $.el.div({class:\"hover-remark\"},\n\t\t\t       \"does not resolve any dependencies\")\n\t\t     );\n    } else {\n      return \"File name (does not resolve any dependencies)\";\n    }\n  },\n\n  \"error\": function(data, cm) {\n    if ( data ) {\n      if ( data.expected )\n\treturn $.el.div(\"error: \", $.el.strong(data.expected), \" expected\");\n    }\n\n    return \"error\";\n  },\n\n  \"singleton\": \"Variable appearing only once\",\n  \"codes\":     \"List of Unicode code points (integers)\",\n  \"chars\":     \"List of one-character atoms\",\n  \"string\":    \"Packed string (SWI7, use `text` for a list of codes)\",\n  \"qatom\":     \"Quoted atom\",\n  \"uatom\":     \"Uppercase atom due to var_prefix flag\",\n  \"tag\":       \"Tag of a SWI7 dict\",\n  \"ext_quant\": \"Existential quantification operator\",\n  \"instantiation_error\": \"No variable allowed here\",\n\n  \"string_terminal\": \"Terminal (DCG)\",\n  \"format_string\":   \"Format string\",\n  \"html\":\t     \"HTML element\",\n  \"html_attribute\":  \"HTML element attribute\",\n  \"html_call\":       \"Call HTML rule\",\n  \"html_raw\":        \"Include raw HTML\",\n\n  \"head\":       null,\n  \"control\":    null,\n  \"fullstop\":   null,\n  \"var\":        null,\n  \"int\":        null,\n  \"float\":      null,\n  \"number\":     null,\n  \"atom\":       null,\n  \"functor\":    null,\n  \"comment\":    null,\n  \"neck\":       null,\n  \"operator\":   null,\n  \"sep\":        null,\n  \"list_open\":  null,\n  \"list_close\": null,\n  \"dict_open\":  null,\n  \"dict_close\": null\n};\n\nfunction predName(data) {\n  return $.el.span({class:\"pred-name\"},\n\t\t   data.text+\"/\"+data.arity);\n}\n\nfunction addFileTranslation(cm, text, path) {\n  pathTranslations[path] = text;\n}\n\nfunction fileName(data, cm) {\n  var last;\n\n  if ( pathTranslations[data.file] )\n    return pathTranslations[data.file];\n\n  if ( (last=data.file.lastIndexOf(\"/\")) )\n    return data.file.substring(last+1);\n\n  return data.file;\n}\n\nfunction localDef(type, data, cm) {\n  if ( data && data.file ) {\n    return $.el.div(capitalizeFirstLetter(type)+\n\t\t    \" included from \",\n\t\t    $.el.span({class:\"file-path\"},\n\t\t\t      data.file));\n  } else if ( data && data.line ) {\n    return capitalizeFirstLetter(type) + \" defined in line \"+data.line;\n  } else {\n    return \"Locally defined \" + type;\n  }\n}\n\nfunction capitalizeFirstLetter(string) {\n    return string[0].toUpperCase() + string.slice(1);\n}\n\nCodeMirror.registerHelper(\"textHover\", \"prolog\", function(cm, data, node) {\n  if ( data ) {\n    var token = data.token;\n    var help  = tokenHelp[token.type];\n    var et;\n\n    if ( help !== undefined ) {\n      if ( typeof(help) === \"function\" ) {\n\tvar r = help(cm.getEnrichedToken(token), cm);\n\n\tif ( typeof(r) === \"string\" )\n\t  return $.el.div(r);\n\telse\n\t  return r;\n      } else if ( typeof(help) === \"string\" ) {\n\treturn $.el.div(help);\n      }\n    } else if ( (et=cm.getEnrichedToken(token)) ) {\n      if ( et.summary && et.info === \"ask\" )\n\treturn $.el.div(et.summary, cm.tokenInfo(et));\n      else if ( et.summary )\n\treturn $.el.div(et.summary);\n      else\n\treturn $.el.div(token.type);\n    } else {\n      return $.el.div(token.type);\n    }\n  }\n\n  return null;\n});\n\n});\n\n","(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/hint/show-context-info',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  var contextInfo = null;\n\n  CodeMirror.attachContextInfo = function(data) {\n    CodeMirror.on(data, 'select', function(completion, hints) {\n      hints = hints.parentNode;\n      var information = null;\n      if (completion.info) {\n        information = completion.info(completion);\n      }\n      if (information) {\n        var box = hints.getBoundingClientRect();\n        if (contextInfo == null) {\n          contextInfo = document.createElement('div');\n          contextInfo.className = 'CodeMirror-hints-contextInfo'\n          document.body.appendChild(contextInfo);\n        }\n        contextInfo.innerHTML = '';\n        contextInfo.style.top = hints.style.top;\n        contextInfo.style.left = box.right + 'px';\n        if(typeof information == \"string\") {\n          contextInfo.innerHTML = information;\n        } else {\n          contextInfo.appendChild(information);\n        }\n        contextInfo.style.display = 'block';\n      } else {\n        if (contextInfo != null) {\n          contextInfo.innerHTML = '';\n          contextInfo.style.display = 'none';\n        }\n      }\n    });\n\n    CodeMirror.on(data, 'close', function() {\n      if (contextInfo != null) {\n        contextInfo.parentNode.removeChild(contextInfo);\n      }\n      contextInfo = null;\n    });\n\n  }\n\n  CodeMirror.showContextInfo = function(getHints) {\n    return function(cm, showHints, options) {\n      if (!options)\n        options = showHints;\n      var data = getHints(cm, options);\n      CodeMirror.attachContextInfo(data);\n      return data;\n    }\n  }\n\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/keymap/emacs',[\"../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var Pos = CodeMirror.Pos;\n  function posEq(a, b) { return a.line == b.line && a.ch == b.ch; }\n\n  // Kill 'ring'\n\n  var killRing = [];\n  function addToRing(str) {\n    killRing.push(str);\n    if (killRing.length > 50) killRing.shift();\n  }\n  function growRingTop(str) {\n    if (!killRing.length) return addToRing(str);\n    killRing[killRing.length - 1] += str;\n  }\n  function getFromRing(n) { return killRing[killRing.length - (n ? Math.min(n, 1) : 1)] || \"\"; }\n  function popFromRing() { if (killRing.length > 1) killRing.pop(); return getFromRing(); }\n\n  var lastKill = null;\n\n  function kill(cm, from, to, ring, text) {\n    if (text == null) text = cm.getRange(from, to);\n\n    if (ring == \"grow\" && lastKill && lastKill.cm == cm && posEq(from, lastKill.pos) && cm.isClean(lastKill.gen))\n      growRingTop(text);\n    else if (ring !== false)\n      addToRing(text);\n    cm.replaceRange(\"\", from, to, \"+delete\");\n\n    if (ring == \"grow\") lastKill = {cm: cm, pos: from, gen: cm.changeGeneration()};\n    else lastKill = null;\n  }\n\n  // Boundaries of various units\n\n  function byChar(cm, pos, dir) {\n    return cm.findPosH(pos, dir, \"char\", true);\n  }\n\n  function byWord(cm, pos, dir) {\n    return cm.findPosH(pos, dir, \"word\", true);\n  }\n\n  function byLine(cm, pos, dir) {\n    return cm.findPosV(pos, dir, \"line\", cm.doc.sel.goalColumn);\n  }\n\n  function byPage(cm, pos, dir) {\n    return cm.findPosV(pos, dir, \"page\", cm.doc.sel.goalColumn);\n  }\n\n  function byParagraph(cm, pos, dir) {\n    var no = pos.line, line = cm.getLine(no);\n    var sawText = /\\S/.test(dir < 0 ? line.slice(0, pos.ch) : line.slice(pos.ch));\n    var fst = cm.firstLine(), lst = cm.lastLine();\n    for (;;) {\n      no += dir;\n      if (no < fst || no > lst)\n        return cm.clipPos(Pos(no - dir, dir < 0 ? 0 : null));\n      line = cm.getLine(no);\n      var hasText = /\\S/.test(line);\n      if (hasText) sawText = true;\n      else if (sawText) return Pos(no, 0);\n    }\n  }\n\n  function bySentence(cm, pos, dir) {\n    var line = pos.line, ch = pos.ch;\n    var text = cm.getLine(pos.line), sawWord = false;\n    for (;;) {\n      var next = text.charAt(ch + (dir < 0 ? -1 : 0));\n      if (!next) { // End/beginning of line reached\n        if (line == (dir < 0 ? cm.firstLine() : cm.lastLine())) return Pos(line, ch);\n        text = cm.getLine(line + dir);\n        if (!/\\S/.test(text)) return Pos(line, ch);\n        line += dir;\n        ch = dir < 0 ? text.length : 0;\n        continue;\n      }\n      if (sawWord && /[!?.]/.test(next)) return Pos(line, ch + (dir > 0 ? 1 : 0));\n      if (!sawWord) sawWord = /\\w/.test(next);\n      ch += dir;\n    }\n  }\n\n  function byExpr(cm, pos, dir) {\n    var wrap;\n    if (cm.findMatchingBracket && (wrap = cm.findMatchingBracket(pos, {strict: true}))\n        && wrap.match && (wrap.forward ? 1 : -1) == dir)\n      return dir > 0 ? Pos(wrap.to.line, wrap.to.ch + 1) : wrap.to;\n\n    for (var first = true;; first = false) {\n      var token = cm.getTokenAt(pos);\n      var after = Pos(pos.line, dir < 0 ? token.start : token.end);\n      if (first && dir > 0 && token.end == pos.ch || !/\\w/.test(token.string)) {\n        var newPos = cm.findPosH(after, dir, \"char\");\n        if (posEq(after, newPos)) return pos;\n        else pos = newPos;\n      } else {\n        return after;\n      }\n    }\n  }\n\n  // Prefixes (only crudely supported)\n\n  function getPrefix(cm, precise) {\n    var digits = cm.state.emacsPrefix;\n    if (!digits) return precise ? null : 1;\n    clearPrefix(cm);\n    return digits == \"-\" ? -1 : Number(digits);\n  }\n\n  function repeated(cmd) {\n    var f = typeof cmd == \"string\" ? function(cm) { cm.execCommand(cmd); } : cmd;\n    return function(cm) {\n      var prefix = getPrefix(cm);\n      f(cm);\n      for (var i = 1; i < prefix; ++i) f(cm);\n    };\n  }\n\n  function findEnd(cm, pos, by, dir) {\n    var prefix = getPrefix(cm);\n    if (prefix < 0) { dir = -dir; prefix = -prefix; }\n    for (var i = 0; i < prefix; ++i) {\n      var newPos = by(cm, pos, dir);\n      if (posEq(newPos, pos)) break;\n      pos = newPos;\n    }\n    return pos;\n  }\n\n  function move(by, dir) {\n    var f = function(cm) {\n      cm.extendSelection(findEnd(cm, cm.getCursor(), by, dir));\n    };\n    f.motion = true;\n    return f;\n  }\n\n  function killTo(cm, by, dir, ring) {\n    var selections = cm.listSelections(), cursor;\n    var i = selections.length;\n    while (i--) {\n      cursor = selections[i].head;\n      kill(cm, cursor, findEnd(cm, cursor, by, dir), ring);\n    }\n  }\n\n  function killRegion(cm, ring) {\n    if (cm.somethingSelected()) {\n      var selections = cm.listSelections(), selection;\n      var i = selections.length;\n      while (i--) {\n        selection = selections[i];\n        kill(cm, selection.anchor, selection.head, ring);\n      }\n      return true;\n    }\n  }\n\n  function addPrefix(cm, digit) {\n    if (cm.state.emacsPrefix) {\n      if (digit != \"-\") cm.state.emacsPrefix += digit;\n      return;\n    }\n    // Not active yet\n    cm.state.emacsPrefix = digit;\n    cm.on(\"keyHandled\", maybeClearPrefix);\n    cm.on(\"inputRead\", maybeDuplicateInput);\n  }\n\n  var prefixPreservingKeys = {\"Alt-G\": true, \"Ctrl-X\": true, \"Ctrl-Q\": true, \"Ctrl-U\": true};\n\n  function maybeClearPrefix(cm, arg) {\n    if (!cm.state.emacsPrefixMap && !prefixPreservingKeys.hasOwnProperty(arg))\n      clearPrefix(cm);\n  }\n\n  function clearPrefix(cm) {\n    cm.state.emacsPrefix = null;\n    cm.off(\"keyHandled\", maybeClearPrefix);\n    cm.off(\"inputRead\", maybeDuplicateInput);\n  }\n\n  function maybeDuplicateInput(cm, event) {\n    var dup = getPrefix(cm);\n    if (dup > 1 && event.origin == \"+input\") {\n      var one = event.text.join(\"\\n\"), txt = \"\";\n      for (var i = 1; i < dup; ++i) txt += one;\n      cm.replaceSelection(txt);\n    }\n  }\n\n  function addPrefixMap(cm) {\n    cm.state.emacsPrefixMap = true;\n    cm.addKeyMap(prefixMap);\n    cm.on(\"keyHandled\", maybeRemovePrefixMap);\n    cm.on(\"inputRead\", maybeRemovePrefixMap);\n  }\n\n  function maybeRemovePrefixMap(cm, arg) {\n    if (typeof arg == \"string\" && (/^\\d$/.test(arg) || arg == \"Ctrl-U\")) return;\n    cm.removeKeyMap(prefixMap);\n    cm.state.emacsPrefixMap = false;\n    cm.off(\"keyHandled\", maybeRemovePrefixMap);\n    cm.off(\"inputRead\", maybeRemovePrefixMap);\n  }\n\n  // Utilities\n\n  function setMark(cm) {\n    cm.setCursor(cm.getCursor());\n    cm.setExtending(!cm.getExtending());\n    cm.on(\"change\", function() { cm.setExtending(false); });\n  }\n\n  function clearMark(cm) {\n    cm.setExtending(false);\n    cm.setCursor(cm.getCursor());\n  }\n\n  function getInput(cm, msg, f) {\n    if (cm.openDialog)\n      cm.openDialog(msg + \": <input type=\\\"text\\\" style=\\\"width: 10em\\\"/>\", f, {bottom: true});\n    else\n      f(prompt(msg, \"\"));\n  }\n\n  function operateOnWord(cm, op) {\n    var start = cm.getCursor(), end = cm.findPosH(start, 1, \"word\");\n    cm.replaceRange(op(cm.getRange(start, end)), start, end);\n    cm.setCursor(end);\n  }\n\n  function toEnclosingExpr(cm) {\n    var pos = cm.getCursor(), line = pos.line, ch = pos.ch;\n    var stack = [];\n    while (line >= cm.firstLine()) {\n      var text = cm.getLine(line);\n      for (var i = ch == null ? text.length : ch; i > 0;) {\n        var ch = text.charAt(--i);\n        if (ch == \")\")\n          stack.push(\"(\");\n        else if (ch == \"]\")\n          stack.push(\"[\");\n        else if (ch == \"}\")\n          stack.push(\"{\");\n        else if (/[\\(\\{\\[]/.test(ch) && (!stack.length || stack.pop() != ch))\n          return cm.extendSelection(Pos(line, i));\n      }\n      --line; ch = null;\n    }\n  }\n\n  function quit(cm) {\n    cm.execCommand(\"clearSearch\");\n    clearMark(cm);\n  }\n\n  CodeMirror.emacs = {kill: kill, killRegion: killRegion, repeated: repeated};\n\n  // Actual keymap\n\n  var keyMap = CodeMirror.keyMap.emacs = CodeMirror.normalizeKeyMap({\n    \"Ctrl-W\": function(cm) {kill(cm, cm.getCursor(\"start\"), cm.getCursor(\"end\"), true);},\n    \"Ctrl-K\": repeated(function(cm) {\n      var start = cm.getCursor(), end = cm.clipPos(Pos(start.line));\n      var text = cm.getRange(start, end);\n      if (!/\\S/.test(text)) {\n        text += \"\\n\";\n        end = Pos(start.line + 1, 0);\n      }\n      kill(cm, start, end, \"grow\", text);\n    }),\n    \"Alt-W\": function(cm) {\n      addToRing(cm.getSelection());\n      clearMark(cm);\n    },\n    \"Ctrl-Y\": function(cm) {\n      var start = cm.getCursor();\n      cm.replaceRange(getFromRing(getPrefix(cm)), start, start, \"paste\");\n      cm.setSelection(start, cm.getCursor());\n    },\n    \"Alt-Y\": function(cm) {cm.replaceSelection(popFromRing(), \"around\", \"paste\");},\n\n    \"Ctrl-Space\": setMark, \"Ctrl-Shift-2\": setMark,\n\n    \"Ctrl-F\": move(byChar, 1), \"Ctrl-B\": move(byChar, -1),\n    \"Right\": move(byChar, 1), \"Left\": move(byChar, -1),\n    \"Ctrl-D\": function(cm) { killTo(cm, byChar, 1, false); },\n    \"Delete\": function(cm) { killRegion(cm, false) || killTo(cm, byChar, 1, false); },\n    \"Ctrl-H\": function(cm) { killTo(cm, byChar, -1, false); },\n    \"Backspace\": function(cm) { killRegion(cm, false) || killTo(cm, byChar, -1, false); },\n\n    \"Alt-F\": move(byWord, 1), \"Alt-B\": move(byWord, -1),\n    \"Alt-Right\": move(byWord, 1), \"Alt-Left\": move(byWord, -1),\n    \"Alt-D\": function(cm) { killTo(cm, byWord, 1, \"grow\"); },\n    \"Alt-Backspace\": function(cm) { killTo(cm, byWord, -1, \"grow\"); },\n\n    \"Ctrl-N\": move(byLine, 1), \"Ctrl-P\": move(byLine, -1),\n    \"Down\": move(byLine, 1), \"Up\": move(byLine, -1),\n    \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStart\",\n\n    \"Alt-V\": move(byPage, -1), \"Ctrl-V\": move(byPage, 1),\n    \"PageUp\": move(byPage, -1), \"PageDown\": move(byPage, 1),\n\n    \"Ctrl-Up\": move(byParagraph, -1), \"Ctrl-Down\": move(byParagraph, 1),\n\n    \"Alt-A\": move(bySentence, -1), \"Alt-E\": move(bySentence, 1),\n    \"Alt-K\": function(cm) { killTo(cm, bySentence, 1, \"grow\"); },\n\n    \"Ctrl-Alt-K\": function(cm) { killTo(cm, byExpr, 1, \"grow\"); },\n    \"Ctrl-Alt-Backspace\": function(cm) { killTo(cm, byExpr, -1, \"grow\"); },\n    \"Ctrl-Alt-F\": move(byExpr, 1), \"Ctrl-Alt-B\": move(byExpr, -1, \"grow\"),\n\n    \"Shift-Ctrl-Alt-2\": function(cm) {\n      var cursor = cm.getCursor();\n      cm.setSelection(findEnd(cm, cursor, byExpr, 1), cursor);\n    },\n    \"Ctrl-Alt-T\": function(cm) {\n      var leftStart = byExpr(cm, cm.getCursor(), -1), leftEnd = byExpr(cm, leftStart, 1);\n      var rightEnd = byExpr(cm, leftEnd, 1), rightStart = byExpr(cm, rightEnd, -1);\n      cm.replaceRange(cm.getRange(rightStart, rightEnd) + cm.getRange(leftEnd, rightStart) +\n                      cm.getRange(leftStart, leftEnd), leftStart, rightEnd);\n    },\n    \"Ctrl-Alt-U\": repeated(toEnclosingExpr),\n\n    \"Alt-Space\": function(cm) {\n      var pos = cm.getCursor(), from = pos.ch, to = pos.ch, text = cm.getLine(pos.line);\n      while (from && /\\s/.test(text.charAt(from - 1))) --from;\n      while (to < text.length && /\\s/.test(text.charAt(to))) ++to;\n      cm.replaceRange(\" \", Pos(pos.line, from), Pos(pos.line, to));\n    },\n    \"Ctrl-O\": repeated(function(cm) { cm.replaceSelection(\"\\n\", \"start\"); }),\n    \"Ctrl-T\": repeated(function(cm) {\n      cm.execCommand(\"transposeChars\");\n    }),\n\n    \"Alt-C\": repeated(function(cm) {\n      operateOnWord(cm, function(w) {\n        var letter = w.search(/\\w/);\n        if (letter == -1) return w;\n        return w.slice(0, letter) + w.charAt(letter).toUpperCase() + w.slice(letter + 1).toLowerCase();\n      });\n    }),\n    \"Alt-U\": repeated(function(cm) {\n      operateOnWord(cm, function(w) { return w.toUpperCase(); });\n    }),\n    \"Alt-L\": repeated(function(cm) {\n      operateOnWord(cm, function(w) { return w.toLowerCase(); });\n    }),\n\n    \"Alt-;\": \"toggleComment\",\n\n    \"Ctrl-/\": repeated(\"undo\"), \"Shift-Ctrl--\": repeated(\"undo\"),\n    \"Ctrl-Z\": repeated(\"undo\"), \"Cmd-Z\": repeated(\"undo\"),\n    \"Shift-Alt-,\": \"goDocStart\", \"Shift-Alt-.\": \"goDocEnd\",\n    \"Ctrl-S\": \"findPersistentNext\", \"Ctrl-R\": \"findPersistentPrev\", \"Ctrl-G\": quit, \"Shift-Alt-5\": \"replace\",\n    \"Alt-/\": \"autocomplete\",\n    \"Enter\": \"newlineAndIndent\",\n    \"Ctrl-J\": repeated(function(cm) { cm.replaceSelection(\"\\n\", \"end\"); }),\n    \"Tab\": \"indentAuto\",\n\n    \"Alt-G G\": function(cm) {\n      var prefix = getPrefix(cm, true);\n      if (prefix != null && prefix > 0) return cm.setCursor(prefix - 1);\n\n      getInput(cm, \"Goto line\", function(str) {\n        var num;\n        if (str && !isNaN(num = Number(str)) && num == (num|0) && num > 0)\n          cm.setCursor(num - 1);\n      });\n    },\n\n    \"Ctrl-X Tab\": function(cm) {\n      cm.indentSelection(getPrefix(cm, true) || cm.getOption(\"indentUnit\"));\n    },\n    \"Ctrl-X Ctrl-X\": function(cm) {\n      cm.setSelection(cm.getCursor(\"head\"), cm.getCursor(\"anchor\"));\n    },\n    \"Ctrl-X Ctrl-S\": \"save\",\n    \"Ctrl-X Ctrl-W\": \"save\",\n    \"Ctrl-X S\": \"saveAll\",\n    \"Ctrl-X F\": \"open\",\n    \"Ctrl-X U\": repeated(\"undo\"),\n    \"Ctrl-X K\": \"close\",\n    \"Ctrl-X Delete\": function(cm) { kill(cm, cm.getCursor(), bySentence(cm, cm.getCursor(), 1), \"grow\"); },\n    \"Ctrl-X H\": \"selectAll\",\n\n    \"Ctrl-Q Tab\": repeated(\"insertTab\"),\n    \"Ctrl-U\": addPrefixMap\n  });\n\n  var prefixMap = {\"Ctrl-G\": clearPrefix};\n  function regPrefix(d) {\n    prefixMap[d] = function(cm) { addPrefix(cm, d); };\n    keyMap[\"Ctrl-\" + d] = function(cm) { addPrefix(cm, d); };\n    prefixPreservingKeys[\"Ctrl-\" + d] = true;\n  }\n  for (var i = 0; i < 10; ++i) regPrefix(String(i));\n  regPrefix(\"-\");\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2017, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Prolog editor plugin based on [CodeMirror](http://codemirror.net)\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n * @requires codemirror\n */\n\ndefine('editor',[ \"cm/lib/codemirror\",\n\t \"config\",\n\t \"preferences\",\n\t \"form\",\n\t \"cm/mode/prolog/prolog-template-hint\",\n\t \"modal\",\n\t \"tabbed\",\n\t \"prolog\",\n\n\t \"storage\",\n\n\t \"cm/mode/prolog/prolog\",\n\t \"cm/mode/prolog/prolog_keys\",\n\t \"cm/mode/prolog/prolog_query\",\n\t \"cm/mode/prolog/prolog_server\",\n\n\t \"cm/mode/markdown/markdown\",\n\n\t \"cm/addon/edit/matchbrackets\",\n\t \"cm/addon/comment/continuecomment\",\n\t \"cm/addon/comment/comment\",\n\t \"cm/addon/hint/show-hint\",\n\t \"cm/addon/hint/anyword-hint\",\n\t \"cm/addon/display/placeholder\",\n\t \"cm/addon/runmode/runmode\",\n\t \"cm/addon/search/search\",\n\t \"cm/addon/search/searchcursor\",\n\t \"cm/addon/search/jump-to-line\",\n\t \"cm/addon/dialog/dialog\",\n\n\t \"cm/addon/hover/text-hover\",\n\t \"cm/addon/hover/prolog-hover\",\n\n\t \"cm/addon/hint/templates-hint\",\n\t \"cm/addon/hint/show-context-info\",\n\n         \"jquery\", \"laconic\",\n\n\t \"cm/keymap/emacs\",\n       ],\n       function(CodeMirror, config, preferences, form, templateHint,\n\t\tmodal, tabbed, prolog) {\n\n(function($) {\n  var pluginName = 'prologEditor';\n\n  var modeDefaults = {\n    prolog: {\n      mode: \"prolog\",\n      role: \"source\",\n      placeholder: \"Your Prolog rules and facts go here ...\",\n      lineNumbers: true,\n      autoCurrent: true,\n      save: false,\n      theme: \"prolog\",\n      matchBrackets: true,\n      textHover: true,\n      prologKeys: true,\n      extraKeys: {\n\t\"Ctrl-Space\": \"autocomplete\",\n\t\"Alt-/\": \"autocomplete\",\n      },\n      hintOptions: {\n      hint: templateHint.getHints,\n      completeSingle: false\n      }\n    },\n\n    markdown: {\n      mode: \"markdown\",\n      placeholder: \"Your markdown block goes here ...\",\n      lineWrapping: true,\n      save: false\n    }\n  };\n\n  var roleDefaults = {\n    query: {\n      mode: \"prolog\",\n      role: \"query\",\n      placeholder: \"Your query goes here ...\",\n      lineNumbers: false,\n      lineWrapping: true,\n      save: false\n    }\n  };\n\n  var lastEditor;\n\n  /** @lends $.fn.prologEditor */\n  var methods = {\n    /**\n     * Initialize a Prolog editor.\n     * @param {Object} [options]\n     * @param {String} [options.role=\"source\"] determines the role of\n     * the editor. It is one of `source` or `query`.\n     * @param {String} [options.placeholder=\"Your Prolog program goes here ...\"]\n     * sets the placeholder for the editor.\n     * @param {Boolean} [options.lineNumbers=true] defines whether or\n     * not a left-gutter with line numbers is displayed.\n     * @param {Boolean} [options.save=false] defines whether the\n     * editor responds to storage events.\n     * @param {String} [options.mode=\"prolog\"] defines the mode used by\n     * CodeMirror.\n     * @param {String} [options.theme=\"prolog\"] defines the CSS used for\n     * highlighting.\n     * @param {Boolean} [options.matchBrackets=true] defines whether the\n     * matching bracket is highlighted.\n     * @param {Boolean} [options.prologKeys=true] defines whether \"(\",\n     * \">\" and \";\" act as active keys to support if-then-else layout.\n     * @param {Object} [options.extraKeys] specifies additional key\n     * bindings.  Default is to bind \"Ctrl-Space\" and \"Alt-/\" to\n     * \"autocomplete\".\n     *\n     */\n    _init: function(opts) {\n\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar storage = {};\t\t/* storage meta-data */\n\tvar data = {};\t\t\t/* our data */\n\tvar ta;\t\t\t\t/* textarea */\n\n\topts      = opts||{};\n\topts.mode = opts.mode||\"prolog\";\n\n\tvar options = $.extend({}, modeDefaults[opts.mode]);\n\tif ( opts.role && roleDefaults[opts.role] )\n\t  options = $.extend(options, roleDefaults[opts.role]);\n\toptions = $.extend(options, opts);\n\n\tif ( preferences.getVal(\"emacs-keybinding\") )\n\t  options.keyMap = \"emacs\";\n\n\tif ( options.mode == \"prolog\" ) {\n\t  data.role = options.role;\n\t  if ( options.getSource )\n\t    data.getSource = options.getSource;\n\n\t  if ( config.http.locations.cm_highlight ) {\n\t    options.prologHighlightServer =\n\t    { url:  config.http.locations.cm_highlight,\n\t      role: options.role,\n\t      enabled: preferences.getVal(\"semantic-highlighting\")\n\t    };\n\t    if ( options.sourceID )\n\t      options.prologHighlightServer.sourceID = options.sourceID;\n\t    options.extraKeys[\"Ctrl-R\"] = \"refreshHighlight\";\n\t  }\n\n\t  if ( options.role == \"source\" ) {\n\t    options.continueComments = \"Enter\";\n\t    options.gutters = [\"Prolog-breakpoints\"]\n\t  }\n\n\t  /*\n\t   * Long click detection and handling.\n\t   */\n\t  data.long_click = {};\n\t  function moveLongClick(ev) {\n\t    var lc = data.long_click;\n\t    var dx = ev.clientX - lc.clientX;\n\t    var dy = ev.clientY - lc.clientY;\n\t    if ( Math.sqrt(dx*dx+dy*dy) > 5 )\n\t      cancelLongClick();\n\t  }\n\t  function cancelLongClick() {\n\t    elem.off(\"mousemove\", moveLongClick);\n\t    var lc = data.long_click;\n\t    if ( lc.timeout ) {\n\t      clearTimeout(lc.timeout);\n\t      lc.target  = undefined;\n\t      lc.timeout = undefined;\n\t    }\n\t  }\n\n\t  elem.on(\"mousedown\", \".CodeMirror-code\", function(ev) {\n\t    var lc = data.long_click;\n\n\t    lc.clientX = ev.clientX;\n\t    lc.clientY = ev.clientY;\n\t    elem.on(\"mousemove\", moveLongClick);\n\t    data.long_click.timeout = setTimeout(function() {\n\t      cancelLongClick();\n\t      elem.prologEditor('contextAction');\n\t    }, 500);\n\t  });\n\t  elem.on(\"mouseup\", function(ev) {\n\t    cancelLongClick();\n\t  });\n\t}\n\n\t/*\n\t * Create CodeMirror\n\t */\n\tif ( (ta=elem.children(\"textarea\")[0]) ) {\n\t  function copyData(name) {\n\t    var value = $(ta).data(name);\n\t    if ( value ) {\n\t      storage[name] = value;\n\t    }\n\t  }\n\n\t  copyData(\"file\");\n\t  copyData(\"url\");\n\t  copyData(\"title\");\n\t  copyData(\"meta\");\n\t  copyData(\"st_type\");\n\t  copyData(\"chats\");\n\n\t  data.cm = CodeMirror.fromTextArea(ta, options);\n\t} else {\n\t  if ( !options.value )\n\t    options.value = elem.text();\n\t  data.cm = CodeMirror(elem[0], options);\n\t}\n\n\telem.data(pluginName, data);\n\telem.prologEditor('loadMode', options.mode);\n\n\telem.addClass(\"swish-event-receiver\");\n\telem.addClass(\"prolog-editor\");\n\telem.on(\"preference\", function(ev, pref) {\n\t  elem.prologEditor('preference', pref);\n\t});\n\telem.on(\"print\", function() {\n\t  if ( data.role != \"query\" )\n\t    elem.prologEditor('print');\n\t});\n\telem.on(\"clearMessages\", function(ev) {\n\t  elem.prologEditor('clearMessages');\n\t});\n\telem.on(\"edit-command\", function(ev, command) {\n\t  elem.prologEditor('execCommand', command);\n\t});\n\tdata.cm.on(\"blur\", function(ev) {\n\t  elem.prologEditor('execCommand', 'prepare');\n\t});\n\n\tif ( options.save ) {\n\t  storage.typeName = options.typeName||\"program\";\n\t  elem.prologEditor('setupStorage', storage);\n\t}\n\n\t// Refresh all editors when opening a tab as they are often\n\t// not shown correctly when created in the background or after\n\t// the window was resized while these editors were hidden.\n\telem.on(\"activate-tab\", function(ev) {\n\t  data.cm.refresh();\n\t});\n\n\tif ( options.mode == \"prolog\" && data.role == \"source\" ) {\n\t  elem.on(\"activate-tab\", function(ev) {\n\t    if ( options.autoCurrent )\n\t      elem.prologEditor('makeCurrent');\n\t  });\n\n\t  elem.on(\"source-error\", function(ev, error) {\n\t    elem.prologEditor('highlightError', error);\n\t  });\n\t  elem.on(\"pengine-died\", function(ev, id) {\n\t    if ( data.pengines ) {\n\t      var i = data.pengines.indexOf(id);\n\t      if ( i >= 0 )\n\t\tdata.pengines.splice(i, 1);\n\t    }\n\t    if ( data.traceMark && data.traceMark.pengine == id ) {\n\t      data.traceMark.clear();\n\t      data.traceMark = null;\n\t    }\n\t  });\n\t  if ( options.save ) {\t\t/* not for notebook cells */\n\t    elem.on('addExample', function(ev, query) {\n\t      elem.prologEditor('addExample', query);\n\t    });\n\t  }\n\t  data.cm.on(\"gutterClick\", function(cm, n) {\n\t    var info = cm.lineInfo(n);\n\n\t    function makeMarker() {\n\t      return $(\"<span class=\\\"breakpoint-marker\\\">&#9679;</span>\")[0];\n\t    }\n\n\t    if ( info.gutterMarkers )\n\t      cm.setGutterMarker(n, \"Prolog-breakpoints\", null);\n\t    else\n\t      cm.setGutterMarker(n, \"Prolog-breakpoints\", makeMarker());\n\t  });\n\t} /* end if prolog source */\n\n\tdata.cm.on(\"change\", function(cm, change) {\n\t  var clean;\n\n\t  if ( change.origin == \"setValue\" ) {\n\t    clean = true;\n\t  } else {\n\t    var store = elem.data(\"storage\");\n\t    var gen = store ? store.cleanGeneration : data.cleanGeneration;\n\n\t    clean = data.cm.isClean(gen);\n\t  }\n\n\t  elem.prologEditor('markClean', clean);\n\t});\n      });\n    },\n\n    /**\n     * @example // Get the CodeMirror instance\n     * $(element).prologEditor('getOption', 'cm');\n     * @param {String} opt Name of option to fetch.\n     * @return {*}\n     */\n\n    getOption: function(opt) {\n      return this.data(pluginName)[opt];\n    },\n\n    /**\n     * @example // Set the keybinding for the editor\n     * $(element).prologEditor('setKeybinding', 'emacs') set\n     * keybinding schema emacs.\n     * @param {String} schema Name of the keybinding\n     * return {*}\n     */\n    setKeybinding: function(schema) {\n      schema = schema || \"default\";\n      this.data(pluginName).cm.options.keyMap = schema;\n    },\n\n    /**\n     * Switch the editor to the requested mode, possibly by dynamically\n     * loading the mode.  It seems that if we use RequireJS, we should\n     * also use this for loading modes dynamically.\n     */\n    loadMode: function(mode) {\n      var data = this.data(pluginName);\n\n      if ( !CodeMirror.modes[mode] ) {\n\trequire([\"cm/mode/\"+mode+\"/\"+mode],\n\t\t  function() {\n\t\t    data.cm.setOption(\"mode\", mode);\n\t\t  });\n      } else if ( mode != data.mode ) {\n\tdata.cm.setOption(\"mode\", mode);\n      }\n\n      return this;\n    },\n\n    /**\n     * True if this source needs to be sent to the pengine.  This is\n     * the case of the source is loaded.  We should also exclude module\n     * files.  How do we detect a module file?  Detecting the module\n     * header without support from Prolog is rather hard: count the\n     * arity and ignore preceeding comments, encoding and conditional\n     * compilation directives.\n     */\n    isPengineSource: function() {\n      var data = $(this).data(pluginName);\n      if ( data && data.role == \"source\" ) {\n\tvar storageData = $(this).data('storage');\n\n\tif ( storageData && storageData.meta ) {\n\t  if ( storageData.meta.loaded ||\n\t       storageData.meta.module )\n\t    return false;\n\t}\n      }\n\n      return this;\n    },\n\n    /**\n     * Get the defined breakpoints.\n     * @param {String} pengineID is the pengine asking for the\n     * breakpoints.\n     * @returns {Array.Object} an array holding one object per source\n     * with breakpoints.  The object contains `file` and `breakpoints`,\n     * where the latter is an array of integers.\n     */\n    getBreakpoints: function(pengineID) {\n      var result = [];\n\n      this.each(function() {\n\tvar data = $(this).data(pluginName);\n\tvar breakpoints = [];\n\tvar offset = 0;\n\tvar cm = data.cm;\n\tvar line = cm.firstLine();\n\tvar last = cm.lastLine();\n\n\tfor( ; line < last; line++ ) {\n\t  var info = cm.lineInfo(line);\n\t  if ( info.gutterMarkers )\n\t    breakpoints.push(offset+line+1);\n\t}\n\n\tif ( breakpoints.length > 0 ) {\n\t  var file;\n\n\t  if ( data.pengines && data.pengines.indexOf(pengineID) >= 0 ) {\n\t    file = \"pengine://\"+pengineID+\"/src\";\n\t  } else {\n\t    var store = $(this).data(\"storage\");\n\t    if ( store )\n\t      file = \"swish://\"+store.file;\n\t  }\n\n\t  if ( file )\n\t    result.push({ file: file,\n\t\t          breakpoints: breakpoints\n\t\t        });\n\t}\n      });\n\n      return result;\n    },\n\n    /**\n     * Get the source text from a set of editors.  Each source is\n     * preceeded by a line :- '#file'(DocID, Line).\n     *\n     * @param {String} [role] Only return source for editors that\n     * match the given role.\n     * @param {Boolean} [direct] If `true`, do not try to indirect\n     * over the `data.getSource` function.\n     * @returns {String} current contents of the editor.  If\n     * the jQuery object holds multiple editors, we return the\n     * joined content of the editors.\n     */\n    getSource: function(role, direct) {\n      var src = [];\n\n      this.each(function() {\n\tif ( $(this).prologEditor('isPengineSource') ) {\n\t  var data = $(this).data(pluginName);\n\n\t  if ( data ) {\n\t    if ( !role || (role == data.role) ) {\n\t      var mysrc;\n//TBD\t      var docid = $(this).prologEditor('docid');\n\n\t      if ( typeof(data.getSource) == \"function\" && !direct ) {\n\t\tmysrc = data.getSource();\n\t      } else {\n\t\tmysrc = data.cm.getValue();\n\t      }\n//TBD\t      if ( role == \"source\" )\n//TBD\t\tsrc.push(\":- '#file'(\"+Pengine.stringify(docid)+\",1).\");\n\t      src.push(mysrc);\n\t    }\n\t  }\n\t}\n      });\n\n      return src.join(\"\\n\\n\");\n    },\n\n    /**\n     * @returns {Object} holding extended source information\n     */\n    getSourceEx: function() {\n      var obj = { value: this.data(pluginName).cm.getValue()\n\t\t};\n      var bps = this.prologEditor('getBreakpoints');\n      if ( bps.length > 0 )\n\tobj.breakpoints = bps;\n\n      return obj;\n    },\n\n    /*\n     * @returns {String} document identifier relating this editor to\n     * the server side document store.\n     */\n    docid: function() {\n      var st;\n\n      if ( this.hasClass(\"storage\") )\n\treturn this.storage('docid');\n      else if ( (st=this.closest(\".storage\")) && st.length > 0 ) {\n\tstdoc = st.storage('docid');\n\tif ( stdoc )\n\t  return stdoc + \"#\" + this.closest(\".nb-cell\").attr(\"name\");\n      }\n    },\n\n    /**\n     * @return {String[]} UUIDs of the sources used for\n     * server-side analysis.  The array may contain `null`s\n     * for sources that have no server side backup.\n     */\n     getSourceID: function() {\n       var ids = [];\n\n       this.each(function() {\n\t var data = $(this).data(pluginName);\n\n\t if ( data && data.cm && data.cm.state.prologHighlightServer )\n\t   ids.push(data.cm.state.prologHighlightServer.uuid);\n\t else\n\t   ids.push(null);\n       });\n\n       return ids;\n     },\n\n    /**\n     * @param {String} source sets the new content for the editor.  If\n     * the editor is associated with a storage plugin, the call is\n     * forwarded to the storage plugin.\n     * @param {Boolean} [direct=false] if this parameter is `true`, the\n     * message is never delegated to the storage\n     */\n    setSource: function(source, direct) {\n      if ( typeof(source) == \"string\" )\n\tsource = {data:source};\n\n      if ( this.data('storage') && direct != true ) {\n\tthis.storage('setSource', source);\n      } else {\n\tvar data = this.data(pluginName);\n\n\tdata.cm.setValue(source.data);\n\tif ( source.line || source.prompt ) {\n\t  data.cm.refresh();\n\n\t  if ( source.line ) {\n\t    this.prologEditor('gotoLine', source.line, source);\n\t  } else {\n\t    this.prologEditor('showTracePort', source.prompt);\n\t  }\n\t}\n\n\tif ( data.role == \"source\" && !source.noHistory ) {\n\t  $(\".swish-event-receiver\").trigger(\"program-loaded\",\n\t\t\t\t\t     { editor: this,\n\t\t\t\t\t       query: source.query\n\t\t\t\t\t     });\n\t}\n      }\n      return this;\n    },\n\n    /**\n     * Advertise this editor as the current editor.  This is the\n     * one used by the default query editor.\n     */\n    makeCurrent: function(options) {\n      if ( !options || !options.noHistory ) {\n\t$(\".swish-event-receiver\").trigger(\"current-program\", this);\n      }\n      return this;\n    },\n\n    /**\n     * Grab the focus\n     */\n    focus: function() {\n      var data = this.data(pluginName);\n      if ( data )\n\tdata.cm.focus();\n      return this;\n    },\n\n    /**\n     * Called if the editor changes from clean to dirty or visa versa.\n     * This triggers `data-is-clean`, which is trapped by the tab to\n     * indicate the changed state of the editor.\n     */\n    markClean: function(clean) {\n      var data = this.data(pluginName);\n\n      if ( data.clean_signalled != clean )\n      { data.clean_signalled = clean;\n\tthis.trigger(\"data-is-clean\", clean);\n      }\n    },\n\n    /**\n     * Set notion of clean for editors that are not associated with a\n     * storage\n     */\n    setIsClean: function() {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName);\n\tdata.cleanGeneration = data.cm.changeGeneration();\n\tdata.clean_signalled = true;\n      });\n    },\n\n    /**\n     * @param {Object} options\n     * @param {String} [options.add] Id of pengine to add\n     * @param {String} [options.has] Match pengine, returning boolean\n     */\n    pengine: function(options) {\n      var data = this.data(pluginName);\n\n      if ( data ) {\n\tif ( options.add ) {\n\t  data.pengines = data.pengines || [];\n\t  if ( data.pengines.indexOf(options.add) < 0 )\n\t    data.pengines.push(options.add);\n\n\t  return this;\n\t} else if ( options.has ) {\n\t  return (data.pengines &&\n\t\t  data.pengines.indexOf(options.has) >= 0);\n\t}\n      }\n    },\n\n    /**\n     * print the current content of the editor after applying the\n     * the CodeMirror mode to it.\n     * @param {String} [src] Prolog source to print. Default is to print\n     * the content of the editor.\n     */\n    print: function(src) {\n      var pre = $.el.pre({class:\"cm-s-prolog\"});\n\n      if ( !src ) src = this.prologEditor('getSource');\n\n      CodeMirror.runMode(src, \"prolog\", pre);\n\n      function printWithIframe(elem) {\n\tvar iframe = $.el.iframe({src:\"about:blank\"});\n\t$(\"body\").append(iframe);\n\t$(\"body\", iframe.contentWindow.document).append(elem);\n\tiframe.contentWindow.print();\n      }\n\n      $.ajax({ url: config.http.locations.swish+\"js/codemirror/theme/prolog.css\",\n\t       dataType: \"text\",\n\t       success: function(data) {\n\t\t printWithIframe($.el.div($.el.style(data),\n\t\t\t\t\t  pre));\n\t       },\n\t       error: function(jqXHDR) {\n\t\t modal.ajaxError(jqXHDR);\n\t       }\n             });\n\n      return this;\n    },\n\n    /**\n     * Manage user preference changes.  Defines preferences are:\n     *\n     *   - \"highlight\" -- one of `semantic` or `syntactic`\n     *\n     * @param {Object} pref describes a preference\n     * @param {String} pref.name name of the preference\n     * @param {Any}    pref.value value of the preference\n     */\n    preference: function(pref) {\n      var data = this.data(pluginName);\n\n      if ( pref.name == \"semantic-highlighting\" ) {\n\tdata.cm.setOption(\"prologHighlightServer\",\n\t\t\t  { enabled: pref.value });\n      }\n\n      if ( pref.name == \"emacs-keybinding\") {\n\tif (pref.value == true) {\n\t  data.cm.setOption(\"keyMap\", \"emacs\");\n\t} else {\n\t  data.cm.setOption(\"keyMap\", \"default\");\n\t}\n      }\n\n      return this;\n    },\n\n    /**\n     * Highlight a (syntax) error in the source.\n     * @param {Object} error\n     * @param {String} error.data contains the error message (HTML\n     * string)\n     * @param {Object} error.location contains the location, providing\n     * `line` and `ch` attributes.\n     */\n    highlightError: function(error) {\n      if ( error.location.file &&\n\t   (error.location.file == true ||\n\t    this.prologEditor('isMyFile', error.location.file)) ) {\n\tvar data = this.data(pluginName);\n\tvar chmark;\n\n\tif ( error.location.ch ) {\n\t  left = data.cm.charCoords({ line: error.location.line-1,\n\t\t\t\t      ch:   error.location.ch-1\n\t\t\t\t    },\n\t\t\t\t    \"local\").left;\n\t  chmark = $.el.div({class:\"source-msg-charmark\"},\n\t\t\t    $.el.span({class:\"glyphicon glyphicon-chevron-up\"}));\n\t  $(chmark).css(\"padding-left\", left+\"px\");\n\t}\n\n\tvar elem = $.el.div({ class:\"source-msg error error-context\",\n\t\t\t      title:\"Error message.  Click to remove\"\n\t\t\t    },\n\t\t\t    chmark,\n\t\t\t    $(error.data)[0],\n\t\t\t    $.el.span({class:\"glyphicon glyphicon-remove-circle\"}));\n\tvar widget = data.cm.addLineWidget(error.location.line-1, elem);\n\n\tif ( error.error_context )\n\t  $(elem).data(\"error_context\", error.error_context);\n\t$(elem).on(\"click\", function(ev) {\n\t  if ( error.error_handler &&\n\t       error.error_handler(ev) == false )\n\t    return;\n\t  widget.clear();\n\t});\n\t$(elem).data(\"cm-widget\", widget);\n      }\n\n      return this;\n    },\n\n    /**\n     * Re-run the highlighting.  Used for query editors if the\n     * associated editor has changed.\n     */\n    refreshHighlight: function() {\n      var data = this.data(pluginName);\n      data.cm.serverAssistedHighlight(true);\n      return this;\n    },\n\n    /**\n     * Refresh the editor.  This is often needed if it is resized.\n     */\n    refresh: function() {\n      var data = this.data(pluginName);\n      if ( data )\n\tdata.cm.refresh();\n      return this;\n    },\n\n    /**\n     * Remove all inline messages from the editor\n     */\n    clearMessages: function() {\n      this.find(\".source-msg\").each(function() {\n\t$(this).data(\"cm-widget\").clear();\n      });\n\n      this.prologEditor('showTracePort', null);\n\n      return this;\n    },\n\n    /**\n     * Execute a command on the editor from the menu.  The trick is to\n     * find the current editor.  For that purpose we make \"blur\" trigger\n     * the 'prepare' command that sets the last editor.  On the\n     * following menu action we execute on the last editor.\n     */\n   execCommand: function(command) {\n     if ( command == 'prepare' ) {\n       lastEditor = this[0];\n     } else if ( lastEditor == this[0] ) {\n       elem = $(lastEditor);\n       var data = elem.data(pluginName);\n       data.cm.execCommand(command);\n       elem.find(\".Codemirror-dialog input\").focus();\n     }\n\n     return this;\n   },\n\n    /**\n     * @param {String} file is the file as known to Prolog,\n     * which is `pengine://<pengine>/src/` for the pengine main file\n     * and `swish://store.pl` for included files.\n     * @return {Boolean} whether or not this is my file.\n     */\n    isMyFile: function(file) {\n      var prefix = \"swish://\";\n\n      if ( file.startsWith(\"pengine://\") ) {\n\tvar data = this.data(pluginName);\n\n\tif ( data.pengines &&\n\t     (id = file.split(\"/\")[2]) &&\n\t     data.pengines.indexOf(id) >= 0 )\n\t  return true;\n      }\n\n      if ( file.startsWith(prefix) ) {\n\tvar store = this.data(\"storage\");\n\n\tif ( store && file.slice(prefix.length) == store.file )\n\t  return true;\n      }\n\n      return false;\n    },\n\n    /**\n     * Highlight source events.  The source pengine gets a prompt\n     * with `prompt.file` set to `pengine://<id>/src`.\n     * @param {Object|null} prompt for a tracer action.  Use `null`\n     * to clear.\n     * @return {jQuery|undefined} `this` if successful.  `undefined`\n     * if this is a valid trace event, but I cannot process it.\n     */\n    showTracePort: function(prompt) {\n      if ( this.length == 0 )\n\treturn this;\n\n      var data  = this.data(pluginName);\n\n      if ( data.traceMark ) {\n\tdata.traceMark.clear();\n\tdata.traceMark = null;\n      }\n\n      if ( prompt && prompt.source && prompt.source.file ) {\n\tvar file  = prompt.source.file;\n\n\tif ( this.prologEditor('isMyFile', file) ) {\n\t  if ( prompt.source.from && prompt.source.to ) {\n\t    var from = data.cm.charOffsetToPos(prompt.source.from);\n\t    var to   = data.cm.charOffsetToPos(prompt.source.to);\n\n\t    if ( !this.is(\":visible\") )\n\t      this.storage('expose', \"trace\");\n\n\t    if ( from && to ) {\n\t      data.traceMark = data.cm.markText(from, to,\n\t\t\t\t\t\t{ className: \"trace \"+prompt.port\n\t\t\t\t\t\t});\n\t      data.traceMark.pengine = prompt.pengine;\n\t      data.cm.scrollIntoView(from, 50);\n\t    }\n\t  }\n\n\t  return this;\n\t}\n      } else {\n\treturn this;\n      }\n    },\n\n    /**\n     * Get the selection for later reuse.\n     * @returns {null|Array} Array of selection descriptions for each\n     * editor in the jQuery object that has a selection.  Each editor\n     * selection contains `editor` and `selections`, where `selections`\n     * is an array of objects with `from`, `to` (line,ch), `string` and\n     * `context`.  The latter two allow for fuzzy restoration of the\n     * selection.\n     */\n    getSelection: function() {\n      var selection = [];\n\n      this.each(function() {\n\tvar ed   = $(this);\n\tvar data = ed.data(pluginName);\n\n\tif ( data.cm.somethingSelected() == true ) {\n\t  var sel    = data.cm.listSelections();\n\t  var esel   = {selections:[]};\n\n\t\t\t\t\t\t/* Hack */\n\t  var cell_name = ed.closest(\".nb-cell\").attr(\"name\");\n\t  if ( cell_name )\n\t    esel.cell = cell_name;\n\n\t  for(var i=0; i<sel.length; i++) {\n\t    var s = sel[i];\n\t    var sr = {};\n\n\t    function cmploc(l1, l2) {\n\t      if ( l1.line < l2.line ) return -1;\n\t      if ( l1.line > l2.line ) return  1;\n\t      if ( l1.ch   < l2.ch   ) return -1;\n\t      if ( l1.ch   > l2.ch   ) return  1;\n\t      return 0;\n\t    }\n\t    function sol(pos) {\n\t      return {line:pos.line, ch:0};\n\t    }\n\t    function eol(pos) {\n\t      return {line:pos.line, ch:data.cm.getLine(pos.line).length};\n\t    }\n\t    function cppos(pos) {\n\t      return {line:pos.line, ch:pos.ch};\n\t    }\n\n\t    switch ( cmploc(s.anchor, s.head) )\n\t    { case -1:\n\t\tsr.from = cppos(s.anchor);\n\t        sr.to   = cppos(s.head);\n\t\tbreak;\n\t      case 1:\n\t\tsr.to   = cppos(s.anchor);\n\t        sr.from = cppos(s.head);\n\t\tbreak;\n\t      case 0:\n\t\tcontinue;\n\t    }\n\n\t    sr.string  = data.cm.getRange(sr.from, sr.to);\n\t    sr.context = data.cm.getRange(sol(sr.from), eol(sr.to));\n\n\t    esel.selections.push(sr);\n\t  }\n\n\t  selection.push(esel);\n\t}\n      });\n\n      return selection.length > 0 ? selection : null;\n    },\n\n    /**\n     * @param {Array} sel is the selection to restore\n     * @fixme deal with notebook selections\n     */\n    restoreSelection: function(selection) {\n      function restoreEditorSelection(ed, sel) {\n\tvar data    = ed.data(pluginName);\n\tvar cm      = data.cm;\n\tvar cmsel   = [];\n\tvar loffset = \"\";\n\n\tfunction findsel(s) {\n\t  if ( cm.getRange(s.from, s.to) == s.string ) {\n\t    return {anchor:s.from, head: s.to};\n\t  } else {\n\t    var start   = cm.firstLine();\n\t    var end     = cm.lastLine();\n\t    var offset  = 0;\n\t    var goffset = 1;\n\n\t    function contextMatch(l0, s) {\n\t      var lines = s.split(\"\\n\");\n\t      for(var i=0; i<lines.length; i++) {\n\t\tif ( cm.getLine(l0+i) != lines[i] )\n\t\t  return false;\n\t      }\n\t      return true;\n\t    }\n\n\t    function stringMatch(l0, s) {\n\t      var lines = s.split(\"\\n\");\n\t      for(var i=0; i<lines.length; i++) {\n\t\tvar cml = cm.getLine(l0);\n\t\tvar   l = lines[i];\n\t\tvar choff;\n\n\t\tif ( i == 0 ) {\n\t\t  if ( i == lines.length-1 ) {\n\t\t    return cml.indexOf(l);\n\t\t  } else {\n\t\t    choff = cml.indexOf(l);\n\n\t\t    if ( !(choff >= 0 && l.length+choff == cml.length) )\n\t\t      return -1;\n\t\t  }\n\t\t} else if ( i == lines.length-1 ) {\n\t\t  if ( cml.indexOf(l) != 0 )\n\t\t    return -1;\n\t\t} else {\n\t\t  if ( cm.getLine(l0+i) != lines[i] )\n\t\t    return -1;\n\t\t}\n\t      }\n\t      return choff;\t\t\t/* ch of selection start */\n\t    }\n\n\t    function poff(p, l, ch) {\n\t      ch = ch||0;\n\t      return {line:p.line+l, ch:p.ch+ch};\n\t    }\n\n\t    while( s.from.line+offset >= start &&\n\t\t   s.to.line+offset <= end ) {\n\t      var ch;\n\n\t      if ( contextMatch(s.from.line+offset, s.context) )\n\t\treturn { anchor:poff(s.from, offset),\n\t\t\t head:  poff(s.to,   offset),\n\t\t\t offset:offset\n\t\t       };\n\t      if ( (ch=stringMatch(s.from.line+offset, s.string)) >= 0 ) {\n\t\tvar soff = ch-s.from.ch;\n\t\tvar toff = s.to.line != s.from.line ? 0 : soff;\n\n\t\treturn { anchor:poff(s.from, offset, soff),\n\t\t\t head:  poff(s.to,   offset, toff),\n\t\t\t offset:offset\n\t\t       };\n\t      }\n\n\t      goffset++;\n\t      offset = Math.floor(goffset/2);\n\t      if ( goffset%2 == 1 )\n\t\toffset = -offset;\n\t    }\n\t  }\n\t}\n\n\tfor(var i=0; i<sel.length; i++) {\n\t  var r = findsel(sel[i]);\n\t  if ( r ) {\n\t    cmsel.push(r);\n\t    if ( r.offset ) {\n\t      if ( loffset != \"\" )\n\t\tloffset += \";\";\n\t      loffset += r.offset\n\t    }\n\t  }\n\t}\n\n\tif ( cmsel.length > 0 )\n\t  cm.setSelections(cmsel, 0);\n\tif ( loffset != \"\" || cmsel.length < sel.length ) {\n\t  var msg;\n\n\t  if ( cmsel.length == sel.length )\n\t    msg = \"Found selections at offset \"+loffset;\n\t  else if ( loffset == \"\" )\n\t    msg = \"Could not restore all selections\";\n\t  else\n\t    msg = \"Only found some selections at offsets \" + loffset;\n\n\t  modal.feedback({ html: msg, owner: ed });\n\t}\n      }\n\n      // Our body\n      if ( selection[0].cell ) {\t/* notebook style */\n\tvar editors = this;\n\n\tfor(var i=0; i<selection.length; i++) {\n\t  var s = selection[i];\n\n\t  function findEditor(name) {\n\t    for(var i=0; i<editors.length; i++) {\n\t      if ( $(editors[i]).closest(\".nb-cell\").attr(\"name\") == name )\n\t\treturn $(editors[i]);\n\t    }\n\t  }\n\n\t  var ed = findEditor(s.cell);\n\t  if ( ed )\n\t    restoreEditorSelection(ed, s.selections);\n\t}\n      } else {\t\t\t\t/* plain editor */\n\trestoreEditorSelection(this, selection);\n      }\n\n      return this;\n    },\n\n    /**\n     * Extract example queries from text.  By   default,  this looks for\n     * structured  comment  blocks  labelled   *examples*  and  extracts\n     * fragments between `^ *?-` and `.`\n     *\n     * @param {String} [src] Source to parse. Default is the editor\n     * content.\n     * @param {Boolean} [inComment=true] if `true`, only process text\n     * that is in an *examples* structured comment block\n     * @returns {null|Array} Examples extracted from the source code.  If\n     * there is _no source_ code, `null` is returned.\n     */\n    getExamples: function(src, inComment) {\n      var source = src ? src : this.prologEditor('getSource');\n      var comments;\n      var exlist = [];\n\n      if ( $.trim(source) == \"\" )\n\treturn null;\n\n      if ( inComment == false )\n\tcomments = [src];\n      else\n\tcomments = source.match(/\\/\\*\\* *<?examples>?[\\s\\S]*?\\*\\//igm);\n\n      if ( comments ) {\n\tfor(var i=0; i<comments.length; i++) {\n\t  var exl = comments[i].match(/^ *\\?-[\\s\\S]*?[^-#$&*+./:<=>?@\\\\^~]\\.\\s/gm);\n\n\t  if ( exl ) {\n\t    for(var j=0; j<exl.length; j++) {\n\t      var ex = exl[j].replace(/^ *\\?-\\s*/, \"\")\n\t\t\t     .replace(/\\s*$/, \"\");\n\t      exlist.push(ex);\n\t    }\n\t  }\n\t}\n      }\n\n      return exlist;\n    },\n\n    /**\n     * Add an example to the examples comment block or create such a\n     * block.\n     */\n    addExample: function(query) {\n      var cm      = this.data(pluginName).cm;\n      var source = this.prologEditor('getSource');\n      var start  = this.prologEditor('search',\n\t\t\t\t     /\\/\\*\\* *<?examples>?/igm, {dir:-1,max:1});\n      var end    = this.prologEditor('search', /\\*\\//, {start:start.line,max:1});\n\n      if ( start.length == 1 )\n      { var end = this.prologEditor('search', /\\*\\//,\n\t\t\t\t    {start:start[0].line, max:1});\n\tvar current = this.prologEditor('getExamples', source);\n\n\tif ( current && current.indexOf(query) != -1 )\n\t{ modal.alert(\"Query is already in examples\");\n\t  return this;\n\t}\n\tif ( end.length != 1 )\n\t{ modal.alert(\"/** <examples> block is not terminated with */\");\n\t  return this;\n\t}\n\n\tquery = query.split(\"\\n\").join(\"\\n   \");\n\tcm.setSelection({line:end[0].line-1, ch:0});\n\tcm.replaceSelection(\"?- \"+query+\"\\n\");\n      } else\t\t\t\t/* add to the end of the file */\n      { var lineno = cm.lastLine();\n\tvar line   = cm.getLine(lineno);\n\n\tcm.replaceRange(\"\\n\\n/** <examples>\\n\" +\n\t\t        \"?- \"+query+\"\\n\" +\n\t\t\t\"*/\\n\", {line:lineno, ch:line.length});\n      }\n\n      return this;\n    },\n\n    /**\n     * @param {RegExp} re is the regular expression to search for\n     * @param {Object} [options]\n     * @param {number} [options.max] is the max number of hits to return\n     * @param {number} [options.dir=1] is -1 to search backwards\n     * @param {number} [options.start] to start at a given line\n     * @param {number} [options.end] to end at a given line\n     * @returns {Array.object} list of objects holding the matching line\n     * content and line number.\n     */\n    search: function(re, options) {\n      var cm      = this.data(pluginName).cm;\n      var dir     = options.dir||1;\n      var start   = options.start == undefined ? cm.firstLine() : options.start;\n      var end     = options.end   == undefined ? cm.lastLine()  : options.end;\n      var matches = [];\n\n      if ( (dir == -1 && end > start) ||\n\t   (dir == 1 && start > end) )\n      { var tmp = start;\n\tstart = end;\n\tend = tmp;\n      }\n\n      if ( (dir > 0 && start > end) ||\n\t   (dir < 0 && start < end) )\n\treturn matches;\n      end += dir;\n\n      for(var i=start; i!=end; i+=dir) {\n\tvar line = cm.getLine(i);\n\tif ( line.search(re) >= 0 ) {\n\t  matches.push({line:i+1, text:line});\n\t  if ( options.max && options.max === matches.length )\n\t    return matches;\n\t}\n      }\n\n      return matches;\n    },\n\n    /**\n     * Go to a given 1-based line number and optionally highlight the\n     * match(es).\n     *\n     * @param {number} line\n     * @param {Object} [options]\n     * @param {RegExp} [options.regex] If provided, highlight the\n     * matches.\n     * @param {Boolean} [options.showAllMatches] if `true`, show all\n     * matches in the viewport.\n     */\n    gotoLine: function(line, options) {\n      var data = this.data(pluginName);\n      var cm   = data.cm;\n      var ch   = 0;\n      var re;\n\n      function clearSearchMarkers(cm) {\n\tif ( cm._searchMarkers !== undefined ) {\n\t  for(var i=0; i<cm._searchMarkers.length; i++)\n\t    cm._searchMarkers[i].clear();\n\t  cm.off(\"cursorActivity\", clearSearchMarkers);\n\t}\n\tcm._searchMarkers = [];\n      }\n\n      clearSearchMarkers(cm);\n      options = options||{};\n      re      = options.regex;\n      line    = line-1;\n\n      if ( re ) {\n\tch = cm.getLine(line).search(re);\n\tif ( ch < 0 )\n\t  ch = 0;\n      }\n\n      cm.setCursor({line:line,ch:ch});\n      var myHeight = cm.getScrollInfo().clientHeight;\n      var coords = cm.charCoords({line: line, ch: 0}, \"local\");\n      cm.scrollTo(null, (coords.top + coords.bottom - myHeight) / 2);\n\n      if ( re ) {\n\tfunction markMatches(line, className) {\n\t  var match;\n\n\t  while( (match=re.exec(cm.getLine(line))) ) {\n\t    cm._searchMarkers.push(\n\t      cm.markText({line:line,ch:match.index},\n\t\t\t  {line:line,ch:match.index+match[0].length},\n\t\t\t  {className:className,\n\t\t\t   clearOnEnter: true,\n\t\t\t   clearWhenEmpty: true,\n\t\t\t   title: \"Search match\"\n\t\t\t  }));\n\t  }\n\t}\n\n\tmarkMatches(line, \"CodeMirror-search-match\");\n\tif ( options.showAllMatches ) {\n\t  var vp = cm.getViewport();\n\n\t  for(var i=vp.from; i<vp.to; i++) {\n\t    if ( i != line ) {\n\t      markMatches(i, \"CodeMirror-search-alt-match\");\n\t    }\n\t  }\n\t}\n\n\tif ( cm._searchMarkers.length > 0 )\n\t  cm.on(\"cursorActivity\", clearSearchMarkers);\n      } else {\t\t\t\t\t/* mark entire line */\n\tcm._searchMarkers.push(\n\t      cm.markText({line:line, ch:0},\n\t\t\t  {line:line, ch:cm.getLine(line).length},\n\t\t\t  {className:\"CodeMirror-search-match\",\n\t\t\t   clearOnEnter: true,\n\t\t\t   clearWhenEmpty: true,\n\t\t\t   title: \"Target line\"\n\t\t\t  }));\n      }\n\n      return this;\n    },\n\n    /**\n     * @return {Integer} change generation for this editor\n     */\n    changeGen: function() {\n      return this.data(pluginName).cm.changeGeneration();\n    },\n\n    isClean: function(gen) {\n      return this.data(pluginName).cm.isClean(gen);\n    },\n\n    /**\n     * Associate the editor with the server side (gitty) source\n     */\n    setupStorage: function(storage) {\n      var data = this.data(pluginName);\n      var elem = this;\n\n      storage.setValue = function(source) {\n\telem.prologEditor('setSource', source, true);\n      };\n      storage.getValue = function() {\n\treturn data.cm.getValue();\n      };\n      storage.changeGen = function() {\n\treturn data.cm.changeGeneration();\n      };\n      storage.isClean = function(generation) {\n\treturn data.cm.isClean(generation);\n      };\n      storage.markClean = function(clean) {\n\telem.prologEditor('markClean', clean);\n      };\n\n      storage.cleanGeneration = data.cm.changeGeneration();\n      storage.cleanData       = data.cm.getValue();\n      storage.cleanCheckpoint = \"load\";\n\n      this.storage(storage);\n      return this;\n    },\n\n    /**\n     * Act on the current token.  Normally invoked after a long click.\n     */\n    contextAction: function() {\n      var elem  = this;\n      var data  = this.data(pluginName);\n      var here  = data.cm.getCursor();\n      var token = data.cm.getTokenAt(here, true);\n      var et    = data.cm.getEnrichedToken(token);\n      var locations = data.cm.getTokenReferences(et);\n\n      if ( locations && locations.length > 0 ) {\n\tvar ul = $.el.ul();\n\tvar select  = $.el.div({class: \"goto-source\"}, $.el.div(\"Go to\"), ul);\n\tvar modalel = $.el.div({class: \"edit-modal\"},\n\t\t\t       $.el.div({class: \"mask\"}),\n\t\t\t       select)\n\n\tfor(var i=0; i<locations.length; i++) {\n\t  var loc = locations[i];\n\t  $(ul).append($.el.li($.el.a({'data-locindex':i}, loc.title)));\n\t}\n\n\tvar coord = data.cm.cursorCoords(true);\n\t$(select).css({top: coord.bottom, left: coord.left});\n\n\t$(\"body\").append(modalel);\n\t$(modalel).on(\"click\", function(ev) {\n\t  var i = $(ev.target).data('locindex');\n\t  $(modalel).remove();\n\n\t  if ( i !== undefined ) {\n\t    var loc = locations[i];\n\n\t    if ( loc.file ) {\n\t      elem.closest(\".swish\").swish('playFile', loc);\n\t    } else {\n\t      var editor;\n\n\t      // If we are the query editor, we must find the related\n\t      // program editor.\n\t      if ( data.role == \"query\" ) {\n\t\teditor = elem.closest(\".prolog-query-editor\")\n\t\t\t     .queryEditor('getProgramEditor');\n\n\t\tif ( !editor[0] )\n\t\t  modal.alert(\"No related program editor\");\n\t      } else\n\t      { editor = elem;\n\t      }\n\n\t      if ( editor && editor[0] )\n\t\teditor.prologEditor('gotoLine', loc.line, loc).focus();\n\t    }\n\n\t  }\n\t});\n\n\t$(modalel).show();\n      }\n\n      return this;\n    },\n\n\t\t /*******************************\n\t\t *\tQUERY MANIPULATION\t*\n\t\t *******************************/\n\n    /**\n     * @param {String} [query] query to get the variables from\n     * @param {Boolean} [anon] if `true`, also include _X variables.\n     * @return {List.string} is a list of Prolog variables without\n     * duplicates\n     */\n\n    variables: function(query, anon) {\n      var qspan = $.el.span({class:\"query cm-s-prolog\"});\n      var vars = [];\n\n      CodeMirror.runMode(query, \"prolog\", qspan);\n\n      function addVars(selector) {\n\t$(qspan).find(selector).each(function() {\n\t  var name = $(this).text();\n\t  if ( vars.indexOf(name) < 0 )\n\t    vars.push(name);\n\t});\n      }\n\n      addVars(\"span.cm-var\");\n      if ( anon )\n\taddVars(\"span.cm-var-2\");\n\n      return vars;\n    },\n\n    /**\n     * Wrap current query in a solution modifier.\n     * TBD: If there is a selection, only wrap the selection\n     *\n     * @param {String} wrapper defines the type of wrapper to use.\n     */\n    wrapSolution: function(wrapper) {\n      var query = prolog.trimFullStop(this.prologEditor('getSource', \"query\"));\n      var that = this;\n      var vars = this.prologEditor('variables', query);\n\n      function wrapQuery(pre, post) {\n\tthat.prologEditor('setSource', pre + \"(\"+query+\")\" + post + \".\")\n\t    .focus();\n\treturn that;\n      }\n\n      function prefixQuery(pre) {\n\tthat.prologEditor('setSource', pre + query + \".\")\n\t    .focus();\n\treturn that;\n      }\n\n      function order(l) {\n\tvar order = [];\n\tfor(var i=0; i<vars.length; i++)\n\t  order.push(\"asc(\"+vars[i]+\")\");\n\treturn order.join(\",\");\n      }\n\n      switch ( wrapper ) {\n        case \"Aggregate (count all)\":\n\t  return wrapQuery(\"aggregate_all(count, \", \", Count)\");\n\tcase \"Projection\":\n\t  return prefixQuery(\"projection([\"+vars.join(\",\")+\"]),\\n\");\n        case \"Order by\":\n\t  return wrapQuery(\"order_by([\"+order(vars)+\"], \", \")\");\n        case \"Distinct\":\n\t  return wrapQuery(\"distinct([\"+vars.join(\",\")+\"], \", \")\");\n        case \"Limit\":\n\t  return wrapQuery(\"limit(10, \", \")\");\n        case \"Time\":\n\t  return wrapQuery(\"time(\", \")\");\n        case \"Debug (trace)\":\n\t  return wrapQuery(\"trace, \", \"\");\n\tdefault:\n\t  alert(\"Unknown wrapper: \\\"\"+wrapper+\"\\\"\");\n      }\n    }\n  }; // methods\n\n  tabbed.tabTypes.program = {\n    dataType: \"pl\",\n    typeName: \"program\",\n    label: \"Program\",\n    contentType: \"text/x-prolog\",\n    order: 100,\n    create: function(dom, options) {\n      $(dom).addClass(\"prolog-editor\")\n            .prologEditor($.extend({save:true}, options))\n\t    .prologEditor('makeCurrent', options);\n    }\n  };\n\n  if ( config.swish.tab_types ) {\n    var editDefaults = {\n      save: true,\n      lineNumbers: true\n    };\n\n    for(var i=0; i<config.swish.tab_types.length; i++) {\n      var tabType = config.swish.tab_types[i];\n      if ( tabType.editor ) {\n\tvar options = $.extend({typeName:tabType.typeName},\n\t\t\t       editDefaults,\n\t\t\t       tabType.editor);\n\n\ttabType.create = function(dom) {\n\t  $(dom).addClass(\"prolog-editor\")\n\t        .prologEditor(options);\n\t};\n\n\ttabbed.tabTypes[tabType.typeName] = tabType;\n      }\n    }\n  }\n\n\n  /**\n   * The prologEditor jQuery plugin converts a `<div>` into an code\n   * editor based on [CodeMirror](http://codemirror.net)\n   *\n   * @class prologEditor\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @example // Create a default Prolog editor\n   * $(\"#editor\").prologEditor();\n   * @example // Extract embedded examples\n   * $(\"#editor\").prologEditor('getExamples');\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.prologEditor = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n\t\t /*******************************\n\t\t *\t     FUNCTIONS\t\t*\n\t\t *******************************/\n\nCodeMirror.prototype.charOffsetToPos = function(offset) {\n  var line = this.firstLine();\n  var last = this.lastLine();\n  var charno = 0;\n\n  for( ; line < last; line++ ) {\n    var text = this.getLine(line);\n\n    if ( charno <= offset && charno+text.length >= offset )\n      return {line:line, ch:offset-charno};\n\n    charno += text.length + 1;\t\t/* one extra for the newline */\n  }\n};\n\n\n\t\t /*******************************\n\t\t *\t      EMACS\t\t*\n\t\t *******************************/\n\nCodeMirror.keyMap.emacs.Enter = \"newlineAndIndent\";\n\n\n\t\t /*******************************\n\t\t *\tSTYLE CONFIGURATION\t*\n\t\t *******************************/\n\n/**\n * Include styles provided through the configuration object.\n *\n * @param {Object} style is an object mapping style names into style\n * properties.  The properties are also in an object, linking style\n * names to values.  For example:\n *\n *    ```\n *    { column: {color: \"#8b008b},\n *      table:  {color: \"#8b008b, \"font-weight\":\"bold\"}\n *    }\n *    ```\n */\n\nfunction loadStyleExtensions(style, prefix)\n{ var parts=[];\n\n  prefix = prefix || \"\";\n\n  parts.push(\"<style>\\n\");\n  for(var sname in style) {\n    if ( style.hasOwnProperty(sname) ) {\n      var attrs = style[sname];\n\n      parts.push(prefix, sname, \"{\");\n\n      for(var a in attrs) {\n\tif ( attrs.hasOwnProperty(a) ) {\n\t  parts.push(a, \":\", attrs[a], \";\");\n\t}\n      }\n\n      parts.push(\"}\\n\");\n    }\n  }\n  parts.push(\"</style>\\n\");\n\n  $(\"body\").append(parts.join(\"\"));\n}\n\nif ( config.swish.cm_style )\n  loadStyleExtensions(config.swish.cm_style,\n\t\t      \".cm-s-prolog span.cm-\");\nif ( config.swish.cm_hover_style )\n  loadStyleExtensions(config.swish.cm_hover_style,\n\t\t      \".CodeMirror-hover-tooltip \");\n\n}); // define\n;\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Render a single Prolog answer.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('answer',[ \"jquery\", \"laconic\" ],\n       function() {\n\n\t\t /*******************************\n\t\t *\tRENDER AN ANSWER\t*\n\t\t *******************************/\n\n(function($) {\n  var pluginName = 'prologAnswer';\n\n  /** @lends $.fn.prologAnswer */\n  var methods = {\n    /**\n     * Represent the binding of one or more variables to exactly the\n     * same (==) Prolog term.\n     *\n     * @typedef {Object} Binding\n     * @property {Array.String} variables represents the names of the\n     * variables.  This array is at least one long.\n     * @property {String} value contains the HTML that describes the\n     * binding of the variable.\n     */\n\n    /**\n     * Represent the binding of a single variable used to represent\n     * sharing, an in particular cyclic terms\n     *\n     * @typedef {Object} Subsitution\n     * @property {String} var name of the variable\n     * @property {String} value contains the HTML that describes the\n     * binding of the variable.\n     */\n\n    /**\n     * Represent an answer as represented by the pengines `json-html`\n     * format.\n     * @typedef {Object} Answer\n     * @property {Array.Binding} variables represents the variable\n     * bindings.\n     * @property {Array.Subsitution} [substitutions] represents substitutions\n     * needed to break cyclic terms.\n     * @property {Array.String} [residuals] represents residual goals as HTML\n     * strings.\n     */\n\n    /**\n     * Render a single answer as returned by pengines `json-html` format\n     * as an HTML string.\n     *\n     * to HTML escaping issues\n     * @param {Answer} answer represents an answer to a Prolog query\n     */\n  _init: function(answer) {\n      return this.each(function() {\n\tvar elem = $(this);\n\n\tif ( answerHasOutput(answer) ) {\n\t  if ( elem.is(\"table\") ) {\n\t    var row = $.el.tr();\n\t    elem.append(row);\n\t    row.innerHTML = renderTabledAnswer(answer, elem);\n\t    evalScripts($(row));\n\t    $(row).find(\".render-multi\").renderMulti();\n\t  } else {\n\t    elem[0].innerHTML = renderAnswer(answer);\n\t    evalScripts(elem);\n\t    elem.find(\".render-multi\").renderMulti();\n\t  }\n\t} else\n\t  elem.append($.el.span({class: \"prolog-true\"}, \"true\"));\n      });\n    }\n  };\n\n  function answerHasOutput(answer) {\n    return answer.variables.length > 0 || answer.residuals;\n  }\n\n  function renderSubstitutions(substs, html) {\n    html.push(', <span class=\"pl-comment\">% where</span><br/>');\n    for (var s = 0; s < substs.length; s++) {\n      html.push('<span class=\"where-binding\">',\n\t\t\"<span class='pl-var'>\", substs[s].var+\"</span> = \",\n\t\tsubsts[s].value, '</span>');\n      if (s < substs.length - 1)\n\thtml.push(\",<br/>\");\n    }\n  }\n\n  function renderAnswer(answer) {\n    var html = [];\n    var bindings = answer.variables;\n    for (var i = 0; i < bindings.length; i++) {\n      var vars = bindings[i].variables;\n      for (var v = 0; v < vars.length - 1; v++) {\n\thtml.push(\"<span class='pl-ovar'>\", vars[v], \"</span> = \",\n\t\t  \"<span class='pl-var'>\", vars[v + 1], \"</span>, \");\n      }\n      html.push(\"<span class='pl-ovar'>\", vars[vars.length - 1],\n\t\t\"</span> = \", bindings[i].value);\n      if (bindings[i].substitutions) {\n\trenderSubstitutions(bindings[i].substitutions, html);\n      }\n      if (i < bindings.length - 1 || answer.residuals)\n\thtml.push(\",<br/>\");\n    }\n\n    var residuals;\n    if ((residuals = answer.residuals)) {\n      for (var i = 0; i < residuals.length; i++) {\n\thtml.push(residuals[i]);\n\tif (i < residuals.length - 1)\n\t  html.push(\",<br/>\");\n      }\n    }\n    return html.join(\"\");\n  }\n\n  /**\n   * Render answer as a new row to the answer table.\n   * @param {Answer} answer represents an answer to a Prolog query\n   * @param {Table} table is the jQuery table to which the answer must\n   * be added.\n   */\n  function renderTabledAnswer(answer, table) {\n    var html = [];\n\n    function findBinding(name) {\n      var bindings = answer.variables;\n      for (var i = 0; i < bindings.length; i++) {\n\tvar vars = bindings[i].variables;\n\tfor (var v = 0; v < vars.length; v++) {\n\t  if ( vars[v] == name )\n\t    return bindings[i];\n\t}\n      }\n      return null;\n    }\n\n    for(var i = 0; i<answer.projection.length; i++) {\n      var vname  = answer.projection[i];\n      var binding = findBinding(vname);\n\n      html.push(\"<td>\");\n      if ( binding ) {\n\thtml.push(binding.value);\n\tif ( binding.substitutions )\n\t  renderSubstitutions(binding.substitutions, html);\n      } else {\n\thtml.push(\"<span class='pl-var'>\", vname, \"</span>\");\n      }\n      html.push(\"</td>\");\n    }\n\n    function ensureResidualColumn() {\n      if ( table.find(\"tr.projection th.residuals\").length == 0 ) {\n\t$(\"<th class='residuals'>Residual goals</th>\").insertBefore(\n\t   table.find(\"tr.projection th.answer-nth\"));\n\t$(\"<td></td>\").insertBefore(\n\t   table.find(\"tr td.answer-nth\"));\n      }\n    }\n\n    var residuals;\n    if ((residuals = answer.residuals)) {\n      ensureResidualColumn();\n      html.push(\"<td>\");\n      for (var i = 0; i < residuals.length; i++) {\n\thtml.push(residuals[i]);\n\tif (i < residuals.length - 1)\n\t  html.push(\",<br/>\");\n      }\n      html.push(\"</td>\");\n    }\n\n    if ( answer.nth )\n      html.push(\"<td class='answer-nth'>\", answer.nth, \"</td>\");\n\n    return html.join(\"\");\n  }\n\n  /**\n   * Execute scripts that are embedded in the jQuery object elem.\n   * While executing a script, the property `$.ajaxScript` points\n   * to the executing script to enable the script to find elements\n   * in the ajax DOM extension in which the script is embedded.\n   * @param {jQuery} elem is the set in which scripts are searched\n   * and executed.\n   */\n  function evalScripts(elem) {\n    elem.find(\"script\").each(function() {\n      var type = this.getAttribute('type')||\"text/javascript\";\n      if ( type == \"text/javascript\" ) {\n\t$.ajaxScript = $(this);\n\teval(this.textContent);\n      }\n    });\n    if ( $.ajaxScript )\n      delete $.ajaxScript;\n  }\n\n\n  /**\n   * Render a single Prolog answer. This class is the entry point for\n   * more flexible answer rendering.\n   *\n   * @class prologAnswer\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} answer Either a method name or the jQuery\n   * plugin initialization object, which is the answer to a Prolog query\n   * in pengines \"json-html\" format\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.prologAnswer = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n\n}(jQuery));\n\n\t\t /*******************************\n\t\t *\t   RENDER TERMS\t\t*\n\t\t *******************************/\n\n(function($) {\n  var pluginName = 'renderMulti';\n  var timeout = 0;\n  var hovering = false;\n\n  /** @lends $.fn.renderMulti */\n  var methods = {\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {current: 0};\t\t/* private data */\n\tvar display = [];\n\tvar selector = $.el.div({class: \"render-multi-active\"});\n\n\tvar i = 0;\n\telem.children().each(function() {\n\t  var how = $(this).css(\"display\");\n\n\t  display.push(how);\n\t  if ( i++ == 0 ) {\n\t    elem.css(\"display\", how);\n\t    $(this).attr('draggable', false);\n\t  } else {\n\t    $(this).hide();\n\t  }\n\t});\n\tdata.display = display;\n\telem.append(selector);\n\n\t$(selector).hover(function(ev) { elem.renderMulti('showSelect', ev); },\n\t\t\t  function(ev) { elem.renderMulti('hideSelect', ev); });\n\telem.attr('draggable', true)\n            .bind('dragstart', dragStart);\n\n\telem.data(pluginName, data);\t/* store with element */\n      });\n    },\n\n    /**\n     * @returns {String} holding HTML with a radio button to select a\n     * rendering\n     */\n    selectMenu: function() {\n      var data = this.data(pluginName);\n      var select = [\"<label>View as</label><br>\"];\n      var children = this.children();\n\n      function downloadButton(i, name) {\n\tvar title, glyph;\n\n\tif ( name == \"Prolog term\" ) {\n\t  title = \"Copy\";\n\t  glyph = \"copy\";\n\t} else {\n\t  title = \"Download\";\n\t  glyph = \"download\";\n\t}\n\n\tbtn = '<a href=\"#\" class=\"btn btn-style btn-sm\" '+\n\t      'data-nr=\"'+i+'\" data-action=\"'+glyph+'\" title=\"'+title+'\">' +\n\t      '<span class=\"glyphicon glyphicon-'+glyph+'\"></span></a>';\n\n\treturn btn;\n      }\n\n      var i = 0;\n      for(var i=0; i<data.display.length; i++) {\n\tvar r = $(children[i]);\n\tvar name = r.attr(\"data-render\");\n\n\tif ( !name ) {\n\t  if ( i == 0 )\n\t    name = \"Default rendered\";\n\t  else\n\t    name = \"Alt rendered [\"+(i+1)+\"]\";\n\t}\n\n\tselect.push(\"<div class='render-item'>\",\n\t\t    downloadButton(i, name),\n\t\t    \"<input type='radio' name='render' value='\", i, \"'\");\n\tif ( i == data.current ) select.push(\" checked\");\n\tselect.push(\"> \", name, \"</div>\");\n      }\n\n      select.push(\"</form\");\n      return select.join(\"\");\n    },\n\n    showSelect: function(ev) {\n      var elem = this;\n      var menu = selectMenu();\n      var pos  = this.offset();\n      var target;\n\n      hovering = true;\n      if ( timeout ) {\n\tclearTimeout(timeout);\n\ttimeout = 0;\n      }\n\n      if ( (target=menu.data(\"target\")) )\n\ttarget.removeClass(\"render-selecting\");\n      menu.data(\"target\", elem);\n\n      menu.html(this.renderMulti('selectMenu'));\n      menu.css({ top:      pos.top + 5 + \"px\",\n                 left:     pos.left + 5 + \"px\"\n               }).show(400);\n\n      this.addClass(\"render-selecting\");\n    },\n\n    hideSelect: function(ev) {\n      resetHover();\n    },\n\n    /**\n     * Select the i-th (0-based) rendering alternative\n     * @param {Integer} i denotes the alternative\n     */\n    select: function(i) {\n      var data  = this.data(pluginName);\n\n      if ( data.current != i ) {\n\tvar child = this.children();\n\tvar how   = data.display[i];\n\n\t$(child[data.current]).hide(400);\n\t$(child[i]).show(400, function() { $(this).css(\"display\", how); });\n\tthis.css(\"display\", how);\n\tif ( $(child[i]).is(\"span.render-as-prolog\") ) {\n\t  this.attr(\"draggable\", false);\n\t} else {\n\t  this.attr(\"draggable\", true);\n\t}\n\n\tdata.current = i;\n      }\n\n      closeSelectMenu();\n    },\n\n    copy: function(i) {\n      var child = this.children();\n      var data  = this.data(pluginName);\n      var old   = data.current;\n\n      function selectElementText(el) {\n\tvar range = document.createRange();\n\trange.selectNodeContents(el);\n\tvar selection = window.getSelection();\n\tselection.removeAllRanges();\n\tselection.addRange(range);\n      }\n\n      this.renderMulti('select', i);\n      selectElementText(child[i]);\n      try {\n\tdocument.execCommand(\"copy\");\n      } catch(e) {\n\talert(\"Sorry, cannot copy text with this browser\");\n      }\n      this.renderMulti('select', old);\n\n      return this;\n    },\n\n    /**\n     * Download a rendered object.  The renderer can interact with this\n     * code by setting a class `export-dom` and an event-handler for the\n     * event `export-dom`. This handler is passed a plain object, for\n     * which is must set the properties `element`, `extensions` and\n     * `contentType`\n     */\n    download: function(i) {\n      var child = this.children();\n      var node  = $(child[i]);\n      var ext   = \"html\";\n      var data;\n\n      function aSupportsDownload() {\n\treturn $(\"<a>\")[0].download != undefined;\n      }\n\n      if ( node.hasClass(\"export-dom\") ) {\n\tvar r = {};\n\tnode = node.trigger(\"export-dom\", r);\n\tif ( r.element ) {\n\t  data = r.element.outerHTML;\n\t  ext  = r.extension||\"html\";\n\t  type = r.contentType||\"text/html\";\n\t} else {\n\t  alert(\"Failed to export rendered result\");\n\t}\n      } else if ( node.find(\"svg\").length == 1 ) {\n\tvar svg = node.find(\"svg\");\n\tif ( !svg.attr(\"xmlns\") )\n\t  svg.attr(\"xmlns\", \"http://www.w3.org/2000/svg\");\n\tdata = svg[0].outerHTML\n\text  = \"svg\";\n\ttype = \"image/svg+xml\";\n      } else {\n\tdata = node.html();\n\ttype = \"text/html\";\n      }\n\n      if ( !aSupportsDownload() )\n\ttype = \"application/octet-stream\";\n\n      console.log(type);\n\n      var blob = new Blob([data], {type:type});\n      var href = URL.createObjectURL(blob);\n      var filename = \"swish-rendered.\"+ext;\n      var a, input, btn;\n\n      var span = $.el.div({class:\"download\"},\n\t\t\t  btn = $.el.button({ type:\"button\", class:\"close\" }),\n\t\t\t  a = $.el.a({ href:href,\n\t\t\t               target:\"_blank\",\n\t\t\t\t       download:filename\n\t\t\t\t     },\n\t\t\t\t     \"Right click me to download as \"),\n\t\t\t  $.el.br(),\n\t\t\t  input = $.el.input({value:filename}));\n      this.append(span);\n      $(btn)\n\t.html(\"&times;\")\n\t.on(\"click\", function(ev) {\n\t  $(span).remove();\n\t});\n      $(input).on(\"change keyup paste\", function(ev) {\n\t$(a).attr(\"download\", $(input).val());\n\tev.preventDefault();\n\treturn false;\n      });\n\n      return this;\n    },\n\n    /**\n     * @return {String} native Prolog text for a multi-rendered block\n     */\n    prologText: function() {\n      return this.find(\"span.render-as-prolog\").text();\n    }\n  }; // methods\n\n\n  function selectMenu() {\n    var menu = $(\"#render-select\");\n\n    if ( !menu[0] ) {\n      menu = $($.el.form({ id:\"render-select\",\n                           style:\"display:none\"\n\t\t         }));\n\n      menu.on(\"click\", \"a\", function(ev) {\n\tvar a = $(ev.target).closest(\"a\");\n\tvar i = a.data(\"nr\");\n\n\tmenu.data(\"target\").renderMulti(a.data(\"action\"), i);\n\treturn false;\n      });\n      menu.on(\"click\", function() {\n\tvar r = $(\"input[name=render]:checked\", $(this)).val();\n\tmenu.data(\"target\").renderMulti('select', parseInt(r));\n      });\n      menu.hover(function() { hovering = true; startMenuTimeout(); },\n\t\t function() { resetHover(); });\n\n      $(\"body\").append(menu);\n    }\n\n    return menu;\n  }\n\n  function closeSelectMenu() {\n    if ( !hovering ) {\n      var menu = selectMenu();\n      var target = menu.data(\"target\");\n\n      if ( target ) {\n\ttarget.removeClass(\"render-selecting\");\n\tmenu.data(\"target\", null);\n      }\n      menu.hide(400);\n    }\n  }\n\n  function startMenuTimeout() {\n    timeout = setTimeout(function() {\n      closeSelectMenu();\n    }, 400);\n  }\n\n  function resetHover() {\n    hovering = false;\n    startMenuTimeout();\n  }\n\n  function dragStart(ev) {\n    var dt = ev.originalEvent.dataTransfer;\n    dt.setData(\"Text\", $(ev.target).renderMulti('prologText'));\n    return true;\n  }\n\n  /**\n   * <Class description>\n   *\n   * @class renderMulti\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.renderMulti = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n\n\n\n\n});\n\n","/**\n*\n* jquery.sparkline.js\n*\n* v2.1.2\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n*     * Redistributions of source code must retain the above copyright notice,\n*       this list of conditions and the following disclaimer.\n*     * Redistributions in binary form must reproduce the above copyright notice,\n*       this list of conditions and the following disclaimer in the documentation\n*       and/or other materials provided with the distribution.\n*     * Neither the name of Splunk Inc nor the names of its contributors may\n*       be used to endorse or promote products derived from this software without\n*       specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n*  $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*   <p>Sparkline: <span class=\"sparkline\">1,4,6,6,8,5,3,5</span></p>\n*   $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*    <p>Sparkline: <span id=\"sparkline1\">This text replaced if the browser is compatible</span></p>\n*    $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n*    $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*    <p>Sparkline: <span class=\"sparkline\"><!--1,4,6,6,8,5,3,5 --></span></p>\n*    <p>Sparkline: <span class=\"sparkline\" values=\"1,4,6,6,8,5,3,5\"></span></p>\n*    $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*   <p>Sparkline: <span class=\"sparkline\">1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5</span></p>\n*    $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as teh second argument to the sparkline function:\n*   $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself.  This feature is disabled by default though\n* as there's a slight performance overhead:\n*   $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*   <p>Sparkline: <span class=\"sparkline\" sparkType=\"bar\" sparkBarColor=\"red\">loading</span></p>\n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionPrefix)\n*\n* Supported options:\n*   lineColor - Color of the line used for the chart\n*   fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n*   width - Width of the chart - Defaults to 3 times the number of values in pixels\n*   height - Height of the chart - Defaults to the height of the containing element\n*   chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n*   chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n*   chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n*   chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n*   chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n*   composite - If true then don't erase any existing chart attached to the tag, but draw\n*           another chart over the top - Note that width and height are ignored if an\n*           existing chart is detected.\n*   tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n*   enableTagOptions - Whether to check tags for sparkline options\n*   tagOptionPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n*   disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n*           hidden dom element, avoding a browser reflow\n*   disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n*       making the plugin perform much like it did in 1.x\n*   disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n*   disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n*       defaults to false (highlights enabled)\n*   highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n*   tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n*   tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n*   tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n*   tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n*   tooltipFormatter  - Optional callback that allows you to override the HTML displayed in the tooltip\n*       callback is given arguments of (sparkline, options, fields)\n*   tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n*   tooltipFormat - A format string or SPFormat object  (or an array thereof for multiple entries)\n*       to control the format of the tooltip\n*   tooltipPrefix - A string to prepend to each field displayed in a tooltip\n*   tooltipSuffix - A string to append to each field displayed in a tooltip\n*   tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n*   tooltipValueLookups - An object or range map to map field values to tooltip strings\n*       (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n*   numberFormatter - Optional callback for formatting numbers in tooltips\n*   numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n*   numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n*   numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n*    line - Line chart.  Options:\n*       spotColor - Set to '' to not end each line in a circular spot\n*       minSpotColor - If set, color of spot at minimum value\n*       maxSpotColor - If set, color of spot at maximum value\n*       spotRadius - Radius in pixels\n*       lineWidth - Width of line in pixels\n*       normalRangeMin\n*       normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n*                      or expected range of values\n*       normalRangeColor - Color to use for the above bar\n*       drawNormalOnTop - Draw the normal range above the chart fill color if true\n*       defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n*       highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n*       highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n*       valueSpots - Specify which points to draw spots on, and in which color.  Accepts a range map\n*\n*   bar - Bar chart.  Options:\n*       barColor - Color of bars for postive values\n*       negBarColor - Color of bars for negative values\n*       zeroColor - Color of bars with zero values\n*       nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n*       barWidth - Width of bars in pixels\n*       colorMap - Optional mappnig of values to colors to override the *BarColor values above\n*                  can be an Array of values to control the color of individual bars or a range map\n*                  to specify colors for individual ranges of values\n*       barSpacing - Gap between bars in pixels\n*       zeroAxis - Centers the y-axis around zero if true\n*\n*   tristate - Charts values of win (>0), lose (<0) or draw (=0)\n*       posBarColor - Color of win values\n*       negBarColor - Color of lose values\n*       zeroBarColor - Color of draw values\n*       barWidth - Width of bars in pixels\n*       barSpacing - Gap between bars in pixels\n*       colorMap - Optional mappnig of values to colors to override the *BarColor values above\n*                  can be an Array of values to control the color of individual bars or a range map\n*                  to specify colors for individual ranges of values\n*\n*   discrete - Options:\n*       lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n*       thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n*       thresholdColor\n*\n*   bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n*       options:\n*       targetColor - The color of the vertical target marker\n*       targetWidth - The width of the target marker in pixels\n*       performanceColor - The color of the performance measure horizontal bar\n*       rangeColors - Colors to use for each qualitative range background color\n*\n*   pie - Pie chart. Options:\n*       sliceColors - An array of colors to use for pie slices\n*       offset - Angle in degrees to offset the first slice - Try -90 or +90\n*       borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n*       borderColor - Color to use for the pie chart border - Defaults to #000\n*\n*   box - Box plot. Options:\n*       raw - Set to true to supply pre-computed plot points as values\n*             values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n*             When set to false you can supply any number of values and the box plot will\n*             be computed for you.  Default is false.\n*       showOutliers - Set to true (default) to display outliers as circles\n*       outlierIQR - Interquartile range used to determine outliers.  Default 1.5\n*       boxLineColor - Outline color of the box\n*       boxFillColor - Fill color for the box\n*       whiskerColor - Line color used for whiskers\n*       outlierLineColor - Outline color of outlier circles\n*       outlierFillColor - Fill color of the outlier circles\n*       spotRadius - Radius of outlier circles\n*       medianColor - Line color of the median line\n*       target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n*   Examples:\n*   $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n*   $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n*   $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n*   $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n*   $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n*   $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n    if(typeof define === 'function' && define.amd) {\n        define('sparkline',['jquery'], factory);\n    } else if (jQuery && !jQuery.fn.sparkline) {\n        factory(jQuery);\n    }\n}\n(function($) {\n    'use strict';\n\n    var UNSET_OPTION = {},\n        getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n        remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n        MouseHandler, Tooltip, barHighlightMixin,\n        line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n        VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n    /**\n     * Default configuration settings\n     */\n    getDefaults = function () {\n        return {\n            // Settings common to most/all chart types\n            common: {\n                type: 'line',\n                lineColor: '#00f',\n                fillColor: '#cdf',\n                defaultPixelsPerValue: 3,\n                width: 'auto',\n                height: 'auto',\n                composite: false,\n                tagValuesAttribute: 'values',\n                tagOptionsPrefix: 'spark',\n                enableTagOptions: false,\n                enableHighlight: true,\n                highlightLighten: 1.4,\n                tooltipSkipNull: true,\n                tooltipPrefix: '',\n                tooltipSuffix: '',\n                disableHiddenCheck: false,\n                numberFormatter: false,\n                numberDigitGroupCount: 3,\n                numberDigitGroupSep: ',',\n                numberDecimalMark: '.',\n                disableTooltips: false,\n                disableInteraction: false\n            },\n            // Defaults for line charts\n            line: {\n                spotColor: '#f80',\n                highlightSpotColor: '#5f5',\n                highlightLineColor: '#f22',\n                spotRadius: 1.5,\n                minSpotColor: '#f80',\n                maxSpotColor: '#f80',\n                lineWidth: 1,\n                normalRangeMin: undefined,\n                normalRangeMax: undefined,\n                normalRangeColor: '#ccc',\n                drawNormalOnTop: false,\n                chartRangeMin: undefined,\n                chartRangeMax: undefined,\n                chartRangeMinX: undefined,\n                chartRangeMaxX: undefined,\n                tooltipFormat: new SPFormat('<span style=\"color: {{color}}\">&#9679;</span> {{prefix}}{{y}}{{suffix}}')\n            },\n            // Defaults for bar charts\n            bar: {\n                barColor: '#3366cc',\n                negBarColor: '#f44',\n                stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n                    '#dd4477', '#0099c6', '#990099'],\n                zeroColor: undefined,\n                nullColor: undefined,\n                zeroAxis: true,\n                barWidth: 4,\n                barSpacing: 1,\n                chartRangeMax: undefined,\n                chartRangeMin: undefined,\n                chartRangeClip: false,\n                colorMap: undefined,\n                tooltipFormat: new SPFormat('<span style=\"color: {{color}}\">&#9679;</span> {{prefix}}{{value}}{{suffix}}')\n            },\n            // Defaults for tristate charts\n            tristate: {\n                barWidth: 4,\n                barSpacing: 1,\n                posBarColor: '#6f6',\n                negBarColor: '#f44',\n                zeroBarColor: '#999',\n                colorMap: {},\n                tooltipFormat: new SPFormat('<span style=\"color: {{color}}\">&#9679;</span> {{value:map}}'),\n                tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n            },\n            // Defaults for discrete charts\n            discrete: {\n                lineHeight: 'auto',\n                thresholdColor: undefined,\n                thresholdValue: 0,\n                chartRangeMax: undefined,\n                chartRangeMin: undefined,\n                chartRangeClip: false,\n                tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n            },\n            // Defaults for bullet charts\n            bullet: {\n                targetColor: '#f33',\n                targetWidth: 3, // width of the target bar in pixels\n                performanceColor: '#33f',\n                rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n                base: undefined, // set this to a number to change the base start number\n                tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n                tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n            },\n            // Defaults for pie charts\n            pie: {\n                offset: 0,\n                sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n                    '#dd4477', '#0099c6', '#990099'],\n                borderWidth: 0,\n                borderColor: '#000',\n                tooltipFormat: new SPFormat('<span style=\"color: {{color}}\">&#9679;</span> {{value}} ({{percent.1}}%)')\n            },\n            // Defaults for box plots\n            box: {\n                raw: false,\n                boxLineColor: '#000',\n                boxFillColor: '#cdf',\n                whiskerColor: '#000',\n                outlierLineColor: '#333',\n                outlierFillColor: '#fff',\n                medianColor: '#f00',\n                showOutliers: true,\n                outlierIQR: 1.5,\n                spotRadius: 1.5,\n                target: undefined,\n                targetColor: '#4a2',\n                chartRangeMax: undefined,\n                chartRangeMin: undefined,\n                tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n                tooltipFormatFieldlistKey: 'field',\n                tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n                    uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n                    lw: 'Left Whisker', rw: 'Right Whisker'} }\n            }\n        };\n    };\n\n    // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n    defaultStyles = '.jqstooltip { ' +\n            'position: absolute;' +\n            'left: 0px;' +\n            'top: 0px;' +\n            'visibility: hidden;' +\n            'background: rgb(0, 0, 0) transparent;' +\n            'background-color: rgba(0,0,0,0.6);' +\n            'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n            '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n            'color: white;' +\n            'font: 10px arial, san serif;' +\n            'text-align: left;' +\n            'white-space: nowrap;' +\n            'padding: 5px;' +\n            'border: 1px solid white;' +\n            'z-index: 10000;' +\n            '}' +\n            '.jqsfield { ' +\n            'color: white;' +\n            'font: 10px arial, san serif;' +\n            'text-align: left;' +\n            '}';\n\n    /**\n     * Utilities\n     */\n\n    createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n        var Class, args;\n        Class = function () {\n            this.init.apply(this, arguments);\n        };\n        if (arguments.length > 1) {\n            if (arguments[0]) {\n                Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n                Class._super = arguments[0].prototype;\n            } else {\n                Class.prototype = arguments[arguments.length - 1];\n            }\n            if (arguments.length > 2) {\n                args = Array.prototype.slice.call(arguments, 1, -1);\n                args.unshift(Class.prototype);\n                $.extend.apply($, args);\n            }\n        } else {\n            Class.prototype = arguments[0];\n        }\n        Class.prototype.cls = Class;\n        return Class;\n    };\n\n    /**\n     * Wraps a format string for tooltips\n     * {{x}}\n     * {{x.2}\n     * {{x:months}}\n     */\n    $.SPFormatClass = SPFormat = createClass({\n        fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n        precre: /(\\w+)\\.(\\d+)/,\n\n        init: function (format, fclass) {\n            this.format = format;\n            this.fclass = fclass;\n        },\n\n        render: function (fieldset, lookups, options) {\n            var self = this,\n                fields = fieldset,\n                match, token, lookupkey, fieldvalue, prec;\n            return this.format.replace(this.fre, function () {\n                var lookup;\n                token = arguments[1];\n                lookupkey = arguments[3];\n                match = self.precre.exec(token);\n                if (match) {\n                    prec = match[2];\n                    token = match[1];\n                } else {\n                    prec = false;\n                }\n                fieldvalue = fields[token];\n                if (fieldvalue === undefined) {\n                    return '';\n                }\n                if (lookupkey && lookups && lookups[lookupkey]) {\n                    lookup = lookups[lookupkey];\n                    if (lookup.get) { // RangeMap\n                        return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n                    } else {\n                        return lookups[lookupkey][fieldvalue] || fieldvalue;\n                    }\n                }\n                if (isNumber(fieldvalue)) {\n                    if (options.get('numberFormatter')) {\n                        fieldvalue = options.get('numberFormatter')(fieldvalue);\n                    } else {\n                        fieldvalue = formatNumber(fieldvalue, prec,\n                            options.get('numberDigitGroupCount'),\n                            options.get('numberDigitGroupSep'),\n                            options.get('numberDecimalMark'));\n                    }\n                }\n                return fieldvalue;\n            });\n        }\n    });\n\n    // convience method to avoid needing the new operator\n    $.spformat = function(format, fclass) {\n        return new SPFormat(format, fclass);\n    };\n\n    clipval = function (val, min, max) {\n        if (val < min) {\n            return min;\n        }\n        if (val > max) {\n            return max;\n        }\n        return val;\n    };\n\n    quartile = function (values, q) {\n        var vl;\n        if (q === 2) {\n            vl = Math.floor(values.length / 2);\n            return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n        } else {\n            if (values.length % 2 ) { // odd\n                vl = (values.length * q + q) / 4;\n                return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n            } else { //even\n                vl = (values.length * q + 2) / 4;\n                return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 :  values[vl-1];\n\n            }\n        }\n    };\n\n    normalizeValue = function (val) {\n        var nf;\n        switch (val) {\n            case 'undefined':\n                val = undefined;\n                break;\n            case 'null':\n                val = null;\n                break;\n            case 'true':\n                val = true;\n                break;\n            case 'false':\n                val = false;\n                break;\n            default:\n                nf = parseFloat(val);\n                if (val == nf) {\n                    val = nf;\n                }\n        }\n        return val;\n    };\n\n    normalizeValues = function (vals) {\n        var i, result = [];\n        for (i = vals.length; i--;) {\n            result[i] = normalizeValue(vals[i]);\n        }\n        return result;\n    };\n\n    remove = function (vals, filter) {\n        var i, vl, result = [];\n        for (i = 0, vl = vals.length; i < vl; i++) {\n            if (vals[i] !== filter) {\n                result.push(vals[i]);\n            }\n        }\n        return result;\n    };\n\n    isNumber = function (num) {\n        return !isNaN(parseFloat(num)) && isFinite(num);\n    };\n\n    formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n        var p, i;\n        num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n        p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n        if (p < num.length) {\n            num[p] = decsep;\n        }\n        for (i = p - groupsize; i > 0; i -= groupsize) {\n            num.splice(i, 0, groupsep);\n        }\n        return num.join('');\n    };\n\n    // determine if all values of an array match a value\n    // returns true if the array is empty\n    all = function (val, arr, ignoreNull) {\n        var i;\n        for (i = arr.length; i--; ) {\n            if (ignoreNull && arr[i] === null) continue;\n            if (arr[i] !== val) {\n                return false;\n            }\n        }\n        return true;\n    };\n\n    // sums the numeric values in an array, ignoring other values\n    sum = function (vals) {\n        var total = 0, i;\n        for (i = vals.length; i--;) {\n            total += typeof vals[i] === 'number' ? vals[i] : 0;\n        }\n        return total;\n    };\n\n    ensureArray = function (val) {\n        return $.isArray(val) ? val : [val];\n    };\n\n    // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n    addCSS = function(css) {\n        var tag;\n        //if ('\\v' == 'v') /* ie only */ {\n        if (document.createStyleSheet) {\n            document.createStyleSheet().cssText = css;\n        } else {\n            tag = document.createElement('style');\n            tag.type = 'text/css';\n            document.getElementsByTagName('head')[0].appendChild(tag);\n            tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n        }\n    };\n\n    // Provide a cross-browser interface to a few simple drawing primitives\n    $.fn.simpledraw = function (width, height, useExisting, interact) {\n        var target, mhandler;\n        if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n            return target;\n        }\n\n        if ($.fn.sparkline.canvas === false) {\n            // We've already determined that neither Canvas nor VML are available\n            return false;\n\n        } else if ($.fn.sparkline.canvas === undefined) {\n            // No function defined yet -- need to see if we support Canvas or VML\n            var el = document.createElement('canvas');\n            if (!!(el.getContext && el.getContext('2d'))) {\n                // Canvas is available\n                $.fn.sparkline.canvas = function(width, height, target, interact) {\n                    return new VCanvas_canvas(width, height, target, interact);\n                };\n            } else if (document.namespaces && !document.namespaces.v) {\n                // VML is available\n                document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n                $.fn.sparkline.canvas = function(width, height, target, interact) {\n                    return new VCanvas_vml(width, height, target);\n                };\n            } else {\n                // Neither Canvas nor VML are available\n                $.fn.sparkline.canvas = false;\n                return false;\n            }\n        }\n\n        if (width === undefined) {\n            width = $(this).innerWidth();\n        }\n        if (height === undefined) {\n            height = $(this).innerHeight();\n        }\n\n        target = $.fn.sparkline.canvas(width, height, this, interact);\n\n        mhandler = $(this).data('_jqs_mhandler');\n        if (mhandler) {\n            mhandler.registerCanvas(target);\n        }\n        return target;\n    };\n\n    $.fn.cleardraw = function () {\n        var target = this.data('_jqs_vcanvas');\n        if (target) {\n            target.reset();\n        }\n    };\n\n    $.RangeMapClass = RangeMap = createClass({\n        init: function (map) {\n            var key, range, rangelist = [];\n            for (key in map) {\n                if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n                    range = key.split(':');\n                    range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n                    range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n                    range[2] = map[key];\n                    rangelist.push(range);\n                }\n            }\n            this.map = map;\n            this.rangelist = rangelist || false;\n        },\n\n        get: function (value) {\n            var rangelist = this.rangelist,\n                i, range, result;\n            if ((result = this.map[value]) !== undefined) {\n                return result;\n            }\n            if (rangelist) {\n                for (i = rangelist.length; i--;) {\n                    range = rangelist[i];\n                    if (range[0] <= value && range[1] >= value) {\n                        return range[2];\n                    }\n                }\n            }\n            return undefined;\n        }\n    });\n\n    // Convenience function\n    $.range_map = function(map) {\n        return new RangeMap(map);\n    };\n\n    MouseHandler = createClass({\n        init: function (el, options) {\n            var $el = $(el);\n            this.$el = $el;\n            this.options = options;\n            this.currentPageX = 0;\n            this.currentPageY = 0;\n            this.el = el;\n            this.splist = [];\n            this.tooltip = null;\n            this.over = false;\n            this.displayTooltips = !options.get('disableTooltips');\n            this.highlightEnabled = !options.get('disableHighlight');\n        },\n\n        registerSparkline: function (sp) {\n            this.splist.push(sp);\n            if (this.over) {\n                this.updateDisplay();\n            }\n        },\n\n        registerCanvas: function (canvas) {\n            var $canvas = $(canvas.canvas);\n            this.canvas = canvas;\n            this.$canvas = $canvas;\n            $canvas.mouseenter($.proxy(this.mouseenter, this));\n            $canvas.mouseleave($.proxy(this.mouseleave, this));\n            $canvas.click($.proxy(this.mouseclick, this));\n        },\n\n        reset: function (removeTooltip) {\n            this.splist = [];\n            if (this.tooltip && removeTooltip) {\n                this.tooltip.remove();\n                this.tooltip = undefined;\n            }\n        },\n\n        mouseclick: function (e) {\n            var clickEvent = $.Event('sparklineClick');\n            clickEvent.originalEvent = e;\n            clickEvent.sparklines = this.splist;\n            this.$el.trigger(clickEvent);\n        },\n\n        mouseenter: function (e) {\n            $(document.body).unbind('mousemove.jqs');\n            $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n            this.over = true;\n            this.currentPageX = e.pageX;\n            this.currentPageY = e.pageY;\n            this.currentEl = e.target;\n            if (!this.tooltip && this.displayTooltips) {\n                this.tooltip = new Tooltip(this.options);\n                this.tooltip.updatePosition(e.pageX, e.pageY);\n            }\n            this.updateDisplay();\n        },\n\n        mouseleave: function () {\n            $(document.body).unbind('mousemove.jqs');\n            var splist = this.splist,\n                 spcount = splist.length,\n                 needsRefresh = false,\n                 sp, i;\n            this.over = false;\n            this.currentEl = null;\n\n            if (this.tooltip) {\n                this.tooltip.remove();\n                this.tooltip = null;\n            }\n\n            for (i = 0; i < spcount; i++) {\n                sp = splist[i];\n                if (sp.clearRegionHighlight()) {\n                    needsRefresh = true;\n                }\n            }\n\n            if (needsRefresh) {\n                this.canvas.render();\n            }\n        },\n\n        mousemove: function (e) {\n            this.currentPageX = e.pageX;\n            this.currentPageY = e.pageY;\n            this.currentEl = e.target;\n            if (this.tooltip) {\n                this.tooltip.updatePosition(e.pageX, e.pageY);\n            }\n            this.updateDisplay();\n        },\n\n        updateDisplay: function () {\n            var splist = this.splist,\n                 spcount = splist.length,\n                 needsRefresh = false,\n                 offset = this.$canvas.offset(),\n                 localX = this.currentPageX - offset.left,\n                 localY = this.currentPageY - offset.top,\n                 tooltiphtml, sp, i, result, changeEvent;\n            if (!this.over) {\n                return;\n            }\n            for (i = 0; i < spcount; i++) {\n                sp = splist[i];\n                result = sp.setRegionHighlight(this.currentEl, localX, localY);\n                if (result) {\n                    needsRefresh = true;\n                }\n            }\n            if (needsRefresh) {\n                changeEvent = $.Event('sparklineRegionChange');\n                changeEvent.sparklines = this.splist;\n                this.$el.trigger(changeEvent);\n                if (this.tooltip) {\n                    tooltiphtml = '';\n                    for (i = 0; i < spcount; i++) {\n                        sp = splist[i];\n                        tooltiphtml += sp.getCurrentRegionTooltip();\n                    }\n                    this.tooltip.setContent(tooltiphtml);\n                }\n                if (!this.disableHighlight) {\n                    this.canvas.render();\n                }\n            }\n            if (result === null) {\n                this.mouseleave();\n            }\n        }\n    });\n\n\n    Tooltip = createClass({\n        sizeStyle: 'position: static !important;' +\n            'display: block !important;' +\n            'visibility: hidden !important;' +\n            'float: left !important;',\n\n        init: function (options) {\n            var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n                sizetipStyle = this.sizeStyle,\n                offset;\n            this.container = options.get('tooltipContainer') || document.body;\n            this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n            this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n            // remove any previous lingering tooltip\n            $('#jqssizetip').remove();\n            $('#jqstooltip').remove();\n            this.sizetip = $('<div/>', {\n                id: 'jqssizetip',\n                style: sizetipStyle,\n                'class': tooltipClassname\n            });\n            this.tooltip = $('<div/>', {\n                id: 'jqstooltip',\n                'class': tooltipClassname\n            }).appendTo(this.container);\n            // account for the container's location\n            offset = this.tooltip.offset();\n            this.offsetLeft = offset.left;\n            this.offsetTop = offset.top;\n            this.hidden = true;\n            $(window).unbind('resize.jqs scroll.jqs');\n            $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n            this.updateWindowDims();\n        },\n\n        updateWindowDims: function () {\n            this.scrollTop = $(window).scrollTop();\n            this.scrollLeft = $(window).scrollLeft();\n            this.scrollRight = this.scrollLeft + $(window).width();\n            this.updatePosition();\n        },\n\n        getSize: function (content) {\n            this.sizetip.html(content).appendTo(this.container);\n            this.width = this.sizetip.width() + 1;\n            this.height = this.sizetip.height();\n            this.sizetip.remove();\n        },\n\n        setContent: function (content) {\n            if (!content) {\n                this.tooltip.css('visibility', 'hidden');\n                this.hidden = true;\n                return;\n            }\n            this.getSize(content);\n            this.tooltip.html(content)\n                .css({\n                    'width': this.width,\n                    'height': this.height,\n                    'visibility': 'visible'\n                });\n            if (this.hidden) {\n                this.hidden = false;\n                this.updatePosition();\n            }\n        },\n\n        updatePosition: function (x, y) {\n            if (x === undefined) {\n                if (this.mousex === undefined) {\n                    return;\n                }\n                x = this.mousex - this.offsetLeft;\n                y = this.mousey - this.offsetTop;\n\n            } else {\n                this.mousex = x = x - this.offsetLeft;\n                this.mousey = y = y - this.offsetTop;\n            }\n            if (!this.height || !this.width || this.hidden) {\n                return;\n            }\n\n            y -= this.height + this.tooltipOffsetY;\n            x += this.tooltipOffsetX;\n\n            if (y < this.scrollTop) {\n                y = this.scrollTop;\n            }\n            if (x < this.scrollLeft) {\n                x = this.scrollLeft;\n            } else if (x + this.width > this.scrollRight) {\n                x = this.scrollRight - this.width;\n            }\n\n            this.tooltip.css({\n                'left': x,\n                'top': y\n            });\n        },\n\n        remove: function () {\n            this.tooltip.remove();\n            this.sizetip.remove();\n            this.sizetip = this.tooltip = undefined;\n            $(window).unbind('resize.jqs scroll.jqs');\n        }\n    });\n\n    initStyles = function() {\n        addCSS(defaultStyles);\n    };\n\n    $(initStyles);\n\n    pending = [];\n    $.fn.sparkline = function (userValues, userOptions) {\n        return this.each(function () {\n            var options = new $.fn.sparkline.options(this, userOptions),\n                 $this = $(this),\n                 render, i;\n            render = function () {\n                var values, width, height, tmp, mhandler, sp, vals;\n                if (userValues === 'html' || userValues === undefined) {\n                    vals = this.getAttribute(options.get('tagValuesAttribute'));\n                    if (vals === undefined || vals === null) {\n                        vals = $this.html();\n                    }\n                    values = vals.replace(/(^\\s*<!--)|(-->\\s*$)|\\s+/g, '').split(',');\n                } else {\n                    values = userValues;\n                }\n\n                width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n                if (options.get('height') === 'auto') {\n                    if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n                        // must be a better way to get the line height\n                        tmp = document.createElement('span');\n                        tmp.innerHTML = 'a';\n                        $this.html(tmp);\n                        height = $(tmp).innerHeight() || $(tmp).height();\n                        $(tmp).remove();\n                        tmp = null;\n                    }\n                } else {\n                    height = options.get('height');\n                }\n\n                if (!options.get('disableInteraction')) {\n                    mhandler = $.data(this, '_jqs_mhandler');\n                    if (!mhandler) {\n                        mhandler = new MouseHandler(this, options);\n                        $.data(this, '_jqs_mhandler', mhandler);\n                    } else if (!options.get('composite')) {\n                        mhandler.reset();\n                    }\n                } else {\n                    mhandler = false;\n                }\n\n                if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n                    if (!$.data(this, '_jqs_errnotify')) {\n                        alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n                        $.data(this, '_jqs_errnotify', true);\n                    }\n                    return;\n                }\n\n                sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n                sp.render();\n\n                if (mhandler) {\n                    mhandler.registerSparkline(sp);\n                }\n            };\n            if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n                if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n                    // remove any existing references to the element\n                    for (i = pending.length; i; i--) {\n                        if (pending[i - 1][0] == this) {\n                            pending.splice(i - 1, 1);\n                        }\n                    }\n                }\n                pending.push([this, render]);\n                $.data(this, '_jqs_pending', true);\n            } else {\n                render.call(this);\n            }\n        });\n    };\n\n    $.fn.sparkline.defaults = getDefaults();\n\n\n    $.sparkline_display_visible = function () {\n        var el, i, pl;\n        var done = [];\n        for (i = 0, pl = pending.length; i < pl; i++) {\n            el = pending[i][0];\n            if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n                pending[i][1].call(el);\n                $.data(pending[i][0], '_jqs_pending', false);\n                done.push(i);\n            } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n                // element has been inserted and removed from the DOM\n                // If it was not yet inserted into the dom then the .data request\n                // will return true.\n                // removing from the dom causes the data to be removed.\n                $.data(pending[i][0], '_jqs_pending', false);\n                done.push(i);\n            }\n        }\n        for (i = done.length; i; i--) {\n            pending.splice(done[i - 1], 1);\n        }\n    };\n\n\n    /**\n     * User option handler\n     */\n    $.fn.sparkline.options = createClass({\n        init: function (tag, userOptions) {\n            var extendedOptions, defaults, base, tagOptionType;\n            this.userOptions = userOptions = userOptions || {};\n            this.tag = tag;\n            this.tagValCache = {};\n            defaults = $.fn.sparkline.defaults;\n            base = defaults.common;\n            this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n            tagOptionType = this.getTagSetting('type');\n            if (tagOptionType === UNSET_OPTION) {\n                extendedOptions = defaults[userOptions.type || base.type];\n            } else {\n                extendedOptions = defaults[tagOptionType];\n            }\n            this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n        },\n\n\n        getTagSetting: function (key) {\n            var prefix = this.tagOptionsPrefix,\n                val, i, pairs, keyval;\n            if (prefix === false || prefix === undefined) {\n                return UNSET_OPTION;\n            }\n            if (this.tagValCache.hasOwnProperty(key)) {\n                val = this.tagValCache.key;\n            } else {\n                val = this.tag.getAttribute(prefix + key);\n                if (val === undefined || val === null) {\n                    val = UNSET_OPTION;\n                } else if (val.substr(0, 1) === '[') {\n                    val = val.substr(1, val.length - 2).split(',');\n                    for (i = val.length; i--;) {\n                        val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n                    }\n                } else if (val.substr(0, 1) === '{') {\n                    pairs = val.substr(1, val.length - 2).split(',');\n                    val = {};\n                    for (i = pairs.length; i--;) {\n                        keyval = pairs[i].split(':', 2);\n                        val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n                    }\n                } else {\n                    val = normalizeValue(val);\n                }\n                this.tagValCache.key = val;\n            }\n            return val;\n        },\n\n        get: function (key, defaultval) {\n            var tagOption = this.getTagSetting(key),\n                result;\n            if (tagOption !== UNSET_OPTION) {\n                return tagOption;\n            }\n            return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n        }\n    });\n\n\n    $.fn.sparkline._base = createClass({\n        disabled: false,\n\n        init: function (el, values, options, width, height) {\n            this.el = el;\n            this.$el = $(el);\n            this.values = values;\n            this.options = options;\n            this.width = width;\n            this.height = height;\n            this.currentRegion = undefined;\n        },\n\n        /**\n         * Setup the canvas\n         */\n        initTarget: function () {\n            var interactive = !this.options.get('disableInteraction');\n            if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n                this.disabled = true;\n            } else {\n                this.canvasWidth = this.target.pixelWidth;\n                this.canvasHeight = this.target.pixelHeight;\n            }\n        },\n\n        /**\n         * Actually render the chart to the canvas\n         */\n        render: function () {\n            if (this.disabled) {\n                this.el.innerHTML = '';\n                return false;\n            }\n            return true;\n        },\n\n        /**\n         * Return a region id for a given x/y co-ordinate\n         */\n        getRegion: function (x, y) {\n        },\n\n        /**\n         * Highlight an item based on the moused-over x,y co-ordinate\n         */\n        setRegionHighlight: function (el, x, y) {\n            var currentRegion = this.currentRegion,\n                highlightEnabled = !this.options.get('disableHighlight'),\n                newRegion;\n            if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n                return null;\n            }\n            newRegion = this.getRegion(el, x, y);\n            if (currentRegion !== newRegion) {\n                if (currentRegion !== undefined && highlightEnabled) {\n                    this.removeHighlight();\n                }\n                this.currentRegion = newRegion;\n                if (newRegion !== undefined && highlightEnabled) {\n                    this.renderHighlight();\n                }\n                return true;\n            }\n            return false;\n        },\n\n        /**\n         * Reset any currently highlighted item\n         */\n        clearRegionHighlight: function () {\n            if (this.currentRegion !== undefined) {\n                this.removeHighlight();\n                this.currentRegion = undefined;\n                return true;\n            }\n            return false;\n        },\n\n        renderHighlight: function () {\n            this.changeHighlight(true);\n        },\n\n        removeHighlight: function () {\n            this.changeHighlight(false);\n        },\n\n        changeHighlight: function (highlight)  {},\n\n        /**\n         * Fetch the HTML to display as a tooltip\n         */\n        getCurrentRegionTooltip: function () {\n            var options = this.options,\n                header = '',\n                entries = [],\n                fields, formats, formatlen, fclass, text, i,\n                showFields, showFieldsKey, newFields, fv,\n                formatter, format, fieldlen, j;\n            if (this.currentRegion === undefined) {\n                return '';\n            }\n            fields = this.getCurrentRegionFields();\n            formatter = options.get('tooltipFormatter');\n            if (formatter) {\n                return formatter(this, options, fields);\n            }\n            if (options.get('tooltipChartTitle')) {\n                header += '<div class=\"jqs jqstitle\">' + options.get('tooltipChartTitle') + '</div>\\n';\n            }\n            formats = this.options.get('tooltipFormat');\n            if (!formats) {\n                return '';\n            }\n            if (!$.isArray(formats)) {\n                formats = [formats];\n            }\n            if (!$.isArray(fields)) {\n                fields = [fields];\n            }\n            showFields = this.options.get('tooltipFormatFieldlist');\n            showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n            if (showFields && showFieldsKey) {\n                // user-selected ordering of fields\n                newFields = [];\n                for (i = fields.length; i--;) {\n                    fv = fields[i][showFieldsKey];\n                    if ((j = $.inArray(fv, showFields)) != -1) {\n                        newFields[j] = fields[i];\n                    }\n                }\n                fields = newFields;\n            }\n            formatlen = formats.length;\n            fieldlen = fields.length;\n            for (i = 0; i < formatlen; i++) {\n                format = formats[i];\n                if (typeof format === 'string') {\n                    format = new SPFormat(format);\n                }\n                fclass = format.fclass || 'jqsfield';\n                for (j = 0; j < fieldlen; j++) {\n                    if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n                        $.extend(fields[j], {\n                            prefix: options.get('tooltipPrefix'),\n                            suffix: options.get('tooltipSuffix')\n                        });\n                        text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n                        entries.push('<div class=\"' + fclass + '\">' + text + '</div>');\n                    }\n                }\n            }\n            if (entries.length) {\n                return header + entries.join('\\n');\n            }\n            return '';\n        },\n\n        getCurrentRegionFields: function () {},\n\n        calcHighlightColor: function (color, options) {\n            var highlightColor = options.get('highlightColor'),\n                lighten = options.get('highlightLighten'),\n                parse, mult, rgbnew, i;\n            if (highlightColor) {\n                return highlightColor;\n            }\n            if (lighten) {\n                // extract RGB values\n                parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n                if (parse) {\n                    rgbnew = [];\n                    mult = color.length === 4 ? 16 : 1;\n                    for (i = 0; i < 3; i++) {\n                        rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n                    }\n                    return 'rgb(' + rgbnew.join(',') + ')';\n                }\n\n            }\n            return color;\n        }\n\n    });\n\n    barHighlightMixin = {\n        changeHighlight: function (highlight) {\n            var currentRegion = this.currentRegion,\n                target = this.target,\n                shapeids = this.regionShapes[currentRegion],\n                newShapes;\n            // will be null if the region value was null\n            if (shapeids) {\n                newShapes = this.renderRegion(currentRegion, highlight);\n                if ($.isArray(newShapes) || $.isArray(shapeids)) {\n                    target.replaceWithShapes(shapeids, newShapes);\n                    this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n                        return newShape.id;\n                    });\n                } else {\n                    target.replaceWithShape(shapeids, newShapes);\n                    this.regionShapes[currentRegion] = newShapes.id;\n                }\n            }\n        },\n\n        render: function () {\n            var values = this.values,\n                target = this.target,\n                regionShapes = this.regionShapes,\n                shapes, ids, i, j;\n\n            if (!this.cls._super.render.call(this)) {\n                return;\n            }\n            for (i = values.length; i--;) {\n                shapes = this.renderRegion(i);\n                if (shapes) {\n                    if ($.isArray(shapes)) {\n                        ids = [];\n                        for (j = shapes.length; j--;) {\n                            shapes[j].append();\n                            ids.push(shapes[j].id);\n                        }\n                        regionShapes[i] = ids;\n                    } else {\n                        shapes.append();\n                        regionShapes[i] = shapes.id; // store just the shapeid\n                    }\n                } else {\n                    // null value\n                    regionShapes[i] = null;\n                }\n            }\n            target.render();\n        }\n    };\n\n    /**\n     * Line charts\n     */\n    $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n        type: 'line',\n\n        init: function (el, values, options, width, height) {\n            line._super.init.call(this, el, values, options, width, height);\n            this.vertices = [];\n            this.regionMap = [];\n            this.xvalues = [];\n            this.yvalues = [];\n            this.yminmax = [];\n            this.hightlightSpotId = null;\n            this.lastShapeId = null;\n            this.initTarget();\n        },\n\n        getRegion: function (el, x, y) {\n            var i,\n                regionMap = this.regionMap; // maps regions to value positions\n            for (i = regionMap.length; i--;) {\n                if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n                    return regionMap[i][2];\n                }\n            }\n            return undefined;\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                isNull: this.yvalues[currentRegion] === null,\n                x: this.xvalues[currentRegion],\n                y: this.yvalues[currentRegion],\n                color: this.options.get('lineColor'),\n                fillColor: this.options.get('fillColor'),\n                offset: currentRegion\n            };\n        },\n\n        renderHighlight: function () {\n            var currentRegion = this.currentRegion,\n                target = this.target,\n                vertex = this.vertices[currentRegion],\n                options = this.options,\n                spotRadius = options.get('spotRadius'),\n                highlightSpotColor = options.get('highlightSpotColor'),\n                highlightLineColor = options.get('highlightLineColor'),\n                highlightSpot, highlightLine;\n\n            if (!vertex) {\n                return;\n            }\n            if (spotRadius && highlightSpotColor) {\n                highlightSpot = target.drawCircle(vertex[0], vertex[1],\n                    spotRadius, undefined, highlightSpotColor);\n                this.highlightSpotId = highlightSpot.id;\n                target.insertAfterShape(this.lastShapeId, highlightSpot);\n            }\n            if (highlightLineColor) {\n                highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n                    this.canvasTop + this.canvasHeight, highlightLineColor);\n                this.highlightLineId = highlightLine.id;\n                target.insertAfterShape(this.lastShapeId, highlightLine);\n            }\n        },\n\n        removeHighlight: function () {\n            var target = this.target;\n            if (this.highlightSpotId) {\n                target.removeShapeId(this.highlightSpotId);\n                this.highlightSpotId = null;\n            }\n            if (this.highlightLineId) {\n                target.removeShapeId(this.highlightLineId);\n                this.highlightLineId = null;\n            }\n        },\n\n        scanValues: function () {\n            var values = this.values,\n                valcount = values.length,\n                xvalues = this.xvalues,\n                yvalues = this.yvalues,\n                yminmax = this.yminmax,\n                i, val, isStr, isArray, sp;\n            for (i = 0; i < valcount; i++) {\n                val = values[i];\n                isStr = typeof(values[i]) === 'string';\n                isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n                sp = isStr && values[i].split(':');\n                if (isStr && sp.length === 2) { // x:y\n                    xvalues.push(Number(sp[0]));\n                    yvalues.push(Number(sp[1]));\n                    yminmax.push(Number(sp[1]));\n                } else if (isArray) {\n                    xvalues.push(val[0]);\n                    yvalues.push(val[1]);\n                    yminmax.push(val[1]);\n                } else {\n                    xvalues.push(i);\n                    if (values[i] === null || values[i] === 'null') {\n                        yvalues.push(null);\n                    } else {\n                        yvalues.push(Number(val));\n                        yminmax.push(Number(val));\n                    }\n                }\n            }\n            if (this.options.get('xvalues')) {\n                xvalues = this.options.get('xvalues');\n            }\n\n            this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n            this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n            this.maxx = Math.max.apply(Math, xvalues);\n            this.minx = Math.min.apply(Math, xvalues);\n\n            this.xvalues = xvalues;\n            this.yvalues = yvalues;\n            this.yminmax = yminmax;\n\n        },\n\n        processRangeOptions: function () {\n            var options = this.options,\n                normalRangeMin = options.get('normalRangeMin'),\n                normalRangeMax = options.get('normalRangeMax');\n\n            if (normalRangeMin !== undefined) {\n                if (normalRangeMin < this.miny) {\n                    this.miny = normalRangeMin;\n                }\n                if (normalRangeMax > this.maxy) {\n                    this.maxy = normalRangeMax;\n                }\n            }\n            if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n                this.miny = options.get('chartRangeMin');\n            }\n            if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n                this.maxy = options.get('chartRangeMax');\n            }\n            if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n                this.minx = options.get('chartRangeMinX');\n            }\n            if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n                this.maxx = options.get('chartRangeMaxX');\n            }\n\n        },\n\n        drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n            var normalRangeMin = this.options.get('normalRangeMin'),\n                normalRangeMax = this.options.get('normalRangeMax'),\n                ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n                height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n            this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n        },\n\n        render: function () {\n            var options = this.options,\n                target = this.target,\n                canvasWidth = this.canvasWidth,\n                canvasHeight = this.canvasHeight,\n                vertices = this.vertices,\n                spotRadius = options.get('spotRadius'),\n                regionMap = this.regionMap,\n                rangex, rangey, yvallast,\n                canvasTop, canvasLeft,\n                vertex, path, paths, x, y, xnext, xpos, xposnext,\n                last, next, yvalcount, lineShapes, fillShapes, plen,\n                valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n            if (!line._super.render.call(this)) {\n                return;\n            }\n\n            this.scanValues();\n            this.processRangeOptions();\n\n            xvalues = this.xvalues;\n            yvalues = this.yvalues;\n\n            if (!this.yminmax.length || this.yvalues.length < 2) {\n                // empty or all null valuess\n                return;\n            }\n\n            canvasTop = canvasLeft = 0;\n\n            rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n            rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n            yvallast = this.yvalues.length - 1;\n\n            if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n                spotRadius = 0;\n            }\n            if (spotRadius) {\n                // adjust the canvas size as required so that spots will fit\n                hlSpotsEnabled = options.get('highlightSpotColor') &&  !options.get('disableInteraction');\n                if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n                    canvasHeight -= Math.ceil(spotRadius);\n                }\n                if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n                    canvasHeight -= Math.ceil(spotRadius);\n                    canvasTop += Math.ceil(spotRadius);\n                }\n                if (hlSpotsEnabled ||\n                     ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n                    canvasLeft += Math.ceil(spotRadius);\n                    canvasWidth -= Math.ceil(spotRadius);\n                }\n                if (hlSpotsEnabled || options.get('spotColor') ||\n                    (options.get('minSpotColor') || options.get('maxSpotColor') &&\n                        (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n                    canvasWidth -= Math.ceil(spotRadius);\n                }\n            }\n\n\n            canvasHeight--;\n\n            if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n                this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n            }\n\n            path = [];\n            paths = [path];\n            last = next = null;\n            yvalcount = yvalues.length;\n            for (i = 0; i < yvalcount; i++) {\n                x = xvalues[i];\n                xnext = xvalues[i + 1];\n                y = yvalues[i];\n                xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n                xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n                next = xpos + ((xposnext - xpos) / 2);\n                regionMap[i] = [last || 0, next, i];\n                last = next;\n                if (y === null) {\n                    if (i) {\n                        if (yvalues[i - 1] !== null) {\n                            path = [];\n                            paths.push(path);\n                        }\n                        vertices.push(null);\n                    }\n                } else {\n                    if (y < this.miny) {\n                        y = this.miny;\n                    }\n                    if (y > this.maxy) {\n                        y = this.maxy;\n                    }\n                    if (!path.length) {\n                        // previous value was null\n                        path.push([xpos, canvasTop + canvasHeight]);\n                    }\n                    vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n                    path.push(vertex);\n                    vertices.push(vertex);\n                }\n            }\n\n            lineShapes = [];\n            fillShapes = [];\n            plen = paths.length;\n            for (i = 0; i < plen; i++) {\n                path = paths[i];\n                if (path.length) {\n                    if (options.get('fillColor')) {\n                        path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n                        fillShapes.push(path.slice(0));\n                        path.pop();\n                    }\n                    // if there's only a single point in this path, then we want to display it\n                    // as a vertical line which means we keep path[0]  as is\n                    if (path.length > 2) {\n                        // else we want the first value\n                        path[0] = [path[0][0], path[1][1]];\n                    }\n                    lineShapes.push(path);\n                }\n            }\n\n            // draw the fill first, then optionally the normal range, then the line on top of that\n            plen = fillShapes.length;\n            for (i = 0; i < plen; i++) {\n                target.drawShape(fillShapes[i],\n                    options.get('fillColor'), options.get('fillColor')).append();\n            }\n\n            if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n                this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n            }\n\n            plen = lineShapes.length;\n            for (i = 0; i < plen; i++) {\n                target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n                    options.get('lineWidth')).append();\n            }\n\n            if (spotRadius && options.get('valueSpots')) {\n                valueSpots = options.get('valueSpots');\n                if (valueSpots.get === undefined) {\n                    valueSpots = new RangeMap(valueSpots);\n                }\n                for (i = 0; i < yvalcount; i++) {\n                    color = valueSpots.get(yvalues[i]);\n                    if (color) {\n                        target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n                            canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n                            spotRadius, undefined,\n                            color).append();\n                    }\n                }\n\n            }\n            if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n                target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n                    canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n                    spotRadius, undefined,\n                    options.get('spotColor')).append();\n            }\n            if (this.maxy !== this.minyorg) {\n                if (spotRadius && options.get('minSpotColor')) {\n                    x = xvalues[$.inArray(this.minyorg, yvalues)];\n                    target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n                        canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n                        spotRadius, undefined,\n                        options.get('minSpotColor')).append();\n                }\n                if (spotRadius && options.get('maxSpotColor')) {\n                    x = xvalues[$.inArray(this.maxyorg, yvalues)];\n                    target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n                        canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n                        spotRadius, undefined,\n                        options.get('maxSpotColor')).append();\n                }\n            }\n\n            this.lastShapeId = target.getLastShapeId();\n            this.canvasTop = canvasTop;\n            target.render();\n        }\n    });\n\n    /**\n     * Bar charts\n     */\n    $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n        type: 'bar',\n\n        init: function (el, values, options, width, height) {\n            var barWidth = parseInt(options.get('barWidth'), 10),\n                barSpacing = parseInt(options.get('barSpacing'), 10),\n                chartRangeMin = options.get('chartRangeMin'),\n                chartRangeMax = options.get('chartRangeMax'),\n                chartRangeClip = options.get('chartRangeClip'),\n                stackMin = Infinity,\n                stackMax = -Infinity,\n                isStackString, groupMin, groupMax, stackRanges,\n                numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n                stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n            bar._super.init.call(this, el, values, options, width, height);\n\n            // scan values to determine whether to stack bars\n            for (i = 0, vlen = values.length; i < vlen; i++) {\n                val = values[i];\n                isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n                if (isStackString || $.isArray(val)) {\n                    stacked = true;\n                    if (isStackString) {\n                        val = values[i] = normalizeValues(val.split(':'));\n                    }\n                    val = remove(val, null); // min/max will treat null as zero\n                    groupMin = Math.min.apply(Math, val);\n                    groupMax = Math.max.apply(Math, val);\n                    if (groupMin < stackMin) {\n                        stackMin = groupMin;\n                    }\n                    if (groupMax > stackMax) {\n                        stackMax = groupMax;\n                    }\n                }\n            }\n\n            this.stacked = stacked;\n            this.regionShapes = {};\n            this.barWidth = barWidth;\n            this.barSpacing = barSpacing;\n            this.totalBarWidth = barWidth + barSpacing;\n            this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n            this.initTarget();\n\n            if (chartRangeClip) {\n                clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n                clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n            }\n\n            numValues = [];\n            stackRanges = stacked ? [] : numValues;\n            var stackTotals = [];\n            var stackRangesNeg = [];\n            for (i = 0, vlen = values.length; i < vlen; i++) {\n                if (stacked) {\n                    vlist = values[i];\n                    values[i] = svals = [];\n                    stackTotals[i] = 0;\n                    stackRanges[i] = stackRangesNeg[i] = 0;\n                    for (j = 0, slen = vlist.length; j < slen; j++) {\n                        val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n                        if (val !== null) {\n                            if (val > 0) {\n                                stackTotals[i] += val;\n                            }\n                            if (stackMin < 0 && stackMax > 0) {\n                                if (val < 0) {\n                                    stackRangesNeg[i] += Math.abs(val);\n                                } else {\n                                    stackRanges[i] += val;\n                                }\n                            } else {\n                                stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n                            }\n                            numValues.push(val);\n                        }\n                    }\n                } else {\n                    val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n                    val = values[i] = normalizeValue(val);\n                    if (val !== null) {\n                        numValues.push(val);\n                    }\n                }\n            }\n            this.max = max = Math.max.apply(Math, numValues);\n            this.min = min = Math.min.apply(Math, numValues);\n            this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n            this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n            if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n                min = options.get('chartRangeMin');\n            }\n            if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n                max = options.get('chartRangeMax');\n            }\n\n            this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n            if (min <= 0 && max >= 0 && zeroAxis) {\n                xaxisOffset = 0;\n            } else if (zeroAxis == false) {\n                xaxisOffset = min;\n            } else if (min > 0) {\n                xaxisOffset = min;\n            } else {\n                xaxisOffset = max;\n            }\n            this.xaxisOffset = xaxisOffset;\n\n            range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n            // as we plot zero/min values a single pixel line, we add a pixel to all other\n            // values - Reduce the effective canvas size to suit\n            this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n            if (min < xaxisOffset) {\n                yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n                yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n                if (yoffset !== Math.ceil(yoffset)) {\n                    this.canvasHeightEf -= 2;\n                    yoffset = Math.ceil(yoffset);\n                }\n            } else {\n                yoffset = this.canvasHeight;\n            }\n            this.yoffset = yoffset;\n\n            if ($.isArray(options.get('colorMap'))) {\n                this.colorMapByIndex = options.get('colorMap');\n                this.colorMapByValue = null;\n            } else {\n                this.colorMapByIndex = null;\n                this.colorMapByValue = options.get('colorMap');\n                if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n                    this.colorMapByValue = new RangeMap(this.colorMapByValue);\n                }\n            }\n\n            this.range = range;\n        },\n\n        getRegion: function (el, x, y) {\n            var result = Math.floor(x / this.totalBarWidth);\n            return (result < 0 || result >= this.values.length) ? undefined : result;\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion,\n                values = ensureArray(this.values[currentRegion]),\n                result = [],\n                value, i;\n            for (i = values.length; i--;) {\n                value = values[i];\n                result.push({\n                    isNull: value === null,\n                    value: value,\n                    color: this.calcColor(i, value, currentRegion),\n                    offset: currentRegion\n                });\n            }\n            return result;\n        },\n\n        calcColor: function (stacknum, value, valuenum) {\n            var colorMapByIndex = this.colorMapByIndex,\n                colorMapByValue = this.colorMapByValue,\n                options = this.options,\n                color, newColor;\n            if (this.stacked) {\n                color = options.get('stackedBarColor');\n            } else {\n                color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n            }\n            if (value === 0 && options.get('zeroColor') !== undefined) {\n                color = options.get('zeroColor');\n            }\n            if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n                color = newColor;\n            } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n                color = colorMapByIndex[valuenum];\n            }\n            return $.isArray(color) ? color[stacknum % color.length] : color;\n        },\n\n        /**\n         * Render bar(s) for a region\n         */\n        renderRegion: function (valuenum, highlight) {\n            var vals = this.values[valuenum],\n                options = this.options,\n                xaxisOffset = this.xaxisOffset,\n                result = [],\n                range = this.range,\n                stacked = this.stacked,\n                target = this.target,\n                x = valuenum * this.totalBarWidth,\n                canvasHeightEf = this.canvasHeightEf,\n                yoffset = this.yoffset,\n                y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n            vals = $.isArray(vals) ? vals : [vals];\n            valcount = vals.length;\n            val = vals[0];\n            isNull = all(null, vals);\n            allMin = all(xaxisOffset, vals, true);\n\n            if (isNull) {\n                if (options.get('nullColor')) {\n                    color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n                    y = (yoffset > 0) ? yoffset - 1 : yoffset;\n                    return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n                } else {\n                    return undefined;\n                }\n            }\n            yoffsetNeg = yoffset;\n            for (i = 0; i < valcount; i++) {\n                val = vals[i];\n\n                if (stacked && val === xaxisOffset) {\n                    if (!allMin || minPlotted) {\n                        continue;\n                    }\n                    minPlotted = true;\n                }\n\n                if (range > 0) {\n                    height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n                } else {\n                    height = 1;\n                }\n                if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n                    y = yoffsetNeg;\n                    yoffsetNeg += height;\n                } else {\n                    y = yoffset - height;\n                    yoffset -= height;\n                }\n                color = this.calcColor(i, val, valuenum);\n                if (highlight) {\n                    color = this.calcHighlightColor(color, options);\n                }\n                result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n            }\n            if (result.length === 1) {\n                return result[0];\n            }\n            return result;\n        }\n    });\n\n    /**\n     * Tristate charts\n     */\n    $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n        type: 'tristate',\n\n        init: function (el, values, options, width, height) {\n            var barWidth = parseInt(options.get('barWidth'), 10),\n                barSpacing = parseInt(options.get('barSpacing'), 10);\n            tristate._super.init.call(this, el, values, options, width, height);\n\n            this.regionShapes = {};\n            this.barWidth = barWidth;\n            this.barSpacing = barSpacing;\n            this.totalBarWidth = barWidth + barSpacing;\n            this.values = $.map(values, Number);\n            this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n            if ($.isArray(options.get('colorMap'))) {\n                this.colorMapByIndex = options.get('colorMap');\n                this.colorMapByValue = null;\n            } else {\n                this.colorMapByIndex = null;\n                this.colorMapByValue = options.get('colorMap');\n                if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n                    this.colorMapByValue = new RangeMap(this.colorMapByValue);\n                }\n            }\n            this.initTarget();\n        },\n\n        getRegion: function (el, x, y) {\n            return Math.floor(x / this.totalBarWidth);\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                isNull: this.values[currentRegion] === undefined,\n                value: this.values[currentRegion],\n                color: this.calcColor(this.values[currentRegion], currentRegion),\n                offset: currentRegion\n            };\n        },\n\n        calcColor: function (value, valuenum) {\n            var values = this.values,\n                options = this.options,\n                colorMapByIndex = this.colorMapByIndex,\n                colorMapByValue = this.colorMapByValue,\n                color, newColor;\n\n            if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n                color = newColor;\n            } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n                color = colorMapByIndex[valuenum];\n            } else if (values[valuenum] < 0) {\n                color = options.get('negBarColor');\n            } else if (values[valuenum] > 0) {\n                color = options.get('posBarColor');\n            } else {\n                color = options.get('zeroBarColor');\n            }\n            return color;\n        },\n\n        renderRegion: function (valuenum, highlight) {\n            var values = this.values,\n                options = this.options,\n                target = this.target,\n                canvasHeight, height, halfHeight,\n                x, y, color;\n\n            canvasHeight = target.pixelHeight;\n            halfHeight = Math.round(canvasHeight / 2);\n\n            x = valuenum * this.totalBarWidth;\n            if (values[valuenum] < 0) {\n                y = halfHeight;\n                height = halfHeight - 1;\n            } else if (values[valuenum] > 0) {\n                y = 0;\n                height = halfHeight - 1;\n            } else {\n                y = halfHeight - 1;\n                height = 2;\n            }\n            color = this.calcColor(values[valuenum], valuenum);\n            if (color === null) {\n                return;\n            }\n            if (highlight) {\n                color = this.calcHighlightColor(color, options);\n            }\n            return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n        }\n    });\n\n    /**\n     * Discrete charts\n     */\n    $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n        type: 'discrete',\n\n        init: function (el, values, options, width, height) {\n            discrete._super.init.call(this, el, values, options, width, height);\n\n            this.regionShapes = {};\n            this.values = values = $.map(values, Number);\n            this.min = Math.min.apply(Math, values);\n            this.max = Math.max.apply(Math, values);\n            this.range = this.max - this.min;\n            this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n            this.interval = Math.floor(width / values.length);\n            this.itemWidth = width / values.length;\n            if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n                this.min = options.get('chartRangeMin');\n            }\n            if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n                this.max = options.get('chartRangeMax');\n            }\n            this.initTarget();\n            if (this.target) {\n                this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n            }\n        },\n\n        getRegion: function (el, x, y) {\n            return Math.floor(x / this.itemWidth);\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                isNull: this.values[currentRegion] === undefined,\n                value: this.values[currentRegion],\n                offset: currentRegion\n            };\n        },\n\n        renderRegion: function (valuenum, highlight) {\n            var values = this.values,\n                options = this.options,\n                min = this.min,\n                max = this.max,\n                range = this.range,\n                interval = this.interval,\n                target = this.target,\n                canvasHeight = this.canvasHeight,\n                lineHeight = this.lineHeight,\n                pheight = canvasHeight - lineHeight,\n                ytop, val, color, x;\n\n            val = clipval(values[valuenum], min, max);\n            x = valuenum * interval;\n            ytop = Math.round(pheight - pheight * ((val - min) / range));\n            color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n            if (highlight) {\n                color = this.calcHighlightColor(color, options);\n            }\n            return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n        }\n    });\n\n    /**\n     * Bullet charts\n     */\n    $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n        type: 'bullet',\n\n        init: function (el, values, options, width, height) {\n            var min, max, vals;\n            bullet._super.init.call(this, el, values, options, width, height);\n\n            // values: target, performance, range1, range2, range3\n            this.values = values = normalizeValues(values);\n            // target or performance could be null\n            vals = values.slice();\n            vals[0] = vals[0] === null ? vals[2] : vals[0];\n            vals[1] = values[1] === null ? vals[2] : vals[1];\n            min = Math.min.apply(Math, values);\n            max = Math.max.apply(Math, values);\n            if (options.get('base') === undefined) {\n                min = min < 0 ? min : 0;\n            } else {\n                min = options.get('base');\n            }\n            this.min = min;\n            this.max = max;\n            this.range = max - min;\n            this.shapes = {};\n            this.valueShapes = {};\n            this.regiondata = {};\n            this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n            this.target = this.$el.simpledraw(width, height, options.get('composite'));\n            if (!values.length) {\n                this.disabled = true;\n            }\n            this.initTarget();\n        },\n\n        getRegion: function (el, x, y) {\n            var shapeid = this.target.getShapeAt(el, x, y);\n            return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                fieldkey: currentRegion.substr(0, 1),\n                value: this.values[currentRegion.substr(1)],\n                region: currentRegion\n            };\n        },\n\n        changeHighlight: function (highlight) {\n            var currentRegion = this.currentRegion,\n                shapeid = this.valueShapes[currentRegion],\n                shape;\n            delete this.shapes[shapeid];\n            switch (currentRegion.substr(0, 1)) {\n                case 'r':\n                    shape = this.renderRange(currentRegion.substr(1), highlight);\n                    break;\n                case 'p':\n                    shape = this.renderPerformance(highlight);\n                    break;\n                case 't':\n                    shape = this.renderTarget(highlight);\n                    break;\n            }\n            this.valueShapes[currentRegion] = shape.id;\n            this.shapes[shape.id] = currentRegion;\n            this.target.replaceWithShape(shapeid, shape);\n        },\n\n        renderRange: function (rn, highlight) {\n            var rangeval = this.values[rn],\n                rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n                color = this.options.get('rangeColors')[rn - 2];\n            if (highlight) {\n                color = this.calcHighlightColor(color, this.options);\n            }\n            return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n        },\n\n        renderPerformance: function (highlight) {\n            var perfval = this.values[1],\n                perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n                color = this.options.get('performanceColor');\n            if (highlight) {\n                color = this.calcHighlightColor(color, this.options);\n            }\n            return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n                Math.round(this.canvasHeight * 0.4) - 1, color, color);\n        },\n\n        renderTarget: function (highlight) {\n            var targetval = this.values[0],\n                x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n                targettop = Math.round(this.canvasHeight * 0.10),\n                targetheight = this.canvasHeight - (targettop * 2),\n                color = this.options.get('targetColor');\n            if (highlight) {\n                color = this.calcHighlightColor(color, this.options);\n            }\n            return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n        },\n\n        render: function () {\n            var vlen = this.values.length,\n                target = this.target,\n                i, shape;\n            if (!bullet._super.render.call(this)) {\n                return;\n            }\n            for (i = 2; i < vlen; i++) {\n                shape = this.renderRange(i).append();\n                this.shapes[shape.id] = 'r' + i;\n                this.valueShapes['r' + i] = shape.id;\n            }\n            if (this.values[1] !== null) {\n                shape = this.renderPerformance().append();\n                this.shapes[shape.id] = 'p1';\n                this.valueShapes.p1 = shape.id;\n            }\n            if (this.values[0] !== null) {\n                shape = this.renderTarget().append();\n                this.shapes[shape.id] = 't0';\n                this.valueShapes.t0 = shape.id;\n            }\n            target.render();\n        }\n    });\n\n    /**\n     * Pie charts\n     */\n    $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n        type: 'pie',\n\n        init: function (el, values, options, width, height) {\n            var total = 0, i;\n\n            pie._super.init.call(this, el, values, options, width, height);\n\n            this.shapes = {}; // map shape ids to value offsets\n            this.valueShapes = {}; // maps value offsets to shape ids\n            this.values = values = $.map(values, Number);\n\n            if (options.get('width') === 'auto') {\n                this.width = this.height;\n            }\n\n            if (values.length > 0) {\n                for (i = values.length; i--;) {\n                    total += values[i];\n                }\n            }\n            this.total = total;\n            this.initTarget();\n            this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n        },\n\n        getRegion: function (el, x, y) {\n            var shapeid = this.target.getShapeAt(el, x, y);\n            return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                isNull: this.values[currentRegion] === undefined,\n                value: this.values[currentRegion],\n                percent: this.values[currentRegion] / this.total * 100,\n                color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n                offset: currentRegion\n            };\n        },\n\n        changeHighlight: function (highlight) {\n            var currentRegion = this.currentRegion,\n                 newslice = this.renderSlice(currentRegion, highlight),\n                 shapeid = this.valueShapes[currentRegion];\n            delete this.shapes[shapeid];\n            this.target.replaceWithShape(shapeid, newslice);\n            this.valueShapes[currentRegion] = newslice.id;\n            this.shapes[newslice.id] = currentRegion;\n        },\n\n        renderSlice: function (valuenum, highlight) {\n            var target = this.target,\n                options = this.options,\n                radius = this.radius,\n                borderWidth = options.get('borderWidth'),\n                offset = options.get('offset'),\n                circle = 2 * Math.PI,\n                values = this.values,\n                total = this.total,\n                next = offset ? (2*Math.PI)*(offset/360) : 0,\n                start, end, i, vlen, color;\n\n            vlen = values.length;\n            for (i = 0; i < vlen; i++) {\n                start = next;\n                end = next;\n                if (total > 0) {  // avoid divide by zero\n                    end = next + (circle * (values[i] / total));\n                }\n                if (valuenum === i) {\n                    color = options.get('sliceColors')[i % options.get('sliceColors').length];\n                    if (highlight) {\n                        color = this.calcHighlightColor(color, options);\n                    }\n\n                    return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n                }\n                next = end;\n            }\n        },\n\n        render: function () {\n            var target = this.target,\n                values = this.values,\n                options = this.options,\n                radius = this.radius,\n                borderWidth = options.get('borderWidth'),\n                shape, i;\n\n            if (!pie._super.render.call(this)) {\n                return;\n            }\n            if (borderWidth) {\n                target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n                    options.get('borderColor'), undefined, borderWidth).append();\n            }\n            for (i = values.length; i--;) {\n                if (values[i]) { // don't render zero values\n                    shape = this.renderSlice(i).append();\n                    this.valueShapes[i] = shape.id; // store just the shapeid\n                    this.shapes[shape.id] = i;\n                }\n            }\n            target.render();\n        }\n    });\n\n    /**\n     * Box plots\n     */\n    $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n        type: 'box',\n\n        init: function (el, values, options, width, height) {\n            box._super.init.call(this, el, values, options, width, height);\n            this.values = $.map(values, Number);\n            this.width = options.get('width') === 'auto' ? '4.0em' : width;\n            this.initTarget();\n            if (!this.values.length) {\n                this.disabled = 1;\n            }\n        },\n\n        /**\n         * Simulate a single region\n         */\n        getRegion: function () {\n            return 1;\n        },\n\n        getCurrentRegionFields: function () {\n            var result = [\n                { field: 'lq', value: this.quartiles[0] },\n                { field: 'med', value: this.quartiles[1] },\n                { field: 'uq', value: this.quartiles[2] }\n            ];\n            if (this.loutlier !== undefined) {\n                result.push({ field: 'lo', value: this.loutlier});\n            }\n            if (this.routlier !== undefined) {\n                result.push({ field: 'ro', value: this.routlier});\n            }\n            if (this.lwhisker !== undefined) {\n                result.push({ field: 'lw', value: this.lwhisker});\n            }\n            if (this.rwhisker !== undefined) {\n                result.push({ field: 'rw', value: this.rwhisker});\n            }\n            return result;\n        },\n\n        render: function () {\n            var target = this.target,\n                values = this.values,\n                vlen = values.length,\n                options = this.options,\n                canvasWidth = this.canvasWidth,\n                canvasHeight = this.canvasHeight,\n                minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n                maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n                canvasLeft = 0,\n                lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n                size, unitSize;\n\n            if (!box._super.render.call(this)) {\n                return;\n            }\n\n            if (options.get('raw')) {\n                if (options.get('showOutliers') && values.length > 5) {\n                    loutlier = values[0];\n                    lwhisker = values[1];\n                    q1 = values[2];\n                    q2 = values[3];\n                    q3 = values[4];\n                    rwhisker = values[5];\n                    routlier = values[6];\n                } else {\n                    lwhisker = values[0];\n                    q1 = values[1];\n                    q2 = values[2];\n                    q3 = values[3];\n                    rwhisker = values[4];\n                }\n            } else {\n                values.sort(function (a, b) { return a - b; });\n                q1 = quartile(values, 1);\n                q2 = quartile(values, 2);\n                q3 = quartile(values, 3);\n                iqr = q3 - q1;\n                if (options.get('showOutliers')) {\n                    lwhisker = rwhisker = undefined;\n                    for (i = 0; i < vlen; i++) {\n                        if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n                            lwhisker = values[i];\n                        }\n                        if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n                            rwhisker = values[i];\n                        }\n                    }\n                    loutlier = values[0];\n                    routlier = values[vlen - 1];\n                } else {\n                    lwhisker = values[0];\n                    rwhisker = values[vlen - 1];\n                }\n            }\n            this.quartiles = [q1, q2, q3];\n            this.lwhisker = lwhisker;\n            this.rwhisker = rwhisker;\n            this.loutlier = loutlier;\n            this.routlier = routlier;\n\n            unitSize = canvasWidth / (maxValue - minValue + 1);\n            if (options.get('showOutliers')) {\n                canvasLeft = Math.ceil(options.get('spotRadius'));\n                canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n                unitSize = canvasWidth / (maxValue - minValue + 1);\n                if (loutlier < lwhisker) {\n                    target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n                        canvasHeight / 2,\n                        options.get('spotRadius'),\n                        options.get('outlierLineColor'),\n                        options.get('outlierFillColor')).append();\n                }\n                if (routlier > rwhisker) {\n                    target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n                        canvasHeight / 2,\n                        options.get('spotRadius'),\n                        options.get('outlierLineColor'),\n                        options.get('outlierFillColor')).append();\n                }\n            }\n\n            // box\n            target.drawRect(\n                Math.round((q1 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight * 0.1),\n                Math.round((q3 - q1) * unitSize),\n                Math.round(canvasHeight * 0.8),\n                options.get('boxLineColor'),\n                options.get('boxFillColor')).append();\n            // left whisker\n            target.drawLine(\n                Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 2),\n                Math.round((q1 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 2),\n                options.get('lineColor')).append();\n            target.drawLine(\n                Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 4),\n                Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight - canvasHeight / 4),\n                options.get('whiskerColor')).append();\n            // right whisker\n            target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 2),\n                Math.round((q3 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 2),\n                options.get('lineColor')).append();\n            target.drawLine(\n                Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 4),\n                Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight - canvasHeight / 4),\n                options.get('whiskerColor')).append();\n            // median line\n            target.drawLine(\n                Math.round((q2 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight * 0.1),\n                Math.round((q2 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight * 0.9),\n                options.get('medianColor')).append();\n            if (options.get('target')) {\n                size = Math.ceil(options.get('spotRadius'));\n                target.drawLine(\n                    Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n                    Math.round((canvasHeight / 2) - size),\n                    Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n                    Math.round((canvasHeight / 2) + size),\n                    options.get('targetColor')).append();\n                target.drawLine(\n                    Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n                    Math.round(canvasHeight / 2),\n                    Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n                    Math.round(canvasHeight / 2),\n                    options.get('targetColor')).append();\n            }\n            target.render();\n        }\n    });\n\n    // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n    // This is accessible as $(foo).simpledraw()\n\n    VShape = createClass({\n        init: function (target, id, type, args) {\n            this.target = target;\n            this.id = id;\n            this.type = type;\n            this.args = args;\n        },\n        append: function () {\n            this.target.appendShape(this);\n            return this;\n        }\n    });\n\n    VCanvas_base = createClass({\n        _pxregex: /(\\d+)(px)?\\s*$/i,\n\n        init: function (width, height, target) {\n            if (!width) {\n                return;\n            }\n            this.width = width;\n            this.height = height;\n            this.target = target;\n            this.lastShapeId = null;\n            if (target[0]) {\n                target = target[0];\n            }\n            $.data(target, '_jqs_vcanvas', this);\n        },\n\n        drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n            return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n        },\n\n        drawShape: function (path, lineColor, fillColor, lineWidth) {\n            return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n        },\n\n        drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n            return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n        },\n\n        drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n            return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n        },\n\n        drawRect: function (x, y, width, height, lineColor, fillColor) {\n            return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n        },\n\n        getElement: function () {\n            return this.canvas;\n        },\n\n        /**\n         * Return the most recently inserted shape id\n         */\n        getLastShapeId: function () {\n            return this.lastShapeId;\n        },\n\n        /**\n         * Clear and reset the canvas\n         */\n        reset: function () {\n            alert('reset not implemented');\n        },\n\n        _insert: function (el, target) {\n            $(target).html(el);\n        },\n\n        /**\n         * Calculate the pixel dimensions of the canvas\n         */\n        _calculatePixelDims: function (width, height, canvas) {\n            // XXX This should probably be a configurable option\n            var match;\n            match = this._pxregex.exec(height);\n            if (match) {\n                this.pixelHeight = match[1];\n            } else {\n                this.pixelHeight = $(canvas).height();\n            }\n            match = this._pxregex.exec(width);\n            if (match) {\n                this.pixelWidth = match[1];\n            } else {\n                this.pixelWidth = $(canvas).width();\n            }\n        },\n\n        /**\n         * Generate a shape object and id for later rendering\n         */\n        _genShape: function (shapetype, shapeargs) {\n            var id = shapeCount++;\n            shapeargs.unshift(id);\n            return new VShape(this, id, shapetype, shapeargs);\n        },\n\n        /**\n         * Add a shape to the end of the render queue\n         */\n        appendShape: function (shape) {\n            alert('appendShape not implemented');\n        },\n\n        /**\n         * Replace one shape with another\n         */\n        replaceWithShape: function (shapeid, shape) {\n            alert('replaceWithShape not implemented');\n        },\n\n        /**\n         * Insert one shape after another in the render queue\n         */\n        insertAfterShape: function (shapeid, shape) {\n            alert('insertAfterShape not implemented');\n        },\n\n        /**\n         * Remove a shape from the queue\n         */\n        removeShapeId: function (shapeid) {\n            alert('removeShapeId not implemented');\n        },\n\n        /**\n         * Find a shape at the specified x/y co-ordinates\n         */\n        getShapeAt: function (el, x, y) {\n            alert('getShapeAt not implemented');\n        },\n\n        /**\n         * Render all queued shapes onto the canvas\n         */\n        render: function () {\n            alert('render not implemented');\n        }\n    });\n\n    VCanvas_canvas = createClass(VCanvas_base, {\n        init: function (width, height, target, interact) {\n            VCanvas_canvas._super.init.call(this, width, height, target);\n            this.canvas = document.createElement('canvas');\n            if (target[0]) {\n                target = target[0];\n            }\n            $.data(target, '_jqs_vcanvas', this);\n            $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n            this._insert(this.canvas, target);\n            this._calculatePixelDims(width, height, this.canvas);\n            this.canvas.width = this.pixelWidth;\n            this.canvas.height = this.pixelHeight;\n            this.interact = interact;\n            this.shapes = {};\n            this.shapeseq = [];\n            this.currentTargetShapeId = undefined;\n            $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n        },\n\n        _getContext: function (lineColor, fillColor, lineWidth) {\n            var context = this.canvas.getContext('2d');\n            if (lineColor !== undefined) {\n                context.strokeStyle = lineColor;\n            }\n            context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n            if (fillColor !== undefined) {\n                context.fillStyle = fillColor;\n            }\n            return context;\n        },\n\n        reset: function () {\n            var context = this._getContext();\n            context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n            this.shapes = {};\n            this.shapeseq = [];\n            this.currentTargetShapeId = undefined;\n        },\n\n        _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n            var context = this._getContext(lineColor, fillColor, lineWidth),\n                i, plen;\n            context.beginPath();\n            context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n            for (i = 1, plen = path.length; i < plen; i++) {\n                context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n            }\n            if (lineColor !== undefined) {\n                context.stroke();\n            }\n            if (fillColor !== undefined) {\n                context.fill();\n            }\n            if (this.targetX !== undefined && this.targetY !== undefined &&\n                context.isPointInPath(this.targetX, this.targetY)) {\n                this.currentTargetShapeId = shapeid;\n            }\n        },\n\n        _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n            var context = this._getContext(lineColor, fillColor, lineWidth);\n            context.beginPath();\n            context.arc(x, y, radius, 0, 2 * Math.PI, false);\n            if (this.targetX !== undefined && this.targetY !== undefined &&\n                context.isPointInPath(this.targetX, this.targetY)) {\n                this.currentTargetShapeId = shapeid;\n            }\n            if (lineColor !== undefined) {\n                context.stroke();\n            }\n            if (fillColor !== undefined) {\n                context.fill();\n            }\n        },\n\n        _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n            var context = this._getContext(lineColor, fillColor);\n            context.beginPath();\n            context.moveTo(x, y);\n            context.arc(x, y, radius, startAngle, endAngle, false);\n            context.lineTo(x, y);\n            context.closePath();\n            if (lineColor !== undefined) {\n                context.stroke();\n            }\n            if (fillColor) {\n                context.fill();\n            }\n            if (this.targetX !== undefined && this.targetY !== undefined &&\n                context.isPointInPath(this.targetX, this.targetY)) {\n                this.currentTargetShapeId = shapeid;\n            }\n        },\n\n        _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n            return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n        },\n\n        appendShape: function (shape) {\n            this.shapes[shape.id] = shape;\n            this.shapeseq.push(shape.id);\n            this.lastShapeId = shape.id;\n            return shape.id;\n        },\n\n        replaceWithShape: function (shapeid, shape) {\n            var shapeseq = this.shapeseq,\n                i;\n            this.shapes[shape.id] = shape;\n            for (i = shapeseq.length; i--;) {\n                if (shapeseq[i] == shapeid) {\n                    shapeseq[i] = shape.id;\n                }\n            }\n            delete this.shapes[shapeid];\n        },\n\n        replaceWithShapes: function (shapeids, shapes) {\n            var shapeseq = this.shapeseq,\n                shapemap = {},\n                sid, i, first;\n\n            for (i = shapeids.length; i--;) {\n                shapemap[shapeids[i]] = true;\n            }\n            for (i = shapeseq.length; i--;) {\n                sid = shapeseq[i];\n                if (shapemap[sid]) {\n                    shapeseq.splice(i, 1);\n                    delete this.shapes[sid];\n                    first = i;\n                }\n            }\n            for (i = shapes.length; i--;) {\n                shapeseq.splice(first, 0, shapes[i].id);\n                this.shapes[shapes[i].id] = shapes[i];\n            }\n\n        },\n\n        insertAfterShape: function (shapeid, shape) {\n            var shapeseq = this.shapeseq,\n                i;\n            for (i = shapeseq.length; i--;) {\n                if (shapeseq[i] === shapeid) {\n                    shapeseq.splice(i + 1, 0, shape.id);\n                    this.shapes[shape.id] = shape;\n                    return;\n                }\n            }\n        },\n\n        removeShapeId: function (shapeid) {\n            var shapeseq = this.shapeseq,\n                i;\n            for (i = shapeseq.length; i--;) {\n                if (shapeseq[i] === shapeid) {\n                    shapeseq.splice(i, 1);\n                    break;\n                }\n            }\n            delete this.shapes[shapeid];\n        },\n\n        getShapeAt: function (el, x, y) {\n            this.targetX = x;\n            this.targetY = y;\n            this.render();\n            return this.currentTargetShapeId;\n        },\n\n        render: function () {\n            var shapeseq = this.shapeseq,\n                shapes = this.shapes,\n                shapeCount = shapeseq.length,\n                context = this._getContext(),\n                shapeid, shape, i;\n            context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n            for (i = 0; i < shapeCount; i++) {\n                shapeid = shapeseq[i];\n                shape = shapes[shapeid];\n                this['_draw' + shape.type].apply(this, shape.args);\n            }\n            if (!this.interact) {\n                // not interactive so no need to keep the shapes array\n                this.shapes = {};\n                this.shapeseq = [];\n            }\n        }\n\n    });\n\n    VCanvas_vml = createClass(VCanvas_base, {\n        init: function (width, height, target) {\n            var groupel;\n            VCanvas_vml._super.init.call(this, width, height, target);\n            if (target[0]) {\n                target = target[0];\n            }\n            $.data(target, '_jqs_vcanvas', this);\n            this.canvas = document.createElement('span');\n            $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n            this._insert(this.canvas, target);\n            this._calculatePixelDims(width, height, this.canvas);\n            this.canvas.width = this.pixelWidth;\n            this.canvas.height = this.pixelHeight;\n            groupel = '<v:group coordorigin=\"0 0\" coordsize=\"' + this.pixelWidth + ' ' + this.pixelHeight + '\"' +\n                    ' style=\"position:absolute;top:0;left:0;width:' + this.pixelWidth + 'px;height=' + this.pixelHeight + 'px;\"></v:group>';\n            this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n            this.group = $(this.canvas).children()[0];\n            this.rendered = false;\n            this.prerender = '';\n        },\n\n        _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n            var vpath = [],\n                initial, stroke, fill, closed, vel, plen, i;\n            for (i = 0, plen = path.length; i < plen; i++) {\n                vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n            }\n            initial = vpath.splice(0, 1);\n            lineWidth = lineWidth === undefined ? 1 : lineWidth;\n            stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n            fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n            closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n            vel = '<v:shape coordorigin=\"0 0\" coordsize=\"' + this.pixelWidth + ' ' + this.pixelHeight + '\" ' +\n                 ' id=\"jqsshape' + shapeid + '\" ' +\n                 stroke +\n                 fill +\n                ' style=\"position:absolute;left:0px;top:0px;height:' + this.pixelHeight + 'px;width:' + this.pixelWidth + 'px;padding:0px;margin:0px;\" ' +\n                ' path=\"m ' + initial + ' l ' + vpath.join(', ') + ' ' + closed + 'e\">' +\n                ' </v:shape>';\n            return vel;\n        },\n\n        _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n            var stroke, fill, vel;\n            x -= radius;\n            y -= radius;\n            stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n            fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n            vel = '<v:oval ' +\n                 ' id=\"jqsshape' + shapeid + '\" ' +\n                stroke +\n                fill +\n                ' style=\"position:absolute;top:' + y + 'px; left:' + x + 'px; width:' + (radius * 2) + 'px; height:' + (radius * 2) + 'px\"></v:oval>';\n            return vel;\n\n        },\n\n        _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n            var vpath, startx, starty, endx, endy, stroke, fill, vel;\n            if (startAngle === endAngle) {\n                return '';  // VML seems to have problem when start angle equals end angle.\n            }\n            if ((endAngle - startAngle) === (2 * Math.PI)) {\n                startAngle = 0.0;  // VML seems to have a problem when drawing a full circle that doesn't start 0\n                endAngle = (2 * Math.PI);\n            }\n\n            startx = x + Math.round(Math.cos(startAngle) * radius);\n            starty = y + Math.round(Math.sin(startAngle) * radius);\n            endx = x + Math.round(Math.cos(endAngle) * radius);\n            endy = y + Math.round(Math.sin(endAngle) * radius);\n\n            if (startx === endx && starty === endy) {\n                if ((endAngle - startAngle) < Math.PI) {\n                    // Prevent very small slices from being mistaken as a whole pie\n                    return '';\n                }\n                // essentially going to be the entire circle, so ignore startAngle\n                startx = endx = x + radius;\n                starty = endy = y;\n            }\n\n            if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n                return '';\n            }\n\n            vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n            stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n            fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n            vel = '<v:shape coordorigin=\"0 0\" coordsize=\"' + this.pixelWidth + ' ' + this.pixelHeight + '\" ' +\n                 ' id=\"jqsshape' + shapeid + '\" ' +\n                 stroke +\n                 fill +\n                ' style=\"position:absolute;left:0px;top:0px;height:' + this.pixelHeight + 'px;width:' + this.pixelWidth + 'px;padding:0px;margin:0px;\" ' +\n                ' path=\"m ' + x + ',' + y + ' wa ' + vpath.join(', ') + ' x e\">' +\n                ' </v:shape>';\n            return vel;\n        },\n\n        _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n            return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n        },\n\n        reset: function () {\n            this.group.innerHTML = '';\n        },\n\n        appendShape: function (shape) {\n            var vel = this['_draw' + shape.type].apply(this, shape.args);\n            if (this.rendered) {\n                this.group.insertAdjacentHTML('beforeEnd', vel);\n            } else {\n                this.prerender += vel;\n            }\n            this.lastShapeId = shape.id;\n            return shape.id;\n        },\n\n        replaceWithShape: function (shapeid, shape) {\n            var existing = $('#jqsshape' + shapeid),\n                vel = this['_draw' + shape.type].apply(this, shape.args);\n            existing[0].outerHTML = vel;\n        },\n\n        replaceWithShapes: function (shapeids, shapes) {\n            // replace the first shapeid with all the new shapes then toast the remaining old shapes\n            var existing = $('#jqsshape' + shapeids[0]),\n                replace = '',\n                slen = shapes.length,\n                i;\n            for (i = 0; i < slen; i++) {\n                replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n            }\n            existing[0].outerHTML = replace;\n            for (i = 1; i < shapeids.length; i++) {\n                $('#jqsshape' + shapeids[i]).remove();\n            }\n        },\n\n        insertAfterShape: function (shapeid, shape) {\n            var existing = $('#jqsshape' + shapeid),\n                 vel = this['_draw' + shape.type].apply(this, shape.args);\n            existing[0].insertAdjacentHTML('afterEnd', vel);\n        },\n\n        removeShapeId: function (shapeid) {\n            var existing = $('#jqsshape' + shapeid);\n            this.group.removeChild(existing[0]);\n        },\n\n        getShapeAt: function (el, x, y) {\n            var shapeid = el.id.substr(8);\n            return shapeid;\n        },\n\n        render: function () {\n            if (!this.rendered) {\n                // batch the intial render into a single repaint\n                this.group.innerHTML = this.prerender;\n                this.rendered = true;\n            }\n        }\n    });\n\n}))}(document, Math));\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2016, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Provide download from the application\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('download',[ \"jquery\", \"config\", \"laconic\" ],\n       function($, config) {\n\n(function($) {\n  var pluginName = 'downloader';\n\n  /** @lends $.fn.downloader */\n  var methods = {\n    /**\n     * @param {Object} options\n     * @param {String} options.data Content to be sent.\n     * @param {String} [options.filename] (base) name of the downloaded\n     * file.\n     * @param {String} [options.type] MIME type (default\n     * `application/octet-stream`)\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\n\tvar uuid = options.uuid;\n\tvar type = options.content_type || \"application/octet-stream\";\n\tvar name = options.filename || \"swish-download.dat\";\n\n\tfunction aSupportsDownload() {\n\t  return $(\"<a>\")[0].download != undefined;\n\t}\n\n\tif ( !aSupportsDownload() || !type )\n\t  type = \"application/octet-stream\";\n\n\tvar href      = config.http.locations.download + \"/\" +\n\t\t\tencodeURIComponent(name) +\n \t                \"?content_type=\" + encodeURIComponent(type) +\n\t\t\t\"&uuid=\" + uuid;\n\n\telem.attr(\"download\", name);\n\telem.attr(\"href\", href);\n\telem.attr(\"title\", \"Download (use menu for save link as)\");\n\telem.text(name);\n\n\telem.addClass(\"btn btn-primary download\");\n\telem.append($.el.span({class:\"glyphicon glyphicon-download\"}));\n      });\n    }\n  }; // methods\n\n  /**\n   * <Class description>\n   *\n   * @class downloader\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.downloader = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2017, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Run an manage Prolog queries and their output\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n * @requires laconic\n * @requires editor\n */\n\ndefine('runner',[ \"jquery\", \"config\", \"preferences\",\n\t \"cm/lib/codemirror\", \"form\", \"prolog\", \"links\", \"modal\",\n\t \"answer\", \"laconic\", \"sparkline\", \"download\", \"search\"\n       ],\n       function($, config, preferences,\n\t\tCodeMirror, form, prolog, links, modal) {\n\n\t\t /*******************************\n\t\t *\t  THE COLLECTION\t*\n\t\t *******************************/\n\n(function($) {\n  var pluginName = 'prologRunners';\n\n  /** @lends $.fn.prologRunners */\n  var methods = {\n    /**\n     * Initialize the container for Prolog queries.\n     * @example $(\".prolog-runners\").prologRunners();\n     * @param {Object} [options] currently ignored\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\n\n\tfunction runnerMenu() {\n\t  var icon = $.el.span({class:\"glyphicon glyphicon-menu-hamburger\"});\n\t  var menu = form.widgets.dropdownButton(\n\t    icon,\n\t    { divClass:\"runners-menu btn-transparent\",\n\t      ulClass:\"pull-right\",\n\t      client:elem,\n\t      actions:\n\t      { \"Collapse all\": function() {\n\t\t  this.find(\".prolog-runner\").prologRunner('toggleIconic', true);\n\t        },\n\t\t\"Expand all\": function() {\n\t\t  this.find(\".prolog-runner\").prologRunner('toggleIconic', false);\n\t\t},\n\t\t\"Stop all\": function() {\n\t\t  this.find(\".prolog-runner\").prologRunner('stop');\n\t\t},\n\t\t\"Clear\": function() { this.prologRunners('clear'); }\n\t      }\n\t    });\n\n\t  return menu;\n\t}\n\n\tdata.stretch = $($.el.div({class:\"stretch\"}));\n\tdata.inner   = $($.el.div({class:\"inner\"}));\n\n\telem.append(runnerMenu());\n\telem.append(data.stretch);\n\telem.append(data.inner);\n\n\telem.on(\"pane.resize\", function() {\n\t  elem.prologRunners('scrollToBottom', true);\n\t});\n\telem.on(\"scroll-to-bottom\", function(ev, arg) {\n\t  elem.prologRunners('scrollToBottom', arg);\n\t});\n\n\telem.data(pluginName, data);\n      });\n    },\n\n    /**\n     * Run a Prolog query.  The methods appends a `<div>` and runs the\n     * plugin `prologRunner` on the new div.\n     * @param {Object} query\n     * @param {String} query.query the Prolog query to prove\n     * @param {String} [query.source] the Prolog program\n     * @param {prologEditor} [query.editor] the source editor\n     * @param {Boolean} [query.iconifyLast=true] define whether or not\n     * to iconify the previous runner.\n     * @param {Boolean} [query.tabled=false] if `true`, make a table with\n     * the results.\n     */\n    run: function(query) {\n      var data = this.data('prologRunners');\n\n      if ( query.iconifyLast )\n\tthis.prologRunners('iconifyLast');\n\n      var runner = $.el.div({class: \"prolog-runner\"});\n\n      data.inner.append(runner);\n      $(runner).prologRunner(query);\n      this.trigger('scroll-to-bottom');\n\n      return this;\n    },\n\n    /**\n     * Destroy all runners and, if applicable, their associated\n     * pengines.\n     */\n    clear: function() {\n      this.find(\".prolog-runner\").prologRunner('close');\n    },\n\n    /**\n     * Iconify the last runner if it is not associated to an open\n     * query.\n     */\n    iconifyLast: function() {\n      var jrunner = $(this.inner).children().last();\n\n      if ( jrunner.length == 1 )\n      { var runner = jrunner.prologRunner();\n\n\tif ( !runner.alive() )\n\t  runner.toggleIconic(true);\n      }\n\n      return this;\n    },\n\n    /**\n     * Keep the content at the bottom of the window, such that the\n     * buttons remain in the same position.  The only way to achieve\n     * this is by putting something on top of the content as long as\n     * the content is lower than the window.\n     *\n     * @param {Boolean} [onlydown=false] only scroll down if we are\n     * not at the bottom.\n     */\n    // the \"- 4\" compensates for the prolog-runner top&bottom margin.\n    scrollToBottom: function(onlydown) {\n      this.each(function() {\n\tvar elem = $(this);\n\tvar data   = elem.data('prologRunners');\n\tvar height = data.inner.height();\n\tvar room   = elem.height() - height - 4 - 2;\n\n\tif ( room > 0 || onlydown !== true ) {\n\t  data.stretch.height(room > 0 ? room : 0);\n\t  elem.scrollTop(height);\n\t}\n      });\n\n      return this;\n    }\n  }; // methods\n\n  /**\n   * Manage a subwindow (`<div>`) that acts as a collection of runner\n   * items.  Each runner represents a Prolog query, either active or\n   * terminated.  The collection keeps the runners properly stacked and\n   * provides a menu to control the collection, such as _clear_,\n   * _iconify all_, etc.\n   *\n   * @class prologRunners\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n  $.fn.prologRunners = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n\n\t\t /*******************************\n\t\t *\tINDIVIDUAL RUNNER\t*\n\t\t *******************************/\n\n(function($) {\n  var pluginName = 'prologRunner';\n\n  // keyBindings rely on the jQuery normalized `which` field\n  var keyBindings = { 59:      'next',\t\t/* ; (FF) */\n\t\t      186:     'next',\t\t/* ; (Chromium) */\n\t\t      32:      'next',\t\t/* space */\n\t\t      190:     'stop',\t\t/* . */\n\t\t      13:      'stop',\t\t/* Enter */\n\t\t      65:      'stopOrAbort',\t/* a */\n\t\t      27:      'stopOrAbort',\t/* Esc */\n\t\t      46:      'close',\t\t/* Del */\n\t\t      112:     'help'\t\t/* F1 */\n                    };\n\n  /** @lends $.fn.prologRunner */\n  var methods = {\n    /**\n     * Initialize a runner for a Prolog query\n     * @param {Object} query\n     * @param {String} query.query the Prolog query to prove\n     * @param {String} [query.source] the Prolog program\n     * @param {Boolean} [query.tabled=false]  If `true`, represent the\n     * results as a table.\n     * @param {Boolean} [query.title=true] If `false`, suppress the\n     * title.\n     * @param {Function} [query.success] Called when the query completed\n     * with success (`true`).  `this` is the runner, the first argument\n     * is the Pengine.\n     * @param {Function} [query.complete] Called when the query\n     * completed, regardless of the result. Passes the same arguments as\n     * `query.success`. The `state` property of the Pengine contains the\n     * result state.  See `this.setState()`.\n     */\n    _init: function(query) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\n\n\tfunction titleBarButton(glyph, title, action, display) {\n\t  var btn = $.el.button({title:title, class:\"rtb-\"+action},\n\t\t\t\t$.el.span({class:\"glyphicon glyphicon-\"+glyph}));\n\t  $(btn).on(\"click\", function() { elem.prologRunner(action); });\n\t  if ( display == false )\n\t    $(btn).hide();\n\t  return btn;\n\t}\n\n\tfunction stateButton() {\n\t  var icon = $.el.span({class:\"runner-state show-state idle\"});\n\n\t  return form.widgets.dropdownButton(icon);\n\t}\n\n\tfunction controllerDiv() {\n\t  function next()     { elem.prologRunner('next',    1); }\n\t  function next10()   { elem.prologRunner('next',   10); }\n\t  function next100()  { elem.prologRunner('next',  100); }\n\t  function next1000() { elem.prologRunner('next', 1000); }\n\t  function stop()     { data.prolog.stop(); }\n\t  function abort()    { data.prolog.abort(); }\n\n\t  function button(action, label) {\n\t    var btn = $.el.button(label);\n\t    $(btn).on(\"click\", action);\n\t    return btn;\n\t  }\n\n\t  function input() {\n\t    var inp = $.el.input({class:\"prolog-input\"});\n\t    var btn = $.el.button(\"Send\");\n\n\t    $(inp).keypress(function(ev) {\n\t\t\t      if ( ev.which == 13 &&\n\t\t\t\t   elem.prologRunner('respond', $(inp).val()) ) {\n\t\t\t\t$(inp).val(\"\");\n\t\t\t\tev.preventDefault();\n\t\t\t\treturn false;\t\t/* prevent bubbling */\n\t\t\t      } else if ( ev.key != \"Esc\" ) {\n\t\t\t\tev.stopPropagation();   /* prevent bubbling */\n\t\t\t      }\n\t\t\t    });\n\t    $(btn).on(\"click\", function() {\n\t\t\t\t elem.prologRunner('respond', $(inp).val());\n\t\t\t       });\n\n\t    return {input:inp, button:btn};\n\t  }\n\n\t  function statusChart() {\n\t    var spark = $.el.span({class:\"sparklines\"}, \"\");\n\n\t    return spark;\n\t  }\n\n\t  var inp = input();\n\t  var div = $.el.div({class:\"controller show-state\"},\n\t\t\t     $.el.span({class:\"running\"},\n\t\t\t\t       button(abort, \"Abort\")),\n\t\t\t     $.el.span({class:\"wait-next\"},\n\t\t\t\t       button(next, \"Next\"),\n\t\t\t\t       button(next10, \"10\"),\n\t\t\t\t       button(next100, \"100\"),\n\t\t\t\t       button(next1000, \"1,000\"), \" \",\n\t\t\t\t       button(stop, \"Stop\")),\n\t\t\t     $.el.span({class:\"wait-input\"},\n\t\t\t\t       button(abort, \"Abort\"), inp.button,\n\t\t\t\t       $.el.span(inp.input)),\n\t\t\t     statusChart());\n\n\t  return div;\n\t}\n\n\telem.addClass(\"prolog-runner panel panel-default\");\n\tif ( query.tabled )\n\t  elem.addClass(\"tabled\");\n\tif ( query.title != false ) {\n\t  var qspan = $.el.span({class:\"query cm-s-prolog\"});\n\t  CodeMirror.runMode(query.query, \"prolog\", qspan);\n\t  elem.append($.el.div(\n\t    {class:\"runner-title panel-heading\"},\n\t    titleBarButton(\"remove-circle\", \"Close\",        'close'),\n\t    titleBarButton(\"minus\",         \"Iconify\",      'toggleIconic'),\n\t    titleBarButton(\"download\",      \"Download CSV\", 'downloadCSV'),\n\t    titleBarButton(\"link\",          \"Permalink\",    'permalink', false),\n\t    stateButton(),\n\t    qspan,\n            $.el.br({clear:\"all\"})));\n\t} else {\n\t  elem.append($.el.div(\n\t    {class:\"runner-title runner-button-group\"},\n\t    titleBarButton(\"remove-circle\", \"Close\",        'close'),\n\t    titleBarButton(\"minus\",         \"Iconify\",      'toggleIconic'),\n\t    titleBarButton(\"download\",      \"Download CSV\", 'downloadCSV'),\n\t    titleBarButton(\"link\",          \"Permalink\",    'permalink', false)));\n\t}\n\tif ( query.chunk )\n\t  data.chunk = query.chunk;\n\telem.append($.el.div({class:\"runner-results panel-body\"}));\n\telem.append(controllerDiv());\n\n\telem.data('prologRunner', data);\n\n\telem.prologRunner('populateActionMenu');\n\telem.keydown(function(ev) {\n\t  if ( elem.prologRunner('getState') != \"wait-input\" &&\n\t       !$(ev.target).is(\"input\") &&\n\t       !ev.ctrlKey && !ev.altKey ) {\n\n\t    if ( keyBindings[ev.which] ) {\n\t      ev.preventDefault();\n\t      elem.prologRunner(keyBindings[ev.which]);\n\t    }\n\t  }\n\t});\n\telem.on(\"click\", \"a\", links.followLink);\n\n\tdata.savedFocus = document.activeElement;\n\telem.attr('tabindex', -1);\n\telem.focus();\n\n\tdata.query   = query;\n\tdata.answers = 0;\n\n\telem.prologRunner('setScreenDimensions');\n\n\t/* Load pengines.js incrementally because we wish to ask the\n\t   one from the pengine server rather than a packaged one.\n\t*/\n\n\trequire([config.http.locations.pengines+\"/pengines.js\"],\n\t\tfunction() {\n\n\t  data.prolog = new Pengine({\n\t    server: config.http.locations.pengines,\n\t    runner: elem,\n\t    application: \"swish\",\n\t    src: query.source,\n\t    destroy: false,\n\t    format: 'json-html',\n\t    oncreate: handleCreate,\n\t    onsuccess: handleSuccess,\n\t    onfailure: handleFailure,\n\t    onstop: handleStop,\n\t    onprompt: handlePrompt,\n\t    onoutput: handleOutput,\n\t    onping: handlePing,\n\t    onerror: handleError,\n\t    onabort: handleAbort});\n\t  data.prolog.state = \"idle\";\n\t  if ( config.swish.ping && data.prolog.ping != undefined ) {\n\t    data.prolog.ping(config.swish.ping*1000);\n\t  }\n\t});\n\n\treturn this;\n      });\n    }, //_init()\n\n    setScreenDimensions: function() {\n      var data = this.data(pluginName);\n      var pre  = $.el.pre({class: \"measure\"}, \"xxxxxxxxxx\");\n      var sw   = this.width();\n      var sh;\n      var container;\n\n      container = this.closest(\".prolog-runners\");\n      if ( container.length == 0 )\n\tcontainer = this.closest(\".nb-view\");\n      if ( container.length )\n\tsh = container.height();\n\n      this.append(pre);\n      var cw = $(pre).width()/10;\n      var ch = $(pre).height();\n      $(pre).remove();\n\n      data.screen = {\n        width: sw,\n\tcols: Math.floor(sw/cw)\n      };\n      if ( sh !== undefined ) {\n\tdata.screen.height = sh;\n\tdata.screen.rows   = Math.floor(sh/ch);\n      }\n    },\n\n    /**\n     * Add a _positive_ answer to the runner.  The answer is embedded in\n     * a `<div class=\"answer\">` with an additional class `\"even\"` or\n     * `\"odd\"` to simplify styling. Note that using CSS odd/even\n     * selectors is not possible because there are other elements such\n     * as errors.\n     * @param {Answer} answer pengine response in `json-html`\n     */\n    renderAnswer: function(answer) {\n      var data = this.data('prologRunner');\n      var even = (++data.answers % 2 == 0);\n      var obj = removeSpecialBindings(answer);\n\n      function removeSpecialBindings(answer) {\n\tvar obj = {};\n\tvar bindings = answer.variables;\n\tvar projection = answer.projection;\n\tvar prefix = \"_swish__\";\n\n\tfor (var i = 0; i < bindings.length; i++) {\n\t  var vars = bindings[i].variables;\n\n\t  for (var v = 0; v < vars.length; v++) {\n\t    if ( vars[v].startsWith(prefix) ) {\n\t      var name = vars[v].replace(prefix, \"\");\n\t      obj[name] = bindings[i].value;\n\t      bindings.splice(i, 1);\n\t      i--;\n\t    }\n\t  }\n\t}\n\n\tif ( projection ) {\n\t  for(var i = 0; i < projection.length; i++) {\n\t    if ( projection[i].startsWith(prefix) ) {\n\t      projection.splice(i, 1);\n\t      i--;\n\t    }\n\t  }\n\t}\n\n\treturn obj;\n      }\n\n      // Would be better to avoid wrapping in HTML, but that\n      // requires extending pengines_io.pl\n      if ( obj.permahash ) {\n\tdata.permahash = $(obj.permahash).text().replace(/'/g,\"\");\n\tthis.find(\".rtb-permalink\").show({duration:400});\n      }\n\n      if ( data.query.tabled ) {\n\tif ( data.answers == 1 ) {\n\t  if ( answer.projection && answer.projection.length > 0 ) {\n\t    var table = answerTable(answer.projection);\n\t    addAnswer(this, table);\n\t    data.table = table;\n\t    data.projection = answer.projection;\n\t    answer.nth = data.answers;\n\t    $(data.table).prologAnswer(answer);\n\t    return this;\n\t  }\n        } else\n\t{ answer.projection = data.projection;\n\t  answer.nth = data.answers;\n\t  $(data.table).prologAnswer(answer);\n\t  return this;\n\t}\n      }\n\n      var div = $.el.div({class:\"answer \"+(even ? \"even\" : \"odd\")},\n\t\t\t $.el.span({class:\"answer-no\"}, data.answers));\n\n      addAnswer(this, div);\n      $(div).prologAnswer(answer);\n    },\n\n    /**\n     * Add pengine output as `<span class=\"output\">`\n     * @param {String} data HTML that is inserted into the span.\n     * @return {DOM} the added node (a span)\n     */\n    outputHTML: function(data) {\n      var span = $.el.span({class:\"output\"});\n      addAnswer(this, span);\n      span.innerHTML = data;\n      runScripts(span);\n      return span;\n    },\n\n    /**\n     * Handle object output\n     */\n     downloadButton: function(obj) {\n       var button = $.el.a({class:\"download\"});\n       addAnswer(this, button);\n       $(button).downloader(obj);\n     },\n\n    /**\n     * Display a syntax error in the query.\n     * {Object} options\n     * {String} options.message is the message\n     * {Object} options.location contains the `line` and `ch` position\n     */\n     syntaxError: function(options) {\n       var data = this.data(pluginName);\n\n       options.data = \"<pre class=\\\"output msg-error\\\">\" +\n\t\t      options.message +\n\t\t      \"</pre>\";\n       options.location.file = true;\n       $(data.query.query_editor).prologEditor('highlightError', options);\n       return this;\n     },\n\n    /**\n     * Add an error message to the output.  The error is\n     * wrapped in a `<pre class=\"error\">` element.\n     * @param {String|Object} options If `options` is a string, it is a\n     * plain-text error message.  Otherwise it is the Pengine error\n     * object.\n     * @param {String} options.message is the plain error message\n     * @param {String} options.code is the error code\n     */\n    error: function(options) {\n      var msg;\n\n      if ( typeof(options) == 'object' ) {\n\tif ( options.code == \"died\" ) {\n\t  addAnswer(this, $.el.div({\n\t    class:\"RIP\",\n\t    title:\"Remote pengine timed out\"\n\t  }));\n\t  return this;\n\t} else if ( options.code == \"syntax_error\" )\n\t{ var m = options.message.match(/^HTTP:DATA:(\\d+):(\\d+):\\s*(.*)/);\n\n\t  if ( m && m.length == 4 ) {\n\t    this.prologRunner('syntaxError',\n\t\t\t      { location:\n\t\t\t\t{ line: parseInt(m[1])-1,\n\t\t\t\t  ch:\tparseInt(m[2])\n\t\t\t\t},\n\t\t\t\tmessage: m[3]\n\t\t\t      });\n\t    msg = \"Cannot run query due to a syntax error (check query window)\";\n\t  }\n\t}\n\tif ( !msg )\n\t  msg = options.message;\n      } else\n\tmsg = options;\n\n      addAnswer(this, $.el.pre({class:\"prolog-message msg-error\"}, msg));\n      return this;\n    },\n\n    /**\n     * Handle trace events\n     */\n    trace: function(data) {\n      var elem = this;\n      var goal = $.el.span({class:\"goal\"});\n      var prompt = data.data;\n      $(goal).html(prompt.goal);\n\n      function capitalizeFirstLetter(string) {\n\treturn string.charAt(0).toUpperCase() + string.slice(1);\n      }\n\n      function button(label, action, context) {\n\tvar btn = $.el.button({class:action,\n\t\t\t       title:label\n\t\t\t      },\n\t\t\t      $.el.span(label));\n\t$(btn).on(\"click\", function(ev) {\n\t  if ( context !== undefined ) {\n\t    action += \"(\"+Pengine.stringify(context(ev))+\")\";\n\t  }\n\t  data.pengine.respond(action);\n\t  $(ev.target).parent().remove();\n\t});\n\treturn btn;\n      }\n\n      addAnswer(this,\n\t\t$.el.div({class:\"prolog-trace\"},\n\t\t\t $.el.span({ class:\"depth\",\n\t\t\t             style:\"width:\"+(prompt.depth*5-1)+\"px\"\n\t\t\t\t   }, \"\\u00A0\"), /* &nbsp; */\n\t\t\t $.el.span({ class:\"port \"+prompt.port\n\t\t\t           },\n\t\t\t\t   capitalizeFirstLetter(prompt.port),\n\t\t\t\t   \":\"),\n\t\t\t goal));\n      if ( prompt.port == \"exception\" )\n\taddAnswer(this,\n\t\t  $.el.div({class:\"prolog-exception\"},\n\t\t\t   prompt.exception.message));\n      addAnswer(this,\n\t\t$.el.div({class:\"trace-buttons\"},\n\t\t\t button(\"Continue\",  \"nodebug\", function(ev) {\n\t\t\t   return breakpoints($(ev.target)\n\t\t\t\t    .closest(\".prolog-runner\"));\n\t\t\t }),\n\t\t\t button(\"Step into\", \"continue\"),\n\t\t\t button(\"Step over\", \"skip\"),\n\t\t\t button(\"Step out\",  \"up\"),\n\t\t\t button(\"Retry\",     \"retry\"),\n\t\t\t button(\"Abort\",     \"abort\")));\n\n      this.closest(\".swish\")\n          .find(\".tabbed\")\n          .trigger(\"trace-location\", prompt);\n\n      this.prologRunner('setState', \"wait-debug\");\n    },\n\n    /**\n     * set the placeholder of the input field.  This is normally\n     * done from the pengine's onprompt handler\n     * @param {String} p the new placeholder\n     */\n    setPrompt: function(p) {\n      this.find(\".controller input\").attr(\"placeholder\", p);\n    },\n\n    /**\n     * Support arbitrary jQuery requests from Prolog\n     */\n    jQuery: function(prompt) {\n      var request = prompt.data;\n      var receiver;\n\n      console.log(request);\n\n      if ( typeof(request.selector) == \"string\" ) {\n\treceiver = $(request.selector);\n      } else if ( typeof(request.selector) == \"object\" ) {\n\tswitch(request.selector.root) {\n\t  case \"this\":\t   root = this; break;\n\t  case \"cell\":\t   root = this.closest(\".nb-cell\");  break;\n\t  case \"notebook\": root = this.closest(\".notebook\"); break;\n\t  case \"swish\":\t   root = this.closest(\".swish\");    break;\n\t}\n\tif ( request.selector.sub == \"\" ) {\n\t  receiver = root;\n\t} else {\n\t  receiver = root.find(request.selector.sub);\n\t}\n      }\n\n      console.log(receiver);\n      var result = receiver[request.method].apply(receiver, request.arguments);\n      console.log(result);\n\n      prompt.pengine.respond(Pengine.stringify(result));\n    },\n\n    /**\n     * Handle a (dashboard) form.  This opens dialog from the supplied\n     * `html`.\n     * @param {Object} prompt\n     * @param {String} prompt.html contains the HTML content of the form\n     */\n    form: function(prompt) {\n      var data = this.data('prologRunner');\n\n      modal.show({\n\ttitle: \"Please enter parameters\",\n\tbody: function() {\n\t  this.html(prompt.data.html);\n\t  this.find(\"[data-search-in]\").search({search:false});\n\n\t  this.on(\"click\", \"button[data-action]\", function(ev) {\n\t    var button = $(ev.target).closest(\"button\");\n\t    var action = button.data('action');\n\n\t    if ( action == 'run' ) {\n\t      var formel = $(ev.target).closest(\"form\");\n\t      var fdata  = form.serializeAsObject(formel, true);\n\t      var s      = Pengine.stringify(fdata);\n\t      data.prolog.respond(s);\n\t    } else if ( action == 'cancel' ) {\n\t      data.prolog.respond(\"cancel\");\n\t    }\n\t    button.closest(\".modal\").modal('hide');\n\n\t    ev.preventDefault();\n\t    return false;\n\t  });\n\t}\n      });\n    },\n\n\n    /**\n     * send a response (to pengine onprompt handler) to the\n     * pengine and add the response to the dialogue as\n     * `div class=\"response\">`\n     * @param {String} s plain-text response\n     */\n    respond: function(text) {\n      var data = this.data('prologRunner');\n\n      if ( data.wait_for == \"term\" ) {\n\ts = termNoFullStop(text);\n\tif ( s == \"\" )\n\t  return null;\n      } else {\n\ts = Pengine.stringify(text+\"\\n\");\n      }\n\n      addAnswer(this, $.el.div({class:\"response\"}, text));\n      data.prolog.respond(s);\n      return this;\n    },\n\n    /**\n     * Stop the associated Prolog engines.\n     */\n    stop: function() {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data('prologRunner');\n\tdata.prolog.stop();\n      });\n    },\n\n    /**\n     * Stop the pengine if it is waiting for a next solution,\n     * abort it if it is running or waitin for input and ignore\n     * otherwise.\n     */\n    stopOrAbort: function() {\n      return this.each(function() {\n\tvar elem  = $(this);\n\tvar data  = elem.data('prologRunner');\n\tvar state = elem.prologRunner('getState');\n\n\tswitch(state)\n\t{ case \"running\":\n\t  case \"wait-input\":\n\t    data.prolog.abort();\n\t    break;\n\t  case \"wait-next\":\n\t    data.prolog.stop();\n\t}\n      });\n    },\n\n    /**\n     * Ask the associated Prolog engines for the next answer.\n     * @param {Integer} chunk maximum number of answers to return in the\n     * next chunk.\n     */\n    next: function(chunk) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data('prologRunner');\n\tdata.prolog.next(chunk);\n\telem.prologRunner('setState', \"running\");\n      });\n    },\n\n    /**\n     * Abort the associated Prolog engine.\n     */\n    abort: function() {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data('prologRunner');\n\tdata.prolog.abort();\n      });\n    },\n\n    /**\n     * If the associated pengine is alive, send it a `destroy`.  Next,\n     * remove the runner from its container.\n     */\n    close: function() {\n      if ( this.length ) {\n\tvar parents = this.parent();\n\n\tthis.each(function() {\n\t  var elem = $(this);\n\t  var data = elem.data('prologRunner');\n\n\t  if ( elem.prologRunner('alive') ) {\n\t    $(\".prolog-editor\").trigger('pengine-died', data.prolog.id);\n\t    data.prolog.abort();\n\t    elem.prologRunner('setState', 'aborted');\n\t  }\n\t});\n\tthis.remove();\n\n\tparents.trigger('scroll-to-bottom', true);\n      }\n      return this;\n    },\n\n    /**\n     * Provide help on running a query\n     */\n     help: function() {\n       $(\".swish-event-receiver\").trigger(\"help\", {file:\"runner.html\"});\n     },\n\n    /**\n     * Toggle or set the iconic state of the runner.\n     * @param {Boolean} [on] if `true`, make iconify, `false` expanded\n     * and toggle if unspecified\n     */\n    toggleIconic: function(on) {\n      if ( on == undefined ) {\n\tthis.toggleClass(\"iconic\");\n      } else if ( on ) {\n\tthis.addClass(\"iconic\");\n      } else {\n\tthis.removeClass(\"iconic\");\n      }\n\n      this.trigger('scroll-to-bottom', true);\n\n      return this;\n    },\n\n    /**\n     * Populate the menu associated with the pengine icon.\n     * @param {Object} [actions] associates labels with functions.\n     */\n    populateActionMenu: function(actions) {\n      var menu = this.find(\".runner-title .btn-group.dropdown\");\n\n      actions = $.extend({ \"Re-run\": function() { console.log(\"Re-Run \", this); }\n\t\t\t }, actions);\n\n      form.widgets.populateMenu(menu, this, actions);\n\n      return this;\n    },\n\n    /**\n     * Download query results as CSV.\n     */\n    downloadCSV: function(options) {\n      var data = this.data('prologRunner');\n      var query = termNoFullStop(data.query.query);\n\n      prolog.downloadCSV(query, data.query.source, options);\n\n      return this;\n    },\n\n    /**\n     * Save a permalink\n     */\n    permalink: function() {\n      var runner = this;\n      var data = this.data('prologRunner');\n\n      if ( data.permahash ) {\n\tvar href = config.http.locations.permalink + data.permahash;\n\thref = location.protocol + \"//\" + location.host + href;\n\tvar profile = $(\"#login\").login('get_profile',\n\t\t\t\t\t[ \"display_name\", \"avatar\", \"email\",\n\t\t\t\t\t  \"identity\"\n\t\t\t\t\t]);\n\tvar author  = profile.display_name;\n\n\tfunction savePermalink() {\n\t  this.append($.el.form(\n            { class:\"form-horizontal\"},\n\t      form.fields.hidden(\"identity\", profile.identity),\n\t      profile.identity ? undefined :\n\t\t\t       form.fields.hidden(\"avatar\", profile.avatar),\n\t      form.fields.link(href),\n\t      form.fields.fileName(null, false),\n\t      form.fields.title(),\n\t      form.fields.description(),\n\t      form.fields.tags([]),\n\t      form.fields.author(author, profile.identity),\n\t      form.fields.buttons(\n\t      { label: \"Save permalink\",\n\t\taction: function(ev, as) {\n\t\t\t  runner.prologRunner('save_permalink', as);\n\t\t\t  return false;\n\t\t\t}\n\t      })));\n\t}\n\n\tform.showDialog({\n\t  title: \"Save permalink\",\n\t  body:\t savePermalink\n\t});\n      } else {\n\tmodal.alert(\"No permahash\");\n      }\n\n      return this;\n    },\n\n    save_permalink: function(as) {\n      var runner = this;\n      var data = this.data('prologRunner');\n      var post = {\n        data: data.permahash,\n\ttype: \"lnk\",\n\tmeta: as\n      };\n\n      delete post.meta.link;\n\n      $.ajax({ url: config.http.locations.web_storage,\n               dataType: \"json\",\n\t       contentType: \"application/json\",\n\t       type: \"POST\",\n\t       data: JSON.stringify(post),\n\t       success: function(reply) {\n\t\t if ( reply.error ) {\n\t\t   modal.alert(errorString(\"Could not save\", reply));\n\t\t } else {\n\t\t   modal.feedback({ html: \"Saved\",\n\t\t\t\t    owner: runner\n\t\t                  });\n\t\t }\n\t       },\n\t       error: function(jqXHR, textStatus, errorThrown) {\n\t\t if ( jqXHR.status == 403 ) {\n\t\t   modal.alert(\"Permission denied.  Please try a different name\");\n\t\t } else {\n\t\t   alert('Save failed: '+textStatus);\n\t\t }\n\t       }\n             });\n\n      return this;\n    },\n\n  /**\n   * @param {String} state defines the new state of the pengine.\n   * Known states are:\n   *\n   *   - \"idle\"\t      - Pengine is not yet created\n   *   - \"running\"    - Pengine is running\n   *   - \"wait-next\"  - Pengine produced a non-deterministic answer\n   *   - \"wait-input\" - Pengine waits for input\n   *   - \"wait-debug\" - Pengine waits for for debugger reply\n   *   - \"true\"       - Pengine produced the last answer\n   *   - \"false\"      - Pengine failed\n   *   - \"error\"      - Pengine raised an error\n   *   - \"stopped\"    - User selected *stop* after non-det answer\n   *   - \"aborted\"    - User aborted execution\n   *\n   * The widget is brought to the new  state   by  adding the state as a\n   * class to all members of  the   class  `show-state`, which currently\n   * implies the pengines icon at the   top-left  and a _controller_ div\n   * created by controllerDiv().\n   */\n   setState: function(state) {\n     var data = this.data('prologRunner');\n\n     if ( !data )\n       return;\n\n     if ( data.prolog.state != state ) {\n       var stateful = this.find(\".show-state\");\n       var query = data.query;\n\n       stateful.removeClass(data.prolog.state).addClass(state);\n       data.prolog.state = state;\n       if ( !aliveState(state) && data.savedFocus ) {\n\t $(data.savedFocus).focus();\n\t data.savedFocus = null;\n       } else if ( state == \"wait-input\" ) {\n\t this.find(\"input\").focus();\n       }\n\n       if ( state == \"true\" && query.success )\n\t query.success.call(this, data.prolog);\n       if ( !aliveState(state) && query.complete )\n\t query.complete.call(this, data.prolog);\n     }\n\n     var runners = RS(this);\n     if ( !aliveState(state) ) {\n       var elem = this;\n       $(\".prolog-editor\").trigger('pengine-died', data.prolog.id);\n       data.prolog.destroy();\n       setTimeout(function() { elem.trigger('scroll-to-bottom') }, 100);\n     } else if ( state == \"wait-next\" || state == \"true\" ) {\n       var elem = this;\n       setTimeout(function() { elem.trigger('scroll-to-bottom') }, 100);\n     } else {\n       this.trigger('scroll-to-bottom');\n     }\n\n     return this;\n   },\n\n   /** @returns {String} representing the current state of the\n    * query execution.\n    * @see {@link setState}\n    */\n   getState: function() {\n     var data = this.data('prologRunner');\n\n     return data.prolog ? data.prolog.state : \"idle\";\n   },\n\n   /**\n    * @returns {Boolean} true if the related pengine is alive.  That\n    * means it has state `\"running\"`, `\"wait-next\"`, `\"wait-input\"` or\n    * `\"wait-debug\"`\n    */\n   alive: function() {\n     return aliveState(this.prologRunner('getState'));\n   },\n\n   /**\n    * Handle ping data, updating the sparkline status\n    */\n   ping: function(stats) {\n     var data = this.data('prologRunner');\n\n     if ( data && data.prolog && data.prolog.state == \"running\" ) {\n       var spark = this.find(\".sparklines\");\n       var stacks = [\"global\", \"local\", \"trail\"];\n       var colors = [\"red\", \"blue\", \"green\"];\n       var names  = [\"Global \", \"Local \", \"Trail \"];\n       var maxlength = 10;\n\n       if ( !data.stacks )\n\t data.stacks = { global:{usage:[]}, local:{usage:[]}, trail:{usage:[]} };\n\n       for(i=0; i<stacks.length; i++) {\n\t var s = stacks[i];\n\t var limit = stats.stacks[s].limit;\n\t var usage = stats.stacks[s].usage;\n\n\t var u = Math.log10((usage/limit)*10000);\n\t function toBytes(limit, n) {\n\t   var bytes = Math.round((Math.pow(10, n)/10000)*limit);\n\n\t   function numberWithCommas(x) {\n\t     x = x.toString();\n\t     var pattern = /(-?\\d+)(\\d{3})/;\n\t     while (pattern.test(x))\n\t       x = x.replace(pattern, \"$1,$2\");\n\t     return x;\n\t   }\n\n\t   return numberWithCommas(bytes);\n\t }\n\n\t data.stacks[s].limit = limit;\n\t if ( data.stacks[s].usage.length >= maxlength )\n\t   data.stacks[s].usage = data.stacks[s].usage.slice(1);\n\t data.stacks[s].usage.push(u);\n\t spark.sparkline(data.stacks[s].usage,\n\t\t\t { height: \"2em\",\n\t\t\t   composite: i>0,\n\t\t\t   chartRangeMin: 0,\n\t\t\t   chartRangeMax: 4,\n\t\t\t   lineColor: colors[i],\n\t\t\t   tooltipPrefix: names[i],\n\t\t\t   tooltipSuffix: \" bytes\",\n\t\t\t   tooltipChartTitle: i == 0 ? \"Stack usage\" : undefined,\n\t\t\t   numberFormatter: function(n) {\n\t\t\t     return toBytes(limit, n);\n\t\t\t   }\n\t\t\t });\n       }\n     }\n   }\n\n  }; // methods\n\n\n\t\t /*******************************\n\t\t *     PRIVATE FUNCTIONS\t*\n\t\t *******************************/\n\n  function RS(from) {\t\t\t/* find runners from parts */\n    return $(from).closest(\".prolog-runners\");\n  }\n\n  function addAnswer(runner, html) {\n    var results = runner.find(\".runner-results\");\n    results.append(html);\n    return this;\n  }\n\n  function aliveState(state) {\n    switch( state )\n    { case \"running\":\n      case \"wait-next\":\n      case \"wait-input\":\n      case \"wait-debug\":\n\treturn true;\n      default:\n\treturn false;\n    }\n  }\n\n  function answerTable(projection) {\n    var tds = [{class:\"projection\"}];\n\n    for(i=0; i<projection.length; i++)\n      tds.push($.el.th({class:\"pl-pvar\"}, projection[i]));\n    tds.push($.el.th({class:\"answer-nth\"}, \"\"));\n\n    var table = $.el.table({class:\"prolog-answers\"},\n\t\t\t   $.el.tbody($.el.tr.apply(this, tds)));\n\n    return table;\n  }\n\n\t\t /*******************************\n\t\t *\t SCRIPTS IN NODES\t*\n\t\t *******************************/\n\n  var node_id = 1;\n  function runScripts(elem) {\n    var scripts = [];\n    elem = $(elem);\n\n    elem.find(\"script\").each(function() {\n      var type = this.getAttribute('type')||\"text/javascript\";\n      if ( type == \"text/javascript\" )\n\tscripts.push(this.textContent);\n    });\n\n    if ( scripts.length > 0 ) {\n      var script = \"(function(node){\" + scripts.join(\"\\n\") + \"})\";\n      var node = new Node({\n        node: elem[0]\n      });\n\n      try {\n\teval(script)(node);\n      } catch(e) {\n\talert(e);\n      }\n    }\n  }\n\n  function Node(options) {\n    this.my_node = options.node;\n  }\n\n  Node.prototype.node = function() {\n    return $(this.my_node);\n  }\n\n  /**\n   * Provide a unique id for the node.  This can be used as prefix to\n   * avoid conflicts for `id` attributes.\n   */\n  Node.prototype.unique_id = function() {\n    if ( !this.uid )\n      this.uid = node_id++;\n    return this.uid;\n  }\n\n\n\t\t /*******************************\n\t\t *   HANDLE PROLOG CALLBACKS\t*\n\t\t *******************************/\n\n  function breakpoints(runner) {\n    var data = runner.data(pluginName);\n\n    return $(runner).parents(\".swish\").swish('breakpoints', data.prolog.id);\n  }\n\n  function registerSources(pengine) {\n    var runner = pengine.options.runner;\n    var data   = runner.data(pluginName);\n\n    if ( data.query.editor )\n      $(data.query.editor).prologEditor('pengine', {add: pengine.id});\n  }\n\n  function handleCreate() {\n    var elem = this.pengine.options.runner;\n    var data = elem.data(pluginName);\n    if ( data == undefined ) {\n      this.pengine.destroy();\t\t\t/* element already gone */\n    } else\n    { var options = $.extend({}, data.screen);\n      var bps;\n      var resvar = config.swish.residuals_var || \"Residuals\";\n      var hashvar = config.swish.permahash_var;\n\n      if ( hashvar )\n\thashvar = \", \"+hashvar;\n      else\n\thashvar = \"\";\n\n      registerSources(this.pengine);\n\n      if ( (bps = breakpoints(elem)) )\n\toptions.breakpoints = Pengine.stringify(bps);\n      if ( data.chunk )\n\toptions.chunk = data.chunk;\n\n      this.pengine.ask(\"'$swish wrapper'((\\n\" +\n\t\t       termNoFullStop(data.query.query) +\n\t\t       \"\\n), [\"+resvar+hashvar+\"])\", options);\n      elem.prologRunner('setState', \"running\");\n    }\n  }\n\n  function handleSuccess() {\n    var elem = this.pengine.options.runner;\n\n    if ( elem.data(pluginName) == undefined )\n    { this.pengine.destroy();\t\t\t/* element already gone */\n    } else {\n      for(var i=0; i<this.data.length; i++) {\n\tvar answer = this.data[i];\n\tif ( this.projection )\n\t  answer.projection = this.projection;\n\n\telem.prologRunner('renderAnswer', answer);\n      }\n      if ( this.time > 0.1 )\t/* more than 0.1 sec. CPU (TBD: preference) */\n\taddAnswer(elem, $.el.div(\n\t  {class:\"cputime\"},\n\t  $.el.span(this.time.toFixed(3),\n\t\t    \" seconds cpu time\")));\n\n      elem.prologRunner('setState', this.more ? \"wait-next\" : \"true\");\n    }\n  }\n\n  function handleFailure() {\n    var elem = this.pengine.options.runner;\n\n    addAnswer(elem, $.el.span({class: \"prolog-false\"}, \"false\"));\n    elem.prologRunner('setState', \"false\");\n  }\n\n  function handleStop() {\n    var elem = this.pengine.options.runner;\n\n    elem.prologRunner('setState', \"stopped\");\n  }\n\n  function handlePrompt() {\n    var elem   = this.pengine.options.runner;\n    var data   = elem.data('prologRunner');\n    var prompt = this.data || \"Please enter a Prolog term\";\n\n    data.wait_for = \"term\";\n\n    if ( typeof(prompt) == \"object\" ) {\n      if ( prompt.type == \"trace\" ) {\n\treturn elem.prologRunner('trace', this);\n      } else if ( prompt.type == \"form\" ) {\n\treturn elem.prologRunner('form', this);\n      } else if ( prompt.type == \"jQuery\" ) {\n\treturn elem.prologRunner('jQuery', this);\n      } else if ( prompt.type == \"console\" ) {\n\tprompt = prompt.prompt || \"console> \";\n\tdata.wait_for = \"line\";\n      } else {\n\tprompt = JSON.stringify(prompt);\n      }\n    }\n\n    elem.prologRunner('setPrompt', prompt);\n    elem.prologRunner('setState', \"wait-input\");\n  }\n\n  /**\n   * Make indicated source locations clickable.\n   * @param {String} msg is the HTML error message string\n   * @param {DOM} editor is the source editor; the editor for pengine://\n   * source locations\n   */\n  function clickableLocations(msg, editor) {\n    var pattern = /pengine:\\/\\/[-0-9a-f]{36}\\/src:(\\d+)/;\n\n    return msg.replace(pattern, function(matched) {\n      var line = matched.match(pattern)[1];\n      return \"<a class='goto-error' title='Goto location'>\" +\n               \"<span class='glyphicon glyphicon-hand-right'></span> \"+\n\t       \"<b>line <span class='line'>\"+line+\"</span></b></a>\";\n    });\n  }\n\n  function gotoError(ev) {\n    var a        = $(ev.target).closest(\"a.goto-error\");\n    var ctx      = $(ev.target).closest(\".error-context\");\n    var econtext = ctx.data(\"error_context\");\n\n    if ( a[0] ) {\n      var line = parseInt(a.find(\"span.line\").text());\n      var file = a.find(\"span.file\").text();\n\n      ev.preventDefault();\n\n      if ( file ) {\n\tctx.closest(\"body.swish\")\n\t   .swish('playFile', {file:file, line:line});\n      } else {\n\t$(econtext.editor).prologEditor('gotoLine', line);\n      }\n\n      return false;\n    } else if ( econtext && econtext.location.file ) {\n      ctx.closest(\"body.swish\")\n\t .swish('playFile', econtext.location);\n    } else {\n      $(econtext.editor).prologEditor('gotoLine', econtext.location.line);\n    }\n  }\n\n  /**\n   * handle `pengine_output/1`.  Note that compiler warnings and errors\n   * also end up here. If they have a location, this is provided through\n   * this.location, which contains `file`, `line` and `ch`.  We must use\n   * this to indicate the location of the error in CodeMirror.\n   */\n\n  function handleOutput(msg) {\n    var elem = msg.pengine.options.runner;\n    var data = elem.data(pluginName);\n\n    if ( !data )\t\t\t\t/* runner is gone */\n      return;\n\n    if ( typeof(msg.data) == 'string' ) {\n      var econtext = {editor: data.query.editor};\n\n      msg.data = msg.data.replace(/'[-0-9a-f]{36}':/g, \"\")  /* remove module */\n\n      if ( msg.location ) {\n\tvar loc = msg.location;\n\tvar prefix = \"swish://\";\n\tvar span;\n\n\tfunction clickableError() {\n\t  var str = loc.file+\":\"+loc.line+\":\";\n\t  if ( loc.ch ) str += loc.ch+\":\";\n\t  str += \"\\\\s*\";\n\n\t  msg.data = clickableLocations(\n\t\t\t msg.data.replace(new RegExp(str, \"g\"), \"\"),\n\t\t\t econtext.editor);\n\n\t  span = elem.prologRunner('outputHTML', msg.data);\n\n\t  $(span).addClass(\"error-context\");\n\t  $(span).append($.el.span({class:\"glyphicon glyphicon-hand-right\"}));\n\t  $(span).attr(\"title\", \"Error in program.  Click to show in context\");\n\t  $(span).on(\"click\", gotoError);\n\t  $(span).data(\"error_context\", econtext);\n\t}\n\n\tif ( loc.file.startsWith(prefix) ) {\n\t  var file = loc.file.slice(prefix.length);\n\t  econtext.location = {file:file, line:loc.line};\n\t  clickableError();\n\t} else if ( loc.file.startsWith(\"pengine://\") ) {\n\t  econtext.location = {line:loc.line};\n\t  clickableError(data.query.editor);\n\t}\n\tregisterSources(msg.pengine);\n\tmsg.error_context = econtext;\n\tmsg.error_handler = gotoError;\n\t$(\".swish-event-receiver\").trigger(\"source-error\", msg);\n      } else {\n\tvar span = elem.prologRunner('outputHTML',\n\t\t\t\t     clickableLocations(msg.data,\n\t\t\t\t\t\t\tecontext.editor));\n\t$(span).on(\"click\", gotoError);\n\t$(span).data(\"error_context\", econtext);\n      }\n    } else if ( typeof(msg.data) == 'object' ) {\n      elem.prologRunner(msg.data.action, msg.data);\n    } else {\n      console.log(msg.data);\n    }\n    elem.trigger('scroll-to-bottom');\n  }\n\n  function handleError() {\n    var elem = this.pengine.options.runner;\n    var msg;\n\n    if ( this.code == \"too_many_pengines\" ) {\n      this.message = \"Too many open queries.  Please complete some\\n\"+\n\t\t     \"queries by using |Next|, |Stop| or by\\n\"+\n\t\t     \"closing some queries.\";\n    } else if ( typeof(this.data) == 'string' ) {\n      this.message = this.data\n\t\t\t .replace(new RegExp(\"'\"+this.pengine.id+\"':\", 'g'), \"\");\n    } else {\n      this.message = \"Unknown error\";\n    }\n\n    elem.prologRunner('error', this);\n    elem.prologRunner('setState', \"error\");\n  }\n\n  function handleAbort() {\n    var elem = this.pengine.options.runner;\n    var data = elem.data('prologRunner');\n\n    if ( data ) {\n      elem.prologRunner('error', \"** Execution aborted **\");\n      elem.prologRunner('setState', \"aborted\");\n    } else {\n      this.pengine.destroy();\n    }\n  }\n\n  function handlePing() {\n    var elem = this.pengine.options.runner;\n\n    elem.prologRunner('ping', this.data);\n  }\n\n  /**\n   * @param {Object} answer a positive answer from the Pengine\n   * @returns {Boolean} true if the answer has printable part, i.e., no\n   * variable bindings nor residual goals.\n   */\n\n  function answerHasOutput(answer) {\n    return answer.variables.length > 0 || answer.residuals;\n  }\n\n  function termNoFullStop(s) {\n    return String($.trim(s)).replace(/\\.$/, \"\");\n  }\n\n  /**\n   * Run a Prolog query by starting a remote pengine.\n   *\n   * @class prologRunner\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.prologRunner = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n\n\t\t   /*******************************\n\t\t   *\t       UTIL\t\t*\n\t\t   *******************************/\n\n  function glyphButton(glyph, title) {\n    var btn = $.el.a({href:\"#\", class:\"close btn btn-link btn-sm\",\n\t\t      title:title},\n\t\t     $.el.span({class:\"glyphicon glyphicon-\"+glyph}));\n\n    return btn;\n  }\n});\n\n","/*\n * [js-sha1]{@link https://github.com/emn178/js-sha1}\n *\n * @version 0.6.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n/*jslint bitwise: true */\n(function() {\n  'use strict';\n\n  var root = typeof window === 'object' ? window : {};\n  var NODE_JS = !root.JS_SHA1_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n  if (NODE_JS) {\n    root = global;\n  }\n  var COMMON_JS = !root.JS_SHA1_NO_COMMON_JS && typeof module === 'object' && module.exports;\n  var AMD = typeof define === 'function' && define.amd;\n  var HEX_CHARS = '0123456789abcdef'.split('');\n  var EXTRA = [-2147483648, 8388608, 32768, 128];\n  var SHIFT = [24, 16, 8, 0];\n  var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];\n\n  var blocks = [];\n\n  var createOutputMethod = function (outputType) {\n    return function (message) {\n      return new Sha1(true).update(message)[outputType]();\n    };\n  };\n\n  var createMethod = function () {\n    var method = createOutputMethod('hex');\n    if (NODE_JS) {\n      method = nodeWrap(method);\n    }\n    method.create = function () {\n      return new Sha1();\n    };\n    method.update = function (message) {\n      return method.create().update(message);\n    };\n    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n      var type = OUTPUT_TYPES[i];\n      method[type] = createOutputMethod(type);\n    }\n    return method;\n  };\n\n  var nodeWrap = function (method) {\n    var crypto = eval(\"require('crypto')\");\n    var Buffer = eval(\"require('buffer').Buffer\");\n    var nodeMethod = function (message) {\n      if (typeof message === 'string') {\n        return crypto.createHash('sha1').update(message, 'utf8').digest('hex');\n      } else if (message.constructor === ArrayBuffer) {\n        message = new Uint8Array(message);\n      } else if (message.length === undefined) {\n        return method(message);\n      }\n      return crypto.createHash('sha1').update(new Buffer(message)).digest('hex');\n    };\n    return nodeMethod;\n  };\n\n  function Sha1(sharedMemory) {\n    if (sharedMemory) {\n      blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      this.blocks = blocks;\n    } else {\n      this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n    }\n\n    this.h0 = 0x67452301;\n    this.h1 = 0xEFCDAB89;\n    this.h2 = 0x98BADCFE;\n    this.h3 = 0x10325476;\n    this.h4 = 0xC3D2E1F0;\n\n    this.block = this.start = this.bytes = this.hBytes = 0;\n    this.finalized = this.hashed = false;\n    this.first = true;\n  }\n\n  Sha1.prototype.update = function (message) {\n    if (this.finalized) {\n      return;\n    }\n    var notString = typeof(message) !== 'string';\n    if (notString && message.constructor === root.ArrayBuffer) {\n      message = new Uint8Array(message);\n    }\n    var code, index = 0, i, length = message.length || 0, blocks = this.blocks;\n\n    while (index < length) {\n      if (this.hashed) {\n        this.hashed = false;\n        blocks[0] = this.block;\n        blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n        blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n        blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n        blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      }\n\n      if(notString) {\n        for (i = this.start; index < length && i < 64; ++index) {\n          blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n        }\n      } else {\n        for (i = this.start; index < length && i < 64; ++index) {\n          code = message.charCodeAt(index);\n          if (code < 0x80) {\n            blocks[i >> 2] |= code << SHIFT[i++ & 3];\n          } else if (code < 0x800) {\n            blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n          } else if (code < 0xd800 || code >= 0xe000) {\n            blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n          } else {\n            code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n            blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n          }\n        }\n      }\n\n      this.lastByteIndex = i;\n      this.bytes += i - this.start;\n      if (i >= 64) {\n        this.block = blocks[16];\n        this.start = i - 64;\n        this.hash();\n        this.hashed = true;\n      } else {\n        this.start = i;\n      }\n    }\n    if (this.bytes > 4294967295) {\n      this.hBytes += this.bytes / 4294967296 << 0;\n      this.bytes = this.bytes % 4294967296;\n    }\n    return this;\n  };\n\n  Sha1.prototype.finalize = function () {\n    if (this.finalized) {\n      return;\n    }\n    this.finalized = true;\n    var blocks = this.blocks, i = this.lastByteIndex;\n    blocks[16] = this.block;\n    blocks[i >> 2] |= EXTRA[i & 3];\n    this.block = blocks[16];\n    if (i >= 56) {\n      if (!this.hashed) {\n        this.hash();\n      }\n      blocks[0] = this.block;\n      blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n    }\n    blocks[14] = this.hBytes << 3 | this.bytes >>> 29;\n    blocks[15] = this.bytes << 3;\n    this.hash();\n  };\n\n  Sha1.prototype.hash = function () {\n    var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4;\n    var f, j, t, blocks = this.blocks;\n\n    for(j = 16; j < 80; ++j) {\n      t = blocks[j - 3] ^ blocks[j - 8] ^ blocks[j - 14] ^ blocks[j - 16];\n      blocks[j] =  (t << 1) | (t >>> 31);\n    }\n\n    for(j = 0; j < 20; j += 5) {\n      f = (b & c) | ((~b) & d);\n      t = (a << 5) | (a >>> 27);\n      e = t + f + e + 1518500249 + blocks[j] << 0;\n      b = (b << 30) | (b >>> 2);\n\n      f = (a & b) | ((~a) & c);\n      t = (e << 5) | (e >>> 27);\n      d = t + f + d + 1518500249 + blocks[j + 1] << 0;\n      a = (a << 30) | (a >>> 2);\n\n      f = (e & a) | ((~e) & b);\n      t = (d << 5) | (d >>> 27);\n      c = t + f + c + 1518500249 + blocks[j + 2] << 0;\n      e = (e << 30) | (e >>> 2);\n\n      f = (d & e) | ((~d) & a);\n      t = (c << 5) | (c >>> 27);\n      b = t + f + b + 1518500249 + blocks[j + 3] << 0;\n      d = (d << 30) | (d >>> 2);\n\n      f = (c & d) | ((~c) & e);\n      t = (b << 5) | (b >>> 27);\n      a = t + f + a + 1518500249 + blocks[j + 4] << 0;\n      c = (c << 30) | (c >>> 2);\n    }\n\n    for(; j < 40; j += 5) {\n      f = b ^ c ^ d;\n      t = (a << 5) | (a >>> 27);\n      e = t + f + e + 1859775393 + blocks[j] << 0;\n      b = (b << 30) | (b >>> 2);\n\n      f = a ^ b ^ c;\n      t = (e << 5) | (e >>> 27);\n      d = t + f + d + 1859775393 + blocks[j + 1] << 0;\n      a = (a << 30) | (a >>> 2);\n\n      f = e ^ a ^ b;\n      t = (d << 5) | (d >>> 27);\n      c = t + f + c + 1859775393 + blocks[j + 2] << 0;\n      e = (e << 30) | (e >>> 2);\n\n      f = d ^ e ^ a;\n      t = (c << 5) | (c >>> 27);\n      b = t + f + b + 1859775393 + blocks[j + 3] << 0;\n      d = (d << 30) | (d >>> 2);\n\n      f = c ^ d ^ e;\n      t = (b << 5) | (b >>> 27);\n      a = t + f + a + 1859775393 + blocks[j + 4] << 0;\n      c = (c << 30) | (c >>> 2);\n    }\n\n    for(; j < 60; j += 5) {\n      f = (b & c) | (b & d) | (c & d);\n      t = (a << 5) | (a >>> 27);\n      e = t + f + e - 1894007588 + blocks[j] << 0;\n      b = (b << 30) | (b >>> 2);\n\n      f = (a & b) | (a & c) | (b & c);\n      t = (e << 5) | (e >>> 27);\n      d = t + f + d - 1894007588 + blocks[j + 1] << 0;\n      a = (a << 30) | (a >>> 2);\n\n      f = (e & a) | (e & b) | (a & b);\n      t = (d << 5) | (d >>> 27);\n      c = t + f + c - 1894007588 + blocks[j + 2] << 0;\n      e = (e << 30) | (e >>> 2);\n\n      f = (d & e) | (d & a) | (e & a);\n      t = (c << 5) | (c >>> 27);\n      b = t + f + b - 1894007588 + blocks[j + 3] << 0;\n      d = (d << 30) | (d >>> 2);\n\n      f = (c & d) | (c & e) | (d & e);\n      t = (b << 5) | (b >>> 27);\n      a = t + f + a - 1894007588 + blocks[j + 4] << 0;\n      c = (c << 30) | (c >>> 2);\n    }\n\n    for(; j < 80; j += 5) {\n      f = b ^ c ^ d;\n      t = (a << 5) | (a >>> 27);\n      e = t + f + e - 899497514 + blocks[j] << 0;\n      b = (b << 30) | (b >>> 2);\n\n      f = a ^ b ^ c;\n      t = (e << 5) | (e >>> 27);\n      d = t + f + d - 899497514 + blocks[j + 1] << 0;\n      a = (a << 30) | (a >>> 2);\n\n      f = e ^ a ^ b;\n      t = (d << 5) | (d >>> 27);\n      c = t + f + c - 899497514 + blocks[j + 2] << 0;\n      e = (e << 30) | (e >>> 2);\n\n      f = d ^ e ^ a;\n      t = (c << 5) | (c >>> 27);\n      b = t + f + b - 899497514 + blocks[j + 3] << 0;\n      d = (d << 30) | (d >>> 2);\n\n      f = c ^ d ^ e;\n      t = (b << 5) | (b >>> 27);\n      a = t + f + a - 899497514 + blocks[j + 4] << 0;\n      c = (c << 30) | (c >>> 2);\n    }\n\n    this.h0 = this.h0 + a << 0;\n    this.h1 = this.h1 + b << 0;\n    this.h2 = this.h2 + c << 0;\n    this.h3 = this.h3 + d << 0;\n    this.h4 = this.h4 + e << 0;\n  };\n\n  Sha1.prototype.hex = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4;\n\n    return HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n           HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n           HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n           HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n           HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n           HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n           HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n           HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n           HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n           HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n           HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n           HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n           HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +\n           HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n           HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n           HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n           HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +\n           HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +\n           HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +\n           HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F];\n  };\n\n  Sha1.prototype.toString = Sha1.prototype.hex;\n\n  Sha1.prototype.digest = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4;\n\n    return [\n      (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,\n      (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,\n      (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,\n      (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,\n      (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF\n    ];\n  };\n\n  Sha1.prototype.array = Sha1.prototype.digest;\n\n  Sha1.prototype.arrayBuffer = function () {\n    this.finalize();\n\n    var buffer = new ArrayBuffer(20);\n    var dataView = new DataView(buffer);\n    dataView.setUint32(0, this.h0);\n    dataView.setUint32(4, this.h1);\n    dataView.setUint32(8, this.h2);\n    dataView.setUint32(12, this.h3);\n    dataView.setUint32(16, this.h4);\n    return buffer;\n  };\n\n  var exports = createMethod();\n\n  if (COMMON_JS) {\n    module.exports = exports;\n  } else {\n    root.sha1 = exports;\n    if (AMD) {\n      define('sha1',[],function () {\n        return exports;\n      });\n    }\n  }\n})();\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2015-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Manage the cell structure of a notebook modelled after IPython\n * NoteBook.  The nodebook consists of a toolbar with a series of\n * buttons and manages a list of cells.  The file defines two plugins\n * `notebook`, implementing the overall notebook and `nbCell`,\n * implementing a single cell.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n */\n\ndefine('notebook',[ \"jquery\", \"config\", \"tabbed\", \"form\",\n\t \"preferences\", \"modal\", \"prolog\", \"links\", \"utils\",\n\t \"cm/lib/codemirror\", \"editor\", \"laconic\", \"runner\", \"storage\", \"sha1\",\n       ],\n       function($, config, tabbed, form, preferences, modal, prolog, links,\n\t        utils, CodeMirror) {\n\nvar cellTypes = {\n  \"program\":  { label:\"Program\",  prefix:\"p\"   },\n  \"query\":    { label:\"Query\",    prefix:\"q\"   },\n  \"markdown\": { label:\"Markdown\", prefix:\"md\"  },\n  \"html\":     { label:\"HTML\",     prefix:\"htm\" }\n};\n\n/* Support ```eval using Prolog mode */\nCodeMirror.modes.eval = CodeMirror.modes.prolog;\n\n(function($) {\n  var pluginName = 'notebook';\n  var clipboard = null;\n\n  /** @lends $.fn.notebook */\n  var methods = {\n    /**\n     * Initialize a Prolog Notebook.\n     * @param {Object} options\n     * @param {String} [options.value] provides the initial content\n     * @param {Boolean} [options.fullscreen] open notebook in fullscreen\n     * mode.\n     */\n    _init: function(options) {\n      options = options||{};\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar storage = {};\t\t/* storage info */\n\tvar data = {};\t\t\t/* private data */\n\tvar toolbar, content;\n\n\telem.addClass(\"notebook\");\n\telem.addClass(\"swish-event-receiver\");\n\n\tfunction notebookMenu() {\n\t  var icon = $.el.span({class:\"glyphicon glyphicon-menu-hamburger\"});\n\t  var menu = form.widgets.dropdownButton(\n\t    icon,\n\t    { divClass:\"notebook-menu btn-transparent\",\n\t      ulClass:\"pull-right\",\n\t      client:elem,\n\t      actions:\n\t      { \"Delete cell\":     function() { this.notebook('delete'); },\n\t\t\"Copy cell\":       function() { this.notebook('copy'); },\n\t\t\"Paste cell\":      function() { this.notebook('paste'); },\n\t\t\"Move cell up\":    function() { this.notebook('up'); },\n\t\t\"Move cell down\":  function() { this.notebook('down'); },\n\t\t\"Insert cell\":     function() { this.notebook('insertBelow'); },\n\t\t\"--\":\t\t   \"Overall options\",\n\t\t\"Clear all\":       function() { this.notebook('clear_all'); },\n\t\t\"Play\":            function() { this.notebook('run_all'); },\n\t\t\"Settings\":        function() { this.notebook('settings'); },\n\t\t\"---\":\t\t   \"Notebook actions\",\n\t\t\"Exit fullscreen\": function() { this.notebook('fullscreen',false)}\n\t      }\n\t    });\n\n\t  return menu;\n\t}\n\n\telem.append(toolbar = $.el.div(\n            {class:\"nb-toolbar\"},\n\t    glyphButton(\"trash\", \"delete\", \"Delete cell\", \"warning\"),\n\t    sep(),\n\t    glyphButton(\"copy\", \"copy\", \"Copy cell\", \"default\"),\n\t    glyphButton(\"paste\", \"paste\", \"Paste cell below\", \"default\"),\n\t    sep(),\n\t    glyphButton(\"chevron-up\", \"up\", \"Move cell up\", \"default\"),\n\t    glyphButton(\"chevron-down\", \"down\", \"Move cell down\", \"default\"),\n\t    sep(),\n\t    glyphButton(\"plus\", \"insertBelow\", \"Insert cell below\", \"primary\"),\n\t    sep(),\n\t    glyphButton(\"erase\", \"clear_all\", \"Clear all query output\", \"warning\"),\n\t    glyphButton(\"play\", \"run_all\", \"Run all queries\", \"primary\"),\n\t    glyphButton(\"wrench\", \"settings\", \"Settings\", \"default\"),\n\t    glyphButton(\"fullscreen\", \"fullscreen\", \"Full screen\", \"default\")\n\t    ));\n\telem.append(notebookMenu());\n\telem.append($.el.div({class:\"nb-view\", tabIndex:\"-1\"},\n\t\t\t     content=$.el.div({class:\"nb-content\"}),\n\t\t\t     $.el.div({class:\"nb-bottom\"})));\n\n\t$(toolbar).on(\"click\", \"a.btn\", function(ev) {\n\t  var action = $(ev.target).closest(\"a\").data(\"action\");\n\t  elem.notebook(action);\n\t  ev.preventDefault();\n\t  return false;\n\t});\n\n\t$(content).on(\"click\", \".nb-cell-buttons a.btn\", function(ev) {\n\t  var a    = $(ev.target).closest(\"a\");\n\t  var cell = a.closest(\".nb-cell\");\n\n\t  var action = a.data(\"action\");\n\t  cell.nbCell(action);\n\t  ev.preventDefault();\n\t  return false;\n\t});\n\n\t$(content).on(\"mouseenter mouseleave\", \".nb-menu-sense\", function(ev) {\n\t  var mdiv = $(ev.target).closest(\".nb-menu\");\n\n\t  if ( ev.type == \"mouseenter\" ) {\n\t    var select = cell_type_select_div();\n\n\t    mdiv.find(\".nb-menu-line\").css(\"background-color\", \"#333\");\n\n\t    function removeSelector() {\n\t      select.remove();\n\t      mdiv.find(\".nb-menu-line\").css(\"background-color\", \"#fff\");\n\t      data.menu_state = \"idle\";\n\t    }\n\n\t    select.hide();\n\t    mdiv.append(select);\n\t    data.menu_state = \"waiting\";\n\t    setTimeout(function() {\n\t      if ( mdiv.find(\":hover\").length > 0 ) {\n\t\tdata.menu_state = \"showing\";\n\t\tselect.on(\"mouseleave\", removeSelector);\n\t\tselect.fadeIn(400);\n\t      } else {\n\t\tremoveSelector();\n\t      }\n\t    }, 250);\n\t  } else {\n\t    if ( data.menu_state != \"showing\" )\n\t      mdiv.find(\".nb-menu-line\").css(\"background-color\", \"#fff\");\n\t  }\n\t});\n\n\t$(content).on(\"click\", \".nb-menu .btn\", function(ev) {\n\t  ev.preventDefault();\n\t  var type = $(ev.target).data('type');\n\t  var mdiv = $(ev.target).closest(\".nb-menu\");\n\t  var nb   = mdiv.closest(\".notebook\");\n\t  var cell = $.el.div({class:\"nb-cell\"});\n\n\t  if ( mdiv.parent().hasClass(\"nb-placeholder\") ) {\n\t    nb.find(\".nb-content\").empty().append(cell);\n\t  } else {\n\t    mdiv.find(\".nb-type-select\").remove();\n\t    mdiv.after(cell);\n\t  }\n\t  $(cell).nbCell({type: type});\n\t  nb.notebook('organize');\n\t  nb.notebook('active', $(cell), true);\n\n\t  return false;\n\t});\n\n\telem.focusin(function(ev) {\n\t  var cell = $(ev.target).closest(\".nb-cell\");\n\t  if ( cell.length > 0 ) {\n\t    elem.notebook('active', cell);\n\t  } else if ( $(ev.target).closest(\".nb-view\").length > 0 )\n\t  { elem.find(\".nb-content\").children(\".nb-cell.active\")\n\t\t\t\t    .nbCell('active', false);\n\t  }\n\t});\n\telem.focusout(function(ev) {\n\t  if ( $(ev.target).closest(\".notebook\")[0] != elem[0] ) {\n\t    elem.find(\".nb-content\").children(\".nb-cell.active\")\n\t\t\t\t    .nbCell('active', false);\n\t  }\n\t});\n\n\t/* Activate the active source or first source.  If the active\n\t * cell is a query, we could activate the source of the query?\n\t */\n\telem.on(\"activate-tab\", function(ev) {\n\t  if ( ev.target == elem[0] ) {\n\t    var eds = elem.find(\".nb-content\")\n                          .children(\".nb-cell.program\");\n\t    var aeds = eds.filter(\".active\");\n\t    var nc = aeds[0]||eds[0];\n\n\t    if ( nc ) {\n\t      $(nc).find(\".prolog-editor\").prologEditor('makeCurrent');\n\t    }\n\t    ev.stopPropagation();\n\t  }\n\t});\n\n\t/* monitor output on runners */\n\telem.on(\"scroll-to-bottom\", function(ev, arg) {\n\t  if ( arg != true ) {\n\t    $(ev.target).closest(\".nb-cell\").nbCell('ensure_in_view', 'bottom');\n\t  }\n\t});\n\n\telem.data(pluginName, data);\t/* store with element */\n\n\t\t\t\t\t/* restore content */\n\tvar content = elem.find(\".notebook-data\");\n\tif ( options.value ) {\n\t  elem.notebook('value', options.value);\n\t} else if ( content.length > 0 ) {\n\t  function copyData(name) {\n\t    var value = content.data(name);\n\t    if ( value ) {\n\t      storage[name] = value;\n\t    }\n\t  }\n\n\t  copyData(\"file\");\n\t  copyData(\"url\");\n\t  copyData(\"title\");\n\t  copyData(\"meta\");\n\t  copyData(\"st_type\");\n\t  copyData(\"chats\");\n\n\t  var docid      = elem.storage('docid', undefined, storage);\n\t  var fullscreen = preferences.getDocVal(\n\t\t\t\t\t   docid, 'fullscreen',\n\t\t\t\t\t   config.swish.notebook.fullscreen);\n\n\t  elem.notebook('value', content.text(),\n\t\t\t{ fullscreen: fullscreen\n\t\t\t});\n\t  content.remove();\n\t} else {\n\t  elem.notebook('placeHolder');\n\t}\n\n\telem.notebook('setupStorage', storage);\n\telem.on(\"data-is-clean\", function(ev, clean) {\n\t  if ( $(ev.target).hasClass(\"prolog-editor\") )\n\t  { elem.notebook('checkModified');\n\t    ev.stopPropagation();\n\t    return false;\n\t  }\n\t});\n\telem.on(\"fullscreen\", function(ev, val) {\n\t  preferences.setDocVal(docid, 'fullscreen', val);\n\t});\n      }); /* end .each() */\n    },\n\n\t\t /*******************************\n\t\t *\t  BUTTON ACTIONS\t*\n\t\t *******************************/\n\n    delete: function(cell) {\n      cell = cell||currentCell(this);\n      if ( cell ) {\n\tthis.notebook('active',\n\t\t      cell.nbCell('next')||cell.nbCell('prev'));\n\tcell.nbCell('close');\n\tthis.notebook('updatePlaceHolder');\n      }\n      this.notebook('checkModified');\n      return this;\n    },\n\n    copy: function(cell) {\n      cell = cell||currentCell(this);\n      if ( cell ) {\n\tvar dom = $.el.div({class:\"notebook\"});\n\t$(dom).append($(cell).nbCell('saveDOM'));\n\t$(dom).find(\".nb-cell\").removeAttr(\"name\");\n\tclipboard = stringifyNotebookDOM(dom);\n      }\n    },\n\n    paste: function(text) {\n      var nb = this;\n\n      text = text||clipboard;\n      if ( text ) {\n\tvar dom = $.el.div();\n\n\t$(dom).html(text);\n\tvar cells = $(dom).find(\".nb-cell\");\n\tif ( cells.length > 0 ) {\n\t  $(dom).find(\".nb-cell\").each(function() {\n\t    nb.notebook('insert', {\n\t      where: \"below\",\n\t      restore: $(this)\n\t    });\n\t  });\n\t  return this;\n\t} else {\n\t  modal.alert(\"Not a SWISH notebook\");\n\t}\n      } else {\n\tmodal.alert(\"Clipboard is empty\");\n      }\n    },\n\n    up: function(cell) {\n      cell = cell||currentCell(this);\n      if ( cell ) {\n\tcell.insertBefore(cell.nbCell('prev'));\n\tthis.notebook('checkModified');\n      }\n      return this;\n    },\n\n    down: function(cell) {\n      cell = cell||currentCell(this);\n      if ( cell ) {\n\tcell.insertAfter(cell. nbCell('next'));\n\tthis.notebook('checkModified');\n      }\n      return this;\n    },\n\n    insertAbove: function() {\n      return this.notebook('insert', { where:\"above\" });\n    },\n\n    insertBelow: function() {\n      if ( this.notebook('insert', {where:\"below\", if_visible:true}) == false ) {\n\tmodal.alert(\"<p>New cell would appear outside the visible area of the \" +\n\t\t    \"notebook.\" +\n\t\t    \"<p>Please select the cell below which you want the \"+\n\t\t    \"new cell to appear or scroll to the bottom of the \" +\n\t\t    \"notebook.\");\n      }\n\n      return this;\n    },\n\n    getSettings: function() {\n      var settings = { open_fullscreen:\tthis.hasClass('open-fullscreen'),\n\t\t       hide_navbar:     this.hasClass('hide-navbar')\n\t\t     };\n\n      return settings;\n    },\n\n    settings: function() {\n      var that = this;\n      var current = this[pluginName]('getSettings');\n\n      function notebookSettingsBody() {\n\tthis.append($.el.form(\n          { class:\"form-horizontal\"\n\t  },\n\t  form.fields.checkboxes(\n\t\t[ { name: \"open_fullscreen\",\n\t\t    label: \"open in fullscreen mode\",\n\t\t    value: current.open_fullscreen,\n\t\t    title: \"Open in fullscreen mode\"\n\t\t  }\n\t\t], {col:3, label:\"Initial view\"}),\n\t  form.fields.checkboxes(\n\t\t[ { name: \"hide_navbar\",\n\t\t    label: \"hide navigation bar\",\n\t\t    value: current.hide_navbar,\n\t\t    title: \"Hide navigation bar\"\n\t\t  }\n\t\t], {col:3, label:\"Full screen options\"}),\n\t  form.fields.buttons(\n\t  { label: \"Apply\",\n\t    offset: 3,\n\t    action: function(ev, values) {\n\t      function update(field, cls) {\n\t\tif ( values[field] != current[field] ) {\n\t\t  if ( values[field] )\n\t\t    that.addClass(cls);\n\t\t  else\n\t\t    that.removeClass(cls);\n\t\t}\n\t      }\n\n\t      update(\"hide_navbar\",     \"hide-navbar\");\n\t      update(\"open_fullscreen\", \"open-fullscreen\");\n\n\t      that.notebook('checkModified');\n\t    }\n\t  })));\n      }\n\n      form.showDialog({ title: \"Set options for notebook\",\n                        body: notebookSettingsBody\n                      });\n    },\n\n    run: function(cell) {\n      cell = cell||currentCell(this);\n      if ( cell )\n\tcell.nbCell(\"run\");\n    },\n\n    /**\n     * Set the notebook in fullscreen mode.\n     * @arg {Boolean} [val] if `true` or the notebook has the class\n     * `fullscreen`, go to fullscreen mode.\n     * @arg {Boolean} [hide_navbar] if `val = true` and this parameter\n     * is true, also hide the SWISH navigation bar.\n     */\n    fullscreen: function(val, hide_navbar) {\n      if ( val == undefined )\t\t/* default: toggle */\n\tval = !this.hasClass(\"fullscreen\");\n      if ( hide_navbar == undefined )\n\thide_navbar = this.hasClass(\"hide-navbar\");\n\n      if ( val ) {\n\tvar chat_container = this.closest(\".chat-container\");\n\tvar node = chat_container.length == 1 ? chat_container : this;\n\t$(\"body.swish\").swish('fullscreen', node, this, hide_navbar);\n      } else {\n\t$(\"body.swish\").swish('exitFullscreen');\n      }\n\n      return this;\n    },\n\n    cellType: function(cell, type) {\n      cell = cell||currentCell(this);\n      if ( cell )\n\tcell.nbCell('type', type);\n    },\n\n\t\t /*******************************\n\t\t *\t      SELECTION\t\t*\n\t\t *******************************/\n\n    getSelection: function() {\n      return this.notebook('assignCellNames')\n                 .find(\".prolog-editor\")\n\t\t .prologEditor('getSelection');\n    },\n\n    restoreSelection: function(sel) {\n      return this.notebook('assignCellNames')\n                 .find(\".prolog-editor\")\n\t\t .prologEditor('restoreSelection', sel);\n    },\n\n\n\t\t /*******************************\n\t\t *\t    CLEAN/DIRTY\t\t*\n\t\t *******************************/\n\n    checkModified: function() {\n      return this.each(function() {\n\tvar nb = $(this);\n\tvar store = nb.data(\"storage\");\n\tvar clean = store.cleanGeneration == nb.notebook('changeGen');\n\n\tnb.notebook('markClean', clean);\n\tnb.notebook('organize');\n      });\n    },\n\n    /**\n     * Called if the notebook changes from clean to dirty or visa versa.\n     * This triggers `data-is-clean`, which is trapped by the tab to\n     * indicate the changed state of the editor.\n     */\n    markClean: function(clean) {\n      return this.each(function() {\n\tvar nb = $(this);\n\tvar data = nb.data(pluginName);\n\n\tif ( data.clean_signalled != clean )\n\t{ data.clean_signalled = clean;\n\t  nb.trigger(\"data-is-clean\", clean);\n\t}\n\n\tif ( clean ) {\n\t  nb.find(\".prolog-editor\").prologEditor('setIsClean');\n\t}\n      });\n    },\n\n\n\t\t /*******************************\n\t\t *\t CELL MANAGEMENT\t*\n\t\t *******************************/\n\n    /**\n     * @param {jQuery} cell is the cell that must be activated\n     * @param {Boolean} [focus] if `true`, give the cell the focus\n     */\n    active: function(cell, focus) {\n      if ( cell ) {\n\tvar current = this.find(\".nb-content .nb-cell.active\");\n\n\tfunction removeNotForQuery(elem) {\n\t  elem.find(\".nb-content .nb-cell.not-for-query\")\n\t      .removeClass(\"not-for-query\");\n\t}\n\n\tif ( cell.length == 1 )\n\t{ if ( !(current.length == 1 && cell[0] == current[0]) ) {\n\t    removeNotForQuery(this);\n\t    current.nbCell('active', false);\n\t    cell.nbCell('active', true);\n\t    if ( focus ) {\n\t      var editors = cell.find(\".prolog-editor\");\n\n\t      if ( editors.length > 0 )\n\t\teditors.prologEditor('focus');\n\t      else\n\t\tcell.focus();\n\t    }\n\t  }\n\t} else\n\t{ removeNotForQuery(this);\n\t  current.nbCell('active', false);\n\t}\n      }\n    },\n\n    /**\n     * Insert a new cell\n     * @param {Object} [options]\n     * @param {String} [options.where] defines where the cell is\n     * inserted relative to the cell with the current focus.\n     * @param {jQuery} [options.restore] If provided, it must contains\n     * a save/restore node that will be used to fill the new cell.\n     * @param {Bool}   [options.if_visible]  If `true`, only insert is\n     * the insertion point is visible.\n     */\n    insert: function(options) {\n      options   = options||{};\n      var relto = currentCell(this);\n      var cell  = options.cell || $.el.div({class:\"nb-cell\"});\n      var view  = this.find(\".nb-view\")\n      var viewrect;\n\n      if ( options.if_visible ) {\n\tif ( view.find(\".nb-content > div.nb-cell\").length > 0 )\n\t  viewrect = view[0].getBoundingClientRect();\n      }\n\n      if ( relto ) {\n\tif ( options.where == 'above' ) {\n\t  if ( viewrect ) {\n\t    var seltop = relto[0].getBoundingClientRect().top;\n\t    if ( seltop < viewrect.top )\n\t      return false;\n\t  }\n\t  $(cell).insertBefore(relto);\n\t} else {\n\t  if ( viewrect ) {\n\t    var selbottom = relto[0].getBoundingClientRect().bottom;\n\n\t    if ( selbottom > viewrect.bottom - 20 )\n\t      return false;\n\t  }\n\t  $(cell).insertAfter(relto);\n\t}\n      } else {\n\tvar content = this.find(\".nb-content\");\n\n\tif ( viewrect ) {\n\t  var cbottom = content[0].getBoundingClientRect().bottom;\n\n\t  if ( cbottom > viewrect.bottom - 20 )\n\t    return false;\n\t}\n\tcontent.append(cell);\n      }\n\n      if ( !options.cell ) {\n\t$(cell).nbCell(options.restore);\n      }\n      $(cell).nbCell('assignName');\n      this.notebook('updatePlaceHolder');\n      this.notebook('active', $(cell));\n      this.notebook('checkModified');\n\n      return this;\n    },\n\n    /**\n     * Organize the notebook.  This maintains the section hierarchy\n     * and places a hover menu to insert a new cell\n     */\n    organize: function() {\n      var notebook = this;\n      var content  = this.find(\".nb-content\");\n      var cells    = content.children(\".nb-cell\");\n\n      // ensure there is a menu before and after each cell\n      cells.each(function() {\n\tvar cell = $(this);\n\n\tif ( !cell.prev().hasClass(\"nb-menu\") )\n\t  cell.before(notebook_menu());\n\tif ( !cell.next().hasClass(\"nb-menu\") )\n\t  cell.after(notebook_menu());\n      });\n\n      // remove duplicate menus\n      content.children(\".nb-menu\").each(function() {\n\tvar menu = $(this);\n\tif ( menu.next().hasClass(\"nb-menu\") )\n\t  menu.remove();\n      });\n    },\n\n\t\t /*******************************\n\t\t *\t   SAVE/RESTORE\t\t*\n\t\t *******************************/\n\n    /**\n     * Setup connection to the storage manager.\n     */\n    setupStorage: function(storage) {\n      var notebook = this;\n\n      storage = $.extend(storage, {\n        getValue: function() {\n\t  return notebook.notebook('value');\n\t},\n\tsetValue: function(source) {\n\t  return notebook.notebook('setSource', source);\n\t},\n\tchangeGen: function() {\n\t  return notebook.notebook('changeGen');\n\t},\n\tisClean: function(gen) {\n\t  var cgen = notebook.notebook('changeGen');\n\t  return gen == cgen;\n\t},\n\tmarkClean: function(clean) {\n\t  notebook.notebook('markClean', clean);\n\t},\n\tcleanGeneration: this.notebook('changeGen'),\n\tcleanData:       this.notebook('value'),\n\tcleanCheckpoint: \"load\",\n\ttypeName:\t \"notebook\"\n      });\n\n      return this.storage(storage);\n    },\n\n    /**\n     * Set the source\n     */\n    setSource: function(source) {\n      if ( typeof(source) == \"string\" )\n\tsource = {data:source};\n\n      this.notebook('value', source.data);\n    },\n\n    /**\n     * Set or get the state of this notebook as a string.\n     * @param {Object} options\n     * @param {Boolean} [options.skipEmpty=false] if `true`, do not save\n     *\t\t        empty cells.\n     * @param {Boolean} [options.fullscreen] if `true', go fullscreen.\n     * Default is `true` if the toplevel `div.notebook` has a class\n     * `fullscreen`.\n     * @param [String] val is an HTML string that represents\n     * the notebook state.\n     */\n    value: function(val, options) {\n      options = options||{};\n\n      if ( val == undefined ) {\n\tvar classes = this[pluginName]('getClasses');\n\tclasses.unshift(\"notebook\");\n\tvar dom = $.el.div({class: classes.join(\" \")});\n\n\tthis.notebook('assignCellNames', false);\n\tthis.find(\".nb-cell\").each(function() {\n\t  cell = $(this);\n\t  if ( !(options.skipEmpty && cell.nbCell('isEmpty')) )\n\t    $(dom).append(cell.nbCell('saveDOM'));\n\t});\n\n\treturn stringifyNotebookDOM(dom);\n      } else {\n\tvar notebook = this;\n\tvar content  = this.find(\".nb-content\");\n\tvar dom = $.el.div();\n\tvar isnew = content.children(\".nb-cell\").length == 0;\n\n\tcontent.html(\"\");\n\tdom.innerHTML = val;\t\t/* do not execute scripts */\n\tvar outer_div = $(dom).find(\"div.notebook\");\n\n\tthis.removeClass(\"fullscreen hide-navbar\");\n\tif ( outer_div.hasClass(\"open-fullscreen\") ) {\n\t  options.fullscreen = true;\n\t  this.addClass(\"open-fullscreen\");\n\t} else if ( outer_div.hasClass(\"fullscreen\") ) {\n\t  options.fullscreen = true;\n\t  this.removeClass(\"fullscreen\");\n\t}\n\tif ( outer_div.hasClass(\"hide-navbar\") )\n\t{ options.hide_navbar = true;\n\t  this.addClass(\"hide-navbar\");\n\t}\n\n\tif ( isnew && options.fullscreen ) {\n\t  this.notebook('fullscreen', true, options.hide_navbar);\n\t}\n\n\t$(dom).find(\".nb-cell\").each(function() {\n\t  var cell = $.el.div({class:\"nb-cell\"});\n\t  content.append(cell);\n\t  $(cell).nbCell($(this));\n\t});\n\n\tthis.find(\".nb-cell\").nbCell('onload');\n\tthis.notebook('run_all', 'onload');\n\tthis.notebook('updatePlaceHolder');\n\tthis.notebook('assignCellNames', false);\n\tthis.notebook('organize');\n      }\n    },\n\n    /**\n     * @return {Array} of class names that are preserved.\n     */\n    getClasses: function() {\n      var found = this.attr(\"class\").split(\" \");\n      var classes = [];\n      var allowed = [\"open-fullscreen\", \"hide-navbar\"];\n\n      for(var i=0; i<found.length; i++) {\n\tif ( allowed.indexOf(found[i]) >= 0 )\n\t  classes.push(found[i]);\n      }\n\n      return classes.sort();\n    },\n\n    /**\n     * Compute a state fingerprint for the entire notebook\n     * @return {String} SHA1 fingerprint\n     */\n    changeGen: function() {\n      var list = this[pluginName]('getClasses');\n      this.find(\".nb-cell\").each(function() {\n\tvar cg = $(this).nbCell('changeGen');\n\tlist.push(cg);\n      });\n      return sha1(list.join());\n    },\n\n    /**\n     * Assign names to all cells.  This is normally done as the\n     * notebook is created, but needs to be done for old notebooks\n     * if functions are used that require named cells.  Calling this\n     * method has no effect if all cells already have a name.\n     */\n    assignCellNames: function(check) {\n      this.find(\".nb-cell\").nbCell('assignName');\n      if ( check != false )\n\tthis.notebook('checkModified');\n      return this;\n    },\n\n\n\t\t /*******************************\n\t\t *\t       HELP\t\t*\n\t\t *******************************/\n\n    updatePlaceHolder: function() {\n      if ( this.find(\".nb-content\").find(\".nb-cell\").length == 0 )\n\tthis.notebook('placeHolder');\n      else\n\tthis.find(\".nb-placeholder\").remove();\n    },\n\n    placeHolder: function() {\n      var menu\t      = notebook_menu();\n      var select      = cell_type_select_div();\n      var placeholder = $.el.div({class:\"nb-placeholder\"});\n      var a;\n\n      $(menu).append(select);\n      placeholder.append(\n\tmenu,\n\t$.el.div({class:\"nb-help\"},\n\t\t \"New here?  See the notebook \",\n\t\t a=$.el.a(\"help page\"),\n\t\t \".\"));\n      $(a).on(\"click\", function() {\n\t$(\".swish-event-receiver\").trigger(\"help\", {file:\"notebook.html\"});\n      });\n      this.find(\".nb-content\").append(placeholder);\n\n      return this;\n    },\n\n    /**\n     * Run the notebook\n     */\n    run_all: function(why) {\n      var queries = [];\n\n      why = why||'all';\n\n      this.notebook('clear_all');\n\n      this.find(\".nb-cell.query\").each(function() {\n\tif ( why == 'all' || $(this).data('run') == why )\n\t  queries.push(this);\n      });\n\n      function cont(pengine) {\n\tswitch(pengine.state) {\n\t  case 'error':\n\t  case 'aborted':\n\t    return false;\n\t}\n\n\treturn true;\n      }\n\n      if ( queries.length > 0 ) {\n\tqueries.current = 0;\n\tvar complete = function(pengine) {\n\t  if ( cont(pengine) &&\n\t       ++queries.current < queries.length ) {\n\t    $(queries[queries.current]).nbCell('run', {\n\t      complete: complete\n\t    })\n\t  }\n\t};\n\n\t$(queries[0]).nbCell('run', {\n\t  complete: complete\n\t});\n      }\n    },\n\n    /**\n     * Erase all query output, killing possibly running queries\n     */\n    clear_all: function() {\n      this.find(\".prolog-runner\").prologRunner('close');\n    }\n  }; // methods\n\n  // <private functions>\n\n  /**\n   * @returns {Object|null} cell that is focussed and inside our\n   * notebook.\n   * @param {Object} nb is the notebook\n   */\n  function currentCell(nb) {\n    var active = $(nb).find(\".nb-cell.active\");\n\n    if ( active.length == 1 )\n      return active.first();\n\n    return null;\n  }\n\n  function stringifyNotebookDOM(dom) {\n    /*\n     * Attributes from .html() are not ordered.  We need a canonical\n     * representation and therefore we need to reorder the HTML\n     * attributes and map the attribute names to lower case.\n     */\n    function orderAttrs(s) {\n      attrs = s.match(/[-a-z]+=\"[^\"]*\"/g);\n      if ( attrs ) {\n\tvar start = s.match(/^<[a-z]* /);\n\tfor(var i=0; i<attrs.length; i++) {\n\t  var l = attrs[i].split(/=(.*)/);\n\t  attrs[i] = l[0].toLowerCase()+\"=\"+l[1];\n\t}\n\treturn start[0]+attrs.sort().join(\" \")+\">\";\n      } else\n\treturn s;\n    }\n\n    var html = $($.el.div(dom)).html();\n    var nest = [];\n    return html.replace(/(<div [^>]*>|<\\/div>)/g, function(t) {\n      var is_cell;\n      if ( t == \"</div>\" ) {\n\tis_cell = nest.pop();\n\treturn is_cell ? \"\\n\"+t+\"\\n\" : t;\n      } else {\n\tis_cell = (t.match(/(nb-cell|notebook)/) != null);\n\tnest.push(is_cell);\n\treturn is_cell ? \"\\n\"+orderAttrs(t)+\"\\n\" : t;\n      }\n    }).slice(1);\n  }\n\n  tabbed.tabTypes.notebook = {\n    dataType: \"swinb\",\n    typeName: \"notebook\",\n    label: \"Notebook\",\n    contentType: \"text/x-prolog-notebook\",\n    order: 200,\n    create: function(dom, options) {\n      $(dom).notebook(options);\n    }\n  };\n\n  /**\n   * <Class description>\n   *\n   * @class notebook\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.notebook = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n\t\t /*******************************\n\t\t *\t    PLUGIN nbCell\t*\n\t\t *******************************/\n\n(function($) {\n  var pluginName = 'nbCell';\n  var id = 0;\t\t\t\t/* generate unique cell ids */\n\n  /** @lends $.fn.nbCell */\n  var methods = {\n    /**\n     * Create a new notebook cell\n     * @param {options} [jQuery|Object] initialise the new cell from the saved\n     * DOM or Object.\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\t\t\t/* private data */\n\tvar g;\n\n\telem.data(pluginName, data);\t/* store with element */\n\telem.attr(\"tabIndex\", -1);\n\telem.attr(\"id\", \"nbc\"+id++);\n\n\tif ( options instanceof jQuery ) {\n\t  elem.nbCell('restoreDOM', options);\n\t} else if ( options && options.type ) {\n\t  elem.nbCell('type', options.type);\n\t} else {\n\t  var close = glyphButton(\"remove-circle\", \"close\", \"Close\",\n\t\t\t\t  \"default\", \"xs\");\n\t  elem.append(close);\n\t  $(close).addClass(\"close-select\");\n\t  $(close).on(\"click\", function() {\n\t    elem.nbCell('close');\n\t  });\n\n\t  var select = cell_type_select_div();\n\t  elem.append(select);\n\n\t  select.find(\".btn-group\").on(\"click\", \".btn\", function(ev) {\n\t    elem.nbCell('type', $(ev.target).data('type'));\n\t  });\n\n\t  elem.append($.el.div({class:\"nb-type-more\"},\n\t\t\t       typeMore(),\n\t\t\t       typeLess($.el.label(\"Insert notebook from \" +\n\t\t\t\t\t\t   \"local file \"),\n\t\t\t\t\tfileInsertInput()[0])));\n\t}\n      });\n    },\n\n    /**\n     * (de)activate the current cell.\n     */\n    active: function(val) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName);\n\n\tif ( val ) {\n\t  elem.addClass(\"active\");\n\t  switch( data.type ) {\n\t    case \"program\":\n\t      elem.find(\".editor\").prologEditor('makeCurrent');\n\t      break;\n\t    case \"query\":\n\t      var prevprog = elem.nbCell('prev', \".program\");\n\t      if ( prevprog )\n\t\tprevprog.find(\".editor\").prologEditor('makeCurrent');\n\t      elem.closest(\".notebook\")\n\t\t  .find(\".nb-cell.program\")\n\t\t  .not(elem.nbCell(\"program_cells\"))\n\t\t  .addClass(\"not-for-query\");\n\t      break;\n\t  }\n\t} else if ( elem.length > 0 ) {\n\t  elem.removeClass(\"active\");\n\t  switch( data.type ) {\n\t    case \"markdown\":\n\t    case \"html\":\n\t      if ( elem.hasClass(\"runnable\") ) {\n\t\telem.nbCell('run');\n\t      }\n\t      break;\n\t  }\n\t}\n      });\n    },\n\n    /**\n     * Get the next/previous program cell.  Will eventually walk the\n     * hierarchy if we add sections to the notebook.\n     * @param String [selector] Add additional selection\n     */\n\n    next: function(sel) {\n      var next = this.nextAll(\".nb-cell\"+(sel||\"\")).first();\n      return next.length ? next : null;\n    },\n\n    prev: function(sel) {\n      var prev = this.prevAll(\".nb-cell\"+(sel||\"\")).first();\n      return prev.length ? prev : null;\n    },\n\n    ensure_in_view: function(where) {\n      var top  = this.position().top;\n      var view = this.closest(\".nb-view\");\n      var stop = view.scrollTop();\n      var vh   = view.height();\n\n      if ( top > stop &&\n\t   top + this.height() < stop + vh )\n\treturn;\n\n      if ( where != 'top' ) {\n\ttop = top + this.height() - vh + 40;\n      }\n\n      this.nbCell('active', true);\n      view.scrollTop(top);\n    },\n\n    type: function(type) {\n      var data = this.data(pluginName);\n      if ( data.type != type ) {\n\tmethods.type[type].apply(this);\n\tdata.type = type;\n\tthis.addClass(type);\n\tthis.removeAttr(\"name\");\n\tthis.nbCell('assignName');\n      }\n      return this;\n    },\n\n    /**\n     * Give the cells in a jQuery set a unique name inside their\n     * notebook.\n     */\n    assignName: function() {\n      return this.each(function() {\n\tvar cell = $(this);\n\n\tif ( !cell.attr(\"name\") ) {\n\t  var data   = cell.data(pluginName);\n\t  if ( data.type ) {\n\t    var prefix = cellTypes[data.type].prefix;\n\t    var nb     = cell.closest(\".notebook\");\n\n\t    for(i=1; ; i++) {\n\t      var name = prefix+i;\n\t      if ( nb.find(\"*[name=\"+name+\"]\").length == 0 ) {\n\t\tcell.attr(\"name\", name);\n\t\tbreak;\n\t      }\n\t    }\n\t  }\n\t}\n      });\n    },\n\n    /**\n     * Run the current cell\n     */\n    run: function() {\n      var args = arguments;\n\n      return this.each(function() {\n\tvar cell = $(this);\n\tif ( cell.hasClass(\"runnable\") ) {\n\t  var data = cell.data(pluginName);\n\n\t  return methods.run[data.type].apply(cell, args);\n\t} else {\n\t  console.log(\"Cell is not runnable: \", cell);\n\t}\n      });\n    },\n\n    runTabled: function() {\n      return this.nbCell('run', {tabled:true});\n    },\n\n    onload: function() {\n      var args = arguments;\n\n      this.each(function() {\n\tvar cell = $(this);\n\tvar data = cell.data(pluginName);\n\n\tif ( methods.onload[data.type] )\n\t  methods.onload[data.type].apply(cell, args);\n      });\n\n      return this.nbCell('refresh');\n    },\n\n    close: function() {\n      this.find(\".prolog-runner\").prologRunner('close');\n      return this.remove();\n    },\n\n    refresh: function() {\n      if ( this.hasClass(\"program\") ) {\n\tthis.find(\"a[data-action='background']\")\n            .attr('title', this.hasClass(\"background\") ?\n\t\t\t     \"Used for all queries in this notebook\" :\n\t\t             \"Used for queries below this cell\");\n\n      }\n      return this;\n    },\n\n    getSettings: function() {\n      return {\n        tabled: this.data(\"tabled\") == \"true\",\n\trun:    this.data(\"run\")    == \"onload\",\n\tchunk:  parseInt(this.data(\"chunk\")||\"1\"),\n\tname:   this.attr(\"name\")\n      };\n    },\n\n    /**\n     * Present a modal that shows the current query properties and\n     * allows for changing them.\n     */\n    settings: function() {\n      var elem    = this;\n      var current = this.nbCell('getSettings');\n\n      function querySettingsBody() {\n\tthis.append($.el.form(\n          { class:\"form-horizontal\"\n\t  },\n\t  form.fields.checkboxes(\n\t\t[ { name: \"tabled\",\n\t\t    label: \"table results\",\n\t\t    value: current.tabled,\n\t\t    title: \"Table results\"\n\t\t  },\n\t\t  { name: \"run\",\n\t\t    label: \"run on page load\",\n\t\t    value: current.run,\n\t\t    title: \"Run when document is loaded\"\n\t\t  }\n\t\t], {col:3}),\n\t  form.fields.chunk(current.chunk),\n\t  form.fields.name(current.name||\"\"),\n\t  form.fields.buttons(\n\t  { label: \"Apply\",\n\t    offset: 3,\n\t    action: function(ev, values) {\n\t      if ( values.tabled != current.tabled ) {\n\t\tif ( values.tabled )\n\t\t  elem.data(\"tabled\", \"true\");\n\t\telse\n\t\t  elem.removeData(\"tabled\");\n\t      }\n\t      if ( values.run != current.run ) {\n\t\tif ( values.run )\n\t\t  elem.data(\"run\", \"onload\");\n\t\telse\n\t\t  elem.removeData(\"run\");\n\t      }\n\t      if ( values.chunk != current.chunk ) {\n\t\tif ( values.chunk != 1 )\n\t\t  elem.data(\"chunk\",  \"\"+values.chunk);\n\t\telse\n\t\t  elem.removeData(\"chunk\");\n\t      }\n\t      var name = values.name ? values.name.trim() : \"\";\n\t      if (  name != current.name ) {\n\t\tif ( name )\n\t\t  elem.attr(\"name\", name);\n\t\telse\n\t\t  elem.attr(\"name\", null);\n\t      }\n\t      elem.closest(\".notebook\").notebook('checkModified');\n\t    }\n\t  })));\n      }\n\n      form.showDialog({ title: \"Set options for query\",\n                        body: querySettingsBody\n                      });\n    },\n\n    /**\n     * Change the editor of a program cell to fixed (one line) height\n     */\n    singleline: function() {\n      this.toggleClass(\"singleline\");\n      this.find(\".editor\").prologEditor('refresh');\n      glyphButtonGlyph(this, \"singleline\",\n\t\t       this.hasClass(\"singleline\")\n\t\t\t\t? \"triangle-left\"\n\t\t\t\t: \"triangle-bottom\");\n      this.find(\"a[data-action=singleline]\").blur();\n      return this;\n    },\n\n    /**\n     * Toggle a program fragment to be background/non-background\n     */\n    background: function() {\n      this.toggleClass(\"background\");\n      this.find(\"a[data-action=background]\").blur();\n      this.closest(\".notebook\").notebook('checkModified');\n      this.nbCell('refresh');\n      return this;\n    },\n\n    /**\n     * Returns all program cells in current notebook that are loaded\n     * for executing the current cell.  This always starts with the\n     * background programs.  If `this` is a program cell, it is added.\n     * Otherwise the program cell before `this` is added.\n     * @return {jQuery} set of nbCell elements that form the\n     * sources for the receiving query cell.\n     */\n    program_cells: function() {\n      var data = this.data(pluginName);\n      var programs = this.closest(\".notebook\")\n\t                 .find(\".nb-cell.program.background\");\n      if ( this.hasClass(\"program\") ) {\n\tif ( !this.hasClass(\"background\") )\n\t  programs = programs.add(this);\n      } else {\n\tprograms = programs.add(this.nbCell('prev', \".program\"));\n      }\n      return programs;\n    },\n\n    programs: function() {\n      var cells = this.nbCell('program_cells');\n      return cells.find(\".editor\");\n    },\n\n    isEmpty: function() {\n      return methods.isEmpty[this.data(pluginName).type].call(this);\n    },\n\n    saveDOM: function() {\n      return methods.saveDOM[this.data(pluginName).type].call(this);\n    },\n\n    restoreDOM: function(dom) {\n      var data = this.data(pluginName);\n\n      function domCellType(dom) {\n\tfor(var k in cellTypes) {\n\t  if ( cellTypes.hasOwnProperty(k) && dom.hasClass(k) )\n\t    return k;\n\t}\n      }\n\n      data.type = domCellType(dom);\n      methods.restoreDOM[data.type].apply(this, arguments);\n      this.addClass(data.type);\n    },\n\n    /**\n     * Compute a state fingerprint for the current cell.\n     */\n    changeGen: function() {\n      var type = this.data(pluginName).type;\n\n      if ( type )\n\treturn methods.changeGen[type].call(this);\n      else\n\treturn 0;\n    },\n\n    text: function() {\n      return cellText(this);\n    }\n  }; // methods\n\n\t\t /*******************************\n\t\t *\t     SET TYPE\t\t*\n\t\t *******************************/\n\n  methods.type.markdown = function(options) {\t/* markdown */\n    var editor;\n    var cell = this;\n\n    options = options||{};\n    options.mode = \"markdown\";\n    options.fencedCodeBlockHighlighting = true;\n\n    function setAttr(name) {\n      if ( options[name] != undefined ) {\n\tcell.attr(name, \"\"+options[name]);\n\tdelete options[name];\n      }\n    }\n    setAttr(\"name\");\n\n    this.html(\"\");\n    this.append(editor=$.el.div({class:\"editor\"}));\n    $(editor).prologEditor(options);\n    this.addClass(\"runnable\");\n  }\n\n  methods.type.html = function(options) {\t/* HTML */\n    var editor;\n    var cell = this;\n\n    options = options||{};\n    options.mode = \"htmlmixed\";\n\n    function setAttr(name) {\n      if ( options[name] != undefined ) {\n\tcell.attr(name, \"\"+options[name]);\n\tdelete options[name];\n      }\n    }\n    setAttr(\"name\");\n\n    this.html(\"\");\n    this.append(editor=$.el.div({class:\"editor\"}));\n    $(editor).prologEditor(options);\n    this.addClass(\"runnable\");\n  }\n\n  methods.type.program = function(options) {\t/* program */\n    var cell = this;\n    var editor;\n\n    options = options||{};\n    options.autoCurrent = false;\n    options.getSource = function() {\n      var programs = cell.nbCell('programs');\n      return programs.prologEditor('getSource', \"source\", true);\n    };\n\n    this.html(\"\");\n\n    var buttons = $.el.div(\n      {class:\"btn-group nb-cell-buttons\", role:\"group\"},\n      glyphButton(\"triangle-bottom\", \"singleline\", \"Show only first line\",\n\t\t  \"default\", \"xs\"),\n      imageButton(\"background\", \"Use as background program\", \"xs\"));\n    this.append(buttons,\n\t\teditor=$.el.div({class:\"editor with-buttons\"}));\n    if ( options.background )\n    { this.addClass(\"background\");\n    }\n    if ( options.singleline )\n    { this.nbCell('singleline');\n    }\n    $(editor).prologEditor(options);\n  }\n\n  methods.type.query = function(options) {\t/* query */\n    var editor;\n    var cell = this;\n\n    this.html(\"\");\n\n    options = options||{};\n    if ( options.tabled == undefined )\n      options.tabled = preferences.getVal(\"tabled_results\");\n\n    function setData(name) {\n      if ( options[name] != undefined ) {\n\tcell.data(name, \"\"+options[name]);\n\tdelete options[name];\n      }\n    }\n    function setAttr(name) {\n      if ( options[name] != undefined ) {\n\tcell.attr(name, \"\"+options[name]);\n\tdelete options[name];\n      }\n    }\n    setData(\"tabled\");\n    setData(\"chunk\");\n    setData(\"run\");\n    setAttr(\"name\");\n\n    options = $.extend({}, options,\n      { role: \"query\",\n\tsourceID: function() {\n\t  return cell.nbCell('programs').prologEditor('getSourceID');\n\t},\n\tprologQuery: function(q) {\n\t  cell.nbCell('run');\n\t}\n      });\n\n    var buttons = $.el.div(\n      {class:\"btn-group nb-cell-buttons\", role:\"group\"},\n      glyphButton(\"wrench\", \"settings\", \"Settings\",\n\t\t  \"default\", \"xs\"),\n      glyphButton(\"play\", \"run\",       \"Run query\",\n\t\t  \"primary\", \"xs\"));\n\n    function wrapSolution(a)\n    { this.find(\".editor.query\").prologEditor('wrapSolution', $(a).text());\n    }\n\n    var menu = form.widgets.dropdownButton(\n      $.el.span({class:\"glyphicon glyphicon-menu-hamburger\"}),\n      { client: cell,\n\tdivClass: \"nb-query-menu\",\n        actions: {\n\t  \"Aggregate (count all)\": wrapSolution,\n\t  \"--\":\t\t\t   null,\n\t  \"Projection\":\t\t   wrapSolution,\n\t  \"Order by\":              wrapSolution,\n\t  \"Distinct\":              wrapSolution,\n\t  \"Limit\":\t\t   wrapSolution\n        }\n      });\n\n    this.append(buttons,\n\t\t$.el.div({class:\"query with-buttons\"},\n\t\t\t menu,\n\t\t\t $.el.span({class:\"prolog-prompt\"}, \"?-\"),\n\t\t\t editor=$.el.div({class:\"editor query\"})));\n\n    $(editor).prologEditor(options);\n    this.addClass(\"runnable\");\n  }\n\n\n\t\t /*******************************\n\t\t *\t    RUN BY TYPE\t\t*\n\t\t *******************************/\n\n  methods.run.markdown = function(markdownText) {\t/* markdown */\n    var cell = this;\n\n    markdownText = markdownText||cellText(this);\n\n    function makeEditable(ev) {\n      var cell = $(ev.target).closest(\".nb-cell\");\n      var text = cell.data('markdownText');\n      cell.removeData('markdownText');\n      methods.type.markdown.call(cell, {value:text});\n      cell.off(\"dblclick\", makeEditable);\n      cell.off(\"click\", links.followLink);\n    }\n\n\n    function setHTML(data) {\n\n      cell.html(data);\n      cell.removeClass(\"runnable\");\n      cell.data('markdownText', markdownText);\n      cell.on(\"dblclick\", makeEditable);\n      cell.on(\"click\", \"a\", links.followLink);\n\n      // call post rendering hooks\n      var nbdata = cell.closest(\".notebook\").data('notebook');\n      if ( nbdata && nbdata.markdown_post_renderer ) {\n\tfor(var i=0; i<nbdata.markdown_post_renderer.length; i++) {\n\t  nbdata.markdown_post_renderer[i].call(cell);\n\t}\n      }\n    }\n\n    if ( markdownText.trim() != \"\" )\n    { $.ajax({ type: \"POST\",\n\t       url: config.http.locations.markdown,\n\t       data: markdownText,\n\t       contentType: \"text/plain; charset=UTF-8\",\n\t       success: setHTML\n\t     });\n    } else\n    { setHTML(\"<div class='nb-empty-markdown'>\"+\n\t      \"Empty markdown cell.  Double click to edit\"+\n\t      \"</div>\");\n    }\n  };\n\n  methods.run.html = function(htmlText, options) {\n    var cell = this;\n\n    options = options||{};\n    if ( options.html == false )\n    { runScripts();\n      return;\n    }\n\n    htmlText = (htmlText||cellText(this)).trim();\n\n    function makeEditable(ev) {\n      if ( !( $(ev.target).is(\"input\") || /* allow double click inside these */\n\t      $(ev.target).is(\"textarea\")\n\t    ) ) {\n\tvar cell = $(ev.target).closest(\".nb-cell\");\n\tvar text = cell.data('htmlText');\n\tcell.removeData('htmlText');\n\tmethods.type.html.call(cell, {value:text});\n\tcell.off(\"dblclick\", makeEditable);\n\tcell.off(\"click\", links.followLink);\n      }\n    }\n\n    function runScripts() {\n      if ( config.swish.notebook.eval_script == true &&\n\t   options.eval_script != false ) {\n\tvar scripts = [];\n\n\tcell.find(\"script\").each(function() {\n\t  var type = this.getAttribute('type')||\"text/javascript\";\n\t  if ( type == \"text/javascript\" )\n\t    scripts.push(this.textContent);\n\t});\n\n\tif ( scripts.length > 0 ) {\n\t  var script = \"(function(notebook){\" + scripts.join(\"\\n\") + \"})\";\n\t  var nb = new Notebook({\n\t    cell: cell[0]\n\t  });\n\n\t  try {\n\t    eval(script)(nb);\n\t  } catch(e) {\n\t    alert(e);\n\t  }\n\t}\n      }\n    }\n\n    function runHTML(data) {\n      cell[0].innerHTML = data;\n      runScripts();\n    }\n\n    function setHTML(data) {\n      runHTML(data);\n      cell.removeClass(\"runnable\");\n      cell.data('htmlText', htmlText);\n      cell.on(\"dblclick\", makeEditable);\n      cell.on(\"click\", \"a\", links.followLink);\n    }\n\n    if ( htmlText != \"\" )\n    { setHTML(htmlText);\n    } else\n    { setHTML(\"<div class='nb-placeholder'>\"+\n\t      \"Empty HTML cell.  Double click to edit\"+\n\t      \"</div>\");\n    }\n  };\n\n  methods.run.program = function() {\t\t/* program */\n    modal.alert(\"Please define a query to run this program\");\n  };\n\n  /**\n   * Run a query cell.\n   * @param {Object} [options]\n   * @param {Any}    [options.bindings] Initial bindings.  If this is a\n   *\t\t     string, it is simply prepended to the query.  If\n   *\t\t     it is an object, it is translated into a sequence\n   *\t\t     of Prolog unifications to bind the variables.\n   * @param {Function} [options.success] Function run on success.  See\n   *\t\t     `prologRunner._init()`.\n   * @param {Function} [options.complete] Function run on complete.  See\n   *\t\t     `prologRunner._init()`.\n   */\n  methods.run.query = function(options) {\t/* query */\n    var programs = this.nbCell('programs');\n    var settings = this.nbCell('getSettings');\n    var text     = cellText(this);\n\n    options = options||{};\n    if ( options.bindings ) {\n      var pretext = \"\";\n      if ( typeof(options.bindings) === 'string' ) {\n\tpretext = options.bindings;\n      } else {\n\tfor(var k in options.bindings) {\n\t  if ( options.bindings.hasOwnProperty(k) ) {\n\t    if ( pretext )\n\t      pretext += \", \";\n\t    pretext += k + \" = \" + Pengine.stringify(options.bindings[k]);\n\t  }\n\t}\n      }\n      if ( pretext )\n\ttext = pretext + \", (\" + prolog.trimFullStop(text) + \")\";\n    }\n    var query = { source:       programs.prologEditor('getSource',\n\t\t\t\t\t\t      \"source\", true),\n                  query:        text,\n\t\t  tabled:       settings.tabled||false,\n\t\t  chunk:        settings.chunk,\n\t\t  title:        false,\n\t\t  query_editor: this.find(\".prolog-editor.query\")\n                };\n    if ( programs[0]  )     query.editor   = programs[0];\n    if ( options.success  ) query.success  = options.success;\n    if ( options.complete ) query.complete = options.complete;\n\n    var runner = $.el.div({class: \"prolog-runner\"});\n    this.find(\".prolog-runner\").prologRunner('close');\n    this.append(runner);\n    $(runner).prologRunner(query);\n  };\n\n\t\t /*******************************\n\t\t *\t       ONLOAD\t\t*\n\t\t *******************************/\n\n/* These methods are executed after all cells have been initialised */\n\n  methods.onload.html = function() {\n    return methods.run.html.call(this,\n\t\t\t\t undefined,\t/* text */\n\t\t\t\t {html:false, eval_script:true});\n  };\n\n\n\t\t /*******************************\n\t\t *\tSAVE/RESTORE DOM\t*\n\t\t *******************************/\n\n/* ---------------- saveDOM ---------------- */\n\n  methods.saveDOM.markdown = function() {\t/* markdown */\n    var text = this.data('markdownText') || cellText(this);\n    var dom  = $.el.div({class:\"nb-cell markdown\"}, text);\n\n    function copyAttr(name) {\n      var value;\n      if ( (value=cell.attr(name)) && value ) {\n\t$(dom).attr(name, value);\n      }\n    }\n\n    copyAttr(\"name\");\n\n    return dom;\n  };\n\n  methods.saveDOM.html = function() {\t\t/* HTML */\n    var text = this.data('htmlText') || cellText(this);\n    var dom  = $.el.div({class:\"nb-cell html\"});\n\n    // assume scripts are executed when put into the DOM\n    $(dom).html(text);\n\n    function copyAttr(name) {\n      var value;\n      if ( (value=cell.attr(name)) && value ) {\n\t$(dom).attr(name, value);\n      }\n    }\n    copyAttr(\"name\");\n\n    return dom;\n  };\n\n  methods.saveDOM.program = function() {\t/* program */\n    var cell = this;\n    var dom = $.el.div({class:\"nb-cell program\"}, cellText(this));\n\n    function copyClassAttr(name) {\n      if ( cell.hasClass(name) ) {\n\t$(dom).attr(\"data-\"+name, true);\n      }\n    }\n    function copyAttr(name) {\n      var value;\n      if ( (value=cell.attr(name)) && value ) {\n\t$(dom).attr(name, value);\n      }\n    }\n\n    copyClassAttr(\"background\");\n    copyClassAttr(\"singleline\");\n    copyAttr(\"name\");\n\n    return dom;\n  };\n\n  methods.saveDOM.query = function() {\t\t/* query */\n    var cell = this;\n    var dom  = $.el.div({class:\"nb-cell query\"}, cellText(this));\n\n    function isDefault(name, value) {\n      if ( name == 'tabled' && (!value || value == \"false\") ) return true;\n      return false;\n    }\n\n    function copyData(name) {\n      var value;\n      if ( (value=cell.data(name)) && !isDefault(name,value) ) {\n\t$(dom).attr(\"data-\"+name, value);\n      }\n    }\n    function copyAttr(name) {\n      var value;\n      if ( (value=cell.attr(name)) && value ) {\n\t$(dom).attr(name, value);\n      }\n    }\n\n    copyData(\"tabled\");\n    copyData(\"chunk\");\n    copyData(\"run\");\n    copyAttr(\"name\");\n\n    return dom;\n  };\n\n/* ---------------- restoreDOM ---------------- */\n\n  methods.restoreDOM.markdown = function(dom) {\t/* markdown */\n    var cell = this;\n    var text = dom.text().trim();\n\n    cell.data('markdownText', text);\n\n    function copyAttr(name) {\n      var value;\n      if ( (value=dom.attr(name)) && value ) {\n\tcell.attr(name, value);\n      }\n    }\n    copyAttr(\"name\");\n\n    methods.run.markdown.call(this, text);\n  };\n\n  methods.restoreDOM.html = function(dom) {\t/* HTML */\n    var cell = this;\n\n    function copyAttr(name) {\n      var value;\n      if ( (value=dom.attr(name)) && value ) {\n\tcell.attr(name, value);\n      }\n    }\n    copyAttr(\"name\");\n\n    methods.run.html.call(this, dom.html(), {eval_script:false});\n  };\n\n  methods.restoreDOM.program = function(dom) {\t/* program */\n    var cell = this;\n    var opts = { value:dom.text().trim() };\n\n    function getAttr(name) {\n      var value;\n      if ( (value=dom.data(name)) ) {\n\topts[name] = value;\n      }\n    }\n    function copyAttr(name) {\n      var value;\n      if ( (value=dom.attr(name)) && value ) {\n\tcell.attr(name, value);\n      }\n    }\n\n    getAttr(\"background\");\n    getAttr(\"singleline\");\n    copyAttr(\"name\");\n\n    methods.type.program.call(this, opts);\n  };\n\n  methods.restoreDOM.query = function(dom) {\t/* query */\n    var opts = { value:dom.text().trim() };\n\n    function getData(name) {\n      var value;\n      if ( (value=dom.data(name)) ) {\n\tif ( name == \"chunk\" )\n\t  opts.chunk = parseInt(value);\n\telse\n\t  opts[name] = value;\n      }\n    }\n    function getAttr(name) {\n      var value;\n      if ( (value=dom.attr(name)) ) {\n\topts[name] = value;\n      }\n    }\n\n    getData(\"tabled\");\n    getData(\"chunk\");\n    getData(\"run\");\n    getAttr(\"name\");\n    if ( opts.tabled == undefined )\n      opts.tabled = false;\n\n    methods.type.query.call(this, opts);\n  };\n\n/* ---------------- changeGen ---------------- */\n\n  methods.changeGen.markdown = function() {\t/* markdown */\n    var text = this.data('markdownText') || cellText(this);\n\n    return sha1(\"M\"+text.trim());\n  };\n\n  methods.changeGen.html = function() {\t/* HTML */\n    var text = this.data('htmlText') || cellText(this);\n\n    return sha1(\"H\"+text.trim());\n  };\n\n  methods.changeGen.program = function() {\t/* program */\n    var text = \"P\";\n    var cell = this;\n\n    function addClassAttr(name, key) {\n      if ( cell.hasClass(name) )\n\ttext += key;\n    }\n\n    addClassAttr(\"background\", \"B\");\n    addClassAttr(\"singleline\", \"S\");\n\n    text += \"V\"+cellText(this).trim();\n    return sha1(text);\n  };\n\n  methods.changeGen.query = function() {\t/* query */\n    var text = \"Q\";\n    var cell = this;\n\n    function addData(name, key) {\n      var value;\n\n      if ( (value=cell.data(name)) )\n\ttext += key+value;\n    }\n    function addAttr(name, key) {\n      var value;\n\n      if ( (value=cell.attr(name)) )\n\ttext += key+value;\n    }\n\n    addData(\"tabled\", \"T\");\n    addData(\"chunk\", \"C\");\n    addData(\"run\", \"R\");\n    addAttr(\"name\", \"N\");\n    text += \"V\"+cellText(this).trim();\n\n    return sha1(text);\n  };\n\n/* ---------------- isEmpty ---------------- */\n\n  methods.isEmpty.markdown = function() {\t/* markdown */\n    var text = this.data('markdownText') || cellText(this);\n\n    return text.trim() == \"\";\n  };\n\n  methods.isEmpty.html = function() {\t/* HTML */\n    var text = this.data('htmlText') || cellText(this);\n\n    return text.trim() == \"\";\n  };\n\n  methods.isEmpty.program = function() {\t/* program */\n    return cellText(this).trim() == \"\";\n  };\n\n  methods.isEmpty.query = function() {\t\t/* query */\n    return cellText(this).trim() == \"\";\n  };\n\n\t\t /*******************************\n\t\t *\t     UTILITIES\t\t*\n\t\t *******************************/\n\n  function cellText(cell) {\n    return cell.find(\".editor\").prologEditor('getSource', undefined, true);\n  }\n\n  /**\n   * Creates a file input that, after a file is selected, replaces\n   * the cell with the content of the local file.\n   */\n  function fileInsertInput() {\n    var form = $('<input type=\"file\" name=\"file\">');\n\n    form.on(\"change\", function(ev) {\n      var reader = new FileReader();\n      reader.onload = function(theFile) {\n\tvar cell = $(ev.target).closest(\".nb-cell\");\n\tvar nb   = cell.closest(\".notebook\");\n\n\tif ( nb.notebook('paste', reader.result) )\n\t  cell.remove();\n      };\n      reader.readAsText(ev.target.files[0]);\n\n      ev.preventDefault();\n      return false;\n    });\n\n    return form;\n  }\n\n  function typeMore() {\n    var div = $('<div class=\"form-more\">' +\n\t\t' <a href=\"#\">more<a>' +\n\t\t'</div>');\n    div.find(\"a\").on(\"click\", function(ev) {\n      var more = $(ev.target).closest(\".form-more\");\n      more.hide(400);\n      more.next().show(400);\n    });\n    return div[0];\n  }\n\n  function typeLess() {\n    var div = $('<div class=\"form-less\" style=\"display:none\">' +\n\t\t' <div><a href=\"#\" class=\"less\">less<a></div>' +\n\t\t'</div>');\n    for(var i=0; i<arguments.length; i++) {\n      div.append(arguments[i]);\n    }\n    div.find(\"a.less\").on(\"click\", function(ev) {\n      var less = $(ev.target).closest(\".form-less\");\n      less.hide(400);\n      less.prev().show(400);\n    });\n\n    return div[0];\n  }\n\n\n  /**\n   * <Class description>\n   *\n   * @class nbCell\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.nbCell = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\nfunction glyphButton(glyph, action, title, style, size) {\n  size = size||\"sm\";\n  var btn = $.el.a({href:\"#\",\n\t\t    class:\"btn btn-\"+style+\" btn-\"+size+\" action-\"+action,\n\t\t    title:title, \"data-action\":action},\n\t\t   $.el.span({class:\"glyphicon glyphicon-\"+glyph}));\n\n  return btn;\n}\n\nfunction imageButton(action, title, size) {\n  size = size||\"sm\";\n  var btn = $.el.a({href:\"#\",\n\t\t    class:\"btn btn-default btn-image btn-\"+size+\" action-\"+action,\n\t\t    title:title, \"data-action\":action},\n\t\t   $.el.span({class:\"image-icon\"}));\n\n  return btn;\n}\n\nfunction glyphButtonGlyph(elem, action, glyph) {\n  var span = elem.find(\"a[data-action=\"+action+\"] > span.glyphicon\");\n\n  span.removeClass(function(i,s) {\n    return s.match(/glyphicon-[-a-z]*/g).join(\" \");\n  }).addClass(\"glyphicon-\"+glyph);\n}\n\nfunction sep() {\n  return $.el.span({class:\"menu-space\"}, \" \");\n}\n\nfunction notebook_menu() {\n  return $.el.div({class:\"nb-menu\"},\n\t\t  $.el.div({class:\"nb-menu-sense\"},\n\t\t\t   $.el.div({class:\"nb-menu-line\"})));\n}\n\nfunction cell_type_select_div() {\n  var g;\n  var div = $.el.div({class:\"nb-type-select\"},\n\t\t     $.el.label(\"Create a \"),\n\t\t     g=$.el.div({class:\"btn-group\",role:\"group\"}),\n\t\t     $.el.label(\"cell here\"));\n\n  for(var k in cellTypes) {\n    if ( cellTypes.hasOwnProperty(k) )\n      $(g).append($.el.button({ type:\"button\",\n\t\t\t\tclass:\"btn btn-default\",\n\t\t\t\t\"data-type\":k\n\t\t\t      },\n\t\t\t      cellTypes[k].label));\n  }\n\n  return $(div);\n}\n\n\n\t\t /*******************************\n\t\t *\t NOTEBOOK ClASS\t\t*\n\t\t *******************************/\n\nfunction Notebook(options) {\n  this.my_cell = options.cell;\n}\n\n/**\n * Create a Pengine from default arguments\n */\nNotebook.prototype.swish = function(options) {\n  var pcells = this.cell().nbCell(\"programs\");\n  var source = pcells.prologEditor('getSource', \"source\", true);\n\n  if ( source )\n    options.src = source;\n\n  return $.swish(options);\n}\n\n/**\n * @param {String} [name] Return (query) cell with given name.  If\n * name is omitted, return the current cell.\n * @return {jQuery} Notebook cells\n */\nNotebook.prototype.cell = function(name) {\n  if ( name )\n    return this.notebook().find('.nb-cell[name=\"'+name+'\"]');\n  else\n    return $(this.my_cell);\n};\n\n/**\n * @returns {jQuery} the notebook as a whole.\n */\nNotebook.prototype.notebook = function() {\n  return $(this.my_cell).closest(\".notebook\");\n};\n\n/**\n * Run named query cell with bindings\n * @param {String} cell Name of the cell to run\n * @param {Object|String} [bindings] Bindings to pass to the query.\n */\nNotebook.prototype.run = function(cell, bindings) {\n  var options = {};\n  if ( bindings )\n    options.bindings = bindings;\n\n  this.cell(cell).nbCell('run', options);\n};\n\n/**\n * Submit a form, calling a predicate\n * @param {String} formsel is the selector to find the form in the\n * notebook cell.\n * @param {Object} options\n * @param {String} options.predicate predicate to call.  The predicate\n * receives one argument, containing the form data as a dict.\n * @param {Function} options.onsuccess is the function run on successful\n * completion\n */\nNotebook.prototype.submit = function(formsel, options) {\n  var formel = this.$(formsel);\n  var data   = form.serializeAsObject(formel);\n\n  form.formError(formel, null);\n  this.swish({\n    ask: options.predicate+\"((\"+Pengine.stringify(data)+\"))\",\n    onerror: function(data) { form.formError(formel, data); },\n    onsuccess: options.onsuccess\n  });\n};\n\n/**\n  * Bind the query default button to this HTML cell.  The callback\n  * function is passed an object with a method `run(bindings)`, where\n  * `bindings` is an object holding `VarName: Value` keys.\n  */\nNotebook.prototype.bindQuery = function(a1, a2) {\n  var that = this;\n  var q;\n  var func;\n\n  if ( typeof(a1) == \"function\" && a2 == undefined ) {\n    q = this.cell().nbCell('next', \".query\");\n    func = a1;\n  } else {\n    q = this.cell(a1);\n    func = a2;\n  }\n\n  if ( q.length > 0 ) {\n    q.find(\".action-run\").off(\"click\").on(\"click\", function(ev) {\n      var query = {\n        run: function(bindings) {\n\t  q.nbCell('run', {bindings:bindings});\n\t}\n      };\n\n      func.call(that, query);\n      ev.preventDefault();\n      return false;\n    });\n  } else {\n    alert(\"No query named '\"+cell+\"'\");\n  }\n};\n\n/**\n * Hide the query and buttons of a named query cell\n * @param {String} cell is the name of the query cell to hide\n * @param {Boolean} [on] If `true` (default), hide the cell.\n */\nNotebook.prototype.hideQuery = function(cell, on) {\n  var q = this.cell(cell);\n  if ( on == undefined )\n    on = true;\n\n  if ( q.length > 0 ) {\n    if ( on == true ) {\n      q.find(\".nb-cell-buttons\").hide();\n      q.find(\".query\").hide();\n    } else {\n      q.find(\".nb-cell-buttons\").show();\n      q.find(\".query\").show();\n    }\n  } else {\n    alert(\"No query named '\"+cell+\"'\");\n  }\n}\n\nNotebook.prototype.$ = function(selector) {\n  return this.cell().find(selector);\n}\n\nNotebook.prototype.loadCSS = function(url) {\n  return utils.loadCSS(url);\n}\n\n/**\n * Add a hook that is called after a markdown cell is filled with\n * rendered HTML\n */\n\nNotebook.prototype.markdown_post_renderer = function(f) {\n  var data = this.notebook().data('notebook');\n\n  if ( data ) {\n    if ( data.markdown_post_renderer != undefined )\n      data.markdown_post_renderer.push(f);\n    else\n      data.markdown_post_renderer = [f];\n  }\n}\n\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Embed the navigation bar\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\n\ndefine('navbar',[ \"jquery\", \"preferences\", \"form\", \"laconic\" ],\n       function($, preferences, form) {\n\n(function($) {\n  var pluginName = 'navbar';\n\n  /** @lends $.fn.navbar */\n  var methods = {\n    /**\n     * Initialize a navigation bar.  For example:\n     *\n     *     $(\"#navbar\").navbar(\n     *       { \"File\":\n     *         { \"New\": function() { ... },\n     *           \"Save\": function() { ... }\n     *         },\n     *         \"Edit\":\n     *         { \"Undo\": function() { ... }\n     *         }\n     *       });\n     *\n     * @param {Object} actions Nested object mapping menu labels to\n     * submenus or functions.\n     */\n    _init: function(actions) {\n\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\n\n\tfor(var p in actions) {\n\t  if ( actions.hasOwnProperty(p) ) {\n\t    elem.navbar('appendDropdown', p);\n\t    elem.navbar('populateDropdown', p, actions[p]);\n\t  }\n\t}\n\n\telem.on(\"click\", \"a\", function(ev) { runMenu(this, ev); } );\n      });\n    },\n\n    /**\n     * @param {String} label Name of new dropdown to add\n     */\n    appendDropdown: function(label) {\n      var ul1 = this.children(\".nav.navbar-nav.menubar\");\n      var ul2 = $.el.ul({name:label, class:\"dropdown-menu\"});\n      var li  = $.el.li({class:\"dropdown\"},\n\t\t\t$.el.a({class:\"dropdown-toggle\",\n\t\t\t\t\"data-toggle\":\"dropdown\"\n\t\t\t       },\n\t\t\t       label,\n\t\t\t       $.el.b({class:\"caret\"})),\n\t\t\tul2);\n\n      ul1.append(li);\n\n      return this;\n    },\n\n    /**\n     * @param {String} name Name of the dropdown to populate\n     * @param {Object|function} actions Object relating dropdown menu\n     * labels to functions.  If a function is passed, it is called with\n     * two arguments: the navbar and the name of the dropdown to\n     * populate.\n     */\n    populateDropdown: function(name, actions) {\n      if ( typeof(actions) == \"function\" ) {\n\tactions(this, name);\n      } else {\n\tvar ul = dropDownUL(this, name);\n\n\tfor(var p in actions) {\n\t  if ( actions.hasOwnProperty(p) ) {\n\t    appendDropdown(ul, p, actions[p]);\n\t  }\n\t}\n      }\n    },\n\n    /**\n     * @param {String} name is the name of the dropdown to clear\n     */\n    clearDropdown: function(name) {\n      var ul = dropDownUL(this, name);\n\n      ul.html(\"\");\n      return this;\n    },\n\n    /**\n     * @example\n     * $(\"#navbar\").navbar('extendDropdown', 'File',\n     *                     'Save as', function () { ... });\n     * @param {String} name is the dropdown to extend\n     * @param {String} label is the label to add\n     * @param {function} onclick is the action to perform\n     */\n    extendDropdown: function(name, label, onclick) {\n      var ul = dropDownUL(this, name);\n\n      appendDropdown(ul, label, onclick);\n    }\n  }; // methods\n\n  /**\n   * Append something to a navbar dropdown.\n   *\n   * @param {Object} dropdown is the jQuery object representing the\n   * dropdown.\n   * @param {String} label is the label for the menu entry\n   * @param {any} options defines the action.  There are many variations:\n   *   - The string `\"--\"` creates a _divider_\n   *   - A function creates a normal menu entry that calls the function\n   *     when selected\n   *   - An object with `.type == \"checkbox\"` creates a checkbox.  In\n   *     addition\n   *\t - if `.preference` exists, the checkbox is associated with the\n   *\t   named preference, otherwise\n   *\t - if `.action' exists, it is called on change with the new\n   *\t   value as argument.\n   *   - An object with `.type == \"submenu\" creates a submenu.\n   *   - An object with `.typeIcon` gets an icon indicating the type\n   */\n  function appendDropdown(dropdown, label, options) {\n    function glyph(name) {\n      if ( name ) {\n\treturn $.el.span({\n\t  class:\"dropdown-icon glyphicon glyphicon-\" + name});\n      }\n    }\n\n    if ( options == undefined ) {\n      // ignored\n    } else if ( options == \"--\" ) {\n      dropdown.append($.el.li({class:\"divider\"}));\n    } else if ( typeof(options) == \"function\" ) {\t/* Simple action */\n      var a;\n      var i;\n\n      if ( options.typeIcon ) {\n\ta = $.el.a(form.widgets.typeIcon(options.typeIcon),\n\t\t   label);\n      } else if ( options.glyph ) {\n\ta = $.el.a(glyph(options.glyph), label);\n      } else if ( (i=label.indexOf(\"(\")) > 0 ) {\n\tvar accell = label.substr(i);\n\ta = $.el.a({class:\"accelerated\"},\n\t\t   label.substr(0,i).trim(),\n\t\t   $.el.span({class:\"accell-spacer\"},accell),\n\t\t   $.el.span({class:\"accell-text\"},accell));\n      } else {\n\ta = $.el.a(label);\n      }\n\n      $(a).data('navbar-action', options);\n      if ( options.name )\n\t$(a).attr(\"id\", options.name);\n\n      dropdown.append($.el.li(a));\n    } else {\t\t\t\t\t\t/* Checkbox item */\n      if ( options.type == \"checkbox\" ) {\n\tvar cb = $($.el.input({type:\"checkbox\"}));\n\n\tif ( options.preference !== undefined ) {\n\t  cb.addClass(\"swish-event-receiver\");\n\t  if ( preferences.getVal(options.preference) )\n\t    cb.prop(\"checked\", true);\n\t  cb.on(\"click\", function() {\n\t    preferences.setVal(options.preference, $(this).prop(\"checked\"));\n\t  });\n\t  cb.on(\"preference\", function(pref) {\n\t    if ( pref.name == options.preference )\n\t      cb.prop(\"checked\", pref.value);\n\t  });\n\t} else {\n\t  if ( options.checked )\n\t    cb.prop(\"checked\", options.checked);\n\n\t  cb.on(\"click\", function() {\n\t    options.action($(this).prop(\"checked\"));\n\t  });\n\t}\n        dropdown.append($.el.li({class:\"checkbox\"},\n\t\t\t\tcb[0],\n\t\t\t\t$.el.span(label)));\n      } else if ( options.type == \"submenu\" ) {\t\t/* Submenu */\n\tvar submenu = $.el.ul({class:\"dropdown-menu sub-menu\"});\n\n\tdropdown.append($.el.li($.el.a({class:\"trigger right-caret\"},\n\t\t\t\t       glyph(options.glyph),\n\t\t\t\t       label),\n\t\t\t\tsubmenu));\n\tif ( options.action )\n\t  $(submenu).data('navbar-action', options.action);\n\tif ( options.items ) {\n\t  for(var i=0; i<options.items.length; i++) {\n\t    $(submenu).append($.el.li($.el.a(options.items[i])));\n\t  }\n\t}\n\tif ( options.update ) {\n\t  $(submenu).on(\"update\", function(ev) {\n\t    options.update.call(ev.target);\n\t  });\n\t}\n      } else {\n\talert(\"Unknown navbar item\");\n      }\n    }\n  }\n\n  function dropDownUL(nb, name) {\n    return nb.find(\".dropdown-menu\").filter(function() {\n      return $(this).attr(\"name\") == name;\n    });\n  }\n\n  function runMenu(a, ev) {\n    if ( $(a).hasClass(\"trigger\") ) {\n      clickSubMenu.call(a, ev);\n    } else {\n      var action = ($(a).data('navbar-action') ||\n\t\t    $(a).parents(\"ul\").data('navbar-action'));\n\n      clickNotSubMenu.call(a, ev);\n\n      if ( action ) {\n\tev.preventDefault();\n\taction.call(a, ev);\n      } else if ( $(a).hasClass(\"trigger\") ) {\n\tclickSubMenu.call(a, ev);\n      }\n\n      return false;\n    }\n  }\n\n  /**\n   * Bootstrap 3 extension to provide submenus.  Inspired by\n   * http://jsfiddle.net/chirayu45/YXkUT/16/\n   * Triggers an `update` event to the submenu's <ul> just\n   * before opening it.\n   */\n  function clickSubMenu(ev) {\n    var current = $(this).next();\t\t /* the submenu <ul> */\n    var grandparent = $(this).parent().parent(); /* the main menu <ul> */\n\n    if ( $(this).hasClass('left-caret') ||\n\t $(this).hasClass('right-caret') )\n      $(this).toggleClass('right-caret left-caret');\n\n    grandparent.find('.left-caret')\n\t       .not(this)\n\t       .toggleClass('right-caret left-caret');\n    grandparent.find(\".sub-menu:visible\")\n\t       .not(current).hide();\n\n    current.trigger(\"update\");\n    current.toggle();\n    ev.stopPropagation();\n  }\n\n  function clickNotSubMenu(ev) {\n    var root = $(this).closest('.dropdown');\n\n    root.find('.left-caret').toggleClass('right-caret left-caret');\n    root.find('.sub-menu:visible').hide();\n  }\n\n/* invoke is merged in general menu callback above\n  $(function() {\n    $(\".dropdown-menu > li > a.trigger\").on(\"click\", clickSubMenu);\n    $(\".dropdown-menu > li > a:not(.trigger)\").on(\"click\", clickNotSubMenu);\n  });\n*/\n\n  /**\n   * navbar jQuery plugin populates the application navigation bar using\n   * bootstrap styling.  Menu entries are added from JavaScript objects,\n   * which directly assocuate a label with a function.  It also allows\n   * populating a dropdown from a callback.\n   *\n   * @class navbar\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} method Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.navbar = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n});\n\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Provide the query editing facilities.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n * @requires laconic\n * @requires editor\n */\n\ndefine('query',[ \"jquery\", \"config\", \"preferences\", \"cm/lib/codemirror\", \"modal\",\n\t \"utils\",\n\t \"laconic\", \"editor\"\n       ],\n       function($, config, preferences, CodeMirror, modal, utils) {\n\n(function($) {\n  var pluginName = 'queryEditor';\n\n  var defaults = {\n    maxHistoryLength: 50\n  };\n\n  /** @lends $.fn.queryEditor */\n  var methods = {\n    /**\n     * @param {Object} options\n     * @param {Runner} options.runner an object that understands\n     * run(source, query), where source and query are strings.\n     * @param {Array.String|Function} [options.examples] called to\n     * populate the _Examples_ menu. Must return an array of strings.\n     * @param {Integer} [options.maxHistoryLength=50] is the max number\n     * of entries recalled by the history menu.\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem   = $(this);\n\tvar data   = $.extend({}, defaults, options);\n\tvar qediv  = $.el.div({class:\"query\"});\n\tvar tabled = tableCheckbox(data);\n\n\telem.addClass(\"prolog-query-editor swish-event-receiver reactive-size \" +\n\t\t      \"unloadable\");\n\n\telem.append(qediv,\n\t\t    $.el.div({class:\"prolog-prompt\"}, \"?-\"),\n\t\t    $.el.div({class:\"query-buttons\"},\n\t\t\t     $.el.span({class:\"buttons-left\"},\n\t\t\t\t       examplesButton(data),\n\t\t\t\t       historyButton(data),\n\t\t\t\t       aggregateButton(data)),\n\t\t\t     $.el.span({class:\"buttons-right\"},\n\t\t\t\t       tabled,\n\t\t\t\t       runButton(data))));\n\n\tfunction tableSelected() {\n\t  return $(tabled).find(\"input\").prop(\"checked\");\n\t}\n\n\t$(qediv).append(elem.children(\"textarea\"))\n\t        .prologEditor({ role: \"query\",\n\t\t\t\tsourceID: function() {\n\t\t\t\t  return data.sourceID();\n\t\t\t\t},\n\t\t\t\tprologQuery: function(q) {\n\t\t\t\t  elem.queryEditor('run', q, tableSelected());\n\t\t\t\t}\n\t\t              });\n\n\telem.data(pluginName, data);\n\n\tif ( !$(qediv).prologEditor('getSource', \"query\") )\n\t{ if ( typeof(data.examples) == \"object\" ) {\n\t    if ( data.examples[0] )\n\t      $(qediv).prologEditor('setSource', data.examples[0]);\n\t  } else {\n\t    elem[pluginName]('setProgramEditor', $(data.editor), true);\n\t  }\n\t}\n\n\telem.on(\"current-program\", function(ev, editor) {\n\t  elem[pluginName]('setProgramEditor', $(editor));\n\t});\n\telem.on(\"program-loaded\", function(ev, options) {\n\t  var query = options.query;\n\n\t  if ( query != null ) {\t\t/* null: keep */\n\t    if ( query == undefined ) {\n\t      if ( $(data.editor).data('prologEditor') ==\n\t\t   $(options.editor).data('prologEditor') ) {\n\t\tvar exl = data.examples();\n\t\tquery = exl && exl[0] ? exl[0] : \"\";\n\t      }\n\t    }\n\t    elem.queryEditor('setQuery', query);\n\t  }\n\t});\n\telem.on(\"unload\", function(ev, rc) {\n\t  if ( elem.closest(\".swish\").swish('preserve_state') ) {\n\t    var state = elem[pluginName]('getState');\n\t    if ( state )\n\t      localStorage.setItem(\"query\", JSON.stringify(state));\n\t  }\n\t});\n\telem.on(\"restore\", function(ev, rc) {\n\t  if ( elem[pluginName]('getQuery') == \"\" ) {\n\t    var state;\n\t    // called with explicit query\n\t    // TBD: not save in this case?\n\t    try {\n\t      var str = localStorage.getItem(\"query\");\n\t      if ( str )\n\t\tstate = JSON.parse(str);\n\t    } catch(err) {\n\t    }\n\n\t    if ( state && typeof(state) == \"object\" ) {\n\t      elem[pluginName]('setState', state);\n\t    }\n\t  }\n\t});\n\telem.on(\"preference\", function(ev, pref) {\n\t  if ( pref.name == \"preserve-state\" &&\n\t       pref.value == false ) {\n\t    localStorage.removeItem(\"query\");\n\t  }\n\t});\n      });\n    },\n\n    /**\n     * @param {jQuery} editor has become the new current program\n     * editor.  Update the examples and re-run the query highlighting.\n     */\n    setProgramEditor: function(editor, force) {\n      var data = this.data(pluginName);\n\n      if ( data.editor == editor[0] && !force )\n\treturn this;\n\n      data.editor = editor[0];\n      if ( data.editor ) {\n\tdata.examples = function() {\n\t  var exl    = editor.prologEditor('getExamples')||[];\n\t  var global = editor.parents(\".swish\").swish('examples', true)||[];\n\n\t  if ( $.isArray(global) )\n\t    exl.concat(global);\n\n\t  return exl;\n\t};\n\tif ( editor.prologEditor('isPengineSource') ) {\n\t  data.source = function() {\n\t    var src = editor.prologEditor('getSource', \"source\");\n\t    var bg  = $(\".background.prolog.source\").text();\n\n\t    if ( bg )\n\t      src += '\\n%@background@\\n' + bg;\n\n\t    return src;\n\t  };\n\t} else {\n\t  data.source = \"\";\n\t}\n\tdata.sourceID = function() {\n\t  return editor.prologEditor('getSourceID');\n\t};\n\n\tvar exl = data.examples();\n\tif ( exl && exl[0] && this.queryEditor('isClean') ) {\n\t  this.queryEditor('setQuery', exl[0]);\n\t} else {\n\t  editor.prologEditor('refreshHighlight');\n\t}\n      } else\n      { data.examples = \"\";\n      }\n    },\n\n    /**\n     * @returns {jQuery} the associated program editor\n     */\n    getProgramEditor: function() {\n      var data = this.data(pluginName);\n\n      if ( data.editor )\n\treturn $(data.editor);\n      else\n\treturn $();\n    },\n\n    /**\n     * @param {Array.String} set or extend the contents of the\n     * _Examples_ menu.\n     * @param {Boolean} [clear=true] clear the list before adding the\n     * new examples.\n     */\n    setExamples: function(list, clear) {\n      var ul = this.find(\"ul.examples\");\n\n      if ( !list ) list  = [];\n      if ( clear === undefined ) clear = true;\n\n      if ( clear && sameExamples(list) )\n\treturn this;\t\t\t/* no change */\n\n      function sameExamples(exs) {\n\tvar ex0;\n\n\tif ( (ex0=ul.data('examples')) &&\n\t     ex0.length == exs.length ) {\n\t  for(var i=0; i<ex0.length; i++) {\n\t    if ( ex0[i] != exs[i] )\n\t      return false;\n\t  }\n\t  return true;\n\t}\n\treturn false;\n      }\n\n      if ( clear === true )\n\tul.html(\"\");\n      ul.find(\"li.add-example, li.divider\").remove();\n      for(var i=0; i<list.length; i++) {\n\tul.append($.el.li($.el.a(list[i])));\n      }\n      ul.data('examples', list.slice(0));\n      ul.append($.el.li({class:\"divider\"}));\n      ul.append($.el.li({class:'add-example'},\n\t\t\t$.el.a(\"Add current query to examples\")));\n\n      return this;\n    },\n\n    /**\n     * Add the current query to the examples in the program\n     */\n    addExample: function()\n    { var query\t= this.find(\".query\").prologEditor('getSource');\n\n      if ( query.trim() != \"\" ) {\n\t$(\".swish-event-receiver:visible\")\n\t     .trigger(\"addExample\",\n\t\t      this.find(\".query\").prologEditor('getSource'));\n      } else\n      { modal.alert(\"The query window is empty\");\n      }\n\n      return this;\n    },\n\n    /**\n     * Add a query to the history menu. If it is already part of the\n     * menu, move it to the bottom.  If the menu exceeds the value\n     * of the option `maxHistoryLength`, remove the oldest entry.\n     * @param {String} query query to add to the history menu.\n     */\n    addHistory: function(query) {\n      var ul   = this.find(\"ul.history\");\n      var data = this.data('queryEditor');\n\n      function findInHistory() {\n\treturn ul.children().filter(function() {\n\t  return $(this).text() == query;\n\t});\n      }\n\n      if ( query ) {\n\tvar li;\n\tvar a;\n\n\tif ( (li=findInHistory()) )\n\t  li.remove();\n\tif ( ul.children().length >= data.maxHistoryLength )\n\t  ul.children().first().remove();\n\tul.append($.el.li(a=$.el.a(query)));\n\t$(a).data('time', (new Date().getTime())/1000);\n      }\n\n      return this;\n    },\n\n    /**\n     * @return {Array} An arrayt of strings representing the\n     * current history.\n     */\n    getHistory: function() {\n      var ul   = this.find(\"ul.history\");\n      var h = [];\n\n      ul.children().each(function() {\n\tvar a =\t$(this).find(\"a\");\n\th.push({\n\t  query: a.text(),\n\t  time:  a.data('time')\n\t});\n      });\n\n      return h;\n    },\n\n    restoreHistory: function(h) {\n      var ul   = this.find(\"ul.history\");\n\n      ul.html(\"\");\n      for(var i=0; i<h.length; i++) {\n\tvar a;\n\tul.append($.el.li(a= $.el.a(h[i].query)));\n\t$(a).data('time', h[i].time);\n      }\n    },\n\n    /**\n     * Set the current query and focus the editor.\n     * @param {String} query the new value of the query\n     */\n    setQuery: function(query) {\n      var data = this.data(pluginName);\n\n      data.cleanGen =\n\tthis.find(\".query\")\n\t    .prologEditor('setSource', query)\n\t    .focus()\n\t    .prologEditor('changeGen');\n\n      return this;\n    },\n\n    isClean: function() {\n      var data = this.data(pluginName);\n\n      return ( !this.queryEditor('getQuery') ||\n\t       ( data.cleanGen &&\n\t\t this.find(\".query\").prologEditor('isClean', data.cleanGen)\n\t       )\n\t     );\n    },\n\n    /**\n     * @returns {String} the current query as Prolog text\n     */\n    getQuery: function() {\n      return this.find(\".query\").prologEditor('getSource', \"query\");\n    },\n\n    getState: function() {\n      return {\n        query:   this[pluginName]('getQuery'),\n        history: this[pluginName]('getHistory')\n      };\n    },\n\n    setState: function(state) {\n      this[pluginName]('restoreHistory', state.history||[]);\n      this[pluginName]('setQuery', state.query||\"\");\n    },\n\n    /**\n     * Collect source and query and submit them to the associated\n     * `runner`.\n     *\n     * @param {String} [q] is the query to execute.  Default asks it\n     * from the associated query editor.\n     * @param {Boolean} [tabled=false] when `true`, present the results\n     * as a table.\n     */\n    run: function(q, tabled) {\n      var data  = this.data('queryEditor');\n\n      if ( q === undefined ) q = this.queryEditor('getQuery');\n      q = $.trim(q);\n\n      if ( !q ) {\n\t$(\".swish-event-receiver\").trigger(\"help\", {file:\"query.html\"});\n\treturn this;\n      }\n      $(\".swish-event-receiver\").trigger(\"clearMessages\");\n\n      var query = { query: q,\n\t\t    editor: data.editor,\n\t\t    query_editor: this.find(\".query\")\n\t\t  };\n\n      if ( typeof(data.source) == \"function\" )\n\tquery.source = data.source(q);\n      else if ( typeof(data.source) == \"string\" )\n\tquery.source = data.source;\n      if ( tabled )\n\tquery.tabled = true;\n\n      this.queryEditor('addHistory', q);\n      data.runner.prologRunners('run', query);\n\n      return this;\n    }\n  }; // methods\n\n\n\t\t /*******************************\n\t\t *\tPRIVATE FUNCTIONS\t*\n\t\t *******************************/\n\n  /* Allow for e.g. Q(part).method(...)\n  */\n\n  function Q(from) {\n    return $(from).closest(\".prolog-query-editor\");\n  }\n\n  function dropup(cls, label, options) {\n    var dropup = $.el.div(\n      {class:\"btn-group dropup\"},\n      $.el.button(\n\t{class:\"btn btn-default btn-xs dropdown-toggle \"+cls,\n\t \"data-toggle\":\"dropdown\"},\n\tlabel,\n\t$.el.span({class:\"caret\"})),\n      $.el.ul({class:\"dropdown-menu \"+cls}));\n\n    $(dropup).on(\"click\", \"a\", function() {\n      var li = $(this).closest(\"li\");\n\n      if ( li.hasClass(\"add-example\") )\n\tQ(this).queryEditor('addExample');\n      else\n\tQ(this).queryEditor('setQuery', $(this).text());\n    });\n\n    return dropup;\n  }\n\n  function examplesButton(options) {\n    var el = dropup(\"examples\", \"Examples\", options);\n    var ul = $(el).find(\"ul\");\n\n    function updateExamples(ev) {\n      var qe   = $(ev.target).closest(\".prolog-query-editor\");\n      var data = qe.data(pluginName);\n\n      if ( data && typeof(data.examples) == \"function\" ) {\n\tvar list = data.examples();\n\n\tif ( $.isArray(list) )\n\t  Q(el).queryEditor('setExamples', list, true);\n      }\n    }\n\n    if ( typeof(options.examples) == \"function\" ) {\n      $(el).mousedown(function(ev) {\n\t\t\tif ( ev.which == 1 ) {\n\t\t\t  updateExamples(ev);\n\t\t\t}\n\t\t      });\n    } else if ( options.examples ) {\n      var list = options.examples;\n\n      for(var i=0; i<list.length; i++) {\n\tul.append($.el.li($.el.a(list[i])));\n      }\n    }\n\n    return el;\n  }\n\n  function historyButton(options) {\n    var menu = dropup(\"history\", \"History\", options);\n\n    $(menu).on(\"mouseenter\", \"li\", function(ev) {\n      var a = $(ev.target).closest(\"li\").find(\"a\");\n      a.attr(\"title\", utils.ago(a.data('time')));\n    });\n\n    // FIXME: Make history menu scroll to the end.  There\n    // must be a cleaner way to do so.\n    $(menu).mouseup(function(ev) {\n      setTimeout(function() {\n\tvar ul = $(menu).find(\"ul.history\");\n\tvar h  = ul.prop(\"scrollHeight\");\n\tconsole.log(h);\n\tul.animate({scrollTop: h});\n      }, 100);\n    });\n\n    return menu;\n  }\n\n  function aggregateButton(options) {\n    var cls = \"aggregate\";\n    var list = options.aggregates ||\n      [ \"Aggregate (count all)\",\n\t\"--\",\n\t\"Projection\",\n\t\"Order by\",\n\t\"Distinct\",\n\t\"Limit\",\n\t\"--\",\n\t\"Time\",\n\t\"Debug (trace)\"\n      ];\n    var ul;\n\n    var dropup = $.el.div(\n      {class:\"btn-group dropup\"},\n      $.el.button(\n\t{class:\"btn btn-default btn-xs dropdown-toggle \"+cls,\n\t \"data-toggle\":\"dropdown\"},\n\t\"Solutions\",\n\t$.el.span({class:\"caret\"})),\n      ul=$.el.ul({class:\"dropdown-menu \"+cls}));\n\n    for(var i = 0; i<list.length; i++) {\n      var wrap = list[i];\n\n      if ( wrap == \"--\" )\n\t$(ul).append($.el.li({class:\"divider\"}));\n      else\n\t$(ul).append($.el.li($.el.a(wrap)));\n    }\n\n    $(dropup).on(\"click\", \"a\", function() {\n      Q(this).find(\".query\").prologEditor('wrapSolution', $(this).text());\n    });\n\n    return dropup;\n  }\n\n  function runButton(options) {\n    var button =\n      $.el.button(\n\t{class:\"run-btn-query\",\n\t class:\"btn btn-default btn-primary btn-xs\"\n\t},\n\t\"Run!\");\n\n    $(button).on(\"click\", function() {\n      Q(this).queryEditor('run', undefined, tableSelected(this));\n    });\n\n    return button;\n  }\n\n  function tableSelected(from) {\n    return $(from).parent().find(\"input\").prop(\"checked\");\n  }\n\n  function tableCheckbox(options) {\n    var checked = preferences.getVal(\"tabled_results\");\n    var attr    = {type:\"checkbox\", name:\"table\"};\n\n    if ( checked === undefined ) {\n      checked = config.swish.tabled_results;\n    }\n    if ( checked )\n      attr.checked = \"checked\";\n\n    var input = $.el.input(attr);\n    var checkbox = $.el.span({class:\"run-chk-table\"},\n\t\t\t     input, \" table results\");\n    $(input).on(\"change\", function(ev) {\n      preferences.setVal(\"tabled_results\",\n\t\t\t $(ev.target).prop(\"checked\"));\n    });\n\n    return checkbox;\n  }\n\n  /**\n   * <Class description>\n   *\n   * @class queryEditor\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.queryEditor = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\ndefine('term',[ \"jquery\" ],\n       function() {\n\nfunction unfold() {\n\t$(this).next().toggleClass('fold')\n\t$(this).remove()\n}\n\n$(document).on('click', '.pl-functor, .pl-infix', function() {\n\tvar p = $(this).parent()\n\t$(p).toggleClass('fold')\n\t$(p).before('<span class=\"pl-ellipsis\">...</span>').prev().click(unfold)\n})\n\n}); // define\n;\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2017, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Handle JavaScript based login\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('login',[ \"jquery\", \"modal\", \"config\", \"form\", \"laconic\" ],\n       function($, modal, config, form) {\n\nvar DEFAULT_USER_FIELDS = [\"display_name\", \"email\", \"avatar\"];\n\n(function($) {\n  var pluginName = 'login';\n\n  /** @lends $.fn.login */\n  var methods = {\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\n\n\tdata.url = elem.attr(\"href\");\n\telem.removeAttr(\"href\");\n\n\telem.on(\"click\", function(ev) {\n\t  if ( elem.hasClass(\"login\") )\n\t    elem.login('login', ev);\n\t});\n\n\telem.data(pluginName, data);\n\telem.login('update', \"startup\");\n      });\n    },\n\n    /**\n     * Update the status of the login element\n     */\n    update: function(why) {\n      var elem = $(this);\n      $.get(config.http.locations.user_info, {reason:why},\n\t    function(obj) {\n\t      if ( obj ) {\n\t\tconfig.swish.user = obj;\n\t\telem.removeClass(\"login\").addClass(\"logout\");\n\n\t\tvar span = elem.find(\"span.logout span.value\");\n\t\tvar icon;\n\n\t\tif ( obj.avatar ) {\n\t\t  icon = $.el.img({ class: \"profile-picture\",\n\t\t\t\t    src: obj.avatar\n\t\t\t\t  });\n\t\t} else {\n\t\t  icon = $.el.span({class:\"glyphicon glyphicon-user\"});\n\t\t}\n\t\ticon = $.el.span(icon, $.el.b({class: \"caret\"}));\n\t\tspan.html(\"\");\n\t\tspan.append(form.widgets.dropdownButton(icon, {\n\t\t  divClass:\"user-menu btn-transparent\",\n\t\t  ulClass:\"pull-right\",\n\t\t  client: elem,\n\t\t  actions: {\n\t\t    \"Logout\":  elem.hasClass('no-logout') ? undefined :\n\t\t\t       function() {\n\t\t      this.login('logout');\n\t\t    },\n\t\t    \"Profile\": function() {\n\t\t      this.login('profile');\n\t\t    }\n\t\t  }\n\t\t}));\n\n\t\tif ( why == \"logout_by_http\" )\n\t\t  modal.alert(\"Failed to logout from HTTP login.  Logout from HTTP \"+\n\t\t\t      \"is known not to work for Chrome.  For some browsers \"+\n\t\t\t      \"there is a plugin to logout.  Otherwise stopping your \"+\n\t\t\t      \"browser completely (all pages) and restarting is the \"+\n\t\t\t      \"only way to logout.  HTTP logout does work for FireFox \"+\n\t\t\t      \"and IE.\");\n\n\t      } else\n\t      { delete config.swish.user;\n\t\telem.removeClass(\"logout\").addClass(\"login\");\n\t      }\n\t      $(\".sourcelist\").trigger(\"login\");\n\t    },\n\t    \"json\");\n    },\n\n    /**\n     * Perform the login\n     */\n    login: function(ev) {\n      var elem   = $(this);\n      var data   = this.data(pluginName);\n      var target = $(ev.target);\n      var url    = data.url;\n      var server = target.closest(\"[data-server]\").data(\"server\");\n      var frame  = target.closest(\"[data-frame]\").data(\"frame\")||\"iframe\";\n\n      if ( server )\n\turl += \"?server=\"+encodeURIComponent(server);\n\n      if ( frame == \"popup\" ) {\n\topenPopup(url, \"_blank\",\n\t\t  'location=true,status=true,height=400,width=800',\n\t\t  function() {\n\t\t    elem.login('logged_in');\n\t\t  });\n      } else {\n\tmodal.show({\n\t  title: \"Login\",\n\t  body: function() {\n\t    var button = $.el.button({ name:\"ok\",\n\t\t\t\t       class:\"btn btn-primary login-cont\",\n\t\t\t\t       \"data-dismiss\":\"modal\"\n\t\t\t\t     },\n\t\t\t\t     \"Continue\");\n\t    this.append($.el.iframe({class:\"login\", src:url}),\n\t\t\tbutton);\n\t  },\n\t  onclose: function() {\n\t    elem.login('logged_in');\n\t  }\n\t});\n      }\n    },\n\n    /**\n     * User closed the login modal window.  Check the login.\n     */\n    logged_in: function() {\n      this.login('update', \"login\");\n    },\n\n    /**\n     * Examine/edit the user profile.  Opens a modal window that is\n     * filled through an AJAX call on the server.\n     */\n    profile: function() {\n      var login = $(this);\n\n      modal.server_form({\n\ttitle: \"User profile\",\n\turl: config.swish.user.swish_profile_url ||\n\t     config.http.locations.user_profile,\n\tonreply: function() { login.login('update', \"profile\"); }\n      });\n    },\n\n    /**\n     * Get information about the current user. If possible we get this\n     * from the logged in user.  Else we get the name and avatar from\n     * #chat.\n     * @param [fields] is an array with fields we want to have\n     * @return {Object} info about current user\n     */\n    get_profile: function(fields) {\n      var info = {};\n      var obj = config.swish.user||{};\n\n      function set_from_chat(key, chat_key) {\n\tvar chat = $(\"#chat\");\n\tif ( chat.length == 1 ) {\n\t  var v = chat.chat('self', [chat_key]);\n\t  if ( v[chat_key] ) info[key] = v[chat_key];\n\t}\n      }\n\n      fields = fields||DEFAULT_USER_FIELDS;\n      for(var i=0; i<fields.length; i++) {\n\tvar key = fields[i];\n\n\tif ( obj[key] ) {\n\t  info[key] = obj[key];\n\t} else if ( key == 'display_name' ) {\n\t  if ( obj.name )\n\t    info.display_name = obj.name;\n\t  else if ( obj.given_name && obj.family_name )\n\t    info.display_name = obj.given_name + \" \" + obj.family_name;\n\t  else if ( obj.family_name )\n\t    info.display_name = obj.family_name;\n\t  else if ( obj.given_name )\n\t    info.display_name = obj.given_name;\n\t  else if ( obj.nick_name )\n\t    info.display_name = obj.nick_name;\n\t  else\n\t    set_from_chat('display_name', 'name');\n\t} else if ( key == 'identity' ) {\n\t  if ( obj.external_identity && obj.identity_provider )\n\t    info.identity = obj.identity_provider + \":\" + obj.external_identity;\n\t} else if ( key == 'avatar' ) {\n\t  set_from_chat('avatar', 'avatar');\n\t}\n      }\n\n      return info;\n    },\n\n    /**\n     * Logout the current user\n     */\n    logout: function() {\n      var user = config.swish.user;\n      var elem = $(this);\n\n      if ( user ) {\n\tif ( user.logout_url ) {\n\t  $.ajax({ url: user.logout_url,\n\t           success: function() {\n\t\t     elem.login('update', \"logout_by_url\");\n\t\t   },\n\t\t   error: function(jqXHDR) {\n\t\t     modal.ajaxError(jqXHDR);\n\t\t   }\n\t         });\n\t} else if ( user.auth_method == \"basic\" ||\n\t\t    user.auth_method == \"digest\" ) {\n\t  clearAuthenticationCache(config.http.locations.http_logout,\n\t\t\t\t   config.swish.user.auth_method,\n\t\t\t\t   function() {\n\t\t\t\t     elem.login('update', \"logout_by_http\");\n\t\t\t\t   });\n\t} else {\n\t  alert(\"Don't know how to logout\");\n\t}\n      }\n    }\n  }; // methods\n\n  /**\n   * @see https://trac-hacks.org/wiki/TrueHttpLogoutPatch\n   * @see http://stackoverflow.com/questions/233507/how-to-log-out-user-from-web-site-using-basic-authentication\n   */\n  function clearAuthenticationCache(page, method, oncomplete) {\n    // Default to a non-existing page (give error 500).\n    // An empty page is better, here.\n    if (!page) page = '.force_logout';\n    try{\n      var agt=navigator.userAgent.toLowerCase();\n\n      if ( agt.indexOf(\"msie\") != -1 ) {\n\tdocument.execCommand(\"ClearAuthenticationCache\");\n      } else if ( agt.indexOf(\"webkit\") != -1 && method == \"basic\" ) {\n\tvar xmlhttp = createXMLObject(oncomplete);\n\n\tif ( xmlhttp ) {\n\t  xmlhttp.open(\"GET\", page, true);\n\t  xmlhttp.setRequestHeader(\"Authorization\", \"Basic logout\");\n\t  xmlhttp.send();\n\t}\n      } else {\n\tvar xmlhttp = createXMLObject(oncomplete);\n\n\tif ( xmlhttp ) {\n\t  xmlhttp.open(\"GET\", page, true, \"logout\", \"logout\");\n\t  xmlhttp.send(\"\");\n\t  xmlhttp.abort();\n\t}\n      }\n    } catch(e) {\n      // There was an error\n      return;\n    }\n  }\n\n  function createXMLObject(oncomplete) {\n    var xmlhttp;\n\n    try {\n      if (window.XMLHttpRequest) {\n\txmlhttp = new XMLHttpRequest();\n      } else if (window.ActiveXObject) {\n\txmlhttp=new ActiveXObject(\"Microsoft.XMLHTTP\");\n      }\n\n      if ( oncomplete ) {\n\txmlhttp.addEventListener(\"load\",  oncomplete);\n\txmlhttp.addEventListener(\"error\", oncomplete);\n\txmlhttp.addEventListener(\"abort\", oncomplete);\n      }\n    } catch (e) {\n    }\n\n    return xmlhttp;\n  }\n\n  /**\n   * Open a popup window for dealing with the federated login.  We\n   * must check the login status after the user completes the popup.\n   * Unfortunately the code below does not always work as `win.closed`\n   * is not always set.  An example is FF 51.0 using Cinamon.\n   */\n  function openPopup(uri, name, options, closeCallback) {\n    var win = window.open(uri, name, options);\n    var interval = window.setInterval(function() {\n      try {\n\tif (win == null || win.closed) {\n\t  window.clearInterval(interval);\n\t  closeCallback(win);\n\t}\n      }\n      catch (e) {\n      }\n    }, 1000);\n\n    if ( window.focus )\n      win.focus();\n\n    return win;\n  };\n\n\n  /**\n   * <Class description>\n   *\n   * @class login\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.login = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","// https://d3js.org v5.9.1 Copyright 2019 Mike Bostock\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\ntypeof define === 'function' && define.amd ? define('d3',['exports'], factory) :\n(factory((global.d3 = global.d3 || {})));\n}(this, (function (exports) { 'use strict';\n\nvar version = \"5.9.1\";\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\nfunction bisector(compare) {\n  if (compare.length === 1) compare = ascendingComparator(compare);\n  return {\n    left: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      }\n      return lo;\n    },\n    right: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) > 0) hi = mid;\n        else lo = mid + 1;\n      }\n      return lo;\n    }\n  };\n}\n\nfunction ascendingComparator(f) {\n  return function(d, x) {\n    return ascending(f(d), x);\n  };\n}\n\nvar ascendingBisect = bisector(ascending);\nvar bisectRight = ascendingBisect.right;\nvar bisectLeft = ascendingBisect.left;\n\nfunction pairs(array, f) {\n  if (f == null) f = pair;\n  var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n  while (i < n) pairs[i] = f(p, p = array[++i]);\n  return pairs;\n}\n\nfunction pair(a, b) {\n  return [a, b];\n}\n\nfunction cross(values0, values1, reduce) {\n  var n0 = values0.length,\n      n1 = values1.length,\n      values = new Array(n0 * n1),\n      i0,\n      i1,\n      i,\n      value0;\n\n  if (reduce == null) reduce = pair;\n\n  for (i0 = i = 0; i0 < n0; ++i0) {\n    for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n      values[i] = reduce(value0, values1[i1]);\n    }\n  }\n\n  return values;\n}\n\nfunction descending(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n\nfunction number(x) {\n  return x === null ? NaN : +x;\n}\n\nfunction variance(values, valueof) {\n  var n = values.length,\n      m = 0,\n      i = -1,\n      mean = 0,\n      value,\n      delta,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) {\n        delta = value - mean;\n        mean += delta / ++m;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) {\n        delta = value - mean;\n        mean += delta / ++m;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n\n  if (m > 1) return sum / (m - 1);\n}\n\nfunction deviation(array, f) {\n  var v = variance(array, f);\n  return v ? Math.sqrt(v) : v;\n}\n\nfunction extent(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n\nvar array = Array.prototype;\n\nvar slice = array.slice;\nvar map = array.map;\n\nfunction constant(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction identity(x) {\n  return x;\n}\n\nfunction sequence(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n\nvar e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction ticks(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    start = Math.ceil(start / step);\n    stop = Math.floor(stop / step);\n    ticks = new Array(n = Math.ceil(stop - start + 1));\n    while (++i < n) ticks[i] = (start + i) * step;\n  } else {\n    start = Math.floor(start * step);\n    stop = Math.ceil(stop * step);\n    ticks = new Array(n = Math.ceil(start - stop + 1));\n    while (++i < n) ticks[i] = (start - i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nfunction tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nfunction tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n\nfunction thresholdSturges(values) {\n  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n\nfunction histogram() {\n  var value = identity,\n      domain = extent,\n      threshold = thresholdSturges;\n\n  function histogram(data) {\n    var i,\n        n = data.length,\n        x,\n        values = new Array(n);\n\n    for (i = 0; i < n; ++i) {\n      values[i] = value(data[i], i, data);\n    }\n\n    var xz = domain(values),\n        x0 = xz[0],\n        x1 = xz[1],\n        tz = threshold(values, x0, x1);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      tz = tickStep(x0, x1, tz);\n      tz = sequence(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive\n    }\n\n    // Remove any thresholds outside the domain.\n    var m = tz.length;\n    while (tz[0] <= x0) tz.shift(), --m;\n    while (tz[m - 1] > x1) tz.pop(), --m;\n\n    var bins = new Array(m + 1),\n        bin;\n\n    // Initialize bins.\n    for (i = 0; i <= m; ++i) {\n      bin = bins[i] = [];\n      bin.x0 = i > 0 ? tz[i - 1] : x0;\n      bin.x1 = i < m ? tz[i] : x1;\n    }\n\n    // Assign data to bins by value, ignoring any outside the domain.\n    for (i = 0; i < n; ++i) {\n      x = values[i];\n      if (x0 <= x && x <= x1) {\n        bins[bisectRight(tz, x, 0, m)].push(data[i]);\n      }\n    }\n\n    return bins;\n  }\n\n  histogram.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n  };\n\n  histogram.domain = function(_) {\n    return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n  };\n\n  histogram.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n  };\n\n  return histogram;\n}\n\nfunction threshold(values, p, valueof) {\n  if (valueof == null) valueof = number;\n  if (!(n = values.length)) return;\n  if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nfunction freedmanDiaconis(values, min, max) {\n  values = map.call(values, number).sort(ascending);\n  return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n}\n\nfunction scott(values, min, max) {\n  return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n}\n\nfunction max(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return max;\n}\n\nfunction mean(values, valueof) {\n  var n = values.length,\n      m = n,\n      i = -1,\n      value,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) sum += value;\n      else --m;\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value;\n      else --m;\n    }\n  }\n\n  if (m) return sum / m;\n}\n\nfunction median(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      numbers = [];\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) {\n        numbers.push(value);\n      }\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) {\n        numbers.push(value);\n      }\n    }\n  }\n\n  return threshold(numbers.sort(ascending), 0.5);\n}\n\nfunction merge(arrays) {\n  var n = arrays.length,\n      m,\n      i = -1,\n      j = 0,\n      merged,\n      array;\n\n  while (++i < n) j += arrays[i].length;\n  merged = new Array(j);\n\n  while (--n >= 0) {\n    array = arrays[n];\n    m = array.length;\n    while (--m >= 0) {\n      merged[--j] = array[m];\n    }\n  }\n\n  return merged;\n}\n\nfunction min(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && min > value) {\n            min = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && min > value) {\n            min = value;\n          }\n        }\n      }\n    }\n  }\n\n  return min;\n}\n\nfunction permute(array, indexes) {\n  var i = indexes.length, permutes = new Array(i);\n  while (i--) permutes[i] = array[indexes[i]];\n  return permutes;\n}\n\nfunction scan(values, compare) {\n  if (!(n = values.length)) return;\n  var n,\n      i = 0,\n      j = 0,\n      xi,\n      xj = values[j];\n\n  if (compare == null) compare = ascending;\n\n  while (++i < n) {\n    if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {\n      xj = xi, j = i;\n    }\n  }\n\n  if (compare(xj, xj) === 0) return j;\n}\n\nfunction shuffle(array, i0, i1) {\n  var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n      t,\n      i;\n\n  while (m) {\n    i = Math.random() * m-- | 0;\n    t = array[m + i0];\n    array[m + i0] = array[i + i0];\n    array[i + i0] = t;\n  }\n\n  return array;\n}\n\nfunction sum(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (value = +values[i]) sum += value; // Note: zero and null are equivalent.\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (value = +valueof(values[i], i, values)) sum += value;\n    }\n  }\n\n  return sum;\n}\n\nfunction transpose(matrix) {\n  if (!(n = matrix.length)) return [];\n  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n      row[j] = matrix[j][i];\n    }\n  }\n  return transpose;\n}\n\nfunction length(d) {\n  return d.length;\n}\n\nfunction zip() {\n  return transpose(arguments);\n}\n\nvar slice$1 = Array.prototype.slice;\n\nfunction identity$1(x) {\n  return x;\n}\n\nvar top = 1,\n    right = 2,\n    bottom = 3,\n    left = 4,\n    epsilon = 1e-6;\n\nfunction translateX(x) {\n  return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number$1(scale) {\n  return function(d) {\n    return +scale(d);\n  };\n}\n\nfunction center(scale) {\n  var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n  if (scale.round()) offset = Math.round(offset);\n  return function(d) {\n    return +scale(d) + offset;\n  };\n}\n\nfunction entering() {\n  return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n  var tickArguments = [],\n      tickValues = null,\n      tickFormat = null,\n      tickSizeInner = 6,\n      tickSizeOuter = 6,\n      tickPadding = 3,\n      k = orient === top || orient === left ? -1 : 1,\n      x = orient === left || orient === right ? \"x\" : \"y\",\n      transform = orient === top || orient === bottom ? translateX : translateY;\n\n  function axis(context) {\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$1) : tickFormat,\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\n        range = scale.range(),\n        range0 = +range[0] + 0.5,\n        range1 = +range[range.length - 1] + 0.5,\n        position = (scale.bandwidth ? center : number$1)(scale.copy()),\n        selection = context.selection ? context.selection() : context,\n        path = selection.selectAll(\".domain\").data([null]),\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\n        tickExit = tick.exit(),\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n        line = tick.select(\"line\"),\n        text = tick.select(\"text\");\n\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\n        .attr(\"class\", \"domain\")\n        .attr(\"stroke\", \"currentColor\"));\n\n    tick = tick.merge(tickEnter);\n\n    line = line.merge(tickEnter.append(\"line\")\n        .attr(\"stroke\", \"currentColor\")\n        .attr(x + \"2\", k * tickSizeInner));\n\n    text = text.merge(tickEnter.append(\"text\")\n        .attr(\"fill\", \"currentColor\")\n        .attr(x, k * spacing)\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n    if (context !== selection) {\n      path = path.transition(context);\n      tick = tick.transition(context);\n      line = line.transition(context);\n      text = text.transition(context);\n\n      tickExit = tickExit.transition(context)\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n      tickEnter\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient == right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter : \"M0.5,\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",0.5H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d)); });\n\n    line\n        .attr(x + \"2\", k * tickSizeInner);\n\n    text\n        .attr(x, k * spacing)\n        .text(format);\n\n    selection.filter(entering)\n        .attr(\"fill\", \"none\")\n        .attr(\"font-size\", 10)\n        .attr(\"font-family\", \"sans-serif\")\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n    selection\n        .each(function() { this.__axis = position; });\n  }\n\n  axis.scale = function(_) {\n    return arguments.length ? (scale = _, axis) : scale;\n  };\n\n  axis.ticks = function() {\n    return tickArguments = slice$1.call(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : slice$1.call(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : slice$1.call(_), axis) : tickValues && tickValues.slice();\n  };\n\n  axis.tickFormat = function(_) {\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\n  };\n\n  axis.tickSize = function(_) {\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeInner = function(_) {\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeOuter = function(_) {\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n  };\n\n  axis.tickPadding = function(_) {\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n  };\n\n  return axis;\n}\n\nfunction axisTop(scale) {\n  return axis(top, scale);\n}\n\nfunction axisRight(scale) {\n  return axis(right, scale);\n}\n\nfunction axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nfunction axisLeft(scale) {\n  return axis(left, scale);\n}\n\nvar noop = {value: function() {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nvar xhtml = \"http://www.w3.org/1999/xhtml\";\n\nvar namespaces = {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n\nfunction namespace(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nfunction creator(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n\nfunction none() {}\n\nfunction selector(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n\nfunction selection_select(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n\nfunction empty() {\n  return [];\n}\n\nfunction selectorAll(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n\nfunction selection_selectAll(select) {\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n\nfunction matcher(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nfunction selection_filter(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n\nfunction sparse(update) {\n  return new Array(update.length);\n}\n\nfunction selection_enter() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nfunction EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n\nfunction constant$1(x) {\n  return function() {\n    return x;\n  };\n}\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = {},\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n      if (keyValue in nodeByKeyValue) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue[keyValue] = node;\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = keyPrefix + key.call(parent, data[i], i, data);\n    if (node = nodeByKeyValue[keyValue]) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue[keyValue] = null;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction selection_data(value, key) {\n  if (!value) {\n    data = new Array(this.size()), j = -1;\n    this.each(function(d) { data[++j] = d; });\n    return data;\n  }\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant$1(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = value.call(parent, parent && parent.__data__, j, parents),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\nfunction selection_exit() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n\nfunction selection_join(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n  if (onupdate != null) update = onupdate(update);\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n\nfunction selection_merge(selection$$1) {\n\n  for (var groups0 = this._groups, groups1 = selection$$1._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n\nfunction selection_order() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction selection_sort(compare) {\n  if (!compare) compare = ascending$1;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending$1(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\nfunction selection_call() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n\nfunction selection_nodes() {\n  var nodes = new Array(this.size()), i = -1;\n  this.each(function() { nodes[++i] = this; });\n  return nodes;\n}\n\nfunction selection_node() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n\nfunction selection_size() {\n  var size = 0;\n  this.each(function() { ++size; });\n  return size;\n}\n\nfunction selection_empty() {\n  return !this.node();\n}\n\nfunction selection_each(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nfunction selection_attr(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n\nfunction defaultView(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nfunction selection_style(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nfunction styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n\nfunction propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nfunction selection_property(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n\nfunction classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nfunction selection_classed(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n\nfunction textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nfunction selection_text(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n\nfunction htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nfunction selection_html(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n\nfunction raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nfunction selection_raise() {\n  return this.each(raise);\n}\n\nfunction lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nfunction selection_lower() {\n  return this.each(lower);\n}\n\nfunction selection_append(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n\nfunction constantNull() {\n  return null;\n}\n\nfunction selection_insert(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n\nfunction remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nfunction selection_remove() {\n  return this.each(remove);\n}\n\nfunction selection_cloneShallow() {\n  return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n  return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nfunction selection_clone(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n\nfunction selection_datum(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n\nvar filterEvents = {};\n\nexports.event = null;\n\nif (typeof document !== \"undefined\") {\n  var element = document.documentElement;\n  if (!(\"onmouseenter\" in element)) {\n    filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n  }\n}\n\nfunction filterContextListener(listener, index, group) {\n  listener = contextListener(listener, index, group);\n  return function(event) {\n    var related = event.relatedTarget;\n    if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n      listener.call(this, event);\n    }\n  };\n}\n\nfunction contextListener(listener, index, group) {\n  return function(event1) {\n    var event0 = exports.event; // Events can be reentrant (e.g., focus).\n    exports.event = event1;\n    try {\n      listener.call(this, this.__data__, index, group);\n    } finally {\n      exports.event = event0;\n    }\n  };\n}\n\nfunction parseTypenames$1(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, capture) {\n  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n  return function(d, i, group) {\n    var on = this.__on, o, listener = wrap(value, i, group);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n        this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, capture);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nfunction selection_on(typename, value, capture) {\n  var typenames = parseTypenames$1(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  if (capture == null) capture = false;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n  return this;\n}\n\nfunction customEvent(event1, listener, that, args) {\n  var event0 = exports.event;\n  event1.sourceEvent = exports.event;\n  exports.event = event1;\n  try {\n    return listener.apply(that, args);\n  } finally {\n    exports.event = event0;\n  }\n}\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nfunction selection_dispatch(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n\nvar root = [null];\n\nfunction Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch\n};\n\nfunction select(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n\nfunction create(name) {\n  return select(creator(name).call(document.documentElement));\n}\n\nvar nextId = 0;\n\nfunction local() {\n  return new Local;\n}\n\nfunction Local() {\n  this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n  constructor: Local,\n  get: function(node) {\n    var id = this._;\n    while (!(id in node)) if (!(node = node.parentNode)) return;\n    return node[id];\n  },\n  set: function(node, value) {\n    return node[this._] = value;\n  },\n  remove: function(node) {\n    return this._ in node && delete node[this._];\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nfunction sourceEvent() {\n  var current = exports.event, source;\n  while (source = current.sourceEvent) current = source;\n  return current;\n}\n\nfunction point(node, event) {\n  var svg = node.ownerSVGElement || node;\n\n  if (svg.createSVGPoint) {\n    var point = svg.createSVGPoint();\n    point.x = event.clientX, point.y = event.clientY;\n    point = point.matrixTransform(node.getScreenCTM().inverse());\n    return [point.x, point.y];\n  }\n\n  var rect = node.getBoundingClientRect();\n  return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n\nfunction mouse(node) {\n  var event = sourceEvent();\n  if (event.changedTouches) event = event.changedTouches[0];\n  return point(node, event);\n}\n\nfunction selectAll(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n      : new Selection([selector == null ? [] : selector], root);\n}\n\nfunction touch(node, touches, identifier) {\n  if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n  for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n    if ((touch = touches[i]).identifier === identifier) {\n      return point(node, touch);\n    }\n  }\n\n  return null;\n}\n\nfunction touches(node, touches) {\n  if (touches == null) touches = sourceEvent().touches;\n\n  for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {\n    points[i] = point(node, touches[i]);\n  }\n\n  return points;\n}\n\nfunction nopropagation() {\n  exports.event.stopImmediatePropagation();\n}\n\nfunction noevent() {\n  exports.event.preventDefault();\n  exports.event.stopImmediatePropagation();\n}\n\nfunction dragDisable(view) {\n  var root = view.document.documentElement,\n      selection$$1 = select(view).on(\"dragstart.drag\", noevent, true);\n  if (\"onselectstart\" in root) {\n    selection$$1.on(\"selectstart.drag\", noevent, true);\n  } else {\n    root.__noselect = root.style.MozUserSelect;\n    root.style.MozUserSelect = \"none\";\n  }\n}\n\nfunction yesdrag(view, noclick) {\n  var root = view.document.documentElement,\n      selection$$1 = select(view).on(\"dragstart.drag\", null);\n  if (noclick) {\n    selection$$1.on(\"click.drag\", noevent, true);\n    setTimeout(function() { selection$$1.on(\"click.drag\", null); }, 0);\n  }\n  if (\"onselectstart\" in root) {\n    selection$$1.on(\"selectstart.drag\", null);\n  } else {\n    root.style.MozUserSelect = root.__noselect;\n    delete root.__noselect;\n  }\n}\n\nfunction constant$2(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n  this.target = target;\n  this.type = type;\n  this.subject = subject;\n  this.identifier = id;\n  this.active = active;\n  this.x = x;\n  this.y = y;\n  this.dx = dx;\n  this.dy = dy;\n  this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n  var value = this._.on.apply(this._, arguments);\n  return value === this._ ? this : value;\n};\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n  return !exports.event.button;\n}\n\nfunction defaultContainer() {\n  return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n  return d == null ? {x: exports.event.x, y: exports.event.y} : d;\n}\n\nfunction defaultTouchable() {\n  return \"ontouchstart\" in this;\n}\n\nfunction drag() {\n  var filter = defaultFilter,\n      container = defaultContainer,\n      subject = defaultSubject,\n      touchable = defaultTouchable,\n      gestures = {},\n      listeners = dispatch(\"start\", \"drag\", \"end\"),\n      active = 0,\n      mousedownx,\n      mousedowny,\n      mousemoving,\n      touchending,\n      clickDistance2 = 0;\n\n  function drag(selection$$1) {\n    selection$$1\n        .on(\"mousedown.drag\", mousedowned)\n      .filter(touchable)\n        .on(\"touchstart.drag\", touchstarted)\n        .on(\"touchmove.drag\", touchmoved)\n        .on(\"touchend.drag touchcancel.drag\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  function mousedowned() {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n    if (!gesture) return;\n    select(exports.event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n    dragDisable(exports.event.view);\n    nopropagation();\n    mousemoving = false;\n    mousedownx = exports.event.clientX;\n    mousedowny = exports.event.clientY;\n    gesture(\"start\");\n  }\n\n  function mousemoved() {\n    noevent();\n    if (!mousemoving) {\n      var dx = exports.event.clientX - mousedownx, dy = exports.event.clientY - mousedowny;\n      mousemoving = dx * dx + dy * dy > clickDistance2;\n    }\n    gestures.mouse(\"drag\");\n  }\n\n  function mouseupped() {\n    select(exports.event.view).on(\"mousemove.drag mouseup.drag\", null);\n    yesdrag(exports.event.view, mousemoving);\n    noevent();\n    gestures.mouse(\"end\");\n  }\n\n  function touchstarted() {\n    if (!filter.apply(this, arguments)) return;\n    var touches$$1 = exports.event.changedTouches,\n        c = container.apply(this, arguments),\n        n = touches$$1.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = beforestart(touches$$1[i].identifier, c, touch, this, arguments)) {\n        nopropagation();\n        gesture(\"start\");\n      }\n    }\n  }\n\n  function touchmoved() {\n    var touches$$1 = exports.event.changedTouches,\n        n = touches$$1.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches$$1[i].identifier]) {\n        noevent();\n        gesture(\"drag\");\n      }\n    }\n  }\n\n  function touchended() {\n    var touches$$1 = exports.event.changedTouches,\n        n = touches$$1.length, i, gesture;\n\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches$$1[i].identifier]) {\n        nopropagation();\n        gesture(\"end\");\n      }\n    }\n  }\n\n  function beforestart(id, container, point$$1, that, args) {\n    var p = point$$1(container, id), s, dx, dy,\n        sublisteners = listeners.copy();\n\n    if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n      if ((exports.event.subject = s = subject.apply(that, args)) == null) return false;\n      dx = s.x - p[0] || 0;\n      dy = s.y - p[1] || 0;\n      return true;\n    })) return;\n\n    return function gesture(type) {\n      var p0 = p, n;\n      switch (type) {\n        case \"start\": gestures[id] = gesture, n = active++; break;\n        case \"end\": delete gestures[id], --active; // nobreak\n        case \"drag\": p = point$$1(container, id), n = active; break;\n      }\n      customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n    };\n  }\n\n  drag.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$2(!!_), drag) : filter;\n  };\n\n  drag.container = function(_) {\n    return arguments.length ? (container = typeof _ === \"function\" ? _ : constant$2(_), drag) : container;\n  };\n\n  drag.subject = function(_) {\n    return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant$2(_), drag) : subject;\n  };\n\n  drag.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant$2(!!_), drag) : touchable;\n  };\n\n  drag.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? drag : value;\n  };\n\n  drag.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n  };\n\n  return drag;\n}\n\nfunction define(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nfunction extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n\nfunction Color() {}\n\nvar darker = 0.7;\nvar brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex3 = /^#([0-9a-f]{3})$/,\n    reHex6 = /^#([0-9a-f]{6})$/,\n    reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n    reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n    reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n    reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n    reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n    reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  displayable: function() {\n    return this.rgb().displayable();\n  },\n  hex: function() {\n    return this.rgb().hex();\n  },\n  toString: function() {\n    return this.rgb() + \"\";\n  }\n});\n\nfunction color(format) {\n  var m;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n      : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format])\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nfunction rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nfunction rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nfunction Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb: function() {\n    return this;\n  },\n  displayable: function() {\n    return (0 <= this.r && this.r <= 255)\n        && (0 <= this.g && this.g <= 255)\n        && (0 <= this.b && this.b <= 255)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: function() {\n    return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n  },\n  toString: function() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"rgb(\" : \"rgba(\")\n        + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n        + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n        + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n}));\n\nfunction hex(value) {\n  value = Math.max(0, Math.min(255, Math.round(value) || 0));\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nfunction hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nfunction hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  displayable: function() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n\nvar deg2rad = Math.PI / 180;\nvar rad2deg = 180 / Math.PI;\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n    Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n  if (o instanceof Hcl) {\n    if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n    var h = o.h * deg2rad;\n    return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n  }\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = rgb2lrgb(o.r),\n      g = rgb2lrgb(o.g),\n      b = rgb2lrgb(o.b),\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n  if (r === g && g === b) x = z = y; else {\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n  }\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nfunction gray(l, opacity) {\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nfunction lab(l, a, b, opacity) {\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nfunction Lab(l, a, b, opacity) {\n  this.l = +l;\n  this.a = +a;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n  brighter: function(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker: function(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb: function() {\n    var y = (this.l + 16) / 116,\n        x = isNaN(this.a) ? y : y + this.a / 500,\n        z = isNaN(this.b) ? y : y - this.b / 200;\n    x = Xn * lab2xyz(x);\n    y = Yn * lab2xyz(y);\n    z = Zn * lab2xyz(z);\n    return new Rgb(\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n      this.opacity\n    );\n  }\n}));\n\nfunction xyz2lab(t) {\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n  return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n  if (!(o instanceof Lab)) o = labConvert(o);\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * rad2deg;\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nfunction lch(l, c, h, opacity) {\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction hcl(h, c, l, opacity) {\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hcl(h, c, l, opacity) {\n  this.h = +h;\n  this.c = +c;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n  brighter: function(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker: function(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb: function() {\n    return labConvert(this).rgb();\n  }\n}));\n\nvar A = -0.14861,\n    B = +1.78277,\n    C = -0.29227,\n    D = -0.90649,\n    E = +1.97294,\n    ED = E * D,\n    EB = E * B,\n    BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n      bl = b - l,\n      k = (E * (g - l) - C * bl) / D,\n      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n      h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nfunction cubehelix(h, s, l, opacity) {\n  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Cubehelix(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n        l = +this.l,\n        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n        cosh = Math.cos(h),\n        sinh = Math.sin(h);\n    return new Rgb(\n      255 * (l + a * (A * cosh + B * sinh)),\n      255 * (l + a * (C * cosh + D * sinh)),\n      255 * (l + a * (E * cosh)),\n      this.opacity\n    );\n  }\n}));\n\nfunction basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nfunction basis$1(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n\nfunction basisClosed(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n\nfunction constant$3(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nfunction hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a);\n}\n\nfunction gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant$3(isNaN(a) ? b : a);\n  };\n}\n\nfunction nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant$3(isNaN(a) ? b : a);\n}\n\nvar interpolateRgb = (function rgbGamma(y) {\n  var color$$1 = gamma(y);\n\n  function rgb$$1(start, end) {\n    var r = color$$1((start = rgb(start)).r, (end = rgb(end)).r),\n        g = color$$1(start.g, end.g),\n        b = color$$1(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb$$1.gamma = rgbGamma;\n\n  return rgb$$1;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color$$1;\n    for (i = 0; i < n; ++i) {\n      color$$1 = rgb(colors[i]);\n      r[i] = color$$1.r || 0;\n      g[i] = color$$1.g || 0;\n      b[i] = color$$1.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color$$1.opacity = 1;\n    return function(t) {\n      color$$1.r = r(t);\n      color$$1.g = g(t);\n      color$$1.b = b(t);\n      return color$$1 + \"\";\n    };\n  };\n}\n\nvar rgbBasis = rgbSpline(basis$1);\nvar rgbBasisClosed = rgbSpline(basisClosed);\n\nfunction array$1(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = interpolateValue(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n\nfunction date(a, b) {\n  var d = new Date;\n  return a = +a, b -= a, function(t) {\n    return d.setTime(a + b * t), d;\n  };\n}\n\nfunction interpolateNumber(a, b) {\n  return a = +a, b -= a, function(t) {\n    return a + b * t;\n  };\n}\n\nfunction object(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = interpolateValue(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nfunction interpolateString(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: interpolateNumber(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n\nfunction interpolateValue(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant$3(b)\n      : (t === \"number\" ? interpolateNumber\n      : t === \"string\" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString)\n      : b instanceof color ? interpolateRgb\n      : b instanceof Date ? date\n      : Array.isArray(b) ? array$1\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : interpolateNumber)(a, b);\n}\n\nfunction discrete(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n\nfunction hue$1(a, b) {\n  var i = hue(+a, +b);\n  return function(t) {\n    var x = i(t);\n    return x - 360 * Math.floor(x / 360);\n  };\n}\n\nfunction interpolateRound(a, b) {\n  return a = +a, b -= a, function(t) {\n    return Math.round(a + b * t);\n  };\n}\n\nvar degrees = 180 / Math.PI;\n\nvar identity$2 = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nfunction decompose(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n\nvar cssNode,\n    cssRoot,\n    cssView,\n    svgNode;\n\nfunction parseCss(value) {\n  if (value === \"none\") return identity$2;\n  if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n  cssNode.style.transform = value;\n  value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n  cssRoot.removeChild(cssNode);\n  value = value.slice(7, -1).split(\",\");\n  return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nfunction parseSvg(value) {\n  if (value == null) return identity$2;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: interpolateNumber(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: interpolateNumber(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nvar interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nvar interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n\nvar rho = Math.SQRT2,\n    rho2 = 2,\n    rho4 = 4,\n    epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nfunction interpolateZoom(p0, p1) {\n  var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n      ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n      dx = ux1 - ux0,\n      dy = uy1 - uy0,\n      d2 = dx * dx + dy * dy,\n      i,\n      S;\n\n  // Special case for u0 ≅ u1.\n  if (d2 < epsilon2) {\n    S = Math.log(w1 / w0) / rho;\n    i = function(t) {\n      return [\n        ux0 + t * dx,\n        uy0 + t * dy,\n        w0 * Math.exp(rho * t * S)\n      ];\n    };\n  }\n\n  // General case.\n  else {\n    var d1 = Math.sqrt(d2),\n        b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n        b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n        r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n        r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n    S = (r1 - r0) / rho;\n    i = function(t) {\n      var s = t * S,\n          coshr0 = cosh(r0),\n          u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n      return [\n        ux0 + u * dx,\n        uy0 + u * dy,\n        w0 * coshr0 / cosh(rho * s + r0)\n      ];\n    };\n  }\n\n  i.duration = S * 1000;\n\n  return i;\n}\n\nfunction hsl$1(hue$$1) {\n  return function(start, end) {\n    var h = hue$$1((start = hsl(start)).h, (end = hsl(end)).h),\n        s = nogamma(start.s, end.s),\n        l = nogamma(start.l, end.l),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nvar hsl$2 = hsl$1(hue);\nvar hslLong = hsl$1(nogamma);\n\nfunction lab$1(start, end) {\n  var l = nogamma((start = lab(start)).l, (end = lab(end)).l),\n      a = nogamma(start.a, end.a),\n      b = nogamma(start.b, end.b),\n      opacity = nogamma(start.opacity, end.opacity);\n  return function(t) {\n    start.l = l(t);\n    start.a = a(t);\n    start.b = b(t);\n    start.opacity = opacity(t);\n    return start + \"\";\n  };\n}\n\nfunction hcl$1(hue$$1) {\n  return function(start, end) {\n    var h = hue$$1((start = hcl(start)).h, (end = hcl(end)).h),\n        c = nogamma(start.c, end.c),\n        l = nogamma(start.l, end.l),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nvar hcl$2 = hcl$1(hue);\nvar hclLong = hcl$1(nogamma);\n\nfunction cubehelix$1(hue$$1) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix$$1(start, end) {\n      var h = hue$$1((start = cubehelix(start)).h, (end = cubehelix(end)).h),\n          s = nogamma(start.s, end.s),\n          l = nogamma(start.l, end.l),\n          opacity = nogamma(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix$$1.gamma = cubehelixGamma;\n\n    return cubehelix$$1;\n  })(1);\n}\n\nvar cubehelix$2 = cubehelix$1(hue);\nvar cubehelixLong = cubehelix$1(nogamma);\n\nfunction piecewise(interpolate, values) {\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\n  return function(t) {\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n    return I[i](t - i);\n  };\n}\n\nfunction quantize(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n}\n\nvar frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nfunction now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nfunction Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nfunction timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nfunction timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n\nfunction timeout$1(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(function(elapsed) {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n\nfunction interval$1(callback, delay, time) {\n  var t = new Timer, total = delay;\n  if (delay == null) return t.restart(callback, delay, time), t;\n  delay = +delay, time = time == null ? now() : +time;\n  t.restart(function tick(elapsed) {\n    elapsed += total;\n    t.restart(tick, total += delay, time);\n    callback(elapsed);\n  }, delay, time);\n  return t;\n}\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nvar CREATED = 0;\nvar SCHEDULED = 1;\nvar STARTING = 2;\nvar STARTED = 3;\nvar RUNNING = 4;\nvar ENDING = 5;\nvar ENDED = 6;\n\nfunction schedule(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create$1(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nfunction init(node, id) {\n  var schedule = get$1(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nfunction set$1(node, id) {\n  var schedule = get$1(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nfunction get$1(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create$1(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout$1(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout$1(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n\nfunction interrupt(node, name) {\n  var schedules = node.__transition,\n      schedule$$1,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule$$1 = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule$$1.state > STARTING && schedule$$1.state < ENDING;\n    schedule$$1.state = ENDED;\n    schedule$$1.timer.stop();\n    schedule$$1.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule$$1.index, schedule$$1.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n\nfunction selection_interrupt(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule$$1 = set$1(this, id),\n        tween = schedule$$1.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule$$1.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule$$1 = set$1(this, id),\n        tween = schedule$$1.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule$$1.tween = tween1;\n  };\n}\n\nfunction transition_tween(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get$1(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nfunction tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule$$1 = set$1(this, id);\n    (schedule$$1.value || (schedule$$1.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get$1(node, id).value[name];\n  };\n}\n\nfunction interpolate(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n\nfunction attrRemove$1(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS$1(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant$1(name, interpolate$$1, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate$$1(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS$1(fullname, interpolate$$1, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate$$1(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction$1(name, interpolate$$1, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate$$1(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS$1(fullname, interpolate$$1, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate$$1(string00 = string0, value1));\n  };\n}\n\nfunction transition_attr(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransformSvg : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)\n      : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));\n}\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i(t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i(t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction transition_attrTween(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nfunction transition_delay(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get$1(this.node(), id).delay;\n}\n\nfunction durationFunction(id, value) {\n  return function() {\n    set$1(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set$1(this, id).duration = value;\n  };\n}\n\nfunction transition_duration(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get$1(this.node(), id).duration;\n}\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set$1(this, id).ease = value;\n  };\n}\n\nfunction transition_ease(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get$1(this.node(), id).ease;\n}\n\nfunction transition_filter(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n\nfunction transition_merge(transition$$1) {\n  if (transition$$1._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition$$1._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set$1;\n  return function() {\n    var schedule$$1 = sit(this, id),\n        on = schedule$$1.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule$$1.on = on1;\n  };\n}\n\nfunction transition_on(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get$1(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n\nfunction removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nfunction transition_remove() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n\nfunction transition_select(select$$1) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select$$1 !== \"function\") select$$1 = selector(select$$1);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select$$1.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get$1(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n\nfunction transition_selectAll(select$$1) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select$$1 !== \"function\") select$$1 = selectorAll(select$$1);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select$$1.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n\nvar Selection$1 = selection.prototype.constructor;\n\nfunction transition_selection() {\n  return new Selection$1(this._groups, this._parents);\n}\n\nfunction styleNull(name, interpolate$$1) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = styleValue(this, name),\n        string1 = (this.style.removeProperty(name), styleValue(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate$$1(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove$1(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant$1(name, interpolate$$1, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = styleValue(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate$$1(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction$1(name, interpolate$$1, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = styleValue(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate$$1(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule$$1 = set$1(this, id),\n        on = schedule$$1.on,\n        listener = schedule$$1.value[key] == null ? remove || (remove = styleRemove$1(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule$$1.on = on1;\n  };\n}\n\nfunction transition_style(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransformCss : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove$1(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction$1(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant$1(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n\nfunction styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i(t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction transition_styleTween(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n\nfunction textConstant$1(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction$1(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nfunction transition_text(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction$1(tweenValue(this, \"text\", value))\n      : textConstant$1(value == null ? \"\" : value + \"\"));\n}\n\nfunction transition_transition() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get$1(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n\nfunction transition_end() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule$$1 = set$1(this, id),\n          on = schedule$$1.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule$$1.on = on1;\n    });\n  });\n}\n\nvar id = 0;\n\nfunction Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nfunction transition(name) {\n  return selection().transition(name);\n}\n\nfunction newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  end: transition_end\n};\n\nfunction linear$1(t) {\n  return +t;\n}\n\nfunction quadIn(t) {\n  return t * t;\n}\n\nfunction quadOut(t) {\n  return t * (2 - t);\n}\n\nfunction quadInOut(t) {\n  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n\nfunction cubicIn(t) {\n  return t * t * t;\n}\n\nfunction cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nfunction cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n\nvar exponent = 3;\n\nvar polyIn = (function custom(e) {\n  e = +e;\n\n  function polyIn(t) {\n    return Math.pow(t, e);\n  }\n\n  polyIn.exponent = custom;\n\n  return polyIn;\n})(exponent);\n\nvar polyOut = (function custom(e) {\n  e = +e;\n\n  function polyOut(t) {\n    return 1 - Math.pow(1 - t, e);\n  }\n\n  polyOut.exponent = custom;\n\n  return polyOut;\n})(exponent);\n\nvar polyInOut = (function custom(e) {\n  e = +e;\n\n  function polyInOut(t) {\n    return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n  }\n\n  polyInOut.exponent = custom;\n\n  return polyInOut;\n})(exponent);\n\nvar pi = Math.PI,\n    halfPi = pi / 2;\n\nfunction sinIn(t) {\n  return 1 - Math.cos(t * halfPi);\n}\n\nfunction sinOut(t) {\n  return Math.sin(t * halfPi);\n}\n\nfunction sinInOut(t) {\n  return (1 - Math.cos(pi * t)) / 2;\n}\n\nfunction expIn(t) {\n  return Math.pow(2, 10 * t - 10);\n}\n\nfunction expOut(t) {\n  return 1 - Math.pow(2, -10 * t);\n}\n\nfunction expInOut(t) {\n  return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;\n}\n\nfunction circleIn(t) {\n  return 1 - Math.sqrt(1 - t * t);\n}\n\nfunction circleOut(t) {\n  return Math.sqrt(1 - --t * t);\n}\n\nfunction circleInOut(t) {\n  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n\nvar b1 = 4 / 11,\n    b2 = 6 / 11,\n    b3 = 8 / 11,\n    b4 = 3 / 4,\n    b5 = 9 / 11,\n    b6 = 10 / 11,\n    b7 = 15 / 16,\n    b8 = 21 / 22,\n    b9 = 63 / 64,\n    b0 = 1 / b1 / b1;\n\nfunction bounceIn(t) {\n  return 1 - bounceOut(1 - t);\n}\n\nfunction bounceOut(t) {\n  return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nfunction bounceInOut(t) {\n  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n\nvar overshoot = 1.70158;\n\nvar backIn = (function custom(s) {\n  s = +s;\n\n  function backIn(t) {\n    return t * t * ((s + 1) * t - s);\n  }\n\n  backIn.overshoot = custom;\n\n  return backIn;\n})(overshoot);\n\nvar backOut = (function custom(s) {\n  s = +s;\n\n  function backOut(t) {\n    return --t * t * ((s + 1) * t + s) + 1;\n  }\n\n  backOut.overshoot = custom;\n\n  return backOut;\n})(overshoot);\n\nvar backInOut = (function custom(s) {\n  s = +s;\n\n  function backInOut(t) {\n    return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n  }\n\n  backInOut.overshoot = custom;\n\n  return backInOut;\n})(overshoot);\n\nvar tau = 2 * Math.PI,\n    amplitude = 1,\n    period = 0.3;\n\nvar elasticIn = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticIn(t) {\n    return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n  }\n\n  elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n  elasticIn.period = function(p) { return custom(a, p); };\n\n  return elasticIn;\n})(amplitude, period);\n\nvar elasticOut = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticOut(t) {\n    return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n  }\n\n  elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n  elasticOut.period = function(p) { return custom(a, p); };\n\n  return elasticOut;\n})(amplitude, period);\n\nvar elasticInOut = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticInOut(t) {\n    return ((t = t * 2 - 1) < 0\n        ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n        : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n  }\n\n  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n  elasticInOut.period = function(p) { return custom(a, p); };\n\n  return elasticInOut;\n})(amplitude, period);\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: cubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      return defaultTiming.time = now(), defaultTiming;\n    }\n  }\n  return timing;\n}\n\nfunction selection_transition(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n\nvar root$1 = [null];\n\nfunction active(node, name) {\n  var schedules = node.__transition,\n      schedule$$1,\n      i;\n\n  if (schedules) {\n    name = name == null ? null : name + \"\";\n    for (i in schedules) {\n      if ((schedule$$1 = schedules[i]).state > SCHEDULED && schedule$$1.name === name) {\n        return new Transition([[node]], root$1, name, +i);\n      }\n    }\n  }\n\n  return null;\n}\n\nfunction constant$4(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction BrushEvent(target, type, selection) {\n  this.target = target;\n  this.type = type;\n  this.selection = selection;\n}\n\nfunction nopropagation$1() {\n  exports.event.stopImmediatePropagation();\n}\n\nfunction noevent$1() {\n  exports.event.preventDefault();\n  exports.event.stopImmediatePropagation();\n}\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nvar X = {\n  name: \"x\",\n  handles: [\"e\", \"w\"].map(type),\n  input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n  name: \"y\",\n  handles: [\"n\", \"s\"].map(type),\n  input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n  name: \"xy\",\n  handles: [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"].map(type),\n  input: function(xy) { return xy; },\n  output: function(xy) { return xy; }\n};\n\nvar cursors = {\n  overlay: \"crosshair\",\n  selection: \"move\",\n  n: \"ns-resize\",\n  e: \"ew-resize\",\n  s: \"ns-resize\",\n  w: \"ew-resize\",\n  nw: \"nwse-resize\",\n  ne: \"nesw-resize\",\n  se: \"nwse-resize\",\n  sw: \"nesw-resize\"\n};\n\nvar flipX = {\n  e: \"w\",\n  w: \"e\",\n  nw: \"ne\",\n  ne: \"nw\",\n  se: \"sw\",\n  sw: \"se\"\n};\n\nvar flipY = {\n  n: \"s\",\n  s: \"n\",\n  nw: \"sw\",\n  ne: \"se\",\n  se: \"ne\",\n  sw: \"nw\"\n};\n\nvar signsX = {\n  overlay: +1,\n  selection: +1,\n  n: null,\n  e: +1,\n  s: null,\n  w: -1,\n  nw: -1,\n  ne: +1,\n  se: +1,\n  sw: -1\n};\n\nvar signsY = {\n  overlay: +1,\n  selection: +1,\n  n: -1,\n  e: null,\n  s: +1,\n  w: null,\n  nw: -1,\n  ne: -1,\n  se: +1,\n  sw: +1\n};\n\nfunction type(t) {\n  return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter$1() {\n  return !exports.event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local$1(node) {\n  while (!node.__brush) if (!(node = node.parentNode)) return;\n  return node.__brush;\n}\n\nfunction empty$1(extent) {\n  return extent[0][0] === extent[1][0]\n      || extent[0][1] === extent[1][1];\n}\n\nfunction brushSelection(node) {\n  var state = node.__brush;\n  return state ? state.dim.output(state.selection) : null;\n}\n\nfunction brushX() {\n  return brush$1(X);\n}\n\nfunction brushY() {\n  return brush$1(Y);\n}\n\nfunction brush() {\n  return brush$1(XY);\n}\n\nfunction brush$1(dim) {\n  var extent = defaultExtent,\n      filter = defaultFilter$1,\n      listeners = dispatch(brush, \"start\", \"brush\", \"end\"),\n      handleSize = 6,\n      touchending;\n\n  function brush(group) {\n    var overlay = group\n        .property(\"__brush\", initialize)\n      .selectAll(\".overlay\")\n      .data([type(\"overlay\")]);\n\n    overlay.enter().append(\"rect\")\n        .attr(\"class\", \"overlay\")\n        .attr(\"pointer-events\", \"all\")\n        .attr(\"cursor\", cursors.overlay)\n      .merge(overlay)\n        .each(function() {\n          var extent = local$1(this).extent;\n          select(this)\n              .attr(\"x\", extent[0][0])\n              .attr(\"y\", extent[0][1])\n              .attr(\"width\", extent[1][0] - extent[0][0])\n              .attr(\"height\", extent[1][1] - extent[0][1]);\n        });\n\n    group.selectAll(\".selection\")\n      .data([type(\"selection\")])\n      .enter().append(\"rect\")\n        .attr(\"class\", \"selection\")\n        .attr(\"cursor\", cursors.selection)\n        .attr(\"fill\", \"#777\")\n        .attr(\"fill-opacity\", 0.3)\n        .attr(\"stroke\", \"#fff\")\n        .attr(\"shape-rendering\", \"crispEdges\");\n\n    var handle = group.selectAll(\".handle\")\n      .data(dim.handles, function(d) { return d.type; });\n\n    handle.exit().remove();\n\n    handle.enter().append(\"rect\")\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n    group\n        .each(redraw)\n        .attr(\"fill\", \"none\")\n        .attr(\"pointer-events\", \"all\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\")\n        .on(\"mousedown.brush touchstart.brush\", started);\n  }\n\n  brush.move = function(group, selection$$1) {\n    if (group.selection) {\n      group\n          .on(\"start.brush\", function() { emitter(this, arguments).beforestart().start(); })\n          .on(\"interrupt.brush end.brush\", function() { emitter(this, arguments).end(); })\n          .tween(\"brush\", function() {\n            var that = this,\n                state = that.__brush,\n                emit = emitter(that, arguments),\n                selection0 = state.selection,\n                selection1 = dim.input(typeof selection$$1 === \"function\" ? selection$$1.apply(this, arguments) : selection$$1, state.extent),\n                i = interpolateValue(selection0, selection1);\n\n            function tween(t) {\n              state.selection = t === 1 && empty$1(selection1) ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 && selection1 ? tween : tween(1);\n          });\n    } else {\n      group\n          .each(function() {\n            var that = this,\n                args = arguments,\n                state = that.__brush,\n                selection1 = dim.input(typeof selection$$1 === \"function\" ? selection$$1.apply(that, args) : selection$$1, state.extent),\n                emit = emitter(that, args).beforestart();\n\n            interrupt(that);\n            state.selection = selection1 == null || empty$1(selection1) ? null : selection1;\n            redraw.call(that);\n            emit.start().brush().end();\n          });\n    }\n  };\n\n  function redraw() {\n    var group = select(this),\n        selection$$1 = local$1(this).selection;\n\n    if (selection$$1) {\n      group.selectAll(\".selection\")\n          .style(\"display\", null)\n          .attr(\"x\", selection$$1[0][0])\n          .attr(\"y\", selection$$1[0][1])\n          .attr(\"width\", selection$$1[1][0] - selection$$1[0][0])\n          .attr(\"height\", selection$$1[1][1] - selection$$1[0][1]);\n\n      group.selectAll(\".handle\")\n          .style(\"display\", null)\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection$$1[1][0] - handleSize / 2 : selection$$1[0][0] - handleSize / 2; })\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection$$1[1][1] - handleSize / 2 : selection$$1[0][1] - handleSize / 2; })\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection$$1[1][0] - selection$$1[0][0] + handleSize : handleSize; })\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection$$1[1][1] - selection$$1[0][1] + handleSize : handleSize; });\n    }\n\n    else {\n      group.selectAll(\".selection,.handle\")\n          .style(\"display\", \"none\")\n          .attr(\"x\", null)\n          .attr(\"y\", null)\n          .attr(\"width\", null)\n          .attr(\"height\", null);\n    }\n  }\n\n  function emitter(that, args) {\n    return that.__brush.emitter || new Emitter(that, args);\n  }\n\n  function Emitter(that, args) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n  }\n\n  Emitter.prototype = {\n    beforestart: function() {\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\n      return this;\n    },\n    start: function() {\n      if (this.starting) this.starting = false, this.emit(\"start\");\n      return this;\n    },\n    brush: function() {\n      this.emit(\"brush\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\");\n      return this;\n    },\n    emit: function(type) {\n      customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);\n    }\n  };\n\n  function started() {\n    if (exports.event.touches) { if (exports.event.changedTouches.length < exports.event.touches.length) return noevent$1(); }\n    else if (touchending) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = exports.event.target.__data__.type,\n        mode = (exports.event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (exports.event.altKey ? MODE_CENTER : MODE_HANDLE),\n        signX = dim === Y ? null : signsX[type],\n        signY = dim === X ? null : signsY[type],\n        state = local$1(that),\n        extent = state.extent,\n        selection$$1 = state.selection,\n        W = extent[0][0], w0, w1,\n        N = extent[0][1], n0, n1,\n        E = extent[1][0], e0, e1,\n        S = extent[1][1], s0, s1,\n        dx,\n        dy,\n        moving,\n        shifting = signX && signY && exports.event.shiftKey,\n        lockX,\n        lockY,\n        point0 = mouse(that),\n        point$$1 = point0,\n        emit = emitter(that, arguments).beforestart();\n\n    if (type === \"overlay\") {\n      state.selection = selection$$1 = [\n        [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],\n        [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]\n      ];\n    } else {\n      w0 = selection$$1[0][0];\n      n0 = selection$$1[0][1];\n      e0 = selection$$1[1][0];\n      s0 = selection$$1[1][1];\n    }\n\n    w1 = w0;\n    n1 = n0;\n    e1 = e0;\n    s1 = s0;\n\n    var group = select(that)\n        .attr(\"pointer-events\", \"none\");\n\n    var overlay = group.selectAll(\".overlay\")\n        .attr(\"cursor\", cursors[type]);\n\n    if (exports.event.touches) {\n      group\n          .on(\"touchmove.brush\", moved, true)\n          .on(\"touchend.brush touchcancel.brush\", ended, true);\n    } else {\n      var view = select(exports.event.view)\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n\n      dragDisable(exports.event.view);\n    }\n\n    nopropagation$1();\n    interrupt(that);\n    redraw.call(that);\n    emit.start();\n\n    function moved() {\n      var point1 = mouse(that);\n      if (shifting && !lockX && !lockY) {\n        if (Math.abs(point1[0] - point$$1[0]) > Math.abs(point1[1] - point$$1[1])) lockY = true;\n        else lockX = true;\n      }\n      point$$1 = point1;\n      moving = true;\n      noevent$1();\n      move();\n    }\n\n    function move() {\n      var t;\n\n      dx = point$$1[0] - point0[0];\n      dy = point$$1[1] - point0[1];\n\n      switch (mode) {\n        case MODE_SPACE:\n        case MODE_DRAG: {\n          if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n          else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n          if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n          else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));\n          if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));\n          break;\n        }\n      }\n\n      if (e1 < w1) {\n        signX *= -1;\n        t = w0, w0 = e0, e0 = t;\n        t = w1, w1 = e1, e1 = t;\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n      }\n\n      if (s1 < n1) {\n        signY *= -1;\n        t = n0, n0 = s0, s0 = t;\n        t = n1, n1 = s1, s1 = t;\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n      }\n\n      if (state.selection) selection$$1 = state.selection; // May be set by brush.move!\n      if (lockX) w1 = selection$$1[0][0], e1 = selection$$1[1][0];\n      if (lockY) n1 = selection$$1[0][1], s1 = selection$$1[1][1];\n\n      if (selection$$1[0][0] !== w1\n          || selection$$1[0][1] !== n1\n          || selection$$1[1][0] !== e1\n          || selection$$1[1][1] !== s1) {\n        state.selection = [[w1, n1], [e1, s1]];\n        redraw.call(that);\n        emit.brush();\n      }\n    }\n\n    function ended() {\n      nopropagation$1();\n      if (exports.event.touches) {\n        if (exports.event.touches.length) return;\n        if (touchending) clearTimeout(touchending);\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n        group.on(\"touchmove.brush touchend.brush touchcancel.brush\", null);\n      } else {\n        yesdrag(exports.event.view, moving);\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n      }\n      group.attr(\"pointer-events\", \"all\");\n      overlay.attr(\"cursor\", cursors.overlay);\n      if (state.selection) selection$$1 = state.selection; // May be set by brush.move (on start)!\n      if (empty$1(selection$$1)) state.selection = null, redraw.call(that);\n      emit.end();\n    }\n\n    function keydowned() {\n      switch (exports.event.keyCode) {\n        case 16: { // SHIFT\n          shifting = signX && signY;\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_HANDLE) {\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n            mode = MODE_CENTER;\n            move();\n          }\n          break;\n        }\n        case 32: { // SPACE; takes priority over ALT\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n            mode = MODE_SPACE;\n            overlay.attr(\"cursor\", cursors.selection);\n            move();\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent$1();\n    }\n\n    function keyupped() {\n      switch (exports.event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move();\n          }\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n            mode = MODE_HANDLE;\n            move();\n          }\n          break;\n        }\n        case 32: { // SPACE\n          if (mode === MODE_SPACE) {\n            if (exports.event.altKey) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n            } else {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n            }\n            overlay.attr(\"cursor\", cursors[type]);\n            move();\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent$1();\n    }\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = extent.apply(this, arguments);\n    state.dim = dim;\n    return state;\n  }\n\n  brush.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant$4([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$4(!!_), brush) : filter;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? brush : value;\n  };\n\n  return brush;\n}\n\nvar cos = Math.cos;\nvar sin = Math.sin;\nvar pi$1 = Math.PI;\nvar halfPi$1 = pi$1 / 2;\nvar tau$1 = pi$1 * 2;\nvar max$1 = Math.max;\n\nfunction compareValue(compare) {\n  return function(a, b) {\n    return compare(\n      a.source.value + a.target.value,\n      b.source.value + b.target.value\n    );\n  };\n}\n\nfunction chord() {\n  var padAngle = 0,\n      sortGroups = null,\n      sortSubgroups = null,\n      sortChords = null;\n\n  function chord(matrix) {\n    var n = matrix.length,\n        groupSums = [],\n        groupIndex = sequence(n),\n        subgroupIndex = [],\n        chords = [],\n        groups = chords.groups = new Array(n),\n        subgroups = new Array(n * n),\n        k,\n        x,\n        x0,\n        dx,\n        i,\n        j;\n\n    // Compute the sum.\n    k = 0, i = -1; while (++i < n) {\n      x = 0, j = -1; while (++j < n) {\n        x += matrix[i][j];\n      }\n      groupSums.push(x);\n      subgroupIndex.push(sequence(n));\n      k += x;\n    }\n\n    // Sort groups…\n    if (sortGroups) groupIndex.sort(function(a, b) {\n      return sortGroups(groupSums[a], groupSums[b]);\n    });\n\n    // Sort subgroups…\n    if (sortSubgroups) subgroupIndex.forEach(function(d, i) {\n      d.sort(function(a, b) {\n        return sortSubgroups(matrix[i][a], matrix[i][b]);\n      });\n    });\n\n    // Convert the sum to scaling factor for [0, 2pi].\n    // TODO Allow start and end angle to be specified?\n    // TODO Allow padding to be specified as percentage?\n    k = max$1(0, tau$1 - padAngle * n) / k;\n    dx = k ? padAngle : tau$1 / n;\n\n    // Compute the start and end angle for each group and subgroup.\n    // Note: Opera has a bug reordering object literal properties!\n    x = 0, i = -1; while (++i < n) {\n      x0 = x, j = -1; while (++j < n) {\n        var di = groupIndex[i],\n            dj = subgroupIndex[di][j],\n            v = matrix[di][dj],\n            a0 = x,\n            a1 = x += v * k;\n        subgroups[dj * n + di] = {\n          index: di,\n          subindex: dj,\n          startAngle: a0,\n          endAngle: a1,\n          value: v\n        };\n      }\n      groups[di] = {\n        index: di,\n        startAngle: x0,\n        endAngle: x,\n        value: groupSums[di]\n      };\n      x += dx;\n    }\n\n    // Generate chords for each (non-empty) subgroup-subgroup link.\n    i = -1; while (++i < n) {\n      j = i - 1; while (++j < n) {\n        var source = subgroups[j * n + i],\n            target = subgroups[i * n + j];\n        if (source.value || target.value) {\n          chords.push(source.value < target.value\n              ? {source: target, target: source}\n              : {source: source, target: target});\n        }\n      }\n    }\n\n    return sortChords ? chords.sort(sortChords) : chords;\n  }\n\n  chord.padAngle = function(_) {\n    return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle;\n  };\n\n  chord.sortGroups = function(_) {\n    return arguments.length ? (sortGroups = _, chord) : sortGroups;\n  };\n\n  chord.sortSubgroups = function(_) {\n    return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n  };\n\n  chord.sortChords = function(_) {\n    return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n  };\n\n  return chord;\n}\n\nvar slice$2 = Array.prototype.slice;\n\nfunction constant$5(x) {\n  return function() {\n    return x;\n  };\n}\n\nvar pi$2 = Math.PI,\n    tau$2 = 2 * pi$2,\n    epsilon$1 = 1e-6,\n    tauEpsilon = tau$2 - epsilon$1;\n\nfunction Path() {\n  this._x0 = this._y0 = // start of current subpath\n  this._x1 = this._y1 = null; // end of current subpath\n  this._ = \"\";\n}\n\nfunction path() {\n  return new Path;\n}\n\nPath.prototype = path.prototype = {\n  constructor: Path,\n  moveTo: function(x, y) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n  },\n  closePath: function() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  },\n  lineTo: function(x, y) {\n    this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  quadraticCurveTo: function(x1, y1, x, y) {\n    this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n    this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  arcTo: function(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n    var x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon$1));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$1) || !r) {\n      this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      var x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi$2 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon$1) {\n        this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n      }\n\n      this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n    }\n  },\n  arc: function(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r;\n    var dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._ += \"M\" + x0 + \",\" + y0;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon$1 || Math.abs(this._y1 - y0) > epsilon$1) {\n      this._ += \"L\" + x0 + \",\" + y0;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau$2 + tau$2;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon$1) {\n      this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi$2)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n    }\n  },\n  rect: function(x, y, w, h) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nfunction defaultSource(d) {\n  return d.source;\n}\n\nfunction defaultTarget(d) {\n  return d.target;\n}\n\nfunction defaultRadius(d) {\n  return d.radius;\n}\n\nfunction defaultStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction defaultEndAngle(d) {\n  return d.endAngle;\n}\n\nfunction ribbon() {\n  var source = defaultSource,\n      target = defaultTarget,\n      radius = defaultRadius,\n      startAngle = defaultStartAngle,\n      endAngle = defaultEndAngle,\n      context = null;\n\n  function ribbon() {\n    var buffer,\n        argv = slice$2.call(arguments),\n        s = source.apply(this, argv),\n        t = target.apply(this, argv),\n        sr = +radius.apply(this, (argv[0] = s, argv)),\n        sa0 = startAngle.apply(this, argv) - halfPi$1,\n        sa1 = endAngle.apply(this, argv) - halfPi$1,\n        sx0 = sr * cos(sa0),\n        sy0 = sr * sin(sa0),\n        tr = +radius.apply(this, (argv[0] = t, argv)),\n        ta0 = startAngle.apply(this, argv) - halfPi$1,\n        ta1 = endAngle.apply(this, argv) - halfPi$1;\n\n    if (!context) context = buffer = path();\n\n    context.moveTo(sx0, sy0);\n    context.arc(0, 0, sr, sa0, sa1);\n    if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?\n      context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n      context.arc(0, 0, tr, ta0, ta1);\n    }\n    context.quadraticCurveTo(0, 0, sx0, sy0);\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  ribbon.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$5(+_), ribbon) : radius;\n  };\n\n  ribbon.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$5(+_), ribbon) : startAngle;\n  };\n\n  ribbon.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$5(+_), ribbon) : endAngle;\n  };\n\n  ribbon.source = function(_) {\n    return arguments.length ? (source = _, ribbon) : source;\n  };\n\n  ribbon.target = function(_) {\n    return arguments.length ? (target = _, ribbon) : target;\n  };\n\n  ribbon.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n  };\n\n  return ribbon;\n}\n\nvar prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map$1.prototype = {\n  constructor: Map,\n  has: function(key) {\n    return (prefix + key) in this;\n  },\n  get: function(key) {\n    return this[prefix + key];\n  },\n  set: function(key, value) {\n    this[prefix + key] = value;\n    return this;\n  },\n  remove: function(key) {\n    var property = prefix + key;\n    return property in this && delete this[property];\n  },\n  clear: function() {\n    for (var property in this) if (property[0] === prefix) delete this[property];\n  },\n  keys: function() {\n    var keys = [];\n    for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n    return keys;\n  },\n  values: function() {\n    var values = [];\n    for (var property in this) if (property[0] === prefix) values.push(this[property]);\n    return values;\n  },\n  entries: function() {\n    var entries = [];\n    for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n    return entries;\n  },\n  size: function() {\n    var size = 0;\n    for (var property in this) if (property[0] === prefix) ++size;\n    return size;\n  },\n  empty: function() {\n    for (var property in this) if (property[0] === prefix) return false;\n    return true;\n  },\n  each: function(f) {\n    for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n  }\n};\n\nfunction map$1(object, f) {\n  var map = new Map;\n\n  // Copy constructor.\n  if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n  // Index array by numeric index or specified key function.\n  else if (Array.isArray(object)) {\n    var i = -1,\n        n = object.length,\n        o;\n\n    if (f == null) while (++i < n) map.set(i, object[i]);\n    else while (++i < n) map.set(f(o = object[i], i, object), o);\n  }\n\n  // Convert object to map.\n  else if (object) for (var key in object) map.set(key, object[key]);\n\n  return map;\n}\n\nfunction nest() {\n  var keys = [],\n      sortKeys = [],\n      sortValues,\n      rollup,\n      nest;\n\n  function apply(array, depth, createResult, setResult) {\n    if (depth >= keys.length) {\n      if (sortValues != null) array.sort(sortValues);\n      return rollup != null ? rollup(array) : array;\n    }\n\n    var i = -1,\n        n = array.length,\n        key = keys[depth++],\n        keyValue,\n        value,\n        valuesByKey = map$1(),\n        values,\n        result = createResult();\n\n    while (++i < n) {\n      if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n        values.push(value);\n      } else {\n        valuesByKey.set(keyValue, [value]);\n      }\n    }\n\n    valuesByKey.each(function(values, key) {\n      setResult(result, key, apply(values, depth, createResult, setResult));\n    });\n\n    return result;\n  }\n\n  function entries(map, depth) {\n    if (++depth > keys.length) return map;\n    var array, sortKey = sortKeys[depth - 1];\n    if (rollup != null && depth >= keys.length) array = map.entries();\n    else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n    return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n  }\n\n  return nest = {\n    object: function(array) { return apply(array, 0, createObject, setObject); },\n    map: function(array) { return apply(array, 0, createMap, setMap); },\n    entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n    key: function(d) { keys.push(d); return nest; },\n    sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n    sortValues: function(order) { sortValues = order; return nest; },\n    rollup: function(f) { rollup = f; return nest; }\n  };\n}\n\nfunction createObject() {\n  return {};\n}\n\nfunction setObject(object, key, value) {\n  object[key] = value;\n}\n\nfunction createMap() {\n  return map$1();\n}\n\nfunction setMap(map, key, value) {\n  map.set(key, value);\n}\n\nfunction Set() {}\n\nvar proto = map$1.prototype;\n\nSet.prototype = set$2.prototype = {\n  constructor: Set,\n  has: proto.has,\n  add: function(value) {\n    value += \"\";\n    this[prefix + value] = value;\n    return this;\n  },\n  remove: proto.remove,\n  clear: proto.clear,\n  values: proto.keys,\n  size: proto.size,\n  empty: proto.empty,\n  each: proto.each\n};\n\nfunction set$2(object, f) {\n  var set = new Set;\n\n  // Copy constructor.\n  if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n  // Otherwise, assume it’s an array.\n  else if (object) {\n    var i = -1, n = object.length;\n    if (f == null) while (++i < n) set.add(object[i]);\n    else while (++i < n) set.add(f(object[i], i, object));\n  }\n\n  return set;\n}\n\nfunction keys(map) {\n  var keys = [];\n  for (var key in map) keys.push(key);\n  return keys;\n}\n\nfunction values(map) {\n  var values = [];\n  for (var key in map) values.push(map[key]);\n  return values;\n}\n\nfunction entries(map) {\n  var entries = [];\n  for (var key in map) entries.push({key: key, value: map[key]});\n  return entries;\n}\n\nvar array$2 = Array.prototype;\n\nvar slice$3 = array$2.slice;\n\nfunction ascending$2(a, b) {\n  return a - b;\n}\n\nfunction area(ring) {\n  var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n  while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n  return area;\n}\n\nfunction constant$6(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction contains(ring, hole) {\n  var i = -1, n = hole.length, c;\n  while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n  return 0;\n}\n\nfunction ringContains(ring, point) {\n  var x = point[0], y = point[1], contains = -1;\n  for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n    var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n    if (segmentContains(pi, pj, point)) return 0;\n    if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n  }\n  return contains;\n}\n\nfunction segmentContains(a, b, c) {\n  var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n  return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n  return p <= q && q <= r || r <= q && q <= p;\n}\n\nfunction noop$1() {}\n\nvar cases = [\n  [],\n  [[[1.0, 1.5], [0.5, 1.0]]],\n  [[[1.5, 1.0], [1.0, 1.5]]],\n  [[[1.5, 1.0], [0.5, 1.0]]],\n  [[[1.0, 0.5], [1.5, 1.0]]],\n  [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n  [[[1.0, 0.5], [1.0, 1.5]]],\n  [[[1.0, 0.5], [0.5, 1.0]]],\n  [[[0.5, 1.0], [1.0, 0.5]]],\n  [[[1.0, 1.5], [1.0, 0.5]]],\n  [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n  [[[1.5, 1.0], [1.0, 0.5]]],\n  [[[0.5, 1.0], [1.5, 1.0]]],\n  [[[1.0, 1.5], [1.5, 1.0]]],\n  [[[0.5, 1.0], [1.0, 1.5]]],\n  []\n];\n\nfunction contours() {\n  var dx = 1,\n      dy = 1,\n      threshold$$1 = thresholdSturges,\n      smooth = smoothLinear;\n\n  function contours(values) {\n    var tz = threshold$$1(values);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      var domain = extent(values), start = domain[0], stop = domain[1];\n      tz = tickStep(start, stop, tz);\n      tz = sequence(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);\n    } else {\n      tz = tz.slice().sort(ascending$2);\n    }\n\n    return tz.map(function(value) {\n      return contour(values, value);\n    });\n  }\n\n  // Accumulate, smooth contour rings, assign holes to exterior rings.\n  // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n  function contour(values, value) {\n    var polygons = [],\n        holes = [];\n\n    isorings(values, value, function(ring) {\n      smooth(ring, values, value);\n      if (area(ring) > 0) polygons.push([ring]);\n      else holes.push(ring);\n    });\n\n    holes.forEach(function(hole) {\n      for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n        if (contains((polygon = polygons[i])[0], hole) !== -1) {\n          polygon.push(hole);\n          return;\n        }\n      }\n    });\n\n    return {\n      type: \"MultiPolygon\",\n      value: value,\n      coordinates: polygons\n    };\n  }\n\n  // Marching squares with isolines stitched into rings.\n  // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n  function isorings(values, value, callback) {\n    var fragmentByStart = new Array,\n        fragmentByEnd = new Array,\n        x, y, t0, t1, t2, t3;\n\n    // Special case for the first row (y = -1, t2 = t3 = 0).\n    x = y = -1;\n    t1 = values[0] >= value;\n    cases[t1 << 1].forEach(stitch);\n    while (++x < dx - 1) {\n      t0 = t1, t1 = values[x + 1] >= value;\n      cases[t0 | t1 << 1].forEach(stitch);\n    }\n    cases[t1 << 0].forEach(stitch);\n\n    // General case for the intermediate rows.\n    while (++y < dy - 1) {\n      x = -1;\n      t1 = values[y * dx + dx] >= value;\n      t2 = values[y * dx] >= value;\n      cases[t1 << 1 | t2 << 2].forEach(stitch);\n      while (++x < dx - 1) {\n        t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n        t3 = t2, t2 = values[y * dx + x + 1] >= value;\n        cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n      }\n      cases[t1 | t2 << 3].forEach(stitch);\n    }\n\n    // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n    x = -1;\n    t2 = values[y * dx] >= value;\n    cases[t2 << 2].forEach(stitch);\n    while (++x < dx - 1) {\n      t3 = t2, t2 = values[y * dx + x + 1] >= value;\n      cases[t2 << 2 | t3 << 3].forEach(stitch);\n    }\n    cases[t2 << 3].forEach(stitch);\n\n    function stitch(line) {\n      var start = [line[0][0] + x, line[0][1] + y],\n          end = [line[1][0] + x, line[1][1] + y],\n          startIndex = index(start),\n          endIndex = index(end),\n          f, g;\n      if (f = fragmentByEnd[startIndex]) {\n        if (g = fragmentByStart[endIndex]) {\n          delete fragmentByEnd[f.end];\n          delete fragmentByStart[g.start];\n          if (f === g) {\n            f.ring.push(end);\n            callback(f.ring);\n          } else {\n            fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n          }\n        } else {\n          delete fragmentByEnd[f.end];\n          f.ring.push(end);\n          fragmentByEnd[f.end = endIndex] = f;\n        }\n      } else if (f = fragmentByStart[endIndex]) {\n        if (g = fragmentByEnd[startIndex]) {\n          delete fragmentByStart[f.start];\n          delete fragmentByEnd[g.end];\n          if (f === g) {\n            f.ring.push(end);\n            callback(f.ring);\n          } else {\n            fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n          }\n        } else {\n          delete fragmentByStart[f.start];\n          f.ring.unshift(start);\n          fragmentByStart[f.start = startIndex] = f;\n        }\n      } else {\n        fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n      }\n    }\n  }\n\n  function index(point) {\n    return point[0] * 2 + point[1] * (dx + 1) * 4;\n  }\n\n  function smoothLinear(ring, values, value) {\n    ring.forEach(function(point) {\n      var x = point[0],\n          y = point[1],\n          xt = x | 0,\n          yt = y | 0,\n          v0,\n          v1 = values[yt * dx + xt];\n      if (x > 0 && x < dx && xt === x) {\n        v0 = values[yt * dx + xt - 1];\n        point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n      }\n      if (y > 0 && y < dy && yt === y) {\n        v0 = values[(yt - 1) * dx + xt];\n        point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n      }\n    });\n  }\n\n  contours.contour = contour;\n\n  contours.size = function(_) {\n    if (!arguments.length) return [dx, dy];\n    var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n    if (!(_0 > 0) || !(_1 > 0)) throw new Error(\"invalid size\");\n    return dx = _0, dy = _1, contours;\n  };\n\n  contours.thresholds = function(_) {\n    return arguments.length ? (threshold$$1 = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant$6(slice$3.call(_)) : constant$6(_), contours) : threshold$$1;\n  };\n\n  contours.smooth = function(_) {\n    return arguments.length ? (smooth = _ ? smoothLinear : noop$1, contours) : smooth === smoothLinear;\n  };\n\n  return contours;\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nfunction blurX(source, target, r) {\n  var n = source.width,\n      m = source.height,\n      w = (r << 1) + 1;\n  for (var j = 0; j < m; ++j) {\n    for (var i = 0, sr = 0; i < n + r; ++i) {\n      if (i < n) {\n        sr += source.data[i + j * n];\n      }\n      if (i >= r) {\n        if (i >= w) {\n          sr -= source.data[i - w + j * n];\n        }\n        target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n      }\n    }\n  }\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nfunction blurY(source, target, r) {\n  var n = source.width,\n      m = source.height,\n      w = (r << 1) + 1;\n  for (var i = 0; i < n; ++i) {\n    for (var j = 0, sr = 0; j < m + r; ++j) {\n      if (j < m) {\n        sr += source.data[i + j * n];\n      }\n      if (j >= r) {\n        if (j >= w) {\n          sr -= source.data[i + (j - w) * n];\n        }\n        target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n      }\n    }\n  }\n}\n\nfunction defaultX(d) {\n  return d[0];\n}\n\nfunction defaultY(d) {\n  return d[1];\n}\n\nfunction defaultWeight() {\n  return 1;\n}\n\nfunction density() {\n  var x = defaultX,\n      y = defaultY,\n      weight = defaultWeight,\n      dx = 960,\n      dy = 500,\n      r = 20, // blur radius\n      k = 2, // log2(grid cell size)\n      o = r * 3, // grid offset, to pad for blur\n      n = (dx + o * 2) >> k, // grid width\n      m = (dy + o * 2) >> k, // grid height\n      threshold$$1 = constant$6(20);\n\n  function density(data) {\n    var values0 = new Float32Array(n * m),\n        values1 = new Float32Array(n * m);\n\n    data.forEach(function(d, i, data) {\n      var xi = (+x(d, i, data) + o) >> k,\n          yi = (+y(d, i, data) + o) >> k,\n          wi = +weight(d, i, data);\n      if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n        values0[xi + yi * n] += wi;\n      }\n    });\n\n    // TODO Optimize.\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n    var tz = threshold$$1(values0);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      var stop = max(values0);\n      tz = tickStep(0, stop, tz);\n      tz = sequence(0, Math.floor(stop / tz) * tz, tz);\n      tz.shift();\n    }\n\n    return contours()\n        .thresholds(tz)\n        .size([n, m])\n      (values0)\n        .map(transform);\n  }\n\n  function transform(geometry) {\n    geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n    geometry.coordinates.forEach(transformPolygon);\n    return geometry;\n  }\n\n  function transformPolygon(coordinates) {\n    coordinates.forEach(transformRing);\n  }\n\n  function transformRing(coordinates) {\n    coordinates.forEach(transformPoint);\n  }\n\n  // TODO Optimize.\n  function transformPoint(coordinates) {\n    coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n    coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n  }\n\n  function resize() {\n    o = r * 3;\n    n = (dx + o * 2) >> k;\n    m = (dy + o * 2) >> k;\n    return density;\n  }\n\n  density.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant$6(+_), density) : x;\n  };\n\n  density.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant$6(+_), density) : y;\n  };\n\n  density.weight = function(_) {\n    return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant$6(+_), density) : weight;\n  };\n\n  density.size = function(_) {\n    if (!arguments.length) return [dx, dy];\n    var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n    if (!(_0 >= 0) && !(_0 >= 0)) throw new Error(\"invalid size\");\n    return dx = _0, dy = _1, resize();\n  };\n\n  density.cellSize = function(_) {\n    if (!arguments.length) return 1 << k;\n    if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n    return k = Math.floor(Math.log(_) / Math.LN2), resize();\n  };\n\n  density.thresholds = function(_) {\n    return arguments.length ? (threshold$$1 = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant$6(slice$3.call(_)) : constant$6(_), density) : threshold$$1;\n  };\n\n  density.bandwidth = function(_) {\n    if (!arguments.length) return Math.sqrt(r * (r + 1));\n    if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n    return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n  };\n\n  return density;\n}\n\nvar EOL = {},\n    EOF = {},\n    QUOTE = 34,\n    NEWLINE = 10,\n    RETURN = 13;\n\nfunction objectConverter(columns) {\n  return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n    return JSON.stringify(name) + \": d[\" + i + \"]\";\n  }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n  var object = objectConverter(columns);\n  return function(row, i) {\n    return f(object(row), i, columns);\n  };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n  var columnSet = Object.create(null),\n      columns = [];\n\n  rows.forEach(function(row) {\n    for (var column in row) {\n      if (!(column in columnSet)) {\n        columns.push(columnSet[column] = column);\n      }\n    }\n  });\n\n  return columns;\n}\n\nfunction pad(value, width) {\n  var s = value + \"\", length = s.length;\n  return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n  return year < 0 ? \"-\" + pad(-year, 6)\n    : year > 9999 ? \"+\" + pad(year, 6)\n    : pad(year, 4);\n}\n\nfunction formatDate(date) {\n  var hours = date.getUTCHours(),\n      minutes = date.getUTCMinutes(),\n      seconds = date.getUTCSeconds(),\n      milliseconds = date.getUTCMilliseconds();\n  return isNaN(date) ? \"Invalid Date\"\n      : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n      + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n      : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n      : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n      : \"\");\n}\n\nfunction dsvFormat(delimiter) {\n  var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n      DELIMITER = delimiter.charCodeAt(0);\n\n  function parse(text, f) {\n    var convert, columns, rows = parseRows(text, function(row, i) {\n      if (convert) return convert(row, i - 1);\n      columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n    });\n    rows.columns = columns || [];\n    return rows;\n  }\n\n  function parseRows(text, f) {\n    var rows = [], // output rows\n        N = text.length,\n        I = 0, // current character index\n        n = 0, // current line number\n        t, // current token\n        eof = N <= 0, // current token followed by EOF?\n        eol = false; // current token followed by EOL?\n\n    // Strip the trailing newline.\n    if (text.charCodeAt(N - 1) === NEWLINE) --N;\n    if (text.charCodeAt(N - 1) === RETURN) --N;\n\n    function token() {\n      if (eof) return EOF;\n      if (eol) return eol = false, EOL;\n\n      // Unescape quotes.\n      var i, j = I, c;\n      if (text.charCodeAt(j) === QUOTE) {\n        while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n        if ((i = I) >= N) eof = true;\n        else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n      }\n\n      // Find next delimiter or newline.\n      while (I < N) {\n        if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        else if (c !== DELIMITER) continue;\n        return text.slice(j, i);\n      }\n\n      // Return last token before EOF.\n      return eof = true, text.slice(j, N);\n    }\n\n    while ((t = token()) !== EOF) {\n      var row = [];\n      while (t !== EOL && t !== EOF) row.push(t), t = token();\n      if (f && (row = f(row, n++)) == null) continue;\n      rows.push(row);\n    }\n\n    return rows;\n  }\n\n  function preformatBody(rows, columns) {\n    return rows.map(function(row) {\n      return columns.map(function(column) {\n        return formatValue(row[column]);\n      }).join(delimiter);\n    });\n  }\n\n  function format(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n  }\n\n  function formatBody(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return preformatBody(rows, columns).join(\"\\n\");\n  }\n\n  function formatRows(rows) {\n    return rows.map(formatRow).join(\"\\n\");\n  }\n\n  function formatRow(row) {\n    return row.map(formatValue).join(delimiter);\n  }\n\n  function formatValue(value) {\n    return value == null ? \"\"\n        : value instanceof Date ? formatDate(value)\n        : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n        : value;\n  }\n\n  return {\n    parse: parse,\n    parseRows: parseRows,\n    format: format,\n    formatBody: formatBody,\n    formatRows: formatRows\n  };\n}\n\nvar csv = dsvFormat(\",\");\n\nvar csvParse = csv.parse;\nvar csvParseRows = csv.parseRows;\nvar csvFormat = csv.format;\nvar csvFormatBody = csv.formatBody;\nvar csvFormatRows = csv.formatRows;\n\nvar tsv = dsvFormat(\"\\t\");\n\nvar tsvParse = tsv.parse;\nvar tsvParseRows = tsv.parseRows;\nvar tsvFormat = tsv.format;\nvar tsvFormatBody = tsv.formatBody;\nvar tsvFormatRows = tsv.formatRows;\n\nfunction autoType(object) {\n  for (var key in object) {\n    var value = object[key].trim(), number;\n    if (!value) value = null;\n    else if (value === \"true\") value = true;\n    else if (value === \"false\") value = false;\n    else if (value === \"NaN\") value = NaN;\n    else if (!isNaN(number = +value)) value = number;\n    else if (/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/.test(value)) value = new Date(value);\n    else continue;\n    object[key] = value;\n  }\n  return object;\n}\n\nfunction responseBlob(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.blob();\n}\n\nfunction blob(input, init) {\n  return fetch(input, init).then(responseBlob);\n}\n\nfunction responseArrayBuffer(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.arrayBuffer();\n}\n\nfunction buffer(input, init) {\n  return fetch(input, init).then(responseArrayBuffer);\n}\n\nfunction responseText(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.text();\n}\n\nfunction text(input, init) {\n  return fetch(input, init).then(responseText);\n}\n\nfunction dsvParse(parse) {\n  return function(input, init, row) {\n    if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n    return text(input, init).then(function(response) {\n      return parse(response, row);\n    });\n  };\n}\n\nfunction dsv(delimiter, input, init, row) {\n  if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n  var format = dsvFormat(delimiter);\n  return text(input, init).then(function(response) {\n    return format.parse(response, row);\n  });\n}\n\nvar csv$1 = dsvParse(csvParse);\nvar tsv$1 = dsvParse(tsvParse);\n\nfunction image(input, init) {\n  return new Promise(function(resolve, reject) {\n    var image = new Image;\n    for (var key in init) image[key] = init[key];\n    image.onerror = reject;\n    image.onload = function() { resolve(image); };\n    image.src = input;\n  });\n}\n\nfunction responseJson(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.json();\n}\n\nfunction json(input, init) {\n  return fetch(input, init).then(responseJson);\n}\n\nfunction parser(type) {\n  return function(input, init)  {\n    return text(input, init).then(function(text$$1) {\n      return (new DOMParser).parseFromString(text$$1, type);\n    });\n  };\n}\n\nvar xml = parser(\"application/xml\");\n\nvar html = parser(\"text/html\");\n\nvar svg = parser(\"image/svg+xml\");\n\nfunction center$1(x, y) {\n  var nodes;\n\n  if (x == null) x = 0;\n  if (y == null) y = 0;\n\n  function force() {\n    var i,\n        n = nodes.length,\n        node,\n        sx = 0,\n        sy = 0;\n\n    for (i = 0; i < n; ++i) {\n      node = nodes[i], sx += node.x, sy += node.y;\n    }\n\n    for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {\n      node = nodes[i], node.x -= sx, node.y -= sy;\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = +_, force) : x;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = +_, force) : y;\n  };\n\n  return force;\n}\n\nfunction constant$7(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction jiggle() {\n  return (Math.random() - 0.5) * 1e-6;\n}\n\nfunction tree_add(d) {\n  var x = +this._x.call(null, d),\n      y = +this._y.call(null, d);\n  return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n  var parent,\n      node = tree._root,\n      leaf = {data: d},\n      x0 = tree._x0,\n      y0 = tree._y0,\n      x1 = tree._x1,\n      y1 = tree._y1,\n      xm,\n      ym,\n      xp,\n      yp,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return tree._root = leaf, tree;\n\n  // Find the existing leaf for the new point, or add it.\n  while (node.length) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n  }\n\n  // Is the new point is exactly coincident with the existing point?\n  xp = +tree._x.call(null, node.data);\n  yp = +tree._y.call(null, node.data);\n  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n  // Otherwise, split the leaf node until the old and new point are separated.\n  do {\n    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n  return parent[j] = node, parent[i] = leaf, tree;\n}\n\nfunction addAll(data) {\n  var d, i, n = data.length,\n      x,\n      y,\n      xz = new Array(n),\n      yz = new Array(n),\n      x0 = Infinity,\n      y0 = Infinity,\n      x1 = -Infinity,\n      y1 = -Infinity;\n\n  // Compute the points and their extent.\n  for (i = 0; i < n; ++i) {\n    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n    xz[i] = x;\n    yz[i] = y;\n    if (x < x0) x0 = x;\n    if (x > x1) x1 = x;\n    if (y < y0) y0 = y;\n    if (y > y1) y1 = y;\n  }\n\n  // If there were no (valid) points, abort.\n  if (x0 > x1 || y0 > y1) return this;\n\n  // Expand the tree to cover the new points.\n  this.cover(x0, y0).cover(x1, y1);\n\n  // Add the new points.\n  for (i = 0; i < n; ++i) {\n    add(this, xz[i], yz[i], data[i]);\n  }\n\n  return this;\n}\n\nfunction tree_cover(x, y) {\n  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n  var x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1;\n\n  // If the quadtree has no extent, initialize them.\n  // Integer extent are necessary so that if we later double the extent,\n  // the existing quadrant boundaries don’t change due to floating point error!\n  if (isNaN(x0)) {\n    x1 = (x0 = Math.floor(x)) + 1;\n    y1 = (y0 = Math.floor(y)) + 1;\n  }\n\n  // Otherwise, double repeatedly to cover.\n  else {\n    var z = x1 - x0,\n        node = this._root,\n        parent,\n        i;\n\n    while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n      i = (y < y0) << 1 | (x < x0);\n      parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n      switch (i) {\n        case 0: x1 = x0 + z, y1 = y0 + z; break;\n        case 1: x0 = x1 - z, y1 = y0 + z; break;\n        case 2: x1 = x0 + z, y0 = y1 - z; break;\n        case 3: x0 = x1 - z, y0 = y1 - z; break;\n      }\n    }\n\n    if (this._root && this._root.length) this._root = node;\n  }\n\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  return this;\n}\n\nfunction tree_data() {\n  var data = [];\n  this.visit(function(node) {\n    if (!node.length) do data.push(node.data); while (node = node.next)\n  });\n  return data;\n}\n\nfunction tree_extent(_) {\n  return arguments.length\n      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n\nfunction Quad(node, x0, y0, x1, y1) {\n  this.node = node;\n  this.x0 = x0;\n  this.y0 = y0;\n  this.x1 = x1;\n  this.y1 = y1;\n}\n\nfunction tree_find(x, y, radius) {\n  var data,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1,\n      y1,\n      x2,\n      y2,\n      x3 = this._x1,\n      y3 = this._y1,\n      quads = [],\n      node = this._root,\n      q,\n      i;\n\n  if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n  if (radius == null) radius = Infinity;\n  else {\n    x0 = x - radius, y0 = y - radius;\n    x3 = x + radius, y3 = y + radius;\n    radius *= radius;\n  }\n\n  while (q = quads.pop()) {\n\n    // Stop searching if this quadrant can’t contain a closer node.\n    if (!(node = q.node)\n        || (x1 = q.x0) > x3\n        || (y1 = q.y0) > y3\n        || (x2 = q.x1) < x0\n        || (y2 = q.y1) < y0) continue;\n\n    // Bisect the current quadrant.\n    if (node.length) {\n      var xm = (x1 + x2) / 2,\n          ym = (y1 + y2) / 2;\n\n      quads.push(\n        new Quad(node[3], xm, ym, x2, y2),\n        new Quad(node[2], x1, ym, xm, y2),\n        new Quad(node[1], xm, y1, x2, ym),\n        new Quad(node[0], x1, y1, xm, ym)\n      );\n\n      // Visit the closest quadrant first.\n      if (i = (y >= ym) << 1 | (x >= xm)) {\n        q = quads[quads.length - 1];\n        quads[quads.length - 1] = quads[quads.length - 1 - i];\n        quads[quads.length - 1 - i] = q;\n      }\n    }\n\n    // Visit this point. (Visiting coincident points isn’t necessary!)\n    else {\n      var dx = x - +this._x.call(null, node.data),\n          dy = y - +this._y.call(null, node.data),\n          d2 = dx * dx + dy * dy;\n      if (d2 < radius) {\n        var d = Math.sqrt(radius = d2);\n        x0 = x - d, y0 = y - d;\n        x3 = x + d, y3 = y + d;\n        data = node.data;\n      }\n    }\n  }\n\n  return data;\n}\n\nfunction tree_remove(d) {\n  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n  var parent,\n      node = this._root,\n      retainer,\n      previous,\n      next,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1,\n      x,\n      y,\n      xm,\n      ym,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return this;\n\n  // Find the leaf node for the point.\n  // While descending, also retain the deepest parent with a non-removed sibling.\n  if (node.length) while (true) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n    if (!node.length) break;\n    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n  }\n\n  // Find the point to remove.\n  while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n  if (next = node.next) delete node.next;\n\n  // If there are multiple coincident points, remove just the point.\n  if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n  // If this is the root point, remove it.\n  if (!parent) return this._root = next, this;\n\n  // Remove this leaf.\n  next ? parent[i] = next : delete parent[i];\n\n  // If the parent now contains exactly one leaf, collapse superfluous parents.\n  if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n      && node === (parent[3] || parent[2] || parent[1] || parent[0])\n      && !node.length) {\n    if (retainer) retainer[j] = node;\n    else this._root = node;\n  }\n\n  return this;\n}\n\nfunction removeAll(data) {\n  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n  return this;\n}\n\nfunction tree_root() {\n  return this._root;\n}\n\nfunction tree_size() {\n  var size = 0;\n  this.visit(function(node) {\n    if (!node.length) do ++size; while (node = node.next)\n  });\n  return size;\n}\n\nfunction tree_visit(callback) {\n  var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n    }\n  }\n  return this;\n}\n\nfunction tree_visitAfter(callback) {\n  var quads = [], next = [], q;\n  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    var node = q.node;\n    if (node.length) {\n      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n    }\n    next.push(q);\n  }\n  while (q = next.pop()) {\n    callback(q.node, q.x0, q.y0, q.x1, q.y1);\n  }\n  return this;\n}\n\nfunction defaultX$1(d) {\n  return d[0];\n}\n\nfunction tree_x(_) {\n  return arguments.length ? (this._x = _, this) : this._x;\n}\n\nfunction defaultY$1(d) {\n  return d[1];\n}\n\nfunction tree_y(_) {\n  return arguments.length ? (this._y = _, this) : this._y;\n}\n\nfunction quadtree(nodes, x, y) {\n  var tree = new Quadtree(x == null ? defaultX$1 : x, y == null ? defaultY$1 : y, NaN, NaN, NaN, NaN);\n  return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n  this._x = x;\n  this._y = y;\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n  var copy = {data: leaf.data}, next = copy;\n  while (leaf = leaf.next) next = next.next = {data: leaf.data};\n  return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n      node = this._root,\n      nodes,\n      child;\n\n  if (!node) return copy;\n\n  if (!node.length) return copy._root = leaf_copy(node), copy;\n\n  nodes = [{source: node, target: copy._root = new Array(4)}];\n  while (node = nodes.pop()) {\n    for (var i = 0; i < 4; ++i) {\n      if (child = node.source[i]) {\n        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n        else node.target[i] = leaf_copy(child);\n      }\n    }\n  }\n\n  return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n\nfunction x(d) {\n  return d.x + d.vx;\n}\n\nfunction y(d) {\n  return d.y + d.vy;\n}\n\nfunction collide(radius) {\n  var nodes,\n      radii,\n      strength = 1,\n      iterations = 1;\n\n  if (typeof radius !== \"function\") radius = constant$7(radius == null ? 1 : +radius);\n\n  function force() {\n    var i, n = nodes.length,\n        tree,\n        node,\n        xi,\n        yi,\n        ri,\n        ri2;\n\n    for (var k = 0; k < iterations; ++k) {\n      tree = quadtree(nodes, x, y).visitAfter(prepare);\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        ri = radii[node.index], ri2 = ri * ri;\n        xi = node.x + node.vx;\n        yi = node.y + node.vy;\n        tree.visit(apply);\n      }\n    }\n\n    function apply(quad, x0, y0, x1, y1) {\n      var data = quad.data, rj = quad.r, r = ri + rj;\n      if (data) {\n        if (data.index > node.index) {\n          var x = xi - data.x - data.vx,\n              y = yi - data.y - data.vy,\n              l = x * x + y * y;\n          if (l < r * r) {\n            if (x === 0) x = jiggle(), l += x * x;\n            if (y === 0) y = jiggle(), l += y * y;\n            l = (r - (l = Math.sqrt(l))) / l * strength;\n            node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n            node.vy += (y *= l) * r;\n            data.vx -= x * (r = 1 - r);\n            data.vy -= y * r;\n          }\n        }\n        return;\n      }\n      return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n    }\n  }\n\n  function prepare(quad) {\n    if (quad.data) return quad.r = radii[quad.data.index];\n    for (var i = quad.r = 0; i < 4; ++i) {\n      if (quad[i] && quad[i].r > quad.r) {\n        quad.r = quad[i].r;\n      }\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length, node;\n    radii = new Array(n);\n    for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.iterations = function(_) {\n    return arguments.length ? (iterations = +_, force) : iterations;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = +_, force) : strength;\n  };\n\n  force.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : radius;\n  };\n\n  return force;\n}\n\nfunction index(d) {\n  return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n  var node = nodeById.get(nodeId);\n  if (!node) throw new Error(\"missing: \" + nodeId);\n  return node;\n}\n\nfunction link(links) {\n  var id = index,\n      strength = defaultStrength,\n      strengths,\n      distance = constant$7(30),\n      distances,\n      nodes,\n      count,\n      bias,\n      iterations = 1;\n\n  if (links == null) links = [];\n\n  function defaultStrength(link) {\n    return 1 / Math.min(count[link.source.index], count[link.target.index]);\n  }\n\n  function force(alpha) {\n    for (var k = 0, n = links.length; k < iterations; ++k) {\n      for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n        link = links[i], source = link.source, target = link.target;\n        x = target.x + target.vx - source.x - source.vx || jiggle();\n        y = target.y + target.vy - source.y - source.vy || jiggle();\n        l = Math.sqrt(x * x + y * y);\n        l = (l - distances[i]) / l * alpha * strengths[i];\n        x *= l, y *= l;\n        target.vx -= x * (b = bias[i]);\n        target.vy -= y * b;\n        source.vx += x * (b = 1 - b);\n        source.vy += y * b;\n      }\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n\n    var i,\n        n = nodes.length,\n        m = links.length,\n        nodeById = map$1(nodes, id),\n        link;\n\n    for (i = 0, count = new Array(n); i < m; ++i) {\n      link = links[i], link.index = i;\n      if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n      if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n      count[link.source.index] = (count[link.source.index] || 0) + 1;\n      count[link.target.index] = (count[link.target.index] || 0) + 1;\n    }\n\n    for (i = 0, bias = new Array(m); i < m; ++i) {\n      link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n    }\n\n    strengths = new Array(m), initializeStrength();\n    distances = new Array(m), initializeDistance();\n  }\n\n  function initializeStrength() {\n    if (!nodes) return;\n\n    for (var i = 0, n = links.length; i < n; ++i) {\n      strengths[i] = +strength(links[i], i, links);\n    }\n  }\n\n  function initializeDistance() {\n    if (!nodes) return;\n\n    for (var i = 0, n = links.length; i < n; ++i) {\n      distances[i] = +distance(links[i], i, links);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.links = function(_) {\n    return arguments.length ? (links = _, initialize(), force) : links;\n  };\n\n  force.id = function(_) {\n    return arguments.length ? (id = _, force) : id;\n  };\n\n  force.iterations = function(_) {\n    return arguments.length ? (iterations = +_, force) : iterations;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$7(+_), initializeStrength(), force) : strength;\n  };\n\n  force.distance = function(_) {\n    return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant$7(+_), initializeDistance(), force) : distance;\n  };\n\n  return force;\n}\n\nfunction x$1(d) {\n  return d.x;\n}\n\nfunction y$1(d) {\n  return d.y;\n}\n\nvar initialRadius = 10,\n    initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nfunction simulation(nodes) {\n  var simulation,\n      alpha = 1,\n      alphaMin = 0.001,\n      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n      alphaTarget = 0,\n      velocityDecay = 0.6,\n      forces = map$1(),\n      stepper = timer(step),\n      event = dispatch(\"tick\", \"end\");\n\n  if (nodes == null) nodes = [];\n\n  function step() {\n    tick();\n    event.call(\"tick\", simulation);\n    if (alpha < alphaMin) {\n      stepper.stop();\n      event.call(\"end\", simulation);\n    }\n  }\n\n  function tick(iterations) {\n    var i, n = nodes.length, node;\n\n    if (iterations === undefined) iterations = 1;\n\n    for (var k = 0; k < iterations; ++k) {\n      alpha += (alphaTarget - alpha) * alphaDecay;\n\n      forces.each(function (force) {\n        force(alpha);\n      });\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        if (node.fx == null) node.x += node.vx *= velocityDecay;\n        else node.x = node.fx, node.vx = 0;\n        if (node.fy == null) node.y += node.vy *= velocityDecay;\n        else node.y = node.fy, node.vy = 0;\n      }\n    }\n\n    return simulation;\n  }\n\n  function initializeNodes() {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.index = i;\n      if (!isNaN(node.fx)) node.x = node.fx;\n      if (!isNaN(node.fy)) node.y = node.fy;\n      if (isNaN(node.x) || isNaN(node.y)) {\n        var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n        node.x = radius * Math.cos(angle);\n        node.y = radius * Math.sin(angle);\n      }\n      if (isNaN(node.vx) || isNaN(node.vy)) {\n        node.vx = node.vy = 0;\n      }\n    }\n  }\n\n  function initializeForce(force) {\n    if (force.initialize) force.initialize(nodes);\n    return force;\n  }\n\n  initializeNodes();\n\n  return simulation = {\n    tick: tick,\n\n    restart: function() {\n      return stepper.restart(step), simulation;\n    },\n\n    stop: function() {\n      return stepper.stop(), simulation;\n    },\n\n    nodes: function(_) {\n      return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;\n    },\n\n    alpha: function(_) {\n      return arguments.length ? (alpha = +_, simulation) : alpha;\n    },\n\n    alphaMin: function(_) {\n      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n    },\n\n    alphaDecay: function(_) {\n      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n    },\n\n    alphaTarget: function(_) {\n      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n    },\n\n    velocityDecay: function(_) {\n      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n    },\n\n    force: function(name, _) {\n      return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n    },\n\n    find: function(x, y, radius) {\n      var i = 0,\n          n = nodes.length,\n          dx,\n          dy,\n          d2,\n          node,\n          closest;\n\n      if (radius == null) radius = Infinity;\n      else radius *= radius;\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        dx = x - node.x;\n        dy = y - node.y;\n        d2 = dx * dx + dy * dy;\n        if (d2 < radius) closest = node, radius = d2;\n      }\n\n      return closest;\n    },\n\n    on: function(name, _) {\n      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n    }\n  };\n}\n\nfunction manyBody() {\n  var nodes,\n      node,\n      alpha,\n      strength = constant$7(-30),\n      strengths,\n      distanceMin2 = 1,\n      distanceMax2 = Infinity,\n      theta2 = 0.81;\n\n  function force(_) {\n    var i, n = nodes.length, tree = quadtree(nodes, x$1, y$1).visitAfter(accumulate);\n    for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length, node;\n    strengths = new Array(n);\n    for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n  }\n\n  function accumulate(quad) {\n    var strength = 0, q, c, weight = 0, x, y, i;\n\n    // For internal nodes, accumulate forces from child quadrants.\n    if (quad.length) {\n      for (x = y = i = 0; i < 4; ++i) {\n        if ((q = quad[i]) && (c = Math.abs(q.value))) {\n          strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n        }\n      }\n      quad.x = x / weight;\n      quad.y = y / weight;\n    }\n\n    // For leaf nodes, accumulate forces from coincident quadrants.\n    else {\n      q = quad;\n      q.x = q.data.x;\n      q.y = q.data.y;\n      do strength += strengths[q.data.index];\n      while (q = q.next);\n    }\n\n    quad.value = strength;\n  }\n\n  function apply(quad, x1, _, x2) {\n    if (!quad.value) return true;\n\n    var x = quad.x - node.x,\n        y = quad.y - node.y,\n        w = x2 - x1,\n        l = x * x + y * y;\n\n    // Apply the Barnes-Hut approximation if possible.\n    // Limit forces for very close nodes; randomize direction if coincident.\n    if (w * w / theta2 < l) {\n      if (l < distanceMax2) {\n        if (x === 0) x = jiggle(), l += x * x;\n        if (y === 0) y = jiggle(), l += y * y;\n        if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n        node.vx += x * quad.value * alpha / l;\n        node.vy += y * quad.value * alpha / l;\n      }\n      return true;\n    }\n\n    // Otherwise, process points directly.\n    else if (quad.length || l >= distanceMax2) return;\n\n    // Limit forces for very close nodes; randomize direction if coincident.\n    if (quad.data !== node || quad.next) {\n      if (x === 0) x = jiggle(), l += x * x;\n      if (y === 0) y = jiggle(), l += y * y;\n      if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n    }\n\n    do if (quad.data !== node) {\n      w = strengths[quad.data.index] * alpha / l;\n      node.vx += x * w;\n      node.vy += y * w;\n    } while (quad = quad.next);\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : strength;\n  };\n\n  force.distanceMin = function(_) {\n    return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n  };\n\n  force.distanceMax = function(_) {\n    return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n  };\n\n  force.theta = function(_) {\n    return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n  };\n\n  return force;\n}\n\nfunction radial(radius, x, y) {\n  var nodes,\n      strength = constant$7(0.1),\n      strengths,\n      radiuses;\n\n  if (typeof radius !== \"function\") radius = constant$7(+radius);\n  if (x == null) x = 0;\n  if (y == null) y = 0;\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length; i < n; ++i) {\n      var node = nodes[i],\n          dx = node.x - x || 1e-6,\n          dy = node.y - y || 1e-6,\n          r = Math.sqrt(dx * dx + dy * dy),\n          k = (radiuses[i] - r) * strengths[i] * alpha / r;\n      node.vx += dx * k;\n      node.vy += dy * k;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    radiuses = new Array(n);\n    for (i = 0; i < n; ++i) {\n      radiuses[i] = +radius(nodes[i], i, nodes);\n      strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _, initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : strength;\n  };\n\n  force.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : radius;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = +_, force) : x;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = +_, force) : y;\n  };\n\n  return force;\n}\n\nfunction x$2(x) {\n  var strength = constant$7(0.1),\n      nodes,\n      strengths,\n      xz;\n\n  if (typeof x !== \"function\") x = constant$7(x == null ? 0 : +x);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    xz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : strength;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : x;\n  };\n\n  return force;\n}\n\nfunction y$2(y) {\n  var strength = constant$7(0.1),\n      nodes,\n      strengths,\n      yz;\n\n  if (typeof y !== \"function\") y = constant$7(y == null ? 0 : +y);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    yz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : strength;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : y;\n  };\n\n  return force;\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nfunction formatDecimal(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n\nfunction exponent$1(x) {\n  return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n\nfunction formatGroup(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n\nfunction formatNumerals(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n\n// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nfunction formatSpecifier(specifier) {\n  return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  this.fill = match[1] || \" \";\n  this.align = match[2] || \">\";\n  this.sign = match[3] || \"-\";\n  this.symbol = match[4] || \"\";\n  this.zero = !!match[5];\n  this.width = match[6] && +match[6];\n  this.comma = !!match[7];\n  this.precision = match[8] && +match[8].slice(1);\n  this.trim = !!match[9];\n  this.type = match[10] || \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n\n// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nfunction formatTrim(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n\nvar prefixExponent;\n\nfunction formatPrefixAuto(x, p) {\n  var d = formatDecimal(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n\nfunction formatRounded(x, p) {\n  var d = formatDecimal(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n\nvar formatTypes = {\n  \"%\": function(x, p) { return (x * 100).toFixed(p); },\n  \"b\": function(x) { return Math.round(x).toString(2); },\n  \"c\": function(x) { return x + \"\"; },\n  \"d\": function(x) { return Math.round(x).toString(10); },\n  \"e\": function(x, p) { return x.toExponential(p); },\n  \"f\": function(x, p) { return x.toFixed(p); },\n  \"g\": function(x, p) { return x.toPrecision(p); },\n  \"o\": function(x) { return Math.round(x).toString(8); },\n  \"p\": function(x, p) { return formatRounded(x * 100, p); },\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n  \"x\": function(x) { return Math.round(x).toString(16); }\n};\n\nfunction identity$3(x) {\n  return x;\n}\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\\xB5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nfunction formatLocale(locale) {\n  var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3,\n      currency = locale.currency,\n      decimal = locale.decimal,\n      numerals = locale.numerals ? formatNumerals(locale.numerals) : identity$3,\n      percent = locale.percent || \"%\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision == null ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Perform the initial formatting.\n        var valueNegative = value < 0;\n        value = formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero during formatting, treat as positive.\n        if (valueNegative && +value === 0) valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n\nvar locale;\n\ndefaultLocale({\n  decimal: \".\",\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nfunction defaultLocale(definition) {\n  locale = formatLocale(definition);\n  exports.format = locale.format;\n  exports.formatPrefix = locale.formatPrefix;\n  return locale;\n}\n\nfunction precisionFixed(step) {\n  return Math.max(0, -exponent$1(Math.abs(step)));\n}\n\nfunction precisionPrefix(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));\n}\n\nfunction precisionRound(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;\n}\n\n// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nfunction adder() {\n  return new Adder;\n}\n\nfunction Adder() {\n  this.reset();\n}\n\nAdder.prototype = {\n  constructor: Adder,\n  reset: function() {\n    this.s = // rounded value\n    this.t = 0; // exact error\n  },\n  add: function(y) {\n    add$1(temp, y, this.t);\n    add$1(this, temp.s, this.s);\n    if (this.s) this.t += temp.t;\n    else this.s = temp.t;\n  },\n  valueOf: function() {\n    return this.s;\n  }\n};\n\nvar temp = new Adder;\n\nfunction add$1(adder, a, b) {\n  var x = adder.s = a + b,\n      bv = x - a,\n      av = x - bv;\n  adder.t = (a - av) + (b - bv);\n}\n\nvar epsilon$2 = 1e-6;\nvar epsilon2$1 = 1e-12;\nvar pi$3 = Math.PI;\nvar halfPi$2 = pi$3 / 2;\nvar quarterPi = pi$3 / 4;\nvar tau$3 = pi$3 * 2;\n\nvar degrees$1 = 180 / pi$3;\nvar radians = pi$3 / 180;\n\nvar abs = Math.abs;\nvar atan = Math.atan;\nvar atan2 = Math.atan2;\nvar cos$1 = Math.cos;\nvar ceil = Math.ceil;\nvar exp = Math.exp;\nvar log = Math.log;\nvar pow = Math.pow;\nvar sin$1 = Math.sin;\nvar sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nvar sqrt = Math.sqrt;\nvar tan = Math.tan;\n\nfunction acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi$3 : Math.acos(x);\n}\n\nfunction asin(x) {\n  return x > 1 ? halfPi$2 : x < -1 ? -halfPi$2 : Math.asin(x);\n}\n\nfunction haversin(x) {\n  return (x = sin$1(x / 2)) * x;\n}\n\nfunction noop$2() {}\n\nfunction streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nfunction geoStream(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n\nvar areaRingSum = adder();\n\nvar areaSum = adder(),\n    lambda00,\n    phi00,\n    lambda0,\n    cosPhi0,\n    sinPhi0;\n\nvar areaStream = {\n  point: noop$2,\n  lineStart: noop$2,\n  lineEnd: noop$2,\n  polygonStart: function() {\n    areaRingSum.reset();\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    var areaRing = +areaRingSum;\n    areaSum.add(areaRing < 0 ? tau$3 + areaRing : areaRing);\n    this.lineStart = this.lineEnd = this.point = noop$2;\n  },\n  sphere: function() {\n    areaSum.add(tau$3);\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n  areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n  areaStream.point = areaPoint;\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n  // Spherical excess E for a spherical triangle with vertices: south pole,\n  // previous point, current point.  Uses a formula derived from Cagnoli’s\n  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n  var dLambda = lambda - lambda0,\n      sdLambda = dLambda >= 0 ? 1 : -1,\n      adLambda = sdLambda * dLambda,\n      cosPhi = cos$1(phi),\n      sinPhi = sin$1(phi),\n      k = sinPhi0 * sinPhi,\n      u = cosPhi0 * cosPhi + k * cos$1(adLambda),\n      v = k * sdLambda * sin$1(adLambda);\n  areaRingSum.add(atan2(v, u));\n\n  // Advance the previous points.\n  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nfunction area$1(object) {\n  areaSum.reset();\n  geoStream(object, areaStream);\n  return areaSum * 2;\n}\n\nfunction spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nfunction cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);\n  return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];\n}\n\nfunction cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nfunction cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nfunction cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nfunction cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nfunction cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n\nvar lambda0$1, phi0, lambda1, phi1, // bounds\n    lambda2, // previous lambda-coordinate\n    lambda00$1, phi00$1, // first point\n    p0, // previous 3D point\n    deltaSum = adder(),\n    ranges,\n    range;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: boundsLineStart,\n  lineEnd: boundsLineEnd,\n  polygonStart: function() {\n    boundsStream.point = boundsRingPoint;\n    boundsStream.lineStart = boundsRingStart;\n    boundsStream.lineEnd = boundsRingEnd;\n    deltaSum.reset();\n    areaStream.polygonStart();\n  },\n  polygonEnd: function() {\n    areaStream.polygonEnd();\n    boundsStream.point = boundsPoint;\n    boundsStream.lineStart = boundsLineStart;\n    boundsStream.lineEnd = boundsLineEnd;\n    if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n    else if (deltaSum > epsilon$2) phi1 = 90;\n    else if (deltaSum < -epsilon$2) phi0 = -90;\n    range[0] = lambda0$1, range[1] = lambda1;\n  }\n};\n\nfunction boundsPoint(lambda, phi) {\n  ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n  var p = cartesian([lambda * radians, phi * radians]);\n  if (p0) {\n    var normal = cartesianCross(p0, p),\n        equatorial = [normal[1], -normal[0], 0],\n        inflection = cartesianCross(equatorial, normal);\n    cartesianNormalizeInPlace(inflection);\n    inflection = spherical(inflection);\n    var delta = lambda - lambda2,\n        sign$$1 = delta > 0 ? 1 : -1,\n        lambdai = inflection[0] * degrees$1 * sign$$1,\n        phii,\n        antimeridian = abs(delta) > 180;\n    if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {\n      phii = inflection[1] * degrees$1;\n      if (phii > phi1) phi1 = phii;\n    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {\n      phii = -inflection[1] * degrees$1;\n      if (phii < phi0) phi0 = phii;\n    } else {\n      if (phi < phi0) phi0 = phi;\n      if (phi > phi1) phi1 = phi;\n    }\n    if (antimeridian) {\n      if (lambda < lambda2) {\n        if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n      } else {\n        if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n      }\n    } else {\n      if (lambda1 >= lambda0$1) {\n        if (lambda < lambda0$1) lambda0$1 = lambda;\n        if (lambda > lambda1) lambda1 = lambda;\n      } else {\n        if (lambda > lambda2) {\n          if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n        } else {\n          if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n        }\n      }\n    }\n  } else {\n    ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);\n  }\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n  p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n  boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n  range[0] = lambda0$1, range[1] = lambda1;\n  boundsStream.point = boundsPoint;\n  p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n  if (p0) {\n    var delta = lambda - lambda2;\n    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n  } else {\n    lambda00$1 = lambda, phi00$1 = phi;\n  }\n  areaStream.point(lambda, phi);\n  linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n  areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n  boundsRingPoint(lambda00$1, phi00$1);\n  areaStream.lineEnd();\n  if (abs(deltaSum) > epsilon$2) lambda0$1 = -(lambda1 = 180);\n  range[0] = lambda0$1, range[1] = lambda1;\n  p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n  return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nfunction bounds(feature) {\n  var i, n, a, b, merged, deltaMax, delta;\n\n  phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);\n  ranges = [];\n  geoStream(feature, boundsStream);\n\n  // First, sort ranges by their minimum longitudes.\n  if (n = ranges.length) {\n    ranges.sort(rangeCompare);\n\n    // Then, merge any ranges that overlap.\n    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n      b = ranges[i];\n      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n      } else {\n        merged.push(a = b);\n      }\n    }\n\n    // Finally, find the largest gap between the merged ranges.\n    // The final bounding box will be the inverse of this gap.\n    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n      b = merged[i];\n      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];\n    }\n  }\n\n  ranges = range = null;\n\n  return lambda0$1 === Infinity || phi0 === Infinity\n      ? [[NaN, NaN], [NaN, NaN]]\n      : [[lambda0$1, phi0], [lambda1, phi1]];\n}\n\nvar W0, W1,\n    X0, Y0, Z0,\n    X1, Y1, Z1,\n    X2, Y2, Z2,\n    lambda00$2, phi00$2, // first point\n    x0, y0, z0; // previous point\n\nvar centroidStream = {\n  sphere: noop$2,\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos$1(phi);\n  centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n  ++W0;\n  X0 += (x - X0) / W0;\n  Y0 += (y - Y0) / W0;\n  Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos$1(phi);\n  x0 = cosPhi * cos$1(lambda);\n  y0 = cosPhi * sin$1(lambda);\n  z0 = sin$1(phi);\n  centroidStream.point = centroidLinePoint;\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos$1(phi),\n      x = cosPhi * cos$1(lambda),\n      y = cosPhi * sin$1(lambda),\n      z = sin$1(phi),\n      w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n  centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n  centroidRingPoint(lambda00$2, phi00$2);\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n  lambda00$2 = lambda, phi00$2 = phi;\n  lambda *= radians, phi *= radians;\n  centroidStream.point = centroidRingPoint;\n  var cosPhi = cos$1(phi);\n  x0 = cosPhi * cos$1(lambda);\n  y0 = cosPhi * sin$1(lambda);\n  z0 = sin$1(phi);\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos$1(phi),\n      x = cosPhi * cos$1(lambda),\n      y = cosPhi * sin$1(lambda),\n      z = sin$1(phi),\n      cx = y0 * z - z0 * y,\n      cy = z0 * x - x0 * z,\n      cz = x0 * y - y0 * x,\n      m = sqrt(cx * cx + cy * cy + cz * cz),\n      w = asin(m), // line weight = angle\n      v = m && -w / m; // area weight multiplier\n  X2 += v * cx;\n  Y2 += v * cy;\n  Z2 += v * cz;\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroid(object) {\n  W0 = W1 =\n  X0 = Y0 = Z0 =\n  X1 = Y1 = Z1 =\n  X2 = Y2 = Z2 = 0;\n  geoStream(object, centroidStream);\n\n  var x = X2,\n      y = Y2,\n      z = Z2,\n      m = x * x + y * y + z * z;\n\n  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n  if (m < epsilon2$1) {\n    x = X1, y = Y1, z = Z1;\n    // If the feature has zero length, fall back to arithmetic mean of point vectors.\n    if (W1 < epsilon$2) x = X0, y = Y0, z = Z0;\n    m = x * x + y * y + z * z;\n    // If the feature still has an undefined ccentroid, then return.\n    if (m < epsilon2$1) return [NaN, NaN];\n  }\n\n  return [atan2(y, x) * degrees$1, asin(z / sqrt(m)) * degrees$1];\n}\n\nfunction constant$8(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction compose(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n\nfunction rotationIdentity(lambda, phi) {\n  return [abs(lambda) > pi$3 ? lambda + Math.round(-lambda / tau$3) * tau$3 : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nfunction rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau$3) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    return lambda += deltaLambda, [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos$1(deltaPhi),\n      sinDeltaPhi = sin$1(deltaPhi),\n      cosDeltaGamma = cos$1(deltaGamma),\n      sinDeltaGamma = sin$1(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos$1(phi),\n        x = cos$1(lambda) * cosPhi,\n        y = sin$1(lambda) * cosPhi,\n        z = sin$1(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos$1(phi),\n        x = cos$1(lambda) * cosPhi,\n        y = sin$1(lambda) * cosPhi,\n        z = sin$1(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nfunction rotation(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;\n  };\n\n  return forward;\n}\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nfunction circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos$1(radius),\n      sinRadius = sin$1(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau$3;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$3;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau$3 - epsilon$2) % tau$3;\n}\n\nfunction circle() {\n  var center = constant$8([0, 0]),\n      radius = constant$8(90),\n      precision = constant$8(6),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees$1, x[1] *= degrees$1;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant$8([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$8(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant$8(+_), circle) : precision;\n  };\n\n  return circle;\n}\n\nfunction clipBuffer() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y) {\n      line.push([x, y]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop$2,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n\nfunction pointEqual(a, b) {\n  return abs(a[0] - b[0]) < epsilon$2 && abs(a[1] - b[1]) < epsilon$2;\n}\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nfunction clipRejoin(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    // If the first and last points of a segment are coincident, then treat as a\n    // closed ring. TODO if all rings are closed, then the winding order of the\n    // exterior ring should be checked.\n    if (pointEqual(p0, p1)) {\n      stream.lineStart();\n      for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n      stream.lineEnd();\n      return;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link$1(subject);\n  link$1(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link$1(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n\nvar sum$1 = adder();\n\nfunction polygonContains(polygon, point) {\n  var lambda = point[0],\n      phi = point[1],\n      sinPhi = sin$1(phi),\n      normal = [sin$1(lambda), -cos$1(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  sum$1.reset();\n\n  if (sinPhi === 1) phi = halfPi$2 + epsilon$2;\n  else if (sinPhi === -1) phi = -halfPi$2 - epsilon$2;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = point0[0],\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin$1(phi0),\n        cosPhi0 = cos$1(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = point1[0],\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin$1(phi1),\n          cosPhi1 = cos$1(phi1),\n          delta = lambda1 - lambda0,\n          sign$$1 = delta >= 0 ? 1 : -1,\n          absDelta = sign$$1 * delta,\n          antimeridian = absDelta > pi$3,\n          k = sinPhi0 * sinPhi1;\n\n      sum$1.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));\n      angle += antimeridian ? delta + sign$$1 * tau$3 : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1);\n}\n\nfunction clip(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi$2 - epsilon$2 : halfPi$2 - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi$2 - epsilon$2 : halfPi$2 - b[1]);\n}\n\nvar clipAntimeridian = clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi$3, -halfPi$2]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi$3 : -pi$3,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi$3) < epsilon$2) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$2 : -halfPi$2);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi$3) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon$2) lambda0 -= sign0 * epsilon$2; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon$2) lambda1 -= sign1 * epsilon$2;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin$1(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon$2\n      ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)\n          - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi$2;\n    stream.point(-pi$3, phi);\n    stream.point(0, phi);\n    stream.point(pi$3, phi);\n    stream.point(pi$3, 0);\n    stream.point(pi$3, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi$3, -phi);\n    stream.point(-pi$3, 0);\n    stream.point(-pi$3, phi);\n  } else if (abs(from[0] - to[0]) > epsilon$2) {\n    var lambda = from[0] < to[0] ? pi$3 : -pi$3;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n\nfunction clipCircle(radius) {\n  var cr = cos$1(radius),\n      delta = 6 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon$2; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos$1(lambda) * cos$1(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi$3 : -pi$3), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        // Handle degeneracies.\n        // TODO ignore if not clipping polygons.\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n            point1[0] += epsilon$2;\n            point1[1] += epsilon$2;\n            v = visible(point1[0], point1[1]);\n          }\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1]);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi$3) < epsilon$2,\n        meridian = polar || delta < epsilon$2;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$2 ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi$3 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi$3 - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$3, radius - pi$3]);\n}\n\nfunction clipLine(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nfunction clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n\nfunction extent$1() {\n  var x0 = 0,\n      y0 = 0,\n      x1 = 960,\n      y1 = 500,\n      cache,\n      cacheStream,\n      clip;\n\n  return clip = {\n    stream: function(stream) {\n      return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);\n    },\n    extent: function(_) {\n      return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n    }\n  };\n}\n\nvar lengthSum = adder(),\n    lambda0$2,\n    sinPhi0$1,\n    cosPhi0$1;\n\nvar lengthStream = {\n  sphere: noop$2,\n  point: noop$2,\n  lineStart: lengthLineStart,\n  lineEnd: noop$2,\n  polygonStart: noop$2,\n  polygonEnd: noop$2\n};\n\nfunction lengthLineStart() {\n  lengthStream.point = lengthPointFirst;\n  lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n  lengthStream.point = lengthStream.lineEnd = noop$2;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);\n  lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var sinPhi = sin$1(phi),\n      cosPhi = cos$1(phi),\n      delta = abs(lambda - lambda0$2),\n      cosDelta = cos$1(delta),\n      sinDelta = sin$1(delta),\n      x = cosPhi * sinDelta,\n      y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,\n      z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;\n  lengthSum.add(atan2(sqrt(x * x + y * y), z));\n  lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;\n}\n\nfunction length$1(object) {\n  lengthSum.reset();\n  geoStream(object, lengthStream);\n  return +lengthSum;\n}\n\nvar coordinates = [null, null],\n    object$1 = {type: \"LineString\", coordinates: coordinates};\n\nfunction distance(a, b) {\n  coordinates[0] = a;\n  coordinates[1] = b;\n  return length$1(object$1);\n}\n\nvar containsObjectType = {\n  Feature: function(object, point) {\n    return containsGeometry(object.geometry, point);\n  },\n  FeatureCollection: function(object, point) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\n    return false;\n  }\n};\n\nvar containsGeometryType = {\n  Sphere: function() {\n    return true;\n  },\n  Point: function(object, point) {\n    return containsPoint(object.coordinates, point);\n  },\n  MultiPoint: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n    return false;\n  },\n  LineString: function(object, point) {\n    return containsLine(object.coordinates, point);\n  },\n  MultiLineString: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsLine(coordinates[i], point)) return true;\n    return false;\n  },\n  Polygon: function(object, point) {\n    return containsPolygon(object.coordinates, point);\n  },\n  MultiPolygon: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n    return false;\n  },\n  GeometryCollection: function(object, point) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n    return false;\n  }\n};\n\nfunction containsGeometry(geometry, point) {\n  return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n      ? containsGeometryType[geometry.type](geometry, point)\n      : false;\n}\n\nfunction containsPoint(coordinates, point) {\n  return distance(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n  var ab = distance(coordinates[0], coordinates[1]),\n      ao = distance(coordinates[0], point),\n      ob = distance(point, coordinates[1]);\n  return ao + ob <= ab + epsilon$2;\n}\n\nfunction containsPolygon(coordinates, point) {\n  return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n  return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n  return [point[0] * radians, point[1] * radians];\n}\n\nfunction contains$1(object, point) {\n  return (object && containsObjectType.hasOwnProperty(object.type)\n      ? containsObjectType[object.type]\n      : containsGeometry)(object, point);\n}\n\nfunction graticuleX(y0, y1, dy) {\n  var y = sequence(y0, y1 - epsilon$2, dy).concat(y1);\n  return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n  var x = sequence(x0, x1 - epsilon$2, dx).concat(x1);\n  return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nfunction graticule() {\n  var x1, x0, X1, X0,\n      y1, y0, Y1, Y0,\n      dx = 10, dy = dx, DX = 90, DY = 360,\n      x, y, X, Y,\n      precision = 2.5;\n\n  function graticule() {\n    return {type: \"MultiLineString\", coordinates: lines()};\n  }\n\n  function lines() {\n    return sequence(ceil(X0 / DX) * DX, X1, DX).map(X)\n        .concat(sequence(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n        .concat(sequence(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$2; }).map(x))\n        .concat(sequence(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$2; }).map(y));\n  }\n\n  graticule.lines = function() {\n    return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n  };\n\n  graticule.outline = function() {\n    return {\n      type: \"Polygon\",\n      coordinates: [\n        X(X0).concat(\n        Y(Y1).slice(1),\n        X(X1).reverse().slice(1),\n        Y(Y0).reverse().slice(1))\n      ]\n    };\n  };\n\n  graticule.extent = function(_) {\n    if (!arguments.length) return graticule.extentMinor();\n    return graticule.extentMajor(_).extentMinor(_);\n  };\n\n  graticule.extentMajor = function(_) {\n    if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n    X0 = +_[0][0], X1 = +_[1][0];\n    Y0 = +_[0][1], Y1 = +_[1][1];\n    if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n    if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.extentMinor = function(_) {\n    if (!arguments.length) return [[x0, y0], [x1, y1]];\n    x0 = +_[0][0], x1 = +_[1][0];\n    y0 = +_[0][1], y1 = +_[1][1];\n    if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n    if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.step = function(_) {\n    if (!arguments.length) return graticule.stepMinor();\n    return graticule.stepMajor(_).stepMinor(_);\n  };\n\n  graticule.stepMajor = function(_) {\n    if (!arguments.length) return [DX, DY];\n    DX = +_[0], DY = +_[1];\n    return graticule;\n  };\n\n  graticule.stepMinor = function(_) {\n    if (!arguments.length) return [dx, dy];\n    dx = +_[0], dy = +_[1];\n    return graticule;\n  };\n\n  graticule.precision = function(_) {\n    if (!arguments.length) return precision;\n    precision = +_;\n    x = graticuleX(y0, y1, 90);\n    y = graticuleY(x0, x1, precision);\n    X = graticuleX(Y0, Y1, 90);\n    Y = graticuleY(X0, X1, precision);\n    return graticule;\n  };\n\n  return graticule\n      .extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]])\n      .extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]);\n}\n\nfunction graticule10() {\n  return graticule()();\n}\n\nfunction interpolate$1(a, b) {\n  var x0 = a[0] * radians,\n      y0 = a[1] * radians,\n      x1 = b[0] * radians,\n      y1 = b[1] * radians,\n      cy0 = cos$1(y0),\n      sy0 = sin$1(y0),\n      cy1 = cos$1(y1),\n      sy1 = sin$1(y1),\n      kx0 = cy0 * cos$1(x0),\n      ky0 = cy0 * sin$1(x0),\n      kx1 = cy1 * cos$1(x1),\n      ky1 = cy1 * sin$1(x1),\n      d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n      k = sin$1(d);\n\n  var interpolate = d ? function(t) {\n    var B = sin$1(t *= d) / k,\n        A = sin$1(d - t) / k,\n        x = A * kx0 + B * kx1,\n        y = A * ky0 + B * ky1,\n        z = A * sy0 + B * sy1;\n    return [\n      atan2(y, x) * degrees$1,\n      atan2(z, sqrt(x * x + y * y)) * degrees$1\n    ];\n  } : function() {\n    return [x0 * degrees$1, y0 * degrees$1];\n  };\n\n  interpolate.distance = d;\n\n  return interpolate;\n}\n\nfunction identity$4(x) {\n  return x;\n}\n\nvar areaSum$1 = adder(),\n    areaRingSum$1 = adder(),\n    x00,\n    y00,\n    x0$1,\n    y0$1;\n\nvar areaStream$1 = {\n  point: noop$2,\n  lineStart: noop$2,\n  lineEnd: noop$2,\n  polygonStart: function() {\n    areaStream$1.lineStart = areaRingStart$1;\n    areaStream$1.lineEnd = areaRingEnd$1;\n  },\n  polygonEnd: function() {\n    areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$2;\n    areaSum$1.add(abs(areaRingSum$1));\n    areaRingSum$1.reset();\n  },\n  result: function() {\n    var area = areaSum$1 / 2;\n    areaSum$1.reset();\n    return area;\n  }\n};\n\nfunction areaRingStart$1() {\n  areaStream$1.point = areaPointFirst$1;\n}\n\nfunction areaPointFirst$1(x, y) {\n  areaStream$1.point = areaPoint$1;\n  x00 = x0$1 = x, y00 = y0$1 = y;\n}\n\nfunction areaPoint$1(x, y) {\n  areaRingSum$1.add(y0$1 * x - x0$1 * y);\n  x0$1 = x, y0$1 = y;\n}\n\nfunction areaRingEnd$1() {\n  areaPoint$1(x00, y00);\n}\n\nvar x0$2 = Infinity,\n    y0$2 = x0$2,\n    x1 = -x0$2,\n    y1 = x1;\n\nvar boundsStream$1 = {\n  point: boundsPoint$1,\n  lineStart: noop$2,\n  lineEnd: noop$2,\n  polygonStart: noop$2,\n  polygonEnd: noop$2,\n  result: function() {\n    var bounds = [[x0$2, y0$2], [x1, y1]];\n    x1 = y1 = -(y0$2 = x0$2 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint$1(x, y) {\n  if (x < x0$2) x0$2 = x;\n  if (x > x1) x1 = x;\n  if (y < y0$2) y0$2 = y;\n  if (y > y1) y1 = y;\n}\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0$1 = 0,\n    Y0$1 = 0,\n    Z0$1 = 0,\n    X1$1 = 0,\n    Y1$1 = 0,\n    Z1$1 = 0,\n    X2$1 = 0,\n    Y2$1 = 0,\n    Z2$1 = 0,\n    x00$1,\n    y00$1,\n    x0$3,\n    y0$3;\n\nvar centroidStream$1 = {\n  point: centroidPoint$1,\n  lineStart: centroidLineStart$1,\n  lineEnd: centroidLineEnd$1,\n  polygonStart: function() {\n    centroidStream$1.lineStart = centroidRingStart$1;\n    centroidStream$1.lineEnd = centroidRingEnd$1;\n  },\n  polygonEnd: function() {\n    centroidStream$1.point = centroidPoint$1;\n    centroidStream$1.lineStart = centroidLineStart$1;\n    centroidStream$1.lineEnd = centroidLineEnd$1;\n  },\n  result: function() {\n    var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]\n        : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]\n        : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]\n        : [NaN, NaN];\n    X0$1 = Y0$1 = Z0$1 =\n    X1$1 = Y1$1 = Z1$1 =\n    X2$1 = Y2$1 = Z2$1 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint$1(x, y) {\n  X0$1 += x;\n  Y0$1 += y;\n  ++Z0$1;\n}\n\nfunction centroidLineStart$1() {\n  centroidStream$1.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream$1.point = centroidPointLine;\n  centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);\n  X1$1 += z * (x0$3 + x) / 2;\n  Y1$1 += z * (y0$3 + y) / 2;\n  Z1$1 += z;\n  centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction centroidLineEnd$1() {\n  centroidStream$1.point = centroidPoint$1;\n}\n\nfunction centroidRingStart$1() {\n  centroidStream$1.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd$1() {\n  centroidPointRing(x00$1, y00$1);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream$1.point = centroidPointRing;\n  centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0$3,\n      dy = y - y0$3,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1$1 += z * (x0$3 + x) / 2;\n  Y1$1 += z * (y0$3 + y) / 2;\n  Z1$1 += z;\n\n  z = y0$3 * x - x0$3 * y;\n  X2$1 += z * (x0$3 + x);\n  Y2$1 += z * (y0$3 + y);\n  Z2$1 += z * 3;\n  centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau$3);\n        break;\n      }\n    }\n  },\n  result: noop$2\n};\n\nvar lengthSum$1 = adder(),\n    lengthRing,\n    x00$2,\n    y00$2,\n    x0$4,\n    y0$4;\n\nvar lengthStream$1 = {\n  point: noop$2,\n  lineStart: function() {\n    lengthStream$1.point = lengthPointFirst$1;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint$1(x00$2, y00$2);\n    lengthStream$1.point = noop$2;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum$1;\n    lengthSum$1.reset();\n    return length;\n  }\n};\n\nfunction lengthPointFirst$1(x, y) {\n  lengthStream$1.point = lengthPoint$1;\n  x00$2 = x0$4 = x, y00$2 = y0$4 = y;\n}\n\nfunction lengthPoint$1(x, y) {\n  x0$4 -= x, y0$4 -= y;\n  lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));\n  x0$4 = x, y0$4 = y;\n}\n\nfunction PathString() {\n  this._string = [];\n}\n\nPathString.prototype = {\n  _radius: 4.5,\n  _circle: circle$1(4.5),\n  pointRadius: function(_) {\n    if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n    return this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._string.push(\"Z\");\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._string.push(\"M\", x, \",\", y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._string.push(\"L\", x, \",\", y);\n        break;\n      }\n      default: {\n        if (this._circle == null) this._circle = circle$1(this._radius);\n        this._string.push(\"M\", x, \",\", y, this._circle);\n        break;\n      }\n    }\n  },\n  result: function() {\n    if (this._string.length) {\n      var result = this._string.join(\"\");\n      this._string = [];\n      return result;\n    } else {\n      return null;\n    }\n  }\n};\n\nfunction circle$1(radius) {\n  return \"m0,\" + radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n      + \"z\";\n}\n\nfunction index$1(projection, context) {\n  var pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      geoStream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    geoStream(object, projectionStream(areaStream$1));\n    return areaStream$1.result();\n  };\n\n  path.measure = function(object) {\n    geoStream(object, projectionStream(lengthStream$1));\n    return lengthStream$1.result();\n  };\n\n  path.bounds = function(object) {\n    geoStream(object, projectionStream(boundsStream$1));\n    return boundsStream$1.result();\n  };\n\n  path.centroid = function(object) {\n    geoStream(object, projectionStream(centroidStream$1));\n    return centroidStream$1.result();\n  };\n\n  path.projection = function(_) {\n    return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$4) : (projection = _).stream, path) : projection;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  return path.projection(projection).context(context);\n}\n\nfunction transform(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nfunction transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream$1));\n  fitBounds(boundsStream$1.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nfunction fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nfunction fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nfunction fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nfunction fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)\n\nfunction resample(project, delta2) {\n  return +delta2 ? resample$1(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample$1(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon$2 || abs(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy) {\n  function transform$$1(x, y) {\n    return [dx + k * x, dy - k * y];\n  }\n  transform$$1.invert = function(x, y) {\n    return [(x - dx) / k, (dy - y) / k];\n  };\n  return transform$$1;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, alpha) {\n  var cosAlpha = cos$1(alpha),\n      sinAlpha = sin$1(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform$$1(x, y) {\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform$$1.invert = function(x, y) {\n    return [ai * x - bi * y + ci, fi - bi * x - ai * y];\n  };\n  return transform$$1;\n}\n\nfunction projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nfunction projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity$4, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees$1, point[1] * degrees$1];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees$1;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),\n        transform$$1 = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform$$1);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n\nfunction conicProjection(projectAt) {\n  var phi0 = 0,\n      phi1 = pi$3 / 3,\n      m = projectionMutator(projectAt),\n      p = m(phi0, phi1);\n\n  p.parallels = function(_) {\n    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];\n  };\n\n  return p;\n}\n\nfunction cylindricalEqualAreaRaw(phi0) {\n  var cosPhi0 = cos$1(phi0);\n\n  function forward(lambda, phi) {\n    return [lambda * cosPhi0, sin$1(phi) / cosPhi0];\n  }\n\n  forward.invert = function(x, y) {\n    return [x / cosPhi0, asin(y * cosPhi0)];\n  };\n\n  return forward;\n}\n\nfunction conicEqualAreaRaw(y0, y1) {\n  var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;\n\n  // Are the parallels symmetrical around the Equator?\n  if (abs(n) < epsilon$2) return cylindricalEqualAreaRaw(y0);\n\n  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n  function project(x, y) {\n    var r = sqrt(c - 2 * n * sin$1(y)) / n;\n    return [r * sin$1(x *= n), r0 - r * cos$1(x)];\n  }\n\n  project.invert = function(x, y) {\n    var r0y = r0 - y;\n    return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n  };\n\n  return project;\n}\n\nfunction conicEqualArea() {\n  return conicProjection(conicEqualAreaRaw)\n      .scale(155.424)\n      .center([0, 33.6442]);\n}\n\nfunction albers() {\n  return conicEqualArea()\n      .parallels([29.5, 45.5])\n      .scale(1070)\n      .translate([480, 250])\n      .rotate([96, 0])\n      .center([-0.6, 38.7]);\n}\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n  var n = streams.length;\n  return {\n    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n  };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nfunction albersUsa() {\n  var cache,\n      cacheStream,\n      lower48 = albers(), lower48Point,\n      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n      point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n  function albersUsa(coordinates) {\n    var x = coordinates[0], y = coordinates[1];\n    return point = null,\n        (lower48Point.point(x, y), point)\n        || (alaskaPoint.point(x, y), point)\n        || (hawaiiPoint.point(x, y), point);\n  }\n\n  albersUsa.invert = function(coordinates) {\n    var k = lower48.scale(),\n        t = lower48.translate(),\n        x = (coordinates[0] - t[0]) / k,\n        y = (coordinates[1] - t[1]) / k;\n    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n        : lower48).invert(coordinates);\n  };\n\n  albersUsa.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n  };\n\n  albersUsa.precision = function(_) {\n    if (!arguments.length) return lower48.precision();\n    lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n    return reset();\n  };\n\n  albersUsa.scale = function(_) {\n    if (!arguments.length) return lower48.scale();\n    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n    return albersUsa.translate(lower48.translate());\n  };\n\n  albersUsa.translate = function(_) {\n    if (!arguments.length) return lower48.translate();\n    var k = lower48.scale(), x = +_[0], y = +_[1];\n\n    lower48Point = lower48\n        .translate(_)\n        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n        .stream(pointStream);\n\n    alaskaPoint = alaska\n        .translate([x - 0.307 * k, y + 0.201 * k])\n        .clipExtent([[x - 0.425 * k + epsilon$2, y + 0.120 * k + epsilon$2], [x - 0.214 * k - epsilon$2, y + 0.234 * k - epsilon$2]])\n        .stream(pointStream);\n\n    hawaiiPoint = hawaii\n        .translate([x - 0.205 * k, y + 0.212 * k])\n        .clipExtent([[x - 0.214 * k + epsilon$2, y + 0.166 * k + epsilon$2], [x - 0.115 * k - epsilon$2, y + 0.234 * k - epsilon$2]])\n        .stream(pointStream);\n\n    return reset();\n  };\n\n  albersUsa.fitExtent = function(extent, object) {\n    return fitExtent(albersUsa, extent, object);\n  };\n\n  albersUsa.fitSize = function(size, object) {\n    return fitSize(albersUsa, size, object);\n  };\n\n  albersUsa.fitWidth = function(width, object) {\n    return fitWidth(albersUsa, width, object);\n  };\n\n  albersUsa.fitHeight = function(height, object) {\n    return fitHeight(albersUsa, height, object);\n  };\n\n  function reset() {\n    cache = cacheStream = null;\n    return albersUsa;\n  }\n\n  return albersUsa.scale(1070);\n}\n\nfunction azimuthalRaw(scale) {\n  return function(x, y) {\n    var cx = cos$1(x),\n        cy = cos$1(y),\n        k = scale(cx * cy);\n    return [\n      k * cy * sin$1(x),\n      k * sin$1(y)\n    ];\n  }\n}\n\nfunction azimuthalInvert(angle) {\n  return function(x, y) {\n    var z = sqrt(x * x + y * y),\n        c = angle(z),\n        sc = sin$1(c),\n        cc = cos$1(c);\n    return [\n      atan2(x * sc, z * cc),\n      asin(z && y * sc / z)\n    ];\n  }\n}\n\nvar azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n  return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n  return 2 * asin(z / 2);\n});\n\nfunction azimuthalEqualArea() {\n  return projection(azimuthalEqualAreaRaw)\n      .scale(124.75)\n      .clipAngle(180 - 1e-3);\n}\n\nvar azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n  return (c = acos(c)) && c / sin$1(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n  return z;\n});\n\nfunction azimuthalEquidistant() {\n  return projection(azimuthalEquidistantRaw)\n      .scale(79.4188)\n      .clipAngle(180 - 1e-3);\n}\n\nfunction mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi$2 + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi$2];\n};\n\nfunction mercator() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau$3);\n}\n\nfunction mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  function reclip() {\n    var k = pi$3 * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n\nfunction tany(y) {\n  return tan((halfPi$2 + y) / 2);\n}\n\nfunction conicConformalRaw(y0, y1) {\n  var cy0 = cos$1(y0),\n      n = y0 === y1 ? sin$1(y0) : log(cy0 / cos$1(y1)) / log(tany(y1) / tany(y0)),\n      f = cy0 * pow(tany(y0), n) / n;\n\n  if (!n) return mercatorRaw;\n\n  function project(x, y) {\n    if (f > 0) { if (y < -halfPi$2 + epsilon$2) y = -halfPi$2 + epsilon$2; }\n    else { if (y > halfPi$2 - epsilon$2) y = halfPi$2 - epsilon$2; }\n    var r = f / pow(tany(y), n);\n    return [r * sin$1(n * x), f - r * cos$1(n * x)];\n  }\n\n  project.invert = function(x, y) {\n    var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy);\n    return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi$2];\n  };\n\n  return project;\n}\n\nfunction conicConformal() {\n  return conicProjection(conicConformalRaw)\n      .scale(109.5)\n      .parallels([30, 30]);\n}\n\nfunction equirectangularRaw(lambda, phi) {\n  return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nfunction equirectangular() {\n  return projection(equirectangularRaw)\n      .scale(152.63);\n}\n\nfunction conicEquidistantRaw(y0, y1) {\n  var cy0 = cos$1(y0),\n      n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),\n      g = cy0 / n + y0;\n\n  if (abs(n) < epsilon$2) return equirectangularRaw;\n\n  function project(x, y) {\n    var gy = g - y, nx = n * x;\n    return [gy * sin$1(nx), g - gy * cos$1(nx)];\n  }\n\n  project.invert = function(x, y) {\n    var gy = g - y;\n    return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];\n  };\n\n  return project;\n}\n\nfunction conicEquidistant() {\n  return conicProjection(conicEquidistantRaw)\n      .scale(131.154)\n      .center([0, 13.9389]);\n}\n\nvar A1 = 1.340264,\n    A2 = -0.081106,\n    A3 = 0.000893,\n    A4 = 0.003796,\n    M = sqrt(3) / 2,\n    iterations = 12;\n\nfunction equalEarthRaw(lambda, phi) {\n  var l = asin(M * sin$1(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n  return [\n    lambda * cos$1(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n    l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n  ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n  var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n  for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n    fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n    fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n    l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n    if (abs(delta) < epsilon2$1) break;\n  }\n  return [\n    M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos$1(l),\n    asin(sin$1(l) / M)\n  ];\n};\n\nfunction equalEarth() {\n  return projection(equalEarthRaw)\n      .scale(177.158);\n}\n\nfunction gnomonicRaw(x, y) {\n  var cy = cos$1(y), k = cos$1(x) * cy;\n  return [cy * sin$1(x) / k, sin$1(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nfunction gnomonic() {\n  return projection(gnomonicRaw)\n      .scale(144.049)\n      .clipAngle(60);\n}\n\nfunction scaleTranslate$1(kx, ky, tx, ty) {\n  return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$4 : transformer({\n    point: function(x, y) {\n      this.stream.point(x * kx + tx, y * ky + ty);\n    }\n  });\n}\n\nfunction identity$5() {\n  var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform$$1 = identity$4, // scale, translate and reflect\n      x0 = null, y0, x1, y1, // clip extent\n      postclip = identity$4,\n      cache,\n      cacheStream,\n      projection;\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return projection = {\n    stream: function(stream) {\n      return cache && cacheStream === stream ? cache : cache = transform$$1(postclip(cacheStream = stream));\n    },\n    postclip: function(_) {\n      return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n    },\n    clipExtent: function(_) {\n      return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n    },\n    scale: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k;\n    },\n    translate: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];\n    },\n    reflectX: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;\n    },\n    reflectY: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;\n    },\n    fitExtent: function(extent, object) {\n      return fitExtent(projection, extent, object);\n    },\n    fitSize: function(size, object) {\n      return fitSize(projection, size, object);\n    },\n    fitWidth: function(width, object) {\n      return fitWidth(projection, width, object);\n    },\n    fitHeight: function(height, object) {\n      return fitHeight(projection, height, object);\n    }\n  };\n}\n\nfunction naturalEarth1Raw(lambda, phi) {\n  var phi2 = phi * phi, phi4 = phi2 * phi2;\n  return [\n    lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n    phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n  ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n  var phi = y, i = 25, delta;\n  do {\n    var phi2 = phi * phi, phi4 = phi2 * phi2;\n    phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n        (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n  } while (abs(delta) > epsilon$2 && --i > 0);\n  return [\n    x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n    phi\n  ];\n};\n\nfunction naturalEarth1() {\n  return projection(naturalEarth1Raw)\n      .scale(175.295);\n}\n\nfunction orthographicRaw(x, y) {\n  return [cos$1(y) * sin$1(x), sin$1(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nfunction orthographic() {\n  return projection(orthographicRaw)\n      .scale(249.5)\n      .clipAngle(90 + epsilon$2);\n}\n\nfunction stereographicRaw(x, y) {\n  var cy = cos$1(y), k = 1 + cos$1(x) * cy;\n  return [cy * sin$1(x) / k, sin$1(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n  return 2 * atan(z);\n});\n\nfunction stereographic() {\n  return projection(stereographicRaw)\n      .scale(250)\n      .clipAngle(142);\n}\n\nfunction transverseMercatorRaw(lambda, phi) {\n  return [log(tan((halfPi$2 + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n  return [-y, 2 * atan(exp(x)) - halfPi$2];\n};\n\nfunction transverseMercator() {\n  var m = mercatorProjection(transverseMercatorRaw),\n      center = m.center,\n      rotate = m.rotate;\n\n  m.center = function(_) {\n    return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n  };\n\n  m.rotate = function(_) {\n    return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n  };\n\n  return rotate([0, 0, 90])\n      .scale(159.155);\n}\n\nfunction defaultSeparation(a, b) {\n  return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n  return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n  return x + c.x;\n}\n\nfunction maxY(children) {\n  return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n  return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n  var children;\n  while (children = node.children) node = children[0];\n  return node;\n}\n\nfunction leafRight(node) {\n  var children;\n  while (children = node.children) node = children[children.length - 1];\n  return node;\n}\n\nfunction cluster() {\n  var separation = defaultSeparation,\n      dx = 1,\n      dy = 1,\n      nodeSize = false;\n\n  function cluster(root) {\n    var previousNode,\n        x = 0;\n\n    // First walk, computing the initial x & y values.\n    root.eachAfter(function(node) {\n      var children = node.children;\n      if (children) {\n        node.x = meanX(children);\n        node.y = maxY(children);\n      } else {\n        node.x = previousNode ? x += separation(node, previousNode) : 0;\n        node.y = 0;\n        previousNode = node;\n      }\n    });\n\n    var left = leafLeft(root),\n        right = leafRight(root),\n        x0 = left.x - separation(left, right) / 2,\n        x1 = right.x + separation(right, left) / 2;\n\n    // Second walk, normalizing x & y to the desired size.\n    return root.eachAfter(nodeSize ? function(node) {\n      node.x = (node.x - root.x) * dx;\n      node.y = (root.y - node.y) * dy;\n    } : function(node) {\n      node.x = (node.x - x0) / (x1 - x0) * dx;\n      node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n    });\n  }\n\n  cluster.separation = function(x) {\n    return arguments.length ? (separation = x, cluster) : separation;\n  };\n\n  cluster.size = function(x) {\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n  };\n\n  cluster.nodeSize = function(x) {\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n  };\n\n  return cluster;\n}\n\nfunction count(node) {\n  var sum = 0,\n      children = node.children,\n      i = children && children.length;\n  if (!i) sum = 1;\n  else while (--i >= 0) sum += children[i].value;\n  node.value = sum;\n}\n\nfunction node_count() {\n  return this.eachAfter(count);\n}\n\nfunction node_each(callback) {\n  var node = this, current, next = [node], children, i, n;\n  do {\n    current = next.reverse(), next = [];\n    while (node = current.pop()) {\n      callback(node), children = node.children;\n      if (children) for (i = 0, n = children.length; i < n; ++i) {\n        next.push(children[i]);\n      }\n    }\n  } while (next.length);\n  return this;\n}\n\nfunction node_eachBefore(callback) {\n  var node = this, nodes = [node], children, i;\n  while (node = nodes.pop()) {\n    callback(node), children = node.children;\n    if (children) for (i = children.length - 1; i >= 0; --i) {\n      nodes.push(children[i]);\n    }\n  }\n  return this;\n}\n\nfunction node_eachAfter(callback) {\n  var node = this, nodes = [node], next = [], children, i, n;\n  while (node = nodes.pop()) {\n    next.push(node), children = node.children;\n    if (children) for (i = 0, n = children.length; i < n; ++i) {\n      nodes.push(children[i]);\n    }\n  }\n  while (node = next.pop()) {\n    callback(node);\n  }\n  return this;\n}\n\nfunction node_sum(value) {\n  return this.eachAfter(function(node) {\n    var sum = +value(node.data) || 0,\n        children = node.children,\n        i = children && children.length;\n    while (--i >= 0) sum += children[i].value;\n    node.value = sum;\n  });\n}\n\nfunction node_sort(compare) {\n  return this.eachBefore(function(node) {\n    if (node.children) {\n      node.children.sort(compare);\n    }\n  });\n}\n\nfunction node_path(end) {\n  var start = this,\n      ancestor = leastCommonAncestor(start, end),\n      nodes = [start];\n  while (start !== ancestor) {\n    start = start.parent;\n    nodes.push(start);\n  }\n  var k = nodes.length;\n  while (end !== ancestor) {\n    nodes.splice(k, 0, end);\n    end = end.parent;\n  }\n  return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n  if (a === b) return a;\n  var aNodes = a.ancestors(),\n      bNodes = b.ancestors(),\n      c = null;\n  a = aNodes.pop();\n  b = bNodes.pop();\n  while (a === b) {\n    c = a;\n    a = aNodes.pop();\n    b = bNodes.pop();\n  }\n  return c;\n}\n\nfunction node_ancestors() {\n  var node = this, nodes = [node];\n  while (node = node.parent) {\n    nodes.push(node);\n  }\n  return nodes;\n}\n\nfunction node_descendants() {\n  var nodes = [];\n  this.each(function(node) {\n    nodes.push(node);\n  });\n  return nodes;\n}\n\nfunction node_leaves() {\n  var leaves = [];\n  this.eachBefore(function(node) {\n    if (!node.children) {\n      leaves.push(node);\n    }\n  });\n  return leaves;\n}\n\nfunction node_links() {\n  var root = this, links = [];\n  root.each(function(node) {\n    if (node !== root) { // Don’t include the root’s parent, if any.\n      links.push({source: node.parent, target: node});\n    }\n  });\n  return links;\n}\n\nfunction hierarchy(data, children) {\n  var root = new Node(data),\n      valued = +data.value && (root.value = data.value),\n      node,\n      nodes = [root],\n      child,\n      childs,\n      i,\n      n;\n\n  if (children == null) children = defaultChildren;\n\n  while (node = nodes.pop()) {\n    if (valued) node.value = +node.data.value;\n    if ((childs = children(node.data)) && (n = childs.length)) {\n      node.children = new Array(n);\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = node.children[i] = new Node(childs[i]));\n        child.parent = node;\n        child.depth = node.depth + 1;\n      }\n    }\n  }\n\n  return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n  return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n  return d.children;\n}\n\nfunction copyData(node) {\n  node.data = node.data.data;\n}\n\nfunction computeHeight(node) {\n  var height = 0;\n  do node.height = height;\n  while ((node = node.parent) && (node.height < ++height));\n}\n\nfunction Node(data) {\n  this.data = data;\n  this.depth =\n  this.height = 0;\n  this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n  constructor: Node,\n  count: node_count,\n  each: node_each,\n  eachAfter: node_eachAfter,\n  eachBefore: node_eachBefore,\n  sum: node_sum,\n  sort: node_sort,\n  path: node_path,\n  ancestors: node_ancestors,\n  descendants: node_descendants,\n  leaves: node_leaves,\n  links: node_links,\n  copy: node_copy\n};\n\nvar slice$4 = Array.prototype.slice;\n\nfunction shuffle$1(array) {\n  var m = array.length,\n      t,\n      i;\n\n  while (m) {\n    i = Math.random() * m-- | 0;\n    t = array[m];\n    array[m] = array[i];\n    array[i] = t;\n  }\n\n  return array;\n}\n\nfunction enclose(circles) {\n  var i = 0, n = (circles = shuffle$1(slice$4.call(circles))).length, B = [], p, e;\n\n  while (i < n) {\n    p = circles[i];\n    if (e && enclosesWeak(e, p)) ++i;\n    else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n  }\n\n  return e;\n}\n\nfunction extendBasis(B, p) {\n  var i, j;\n\n  if (enclosesWeakAll(p, B)) return [p];\n\n  // If we get here then B must have at least one element.\n  for (i = 0; i < B.length; ++i) {\n    if (enclosesNot(p, B[i])\n        && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n      return [B[i], p];\n    }\n  }\n\n  // If we get here then B must have at least two elements.\n  for (i = 0; i < B.length - 1; ++i) {\n    for (j = i + 1; j < B.length; ++j) {\n      if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n          && enclosesNot(encloseBasis2(B[i], p), B[j])\n          && enclosesNot(encloseBasis2(B[j], p), B[i])\n          && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n        return [B[i], B[j], p];\n      }\n    }\n  }\n\n  // If we get here then something is very wrong.\n  throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n  var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n  return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n  var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n  for (var i = 0; i < B.length; ++i) {\n    if (!enclosesWeak(a, B[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction encloseBasis(B) {\n  switch (B.length) {\n    case 1: return encloseBasis1(B[0]);\n    case 2: return encloseBasis2(B[0], B[1]);\n    case 3: return encloseBasis3(B[0], B[1], B[2]);\n  }\n}\n\nfunction encloseBasis1(a) {\n  return {\n    x: a.x,\n    y: a.y,\n    r: a.r\n  };\n}\n\nfunction encloseBasis2(a, b) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n      l = Math.sqrt(x21 * x21 + y21 * y21);\n  return {\n    x: (x1 + x2 + x21 / l * r21) / 2,\n    y: (y1 + y2 + y21 / l * r21) / 2,\n    r: (l + r1 + r2) / 2\n  };\n}\n\nfunction encloseBasis3(a, b, c) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x3 = c.x, y3 = c.y, r3 = c.r,\n      a2 = x1 - x2,\n      a3 = x1 - x3,\n      b2 = y1 - y2,\n      b3 = y1 - y3,\n      c2 = r2 - r1,\n      c3 = r3 - r1,\n      d1 = x1 * x1 + y1 * y1 - r1 * r1,\n      d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n      d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n      ab = a3 * b2 - a2 * b3,\n      xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n      xb = (b3 * c2 - b2 * c3) / ab,\n      ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n      yb = (a2 * c3 - a3 * c2) / ab,\n      A = xb * xb + yb * yb - 1,\n      B = 2 * (r1 + xa * xb + ya * yb),\n      C = xa * xa + ya * ya - r1 * r1,\n      r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n  return {\n    x: x1 + xa + xb * r,\n    y: y1 + ya + yb * r,\n    r: r\n  };\n}\n\nfunction place(b, a, c) {\n  var dx = b.x - a.x, x, a2,\n      dy = b.y - a.y, y, b2,\n      d2 = dx * dx + dy * dy;\n  if (d2) {\n    a2 = a.r + c.r, a2 *= a2;\n    b2 = b.r + c.r, b2 *= b2;\n    if (a2 > b2) {\n      x = (d2 + b2 - a2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n      c.x = b.x - x * dx - y * dy;\n      c.y = b.y - x * dy + y * dx;\n    } else {\n      x = (d2 + a2 - b2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n      c.x = a.x + x * dx - y * dy;\n      c.y = a.y + x * dy + y * dx;\n    }\n  } else {\n    c.x = a.x + c.r;\n    c.y = a.y;\n  }\n}\n\nfunction intersects(a, b) {\n  var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n  var a = node._,\n      b = node.next._,\n      ab = a.r + b.r,\n      dx = (a.x * b.r + b.x * a.r) / ab,\n      dy = (a.y * b.r + b.y * a.r) / ab;\n  return dx * dx + dy * dy;\n}\n\nfunction Node$1(circle) {\n  this._ = circle;\n  this.next = null;\n  this.previous = null;\n}\n\nfunction packEnclose(circles) {\n  if (!(n = circles.length)) return 0;\n\n  var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n  // Place the first circle.\n  a = circles[0], a.x = 0, a.y = 0;\n  if (!(n > 1)) return a.r;\n\n  // Place the second circle.\n  b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n  if (!(n > 2)) return a.r + b.r;\n\n  // Place the third circle.\n  place(b, a, c = circles[2]);\n\n  // Initialize the front-chain using the first three circles a, b and c.\n  a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);\n  a.next = c.previous = b;\n  b.next = a.previous = c;\n  c.next = b.previous = a;\n\n  // Attempt to place each remaining circle…\n  pack: for (i = 3; i < n; ++i) {\n    place(a._, b._, c = circles[i]), c = new Node$1(c);\n\n    // Find the closest intersecting circle on the front-chain, if any.\n    // “Closeness” is determined by linear distance along the front-chain.\n    // “Ahead” or “behind” is likewise determined by linear distance.\n    j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n    do {\n      if (sj <= sk) {\n        if (intersects(j._, c._)) {\n          b = j, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sj += j._.r, j = j.next;\n      } else {\n        if (intersects(k._, c._)) {\n          a = k, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sk += k._.r, k = k.previous;\n      }\n    } while (j !== k.next);\n\n    // Success! Insert the new circle c between a and b.\n    c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n    // Compute the new closest circle pair to the centroid.\n    aa = score(a);\n    while ((c = c.next) !== b) {\n      if ((ca = score(c)) < aa) {\n        a = c, aa = ca;\n      }\n    }\n    b = a.next;\n  }\n\n  // Compute the enclosing circle of the front chain.\n  a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n  // Translate the circles to put the enclosing circle around the origin.\n  for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n  return c.r;\n}\n\nfunction siblings(circles) {\n  packEnclose(circles);\n  return circles;\n}\n\nfunction optional(f) {\n  return f == null ? null : required(f);\n}\n\nfunction required(f) {\n  if (typeof f !== \"function\") throw new Error;\n  return f;\n}\n\nfunction constantZero() {\n  return 0;\n}\n\nfunction constant$9(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction defaultRadius$1(d) {\n  return Math.sqrt(d.value);\n}\n\nfunction index$2() {\n  var radius = null,\n      dx = 1,\n      dy = 1,\n      padding = constantZero;\n\n  function pack(root) {\n    root.x = dx / 2, root.y = dy / 2;\n    if (radius) {\n      root.eachBefore(radiusLeaf(radius))\n          .eachAfter(packChildren(padding, 0.5))\n          .eachBefore(translateChild(1));\n    } else {\n      root.eachBefore(radiusLeaf(defaultRadius$1))\n          .eachAfter(packChildren(constantZero, 1))\n          .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n          .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n    }\n    return root;\n  }\n\n  pack.radius = function(x) {\n    return arguments.length ? (radius = optional(x), pack) : radius;\n  };\n\n  pack.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n  };\n\n  pack.padding = function(x) {\n    return arguments.length ? (padding = typeof x === \"function\" ? x : constant$9(+x), pack) : padding;\n  };\n\n  return pack;\n}\n\nfunction radiusLeaf(radius) {\n  return function(node) {\n    if (!node.children) {\n      node.r = Math.max(0, +radius(node) || 0);\n    }\n  };\n}\n\nfunction packChildren(padding, k) {\n  return function(node) {\n    if (children = node.children) {\n      var children,\n          i,\n          n = children.length,\n          r = padding(node) * k || 0,\n          e;\n\n      if (r) for (i = 0; i < n; ++i) children[i].r += r;\n      e = packEnclose(children);\n      if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n      node.r = e + r;\n    }\n  };\n}\n\nfunction translateChild(k) {\n  return function(node) {\n    var parent = node.parent;\n    node.r *= k;\n    if (parent) {\n      node.x = parent.x + k * node.x;\n      node.y = parent.y + k * node.y;\n    }\n  };\n}\n\nfunction roundNode(node) {\n  node.x0 = Math.round(node.x0);\n  node.y0 = Math.round(node.y0);\n  node.x1 = Math.round(node.x1);\n  node.y1 = Math.round(node.y1);\n}\n\nfunction treemapDice(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      node,\n      i = -1,\n      n = nodes.length,\n      k = parent.value && (x1 - x0) / parent.value;\n\n  while (++i < n) {\n    node = nodes[i], node.y0 = y0, node.y1 = y1;\n    node.x0 = x0, node.x1 = x0 += node.value * k;\n  }\n}\n\nfunction partition() {\n  var dx = 1,\n      dy = 1,\n      padding = 0,\n      round = false;\n\n  function partition(root) {\n    var n = root.height + 1;\n    root.x0 =\n    root.y0 = padding;\n    root.x1 = dx;\n    root.y1 = dy / n;\n    root.eachBefore(positionNode(dy, n));\n    if (round) root.eachBefore(roundNode);\n    return root;\n  }\n\n  function positionNode(dy, n) {\n    return function(node) {\n      if (node.children) {\n        treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n      }\n      var x0 = node.x0,\n          y0 = node.y0,\n          x1 = node.x1 - padding,\n          y1 = node.y1 - padding;\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n      node.x0 = x0;\n      node.y0 = y0;\n      node.x1 = x1;\n      node.y1 = y1;\n    };\n  }\n\n  partition.round = function(x) {\n    return arguments.length ? (round = !!x, partition) : round;\n  };\n\n  partition.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n  };\n\n  partition.padding = function(x) {\n    return arguments.length ? (padding = +x, partition) : padding;\n  };\n\n  return partition;\n}\n\nvar keyPrefix$1 = \"$\", // Protect against keys like “__proto__”.\n    preroot = {depth: -1},\n    ambiguous = {};\n\nfunction defaultId(d) {\n  return d.id;\n}\n\nfunction defaultParentId(d) {\n  return d.parentId;\n}\n\nfunction stratify() {\n  var id = defaultId,\n      parentId = defaultParentId;\n\n  function stratify(data) {\n    var d,\n        i,\n        n = data.length,\n        root,\n        parent,\n        node,\n        nodes = new Array(n),\n        nodeId,\n        nodeKey,\n        nodeByKey = {};\n\n    for (i = 0; i < n; ++i) {\n      d = data[i], node = nodes[i] = new Node(d);\n      if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n        nodeKey = keyPrefix$1 + (node.id = nodeId);\n        nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;\n      }\n    }\n\n    for (i = 0; i < n; ++i) {\n      node = nodes[i], nodeId = parentId(data[i], i, data);\n      if (nodeId == null || !(nodeId += \"\")) {\n        if (root) throw new Error(\"multiple roots\");\n        root = node;\n      } else {\n        parent = nodeByKey[keyPrefix$1 + nodeId];\n        if (!parent) throw new Error(\"missing: \" + nodeId);\n        if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n        if (parent.children) parent.children.push(node);\n        else parent.children = [node];\n        node.parent = parent;\n      }\n    }\n\n    if (!root) throw new Error(\"no root\");\n    root.parent = preroot;\n    root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n    root.parent = null;\n    if (n > 0) throw new Error(\"cycle\");\n\n    return root;\n  }\n\n  stratify.id = function(x) {\n    return arguments.length ? (id = required(x), stratify) : id;\n  };\n\n  stratify.parentId = function(x) {\n    return arguments.length ? (parentId = required(x), stratify) : parentId;\n  };\n\n  return stratify;\n}\n\nfunction defaultSeparation$1(a, b) {\n  return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n//   return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n  var children = v.children;\n  return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n  var children = v.children;\n  return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n  var change = shift / (wp.i - wm.i);\n  wp.c -= change;\n  wp.s += shift;\n  wm.c += change;\n  wp.z += shift;\n  wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n  var shift = 0,\n      change = 0,\n      children = v.children,\n      i = children.length,\n      w;\n  while (--i >= 0) {\n    w = children[i];\n    w.z += shift;\n    w.m += shift;\n    shift += w.s + (change += w.c);\n  }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n  return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n  this._ = node;\n  this.parent = null;\n  this.children = null;\n  this.A = null; // default ancestor\n  this.a = this; // ancestor\n  this.z = 0; // prelim\n  this.m = 0; // mod\n  this.c = 0; // change\n  this.s = 0; // shift\n  this.t = null; // thread\n  this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n  var tree = new TreeNode(root, 0),\n      node,\n      nodes = [tree],\n      child,\n      children,\n      i,\n      n;\n\n  while (node = nodes.pop()) {\n    if (children = node._.children) {\n      node.children = new Array(n = children.length);\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n        child.parent = node;\n      }\n    }\n  }\n\n  (tree.parent = new TreeNode(null, 0)).children = [tree];\n  return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nfunction tree() {\n  var separation = defaultSeparation$1,\n      dx = 1,\n      dy = 1,\n      nodeSize = null;\n\n  function tree(root) {\n    var t = treeRoot(root);\n\n    // Compute the layout using Buchheim et al.’s algorithm.\n    t.eachAfter(firstWalk), t.parent.m = -t.z;\n    t.eachBefore(secondWalk);\n\n    // If a fixed node size is specified, scale x and y.\n    if (nodeSize) root.eachBefore(sizeNode);\n\n    // If a fixed tree size is specified, scale x and y based on the extent.\n    // Compute the left-most, right-most, and depth-most nodes for extents.\n    else {\n      var left = root,\n          right = root,\n          bottom = root;\n      root.eachBefore(function(node) {\n        if (node.x < left.x) left = node;\n        if (node.x > right.x) right = node;\n        if (node.depth > bottom.depth) bottom = node;\n      });\n      var s = left === right ? 1 : separation(left, right) / 2,\n          tx = s - left.x,\n          kx = dx / (right.x + s + tx),\n          ky = dy / (bottom.depth || 1);\n      root.eachBefore(function(node) {\n        node.x = (node.x + tx) * kx;\n        node.y = node.depth * ky;\n      });\n    }\n\n    return root;\n  }\n\n  // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n  // applied recursively to the children of v, as well as the function\n  // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n  // node v is placed to the midpoint of its outermost children.\n  function firstWalk(v) {\n    var children = v.children,\n        siblings = v.parent.children,\n        w = v.i ? siblings[v.i - 1] : null;\n    if (children) {\n      executeShifts(v);\n      var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n      if (w) {\n        v.z = w.z + separation(v._, w._);\n        v.m = v.z - midpoint;\n      } else {\n        v.z = midpoint;\n      }\n    } else if (w) {\n      v.z = w.z + separation(v._, w._);\n    }\n    v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n  }\n\n  // Computes all real x-coordinates by summing up the modifiers recursively.\n  function secondWalk(v) {\n    v._.x = v.z + v.parent.m;\n    v.m += v.parent.m;\n  }\n\n  // The core of the algorithm. Here, a new subtree is combined with the\n  // previous subtrees. Threads are used to traverse the inside and outside\n  // contours of the left and right subtree up to the highest common level. The\n  // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n  // superscript o means outside and i means inside, the subscript - means left\n  // subtree and + means right subtree. For summing up the modifiers along the\n  // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n  // nodes of the inside contours conflict, we compute the left one of the\n  // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n  // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n  // Finally, we add a new thread (if necessary).\n  function apportion(v, w, ancestor) {\n    if (w) {\n      var vip = v,\n          vop = v,\n          vim = w,\n          vom = vip.parent.children[0],\n          sip = vip.m,\n          sop = vop.m,\n          sim = vim.m,\n          som = vom.m,\n          shift;\n      while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n        vom = nextLeft(vom);\n        vop = nextRight(vop);\n        vop.a = v;\n        shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n        if (shift > 0) {\n          moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n          sip += shift;\n          sop += shift;\n        }\n        sim += vim.m;\n        sip += vip.m;\n        som += vom.m;\n        sop += vop.m;\n      }\n      if (vim && !nextRight(vop)) {\n        vop.t = vim;\n        vop.m += sim - sop;\n      }\n      if (vip && !nextLeft(vom)) {\n        vom.t = vip;\n        vom.m += sip - som;\n        ancestor = v;\n      }\n    }\n    return ancestor;\n  }\n\n  function sizeNode(node) {\n    node.x *= dx;\n    node.y = node.depth * dy;\n  }\n\n  tree.separation = function(x) {\n    return arguments.length ? (separation = x, tree) : separation;\n  };\n\n  tree.size = function(x) {\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n  };\n\n  tree.nodeSize = function(x) {\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n  };\n\n  return tree;\n}\n\nfunction treemapSlice(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      node,\n      i = -1,\n      n = nodes.length,\n      k = parent.value && (y1 - y0) / parent.value;\n\n  while (++i < n) {\n    node = nodes[i], node.x0 = x0, node.x1 = x1;\n    node.y0 = y0, node.y1 = y0 += node.value * k;\n  }\n}\n\nvar phi = (1 + Math.sqrt(5)) / 2;\n\nfunction squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n  var rows = [],\n      nodes = parent.children,\n      row,\n      nodeValue,\n      i0 = 0,\n      i1 = 0,\n      n = nodes.length,\n      dx, dy,\n      value = parent.value,\n      sumValue,\n      minValue,\n      maxValue,\n      newRatio,\n      minRatio,\n      alpha,\n      beta;\n\n  while (i0 < n) {\n    dx = x1 - x0, dy = y1 - y0;\n\n    // Find the next non-empty node.\n    do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n    minValue = maxValue = sumValue;\n    alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n    beta = sumValue * sumValue * alpha;\n    minRatio = Math.max(maxValue / beta, beta / minValue);\n\n    // Keep adding nodes while the aspect ratio maintains or improves.\n    for (; i1 < n; ++i1) {\n      sumValue += nodeValue = nodes[i1].value;\n      if (nodeValue < minValue) minValue = nodeValue;\n      if (nodeValue > maxValue) maxValue = nodeValue;\n      beta = sumValue * sumValue * alpha;\n      newRatio = Math.max(maxValue / beta, beta / minValue);\n      if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n      minRatio = newRatio;\n    }\n\n    // Position and record the row orientation.\n    rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n    if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n    else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n    value -= sumValue, i0 = i1;\n  }\n\n  return rows;\n}\n\nvar squarify = (function custom(ratio) {\n\n  function squarify(parent, x0, y0, x1, y1) {\n    squarifyRatio(ratio, parent, x0, y0, x1, y1);\n  }\n\n  squarify.ratio = function(x) {\n    return custom((x = +x) > 1 ? x : 1);\n  };\n\n  return squarify;\n})(phi);\n\nfunction index$3() {\n  var tile = squarify,\n      round = false,\n      dx = 1,\n      dy = 1,\n      paddingStack = [0],\n      paddingInner = constantZero,\n      paddingTop = constantZero,\n      paddingRight = constantZero,\n      paddingBottom = constantZero,\n      paddingLeft = constantZero;\n\n  function treemap(root) {\n    root.x0 =\n    root.y0 = 0;\n    root.x1 = dx;\n    root.y1 = dy;\n    root.eachBefore(positionNode);\n    paddingStack = [0];\n    if (round) root.eachBefore(roundNode);\n    return root;\n  }\n\n  function positionNode(node) {\n    var p = paddingStack[node.depth],\n        x0 = node.x0 + p,\n        y0 = node.y0 + p,\n        x1 = node.x1 - p,\n        y1 = node.y1 - p;\n    if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n    if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n    node.x0 = x0;\n    node.y0 = y0;\n    node.x1 = x1;\n    node.y1 = y1;\n    if (node.children) {\n      p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n      x0 += paddingLeft(node) - p;\n      y0 += paddingTop(node) - p;\n      x1 -= paddingRight(node) - p;\n      y1 -= paddingBottom(node) - p;\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n      tile(node, x0, y0, x1, y1);\n    }\n  }\n\n  treemap.round = function(x) {\n    return arguments.length ? (round = !!x, treemap) : round;\n  };\n\n  treemap.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n  };\n\n  treemap.tile = function(x) {\n    return arguments.length ? (tile = required(x), treemap) : tile;\n  };\n\n  treemap.padding = function(x) {\n    return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n  };\n\n  treemap.paddingInner = function(x) {\n    return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingInner;\n  };\n\n  treemap.paddingOuter = function(x) {\n    return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n  };\n\n  treemap.paddingTop = function(x) {\n    return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingTop;\n  };\n\n  treemap.paddingRight = function(x) {\n    return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingRight;\n  };\n\n  treemap.paddingBottom = function(x) {\n    return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingBottom;\n  };\n\n  treemap.paddingLeft = function(x) {\n    return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingLeft;\n  };\n\n  return treemap;\n}\n\nfunction binary(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      i, n = nodes.length,\n      sum, sums = new Array(n + 1);\n\n  for (sums[0] = sum = i = 0; i < n; ++i) {\n    sums[i + 1] = sum += nodes[i].value;\n  }\n\n  partition(0, n, parent.value, x0, y0, x1, y1);\n\n  function partition(i, j, value, x0, y0, x1, y1) {\n    if (i >= j - 1) {\n      var node = nodes[i];\n      node.x0 = x0, node.y0 = y0;\n      node.x1 = x1, node.y1 = y1;\n      return;\n    }\n\n    var valueOffset = sums[i],\n        valueTarget = (value / 2) + valueOffset,\n        k = i + 1,\n        hi = j - 1;\n\n    while (k < hi) {\n      var mid = k + hi >>> 1;\n      if (sums[mid] < valueTarget) k = mid + 1;\n      else hi = mid;\n    }\n\n    if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n    var valueLeft = sums[k] - valueOffset,\n        valueRight = value - valueLeft;\n\n    if ((x1 - x0) > (y1 - y0)) {\n      var xk = (x0 * valueRight + x1 * valueLeft) / value;\n      partition(i, k, valueLeft, x0, y0, xk, y1);\n      partition(k, j, valueRight, xk, y0, x1, y1);\n    } else {\n      var yk = (y0 * valueRight + y1 * valueLeft) / value;\n      partition(i, k, valueLeft, x0, y0, x1, yk);\n      partition(k, j, valueRight, x0, yk, x1, y1);\n    }\n  }\n}\n\nfunction sliceDice(parent, x0, y0, x1, y1) {\n  (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);\n}\n\nvar resquarify = (function custom(ratio) {\n\n  function resquarify(parent, x0, y0, x1, y1) {\n    if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n      var rows,\n          row,\n          nodes,\n          i,\n          j = -1,\n          n,\n          m = rows.length,\n          value = parent.value;\n\n      while (++j < m) {\n        row = rows[j], nodes = row.children;\n        for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n        if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n        else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n        value -= row.value;\n      }\n    } else {\n      parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n      rows.ratio = ratio;\n    }\n  }\n\n  resquarify.ratio = function(x) {\n    return custom((x = +x) > 1 ? x : 1);\n  };\n\n  return resquarify;\n})(phi);\n\nfunction area$2(polygon) {\n  var i = -1,\n      n = polygon.length,\n      a,\n      b = polygon[n - 1],\n      area = 0;\n\n  while (++i < n) {\n    a = b;\n    b = polygon[i];\n    area += a[1] * b[0] - a[0] * b[1];\n  }\n\n  return area / 2;\n}\n\nfunction centroid$1(polygon) {\n  var i = -1,\n      n = polygon.length,\n      x = 0,\n      y = 0,\n      a,\n      b = polygon[n - 1],\n      c,\n      k = 0;\n\n  while (++i < n) {\n    a = b;\n    b = polygon[i];\n    k += c = a[0] * b[1] - b[0] * a[1];\n    x += (a[0] + b[0]) * c;\n    y += (a[1] + b[1]) * c;\n  }\n\n  return k *= 3, [x / k, y / k];\n}\n\n// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of\n// the 3D cross product in a quadrant I Cartesian coordinate system (+x is\n// right, +y is up). Returns a positive value if ABC is counter-clockwise,\n// negative if clockwise, and zero if the points are collinear.\nfunction cross$1(a, b, c) {\n  return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n}\n\nfunction lexicographicOrder(a, b) {\n  return a[0] - b[0] || a[1] - b[1];\n}\n\n// Computes the upper convex hull per the monotone chain algorithm.\n// Assumes points.length >= 3, is sorted by x, unique in y.\n// Returns an array of indices into points in left-to-right order.\nfunction computeUpperHullIndexes(points) {\n  var n = points.length,\n      indexes = [0, 1],\n      size = 2;\n\n  for (var i = 2; i < n; ++i) {\n    while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;\n    indexes[size++] = i;\n  }\n\n  return indexes.slice(0, size); // remove popped points\n}\n\nfunction hull(points) {\n  if ((n = points.length) < 3) return null;\n\n  var i,\n      n,\n      sortedPoints = new Array(n),\n      flippedPoints = new Array(n);\n\n  for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];\n  sortedPoints.sort(lexicographicOrder);\n  for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];\n\n  var upperIndexes = computeUpperHullIndexes(sortedPoints),\n      lowerIndexes = computeUpperHullIndexes(flippedPoints);\n\n  // Construct the hull polygon, removing possible duplicate endpoints.\n  var skipLeft = lowerIndexes[0] === upperIndexes[0],\n      skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],\n      hull = [];\n\n  // Add upper hull in right-to-l order.\n  // Then add lower hull in left-to-right order.\n  for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);\n  for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);\n\n  return hull;\n}\n\nfunction contains$2(polygon, point) {\n  var n = polygon.length,\n      p = polygon[n - 1],\n      x = point[0], y = point[1],\n      x0 = p[0], y0 = p[1],\n      x1, y1,\n      inside = false;\n\n  for (var i = 0; i < n; ++i) {\n    p = polygon[i], x1 = p[0], y1 = p[1];\n    if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;\n    x0 = x1, y0 = y1;\n  }\n\n  return inside;\n}\n\nfunction length$2(polygon) {\n  var i = -1,\n      n = polygon.length,\n      b = polygon[n - 1],\n      xa,\n      ya,\n      xb = b[0],\n      yb = b[1],\n      perimeter = 0;\n\n  while (++i < n) {\n    xa = xb;\n    ya = yb;\n    b = polygon[i];\n    xb = b[0];\n    yb = b[1];\n    xa -= xb;\n    ya -= yb;\n    perimeter += Math.sqrt(xa * xa + ya * ya);\n  }\n\n  return perimeter;\n}\n\nfunction defaultSource$1() {\n  return Math.random();\n}\n\nvar uniform = (function sourceRandomUniform(source) {\n  function randomUniform(min, max) {\n    min = min == null ? 0 : +min;\n    max = max == null ? 1 : +max;\n    if (arguments.length === 1) max = min, min = 0;\n    else max -= min;\n    return function() {\n      return source() * max + min;\n    };\n  }\n\n  randomUniform.source = sourceRandomUniform;\n\n  return randomUniform;\n})(defaultSource$1);\n\nvar normal = (function sourceRandomNormal(source) {\n  function randomNormal(mu, sigma) {\n    var x, r;\n    mu = mu == null ? 0 : +mu;\n    sigma = sigma == null ? 1 : +sigma;\n    return function() {\n      var y;\n\n      // If available, use the second previously-generated uniform random.\n      if (x != null) y = x, x = null;\n\n      // Otherwise, generate a new x and y.\n      else do {\n        x = source() * 2 - 1;\n        y = source() * 2 - 1;\n        r = x * x + y * y;\n      } while (!r || r > 1);\n\n      return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n    };\n  }\n\n  randomNormal.source = sourceRandomNormal;\n\n  return randomNormal;\n})(defaultSource$1);\n\nvar logNormal = (function sourceRandomLogNormal(source) {\n  function randomLogNormal() {\n    var randomNormal = normal.source(source).apply(this, arguments);\n    return function() {\n      return Math.exp(randomNormal());\n    };\n  }\n\n  randomLogNormal.source = sourceRandomLogNormal;\n\n  return randomLogNormal;\n})(defaultSource$1);\n\nvar irwinHall = (function sourceRandomIrwinHall(source) {\n  function randomIrwinHall(n) {\n    return function() {\n      for (var sum = 0, i = 0; i < n; ++i) sum += source();\n      return sum;\n    };\n  }\n\n  randomIrwinHall.source = sourceRandomIrwinHall;\n\n  return randomIrwinHall;\n})(defaultSource$1);\n\nvar bates = (function sourceRandomBates(source) {\n  function randomBates(n) {\n    var randomIrwinHall = irwinHall.source(source)(n);\n    return function() {\n      return randomIrwinHall() / n;\n    };\n  }\n\n  randomBates.source = sourceRandomBates;\n\n  return randomBates;\n})(defaultSource$1);\n\nvar exponential$1 = (function sourceRandomExponential(source) {\n  function randomExponential(lambda) {\n    return function() {\n      return -Math.log(1 - source()) / lambda;\n    };\n  }\n\n  randomExponential.source = sourceRandomExponential;\n\n  return randomExponential;\n})(defaultSource$1);\n\nfunction initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nfunction initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.interpolator(domain); break;\n    default: this.interpolator(interpolator).domain(domain); break;\n  }\n  return this;\n}\n\nvar array$3 = Array.prototype;\n\nvar map$2 = array$3.map;\nvar slice$5 = array$3.slice;\n\nvar implicit = {name: \"implicit\"};\n\nfunction ordinal() {\n  var index = map$1(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    var key = d + \"\", i = index.get(key);\n    if (!i) {\n      if (unknown !== implicit) return unknown;\n      index.set(key, i = domain.push(d));\n    }\n    return range[(i - 1) % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = map$1();\n    var i = -1, n = _.length, d, key;\n    while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice$5.call(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nfunction band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      range$$1 = [0, 1],\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = range$$1[1] < range$$1[0],\n        start = range$$1[reverse - 0],\n        stop = range$$1[1 - reverse];\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range$$1 = [+_[0], +_[1]], round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), range$$1)\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nfunction point$1() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n\nfunction constant$a(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction number$2(x) {\n  return +x;\n}\n\nvar unit = [0, 1];\n\nfunction identity$6(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant$a(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(domain) {\n  var a = domain[0], b = domain[domain.length - 1], t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate$$1) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate$$1(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate$$1(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate$$1) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate$$1(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisectRight(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nfunction copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nfunction transformer$1() {\n  var domain = unit,\n      range = unit,\n      interpolate$$1 = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity$6,\n      piecewise$$1,\n      output,\n      input;\n\n  function rescale() {\n    piecewise$$1 = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (output || (output = piecewise$$1(domain.map(transform), range, interpolate$$1)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise$$1(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = map$2.call(_, number$2), clamp === identity$6 || (clamp = clamper(domain)), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice$5.call(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = slice$5.call(_), interpolate$$1 = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? clamper(domain) : identity$6, scale) : clamp !== identity$6;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nfunction continuous(transform, untransform) {\n  return transformer$1()(transform, untransform);\n}\n\nfunction tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return exports.formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return exports.format(specifier);\n}\n\nfunction linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain(),\n        i0 = 0,\n        i1 = d.length - 1,\n        start = d[i0],\n        stop = d[i1],\n        step;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n\n    step = tickIncrement(start, stop, count);\n\n    if (step > 0) {\n      start = Math.floor(start / step) * step;\n      stop = Math.ceil(stop / step) * step;\n      step = tickIncrement(start, stop, count);\n    } else if (step < 0) {\n      start = Math.ceil(start * step) / step;\n      stop = Math.floor(stop * step) / step;\n      step = tickIncrement(start, stop, count);\n    }\n\n    if (step > 0) {\n      d[i0] = Math.floor(start / step) * step;\n      d[i1] = Math.ceil(stop / step) * step;\n      domain(d);\n    } else if (step < 0) {\n      d[i0] = Math.ceil(start * step) / step;\n      d[i1] = Math.floor(stop * step) / step;\n      domain(d);\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nfunction linear$2() {\n  var scale = continuous(identity$6, identity$6);\n\n  scale.copy = function() {\n    return copy(scale, linear$2());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n\nfunction identity$7(domain) {\n  var unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : x;\n  }\n\n  scale.invert = scale;\n\n  scale.domain = scale.range = function(_) {\n    return arguments.length ? (domain = map$2.call(_, number$2), scale) : domain.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return identity$7(domain).unknown(unknown);\n  };\n\n  domain = arguments.length ? map$2.call(domain, number$2) : [0, 1];\n\n  return linearish(scale);\n}\n\nfunction nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n  return function(x) {\n    return -f(-x);\n  };\n}\n\nfunction loggish(transform) {\n  var scale = transform(transformLog, transformExp),\n      domain = scale.domain,\n      base = 10,\n      logs,\n      pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = function(count) {\n    var d = domain(),\n        u = d[0],\n        v = d[d.length - 1],\n        r;\n\n    if (r = v < u) i = u, u = v, v = i;\n\n    var i = logs(u),\n        j = logs(v),\n        p,\n        k,\n        t,\n        n = count == null ? 10 : +count,\n        z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.round(i) - 1, j = Math.round(j) + 1;\n      if (u > 0) for (; i < j; ++i) {\n        for (k = 1, p = pows(i); k < base; ++k) {\n          t = p * k;\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i < j; ++i) {\n        for (k = base - 1, p = pows(i); k >= 1; --k) {\n          t = p * k;\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n    if (typeof specifier !== \"function\") specifier = exports.format(specifier);\n    if (count === Infinity) return specifier;\n    if (count == null) count = 10;\n    var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return function(d) {\n      var i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = function() {\n    return domain(nice(domain(), {\n      floor: function(x) { return pows(Math.floor(logs(x))); },\n      ceil: function(x) { return pows(Math.ceil(logs(x))); }\n    }));\n  };\n\n  return scale;\n}\n\nfunction log$1() {\n  var scale = loggish(transformer$1()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, log$1()).base(scale.base());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nfunction transformSymlog(c) {\n  return function(x) {\n    return Math.sign(x) * Math.log1p(Math.abs(x / c));\n  };\n}\n\nfunction transformSymexp(c) {\n  return function(x) {\n    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n  };\n}\n\nfunction symlogish(transform) {\n  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n  scale.constant = function(_) {\n    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n  };\n\n  return linearish(scale);\n}\n\nfunction symlog() {\n  var scale = symlogish(transformer$1());\n\n  scale.copy = function() {\n    return copy(scale, symlog()).constant(scale.constant());\n  };\n\n  return initRange.apply(scale, arguments);\n}\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nfunction powish(transform) {\n  var scale = transform(identity$6, identity$6),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity$6, identity$6)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nfunction pow$1() {\n  var scale = powish(transformer$1());\n\n  scale.copy = function() {\n    return copy(scale, pow$1()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nfunction sqrt$1() {\n  return pow$1.apply(null, arguments).exponent(0.5);\n}\n\nfunction quantile$$1() {\n  var domain = [],\n      range = [],\n      thresholds = [],\n      unknown;\n\n  function rescale() {\n    var i = 0, n = Math.max(1, range.length);\n    thresholds = new Array(n - 1);\n    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n    return scale;\n  }\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : range[bisectRight(thresholds, x)];\n  }\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN] : [\n      i > 0 ? thresholds[i - 1] : domain[0],\n      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n    ];\n  };\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return rescale();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice$5.call(_), rescale()) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.quantiles = function() {\n    return thresholds.slice();\n  };\n\n  scale.copy = function() {\n    return quantile$$1()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n\nfunction quantize$1() {\n  var x0 = 0,\n      x1 = 1,\n      n = 1,\n      domain = [0.5],\n      range = [0, 1],\n      unknown;\n\n  function scale(x) {\n    return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown;\n  }\n\n  function rescale() {\n    var i = -1;\n    domain = new Array(n);\n    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n    return scale;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (n = (range = slice$5.call(_)).length - 1, rescale()) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN]\n        : i < 1 ? [x0, domain[0]]\n        : i >= n ? [domain[n - 1], x1]\n        : [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : scale;\n  };\n\n  scale.thresholds = function() {\n    return domain.slice();\n  };\n\n  scale.copy = function() {\n    return quantize$1()\n        .domain([x0, x1])\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(linearish(scale), arguments);\n}\n\nfunction threshold$1() {\n  var domain = [0.5],\n      range = [0, 1],\n      unknown,\n      n = 1;\n\n  function scale(x) {\n    return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = slice$5.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice$5.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return threshold$1()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n\nvar t0$1 = new Date,\n    t1$1 = new Date;\n\nfunction newInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = new Date(+date)), date;\n  }\n\n  interval.floor = interval;\n\n  interval.ceil = function(date) {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = function(date) {\n    var d0 = interval(date),\n        d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = function(date, step) {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = function(start, stop, step) {\n    var range = [], previous;\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = function(test) {\n    return newInterval(function(date) {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, function(date, step) {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = function(start, end) {\n      t0$1.setTime(+start), t1$1.setTime(+end);\n      floori(t0$1), floori(t1$1);\n      return Math.floor(count(t0$1, t1$1));\n    };\n\n    interval.every = function(step) {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? function(d) { return field(d) % step === 0; }\n              : function(d) { return interval.count(0, d) % step === 0; });\n    };\n  }\n\n  return interval;\n}\n\nvar millisecond = newInterval(function() {\n  // noop\n}, function(date, step) {\n  date.setTime(+date + step);\n}, function(start, end) {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return newInterval(function(date) {\n    date.setTime(Math.floor(date / k) * k);\n  }, function(date, step) {\n    date.setTime(+date + step * k);\n  }, function(start, end) {\n    return (end - start) / k;\n  });\n};\nvar milliseconds = millisecond.range;\n\nvar durationSecond = 1e3;\nvar durationMinute = 6e4;\nvar durationHour = 36e5;\nvar durationDay = 864e5;\nvar durationWeek = 6048e5;\n\nvar second = newInterval(function(date) {\n  date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n  date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n  return (end - start) / durationSecond;\n}, function(date) {\n  return date.getUTCSeconds();\n});\nvar seconds = second.range;\n\nvar minute = newInterval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getMinutes();\n});\nvar minutes = minute.range;\n\nvar hour = newInterval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getHours();\n});\nvar hours = hour.range;\n\nvar day = newInterval(function(date) {\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setDate(date.getDate() + step);\n}, function(start, end) {\n  return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n  return date.getDate() - 1;\n});\nvar days = day.range;\n\nfunction weekday(i) {\n  return newInterval(function(date) {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step * 7);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nvar sunday = weekday(0);\nvar monday = weekday(1);\nvar tuesday = weekday(2);\nvar wednesday = weekday(3);\nvar thursday = weekday(4);\nvar friday = weekday(5);\nvar saturday = weekday(6);\n\nvar sundays = sunday.range;\nvar mondays = monday.range;\nvar tuesdays = tuesday.range;\nvar wednesdays = wednesday.range;\nvar thursdays = thursday.range;\nvar fridays = friday.range;\nvar saturdays = saturday.range;\n\nvar month = newInterval(function(date) {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n  return date.getMonth();\n});\nvar months = month.range;\n\nvar year = newInterval(function(date) {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n  return end.getFullYear() - start.getFullYear();\n}, function(date) {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\nvar years = year.range;\n\nvar utcMinute = newInterval(function(date) {\n  date.setUTCSeconds(0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getUTCMinutes();\n});\nvar utcMinutes = utcMinute.range;\n\nvar utcHour = newInterval(function(date) {\n  date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getUTCHours();\n});\nvar utcHours = utcHour.range;\n\nvar utcDay = newInterval(function(date) {\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n  return (end - start) / durationDay;\n}, function(date) {\n  return date.getUTCDate() - 1;\n});\nvar utcDays = utcDay.range;\n\nfunction utcWeekday(i) {\n  return newInterval(function(date) {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, function(start, end) {\n    return (end - start) / durationWeek;\n  });\n}\n\nvar utcSunday = utcWeekday(0);\nvar utcMonday = utcWeekday(1);\nvar utcTuesday = utcWeekday(2);\nvar utcWednesday = utcWeekday(3);\nvar utcThursday = utcWeekday(4);\nvar utcFriday = utcWeekday(5);\nvar utcSaturday = utcWeekday(6);\n\nvar utcSundays = utcSunday.range;\nvar utcMondays = utcMonday.range;\nvar utcTuesdays = utcTuesday.range;\nvar utcWednesdays = utcWednesday.range;\nvar utcThursdays = utcThursday.range;\nvar utcFridays = utcFriday.range;\nvar utcSaturdays = utcSaturday.range;\n\nvar utcMonth = newInterval(function(date) {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n  return date.getUTCMonth();\n});\nvar utcMonths = utcMonth.range;\n\nvar utcYear = newInterval(function(date) {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\nvar utcYears = utcYear.range;\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n  return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nfunction formatLocale$1(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear$1,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, newDate) {\n    return function(string) {\n      var d = newYear(1900),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day$$1;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newYear(d.y)), day$$1 = week.getUTCDay();\n          week = day$$1 > 4 || day$$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = newDate(newYear(d.y)), day$$1 = week.getDay();\n          week = day$$1 > 4 || day$$1 === 0 ? monday.ceil(week) : monday(week);\n          week = day.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day$$1 = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day$$1 + 5) % 7 : d.w + d.U * 7 - (day$$1 + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return newDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", localDate);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier, utcDate);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad$1(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  var map = {}, i = -1, n = names.length;\n  while (++i < n) map[names[i].toLowerCase()] = i;\n  return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad$1(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad$1(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad$1(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad$1(1 + day.count(year(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad$1(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad$1(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad$1(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad$1(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day$$1 = d.getDay();\n  return day$$1 === 0 ? 7 : day$$1;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad$1(sunday.count(year(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  var day$$1 = d.getDay();\n  d = (day$$1 >= 4 || day$$1 === 0) ? thursday(d) : thursday.ceil(d);\n  return pad$1(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad$1(monday.count(year(d), d), p, 2);\n}\n\nfunction formatYear$1(d, p) {\n  return pad$1(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad$1(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad$1(z / 60 | 0, \"0\", 2)\n      + pad$1(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad$1(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad$1(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad$1(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad$1(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad$1(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad$1(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad$1(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad$1(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad$1(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  var day$$1 = d.getUTCDay();\n  d = (day$$1 >= 4 || day$$1 === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad$1(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad$1(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad$1(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad$1(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n\nvar locale$1;\n\ndefaultLocale$1({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nfunction defaultLocale$1(definition) {\n  locale$1 = formatLocale$1(definition);\n  exports.timeFormat = locale$1.format;\n  exports.timeParse = locale$1.parse;\n  exports.utcFormat = locale$1.utcFormat;\n  exports.utcParse = locale$1.utcParse;\n  return locale$1;\n}\n\nvar isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n  return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n    ? formatIsoNative\n    : exports.utcFormat(isoSpecifier);\n\nfunction parseIsoNative(string) {\n  var date = new Date(string);\n  return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n    ? parseIsoNative\n    : exports.utcParse(isoSpecifier);\n\nvar durationSecond$1 = 1000,\n    durationMinute$1 = durationSecond$1 * 60,\n    durationHour$1 = durationMinute$1 * 60,\n    durationDay$1 = durationHour$1 * 24,\n    durationWeek$1 = durationDay$1 * 7,\n    durationMonth = durationDay$1 * 30,\n    durationYear = durationDay$1 * 365;\n\nfunction date$1(t) {\n  return new Date(t);\n}\n\nfunction number$3(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nfunction calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format) {\n  var scale = continuous(identity$6, identity$6),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  var tickIntervals = [\n    [second$$1,  1,      durationSecond$1],\n    [second$$1,  5,  5 * durationSecond$1],\n    [second$$1, 15, 15 * durationSecond$1],\n    [second$$1, 30, 30 * durationSecond$1],\n    [minute$$1,  1,      durationMinute$1],\n    [minute$$1,  5,  5 * durationMinute$1],\n    [minute$$1, 15, 15 * durationMinute$1],\n    [minute$$1, 30, 30 * durationMinute$1],\n    [  hour$$1,  1,      durationHour$1  ],\n    [  hour$$1,  3,  3 * durationHour$1  ],\n    [  hour$$1,  6,  6 * durationHour$1  ],\n    [  hour$$1, 12, 12 * durationHour$1  ],\n    [   day$$1,  1,      durationDay$1   ],\n    [   day$$1,  2,  2 * durationDay$1   ],\n    [  week,  1,      durationWeek$1  ],\n    [ month$$1,  1,      durationMonth ],\n    [ month$$1,  3,  3 * durationMonth ],\n    [  year$$1,  1,      durationYear  ]\n  ];\n\n  function tickFormat(date) {\n    return (second$$1(date) < date ? formatMillisecond\n        : minute$$1(date) < date ? formatSecond\n        : hour$$1(date) < date ? formatMinute\n        : day$$1(date) < date ? formatHour\n        : month$$1(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year$$1(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  function tickInterval(interval, start, stop, step) {\n    if (interval == null) interval = 10;\n\n    // If a desired tick count is specified, pick a reasonable tick interval\n    // based on the extent of the domain and a rough estimate of tick size.\n    // Otherwise, assume interval is already a time interval and use it.\n    if (typeof interval === \"number\") {\n      var target = Math.abs(stop - start) / interval,\n          i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n      if (i === tickIntervals.length) {\n        step = tickStep(start / durationYear, stop / durationYear, interval);\n        interval = year$$1;\n      } else if (i) {\n        i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n        step = i[1];\n        interval = i[0];\n      } else {\n        step = Math.max(tickStep(start, stop, interval), 1);\n        interval = millisecond$$1;\n      }\n    }\n\n    return step == null ? interval : interval.every(step);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(map$2.call(_, number$3)) : domain().map(date$1);\n  };\n\n  scale.ticks = function(interval, step) {\n    var d = domain(),\n        t0 = d[0],\n        t1 = d[d.length - 1],\n        r = t1 < t0,\n        t;\n    if (r) t = t0, t0 = t1, t1 = t;\n    t = tickInterval(interval, t0, t1, step);\n    t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n    return r ? t.reverse() : t;\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval, step) {\n    var d = domain();\n    return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n        ? domain(nice(d, interval))\n        : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format));\n  };\n\n  return scale;\n}\n\nfunction time() {\n  return initRange.apply(calendar(year, month, sunday, day, hour, minute, second, millisecond, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n\nfunction utcTime() {\n  return initRange.apply(calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n\nfunction transformer$2() {\n  var x0 = 0,\n      x1 = 1,\n      t0,\n      t1,\n      k10,\n      transform,\n      interpolator = identity$6,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n    return scale;\n  };\n}\n\nfunction copy$1(source, target) {\n  return target\n      .domain(source.domain())\n      .interpolator(source.interpolator())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nfunction sequential() {\n  var scale = linearish(transformer$2()(identity$6));\n\n  scale.copy = function() {\n    return copy$1(scale, sequential());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialLog() {\n  var scale = loggish(transformer$2()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy$1(scale, sequentialLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialSymlog() {\n  var scale = symlogish(transformer$2());\n\n  scale.copy = function() {\n    return copy$1(scale, sequentialSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialPow() {\n  var scale = powish(transformer$2());\n\n  scale.copy = function() {\n    return copy$1(scale, sequentialPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialSqrt() {\n  return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n\nfunction sequentialQuantile() {\n  var domain = [],\n      interpolator = identity$6;\n\n  function scale(x) {\n    if (!isNaN(x = +x)) return interpolator((bisectRight(domain, x) - 1) / (domain.length - 1));\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return scale;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.copy = function() {\n    return sequentialQuantile(interpolator).domain(domain);\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction transformer$3() {\n  var x0 = 0,\n      x1 = 0.5,\n      x2 = 1,\n      t0,\n      t1,\n      t2,\n      k10,\n      k21,\n      interpolator = identity$6,\n      transform,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), t2 = transform(x2 = +_[2]), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1);\n    return scale;\n  };\n}\n\nfunction diverging() {\n  var scale = linearish(transformer$3()(identity$6));\n\n  scale.copy = function() {\n    return copy$1(scale, diverging());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingLog() {\n  var scale = loggish(transformer$3()).domain([0.1, 1, 10]);\n\n  scale.copy = function() {\n    return copy$1(scale, divergingLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingSymlog() {\n  var scale = symlogish(transformer$3());\n\n  scale.copy = function() {\n    return copy$1(scale, divergingSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingPow() {\n  var scale = powish(transformer$3());\n\n  scale.copy = function() {\n    return copy$1(scale, divergingPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingSqrt() {\n  return divergingPow.apply(null, arguments).exponent(0.5);\n}\n\nfunction colors(specifier) {\n  var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n  while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n  return colors;\n}\n\nvar category10 = colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n\nvar Accent = colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n\nvar Dark2 = colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n\nvar Paired = colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n\nvar Pastel1 = colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n\nvar Pastel2 = colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n\nvar Set1 = colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n\nvar Set2 = colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n\nvar Set3 = colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n\nfunction ramp(scheme) {\n  return rgbBasis(scheme[scheme.length - 1]);\n}\n\nvar scheme = new Array(3).concat(\n  \"d8b365f5f5f55ab4ac\",\n  \"a6611adfc27d80cdc1018571\",\n  \"a6611adfc27df5f5f580cdc1018571\",\n  \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n  \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n  \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n  \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n  \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n  \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nvar BrBG = ramp(scheme);\n\nvar scheme$1 = new Array(3).concat(\n  \"af8dc3f7f7f77fbf7b\",\n  \"7b3294c2a5cfa6dba0008837\",\n  \"7b3294c2a5cff7f7f7a6dba0008837\",\n  \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n  \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n  \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n  \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n  \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n  \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nvar PRGn = ramp(scheme$1);\n\nvar scheme$2 = new Array(3).concat(\n  \"e9a3c9f7f7f7a1d76a\",\n  \"d01c8bf1b6dab8e1864dac26\",\n  \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n  \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n  \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n  \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n  \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n  \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n  \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nvar PiYG = ramp(scheme$2);\n\nvar scheme$3 = new Array(3).concat(\n  \"998ec3f7f7f7f1a340\",\n  \"5e3c99b2abd2fdb863e66101\",\n  \"5e3c99b2abd2f7f7f7fdb863e66101\",\n  \"542788998ec3d8daebfee0b6f1a340b35806\",\n  \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n  \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n  \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n  \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n  \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nvar PuOr = ramp(scheme$3);\n\nvar scheme$4 = new Array(3).concat(\n  \"ef8a62f7f7f767a9cf\",\n  \"ca0020f4a58292c5de0571b0\",\n  \"ca0020f4a582f7f7f792c5de0571b0\",\n  \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n  \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n  \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n  \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n  \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n  \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nvar RdBu = ramp(scheme$4);\n\nvar scheme$5 = new Array(3).concat(\n  \"ef8a62ffffff999999\",\n  \"ca0020f4a582bababa404040\",\n  \"ca0020f4a582ffffffbababa404040\",\n  \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n  \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n  \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n  \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n  \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n  \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nvar RdGy = ramp(scheme$5);\n\nvar scheme$6 = new Array(3).concat(\n  \"fc8d59ffffbf91bfdb\",\n  \"d7191cfdae61abd9e92c7bb6\",\n  \"d7191cfdae61ffffbfabd9e92c7bb6\",\n  \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n  \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n  \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n  \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n  \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n  \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nvar RdYlBu = ramp(scheme$6);\n\nvar scheme$7 = new Array(3).concat(\n  \"fc8d59ffffbf91cf60\",\n  \"d7191cfdae61a6d96a1a9641\",\n  \"d7191cfdae61ffffbfa6d96a1a9641\",\n  \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n  \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n  \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n  \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n  \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n  \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nvar RdYlGn = ramp(scheme$7);\n\nvar scheme$8 = new Array(3).concat(\n  \"fc8d59ffffbf99d594\",\n  \"d7191cfdae61abdda42b83ba\",\n  \"d7191cfdae61ffffbfabdda42b83ba\",\n  \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n  \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n  \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n  \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n  \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n  \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nvar Spectral = ramp(scheme$8);\n\nvar scheme$9 = new Array(3).concat(\n  \"e5f5f999d8c92ca25f\",\n  \"edf8fbb2e2e266c2a4238b45\",\n  \"edf8fbb2e2e266c2a42ca25f006d2c\",\n  \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n  \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nvar BuGn = ramp(scheme$9);\n\nvar scheme$a = new Array(3).concat(\n  \"e0ecf49ebcda8856a7\",\n  \"edf8fbb3cde38c96c688419d\",\n  \"edf8fbb3cde38c96c68856a7810f7c\",\n  \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n  \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nvar BuPu = ramp(scheme$a);\n\nvar scheme$b = new Array(3).concat(\n  \"e0f3dba8ddb543a2ca\",\n  \"f0f9e8bae4bc7bccc42b8cbe\",\n  \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n  \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n  \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nvar GnBu = ramp(scheme$b);\n\nvar scheme$c = new Array(3).concat(\n  \"fee8c8fdbb84e34a33\",\n  \"fef0d9fdcc8afc8d59d7301f\",\n  \"fef0d9fdcc8afc8d59e34a33b30000\",\n  \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n  \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nvar OrRd = ramp(scheme$c);\n\nvar scheme$d = new Array(3).concat(\n  \"ece2f0a6bddb1c9099\",\n  \"f6eff7bdc9e167a9cf02818a\",\n  \"f6eff7bdc9e167a9cf1c9099016c59\",\n  \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n  \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nvar PuBuGn = ramp(scheme$d);\n\nvar scheme$e = new Array(3).concat(\n  \"ece7f2a6bddb2b8cbe\",\n  \"f1eef6bdc9e174a9cf0570b0\",\n  \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n  \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n  \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nvar PuBu = ramp(scheme$e);\n\nvar scheme$f = new Array(3).concat(\n  \"e7e1efc994c7dd1c77\",\n  \"f1eef6d7b5d8df65b0ce1256\",\n  \"f1eef6d7b5d8df65b0dd1c77980043\",\n  \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n  \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nvar PuRd = ramp(scheme$f);\n\nvar scheme$g = new Array(3).concat(\n  \"fde0ddfa9fb5c51b8a\",\n  \"feebe2fbb4b9f768a1ae017e\",\n  \"feebe2fbb4b9f768a1c51b8a7a0177\",\n  \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n  \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nvar RdPu = ramp(scheme$g);\n\nvar scheme$h = new Array(3).concat(\n  \"edf8b17fcdbb2c7fb8\",\n  \"ffffcca1dab441b6c4225ea8\",\n  \"ffffcca1dab441b6c42c7fb8253494\",\n  \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n  \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nvar YlGnBu = ramp(scheme$h);\n\nvar scheme$i = new Array(3).concat(\n  \"f7fcb9addd8e31a354\",\n  \"ffffccc2e69978c679238443\",\n  \"ffffccc2e69978c67931a354006837\",\n  \"ffffccd9f0a3addd8e78c67931a354006837\",\n  \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nvar YlGn = ramp(scheme$i);\n\nvar scheme$j = new Array(3).concat(\n  \"fff7bcfec44fd95f0e\",\n  \"ffffd4fed98efe9929cc4c02\",\n  \"ffffd4fed98efe9929d95f0e993404\",\n  \"ffffd4fee391fec44ffe9929d95f0e993404\",\n  \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nvar YlOrBr = ramp(scheme$j);\n\nvar scheme$k = new Array(3).concat(\n  \"ffeda0feb24cf03b20\",\n  \"ffffb2fecc5cfd8d3ce31a1c\",\n  \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n  \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n  \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nvar YlOrRd = ramp(scheme$k);\n\nvar scheme$l = new Array(3).concat(\n  \"deebf79ecae13182bd\",\n  \"eff3ffbdd7e76baed62171b5\",\n  \"eff3ffbdd7e76baed63182bd08519c\",\n  \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n  \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nvar Blues = ramp(scheme$l);\n\nvar scheme$m = new Array(3).concat(\n  \"e5f5e0a1d99b31a354\",\n  \"edf8e9bae4b374c476238b45\",\n  \"edf8e9bae4b374c47631a354006d2c\",\n  \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n  \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nvar Greens = ramp(scheme$m);\n\nvar scheme$n = new Array(3).concat(\n  \"f0f0f0bdbdbd636363\",\n  \"f7f7f7cccccc969696525252\",\n  \"f7f7f7cccccc969696636363252525\",\n  \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n  \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nvar Greys = ramp(scheme$n);\n\nvar scheme$o = new Array(3).concat(\n  \"efedf5bcbddc756bb1\",\n  \"f2f0f7cbc9e29e9ac86a51a3\",\n  \"f2f0f7cbc9e29e9ac8756bb154278f\",\n  \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n  \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nvar Purples = ramp(scheme$o);\n\nvar scheme$p = new Array(3).concat(\n  \"fee0d2fc9272de2d26\",\n  \"fee5d9fcae91fb6a4acb181d\",\n  \"fee5d9fcae91fb6a4ade2d26a50f15\",\n  \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n  \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nvar Reds = ramp(scheme$p);\n\nvar scheme$q = new Array(3).concat(\n  \"fee6cefdae6be6550d\",\n  \"feeddefdbe85fd8d3cd94701\",\n  \"feeddefdbe85fd8d3ce6550da63603\",\n  \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n  \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nvar Oranges = ramp(scheme$q);\n\nvar cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n\nvar warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nfunction rainbow(t) {\n  if (t < 0 || t > 1) t -= Math.floor(t);\n  var ts = Math.abs(t - 0.5);\n  c.h = 360 * t - 100;\n  c.s = 1.5 - 1.5 * ts;\n  c.l = 0.8 - 0.9 * ts;\n  return c + \"\";\n}\n\nvar c$1 = rgb(),\n    pi_1_3 = Math.PI / 3,\n    pi_2_3 = Math.PI * 2 / 3;\n\nfunction sinebow(t) {\n  var x;\n  t = (0.5 - t) * Math.PI;\n  c$1.r = 255 * (x = Math.sin(t)) * x;\n  c$1.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n  c$1.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n  return c$1 + \"\";\n}\n\nfunction ramp$1(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n\nvar viridis = ramp$1(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nvar magma = ramp$1(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nvar inferno = ramp$1(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nvar plasma = ramp$1(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n\nfunction constant$b(x) {\n  return function constant() {\n    return x;\n  };\n}\n\nvar abs$1 = Math.abs;\nvar atan2$1 = Math.atan2;\nvar cos$2 = Math.cos;\nvar max$2 = Math.max;\nvar min$1 = Math.min;\nvar sin$2 = Math.sin;\nvar sqrt$2 = Math.sqrt;\n\nvar epsilon$3 = 1e-12;\nvar pi$4 = Math.PI;\nvar halfPi$3 = pi$4 / 2;\nvar tau$4 = 2 * pi$4;\n\nfunction acos$1(x) {\n  return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);\n}\n\nfunction asin$1(x) {\n  return x >= 1 ? halfPi$3 : x <= -1 ? -halfPi$3 : Math.asin(x);\n}\n\nfunction arcInnerRadius(d) {\n  return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n  return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n  return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n  return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n  var x10 = x1 - x0, y10 = y1 - y0,\n      x32 = x3 - x2, y32 = y3 - y2,\n      t = y32 * x10 - x32 * y10;\n  if (t * t < epsilon$3) return;\n  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n  return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n  var x01 = x0 - x1,\n      y01 = y0 - y1,\n      lo = (cw ? rc : -rc) / sqrt$2(x01 * x01 + y01 * y01),\n      ox = lo * y01,\n      oy = -lo * x01,\n      x11 = x0 + ox,\n      y11 = y0 + oy,\n      x10 = x1 + ox,\n      y10 = y1 + oy,\n      x00 = (x11 + x10) / 2,\n      y00 = (y11 + y10) / 2,\n      dx = x10 - x11,\n      dy = y10 - y11,\n      d2 = dx * dx + dy * dy,\n      r = r1 - rc,\n      D = x11 * y10 - x10 * y11,\n      d = (dy < 0 ? -1 : 1) * sqrt$2(max$2(0, r * r * d2 - D * D)),\n      cx0 = (D * dy - dx * d) / d2,\n      cy0 = (-D * dx - dy * d) / d2,\n      cx1 = (D * dy + dx * d) / d2,\n      cy1 = (-D * dx + dy * d) / d2,\n      dx0 = cx0 - x00,\n      dy0 = cy0 - y00,\n      dx1 = cx1 - x00,\n      dy1 = cy1 - y00;\n\n  // Pick the closer of the two intersection points.\n  // TODO Is there a faster way to determine which intersection to use?\n  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n  return {\n    cx: cx0,\n    cy: cy0,\n    x01: -ox,\n    y01: -oy,\n    x11: cx0 * (r1 / r - 1),\n    y11: cy0 * (r1 / r - 1)\n  };\n}\n\nfunction arc() {\n  var innerRadius = arcInnerRadius,\n      outerRadius = arcOuterRadius,\n      cornerRadius = constant$b(0),\n      padRadius = null,\n      startAngle = arcStartAngle,\n      endAngle = arcEndAngle,\n      padAngle = arcPadAngle,\n      context = null;\n\n  function arc() {\n    var buffer,\n        r,\n        r0 = +innerRadius.apply(this, arguments),\n        r1 = +outerRadius.apply(this, arguments),\n        a0 = startAngle.apply(this, arguments) - halfPi$3,\n        a1 = endAngle.apply(this, arguments) - halfPi$3,\n        da = abs$1(a1 - a0),\n        cw = a1 > a0;\n\n    if (!context) context = buffer = path();\n\n    // Ensure that the outer radius is always larger than the inner radius.\n    if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n    // Is it a point?\n    if (!(r1 > epsilon$3)) context.moveTo(0, 0);\n\n    // Or is it a circle or annulus?\n    else if (da > tau$4 - epsilon$3) {\n      context.moveTo(r1 * cos$2(a0), r1 * sin$2(a0));\n      context.arc(0, 0, r1, a0, a1, !cw);\n      if (r0 > epsilon$3) {\n        context.moveTo(r0 * cos$2(a1), r0 * sin$2(a1));\n        context.arc(0, 0, r0, a1, a0, cw);\n      }\n    }\n\n    // Or is it a circular or annular sector?\n    else {\n      var a01 = a0,\n          a11 = a1,\n          a00 = a0,\n          a10 = a1,\n          da0 = da,\n          da1 = da,\n          ap = padAngle.apply(this, arguments) / 2,\n          rp = (ap > epsilon$3) && (padRadius ? +padRadius.apply(this, arguments) : sqrt$2(r0 * r0 + r1 * r1)),\n          rc = min$1(abs$1(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n          rc0 = rc,\n          rc1 = rc,\n          t0,\n          t1;\n\n      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n      if (rp > epsilon$3) {\n        var p0 = asin$1(rp / r0 * sin$2(ap)),\n            p1 = asin$1(rp / r1 * sin$2(ap));\n        if ((da0 -= p0 * 2) > epsilon$3) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n        else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n        if ((da1 -= p1 * 2) > epsilon$3) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n        else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n      }\n\n      var x01 = r1 * cos$2(a01),\n          y01 = r1 * sin$2(a01),\n          x10 = r0 * cos$2(a10),\n          y10 = r0 * sin$2(a10);\n\n      // Apply rounded corners?\n      if (rc > epsilon$3) {\n        var x11 = r1 * cos$2(a11),\n            y11 = r1 * sin$2(a11),\n            x00 = r0 * cos$2(a00),\n            y00 = r0 * sin$2(a00),\n            oc;\n\n        // Restrict the corner radius according to the sector angle.\n        if (da < pi$4 && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n          var ax = x01 - oc[0],\n              ay = y01 - oc[1],\n              bx = x11 - oc[0],\n              by = y11 - oc[1],\n              kc = 1 / sin$2(acos$1((ax * bx + ay * by) / (sqrt$2(ax * ax + ay * ay) * sqrt$2(bx * bx + by * by))) / 2),\n              lc = sqrt$2(oc[0] * oc[0] + oc[1] * oc[1]);\n          rc0 = min$1(rc, (r0 - lc) / (kc - 1));\n          rc1 = min$1(rc, (r1 - lc) / (kc + 1));\n        }\n      }\n\n      // Is the sector collapsed to a line?\n      if (!(da1 > epsilon$3)) context.moveTo(x01, y01);\n\n      // Does the sector’s outer ring have rounded corners?\n      else if (rc1 > epsilon$3) {\n        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r1, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n          context.arc(t1.cx, t1.cy, rc1, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the outer ring just a circular arc?\n      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n      // Is there no inner ring, and it’s a circular sector?\n      // Or perhaps it’s an annular sector collapsed due to padding?\n      if (!(r0 > epsilon$3) || !(da0 > epsilon$3)) context.lineTo(x10, y10);\n\n      // Does the sector’s inner ring (or point) have rounded corners?\n      else if (rc0 > epsilon$3) {\n        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r0, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n          context.arc(t1.cx, t1.cy, rc0, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the inner ring just a circular arc?\n      else context.arc(0, 0, r0, a10, a00, cw);\n    }\n\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  arc.centroid = function() {\n    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$4 / 2;\n    return [cos$2(a) * r, sin$2(a) * r];\n  };\n\n  arc.innerRadius = function(_) {\n    return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant$b(+_), arc) : innerRadius;\n  };\n\n  arc.outerRadius = function(_) {\n    return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant$b(+_), arc) : outerRadius;\n  };\n\n  arc.cornerRadius = function(_) {\n    return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant$b(+_), arc) : cornerRadius;\n  };\n\n  arc.padRadius = function(_) {\n    return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant$b(+_), arc) : padRadius;\n  };\n\n  arc.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$b(+_), arc) : startAngle;\n  };\n\n  arc.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$b(+_), arc) : endAngle;\n  };\n\n  arc.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant$b(+_), arc) : padAngle;\n  };\n\n  arc.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n  };\n\n  return arc;\n}\n\nfunction Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nfunction curveLinear(context) {\n  return new Linear(context);\n}\n\nfunction x$3(p) {\n  return p[0];\n}\n\nfunction y$3(p) {\n  return p[1];\n}\n\nfunction line() {\n  var x$$1 = x$3,\n      y$$1 = y$3,\n      defined = constant$b(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  function line(data) {\n    var i,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x$$1(d, i, data), +y$$1(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x$$1 = typeof _ === \"function\" ? _ : constant$b(+_), line) : x$$1;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y$$1 = typeof _ === \"function\" ? _ : constant$b(+_), line) : y$$1;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant$b(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n\nfunction area$3() {\n  var x0 = x$3,\n      x1 = null,\n      y0 = constant$b(0),\n      y1 = y$3,\n      defined = constant$b(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  function area(data) {\n    var i,\n        j,\n        k,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer,\n        x0z = new Array(n),\n        y0z = new Array(n);\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) {\n          j = i;\n          output.areaStart();\n          output.lineStart();\n        } else {\n          output.lineEnd();\n          output.lineStart();\n          for (k = i - 1; k >= j; --k) {\n            output.point(x0z[k], y0z[k]);\n          }\n          output.lineEnd();\n          output.areaEnd();\n        }\n      }\n      if (defined0) {\n        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n      }\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  function arealine() {\n    return line().defined(defined).curve(curve).context(context);\n  }\n\n  area.x = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant$b(+_), x1 = null, area) : x0;\n  };\n\n  area.x0 = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant$b(+_), area) : x0;\n  };\n\n  area.x1 = function(_) {\n    return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant$b(+_), area) : x1;\n  };\n\n  area.y = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant$b(+_), y1 = null, area) : y0;\n  };\n\n  area.y0 = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant$b(+_), area) : y0;\n  };\n\n  area.y1 = function(_) {\n    return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant$b(+_), area) : y1;\n  };\n\n  area.lineX0 =\n  area.lineY0 = function() {\n    return arealine().x(x0).y(y0);\n  };\n\n  area.lineY1 = function() {\n    return arealine().x(x0).y(y1);\n  };\n\n  area.lineX1 = function() {\n    return arealine().x(x1).y(y0);\n  };\n\n  area.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant$b(!!_), area) : defined;\n  };\n\n  area.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n  };\n\n  area.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n  };\n\n  return area;\n}\n\nfunction descending$1(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n\nfunction identity$8(d) {\n  return d;\n}\n\nfunction pie() {\n  var value = identity$8,\n      sortValues = descending$1,\n      sort = null,\n      startAngle = constant$b(0),\n      endAngle = constant$b(tau$4),\n      padAngle = constant$b(0);\n\n  function pie(data) {\n    var i,\n        n = data.length,\n        j,\n        k,\n        sum = 0,\n        index = new Array(n),\n        arcs = new Array(n),\n        a0 = +startAngle.apply(this, arguments),\n        da = Math.min(tau$4, Math.max(-tau$4, endAngle.apply(this, arguments) - a0)),\n        a1,\n        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n        pa = p * (da < 0 ? -1 : 1),\n        v;\n\n    for (i = 0; i < n; ++i) {\n      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n        sum += v;\n      }\n    }\n\n    // Optionally sort the arcs by previously-computed values or by data.\n    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n    // Compute the arcs! They are stored in the original data's order.\n    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n        data: data[j],\n        index: i,\n        value: v,\n        startAngle: a0,\n        endAngle: a1,\n        padAngle: p\n      };\n    }\n\n    return arcs;\n  }\n\n  pie.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant$b(+_), pie) : value;\n  };\n\n  pie.sortValues = function(_) {\n    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n  };\n\n  pie.sort = function(_) {\n    return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n  };\n\n  pie.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$b(+_), pie) : startAngle;\n  };\n\n  pie.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$b(+_), pie) : endAngle;\n  };\n\n  pie.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant$b(+_), pie) : padAngle;\n  };\n\n  return pie;\n}\n\nvar curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n  this._curve = curve;\n}\n\nRadial.prototype = {\n  areaStart: function() {\n    this._curve.areaStart();\n  },\n  areaEnd: function() {\n    this._curve.areaEnd();\n  },\n  lineStart: function() {\n    this._curve.lineStart();\n  },\n  lineEnd: function() {\n    this._curve.lineEnd();\n  },\n  point: function(a, r) {\n    this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n  }\n};\n\nfunction curveRadial(curve) {\n\n  function radial(context) {\n    return new Radial(curve(context));\n  }\n\n  radial._curve = curve;\n\n  return radial;\n}\n\nfunction lineRadial(l) {\n  var c = l.curve;\n\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n\n  l.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return l;\n}\n\nfunction lineRadial$1() {\n  return lineRadial(line().curve(curveRadialLinear));\n}\n\nfunction areaRadial() {\n  var a = area$3().curve(curveRadialLinear),\n      c = a.curve,\n      x0 = a.lineX0,\n      x1 = a.lineX1,\n      y0 = a.lineY0,\n      y1 = a.lineY1;\n\n  a.angle = a.x, delete a.x;\n  a.startAngle = a.x0, delete a.x0;\n  a.endAngle = a.x1, delete a.x1;\n  a.radius = a.y, delete a.y;\n  a.innerRadius = a.y0, delete a.y0;\n  a.outerRadius = a.y1, delete a.y1;\n  a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n  a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n  a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n  a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n  a.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return a;\n}\n\nfunction pointRadial(x, y) {\n  return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\n}\n\nvar slice$6 = Array.prototype.slice;\n\nfunction linkSource(d) {\n  return d.source;\n}\n\nfunction linkTarget(d) {\n  return d.target;\n}\n\nfunction link$2(curve) {\n  var source = linkSource,\n      target = linkTarget,\n      x$$1 = x$3,\n      y$$1 = y$3,\n      context = null;\n\n  function link() {\n    var buffer, argv = slice$6.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n    if (!context) context = buffer = path();\n    curve(context, +x$$1.apply(this, (argv[0] = s, argv)), +y$$1.apply(this, argv), +x$$1.apply(this, (argv[0] = t, argv)), +y$$1.apply(this, argv));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  link.source = function(_) {\n    return arguments.length ? (source = _, link) : source;\n  };\n\n  link.target = function(_) {\n    return arguments.length ? (target = _, link) : target;\n  };\n\n  link.x = function(_) {\n    return arguments.length ? (x$$1 = typeof _ === \"function\" ? _ : constant$b(+_), link) : x$$1;\n  };\n\n  link.y = function(_) {\n    return arguments.length ? (y$$1 = typeof _ === \"function\" ? _ : constant$b(+_), link) : y$$1;\n  };\n\n  link.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), link) : context;\n  };\n\n  return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n  context.moveTo(x0, y0);\n  context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n  context.moveTo(x0, y0);\n  context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial$1(context, x0, y0, x1, y1) {\n  var p0 = pointRadial(x0, y0),\n      p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n      p2 = pointRadial(x1, y0),\n      p3 = pointRadial(x1, y1);\n  context.moveTo(p0[0], p0[1]);\n  context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nfunction linkHorizontal() {\n  return link$2(curveHorizontal);\n}\n\nfunction linkVertical() {\n  return link$2(curveVertical);\n}\n\nfunction linkRadial() {\n  var l = link$2(curveRadial$1);\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n  return l;\n}\n\nvar circle$2 = {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / pi$4);\n    context.moveTo(r, 0);\n    context.arc(0, 0, r, 0, tau$4);\n  }\n};\n\nvar cross$2 = {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / 5) / 2;\n    context.moveTo(-3 * r, -r);\n    context.lineTo(-r, -r);\n    context.lineTo(-r, -3 * r);\n    context.lineTo(r, -3 * r);\n    context.lineTo(r, -r);\n    context.lineTo(3 * r, -r);\n    context.lineTo(3 * r, r);\n    context.lineTo(r, r);\n    context.lineTo(r, 3 * r);\n    context.lineTo(-r, 3 * r);\n    context.lineTo(-r, r);\n    context.lineTo(-3 * r, r);\n    context.closePath();\n  }\n};\n\nvar tan30 = Math.sqrt(1 / 3),\n    tan30_2 = tan30 * 2;\n\nvar diamond = {\n  draw: function(context, size) {\n    var y = Math.sqrt(size / tan30_2),\n        x = y * tan30;\n    context.moveTo(0, -y);\n    context.lineTo(x, 0);\n    context.lineTo(0, y);\n    context.lineTo(-x, 0);\n    context.closePath();\n  }\n};\n\nvar ka = 0.89081309152928522810,\n    kr = Math.sin(pi$4 / 10) / Math.sin(7 * pi$4 / 10),\n    kx = Math.sin(tau$4 / 10) * kr,\n    ky = -Math.cos(tau$4 / 10) * kr;\n\nvar star = {\n  draw: function(context, size) {\n    var r = Math.sqrt(size * ka),\n        x = kx * r,\n        y = ky * r;\n    context.moveTo(0, -r);\n    context.lineTo(x, y);\n    for (var i = 1; i < 5; ++i) {\n      var a = tau$4 * i / 5,\n          c = Math.cos(a),\n          s = Math.sin(a);\n      context.lineTo(s * r, -c * r);\n      context.lineTo(c * x - s * y, s * x + c * y);\n    }\n    context.closePath();\n  }\n};\n\nvar square = {\n  draw: function(context, size) {\n    var w = Math.sqrt(size),\n        x = -w / 2;\n    context.rect(x, x, w, w);\n  }\n};\n\nvar sqrt3 = Math.sqrt(3);\n\nvar triangle = {\n  draw: function(context, size) {\n    var y = -Math.sqrt(size / (sqrt3 * 3));\n    context.moveTo(0, y * 2);\n    context.lineTo(-sqrt3 * y, -y);\n    context.lineTo(sqrt3 * y, -y);\n    context.closePath();\n  }\n};\n\nvar c$2 = -0.5,\n    s = Math.sqrt(3) / 2,\n    k = 1 / Math.sqrt(12),\n    a = (k / 2 + 1) * 3;\n\nvar wye = {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / a),\n        x0 = r / 2,\n        y0 = r * k,\n        x1 = x0,\n        y1 = r * k + r,\n        x2 = -x1,\n        y2 = y1;\n    context.moveTo(x0, y0);\n    context.lineTo(x1, y1);\n    context.lineTo(x2, y2);\n    context.lineTo(c$2 * x0 - s * y0, s * x0 + c$2 * y0);\n    context.lineTo(c$2 * x1 - s * y1, s * x1 + c$2 * y1);\n    context.lineTo(c$2 * x2 - s * y2, s * x2 + c$2 * y2);\n    context.lineTo(c$2 * x0 + s * y0, c$2 * y0 - s * x0);\n    context.lineTo(c$2 * x1 + s * y1, c$2 * y1 - s * x1);\n    context.lineTo(c$2 * x2 + s * y2, c$2 * y2 - s * x2);\n    context.closePath();\n  }\n};\n\nvar symbols = [\n  circle$2,\n  cross$2,\n  diamond,\n  square,\n  star,\n  triangle,\n  wye\n];\n\nfunction symbol() {\n  var type = constant$b(circle$2),\n      size = constant$b(64),\n      context = null;\n\n  function symbol() {\n    var buffer;\n    if (!context) context = buffer = path();\n    type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  symbol.type = function(_) {\n    return arguments.length ? (type = typeof _ === \"function\" ? _ : constant$b(_), symbol) : type;\n  };\n\n  symbol.size = function(_) {\n    return arguments.length ? (size = typeof _ === \"function\" ? _ : constant$b(+_), symbol) : size;\n  };\n\n  symbol.context = function(_) {\n    return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n  };\n\n  return symbol;\n}\n\nfunction noop$3() {}\n\nfunction point$2(that, x, y) {\n  that._context.bezierCurveTo(\n    (2 * that._x0 + that._x1) / 3,\n    (2 * that._y0 + that._y1) / 3,\n    (that._x0 + 2 * that._x1) / 3,\n    (that._y0 + 2 * that._y1) / 3,\n    (that._x0 + 4 * that._x1 + x) / 6,\n    (that._y0 + 4 * that._y1 + y) / 6\n  );\n}\n\nfunction Basis(context) {\n  this._context = context;\n}\n\nBasis.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 3: point$2(this, this._x1, this._y1); // proceed\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n      default: point$2(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nfunction basis$2(context) {\n  return new Basis(context);\n}\n\nfunction BasisClosed(context) {\n  this._context = context;\n}\n\nBasisClosed.prototype = {\n  areaStart: noop$3,\n  areaEnd: noop$3,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x2, this._y2);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x2, this._y2);\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n      default: point$2(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nfunction basisClosed$1(context) {\n  return new BasisClosed(context);\n}\n\nfunction BasisOpen(context) {\n  this._context = context;\n}\n\nBasisOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n      case 3: this._point = 4; // proceed\n      default: point$2(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nfunction basisOpen(context) {\n  return new BasisOpen(context);\n}\n\nfunction Bundle(context, beta) {\n  this._basis = new Basis(context);\n  this._beta = beta;\n}\n\nBundle.prototype = {\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n    this._basis.lineStart();\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        j = x.length - 1;\n\n    if (j > 0) {\n      var x0 = x[0],\n          y0 = y[0],\n          dx = x[j] - x0,\n          dy = y[j] - y0,\n          i = -1,\n          t;\n\n      while (++i <= j) {\n        t = i / j;\n        this._basis.point(\n          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n        );\n      }\n    }\n\n    this._x = this._y = null;\n    this._basis.lineEnd();\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\nvar bundle = (function custom(beta) {\n\n  function bundle(context) {\n    return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n  }\n\n  bundle.beta = function(beta) {\n    return custom(+beta);\n  };\n\n  return bundle;\n})(0.85);\n\nfunction point$3(that, x, y) {\n  that._context.bezierCurveTo(\n    that._x1 + that._k * (that._x2 - that._x0),\n    that._y1 + that._k * (that._y2 - that._y0),\n    that._x2 + that._k * (that._x1 - x),\n    that._y2 + that._k * (that._y1 - y),\n    that._x2,\n    that._y2\n  );\n}\n\nfunction Cardinal(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: point$3(this, this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n      case 2: this._point = 3; // proceed\n      default: point$3(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nvar cardinal = (function custom(tension) {\n\n  function cardinal(context) {\n    return new Cardinal(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n\nfunction CardinalClosed(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n  areaStart: noop$3,\n  areaEnd: noop$3,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point$3(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nvar cardinalClosed = (function custom(tension) {\n\n  function cardinal$$1(context) {\n    return new CardinalClosed(context, tension);\n  }\n\n  cardinal$$1.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal$$1;\n})(0);\n\nfunction CardinalOpen(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point$3(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nvar cardinalOpen = (function custom(tension) {\n\n  function cardinal$$1(context) {\n    return new CardinalOpen(context, tension);\n  }\n\n  cardinal$$1.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal$$1;\n})(0);\n\nfunction point$4(that, x, y) {\n  var x1 = that._x1,\n      y1 = that._y1,\n      x2 = that._x2,\n      y2 = that._y2;\n\n  if (that._l01_a > epsilon$3) {\n    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n        n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n  }\n\n  if (that._l23_a > epsilon$3) {\n    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n        m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n  }\n\n  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: this.point(this._x2, this._y2); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; // proceed\n      default: point$4(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nvar catmullRom = (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n\nfunction CatmullRomClosed(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n  areaStart: noop$3,\n  areaEnd: noop$3,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point$4(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nvar catmullRomClosed = (function custom(alpha) {\n\n  function catmullRom$$1(context) {\n    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n  }\n\n  catmullRom$$1.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom$$1;\n})(0.5);\n\nfunction CatmullRomOpen(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point$4(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nvar catmullRomOpen = (function custom(alpha) {\n\n  function catmullRom$$1(context) {\n    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n  }\n\n  catmullRom$$1.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom$$1;\n})(0.5);\n\nfunction LinearClosed(context) {\n  this._context = context;\n}\n\nLinearClosed.prototype = {\n  areaStart: noop$3,\n  areaEnd: noop$3,\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._point) this._context.closePath();\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    if (this._point) this._context.lineTo(x, y);\n    else this._point = 1, this._context.moveTo(x, y);\n  }\n};\n\nfunction linearClosed(context) {\n  return new LinearClosed(context);\n}\n\nfunction sign$1(x) {\n  return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n  var h0 = that._x1 - that._x0,\n      h1 = x2 - that._x1,\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\n  return (sign$1(s0) + sign$1(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n  var h = that._x1 - that._x0;\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point$5(that, t0, t1) {\n  var x0 = that._x0,\n      y0 = that._y0,\n      x1 = that._x1,\n      y1 = that._y1,\n      dx = (x1 - x0) / 3;\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n  this._context = context;\n}\n\nMonotoneX.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 =\n    this._t0 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n      case 3: point$5(this, this._t0, slope2(this, this._t0)); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    var t1 = NaN;\n\n    x = +x, y = +y;\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; point$5(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n      default: point$5(this, this._t0, t1 = slope3(this, x, y)); break;\n    }\n\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n    this._t0 = t1;\n  }\n};\n\nfunction MonotoneY(context) {\n  this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n  MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n  this._context = context;\n}\n\nReflectContext.prototype = {\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\n  closePath: function() { this._context.closePath(); },\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nfunction monotoneX(context) {\n  return new MonotoneX(context);\n}\n\nfunction monotoneY(context) {\n  return new MonotoneY(context);\n}\n\nfunction Natural(context) {\n  this._context = context;\n}\n\nNatural.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        n = x.length;\n\n    if (n) {\n      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n      if (n === 2) {\n        this._context.lineTo(x[1], y[1]);\n      } else {\n        var px = controlPoints(x),\n            py = controlPoints(y);\n        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n        }\n      }\n    }\n\n    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n    this._x = this._y = null;\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n  var i,\n      n = x.length - 1,\n      m,\n      a = new Array(n),\n      b = new Array(n),\n      r = new Array(n);\n  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n  a[n - 1] = r[n - 1] / b[n - 1];\n  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n  b[n - 1] = (x[n] + a[n - 1]) / 2;\n  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n  return [a, b];\n}\n\nfunction natural(context) {\n  return new Natural(context);\n}\n\nfunction Step(context, t) {\n  this._context = context;\n  this._t = t;\n}\n\nStep.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = this._y = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: {\n        if (this._t <= 0) {\n          this._context.lineTo(this._x, y);\n          this._context.lineTo(x, y);\n        } else {\n          var x1 = this._x * (1 - this._t) + x * this._t;\n          this._context.lineTo(x1, this._y);\n          this._context.lineTo(x1, y);\n        }\n        break;\n      }\n    }\n    this._x = x, this._y = y;\n  }\n};\n\nfunction step(context) {\n  return new Step(context, 0.5);\n}\n\nfunction stepBefore(context) {\n  return new Step(context, 0);\n}\n\nfunction stepAfter(context) {\n  return new Step(context, 1);\n}\n\nfunction none$1(series, order) {\n  if (!((n = series.length) > 1)) return;\n  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n    s0 = s1, s1 = series[order[i]];\n    for (j = 0; j < m; ++j) {\n      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n    }\n  }\n}\n\nfunction none$2(series) {\n  var n = series.length, o = new Array(n);\n  while (--n >= 0) o[n] = n;\n  return o;\n}\n\nfunction stackValue(d, key) {\n  return d[key];\n}\n\nfunction stack() {\n  var keys = constant$b([]),\n      order = none$2,\n      offset = none$1,\n      value = stackValue;\n\n  function stack(data) {\n    var kz = keys.apply(this, arguments),\n        i,\n        m = data.length,\n        n = kz.length,\n        sz = new Array(n),\n        oz;\n\n    for (i = 0; i < n; ++i) {\n      for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n        si[j] = sij = [0, +value(data[j], ki, j, data)];\n        sij.data = data[j];\n      }\n      si.key = ki;\n    }\n\n    for (i = 0, oz = order(sz); i < n; ++i) {\n      sz[oz[i]].index = i;\n    }\n\n    offset(sz, oz);\n    return sz;\n  }\n\n  stack.keys = function(_) {\n    return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant$b(slice$6.call(_)), stack) : keys;\n  };\n\n  stack.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant$b(+_), stack) : value;\n  };\n\n  stack.order = function(_) {\n    return arguments.length ? (order = _ == null ? none$2 : typeof _ === \"function\" ? _ : constant$b(slice$6.call(_)), stack) : order;\n  };\n\n  stack.offset = function(_) {\n    return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset;\n  };\n\n  return stack;\n}\n\nfunction expand(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n  }\n  none$1(series, order);\n}\n\nfunction diverging$1(series, order) {\n  if (!((n = series.length) > 1)) return;\n  for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n    for (yp = yn = 0, i = 0; i < n; ++i) {\n      if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n        d[0] = yp, d[1] = yp += dy;\n      } else if (dy < 0) {\n        d[1] = yn, d[0] = yn += dy;\n      } else {\n        d[0] = yp;\n      }\n    }\n  }\n}\n\nfunction silhouette(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n    s0[j][1] += s0[j][0] = -y / 2;\n  }\n  none$1(series, order);\n}\n\nfunction wiggle(series, order) {\n  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n      var si = series[order[i]],\n          sij0 = si[j][1] || 0,\n          sij1 = si[j - 1][1] || 0,\n          s3 = (sij0 - sij1) / 2;\n      for (var k = 0; k < i; ++k) {\n        var sk = series[order[k]],\n            skj0 = sk[j][1] || 0,\n            skj1 = sk[j - 1][1] || 0;\n        s3 += skj0 - skj1;\n      }\n      s1 += sij0, s2 += s3 * sij0;\n    }\n    s0[j - 1][1] += s0[j - 1][0] = y;\n    if (s1) y -= s2 / s1;\n  }\n  s0[j - 1][1] += s0[j - 1][0] = y;\n  none$1(series, order);\n}\n\nfunction appearance(series) {\n  var peaks = series.map(peak);\n  return none$2(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\n}\n\nfunction peak(series) {\n  var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n  while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\n  return j;\n}\n\nfunction ascending$3(series) {\n  var sums = series.map(sum$2);\n  return none$2(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nfunction sum$2(series) {\n  var s = 0, i = -1, n = series.length, v;\n  while (++i < n) if (v = +series[i][1]) s += v;\n  return s;\n}\n\nfunction descending$2(series) {\n  return ascending$3(series).reverse();\n}\n\nfunction insideOut(series) {\n  var n = series.length,\n      i,\n      j,\n      sums = series.map(sum$2),\n      order = appearance(series),\n      top = 0,\n      bottom = 0,\n      tops = [],\n      bottoms = [];\n\n  for (i = 0; i < n; ++i) {\n    j = order[i];\n    if (top < bottom) {\n      top += sums[j];\n      tops.push(j);\n    } else {\n      bottom += sums[j];\n      bottoms.push(j);\n    }\n  }\n\n  return bottoms.reverse().concat(tops);\n}\n\nfunction reverse(series) {\n  return none$2(series).reverse();\n}\n\nfunction constant$c(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction x$4(d) {\n  return d[0];\n}\n\nfunction y$4(d) {\n  return d[1];\n}\n\nfunction RedBlackTree() {\n  this._ = null; // root node\n}\n\nfunction RedBlackNode(node) {\n  node.U = // parent node\n  node.C = // color - true for red, false for black\n  node.L = // left node\n  node.R = // right node\n  node.P = // previous node\n  node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n  constructor: RedBlackTree,\n\n  insert: function(after, node) {\n    var parent, grandpa, uncle;\n\n    if (after) {\n      node.P = after;\n      node.N = after.N;\n      if (after.N) after.N.P = node;\n      after.N = node;\n      if (after.R) {\n        after = after.R;\n        while (after.L) after = after.L;\n        after.L = node;\n      } else {\n        after.R = node;\n      }\n      parent = after;\n    } else if (this._) {\n      after = RedBlackFirst(this._);\n      node.P = null;\n      node.N = after;\n      after.P = after.L = node;\n      parent = after;\n    } else {\n      node.P = node.N = null;\n      this._ = node;\n      parent = null;\n    }\n    node.L = node.R = null;\n    node.U = parent;\n    node.C = true;\n\n    after = node;\n    while (parent && parent.C) {\n      grandpa = parent.U;\n      if (parent === grandpa.L) {\n        uncle = grandpa.R;\n        if (uncle && uncle.C) {\n          parent.C = uncle.C = false;\n          grandpa.C = true;\n          after = grandpa;\n        } else {\n          if (after === parent.R) {\n            RedBlackRotateLeft(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateRight(this, grandpa);\n        }\n      } else {\n        uncle = grandpa.L;\n        if (uncle && uncle.C) {\n          parent.C = uncle.C = false;\n          grandpa.C = true;\n          after = grandpa;\n        } else {\n          if (after === parent.L) {\n            RedBlackRotateRight(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateLeft(this, grandpa);\n        }\n      }\n      parent = after.U;\n    }\n    this._.C = false;\n  },\n\n  remove: function(node) {\n    if (node.N) node.N.P = node.P;\n    if (node.P) node.P.N = node.N;\n    node.N = node.P = null;\n\n    var parent = node.U,\n        sibling,\n        left = node.L,\n        right = node.R,\n        next,\n        red;\n\n    if (!left) next = right;\n    else if (!right) next = left;\n    else next = RedBlackFirst(right);\n\n    if (parent) {\n      if (parent.L === node) parent.L = next;\n      else parent.R = next;\n    } else {\n      this._ = next;\n    }\n\n    if (left && right) {\n      red = next.C;\n      next.C = node.C;\n      next.L = left;\n      left.U = next;\n      if (next !== right) {\n        parent = next.U;\n        next.U = node.U;\n        node = next.R;\n        parent.L = node;\n        next.R = right;\n        right.U = next;\n      } else {\n        next.U = parent;\n        parent = next;\n        node = next.R;\n      }\n    } else {\n      red = node.C;\n      node = next;\n    }\n\n    if (node) node.U = parent;\n    if (red) return;\n    if (node && node.C) { node.C = false; return; }\n\n    do {\n      if (node === this._) break;\n      if (node === parent.L) {\n        sibling = parent.R;\n        if (sibling.C) {\n          sibling.C = false;\n          parent.C = true;\n          RedBlackRotateLeft(this, parent);\n          sibling = parent.R;\n        }\n        if ((sibling.L && sibling.L.C)\n            || (sibling.R && sibling.R.C)) {\n          if (!sibling.R || !sibling.R.C) {\n            sibling.L.C = false;\n            sibling.C = true;\n            RedBlackRotateRight(this, sibling);\n            sibling = parent.R;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.R.C = false;\n          RedBlackRotateLeft(this, parent);\n          node = this._;\n          break;\n        }\n      } else {\n        sibling = parent.L;\n        if (sibling.C) {\n          sibling.C = false;\n          parent.C = true;\n          RedBlackRotateRight(this, parent);\n          sibling = parent.L;\n        }\n        if ((sibling.L && sibling.L.C)\n          || (sibling.R && sibling.R.C)) {\n          if (!sibling.L || !sibling.L.C) {\n            sibling.R.C = false;\n            sibling.C = true;\n            RedBlackRotateLeft(this, sibling);\n            sibling = parent.L;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.L.C = false;\n          RedBlackRotateRight(this, parent);\n          node = this._;\n          break;\n        }\n      }\n      sibling.C = true;\n      node = parent;\n      parent = parent.U;\n    } while (!node.C);\n\n    if (node) node.C = false;\n  }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n  var p = node,\n      q = node.R,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\n\n  q.U = parent;\n  p.U = q;\n  p.R = q.L;\n  if (p.R) p.R.U = p;\n  q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n  var p = node,\n      q = node.L,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\n\n  q.U = parent;\n  p.U = q;\n  p.L = q.R;\n  if (p.L) p.L.U = p;\n  q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n  while (node.L) node = node.L;\n  return node;\n}\n\nfunction createEdge(left, right, v0, v1) {\n  var edge = [null, null],\n      index = edges.push(edge) - 1;\n  edge.left = left;\n  edge.right = right;\n  if (v0) setEdgeEnd(edge, left, right, v0);\n  if (v1) setEdgeEnd(edge, right, left, v1);\n  cells[left.index].halfedges.push(index);\n  cells[right.index].halfedges.push(index);\n  return edge;\n}\n\nfunction createBorderEdge(left, v0, v1) {\n  var edge = [v0, v1];\n  edge.left = left;\n  return edge;\n}\n\nfunction setEdgeEnd(edge, left, right, vertex) {\n  if (!edge[0] && !edge[1]) {\n    edge[0] = vertex;\n    edge.left = left;\n    edge.right = right;\n  } else if (edge.left === right) {\n    edge[1] = vertex;\n  } else {\n    edge[0] = vertex;\n  }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n  var a = edge[0],\n      b = edge[1],\n      ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n  if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n  if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n  return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n  var v1 = edge[1];\n  if (v1) return true;\n\n  var v0 = edge[0],\n      left = edge.left,\n      right = edge.right,\n      lx = left[0],\n      ly = left[1],\n      rx = right[0],\n      ry = right[1],\n      fx = (lx + rx) / 2,\n      fy = (ly + ry) / 2,\n      fm,\n      fb;\n\n  if (ry === ly) {\n    if (fx < x0 || fx >= x1) return;\n    if (lx > rx) {\n      if (!v0) v0 = [fx, y0];\n      else if (v0[1] >= y1) return;\n      v1 = [fx, y1];\n    } else {\n      if (!v0) v0 = [fx, y1];\n      else if (v0[1] < y0) return;\n      v1 = [fx, y0];\n    }\n  } else {\n    fm = (lx - rx) / (ry - ly);\n    fb = fy - fm * fx;\n    if (fm < -1 || fm > 1) {\n      if (lx > rx) {\n        if (!v0) v0 = [(y0 - fb) / fm, y0];\n        else if (v0[1] >= y1) return;\n        v1 = [(y1 - fb) / fm, y1];\n      } else {\n        if (!v0) v0 = [(y1 - fb) / fm, y1];\n        else if (v0[1] < y0) return;\n        v1 = [(y0 - fb) / fm, y0];\n      }\n    } else {\n      if (ly < ry) {\n        if (!v0) v0 = [x0, fm * x0 + fb];\n        else if (v0[0] >= x1) return;\n        v1 = [x1, fm * x1 + fb];\n      } else {\n        if (!v0) v0 = [x1, fm * x1 + fb];\n        else if (v0[0] < x0) return;\n        v1 = [x0, fm * x0 + fb];\n      }\n    }\n  }\n\n  edge[0] = v0;\n  edge[1] = v1;\n  return true;\n}\n\nfunction clipEdges(x0, y0, x1, y1) {\n  var i = edges.length,\n      edge;\n\n  while (i--) {\n    if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n        || !clipEdge(edge, x0, y0, x1, y1)\n        || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$4\n            || Math.abs(edge[0][1] - edge[1][1]) > epsilon$4)) {\n      delete edges[i];\n    }\n  }\n}\n\nfunction createCell(site) {\n  return cells[site.index] = {\n    site: site,\n    halfedges: []\n  };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n  var site = cell.site,\n      va = edge.left,\n      vb = edge.right;\n  if (site === vb) vb = va, va = site;\n  if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n  if (site === va) va = edge[1], vb = edge[0];\n  else va = edge[0], vb = edge[1];\n  return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nfunction cellHalfedgeStart(cell, edge) {\n  return edge[+(edge.left !== cell.site)];\n}\n\nfunction cellHalfedgeEnd(cell, edge) {\n  return edge[+(edge.left === cell.site)];\n}\n\nfunction sortCellHalfedges() {\n  for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n    if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n      var index = new Array(m),\n          array = new Array(m);\n      for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n      index.sort(function(i, j) { return array[j] - array[i]; });\n      for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n      for (j = 0; j < m; ++j) halfedges[j] = array[j];\n    }\n  }\n}\n\nfunction clipCells(x0, y0, x1, y1) {\n  var nCells = cells.length,\n      iCell,\n      cell,\n      site,\n      iHalfedge,\n      halfedges,\n      nHalfedges,\n      start,\n      startX,\n      startY,\n      end,\n      endX,\n      endY,\n      cover = true;\n\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      site = cell.site;\n      halfedges = cell.halfedges;\n      iHalfedge = halfedges.length;\n\n      // Remove any dangling clipped edges.\n      while (iHalfedge--) {\n        if (!edges[halfedges[iHalfedge]]) {\n          halfedges.splice(iHalfedge, 1);\n        }\n      }\n\n      // Insert any border edges as necessary.\n      iHalfedge = 0, nHalfedges = halfedges.length;\n      while (iHalfedge < nHalfedges) {\n        end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n        start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n        if (Math.abs(endX - startX) > epsilon$4 || Math.abs(endY - startY) > epsilon$4) {\n          halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n              Math.abs(endX - x0) < epsilon$4 && y1 - endY > epsilon$4 ? [x0, Math.abs(startX - x0) < epsilon$4 ? startY : y1]\n              : Math.abs(endY - y1) < epsilon$4 && x1 - endX > epsilon$4 ? [Math.abs(startY - y1) < epsilon$4 ? startX : x1, y1]\n              : Math.abs(endX - x1) < epsilon$4 && endY - y0 > epsilon$4 ? [x1, Math.abs(startX - x1) < epsilon$4 ? startY : y0]\n              : Math.abs(endY - y0) < epsilon$4 && endX - x0 > epsilon$4 ? [Math.abs(startY - y0) < epsilon$4 ? startX : x0, y0]\n              : null)) - 1);\n          ++nHalfedges;\n        }\n      }\n\n      if (nHalfedges) cover = false;\n    }\n  }\n\n  // If there weren’t any edges, have the closest site cover the extent.\n  // It doesn’t matter which corner of the extent we measure!\n  if (cover) {\n    var dx, dy, d2, dc = Infinity;\n\n    for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n      if (cell = cells[iCell]) {\n        site = cell.site;\n        dx = site[0] - x0;\n        dy = site[1] - y0;\n        d2 = dx * dx + dy * dy;\n        if (d2 < dc) dc = d2, cover = cell;\n      }\n    }\n\n    if (cover) {\n      var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n      cover.halfedges.push(\n        edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n        edges.push(createBorderEdge(site, v01, v11)) - 1,\n        edges.push(createBorderEdge(site, v11, v10)) - 1,\n        edges.push(createBorderEdge(site, v10, v00)) - 1\n      );\n    }\n  }\n\n  // Lastly delete any cells with no edges; these were entirely clipped.\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      if (!cell.halfedges.length) {\n        delete cells[iCell];\n      }\n    }\n  }\n}\n\nvar circlePool = [];\n\nvar firstCircle;\n\nfunction Circle() {\n  RedBlackNode(this);\n  this.x =\n  this.y =\n  this.arc =\n  this.site =\n  this.cy = null;\n}\n\nfunction attachCircle(arc) {\n  var lArc = arc.P,\n      rArc = arc.N;\n\n  if (!lArc || !rArc) return;\n\n  var lSite = lArc.site,\n      cSite = arc.site,\n      rSite = rArc.site;\n\n  if (lSite === rSite) return;\n\n  var bx = cSite[0],\n      by = cSite[1],\n      ax = lSite[0] - bx,\n      ay = lSite[1] - by,\n      cx = rSite[0] - bx,\n      cy = rSite[1] - by;\n\n  var d = 2 * (ax * cy - ay * cx);\n  if (d >= -epsilon2$2) return;\n\n  var ha = ax * ax + ay * ay,\n      hc = cx * cx + cy * cy,\n      x = (cy * ha - ay * hc) / d,\n      y = (ax * hc - cx * ha) / d;\n\n  var circle = circlePool.pop() || new Circle;\n  circle.arc = arc;\n  circle.site = cSite;\n  circle.x = x + bx;\n  circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n  arc.circle = circle;\n\n  var before = null,\n      node = circles._;\n\n  while (node) {\n    if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n      if (node.L) node = node.L;\n      else { before = node.P; break; }\n    } else {\n      if (node.R) node = node.R;\n      else { before = node; break; }\n    }\n  }\n\n  circles.insert(before, circle);\n  if (!before) firstCircle = circle;\n}\n\nfunction detachCircle(arc) {\n  var circle = arc.circle;\n  if (circle) {\n    if (!circle.P) firstCircle = circle.N;\n    circles.remove(circle);\n    circlePool.push(circle);\n    RedBlackNode(circle);\n    arc.circle = null;\n  }\n}\n\nvar beachPool = [];\n\nfunction Beach() {\n  RedBlackNode(this);\n  this.edge =\n  this.site =\n  this.circle = null;\n}\n\nfunction createBeach(site) {\n  var beach = beachPool.pop() || new Beach;\n  beach.site = site;\n  return beach;\n}\n\nfunction detachBeach(beach) {\n  detachCircle(beach);\n  beaches.remove(beach);\n  beachPool.push(beach);\n  RedBlackNode(beach);\n}\n\nfunction removeBeach(beach) {\n  var circle = beach.circle,\n      x = circle.x,\n      y = circle.cy,\n      vertex = [x, y],\n      previous = beach.P,\n      next = beach.N,\n      disappearing = [beach];\n\n  detachBeach(beach);\n\n  var lArc = previous;\n  while (lArc.circle\n      && Math.abs(x - lArc.circle.x) < epsilon$4\n      && Math.abs(y - lArc.circle.cy) < epsilon$4) {\n    previous = lArc.P;\n    disappearing.unshift(lArc);\n    detachBeach(lArc);\n    lArc = previous;\n  }\n\n  disappearing.unshift(lArc);\n  detachCircle(lArc);\n\n  var rArc = next;\n  while (rArc.circle\n      && Math.abs(x - rArc.circle.x) < epsilon$4\n      && Math.abs(y - rArc.circle.cy) < epsilon$4) {\n    next = rArc.N;\n    disappearing.push(rArc);\n    detachBeach(rArc);\n    rArc = next;\n  }\n\n  disappearing.push(rArc);\n  detachCircle(rArc);\n\n  var nArcs = disappearing.length,\n      iArc;\n  for (iArc = 1; iArc < nArcs; ++iArc) {\n    rArc = disappearing[iArc];\n    lArc = disappearing[iArc - 1];\n    setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n  }\n\n  lArc = disappearing[0];\n  rArc = disappearing[nArcs - 1];\n  rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nfunction addBeach(site) {\n  var x = site[0],\n      directrix = site[1],\n      lArc,\n      rArc,\n      dxl,\n      dxr,\n      node = beaches._;\n\n  while (node) {\n    dxl = leftBreakPoint(node, directrix) - x;\n    if (dxl > epsilon$4) node = node.L; else {\n      dxr = x - rightBreakPoint(node, directrix);\n      if (dxr > epsilon$4) {\n        if (!node.R) {\n          lArc = node;\n          break;\n        }\n        node = node.R;\n      } else {\n        if (dxl > -epsilon$4) {\n          lArc = node.P;\n          rArc = node;\n        } else if (dxr > -epsilon$4) {\n          lArc = node;\n          rArc = node.N;\n        } else {\n          lArc = rArc = node;\n        }\n        break;\n      }\n    }\n  }\n\n  createCell(site);\n  var newArc = createBeach(site);\n  beaches.insert(lArc, newArc);\n\n  if (!lArc && !rArc) return;\n\n  if (lArc === rArc) {\n    detachCircle(lArc);\n    rArc = createBeach(lArc.site);\n    beaches.insert(newArc, rArc);\n    newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n    attachCircle(lArc);\n    attachCircle(rArc);\n    return;\n  }\n\n  if (!rArc) { // && lArc\n    newArc.edge = createEdge(lArc.site, newArc.site);\n    return;\n  }\n\n  // else lArc !== rArc\n  detachCircle(lArc);\n  detachCircle(rArc);\n\n  var lSite = lArc.site,\n      ax = lSite[0],\n      ay = lSite[1],\n      bx = site[0] - ax,\n      by = site[1] - ay,\n      rSite = rArc.site,\n      cx = rSite[0] - ax,\n      cy = rSite[1] - ay,\n      d = 2 * (bx * cy - by * cx),\n      hb = bx * bx + by * by,\n      hc = cx * cx + cy * cy,\n      vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n  setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n  newArc.edge = createEdge(lSite, site, null, vertex);\n  rArc.edge = createEdge(site, rSite, null, vertex);\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n  var site = arc.site,\n      rfocx = site[0],\n      rfocy = site[1],\n      pby2 = rfocy - directrix;\n\n  if (!pby2) return rfocx;\n\n  var lArc = arc.P;\n  if (!lArc) return -Infinity;\n\n  site = lArc.site;\n  var lfocx = site[0],\n      lfocy = site[1],\n      plby2 = lfocy - directrix;\n\n  if (!plby2) return lfocx;\n\n  var hl = lfocx - rfocx,\n      aby2 = 1 / pby2 - 1 / plby2,\n      b = hl / plby2;\n\n  if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n  return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n  var rArc = arc.N;\n  if (rArc) return leftBreakPoint(rArc, directrix);\n  var site = arc.site;\n  return site[1] === directrix ? site[0] : Infinity;\n}\n\nvar epsilon$4 = 1e-6;\nvar epsilon2$2 = 1e-12;\nvar beaches;\nvar cells;\nvar circles;\nvar edges;\n\nfunction triangleArea(a, b, c) {\n  return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n  return b[1] - a[1]\n      || b[0] - a[0];\n}\n\nfunction Diagram(sites, extent) {\n  var site = sites.sort(lexicographic).pop(),\n      x,\n      y,\n      circle;\n\n  edges = [];\n  cells = new Array(sites.length);\n  beaches = new RedBlackTree;\n  circles = new RedBlackTree;\n\n  while (true) {\n    circle = firstCircle;\n    if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n      if (site[0] !== x || site[1] !== y) {\n        addBeach(site);\n        x = site[0], y = site[1];\n      }\n      site = sites.pop();\n    } else if (circle) {\n      removeBeach(circle.arc);\n    } else {\n      break;\n    }\n  }\n\n  sortCellHalfedges();\n\n  if (extent) {\n    var x0 = +extent[0][0],\n        y0 = +extent[0][1],\n        x1 = +extent[1][0],\n        y1 = +extent[1][1];\n    clipEdges(x0, y0, x1, y1);\n    clipCells(x0, y0, x1, y1);\n  }\n\n  this.edges = edges;\n  this.cells = cells;\n\n  beaches =\n  circles =\n  edges =\n  cells = null;\n}\n\nDiagram.prototype = {\n  constructor: Diagram,\n\n  polygons: function() {\n    var edges = this.edges;\n\n    return this.cells.map(function(cell) {\n      var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n      polygon.data = cell.site.data;\n      return polygon;\n    });\n  },\n\n  triangles: function() {\n    var triangles = [],\n        edges = this.edges;\n\n    this.cells.forEach(function(cell, i) {\n      if (!(m = (halfedges = cell.halfedges).length)) return;\n      var site = cell.site,\n          halfedges,\n          j = -1,\n          m,\n          s0,\n          e1 = edges[halfedges[m - 1]],\n          s1 = e1.left === site ? e1.right : e1.left;\n\n      while (++j < m) {\n        s0 = s1;\n        e1 = edges[halfedges[j]];\n        s1 = e1.left === site ? e1.right : e1.left;\n        if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n          triangles.push([site.data, s0.data, s1.data]);\n        }\n      }\n    });\n\n    return triangles;\n  },\n\n  links: function() {\n    return this.edges.filter(function(edge) {\n      return edge.right;\n    }).map(function(edge) {\n      return {\n        source: edge.left.data,\n        target: edge.right.data\n      };\n    });\n  },\n\n  find: function(x, y, radius) {\n    var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n    // Use the previously-found cell, or start with an arbitrary one.\n    while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n    var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n    // Traverse the half-edges to find a closer cell, if any.\n    do {\n      cell = that.cells[i0 = i1], i1 = null;\n      cell.halfedges.forEach(function(e) {\n        var edge = that.edges[e], v = edge.left;\n        if ((v === cell.site || !v) && !(v = edge.right)) return;\n        var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n        if (v2 < d2) d2 = v2, i1 = v.index;\n      });\n    } while (i1 !== null);\n\n    that._found = i0;\n\n    return radius == null || d2 <= radius * radius ? cell.site : null;\n  }\n};\n\nfunction voronoi() {\n  var x$$1 = x$4,\n      y$$1 = y$4,\n      extent = null;\n\n  function voronoi(data) {\n    return new Diagram(data.map(function(d, i) {\n      var s = [Math.round(x$$1(d, i, data) / epsilon$4) * epsilon$4, Math.round(y$$1(d, i, data) / epsilon$4) * epsilon$4];\n      s.index = i;\n      s.data = d;\n      return s;\n    }), extent);\n  }\n\n  voronoi.polygons = function(data) {\n    return voronoi(data).polygons();\n  };\n\n  voronoi.links = function(data) {\n    return voronoi(data).links();\n  };\n\n  voronoi.triangles = function(data) {\n    return voronoi(data).triangles();\n  };\n\n  voronoi.x = function(_) {\n    return arguments.length ? (x$$1 = typeof _ === \"function\" ? _ : constant$c(+_), voronoi) : x$$1;\n  };\n\n  voronoi.y = function(_) {\n    return arguments.length ? (y$$1 = typeof _ === \"function\" ? _ : constant$c(+_), voronoi) : y$$1;\n  };\n\n  voronoi.extent = function(_) {\n    return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n  };\n\n  voronoi.size = function(_) {\n    return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n  };\n\n  return voronoi;\n}\n\nfunction constant$d(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction ZoomEvent(target, type, transform) {\n  this.target = target;\n  this.type = type;\n  this.transform = transform;\n}\n\nfunction Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nvar identity$9 = new Transform(1, 0, 0);\n\ntransform$1.prototype = Transform.prototype;\n\nfunction transform$1(node) {\n  return node.__zoom || identity$9;\n}\n\nfunction nopropagation$2() {\n  exports.event.stopImmediatePropagation();\n}\n\nfunction noevent$2() {\n  exports.event.preventDefault();\n  exports.event.stopImmediatePropagation();\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter$2() {\n  return !exports.event.button;\n}\n\nfunction defaultExtent$1() {\n  var e = this, w, h;\n  if (e instanceof SVGElement) {\n    e = e.ownerSVGElement || e;\n    w = e.width.baseVal.value;\n    h = e.height.baseVal.value;\n  } else {\n    w = e.clientWidth;\n    h = e.clientHeight;\n  }\n  return [[0, 0], [w, h]];\n}\n\nfunction defaultTransform() {\n  return this.__zoom || identity$9;\n}\n\nfunction defaultWheelDelta() {\n  return -exports.event.deltaY * (exports.event.deltaMode ? 120 : 1) / 500;\n}\n\nfunction defaultTouchable$1() {\n  return \"ontouchstart\" in this;\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n  return transform.translate(\n    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n  );\n}\n\nfunction zoom() {\n  var filter = defaultFilter$2,\n      extent = defaultExtent$1,\n      constrain = defaultConstrain,\n      wheelDelta = defaultWheelDelta,\n      touchable = defaultTouchable$1,\n      scaleExtent = [0, Infinity],\n      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n      duration = 250,\n      interpolate = interpolateZoom,\n      gestures = [],\n      listeners = dispatch(\"start\", \"zoom\", \"end\"),\n      touchstarting,\n      touchending,\n      touchDelay = 500,\n      wheelDelay = 150,\n      clickDistance2 = 0;\n\n  function zoom(selection$$1) {\n    selection$$1\n        .property(\"__zoom\", defaultTransform)\n        .on(\"wheel.zoom\", wheeled)\n        .on(\"mousedown.zoom\", mousedowned)\n        .on(\"dblclick.zoom\", dblclicked)\n      .filter(touchable)\n        .on(\"touchstart.zoom\", touchstarted)\n        .on(\"touchmove.zoom\", touchmoved)\n        .on(\"touchend.zoom touchcancel.zoom\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  zoom.transform = function(collection, transform) {\n    var selection$$1 = collection.selection ? collection.selection() : collection;\n    selection$$1.property(\"__zoom\", defaultTransform);\n    if (collection !== selection$$1) {\n      schedule(collection, transform);\n    } else {\n      selection$$1.interrupt().each(function() {\n        gesture(this, arguments)\n            .start()\n            .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n            .end();\n      });\n    }\n  };\n\n  zoom.scaleBy = function(selection$$1, k) {\n    zoom.scaleTo(selection$$1, function() {\n      var k0 = this.__zoom.k,\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return k0 * k1;\n    });\n  };\n\n  zoom.scaleTo = function(selection$$1, k) {\n    zoom.transform(selection$$1, function() {\n      var e = extent.apply(this, arguments),\n          t0 = this.__zoom,\n          p0 = centroid(e),\n          p1 = t0.invert(p0),\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n    });\n  };\n\n  zoom.translateBy = function(selection$$1, x, y) {\n    zoom.transform(selection$$1, function() {\n      return constrain(this.__zoom.translate(\n        typeof x === \"function\" ? x.apply(this, arguments) : x,\n        typeof y === \"function\" ? y.apply(this, arguments) : y\n      ), extent.apply(this, arguments), translateExtent);\n    });\n  };\n\n  zoom.translateTo = function(selection$$1, x, y) {\n    zoom.transform(selection$$1, function() {\n      var e = extent.apply(this, arguments),\n          t = this.__zoom,\n          p = centroid(e);\n      return constrain(identity$9.translate(p[0], p[1]).scale(t.k).translate(\n        typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n        typeof y === \"function\" ? -y.apply(this, arguments) : -y\n      ), e, translateExtent);\n    });\n  };\n\n  function scale(transform, k) {\n    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n  }\n\n  function translate(transform, p0, p1) {\n    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n  }\n\n  function centroid(extent) {\n    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n  }\n\n  function schedule(transition$$1, transform, center) {\n    transition$$1\n        .on(\"start.zoom\", function() { gesture(this, arguments).start(); })\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).end(); })\n        .tween(\"zoom\", function() {\n          var that = this,\n              args = arguments,\n              g = gesture(that, args),\n              e = extent.apply(that, args),\n              p = center || centroid(e),\n              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n              a = that.__zoom,\n              b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n          return function(t) {\n            if (t === 1) t = b; // Avoid rounding error on end.\n            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n            g.zoom(null, t);\n          };\n        });\n  }\n\n  function gesture(that, args) {\n    for (var i = 0, n = gestures.length, g; i < n; ++i) {\n      if ((g = gestures[i]).that === that) {\n        return g;\n      }\n    }\n    return new Gesture(that, args);\n  }\n\n  function Gesture(that, args) {\n    this.that = that;\n    this.args = args;\n    this.index = -1;\n    this.active = 0;\n    this.extent = extent.apply(that, args);\n  }\n\n  Gesture.prototype = {\n    start: function() {\n      if (++this.active === 1) {\n        this.index = gestures.push(this) - 1;\n        this.emit(\"start\");\n      }\n      return this;\n    },\n    zoom: function(key, transform) {\n      if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n      if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n      if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n      this.that.__zoom = transform;\n      this.emit(\"zoom\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) {\n        gestures.splice(this.index, 1);\n        this.index = -1;\n        this.emit(\"end\");\n      }\n      return this;\n    },\n    emit: function(type) {\n      customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);\n    }\n  };\n\n  function wheeled() {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, arguments),\n        t = this.__zoom,\n        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n        p = mouse(this);\n\n    // If the mouse is in the same location as before, reuse it.\n    // If there were recent wheel events, reset the wheel idle timeout.\n    if (g.wheel) {\n      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n        g.mouse[1] = t.invert(g.mouse[0] = p);\n      }\n      clearTimeout(g.wheel);\n    }\n\n    // If this wheel event won’t trigger a transform change, ignore it.\n    else if (t.k === k) return;\n\n    // Otherwise, capture the mouse point and location at the start.\n    else {\n      g.mouse = [p, t.invert(p)];\n      interrupt(this);\n      g.start();\n    }\n\n    noevent$2();\n    g.wheel = setTimeout(wheelidled, wheelDelay);\n    g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n    function wheelidled() {\n      g.wheel = null;\n      g.end();\n    }\n  }\n\n  function mousedowned() {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var g = gesture(this, arguments),\n        v = select(exports.event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n        p = mouse(this),\n        x0 = exports.event.clientX,\n        y0 = exports.event.clientY;\n\n    dragDisable(exports.event.view);\n    nopropagation$2();\n    g.mouse = [p, this.__zoom.invert(p)];\n    interrupt(this);\n    g.start();\n\n    function mousemoved() {\n      noevent$2();\n      if (!g.moved) {\n        var dx = exports.event.clientX - x0, dy = exports.event.clientY - y0;\n        g.moved = dx * dx + dy * dy > clickDistance2;\n      }\n      g.zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent, translateExtent));\n    }\n\n    function mouseupped() {\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\n      yesdrag(exports.event.view, g.moved);\n      noevent$2();\n      g.end();\n    }\n  }\n\n  function dblclicked() {\n    if (!filter.apply(this, arguments)) return;\n    var t0 = this.__zoom,\n        p0 = mouse(this),\n        p1 = t0.invert(p0),\n        k1 = t0.k * (exports.event.shiftKey ? 0.5 : 2),\n        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent);\n\n    noevent$2();\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);\n    else select(this).call(zoom.transform, t1);\n  }\n\n  function touchstarted() {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, arguments),\n        touches$$1 = exports.event.changedTouches,\n        started,\n        n = touches$$1.length, i, t, p;\n\n    nopropagation$2();\n    for (i = 0; i < n; ++i) {\n      t = touches$$1[i], p = touch(this, touches$$1, t.identifier);\n      p = [p, this.__zoom.invert(p), t.identifier];\n      if (!g.touch0) g.touch0 = p, started = true;\n      else if (!g.touch1) g.touch1 = p;\n    }\n\n    // If this is a dbltap, reroute to the (optional) dblclick.zoom handler.\n    if (touchstarting) {\n      touchstarting = clearTimeout(touchstarting);\n      if (!g.touch1) {\n        g.end();\n        p = select(this).on(\"dblclick.zoom\");\n        if (p) p.apply(this, arguments);\n        return;\n      }\n    }\n\n    if (started) {\n      touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n      interrupt(this);\n      g.start();\n    }\n  }\n\n  function touchmoved() {\n    var g = gesture(this, arguments),\n        touches$$1 = exports.event.changedTouches,\n        n = touches$$1.length, i, t, p, l;\n\n    noevent$2();\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n    for (i = 0; i < n; ++i) {\n      t = touches$$1[i], p = touch(this, touches$$1, t.identifier);\n      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n    }\n    t = g.that.__zoom;\n    if (g.touch1) {\n      var p0 = g.touch0[0], l0 = g.touch0[1],\n          p1 = g.touch1[0], l1 = g.touch1[1],\n          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n      t = scale(t, Math.sqrt(dp / dl));\n      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n    }\n    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n    else return;\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n  }\n\n  function touchended() {\n    var g = gesture(this, arguments),\n        touches$$1 = exports.event.changedTouches,\n        n = touches$$1.length, i, t;\n\n    nopropagation$2();\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, touchDelay);\n    for (i = 0; i < n; ++i) {\n      t = touches$$1[i];\n      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n    }\n    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n    else g.end();\n  }\n\n  zoom.wheelDelta = function(_) {\n    return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant$d(+_), zoom) : wheelDelta;\n  };\n\n  zoom.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$d(!!_), zoom) : filter;\n  };\n\n  zoom.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant$d(!!_), zoom) : touchable;\n  };\n\n  zoom.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant$d([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n  };\n\n  zoom.scaleExtent = function(_) {\n    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n  };\n\n  zoom.translateExtent = function(_) {\n    return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n  };\n\n  zoom.constrain = function(_) {\n    return arguments.length ? (constrain = _, zoom) : constrain;\n  };\n\n  zoom.duration = function(_) {\n    return arguments.length ? (duration = +_, zoom) : duration;\n  };\n\n  zoom.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, zoom) : interpolate;\n  };\n\n  zoom.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? zoom : value;\n  };\n\n  zoom.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n  };\n\n  return zoom;\n}\n\nexports.version = version;\nexports.bisect = bisectRight;\nexports.bisectRight = bisectRight;\nexports.bisectLeft = bisectLeft;\nexports.ascending = ascending;\nexports.bisector = bisector;\nexports.cross = cross;\nexports.descending = descending;\nexports.deviation = deviation;\nexports.extent = extent;\nexports.histogram = histogram;\nexports.thresholdFreedmanDiaconis = freedmanDiaconis;\nexports.thresholdScott = scott;\nexports.thresholdSturges = thresholdSturges;\nexports.max = max;\nexports.mean = mean;\nexports.median = median;\nexports.merge = merge;\nexports.min = min;\nexports.pairs = pairs;\nexports.permute = permute;\nexports.quantile = threshold;\nexports.range = sequence;\nexports.scan = scan;\nexports.shuffle = shuffle;\nexports.sum = sum;\nexports.ticks = ticks;\nexports.tickIncrement = tickIncrement;\nexports.tickStep = tickStep;\nexports.transpose = transpose;\nexports.variance = variance;\nexports.zip = zip;\nexports.axisTop = axisTop;\nexports.axisRight = axisRight;\nexports.axisBottom = axisBottom;\nexports.axisLeft = axisLeft;\nexports.brush = brush;\nexports.brushX = brushX;\nexports.brushY = brushY;\nexports.brushSelection = brushSelection;\nexports.chord = chord;\nexports.ribbon = ribbon;\nexports.nest = nest;\nexports.set = set$2;\nexports.map = map$1;\nexports.keys = keys;\nexports.values = values;\nexports.entries = entries;\nexports.color = color;\nexports.rgb = rgb;\nexports.hsl = hsl;\nexports.lab = lab;\nexports.hcl = hcl;\nexports.lch = lch;\nexports.gray = gray;\nexports.cubehelix = cubehelix;\nexports.contours = contours;\nexports.contourDensity = density;\nexports.dispatch = dispatch;\nexports.drag = drag;\nexports.dragDisable = dragDisable;\nexports.dragEnable = yesdrag;\nexports.dsvFormat = dsvFormat;\nexports.csvParse = csvParse;\nexports.csvParseRows = csvParseRows;\nexports.csvFormat = csvFormat;\nexports.csvFormatBody = csvFormatBody;\nexports.csvFormatRows = csvFormatRows;\nexports.tsvParse = tsvParse;\nexports.tsvParseRows = tsvParseRows;\nexports.tsvFormat = tsvFormat;\nexports.tsvFormatBody = tsvFormatBody;\nexports.tsvFormatRows = tsvFormatRows;\nexports.autoType = autoType;\nexports.easeLinear = linear$1;\nexports.easeQuad = quadInOut;\nexports.easeQuadIn = quadIn;\nexports.easeQuadOut = quadOut;\nexports.easeQuadInOut = quadInOut;\nexports.easeCubic = cubicInOut;\nexports.easeCubicIn = cubicIn;\nexports.easeCubicOut = cubicOut;\nexports.easeCubicInOut = cubicInOut;\nexports.easePoly = polyInOut;\nexports.easePolyIn = polyIn;\nexports.easePolyOut = polyOut;\nexports.easePolyInOut = polyInOut;\nexports.easeSin = sinInOut;\nexports.easeSinIn = sinIn;\nexports.easeSinOut = sinOut;\nexports.easeSinInOut = sinInOut;\nexports.easeExp = expInOut;\nexports.easeExpIn = expIn;\nexports.easeExpOut = expOut;\nexports.easeExpInOut = expInOut;\nexports.easeCircle = circleInOut;\nexports.easeCircleIn = circleIn;\nexports.easeCircleOut = circleOut;\nexports.easeCircleInOut = circleInOut;\nexports.easeBounce = bounceOut;\nexports.easeBounceIn = bounceIn;\nexports.easeBounceOut = bounceOut;\nexports.easeBounceInOut = bounceInOut;\nexports.easeBack = backInOut;\nexports.easeBackIn = backIn;\nexports.easeBackOut = backOut;\nexports.easeBackInOut = backInOut;\nexports.easeElastic = elasticOut;\nexports.easeElasticIn = elasticIn;\nexports.easeElasticOut = elasticOut;\nexports.easeElasticInOut = elasticInOut;\nexports.blob = blob;\nexports.buffer = buffer;\nexports.dsv = dsv;\nexports.csv = csv$1;\nexports.tsv = tsv$1;\nexports.image = image;\nexports.json = json;\nexports.text = text;\nexports.xml = xml;\nexports.html = html;\nexports.svg = svg;\nexports.forceCenter = center$1;\nexports.forceCollide = collide;\nexports.forceLink = link;\nexports.forceManyBody = manyBody;\nexports.forceRadial = radial;\nexports.forceSimulation = simulation;\nexports.forceX = x$2;\nexports.forceY = y$2;\nexports.formatDefaultLocale = defaultLocale;\nexports.formatLocale = formatLocale;\nexports.formatSpecifier = formatSpecifier;\nexports.precisionFixed = precisionFixed;\nexports.precisionPrefix = precisionPrefix;\nexports.precisionRound = precisionRound;\nexports.geoArea = area$1;\nexports.geoBounds = bounds;\nexports.geoCentroid = centroid;\nexports.geoCircle = circle;\nexports.geoClipAntimeridian = clipAntimeridian;\nexports.geoClipCircle = clipCircle;\nexports.geoClipExtent = extent$1;\nexports.geoClipRectangle = clipRectangle;\nexports.geoContains = contains$1;\nexports.geoDistance = distance;\nexports.geoGraticule = graticule;\nexports.geoGraticule10 = graticule10;\nexports.geoInterpolate = interpolate$1;\nexports.geoLength = length$1;\nexports.geoPath = index$1;\nexports.geoAlbers = albers;\nexports.geoAlbersUsa = albersUsa;\nexports.geoAzimuthalEqualArea = azimuthalEqualArea;\nexports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;\nexports.geoAzimuthalEquidistant = azimuthalEquidistant;\nexports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;\nexports.geoConicConformal = conicConformal;\nexports.geoConicConformalRaw = conicConformalRaw;\nexports.geoConicEqualArea = conicEqualArea;\nexports.geoConicEqualAreaRaw = conicEqualAreaRaw;\nexports.geoConicEquidistant = conicEquidistant;\nexports.geoConicEquidistantRaw = conicEquidistantRaw;\nexports.geoEqualEarth = equalEarth;\nexports.geoEqualEarthRaw = equalEarthRaw;\nexports.geoEquirectangular = equirectangular;\nexports.geoEquirectangularRaw = equirectangularRaw;\nexports.geoGnomonic = gnomonic;\nexports.geoGnomonicRaw = gnomonicRaw;\nexports.geoIdentity = identity$5;\nexports.geoProjection = projection;\nexports.geoProjectionMutator = projectionMutator;\nexports.geoMercator = mercator;\nexports.geoMercatorRaw = mercatorRaw;\nexports.geoNaturalEarth1 = naturalEarth1;\nexports.geoNaturalEarth1Raw = naturalEarth1Raw;\nexports.geoOrthographic = orthographic;\nexports.geoOrthographicRaw = orthographicRaw;\nexports.geoStereographic = stereographic;\nexports.geoStereographicRaw = stereographicRaw;\nexports.geoTransverseMercator = transverseMercator;\nexports.geoTransverseMercatorRaw = transverseMercatorRaw;\nexports.geoRotation = rotation;\nexports.geoStream = geoStream;\nexports.geoTransform = transform;\nexports.cluster = cluster;\nexports.hierarchy = hierarchy;\nexports.pack = index$2;\nexports.packSiblings = siblings;\nexports.packEnclose = enclose;\nexports.partition = partition;\nexports.stratify = stratify;\nexports.tree = tree;\nexports.treemap = index$3;\nexports.treemapBinary = binary;\nexports.treemapDice = treemapDice;\nexports.treemapSlice = treemapSlice;\nexports.treemapSliceDice = sliceDice;\nexports.treemapSquarify = squarify;\nexports.treemapResquarify = resquarify;\nexports.interpolate = interpolateValue;\nexports.interpolateArray = array$1;\nexports.interpolateBasis = basis$1;\nexports.interpolateBasisClosed = basisClosed;\nexports.interpolateDate = date;\nexports.interpolateDiscrete = discrete;\nexports.interpolateHue = hue$1;\nexports.interpolateNumber = interpolateNumber;\nexports.interpolateObject = object;\nexports.interpolateRound = interpolateRound;\nexports.interpolateString = interpolateString;\nexports.interpolateTransformCss = interpolateTransformCss;\nexports.interpolateTransformSvg = interpolateTransformSvg;\nexports.interpolateZoom = interpolateZoom;\nexports.interpolateRgb = interpolateRgb;\nexports.interpolateRgbBasis = rgbBasis;\nexports.interpolateRgbBasisClosed = rgbBasisClosed;\nexports.interpolateHsl = hsl$2;\nexports.interpolateHslLong = hslLong;\nexports.interpolateLab = lab$1;\nexports.interpolateHcl = hcl$2;\nexports.interpolateHclLong = hclLong;\nexports.interpolateCubehelix = cubehelix$2;\nexports.interpolateCubehelixLong = cubehelixLong;\nexports.piecewise = piecewise;\nexports.quantize = quantize;\nexports.path = path;\nexports.polygonArea = area$2;\nexports.polygonCentroid = centroid$1;\nexports.polygonHull = hull;\nexports.polygonContains = contains$2;\nexports.polygonLength = length$2;\nexports.quadtree = quadtree;\nexports.randomUniform = uniform;\nexports.randomNormal = normal;\nexports.randomLogNormal = logNormal;\nexports.randomBates = bates;\nexports.randomIrwinHall = irwinHall;\nexports.randomExponential = exponential$1;\nexports.scaleBand = band;\nexports.scalePoint = point$1;\nexports.scaleIdentity = identity$7;\nexports.scaleLinear = linear$2;\nexports.scaleLog = log$1;\nexports.scaleSymlog = symlog;\nexports.scaleOrdinal = ordinal;\nexports.scaleImplicit = implicit;\nexports.scalePow = pow$1;\nexports.scaleSqrt = sqrt$1;\nexports.scaleQuantile = quantile$$1;\nexports.scaleQuantize = quantize$1;\nexports.scaleThreshold = threshold$1;\nexports.scaleTime = time;\nexports.scaleUtc = utcTime;\nexports.scaleSequential = sequential;\nexports.scaleSequentialLog = sequentialLog;\nexports.scaleSequentialPow = sequentialPow;\nexports.scaleSequentialSqrt = sequentialSqrt;\nexports.scaleSequentialSymlog = sequentialSymlog;\nexports.scaleSequentialQuantile = sequentialQuantile;\nexports.scaleDiverging = diverging;\nexports.scaleDivergingLog = divergingLog;\nexports.scaleDivergingPow = divergingPow;\nexports.scaleDivergingSqrt = divergingSqrt;\nexports.scaleDivergingSymlog = divergingSymlog;\nexports.tickFormat = tickFormat;\nexports.schemeCategory10 = category10;\nexports.schemeAccent = Accent;\nexports.schemeDark2 = Dark2;\nexports.schemePaired = Paired;\nexports.schemePastel1 = Pastel1;\nexports.schemePastel2 = Pastel2;\nexports.schemeSet1 = Set1;\nexports.schemeSet2 = Set2;\nexports.schemeSet3 = Set3;\nexports.interpolateBrBG = BrBG;\nexports.schemeBrBG = scheme;\nexports.interpolatePRGn = PRGn;\nexports.schemePRGn = scheme$1;\nexports.interpolatePiYG = PiYG;\nexports.schemePiYG = scheme$2;\nexports.interpolatePuOr = PuOr;\nexports.schemePuOr = scheme$3;\nexports.interpolateRdBu = RdBu;\nexports.schemeRdBu = scheme$4;\nexports.interpolateRdGy = RdGy;\nexports.schemeRdGy = scheme$5;\nexports.interpolateRdYlBu = RdYlBu;\nexports.schemeRdYlBu = scheme$6;\nexports.interpolateRdYlGn = RdYlGn;\nexports.schemeRdYlGn = scheme$7;\nexports.interpolateSpectral = Spectral;\nexports.schemeSpectral = scheme$8;\nexports.interpolateBuGn = BuGn;\nexports.schemeBuGn = scheme$9;\nexports.interpolateBuPu = BuPu;\nexports.schemeBuPu = scheme$a;\nexports.interpolateGnBu = GnBu;\nexports.schemeGnBu = scheme$b;\nexports.interpolateOrRd = OrRd;\nexports.schemeOrRd = scheme$c;\nexports.interpolatePuBuGn = PuBuGn;\nexports.schemePuBuGn = scheme$d;\nexports.interpolatePuBu = PuBu;\nexports.schemePuBu = scheme$e;\nexports.interpolatePuRd = PuRd;\nexports.schemePuRd = scheme$f;\nexports.interpolateRdPu = RdPu;\nexports.schemeRdPu = scheme$g;\nexports.interpolateYlGnBu = YlGnBu;\nexports.schemeYlGnBu = scheme$h;\nexports.interpolateYlGn = YlGn;\nexports.schemeYlGn = scheme$i;\nexports.interpolateYlOrBr = YlOrBr;\nexports.schemeYlOrBr = scheme$j;\nexports.interpolateYlOrRd = YlOrRd;\nexports.schemeYlOrRd = scheme$k;\nexports.interpolateBlues = Blues;\nexports.schemeBlues = scheme$l;\nexports.interpolateGreens = Greens;\nexports.schemeGreens = scheme$m;\nexports.interpolateGreys = Greys;\nexports.schemeGreys = scheme$n;\nexports.interpolatePurples = Purples;\nexports.schemePurples = scheme$o;\nexports.interpolateReds = Reds;\nexports.schemeReds = scheme$p;\nexports.interpolateOranges = Oranges;\nexports.schemeOranges = scheme$q;\nexports.interpolateCubehelixDefault = cubehelix$3;\nexports.interpolateRainbow = rainbow;\nexports.interpolateWarm = warm;\nexports.interpolateCool = cool;\nexports.interpolateSinebow = sinebow;\nexports.interpolateViridis = viridis;\nexports.interpolateMagma = magma;\nexports.interpolateInferno = inferno;\nexports.interpolatePlasma = plasma;\nexports.create = create;\nexports.creator = creator;\nexports.local = local;\nexports.matcher = matcher;\nexports.mouse = mouse;\nexports.namespace = namespace;\nexports.namespaces = namespaces;\nexports.clientPoint = point;\nexports.select = select;\nexports.selectAll = selectAll;\nexports.selection = selection;\nexports.selector = selector;\nexports.selectorAll = selectorAll;\nexports.style = styleValue;\nexports.touch = touch;\nexports.touches = touches;\nexports.window = defaultView;\nexports.customEvent = customEvent;\nexports.arc = arc;\nexports.area = area$3;\nexports.line = line;\nexports.pie = pie;\nexports.areaRadial = areaRadial;\nexports.radialArea = areaRadial;\nexports.lineRadial = lineRadial$1;\nexports.radialLine = lineRadial$1;\nexports.pointRadial = pointRadial;\nexports.linkHorizontal = linkHorizontal;\nexports.linkVertical = linkVertical;\nexports.linkRadial = linkRadial;\nexports.symbol = symbol;\nexports.symbols = symbols;\nexports.symbolCircle = circle$2;\nexports.symbolCross = cross$2;\nexports.symbolDiamond = diamond;\nexports.symbolSquare = square;\nexports.symbolStar = star;\nexports.symbolTriangle = triangle;\nexports.symbolWye = wye;\nexports.curveBasisClosed = basisClosed$1;\nexports.curveBasisOpen = basisOpen;\nexports.curveBasis = basis$2;\nexports.curveBundle = bundle;\nexports.curveCardinalClosed = cardinalClosed;\nexports.curveCardinalOpen = cardinalOpen;\nexports.curveCardinal = cardinal;\nexports.curveCatmullRomClosed = catmullRomClosed;\nexports.curveCatmullRomOpen = catmullRomOpen;\nexports.curveCatmullRom = catmullRom;\nexports.curveLinearClosed = linearClosed;\nexports.curveLinear = curveLinear;\nexports.curveMonotoneX = monotoneX;\nexports.curveMonotoneY = monotoneY;\nexports.curveNatural = natural;\nexports.curveStep = step;\nexports.curveStepAfter = stepAfter;\nexports.curveStepBefore = stepBefore;\nexports.stack = stack;\nexports.stackOffsetExpand = expand;\nexports.stackOffsetDiverging = diverging$1;\nexports.stackOffsetNone = none$1;\nexports.stackOffsetSilhouette = silhouette;\nexports.stackOffsetWiggle = wiggle;\nexports.stackOrderAppearance = appearance;\nexports.stackOrderAscending = ascending$3;\nexports.stackOrderDescending = descending$2;\nexports.stackOrderInsideOut = insideOut;\nexports.stackOrderNone = none$2;\nexports.stackOrderReverse = reverse;\nexports.timeInterval = newInterval;\nexports.timeMillisecond = millisecond;\nexports.timeMilliseconds = milliseconds;\nexports.utcMillisecond = millisecond;\nexports.utcMilliseconds = milliseconds;\nexports.timeSecond = second;\nexports.timeSeconds = seconds;\nexports.utcSecond = second;\nexports.utcSeconds = seconds;\nexports.timeMinute = minute;\nexports.timeMinutes = minutes;\nexports.timeHour = hour;\nexports.timeHours = hours;\nexports.timeDay = day;\nexports.timeDays = days;\nexports.timeWeek = sunday;\nexports.timeWeeks = sundays;\nexports.timeSunday = sunday;\nexports.timeSundays = sundays;\nexports.timeMonday = monday;\nexports.timeMondays = mondays;\nexports.timeTuesday = tuesday;\nexports.timeTuesdays = tuesdays;\nexports.timeWednesday = wednesday;\nexports.timeWednesdays = wednesdays;\nexports.timeThursday = thursday;\nexports.timeThursdays = thursdays;\nexports.timeFriday = friday;\nexports.timeFridays = fridays;\nexports.timeSaturday = saturday;\nexports.timeSaturdays = saturdays;\nexports.timeMonth = month;\nexports.timeMonths = months;\nexports.timeYear = year;\nexports.timeYears = years;\nexports.utcMinute = utcMinute;\nexports.utcMinutes = utcMinutes;\nexports.utcHour = utcHour;\nexports.utcHours = utcHours;\nexports.utcDay = utcDay;\nexports.utcDays = utcDays;\nexports.utcWeek = utcSunday;\nexports.utcWeeks = utcSundays;\nexports.utcSunday = utcSunday;\nexports.utcSundays = utcSundays;\nexports.utcMonday = utcMonday;\nexports.utcMondays = utcMondays;\nexports.utcTuesday = utcTuesday;\nexports.utcTuesdays = utcTuesdays;\nexports.utcWednesday = utcWednesday;\nexports.utcWednesdays = utcWednesdays;\nexports.utcThursday = utcThursday;\nexports.utcThursdays = utcThursdays;\nexports.utcFriday = utcFriday;\nexports.utcFridays = utcFridays;\nexports.utcSaturday = utcSaturday;\nexports.utcSaturdays = utcSaturdays;\nexports.utcMonth = utcMonth;\nexports.utcMonths = utcMonths;\nexports.utcYear = utcYear;\nexports.utcYears = utcYears;\nexports.timeFormatDefaultLocale = defaultLocale$1;\nexports.timeFormatLocale = formatLocale$1;\nexports.isoFormat = formatIso;\nexports.isoParse = parseIso;\nexports.now = now;\nexports.timer = timer;\nexports.timerFlush = timerFlush;\nexports.timeout = timeout$1;\nexports.interval = interval$1;\nexports.transition = transition;\nexports.active = active;\nexports.interrupt = interrupt;\nexports.voronoi = voronoi;\nexports.zoom = zoom;\nexports.zoomTransform = transform$1;\nexports.zoomIdentity = identity$9;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n","/* @license C3.js v0.6.12 | (c) C3 Team and other contributors | http://c3js.org/ */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define('c3',factory) :\n  (global.c3 = factory());\n}(this, (function () { 'use strict';\n\n  function _typeof(obj) {\n    if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n      _typeof = function (obj) {\n        return typeof obj;\n      };\n    } else {\n      _typeof = function (obj) {\n        return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n      };\n    }\n\n    return _typeof(obj);\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function ChartInternal(api) {\n    var $$ = this;\n    $$.d3 = window.d3 ? window.d3 : typeof require !== 'undefined' ? require(\"d3\") : undefined;\n    $$.api = api;\n    $$.config = $$.getDefaultConfig();\n    $$.data = {};\n    $$.cache = {};\n    $$.axes = {};\n  }\n\n  function Chart(config) {\n    var $$ = this.internal = new ChartInternal(this);\n    $$.loadConfig(config);\n    $$.beforeInit(config);\n    $$.init();\n    $$.afterInit(config); // bind \"this\" to nested API\n\n    (function bindThis(fn, target, argThis) {\n      Object.keys(fn).forEach(function (key) {\n        target[key] = fn[key].bind(argThis);\n\n        if (Object.keys(fn[key]).length > 0) {\n          bindThis(fn[key], target[key], argThis);\n        }\n      });\n    })(Chart.prototype, this, this);\n  }\n\n  function AxisInternal(component, params) {\n    var internal = this;\n    internal.component = component;\n    internal.params = params || {};\n    internal.d3 = component.d3;\n    internal.scale = internal.d3.scaleLinear();\n    internal.range;\n    internal.orient = \"bottom\";\n    internal.innerTickSize = 6;\n    internal.outerTickSize = this.params.withOuterTick ? 6 : 0;\n    internal.tickPadding = 3;\n    internal.tickValues = null;\n    internal.tickFormat;\n    internal.tickArguments;\n    internal.tickOffset = 0;\n    internal.tickCulling = true;\n    internal.tickCentered;\n    internal.tickTextCharSize;\n    internal.tickTextRotate = internal.params.tickTextRotate;\n    internal.tickLength;\n    internal.axis = internal.generateAxis();\n  }\n\n  AxisInternal.prototype.axisX = function (selection, x, tickOffset) {\n    selection.attr(\"transform\", function (d) {\n      return \"translate(\" + Math.ceil(x(d) + tickOffset) + \", 0)\";\n    });\n  };\n\n  AxisInternal.prototype.axisY = function (selection, y) {\n    selection.attr(\"transform\", function (d) {\n      return \"translate(0,\" + Math.ceil(y(d)) + \")\";\n    });\n  };\n\n  AxisInternal.prototype.scaleExtent = function (domain) {\n    var start = domain[0],\n        stop = domain[domain.length - 1];\n    return start < stop ? [start, stop] : [stop, start];\n  };\n\n  AxisInternal.prototype.generateTicks = function (scale) {\n    var internal = this;\n    var i,\n        domain,\n        ticks = [];\n\n    if (scale.ticks) {\n      return scale.ticks.apply(scale, internal.tickArguments);\n    }\n\n    domain = scale.domain();\n\n    for (i = Math.ceil(domain[0]); i < domain[1]; i++) {\n      ticks.push(i);\n    }\n\n    if (ticks.length > 0 && ticks[0] > 0) {\n      ticks.unshift(ticks[0] - (ticks[1] - ticks[0]));\n    }\n\n    return ticks;\n  };\n\n  AxisInternal.prototype.copyScale = function () {\n    var internal = this;\n    var newScale = internal.scale.copy(),\n        domain;\n\n    if (internal.params.isCategory) {\n      domain = internal.scale.domain();\n      newScale.domain([domain[0], domain[1] - 1]);\n    }\n\n    return newScale;\n  };\n\n  AxisInternal.prototype.textFormatted = function (v) {\n    var internal = this,\n        formatted = internal.tickFormat ? internal.tickFormat(v) : v;\n    return typeof formatted !== 'undefined' ? formatted : '';\n  };\n\n  AxisInternal.prototype.updateRange = function () {\n    var internal = this;\n    internal.range = internal.scale.rangeExtent ? internal.scale.rangeExtent() : internal.scaleExtent(internal.scale.range());\n    return internal.range;\n  };\n\n  AxisInternal.prototype.updateTickTextCharSize = function (tick) {\n    var internal = this;\n\n    if (internal.tickTextCharSize) {\n      return internal.tickTextCharSize;\n    }\n\n    var size = {\n      h: 11.5,\n      w: 5.5\n    };\n    tick.select('text').text(function (d) {\n      return internal.textFormatted(d);\n    }).each(function (d) {\n      var box = this.getBoundingClientRect(),\n          text = internal.textFormatted(d),\n          h = box.height,\n          w = text ? box.width / text.length : undefined;\n\n      if (h && w) {\n        size.h = h;\n        size.w = w;\n      }\n    }).text('');\n    internal.tickTextCharSize = size;\n    return size;\n  };\n\n  AxisInternal.prototype.isVertical = function () {\n    return this.orient === 'left' || this.orient === 'right';\n  };\n\n  AxisInternal.prototype.tspanData = function (d, i, scale) {\n    var internal = this;\n    var splitted = internal.params.tickMultiline ? internal.splitTickText(d, scale) : [].concat(internal.textFormatted(d));\n\n    if (internal.params.tickMultiline && internal.params.tickMultilineMax > 0) {\n      splitted = internal.ellipsify(splitted, internal.params.tickMultilineMax);\n    }\n\n    return splitted.map(function (s) {\n      return {\n        index: i,\n        splitted: s,\n        length: splitted.length\n      };\n    });\n  };\n\n  AxisInternal.prototype.splitTickText = function (d, scale) {\n    var internal = this,\n        tickText = internal.textFormatted(d),\n        maxWidth = internal.params.tickWidth,\n        subtext,\n        spaceIndex,\n        textWidth,\n        splitted = [];\n\n    if (Object.prototype.toString.call(tickText) === \"[object Array]\") {\n      return tickText;\n    }\n\n    if (!maxWidth || maxWidth <= 0) {\n      maxWidth = internal.isVertical() ? 95 : internal.params.isCategory ? Math.ceil(scale(1) - scale(0)) - 12 : 110;\n    }\n\n    function split(splitted, text) {\n      spaceIndex = undefined;\n\n      for (var i = 1; i < text.length; i++) {\n        if (text.charAt(i) === ' ') {\n          spaceIndex = i;\n        }\n\n        subtext = text.substr(0, i + 1);\n        textWidth = internal.tickTextCharSize.w * subtext.length; // if text width gets over tick width, split by space index or crrent index\n\n        if (maxWidth < textWidth) {\n          return split(splitted.concat(text.substr(0, spaceIndex ? spaceIndex : i)), text.slice(spaceIndex ? spaceIndex + 1 : i));\n        }\n      }\n\n      return splitted.concat(text);\n    }\n\n    return split(splitted, tickText + \"\");\n  };\n\n  AxisInternal.prototype.ellipsify = function (splitted, max) {\n    if (splitted.length <= max) {\n      return splitted;\n    }\n\n    var ellipsified = splitted.slice(0, max);\n    var remaining = 3;\n\n    for (var i = max - 1; i >= 0; i--) {\n      var available = ellipsified[i].length;\n      ellipsified[i] = ellipsified[i].substr(0, available - remaining).padEnd(available, '.');\n      remaining -= available;\n\n      if (remaining <= 0) {\n        break;\n      }\n    }\n\n    return ellipsified;\n  };\n\n  AxisInternal.prototype.updateTickLength = function () {\n    var internal = this;\n    internal.tickLength = Math.max(internal.innerTickSize, 0) + internal.tickPadding;\n  };\n\n  AxisInternal.prototype.lineY2 = function (d) {\n    var internal = this,\n        tickPosition = internal.scale(d) + (internal.tickCentered ? 0 : internal.tickOffset);\n    return internal.range[0] < tickPosition && tickPosition < internal.range[1] ? internal.innerTickSize : 0;\n  };\n\n  AxisInternal.prototype.textY = function () {\n    var internal = this,\n        rotate = internal.tickTextRotate;\n    return rotate ? 11.5 - 2.5 * (rotate / 15) * (rotate > 0 ? 1 : -1) : internal.tickLength;\n  };\n\n  AxisInternal.prototype.textTransform = function () {\n    var internal = this,\n        rotate = internal.tickTextRotate;\n    return rotate ? \"rotate(\" + rotate + \")\" : \"\";\n  };\n\n  AxisInternal.prototype.textTextAnchor = function () {\n    var internal = this,\n        rotate = internal.tickTextRotate;\n    return rotate ? rotate > 0 ? \"start\" : \"end\" : \"middle\";\n  };\n\n  AxisInternal.prototype.tspanDx = function () {\n    var internal = this,\n        rotate = internal.tickTextRotate;\n    return rotate ? 8 * Math.sin(Math.PI * (rotate / 180)) : 0;\n  };\n\n  AxisInternal.prototype.tspanDy = function (d, i) {\n    var internal = this,\n        dy = internal.tickTextCharSize.h;\n\n    if (i === 0) {\n      if (internal.isVertical()) {\n        dy = -((d.length - 1) * (internal.tickTextCharSize.h / 2) - 3);\n      } else {\n        dy = \".71em\";\n      }\n    }\n\n    return dy;\n  };\n\n  AxisInternal.prototype.generateAxis = function () {\n    var internal = this,\n        d3 = internal.d3,\n        params = internal.params;\n\n    function axis(g, transition) {\n      var self;\n      g.each(function () {\n        var g = axis.g = d3.select(this);\n        var scale0 = this.__chart__ || internal.scale,\n            scale1 = this.__chart__ = internal.copyScale();\n        var ticksValues = internal.tickValues ? internal.tickValues : internal.generateTicks(scale1),\n            ticks = g.selectAll(\".tick\").data(ticksValues, scale1),\n            tickEnter = ticks.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", 1e-6),\n            // MEMO: No exit transition. The reason is this transition affects max tick width calculation because old tick will be included in the ticks.\n        tickExit = ticks.exit().remove(),\n            tickUpdate = ticks.merge(tickEnter),\n            tickTransform,\n            tickX,\n            tickY;\n\n        if (params.isCategory) {\n          internal.tickOffset = Math.ceil((scale1(1) - scale1(0)) / 2);\n          tickX = internal.tickCentered ? 0 : internal.tickOffset;\n          tickY = internal.tickCentered ? internal.tickOffset : 0;\n        } else {\n          internal.tickOffset = tickX = 0;\n        }\n\n        internal.updateRange();\n        internal.updateTickLength();\n        internal.updateTickTextCharSize(g.select('.tick'));\n        var lineUpdate = tickUpdate.select(\"line\").merge(tickEnter.append(\"line\")),\n            textUpdate = tickUpdate.select(\"text\").merge(tickEnter.append(\"text\"));\n        var tspans = tickUpdate.selectAll('text').selectAll('tspan').data(function (d, i) {\n          return internal.tspanData(d, i, scale1);\n        }),\n            tspanEnter = tspans.enter().append('tspan'),\n            tspanUpdate = tspanEnter.merge(tspans).text(function (d) {\n          return d.splitted;\n        });\n        tspans.exit().remove();\n        var path = g.selectAll(\".domain\").data([0]),\n            pathUpdate = path.enter().append(\"path\").merge(path).attr(\"class\", \"domain\"); // TODO: each attr should be one function and change its behavior by internal.orient, probably\n\n        switch (internal.orient) {\n          case \"bottom\":\n            {\n              tickTransform = internal.axisX;\n              lineUpdate.attr(\"x1\", tickX).attr(\"x2\", tickX).attr(\"y2\", function (d, i) {\n                return internal.lineY2(d, i);\n              });\n              textUpdate.attr(\"x\", 0).attr(\"y\", function (d, i) {\n                return internal.textY(d, i);\n              }).attr(\"transform\", function (d, i) {\n                return internal.textTransform(d, i);\n              }).style(\"text-anchor\", function (d, i) {\n                return internal.textTextAnchor(d, i);\n              });\n              tspanUpdate.attr('x', 0).attr(\"dy\", function (d, i) {\n                return internal.tspanDy(d, i);\n              }).attr('dx', function (d, i) {\n                return internal.tspanDx(d, i);\n              });\n              pathUpdate.attr(\"d\", \"M\" + internal.range[0] + \",\" + internal.outerTickSize + \"V0H\" + internal.range[1] + \"V\" + internal.outerTickSize);\n              break;\n            }\n\n          case \"top\":\n            {\n              // TODO: rotated tick text\n              tickTransform = internal.axisX;\n              lineUpdate.attr(\"x1\", tickX).attr(\"x2\", tickX).attr(\"y2\", function (d, i) {\n                return -1 * internal.lineY2(d, i);\n              });\n              textUpdate.attr(\"x\", 0).attr(\"y\", function (d, i) {\n                return -1 * internal.textY(d, i) - (params.isCategory ? 2 : internal.tickLength - 2);\n              }).attr(\"transform\", function (d, i) {\n                return internal.textTransform(d, i);\n              }).style(\"text-anchor\", function (d, i) {\n                return internal.textTextAnchor(d, i);\n              });\n              tspanUpdate.attr('x', 0).attr(\"dy\", function (d, i) {\n                return internal.tspanDy(d, i);\n              }).attr('dx', function (d, i) {\n                return internal.tspanDx(d, i);\n              });\n              pathUpdate.attr(\"d\", \"M\" + internal.range[0] + \",\" + -internal.outerTickSize + \"V0H\" + internal.range[1] + \"V\" + -internal.outerTickSize);\n              break;\n            }\n\n          case \"left\":\n            {\n              tickTransform = internal.axisY;\n              lineUpdate.attr(\"x2\", -internal.innerTickSize).attr(\"y1\", tickY).attr(\"y2\", tickY);\n              textUpdate.attr(\"x\", -internal.tickLength).attr(\"y\", internal.tickOffset).style(\"text-anchor\", \"end\");\n              tspanUpdate.attr('x', -internal.tickLength).attr(\"dy\", function (d, i) {\n                return internal.tspanDy(d, i);\n              });\n              pathUpdate.attr(\"d\", \"M\" + -internal.outerTickSize + \",\" + internal.range[0] + \"H0V\" + internal.range[1] + \"H\" + -internal.outerTickSize);\n              break;\n            }\n\n          case \"right\":\n            {\n              tickTransform = internal.axisY;\n              lineUpdate.attr(\"x2\", internal.innerTickSize).attr(\"y1\", tickY).attr(\"y2\", tickY);\n              textUpdate.attr(\"x\", internal.tickLength).attr(\"y\", internal.tickOffset).style(\"text-anchor\", \"start\");\n              tspanUpdate.attr('x', internal.tickLength).attr(\"dy\", function (d, i) {\n                return internal.tspanDy(d, i);\n              });\n              pathUpdate.attr(\"d\", \"M\" + internal.outerTickSize + \",\" + internal.range[0] + \"H0V\" + internal.range[1] + \"H\" + internal.outerTickSize);\n              break;\n            }\n        }\n\n        if (scale1.rangeBand) {\n          var x = scale1,\n              dx = x.rangeBand() / 2;\n\n          scale0 = scale1 = function scale1(d) {\n            return x(d) + dx;\n          };\n        } else if (scale0.rangeBand) {\n          scale0 = scale1;\n        } else {\n          tickExit.call(tickTransform, scale1, internal.tickOffset);\n        }\n\n        tickEnter.call(tickTransform, scale0, internal.tickOffset);\n        self = (transition ? tickUpdate.transition(transition) : tickUpdate).style('opacity', 1).call(tickTransform, scale1, internal.tickOffset);\n      });\n      return self;\n    }\n\n    axis.scale = function (x) {\n      if (!arguments.length) {\n        return internal.scale;\n      }\n\n      internal.scale = x;\n      return axis;\n    };\n\n    axis.orient = function (x) {\n      if (!arguments.length) {\n        return internal.orient;\n      }\n\n      internal.orient = x in {\n        top: 1,\n        right: 1,\n        bottom: 1,\n        left: 1\n      } ? x + \"\" : \"bottom\";\n      return axis;\n    };\n\n    axis.tickFormat = function (format) {\n      if (!arguments.length) {\n        return internal.tickFormat;\n      }\n\n      internal.tickFormat = format;\n      return axis;\n    };\n\n    axis.tickCentered = function (isCentered) {\n      if (!arguments.length) {\n        return internal.tickCentered;\n      }\n\n      internal.tickCentered = isCentered;\n      return axis;\n    };\n\n    axis.tickOffset = function () {\n      return internal.tickOffset;\n    };\n\n    axis.tickInterval = function () {\n      var interval, length;\n\n      if (params.isCategory) {\n        interval = internal.tickOffset * 2;\n      } else {\n        length = axis.g.select('path.domain').node().getTotalLength() - internal.outerTickSize * 2;\n        interval = length / axis.g.selectAll('line').size();\n      }\n\n      return interval === Infinity ? 0 : interval;\n    };\n\n    axis.ticks = function () {\n      if (!arguments.length) {\n        return internal.tickArguments;\n      }\n\n      internal.tickArguments = arguments;\n      return axis;\n    };\n\n    axis.tickCulling = function (culling) {\n      if (!arguments.length) {\n        return internal.tickCulling;\n      }\n\n      internal.tickCulling = culling;\n      return axis;\n    };\n\n    axis.tickValues = function (x) {\n      if (typeof x === 'function') {\n        internal.tickValues = function () {\n          return x(internal.scale.domain());\n        };\n      } else {\n        if (!arguments.length) {\n          return internal.tickValues;\n        }\n\n        internal.tickValues = x;\n      }\n\n      return axis;\n    };\n\n    return axis;\n  };\n\n  var CLASS = {\n    target: 'c3-target',\n    chart: 'c3-chart',\n    chartLine: 'c3-chart-line',\n    chartLines: 'c3-chart-lines',\n    chartBar: 'c3-chart-bar',\n    chartBars: 'c3-chart-bars',\n    chartText: 'c3-chart-text',\n    chartTexts: 'c3-chart-texts',\n    chartArc: 'c3-chart-arc',\n    chartArcs: 'c3-chart-arcs',\n    chartArcsTitle: 'c3-chart-arcs-title',\n    chartArcsBackground: 'c3-chart-arcs-background',\n    chartArcsGaugeUnit: 'c3-chart-arcs-gauge-unit',\n    chartArcsGaugeMax: 'c3-chart-arcs-gauge-max',\n    chartArcsGaugeMin: 'c3-chart-arcs-gauge-min',\n    selectedCircle: 'c3-selected-circle',\n    selectedCircles: 'c3-selected-circles',\n    eventRect: 'c3-event-rect',\n    eventRects: 'c3-event-rects',\n    eventRectsSingle: 'c3-event-rects-single',\n    eventRectsMultiple: 'c3-event-rects-multiple',\n    zoomRect: 'c3-zoom-rect',\n    brush: 'c3-brush',\n    dragZoom: 'c3-drag-zoom',\n    focused: 'c3-focused',\n    defocused: 'c3-defocused',\n    region: 'c3-region',\n    regions: 'c3-regions',\n    title: 'c3-title',\n    tooltipContainer: 'c3-tooltip-container',\n    tooltip: 'c3-tooltip',\n    tooltipName: 'c3-tooltip-name',\n    shape: 'c3-shape',\n    shapes: 'c3-shapes',\n    line: 'c3-line',\n    lines: 'c3-lines',\n    bar: 'c3-bar',\n    bars: 'c3-bars',\n    circle: 'c3-circle',\n    circles: 'c3-circles',\n    arc: 'c3-arc',\n    arcLabelLine: 'c3-arc-label-line',\n    arcs: 'c3-arcs',\n    area: 'c3-area',\n    areas: 'c3-areas',\n    empty: 'c3-empty',\n    text: 'c3-text',\n    texts: 'c3-texts',\n    gaugeValue: 'c3-gauge-value',\n    grid: 'c3-grid',\n    gridLines: 'c3-grid-lines',\n    xgrid: 'c3-xgrid',\n    xgrids: 'c3-xgrids',\n    xgridLine: 'c3-xgrid-line',\n    xgridLines: 'c3-xgrid-lines',\n    xgridFocus: 'c3-xgrid-focus',\n    ygrid: 'c3-ygrid',\n    ygrids: 'c3-ygrids',\n    ygridLine: 'c3-ygrid-line',\n    ygridLines: 'c3-ygrid-lines',\n    axis: 'c3-axis',\n    axisX: 'c3-axis-x',\n    axisXLabel: 'c3-axis-x-label',\n    axisY: 'c3-axis-y',\n    axisYLabel: 'c3-axis-y-label',\n    axisY2: 'c3-axis-y2',\n    axisY2Label: 'c3-axis-y2-label',\n    legendBackground: 'c3-legend-background',\n    legendItem: 'c3-legend-item',\n    legendItemEvent: 'c3-legend-item-event',\n    legendItemTile: 'c3-legend-item-tile',\n    legendItemHidden: 'c3-legend-item-hidden',\n    legendItemFocused: 'c3-legend-item-focused',\n    dragarea: 'c3-dragarea',\n    EXPANDED: '_expanded_',\n    SELECTED: '_selected_',\n    INCLUDED: '_included_'\n  };\n\n  var asHalfPixel = function asHalfPixel(n) {\n    return Math.ceil(n) + 0.5;\n  };\n  var ceil10 = function ceil10(v) {\n    return Math.ceil(v / 10) * 10;\n  };\n  var diffDomain = function diffDomain(d) {\n    return d[1] - d[0];\n  };\n  var getOption = function getOption(options, key, defaultValue) {\n    return isDefined(options[key]) ? options[key] : defaultValue;\n  };\n  var getPathBox = function getPathBox(path) {\n    var box = path.getBoundingClientRect(),\n        items = [path.pathSegList.getItem(0), path.pathSegList.getItem(1)],\n        minX = items[0].x,\n        minY = Math.min(items[0].y, items[1].y);\n    return {\n      x: minX,\n      y: minY,\n      width: box.width,\n      height: box.height\n    };\n  };\n  var hasValue = function hasValue(dict, value) {\n    var found = false;\n    Object.keys(dict).forEach(function (key) {\n      if (dict[key] === value) {\n        found = true;\n      }\n    });\n    return found;\n  };\n  var isArray = function isArray(o) {\n    return Array.isArray(o);\n  };\n  var isDefined = function isDefined(v) {\n    return typeof v !== 'undefined';\n  };\n  var isEmpty = function isEmpty(o) {\n    return typeof o === 'undefined' || o === null || isString(o) && o.length === 0 || _typeof(o) === 'object' && Object.keys(o).length === 0;\n  };\n  var isFunction = function isFunction(o) {\n    return typeof o === 'function';\n  };\n  var isString = function isString(o) {\n    return typeof o === 'string';\n  };\n  var isUndefined = function isUndefined(v) {\n    return typeof v === 'undefined';\n  };\n  var isValue = function isValue(v) {\n    return v || v === 0;\n  };\n  var notEmpty = function notEmpty(o) {\n    return !isEmpty(o);\n  };\n  var sanitise = function sanitise(str) {\n    return typeof str === 'string' ? str.replace(/</g, '&lt;').replace(/>/g, '&gt;') : str;\n  };\n\n  var Axis = function Axis(owner) {\n    _classCallCheck(this, Axis);\n\n    this.owner = owner;\n    this.d3 = owner.d3;\n    this.internal = AxisInternal;\n  };\n\n  Axis.prototype.init = function init() {\n    var $$ = this.owner,\n        config = $$.config,\n        main = $$.main;\n    $$.axes.x = main.append(\"g\").attr(\"class\", CLASS.axis + ' ' + CLASS.axisX).attr(\"clip-path\", config.axis_x_inner ? \"\" : $$.clipPathForXAxis).attr(\"transform\", $$.getTranslate('x')).style(\"visibility\", config.axis_x_show ? 'visible' : 'hidden');\n    $$.axes.x.append(\"text\").attr(\"class\", CLASS.axisXLabel).attr(\"transform\", config.axis_rotated ? \"rotate(-90)\" : \"\").style(\"text-anchor\", this.textAnchorForXAxisLabel.bind(this));\n    $$.axes.y = main.append(\"g\").attr(\"class\", CLASS.axis + ' ' + CLASS.axisY).attr(\"clip-path\", config.axis_y_inner ? \"\" : $$.clipPathForYAxis).attr(\"transform\", $$.getTranslate('y')).style(\"visibility\", config.axis_y_show ? 'visible' : 'hidden');\n    $$.axes.y.append(\"text\").attr(\"class\", CLASS.axisYLabel).attr(\"transform\", config.axis_rotated ? \"\" : \"rotate(-90)\").style(\"text-anchor\", this.textAnchorForYAxisLabel.bind(this));\n    $$.axes.y2 = main.append(\"g\").attr(\"class\", CLASS.axis + ' ' + CLASS.axisY2) // clip-path?\n    .attr(\"transform\", $$.getTranslate('y2')).style(\"visibility\", config.axis_y2_show ? 'visible' : 'hidden');\n    $$.axes.y2.append(\"text\").attr(\"class\", CLASS.axisY2Label).attr(\"transform\", config.axis_rotated ? \"\" : \"rotate(-90)\").style(\"text-anchor\", this.textAnchorForY2AxisLabel.bind(this));\n  };\n\n  Axis.prototype.getXAxis = function getXAxis(scale, orient, tickFormat, tickValues, withOuterTick, withoutTransition, withoutRotateTickText) {\n    var $$ = this.owner,\n        config = $$.config,\n        axisParams = {\n      isCategory: $$.isCategorized(),\n      withOuterTick: withOuterTick,\n      tickMultiline: config.axis_x_tick_multiline,\n      tickMultilineMax: config.axis_x_tick_multiline ? Number(config.axis_x_tick_multilineMax) : 0,\n      tickWidth: config.axis_x_tick_width,\n      tickTextRotate: withoutRotateTickText ? 0 : config.axis_x_tick_rotate,\n      withoutTransition: withoutTransition\n    },\n        axis = new this.internal(this, axisParams).axis.scale(scale).orient(orient);\n\n    if ($$.isTimeSeries() && tickValues && typeof tickValues !== \"function\") {\n      tickValues = tickValues.map(function (v) {\n        return $$.parseDate(v);\n      });\n    } // Set tick\n\n\n    axis.tickFormat(tickFormat).tickValues(tickValues);\n\n    if ($$.isCategorized()) {\n      axis.tickCentered(config.axis_x_tick_centered);\n\n      if (isEmpty(config.axis_x_tick_culling)) {\n        config.axis_x_tick_culling = false;\n      }\n    }\n\n    return axis;\n  };\n\n  Axis.prototype.updateXAxisTickValues = function updateXAxisTickValues(targets, axis) {\n    var $$ = this.owner,\n        config = $$.config,\n        tickValues;\n\n    if (config.axis_x_tick_fit || config.axis_x_tick_count) {\n      tickValues = this.generateTickValues($$.mapTargetsToUniqueXs(targets), config.axis_x_tick_count, $$.isTimeSeries());\n    }\n\n    if (axis) {\n      axis.tickValues(tickValues);\n    } else {\n      $$.xAxis.tickValues(tickValues);\n      $$.subXAxis.tickValues(tickValues);\n    }\n\n    return tickValues;\n  };\n\n  Axis.prototype.getYAxis = function getYAxis(scale, orient, tickFormat, tickValues, withOuterTick, withoutTransition, withoutRotateTickText) {\n    var $$ = this.owner,\n        config = $$.config,\n        axisParams = {\n      withOuterTick: withOuterTick,\n      withoutTransition: withoutTransition,\n      tickTextRotate: withoutRotateTickText ? 0 : config.axis_y_tick_rotate\n    },\n        axis = new this.internal(this, axisParams).axis.scale(scale).orient(orient).tickFormat(tickFormat);\n\n    if ($$.isTimeSeriesY()) {\n      axis.ticks(config.axis_y_tick_time_type, config.axis_y_tick_time_interval);\n    } else {\n      axis.tickValues(tickValues);\n    }\n\n    return axis;\n  };\n\n  Axis.prototype.getId = function getId(id) {\n    var config = this.owner.config;\n    return id in config.data_axes ? config.data_axes[id] : 'y';\n  };\n\n  Axis.prototype.getXAxisTickFormat = function getXAxisTickFormat() {\n    // #2251 previously set any negative values to a whole number,\n    // however both should be truncated according to the users format specification\n    var $$ = this.owner,\n        config = $$.config;\n    var format = $$.isTimeSeries() ? $$.defaultAxisTimeFormat : $$.isCategorized() ? $$.categoryName : function (v) {\n      return v;\n    };\n\n    if (config.axis_x_tick_format) {\n      if (isFunction(config.axis_x_tick_format)) {\n        format = config.axis_x_tick_format;\n      } else if ($$.isTimeSeries()) {\n        format = function format(date) {\n          return date ? $$.axisTimeFormat(config.axis_x_tick_format)(date) : \"\";\n        };\n      }\n    }\n\n    return isFunction(format) ? function (v) {\n      return format.call($$, v);\n    } : format;\n  };\n\n  Axis.prototype.getTickValues = function getTickValues(tickValues, axis) {\n    return tickValues ? tickValues : axis ? axis.tickValues() : undefined;\n  };\n\n  Axis.prototype.getXAxisTickValues = function getXAxisTickValues() {\n    return this.getTickValues(this.owner.config.axis_x_tick_values, this.owner.xAxis);\n  };\n\n  Axis.prototype.getYAxisTickValues = function getYAxisTickValues() {\n    return this.getTickValues(this.owner.config.axis_y_tick_values, this.owner.yAxis);\n  };\n\n  Axis.prototype.getY2AxisTickValues = function getY2AxisTickValues() {\n    return this.getTickValues(this.owner.config.axis_y2_tick_values, this.owner.y2Axis);\n  };\n\n  Axis.prototype.getLabelOptionByAxisId = function getLabelOptionByAxisId(axisId) {\n    var $$ = this.owner,\n        config = $$.config,\n        option;\n\n    if (axisId === 'y') {\n      option = config.axis_y_label;\n    } else if (axisId === 'y2') {\n      option = config.axis_y2_label;\n    } else if (axisId === 'x') {\n      option = config.axis_x_label;\n    }\n\n    return option;\n  };\n\n  Axis.prototype.getLabelText = function getLabelText(axisId) {\n    var option = this.getLabelOptionByAxisId(axisId);\n    return isString(option) ? option : option ? option.text : null;\n  };\n\n  Axis.prototype.setLabelText = function setLabelText(axisId, text) {\n    var $$ = this.owner,\n        config = $$.config,\n        option = this.getLabelOptionByAxisId(axisId);\n\n    if (isString(option)) {\n      if (axisId === 'y') {\n        config.axis_y_label = text;\n      } else if (axisId === 'y2') {\n        config.axis_y2_label = text;\n      } else if (axisId === 'x') {\n        config.axis_x_label = text;\n      }\n    } else if (option) {\n      option.text = text;\n    }\n  };\n\n  Axis.prototype.getLabelPosition = function getLabelPosition(axisId, defaultPosition) {\n    var option = this.getLabelOptionByAxisId(axisId),\n        position = option && _typeof(option) === 'object' && option.position ? option.position : defaultPosition;\n    return {\n      isInner: position.indexOf('inner') >= 0,\n      isOuter: position.indexOf('outer') >= 0,\n      isLeft: position.indexOf('left') >= 0,\n      isCenter: position.indexOf('center') >= 0,\n      isRight: position.indexOf('right') >= 0,\n      isTop: position.indexOf('top') >= 0,\n      isMiddle: position.indexOf('middle') >= 0,\n      isBottom: position.indexOf('bottom') >= 0\n    };\n  };\n\n  Axis.prototype.getXAxisLabelPosition = function getXAxisLabelPosition() {\n    return this.getLabelPosition('x', this.owner.config.axis_rotated ? 'inner-top' : 'inner-right');\n  };\n\n  Axis.prototype.getYAxisLabelPosition = function getYAxisLabelPosition() {\n    return this.getLabelPosition('y', this.owner.config.axis_rotated ? 'inner-right' : 'inner-top');\n  };\n\n  Axis.prototype.getY2AxisLabelPosition = function getY2AxisLabelPosition() {\n    return this.getLabelPosition('y2', this.owner.config.axis_rotated ? 'inner-right' : 'inner-top');\n  };\n\n  Axis.prototype.getLabelPositionById = function getLabelPositionById(id) {\n    return id === 'y2' ? this.getY2AxisLabelPosition() : id === 'y' ? this.getYAxisLabelPosition() : this.getXAxisLabelPosition();\n  };\n\n  Axis.prototype.textForXAxisLabel = function textForXAxisLabel() {\n    return this.getLabelText('x');\n  };\n\n  Axis.prototype.textForYAxisLabel = function textForYAxisLabel() {\n    return this.getLabelText('y');\n  };\n\n  Axis.prototype.textForY2AxisLabel = function textForY2AxisLabel() {\n    return this.getLabelText('y2');\n  };\n\n  Axis.prototype.xForAxisLabel = function xForAxisLabel(forHorizontal, position) {\n    var $$ = this.owner;\n\n    if (forHorizontal) {\n      return position.isLeft ? 0 : position.isCenter ? $$.width / 2 : $$.width;\n    } else {\n      return position.isBottom ? -$$.height : position.isMiddle ? -$$.height / 2 : 0;\n    }\n  };\n\n  Axis.prototype.dxForAxisLabel = function dxForAxisLabel(forHorizontal, position) {\n    if (forHorizontal) {\n      return position.isLeft ? \"0.5em\" : position.isRight ? \"-0.5em\" : \"0\";\n    } else {\n      return position.isTop ? \"-0.5em\" : position.isBottom ? \"0.5em\" : \"0\";\n    }\n  };\n\n  Axis.prototype.textAnchorForAxisLabel = function textAnchorForAxisLabel(forHorizontal, position) {\n    if (forHorizontal) {\n      return position.isLeft ? 'start' : position.isCenter ? 'middle' : 'end';\n    } else {\n      return position.isBottom ? 'start' : position.isMiddle ? 'middle' : 'end';\n    }\n  };\n\n  Axis.prototype.xForXAxisLabel = function xForXAxisLabel() {\n    return this.xForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition());\n  };\n\n  Axis.prototype.xForYAxisLabel = function xForYAxisLabel() {\n    return this.xForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition());\n  };\n\n  Axis.prototype.xForY2AxisLabel = function xForY2AxisLabel() {\n    return this.xForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition());\n  };\n\n  Axis.prototype.dxForXAxisLabel = function dxForXAxisLabel() {\n    return this.dxForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition());\n  };\n\n  Axis.prototype.dxForYAxisLabel = function dxForYAxisLabel() {\n    return this.dxForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition());\n  };\n\n  Axis.prototype.dxForY2AxisLabel = function dxForY2AxisLabel() {\n    return this.dxForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition());\n  };\n\n  Axis.prototype.dyForXAxisLabel = function dyForXAxisLabel() {\n    var $$ = this.owner,\n        config = $$.config,\n        position = this.getXAxisLabelPosition();\n\n    if (config.axis_rotated) {\n      return position.isInner ? \"1.2em\" : -25 - ($$.config.axis_x_inner ? 0 : this.getMaxTickWidth('x'));\n    } else {\n      return position.isInner ? \"-0.5em\" : config.axis_x_height ? config.axis_x_height - 10 : \"3em\";\n    }\n  };\n\n  Axis.prototype.dyForYAxisLabel = function dyForYAxisLabel() {\n    var $$ = this.owner,\n        position = this.getYAxisLabelPosition();\n\n    if ($$.config.axis_rotated) {\n      return position.isInner ? \"-0.5em\" : \"3em\";\n    } else {\n      return position.isInner ? \"1.2em\" : -10 - ($$.config.axis_y_inner ? 0 : this.getMaxTickWidth('y') + 10);\n    }\n  };\n\n  Axis.prototype.dyForY2AxisLabel = function dyForY2AxisLabel() {\n    var $$ = this.owner,\n        position = this.getY2AxisLabelPosition();\n\n    if ($$.config.axis_rotated) {\n      return position.isInner ? \"1.2em\" : \"-2.2em\";\n    } else {\n      return position.isInner ? \"-0.5em\" : 15 + ($$.config.axis_y2_inner ? 0 : this.getMaxTickWidth('y2') + 15);\n    }\n  };\n\n  Axis.prototype.textAnchorForXAxisLabel = function textAnchorForXAxisLabel() {\n    var $$ = this.owner;\n    return this.textAnchorForAxisLabel(!$$.config.axis_rotated, this.getXAxisLabelPosition());\n  };\n\n  Axis.prototype.textAnchorForYAxisLabel = function textAnchorForYAxisLabel() {\n    var $$ = this.owner;\n    return this.textAnchorForAxisLabel($$.config.axis_rotated, this.getYAxisLabelPosition());\n  };\n\n  Axis.prototype.textAnchorForY2AxisLabel = function textAnchorForY2AxisLabel() {\n    var $$ = this.owner;\n    return this.textAnchorForAxisLabel($$.config.axis_rotated, this.getY2AxisLabelPosition());\n  };\n\n  Axis.prototype.getMaxTickWidth = function getMaxTickWidth(id, withoutRecompute) {\n    var $$ = this.owner,\n        config = $$.config,\n        maxWidth = 0,\n        targetsToShow,\n        scale,\n        axis,\n        dummy,\n        svg;\n\n    if (withoutRecompute && $$.currentMaxTickWidths[id]) {\n      return $$.currentMaxTickWidths[id];\n    }\n\n    if ($$.svg) {\n      targetsToShow = $$.filterTargetsToShow($$.data.targets);\n\n      if (id === 'y') {\n        scale = $$.y.copy().domain($$.getYDomain(targetsToShow, 'y'));\n        axis = this.getYAxis(scale, $$.yOrient, config.axis_y_tick_format, $$.yAxisTickValues, false, true, true);\n      } else if (id === 'y2') {\n        scale = $$.y2.copy().domain($$.getYDomain(targetsToShow, 'y2'));\n        axis = this.getYAxis(scale, $$.y2Orient, config.axis_y2_tick_format, $$.y2AxisTickValues, false, true, true);\n      } else {\n        scale = $$.x.copy().domain($$.getXDomain(targetsToShow));\n        axis = this.getXAxis(scale, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues, false, true, true);\n        this.updateXAxisTickValues(targetsToShow, axis);\n      }\n\n      dummy = $$.d3.select('body').append('div').classed('c3', true);\n      svg = dummy.append(\"svg\").style('visibility', 'hidden').style('position', 'fixed').style('top', 0).style('left', 0), svg.append('g').call(axis).each(function () {\n        $$.d3.select(this).selectAll('text').each(function () {\n          var box = this.getBoundingClientRect();\n\n          if (maxWidth < box.width) {\n            maxWidth = box.width;\n          }\n        });\n        dummy.remove();\n      });\n    }\n\n    $$.currentMaxTickWidths[id] = maxWidth <= 0 ? $$.currentMaxTickWidths[id] : maxWidth;\n    return $$.currentMaxTickWidths[id];\n  };\n\n  Axis.prototype.updateLabels = function updateLabels(withTransition) {\n    var $$ = this.owner;\n    var axisXLabel = $$.main.select('.' + CLASS.axisX + ' .' + CLASS.axisXLabel),\n        axisYLabel = $$.main.select('.' + CLASS.axisY + ' .' + CLASS.axisYLabel),\n        axisY2Label = $$.main.select('.' + CLASS.axisY2 + ' .' + CLASS.axisY2Label);\n    (withTransition ? axisXLabel.transition() : axisXLabel).attr(\"x\", this.xForXAxisLabel.bind(this)).attr(\"dx\", this.dxForXAxisLabel.bind(this)).attr(\"dy\", this.dyForXAxisLabel.bind(this)).text(this.textForXAxisLabel.bind(this));\n    (withTransition ? axisYLabel.transition() : axisYLabel).attr(\"x\", this.xForYAxisLabel.bind(this)).attr(\"dx\", this.dxForYAxisLabel.bind(this)).attr(\"dy\", this.dyForYAxisLabel.bind(this)).text(this.textForYAxisLabel.bind(this));\n    (withTransition ? axisY2Label.transition() : axisY2Label).attr(\"x\", this.xForY2AxisLabel.bind(this)).attr(\"dx\", this.dxForY2AxisLabel.bind(this)).attr(\"dy\", this.dyForY2AxisLabel.bind(this)).text(this.textForY2AxisLabel.bind(this));\n  };\n\n  Axis.prototype.getPadding = function getPadding(padding, key, defaultValue, domainLength) {\n    var p = typeof padding === 'number' ? padding : padding[key];\n\n    if (!isValue(p)) {\n      return defaultValue;\n    }\n\n    if (padding.unit === 'ratio') {\n      return padding[key] * domainLength;\n    } // assume padding is pixels if unit is not specified\n\n\n    return this.convertPixelsToAxisPadding(p, domainLength);\n  };\n\n  Axis.prototype.convertPixelsToAxisPadding = function convertPixelsToAxisPadding(pixels, domainLength) {\n    var $$ = this.owner,\n        length = $$.config.axis_rotated ? $$.width : $$.height;\n    return domainLength * (pixels / length);\n  };\n\n  Axis.prototype.generateTickValues = function generateTickValues(values, tickCount, forTimeSeries) {\n    var tickValues = values,\n        targetCount,\n        start,\n        end,\n        count,\n        interval,\n        i,\n        tickValue;\n\n    if (tickCount) {\n      targetCount = isFunction(tickCount) ? tickCount() : tickCount; // compute ticks according to tickCount\n\n      if (targetCount === 1) {\n        tickValues = [values[0]];\n      } else if (targetCount === 2) {\n        tickValues = [values[0], values[values.length - 1]];\n      } else if (targetCount > 2) {\n        count = targetCount - 2;\n        start = values[0];\n        end = values[values.length - 1];\n        interval = (end - start) / (count + 1); // re-construct unique values\n\n        tickValues = [start];\n\n        for (i = 0; i < count; i++) {\n          tickValue = +start + interval * (i + 1);\n          tickValues.push(forTimeSeries ? new Date(tickValue) : tickValue);\n        }\n\n        tickValues.push(end);\n      }\n    }\n\n    if (!forTimeSeries) {\n      tickValues = tickValues.sort(function (a, b) {\n        return a - b;\n      });\n    }\n\n    return tickValues;\n  };\n\n  Axis.prototype.generateTransitions = function generateTransitions(duration) {\n    var $$ = this.owner,\n        axes = $$.axes;\n    return {\n      axisX: duration ? axes.x.transition().duration(duration) : axes.x,\n      axisY: duration ? axes.y.transition().duration(duration) : axes.y,\n      axisY2: duration ? axes.y2.transition().duration(duration) : axes.y2,\n      axisSubX: duration ? axes.subx.transition().duration(duration) : axes.subx\n    };\n  };\n\n  Axis.prototype.redraw = function redraw(duration, isHidden) {\n    var $$ = this.owner,\n        transition = duration ? $$.d3.transition().duration(duration) : null;\n    $$.axes.x.style(\"opacity\", isHidden ? 0 : 1).call($$.xAxis, transition);\n    $$.axes.y.style(\"opacity\", isHidden ? 0 : 1).call($$.yAxis, transition);\n    $$.axes.y2.style(\"opacity\", isHidden ? 0 : 1).call($$.y2Axis, transition);\n    $$.axes.subx.style(\"opacity\", isHidden ? 0 : 1).call($$.subXAxis, transition);\n  };\n\n  var c3 = {\n    version: \"0.6.12\",\n    chart: {\n      fn: Chart.prototype,\n      internal: {\n        fn: ChartInternal.prototype,\n        axis: {\n          fn: Axis.prototype,\n          internal: {\n            fn: AxisInternal.prototype\n          }\n        }\n      }\n    },\n    generate: function generate(config) {\n      return new Chart(config);\n    }\n  };\n\n  ChartInternal.prototype.beforeInit = function () {// can do something\n  };\n\n  ChartInternal.prototype.afterInit = function () {// can do something\n  };\n\n  ChartInternal.prototype.init = function () {\n    var $$ = this,\n        config = $$.config;\n    $$.initParams();\n\n    if (config.data_url) {\n      $$.convertUrlToData(config.data_url, config.data_mimeType, config.data_headers, config.data_keys, $$.initWithData);\n    } else if (config.data_json) {\n      $$.initWithData($$.convertJsonToData(config.data_json, config.data_keys));\n    } else if (config.data_rows) {\n      $$.initWithData($$.convertRowsToData(config.data_rows));\n    } else if (config.data_columns) {\n      $$.initWithData($$.convertColumnsToData(config.data_columns));\n    } else {\n      throw Error('url or json or rows or columns is required.');\n    }\n  };\n\n  ChartInternal.prototype.initParams = function () {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config; // MEMO: clipId needs to be unique because it conflicts when multiple charts exist\n\n    $$.clipId = \"c3-\" + +new Date() + '-clip';\n    $$.clipIdForXAxis = $$.clipId + '-xaxis';\n    $$.clipIdForYAxis = $$.clipId + '-yaxis';\n    $$.clipIdForGrid = $$.clipId + '-grid';\n    $$.clipIdForSubchart = $$.clipId + '-subchart';\n    $$.clipPath = $$.getClipPath($$.clipId);\n    $$.clipPathForXAxis = $$.getClipPath($$.clipIdForXAxis);\n    $$.clipPathForYAxis = $$.getClipPath($$.clipIdForYAxis);\n    $$.clipPathForGrid = $$.getClipPath($$.clipIdForGrid);\n    $$.clipPathForSubchart = $$.getClipPath($$.clipIdForSubchart);\n    $$.dragStart = null;\n    $$.dragging = false;\n    $$.flowing = false;\n    $$.cancelClick = false;\n    $$.mouseover = false;\n    $$.transiting = false;\n    $$.color = $$.generateColor();\n    $$.levelColor = $$.generateLevelColor();\n    $$.dataTimeParse = (config.data_xLocaltime ? d3.timeParse : d3.utcParse)($$.config.data_xFormat);\n    $$.axisTimeFormat = config.axis_x_localtime ? d3.timeFormat : d3.utcFormat;\n\n    $$.defaultAxisTimeFormat = function (date) {\n      if (date.getMilliseconds()) {\n        return d3.timeFormat(\".%L\")(date);\n      }\n\n      if (date.getSeconds()) {\n        return d3.timeFormat(\":%S\")(date);\n      }\n\n      if (date.getMinutes()) {\n        return d3.timeFormat(\"%I:%M\")(date);\n      }\n\n      if (date.getHours()) {\n        return d3.timeFormat(\"%I %p\")(date);\n      }\n\n      if (date.getDay() && date.getDate() !== 1) {\n        return d3.timeFormat(\"%-m/%-d\")(date);\n      }\n\n      if (date.getDate() !== 1) {\n        return d3.timeFormat(\"%-m/%-d\")(date);\n      }\n\n      if (date.getMonth()) {\n        return d3.timeFormat(\"%-m/%-d\")(date);\n      }\n\n      return d3.timeFormat(\"%Y/%-m/%-d\")(date);\n    };\n\n    $$.hiddenTargetIds = [];\n    $$.hiddenLegendIds = [];\n    $$.focusedTargetIds = [];\n    $$.defocusedTargetIds = [];\n    $$.xOrient = config.axis_rotated ? config.axis_x_inner ? \"right\" : \"left\" : config.axis_x_inner ? \"top\" : \"bottom\";\n    $$.yOrient = config.axis_rotated ? config.axis_y_inner ? \"top\" : \"bottom\" : config.axis_y_inner ? \"right\" : \"left\";\n    $$.y2Orient = config.axis_rotated ? config.axis_y2_inner ? \"bottom\" : \"top\" : config.axis_y2_inner ? \"left\" : \"right\";\n    $$.subXOrient = config.axis_rotated ? \"left\" : \"bottom\";\n    $$.isLegendRight = config.legend_position === 'right';\n    $$.isLegendInset = config.legend_position === 'inset';\n    $$.isLegendTop = config.legend_inset_anchor === 'top-left' || config.legend_inset_anchor === 'top-right';\n    $$.isLegendLeft = config.legend_inset_anchor === 'top-left' || config.legend_inset_anchor === 'bottom-left';\n    $$.legendStep = 0;\n    $$.legendItemWidth = 0;\n    $$.legendItemHeight = 0;\n    $$.currentMaxTickWidths = {\n      x: 0,\n      y: 0,\n      y2: 0\n    };\n    $$.rotated_padding_left = 30;\n    $$.rotated_padding_right = config.axis_rotated && !config.axis_x_show ? 0 : 30;\n    $$.rotated_padding_top = 5;\n    $$.withoutFadeIn = {};\n    $$.intervalForObserveInserted = undefined;\n    $$.axes.subx = d3.selectAll([]); // needs when excluding subchart.js\n  };\n\n  ChartInternal.prototype.initChartElements = function () {\n    if (this.initBar) {\n      this.initBar();\n    }\n\n    if (this.initLine) {\n      this.initLine();\n    }\n\n    if (this.initArc) {\n      this.initArc();\n    }\n\n    if (this.initGauge) {\n      this.initGauge();\n    }\n\n    if (this.initText) {\n      this.initText();\n    }\n  };\n\n  ChartInternal.prototype.initWithData = function (data) {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config;\n    var defs,\n        main,\n        binding = true;\n    $$.axis = new Axis($$);\n\n    if (!config.bindto) {\n      $$.selectChart = d3.selectAll([]);\n    } else if (typeof config.bindto.node === 'function') {\n      $$.selectChart = config.bindto;\n    } else {\n      $$.selectChart = d3.select(config.bindto);\n    }\n\n    if ($$.selectChart.empty()) {\n      $$.selectChart = d3.select(document.createElement('div')).style('opacity', 0);\n      $$.observeInserted($$.selectChart);\n      binding = false;\n    }\n\n    $$.selectChart.html(\"\").classed(\"c3\", true); // Init data as targets\n\n    $$.data.xs = {};\n    $$.data.targets = $$.convertDataToTargets(data);\n\n    if (config.data_filter) {\n      $$.data.targets = $$.data.targets.filter(config.data_filter);\n    } // Set targets to hide if needed\n\n\n    if (config.data_hide) {\n      $$.addHiddenTargetIds(config.data_hide === true ? $$.mapToIds($$.data.targets) : config.data_hide);\n    }\n\n    if (config.legend_hide) {\n      $$.addHiddenLegendIds(config.legend_hide === true ? $$.mapToIds($$.data.targets) : config.legend_hide);\n    } // Init sizes and scales\n\n\n    $$.updateSizes();\n    $$.updateScales(); // Set domains for each scale\n\n    $$.x.domain(d3.extent($$.getXDomain($$.data.targets)));\n    $$.y.domain($$.getYDomain($$.data.targets, 'y'));\n    $$.y2.domain($$.getYDomain($$.data.targets, 'y2'));\n    $$.subX.domain($$.x.domain());\n    $$.subY.domain($$.y.domain());\n    $$.subY2.domain($$.y2.domain()); // Save original x domain for zoom update\n\n    $$.orgXDomain = $$.x.domain();\n    /*-- Basic Elements --*/\n    // Define svgs\n\n    $$.svg = $$.selectChart.append(\"svg\").style(\"overflow\", \"hidden\").on('mouseenter', function () {\n      return config.onmouseover.call($$);\n    }).on('mouseleave', function () {\n      return config.onmouseout.call($$);\n    });\n\n    if ($$.config.svg_classname) {\n      $$.svg.attr('class', $$.config.svg_classname);\n    } // Define defs\n\n\n    defs = $$.svg.append(\"defs\");\n    $$.clipChart = $$.appendClip(defs, $$.clipId);\n    $$.clipXAxis = $$.appendClip(defs, $$.clipIdForXAxis);\n    $$.clipYAxis = $$.appendClip(defs, $$.clipIdForYAxis);\n    $$.clipGrid = $$.appendClip(defs, $$.clipIdForGrid);\n    $$.clipSubchart = $$.appendClip(defs, $$.clipIdForSubchart);\n    $$.updateSvgSize(); // Define regions\n\n    main = $$.main = $$.svg.append(\"g\").attr(\"transform\", $$.getTranslate('main'));\n\n    if ($$.initPie) {\n      $$.initPie();\n    }\n\n    if ($$.initDragZoom) {\n      $$.initDragZoom();\n    }\n\n    if ($$.initSubchart) {\n      $$.initSubchart();\n    }\n\n    if ($$.initTooltip) {\n      $$.initTooltip();\n    }\n\n    if ($$.initLegend) {\n      $$.initLegend();\n    }\n\n    if ($$.initTitle) {\n      $$.initTitle();\n    }\n\n    if ($$.initZoom) {\n      $$.initZoom();\n    } // Update selection based on size and scale\n    // TODO: currently this must be called after initLegend because of update of sizes, but it should be done in initSubchart.\n\n\n    if ($$.initSubchartBrush) {\n      $$.initSubchartBrush();\n    }\n    /*-- Main Region --*/\n    // text when empty\n\n\n    main.append(\"text\").attr(\"class\", CLASS.text + ' ' + CLASS.empty).attr(\"text-anchor\", \"middle\") // horizontal centering of text at x position in all browsers.\n    .attr(\"dominant-baseline\", \"middle\"); // vertical centering of text at y position in all browsers, except IE.\n    // Regions\n\n    $$.initRegion(); // Grids\n\n    $$.initGrid(); // Define g for chart area\n\n    main.append('g').attr(\"clip-path\", $$.clipPath).attr('class', CLASS.chart); // Grid lines\n\n    if (config.grid_lines_front) {\n      $$.initGridLines();\n    } // Cover whole with rects for events\n\n\n    $$.initEventRect(); // Define g for chart\n\n    $$.initChartElements(); // Add Axis\n\n    $$.axis.init(); // Set targets\n\n    $$.updateTargets($$.data.targets); // Set default extent if defined\n\n    if (config.axis_x_selection) {\n      $$.brush.selectionAsValue($$.getDefaultSelection());\n    } // Draw with targets\n\n\n    if (binding) {\n      $$.updateDimension();\n      $$.config.oninit.call($$);\n      $$.redraw({\n        withTransition: false,\n        withTransform: true,\n        withUpdateXDomain: true,\n        withUpdateOrgXDomain: true,\n        withTransitionForAxis: false\n      });\n    } // Bind to resize event\n\n\n    $$.bindResize(); // Bind to window focus event\n\n    $$.bindWindowFocus(); // export element of the chart\n\n    $$.api.element = $$.selectChart.node();\n  };\n\n  ChartInternal.prototype.smoothLines = function (el, type) {\n    var $$ = this;\n\n    if (type === 'grid') {\n      el.each(function () {\n        var g = $$.d3.select(this),\n            x1 = g.attr('x1'),\n            x2 = g.attr('x2'),\n            y1 = g.attr('y1'),\n            y2 = g.attr('y2');\n        g.attr({\n          'x1': Math.ceil(x1),\n          'x2': Math.ceil(x2),\n          'y1': Math.ceil(y1),\n          'y2': Math.ceil(y2)\n        });\n      });\n    }\n  };\n\n  ChartInternal.prototype.updateSizes = function () {\n    var $$ = this,\n        config = $$.config;\n    var legendHeight = $$.legend ? $$.getLegendHeight() : 0,\n        legendWidth = $$.legend ? $$.getLegendWidth() : 0,\n        legendHeightForBottom = $$.isLegendRight || $$.isLegendInset ? 0 : legendHeight,\n        hasArc = $$.hasArcType(),\n        xAxisHeight = config.axis_rotated || hasArc ? 0 : $$.getHorizontalAxisHeight('x'),\n        subchartHeight = config.subchart_show && !hasArc ? config.subchart_size_height + xAxisHeight : 0;\n    $$.currentWidth = $$.getCurrentWidth();\n    $$.currentHeight = $$.getCurrentHeight(); // for main\n\n    $$.margin = config.axis_rotated ? {\n      top: $$.getHorizontalAxisHeight('y2') + $$.getCurrentPaddingTop(),\n      right: hasArc ? 0 : $$.getCurrentPaddingRight(),\n      bottom: $$.getHorizontalAxisHeight('y') + legendHeightForBottom + $$.getCurrentPaddingBottom(),\n      left: subchartHeight + (hasArc ? 0 : $$.getCurrentPaddingLeft())\n    } : {\n      top: 4 + $$.getCurrentPaddingTop(),\n      // for top tick text\n      right: hasArc ? 0 : $$.getCurrentPaddingRight(),\n      bottom: xAxisHeight + subchartHeight + legendHeightForBottom + $$.getCurrentPaddingBottom(),\n      left: hasArc ? 0 : $$.getCurrentPaddingLeft()\n    }; // for subchart\n\n    $$.margin2 = config.axis_rotated ? {\n      top: $$.margin.top,\n      right: NaN,\n      bottom: 20 + legendHeightForBottom,\n      left: $$.rotated_padding_left\n    } : {\n      top: $$.currentHeight - subchartHeight - legendHeightForBottom,\n      right: NaN,\n      bottom: xAxisHeight + legendHeightForBottom,\n      left: $$.margin.left\n    }; // for legend\n\n    $$.margin3 = {\n      top: 0,\n      right: NaN,\n      bottom: 0,\n      left: 0\n    };\n\n    if ($$.updateSizeForLegend) {\n      $$.updateSizeForLegend(legendHeight, legendWidth);\n    }\n\n    $$.width = $$.currentWidth - $$.margin.left - $$.margin.right;\n    $$.height = $$.currentHeight - $$.margin.top - $$.margin.bottom;\n\n    if ($$.width < 0) {\n      $$.width = 0;\n    }\n\n    if ($$.height < 0) {\n      $$.height = 0;\n    }\n\n    $$.width2 = config.axis_rotated ? $$.margin.left - $$.rotated_padding_left - $$.rotated_padding_right : $$.width;\n    $$.height2 = config.axis_rotated ? $$.height : $$.currentHeight - $$.margin2.top - $$.margin2.bottom;\n\n    if ($$.width2 < 0) {\n      $$.width2 = 0;\n    }\n\n    if ($$.height2 < 0) {\n      $$.height2 = 0;\n    } // for arc\n\n\n    $$.arcWidth = $$.width - ($$.isLegendRight ? legendWidth + 10 : 0);\n    $$.arcHeight = $$.height - ($$.isLegendRight ? 0 : 10);\n\n    if ($$.hasType('gauge') && !config.gauge_fullCircle) {\n      $$.arcHeight += $$.height - $$.getGaugeLabelHeight();\n    }\n\n    if ($$.updateRadius) {\n      $$.updateRadius();\n    }\n\n    if ($$.isLegendRight && hasArc) {\n      $$.margin3.left = $$.arcWidth / 2 + $$.radiusExpanded * 1.1;\n    }\n  };\n\n  ChartInternal.prototype.updateTargets = function (targets) {\n    var $$ = this;\n    /*-- Main --*/\n    //-- Text --//\n\n    $$.updateTargetsForText(targets); //-- Bar --//\n\n    $$.updateTargetsForBar(targets); //-- Line --//\n\n    $$.updateTargetsForLine(targets); //-- Arc --//\n\n    if ($$.hasArcType() && $$.updateTargetsForArc) {\n      $$.updateTargetsForArc(targets);\n    }\n    /*-- Sub --*/\n\n\n    if ($$.updateTargetsForSubchart) {\n      $$.updateTargetsForSubchart(targets);\n    } // Fade-in each chart\n\n\n    $$.showTargets();\n  };\n\n  ChartInternal.prototype.showTargets = function () {\n    var $$ = this;\n    $$.svg.selectAll('.' + CLASS.target).filter(function (d) {\n      return $$.isTargetToShow(d.id);\n    }).transition().duration($$.config.transition_duration).style(\"opacity\", 1);\n  };\n\n  ChartInternal.prototype.redraw = function (options, transitions) {\n    var $$ = this,\n        main = $$.main,\n        d3 = $$.d3,\n        config = $$.config;\n    var areaIndices = $$.getShapeIndices($$.isAreaType),\n        barIndices = $$.getShapeIndices($$.isBarType),\n        lineIndices = $$.getShapeIndices($$.isLineType);\n    var withY, withSubchart, withTransition, withTransitionForExit, withTransitionForAxis, withTransform, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain, withLegend, withEventRect, withDimension, withUpdateXAxis;\n    var hideAxis = $$.hasArcType();\n    var drawArea, drawBar, drawLine, xForText, yForText;\n    var duration, durationForExit, durationForAxis;\n    var transitionsToWait, waitForDraw, flow, transition;\n    var targetsToShow = $$.filterTargetsToShow($$.data.targets),\n        tickValues,\n        i,\n        intervalForCulling,\n        xDomainForZoom;\n    var xv = $$.xv.bind($$),\n        cx,\n        cy;\n    options = options || {};\n    withY = getOption(options, \"withY\", true);\n    withSubchart = getOption(options, \"withSubchart\", true);\n    withTransition = getOption(options, \"withTransition\", true);\n    withTransform = getOption(options, \"withTransform\", false);\n    withUpdateXDomain = getOption(options, \"withUpdateXDomain\", false);\n    withUpdateOrgXDomain = getOption(options, \"withUpdateOrgXDomain\", false);\n    withTrimXDomain = getOption(options, \"withTrimXDomain\", true);\n    withUpdateXAxis = getOption(options, \"withUpdateXAxis\", withUpdateXDomain);\n    withLegend = getOption(options, \"withLegend\", false);\n    withEventRect = getOption(options, \"withEventRect\", true);\n    withDimension = getOption(options, \"withDimension\", true);\n    withTransitionForExit = getOption(options, \"withTransitionForExit\", withTransition);\n    withTransitionForAxis = getOption(options, \"withTransitionForAxis\", withTransition);\n    duration = withTransition ? config.transition_duration : 0;\n    durationForExit = withTransitionForExit ? duration : 0;\n    durationForAxis = withTransitionForAxis ? duration : 0;\n    transitions = transitions || $$.axis.generateTransitions(durationForAxis); // update legend and transform each g\n\n    if (withLegend && config.legend_show) {\n      $$.updateLegend($$.mapToIds($$.data.targets), options, transitions);\n    } else if (withDimension) {\n      // need to update dimension (e.g. axis.y.tick.values) because y tick values should change\n      // no need to update axis in it because they will be updated in redraw()\n      $$.updateDimension(true);\n    } // MEMO: needed for grids calculation\n\n\n    if ($$.isCategorized() && targetsToShow.length === 0) {\n      $$.x.domain([0, $$.axes.x.selectAll('.tick').size()]);\n    }\n\n    if (targetsToShow.length) {\n      $$.updateXDomain(targetsToShow, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain);\n\n      if (!config.axis_x_tick_values) {\n        tickValues = $$.axis.updateXAxisTickValues(targetsToShow);\n      }\n    } else {\n      $$.xAxis.tickValues([]);\n      $$.subXAxis.tickValues([]);\n    }\n\n    if (config.zoom_rescale && !options.flow) {\n      xDomainForZoom = $$.x.orgDomain();\n    }\n\n    $$.y.domain($$.getYDomain(targetsToShow, 'y', xDomainForZoom));\n    $$.y2.domain($$.getYDomain(targetsToShow, 'y2', xDomainForZoom));\n\n    if (!config.axis_y_tick_values && config.axis_y_tick_count) {\n      $$.yAxis.tickValues($$.axis.generateTickValues($$.y.domain(), config.axis_y_tick_count));\n    }\n\n    if (!config.axis_y2_tick_values && config.axis_y2_tick_count) {\n      $$.y2Axis.tickValues($$.axis.generateTickValues($$.y2.domain(), config.axis_y2_tick_count));\n    } // axes\n\n\n    $$.axis.redraw(durationForAxis, hideAxis); // Update axis label\n\n    $$.axis.updateLabels(withTransition); // show/hide if manual culling needed\n\n    if ((withUpdateXDomain || withUpdateXAxis) && targetsToShow.length) {\n      if (config.axis_x_tick_culling && tickValues) {\n        for (i = 1; i < tickValues.length; i++) {\n          if (tickValues.length / i < config.axis_x_tick_culling_max) {\n            intervalForCulling = i;\n            break;\n          }\n        }\n\n        $$.svg.selectAll('.' + CLASS.axisX + ' .tick text').each(function (e) {\n          var index = tickValues.indexOf(e);\n\n          if (index >= 0) {\n            d3.select(this).style('display', index % intervalForCulling ? 'none' : 'block');\n          }\n        });\n      } else {\n        $$.svg.selectAll('.' + CLASS.axisX + ' .tick text').style('display', 'block');\n      }\n    } // setup drawer - MEMO: these must be called after axis updated\n\n\n    drawArea = $$.generateDrawArea ? $$.generateDrawArea(areaIndices, false) : undefined;\n    drawBar = $$.generateDrawBar ? $$.generateDrawBar(barIndices) : undefined;\n    drawLine = $$.generateDrawLine ? $$.generateDrawLine(lineIndices, false) : undefined;\n    xForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, true);\n    yForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, false); // update circleY based on updated parameters\n\n    $$.updateCircleY(); // generate circle x/y functions depending on updated params\n\n    cx = ($$.config.axis_rotated ? $$.circleY : $$.circleX).bind($$);\n    cy = ($$.config.axis_rotated ? $$.circleX : $$.circleY).bind($$); // Update sub domain\n\n    if (withY) {\n      $$.subY.domain($$.getYDomain(targetsToShow, 'y'));\n      $$.subY2.domain($$.getYDomain(targetsToShow, 'y2'));\n    } // xgrid focus\n\n\n    $$.updateXgridFocus(); // Data empty label positioning and text.\n\n    main.select(\"text.\" + CLASS.text + '.' + CLASS.empty).attr(\"x\", $$.width / 2).attr(\"y\", $$.height / 2).text(config.data_empty_label_text).transition().style('opacity', targetsToShow.length ? 0 : 1); // event rect\n\n    if (withEventRect) {\n      $$.redrawEventRect();\n    } // grid\n\n\n    $$.updateGrid(duration); // rect for regions\n\n    $$.updateRegion(duration); // bars\n\n    $$.updateBar(durationForExit); // lines, areas and cricles\n\n    $$.updateLine(durationForExit);\n    $$.updateArea(durationForExit);\n    $$.updateCircle(cx, cy); // text\n\n    if ($$.hasDataLabel()) {\n      $$.updateText(xForText, yForText, durationForExit);\n    } // title\n\n\n    if ($$.redrawTitle) {\n      $$.redrawTitle();\n    } // arc\n\n\n    if ($$.redrawArc) {\n      $$.redrawArc(duration, durationForExit, withTransform);\n    } // subchart\n\n\n    if ($$.redrawSubchart) {\n      $$.redrawSubchart(withSubchart, transitions, duration, durationForExit, areaIndices, barIndices, lineIndices);\n    } // circles for select\n\n\n    main.selectAll('.' + CLASS.selectedCircles).filter($$.isBarType.bind($$)).selectAll('circle').remove();\n\n    if (options.flow) {\n      flow = $$.generateFlow({\n        targets: targetsToShow,\n        flow: options.flow,\n        duration: options.flow.duration,\n        drawBar: drawBar,\n        drawLine: drawLine,\n        drawArea: drawArea,\n        cx: cx,\n        cy: cy,\n        xv: xv,\n        xForText: xForText,\n        yForText: yForText\n      });\n    }\n\n    if ($$.isTabVisible()) {\n      // Only use transition if tab visible. See #938.\n      if (duration) {\n        // transition should be derived from one transition\n        transition = d3.transition().duration(duration);\n        transitionsToWait = [];\n        [$$.redrawBar(drawBar, true, transition), $$.redrawLine(drawLine, true, transition), $$.redrawArea(drawArea, true, transition), $$.redrawCircle(cx, cy, true, transition), $$.redrawText(xForText, yForText, options.flow, true, transition), $$.redrawRegion(true, transition), $$.redrawGrid(true, transition)].forEach(function (transitions) {\n          transitions.forEach(function (transition) {\n            transitionsToWait.push(transition);\n          });\n        }); // Wait for end of transitions to call flow and onrendered callback\n\n        waitForDraw = $$.generateWait();\n        transitionsToWait.forEach(function (t) {\n          waitForDraw.add(t);\n        });\n        waitForDraw(function () {\n          if (flow) {\n            flow();\n          }\n\n          if (config.onrendered) {\n            config.onrendered.call($$);\n          }\n        });\n      } else {\n        $$.redrawBar(drawBar);\n        $$.redrawLine(drawLine);\n        $$.redrawArea(drawArea);\n        $$.redrawCircle(cx, cy);\n        $$.redrawText(xForText, yForText, options.flow);\n        $$.redrawRegion();\n        $$.redrawGrid();\n\n        if (flow) {\n          flow();\n        }\n\n        if (config.onrendered) {\n          config.onrendered.call($$);\n        }\n      }\n    } // update fadein condition\n\n\n    $$.mapToIds($$.data.targets).forEach(function (id) {\n      $$.withoutFadeIn[id] = true;\n    });\n  };\n\n  ChartInternal.prototype.updateAndRedraw = function (options) {\n    var $$ = this,\n        config = $$.config,\n        transitions;\n    options = options || {}; // same with redraw\n\n    options.withTransition = getOption(options, \"withTransition\", true);\n    options.withTransform = getOption(options, \"withTransform\", false);\n    options.withLegend = getOption(options, \"withLegend\", false); // NOT same with redraw\n\n    options.withUpdateXDomain = getOption(options, \"withUpdateXDomain\", true);\n    options.withUpdateOrgXDomain = getOption(options, \"withUpdateOrgXDomain\", true);\n    options.withTransitionForExit = false;\n    options.withTransitionForTransform = getOption(options, \"withTransitionForTransform\", options.withTransition); // MEMO: this needs to be called before updateLegend and it means this ALWAYS needs to be called)\n\n    $$.updateSizes(); // MEMO: called in updateLegend in redraw if withLegend\n\n    if (!(options.withLegend && config.legend_show)) {\n      transitions = $$.axis.generateTransitions(options.withTransitionForAxis ? config.transition_duration : 0); // Update scales\n\n      $$.updateScales();\n      $$.updateSvgSize(); // Update g positions\n\n      $$.transformAll(options.withTransitionForTransform, transitions);\n    } // Draw with new sizes & scales\n\n\n    $$.redraw(options, transitions);\n  };\n\n  ChartInternal.prototype.redrawWithoutRescale = function () {\n    this.redraw({\n      withY: false,\n      withSubchart: false,\n      withEventRect: false,\n      withTransitionForAxis: false\n    });\n  };\n\n  ChartInternal.prototype.isTimeSeries = function () {\n    return this.config.axis_x_type === 'timeseries';\n  };\n\n  ChartInternal.prototype.isCategorized = function () {\n    return this.config.axis_x_type.indexOf('categor') >= 0;\n  };\n\n  ChartInternal.prototype.isCustomX = function () {\n    var $$ = this,\n        config = $$.config;\n    return !$$.isTimeSeries() && (config.data_x || notEmpty(config.data_xs));\n  };\n\n  ChartInternal.prototype.isTimeSeriesY = function () {\n    return this.config.axis_y_type === 'timeseries';\n  };\n\n  ChartInternal.prototype.getTranslate = function (target) {\n    var $$ = this,\n        config = $$.config,\n        x,\n        y;\n\n    if (target === 'main') {\n      x = asHalfPixel($$.margin.left);\n      y = asHalfPixel($$.margin.top);\n    } else if (target === 'context') {\n      x = asHalfPixel($$.margin2.left);\n      y = asHalfPixel($$.margin2.top);\n    } else if (target === 'legend') {\n      x = $$.margin3.left;\n      y = $$.margin3.top;\n    } else if (target === 'x') {\n      x = 0;\n      y = config.axis_rotated ? 0 : $$.height;\n    } else if (target === 'y') {\n      x = 0;\n      y = config.axis_rotated ? $$.height : 0;\n    } else if (target === 'y2') {\n      x = config.axis_rotated ? 0 : $$.width;\n      y = config.axis_rotated ? 1 : 0;\n    } else if (target === 'subx') {\n      x = 0;\n      y = config.axis_rotated ? 0 : $$.height2;\n    } else if (target === 'arc') {\n      x = $$.arcWidth / 2;\n      y = $$.arcHeight / 2 - ($$.hasType('gauge') ? 6 : 0); // to prevent wrong display of min and max label\n    }\n\n    return \"translate(\" + x + \",\" + y + \")\";\n  };\n\n  ChartInternal.prototype.initialOpacity = function (d) {\n    return d.value !== null && this.withoutFadeIn[d.id] ? 1 : 0;\n  };\n\n  ChartInternal.prototype.initialOpacityForCircle = function (d) {\n    return d.value !== null && this.withoutFadeIn[d.id] ? this.opacityForCircle(d) : 0;\n  };\n\n  ChartInternal.prototype.opacityForCircle = function (d) {\n    var isPointShouldBeShown = isFunction(this.config.point_show) ? this.config.point_show(d) : this.config.point_show;\n    var opacity = isPointShouldBeShown ? 1 : 0;\n    return isValue(d.value) ? this.isScatterType(d) ? 0.5 : opacity : 0;\n  };\n\n  ChartInternal.prototype.opacityForText = function () {\n    return this.hasDataLabel() ? 1 : 0;\n  };\n\n  ChartInternal.prototype.xx = function (d) {\n    return d ? this.x(d.x) : null;\n  };\n\n  ChartInternal.prototype.xv = function (d) {\n    var $$ = this,\n        value = d.value;\n\n    if ($$.isTimeSeries()) {\n      value = $$.parseDate(d.value);\n    } else if ($$.isCategorized() && typeof d.value === 'string') {\n      value = $$.config.axis_x_categories.indexOf(d.value);\n    }\n\n    return Math.ceil($$.x(value));\n  };\n\n  ChartInternal.prototype.yv = function (d) {\n    var $$ = this,\n        yScale = d.axis && d.axis === 'y2' ? $$.y2 : $$.y;\n    return Math.ceil(yScale(d.value));\n  };\n\n  ChartInternal.prototype.subxx = function (d) {\n    return d ? this.subX(d.x) : null;\n  };\n\n  ChartInternal.prototype.transformMain = function (withTransition, transitions) {\n    var $$ = this,\n        xAxis,\n        yAxis,\n        y2Axis;\n\n    if (transitions && transitions.axisX) {\n      xAxis = transitions.axisX;\n    } else {\n      xAxis = $$.main.select('.' + CLASS.axisX);\n\n      if (withTransition) {\n        xAxis = xAxis.transition();\n      }\n    }\n\n    if (transitions && transitions.axisY) {\n      yAxis = transitions.axisY;\n    } else {\n      yAxis = $$.main.select('.' + CLASS.axisY);\n\n      if (withTransition) {\n        yAxis = yAxis.transition();\n      }\n    }\n\n    if (transitions && transitions.axisY2) {\n      y2Axis = transitions.axisY2;\n    } else {\n      y2Axis = $$.main.select('.' + CLASS.axisY2);\n\n      if (withTransition) {\n        y2Axis = y2Axis.transition();\n      }\n    }\n\n    (withTransition ? $$.main.transition() : $$.main).attr(\"transform\", $$.getTranslate('main'));\n    xAxis.attr(\"transform\", $$.getTranslate('x'));\n    yAxis.attr(\"transform\", $$.getTranslate('y'));\n    y2Axis.attr(\"transform\", $$.getTranslate('y2'));\n    $$.main.select('.' + CLASS.chartArcs).attr(\"transform\", $$.getTranslate('arc'));\n  };\n\n  ChartInternal.prototype.transformAll = function (withTransition, transitions) {\n    var $$ = this;\n    $$.transformMain(withTransition, transitions);\n\n    if ($$.config.subchart_show) {\n      $$.transformContext(withTransition, transitions);\n    }\n\n    if ($$.legend) {\n      $$.transformLegend(withTransition);\n    }\n  };\n\n  ChartInternal.prototype.updateSvgSize = function () {\n    var $$ = this,\n        brush = $$.svg.select(\".c3-brush .overlay\");\n    $$.svg.attr('width', $$.currentWidth).attr('height', $$.currentHeight);\n    $$.svg.selectAll(['#' + $$.clipId, '#' + $$.clipIdForGrid]).select('rect').attr('width', $$.width).attr('height', $$.height);\n    $$.svg.select('#' + $$.clipIdForXAxis).select('rect').attr('x', $$.getXAxisClipX.bind($$)).attr('y', $$.getXAxisClipY.bind($$)).attr('width', $$.getXAxisClipWidth.bind($$)).attr('height', $$.getXAxisClipHeight.bind($$));\n    $$.svg.select('#' + $$.clipIdForYAxis).select('rect').attr('x', $$.getYAxisClipX.bind($$)).attr('y', $$.getYAxisClipY.bind($$)).attr('width', $$.getYAxisClipWidth.bind($$)).attr('height', $$.getYAxisClipHeight.bind($$));\n    $$.svg.select('#' + $$.clipIdForSubchart).select('rect').attr('width', $$.width).attr('height', brush.size() ? brush.attr('height') : 0);\n  };\n\n  ChartInternal.prototype.updateDimension = function (withoutAxis) {\n    var $$ = this;\n\n    if (!withoutAxis) {\n      if ($$.config.axis_rotated) {\n        $$.axes.x.call($$.xAxis);\n        $$.axes.subx.call($$.subXAxis);\n      } else {\n        $$.axes.y.call($$.yAxis);\n        $$.axes.y2.call($$.y2Axis);\n      }\n    }\n\n    $$.updateSizes();\n    $$.updateScales();\n    $$.updateSvgSize();\n    $$.transformAll(false);\n  };\n\n  ChartInternal.prototype.observeInserted = function (selection) {\n    var $$ = this,\n        observer;\n\n    if (typeof MutationObserver === 'undefined') {\n      window.console.error(\"MutationObserver not defined.\");\n      return;\n    }\n\n    observer = new MutationObserver(function (mutations) {\n      mutations.forEach(function (mutation) {\n        if (mutation.type === 'childList' && mutation.previousSibling) {\n          observer.disconnect(); // need to wait for completion of load because size calculation requires the actual sizes determined after that completion\n\n          $$.intervalForObserveInserted = window.setInterval(function () {\n            // parentNode will NOT be null when completed\n            if (selection.node().parentNode) {\n              window.clearInterval($$.intervalForObserveInserted);\n              $$.updateDimension();\n\n              if ($$.brush) {\n                $$.brush.update();\n              }\n\n              $$.config.oninit.call($$);\n              $$.redraw({\n                withTransform: true,\n                withUpdateXDomain: true,\n                withUpdateOrgXDomain: true,\n                withTransition: false,\n                withTransitionForTransform: false,\n                withLegend: true\n              });\n              selection.transition().style('opacity', 1);\n            }\n          }, 10);\n        }\n      });\n    });\n    observer.observe(selection.node(), {\n      attributes: true,\n      childList: true,\n      characterData: true\n    });\n  };\n  /**\n   * Binds handlers to the window resize event.\n   */\n\n\n  ChartInternal.prototype.bindResize = function () {\n    var $$ = this,\n        config = $$.config;\n    $$.resizeFunction = $$.generateResize(); // need to call .remove\n\n    $$.resizeFunction.add(function () {\n      config.onresize.call($$);\n    });\n\n    if (config.resize_auto) {\n      $$.resizeFunction.add(function () {\n        if ($$.resizeTimeout !== undefined) {\n          window.clearTimeout($$.resizeTimeout);\n        }\n\n        $$.resizeTimeout = window.setTimeout(function () {\n          delete $$.resizeTimeout;\n          $$.updateAndRedraw({\n            withUpdateXDomain: false,\n            withUpdateOrgXDomain: false,\n            withTransition: false,\n            withTransitionForTransform: false,\n            withLegend: true\n          });\n\n          if ($$.brush) {\n            $$.brush.update();\n          }\n        }, 100);\n      });\n    }\n\n    $$.resizeFunction.add(function () {\n      config.onresized.call($$);\n    });\n\n    $$.resizeIfElementDisplayed = function () {\n      // if element not displayed skip it\n      if ($$.api == null || !$$.api.element.offsetParent) {\n        return;\n      }\n\n      $$.resizeFunction();\n    };\n\n    if (window.attachEvent) {\n      window.attachEvent('onresize', $$.resizeIfElementDisplayed);\n    } else if (window.addEventListener) {\n      window.addEventListener('resize', $$.resizeIfElementDisplayed, false);\n    } else {\n      // fallback to this, if this is a very old browser\n      var wrapper = window.onresize;\n\n      if (!wrapper) {\n        // create a wrapper that will call all charts\n        wrapper = $$.generateResize();\n      } else if (!wrapper.add || !wrapper.remove) {\n        // there is already a handler registered, make sure we call it too\n        wrapper = $$.generateResize();\n        wrapper.add(window.onresize);\n      } // add this graph to the wrapper, we will be removed if the user calls destroy\n\n\n      wrapper.add($$.resizeFunction);\n\n      window.onresize = function () {\n        // if element not displayed skip it\n        if (!$$.api.element.offsetParent) {\n          return;\n        }\n\n        wrapper();\n      };\n    }\n  };\n  /**\n   * Binds handlers to the window focus event.\n   */\n\n\n  ChartInternal.prototype.bindWindowFocus = function () {\n    var _this = this;\n\n    if (this.windowFocusHandler) {\n      // The handler is already set\n      return;\n    }\n\n    this.windowFocusHandler = function () {\n      _this.redraw();\n    };\n\n    window.addEventListener('focus', this.windowFocusHandler);\n  };\n  /**\n   * Unbinds from the window focus event.\n   */\n\n\n  ChartInternal.prototype.unbindWindowFocus = function () {\n    window.removeEventListener('focus', this.windowFocusHandler);\n    delete this.windowFocusHandler;\n  };\n\n  ChartInternal.prototype.generateResize = function () {\n    var resizeFunctions = [];\n\n    function callResizeFunctions() {\n      resizeFunctions.forEach(function (f) {\n        f();\n      });\n    }\n\n    callResizeFunctions.add = function (f) {\n      resizeFunctions.push(f);\n    };\n\n    callResizeFunctions.remove = function (f) {\n      for (var i = 0; i < resizeFunctions.length; i++) {\n        if (resizeFunctions[i] === f) {\n          resizeFunctions.splice(i, 1);\n          break;\n        }\n      }\n    };\n\n    return callResizeFunctions;\n  };\n\n  ChartInternal.prototype.endall = function (transition, callback) {\n    var n = 0;\n    transition.each(function () {\n      ++n;\n    }).on(\"end\", function () {\n      if (! --n) {\n        callback.apply(this, arguments);\n      }\n    });\n  };\n\n  ChartInternal.prototype.generateWait = function () {\n    var transitionsToWait = [],\n        f = function f(callback) {\n      var timer = setInterval(function () {\n        var done = 0;\n        transitionsToWait.forEach(function (t) {\n          if (t.empty()) {\n            done += 1;\n            return;\n          }\n\n          try {\n            t.transition();\n          } catch (e) {\n            done += 1;\n          }\n        });\n\n        if (done === transitionsToWait.length) {\n          clearInterval(timer);\n\n          if (callback) {\n            callback();\n          }\n        }\n      }, 50);\n    };\n\n    f.add = function (transition) {\n      transitionsToWait.push(transition);\n    };\n\n    return f;\n  };\n\n  ChartInternal.prototype.parseDate = function (date) {\n    var $$ = this,\n        parsedDate;\n\n    if (date instanceof Date) {\n      parsedDate = date;\n    } else if (typeof date === 'string') {\n      parsedDate = $$.dataTimeParse(date);\n    } else if (_typeof(date) === 'object') {\n      parsedDate = new Date(+date);\n    } else if (typeof date === 'number' && !isNaN(date)) {\n      parsedDate = new Date(+date);\n    }\n\n    if (!parsedDate || isNaN(+parsedDate)) {\n      window.console.error(\"Failed to parse x '\" + date + \"' to Date object\");\n    }\n\n    return parsedDate;\n  };\n\n  ChartInternal.prototype.isTabVisible = function () {\n    return !document.hidden;\n  };\n\n  ChartInternal.prototype.getPathBox = getPathBox;\n  ChartInternal.prototype.CLASS = CLASS;\n\n  /* jshint ignore:start */\n  // SVGPathSeg API polyfill\n  // https://github.com/progers/pathseg\n  //\n  // This is a drop-in replacement for the SVGPathSeg and SVGPathSegList APIs that were removed from\n  // SVG2 (https://lists.w3.org/Archives/Public/www-svg/2015Jun/0044.html), including the latest spec\n  // changes which were implemented in Firefox 43 and Chrome 46.\n  (function () {\n\n    if (!(\"SVGPathSeg\" in window)) {\n      // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSeg\n      window.SVGPathSeg = function (type, typeAsLetter, owningPathSegList) {\n        this.pathSegType = type;\n        this.pathSegTypeAsLetter = typeAsLetter;\n        this._owningPathSegList = owningPathSegList;\n      };\n\n      window.SVGPathSeg.prototype.classname = \"SVGPathSeg\";\n      window.SVGPathSeg.PATHSEG_UNKNOWN = 0;\n      window.SVGPathSeg.PATHSEG_CLOSEPATH = 1;\n      window.SVGPathSeg.PATHSEG_MOVETO_ABS = 2;\n      window.SVGPathSeg.PATHSEG_MOVETO_REL = 3;\n      window.SVGPathSeg.PATHSEG_LINETO_ABS = 4;\n      window.SVGPathSeg.PATHSEG_LINETO_REL = 5;\n      window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS = 6;\n      window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL = 7;\n      window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS = 8;\n      window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL = 9;\n      window.SVGPathSeg.PATHSEG_ARC_ABS = 10;\n      window.SVGPathSeg.PATHSEG_ARC_REL = 11;\n      window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS = 12;\n      window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL = 13;\n      window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS = 14;\n      window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL = 15;\n      window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;\n      window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;\n      window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;\n      window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19; // Notify owning PathSegList on any changes so they can be synchronized back to the path element.\n\n      window.SVGPathSeg.prototype._segmentChanged = function () {\n        if (this._owningPathSegList) this._owningPathSegList.segmentChanged(this);\n      };\n\n      window.SVGPathSegClosePath = function (owningPathSegList) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CLOSEPATH, \"z\", owningPathSegList);\n      };\n\n      window.SVGPathSegClosePath.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegClosePath.prototype.toString = function () {\n        return \"[object SVGPathSegClosePath]\";\n      };\n\n      window.SVGPathSegClosePath.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter;\n      };\n\n      window.SVGPathSegClosePath.prototype.clone = function () {\n        return new window.SVGPathSegClosePath(undefined);\n      };\n\n      window.SVGPathSegMovetoAbs = function (owningPathSegList, x, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_MOVETO_ABS, \"M\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n      };\n\n      window.SVGPathSegMovetoAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegMovetoAbs.prototype.toString = function () {\n        return \"[object SVGPathSegMovetoAbs]\";\n      };\n\n      window.SVGPathSegMovetoAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegMovetoAbs.prototype.clone = function () {\n        return new window.SVGPathSegMovetoAbs(undefined, this._x, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegMovetoAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegMovetoAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegMovetoRel = function (owningPathSegList, x, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_MOVETO_REL, \"m\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n      };\n\n      window.SVGPathSegMovetoRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegMovetoRel.prototype.toString = function () {\n        return \"[object SVGPathSegMovetoRel]\";\n      };\n\n      window.SVGPathSegMovetoRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegMovetoRel.prototype.clone = function () {\n        return new window.SVGPathSegMovetoRel(undefined, this._x, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegMovetoRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegMovetoRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegLinetoAbs = function (owningPathSegList, x, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_ABS, \"L\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n      };\n\n      window.SVGPathSegLinetoAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegLinetoAbs.prototype.toString = function () {\n        return \"[object SVGPathSegLinetoAbs]\";\n      };\n\n      window.SVGPathSegLinetoAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegLinetoAbs.prototype.clone = function () {\n        return new window.SVGPathSegLinetoAbs(undefined, this._x, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegLinetoAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegLinetoAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegLinetoRel = function (owningPathSegList, x, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_REL, \"l\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n      };\n\n      window.SVGPathSegLinetoRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegLinetoRel.prototype.toString = function () {\n        return \"[object SVGPathSegLinetoRel]\";\n      };\n\n      window.SVGPathSegLinetoRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegLinetoRel.prototype.clone = function () {\n        return new window.SVGPathSegLinetoRel(undefined, this._x, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegLinetoRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegLinetoRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoCubicAbs = function (owningPathSegList, x, y, x1, y1, x2, y2) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS, \"C\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._x1 = x1;\n        this._y1 = y1;\n        this._x2 = x2;\n        this._y2 = y2;\n      };\n\n      window.SVGPathSegCurvetoCubicAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoCubicAbs.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoCubicAbs]\";\n      };\n\n      window.SVGPathSegCurvetoCubicAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x1 + \" \" + this._y1 + \" \" + this._x2 + \" \" + this._y2 + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoCubicAbs.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoCubicAbs(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"x1\", {\n        get: function get() {\n          return this._x1;\n        },\n        set: function set(x1) {\n          this._x1 = x1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"y1\", {\n        get: function get() {\n          return this._y1;\n        },\n        set: function set(y1) {\n          this._y1 = y1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"x2\", {\n        get: function get() {\n          return this._x2;\n        },\n        set: function set(x2) {\n          this._x2 = x2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"y2\", {\n        get: function get() {\n          return this._y2;\n        },\n        set: function set(y2) {\n          this._y2 = y2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoCubicRel = function (owningPathSegList, x, y, x1, y1, x2, y2) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL, \"c\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._x1 = x1;\n        this._y1 = y1;\n        this._x2 = x2;\n        this._y2 = y2;\n      };\n\n      window.SVGPathSegCurvetoCubicRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoCubicRel.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoCubicRel]\";\n      };\n\n      window.SVGPathSegCurvetoCubicRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x1 + \" \" + this._y1 + \" \" + this._x2 + \" \" + this._y2 + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoCubicRel.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoCubicRel(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"x1\", {\n        get: function get() {\n          return this._x1;\n        },\n        set: function set(x1) {\n          this._x1 = x1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"y1\", {\n        get: function get() {\n          return this._y1;\n        },\n        set: function set(y1) {\n          this._y1 = y1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"x2\", {\n        get: function get() {\n          return this._x2;\n        },\n        set: function set(x2) {\n          this._x2 = x2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"y2\", {\n        get: function get() {\n          return this._y2;\n        },\n        set: function set(y2) {\n          this._y2 = y2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoQuadraticAbs = function (owningPathSegList, x, y, x1, y1) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS, \"Q\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._x1 = x1;\n        this._y1 = y1;\n      };\n\n      window.SVGPathSegCurvetoQuadraticAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoQuadraticAbs.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoQuadraticAbs]\";\n      };\n\n      window.SVGPathSegCurvetoQuadraticAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x1 + \" \" + this._y1 + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoQuadraticAbs.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoQuadraticAbs(undefined, this._x, this._y, this._x1, this._y1);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, \"x1\", {\n        get: function get() {\n          return this._x1;\n        },\n        set: function set(x1) {\n          this._x1 = x1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, \"y1\", {\n        get: function get() {\n          return this._y1;\n        },\n        set: function set(y1) {\n          this._y1 = y1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoQuadraticRel = function (owningPathSegList, x, y, x1, y1) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL, \"q\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._x1 = x1;\n        this._y1 = y1;\n      };\n\n      window.SVGPathSegCurvetoQuadraticRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoQuadraticRel.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoQuadraticRel]\";\n      };\n\n      window.SVGPathSegCurvetoQuadraticRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x1 + \" \" + this._y1 + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoQuadraticRel.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoQuadraticRel(undefined, this._x, this._y, this._x1, this._y1);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, \"x1\", {\n        get: function get() {\n          return this._x1;\n        },\n        set: function set(x1) {\n          this._x1 = x1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, \"y1\", {\n        get: function get() {\n          return this._y1;\n        },\n        set: function set(y1) {\n          this._y1 = y1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegArcAbs = function (owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_ARC_ABS, \"A\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._r1 = r1;\n        this._r2 = r2;\n        this._angle = angle;\n        this._largeArcFlag = largeArcFlag;\n        this._sweepFlag = sweepFlag;\n      };\n\n      window.SVGPathSegArcAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegArcAbs.prototype.toString = function () {\n        return \"[object SVGPathSegArcAbs]\";\n      };\n\n      window.SVGPathSegArcAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._r1 + \" \" + this._r2 + \" \" + this._angle + \" \" + (this._largeArcFlag ? \"1\" : \"0\") + \" \" + (this._sweepFlag ? \"1\" : \"0\") + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegArcAbs.prototype.clone = function () {\n        return new window.SVGPathSegArcAbs(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag);\n      };\n\n      Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"r1\", {\n        get: function get() {\n          return this._r1;\n        },\n        set: function set(r1) {\n          this._r1 = r1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"r2\", {\n        get: function get() {\n          return this._r2;\n        },\n        set: function set(r2) {\n          this._r2 = r2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"angle\", {\n        get: function get() {\n          return this._angle;\n        },\n        set: function set(angle) {\n          this._angle = angle;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"largeArcFlag\", {\n        get: function get() {\n          return this._largeArcFlag;\n        },\n        set: function set(largeArcFlag) {\n          this._largeArcFlag = largeArcFlag;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"sweepFlag\", {\n        get: function get() {\n          return this._sweepFlag;\n        },\n        set: function set(sweepFlag) {\n          this._sweepFlag = sweepFlag;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegArcRel = function (owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_ARC_REL, \"a\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._r1 = r1;\n        this._r2 = r2;\n        this._angle = angle;\n        this._largeArcFlag = largeArcFlag;\n        this._sweepFlag = sweepFlag;\n      };\n\n      window.SVGPathSegArcRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegArcRel.prototype.toString = function () {\n        return \"[object SVGPathSegArcRel]\";\n      };\n\n      window.SVGPathSegArcRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._r1 + \" \" + this._r2 + \" \" + this._angle + \" \" + (this._largeArcFlag ? \"1\" : \"0\") + \" \" + (this._sweepFlag ? \"1\" : \"0\") + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegArcRel.prototype.clone = function () {\n        return new window.SVGPathSegArcRel(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag);\n      };\n\n      Object.defineProperty(window.SVGPathSegArcRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcRel.prototype, \"r1\", {\n        get: function get() {\n          return this._r1;\n        },\n        set: function set(r1) {\n          this._r1 = r1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcRel.prototype, \"r2\", {\n        get: function get() {\n          return this._r2;\n        },\n        set: function set(r2) {\n          this._r2 = r2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcRel.prototype, \"angle\", {\n        get: function get() {\n          return this._angle;\n        },\n        set: function set(angle) {\n          this._angle = angle;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcRel.prototype, \"largeArcFlag\", {\n        get: function get() {\n          return this._largeArcFlag;\n        },\n        set: function set(largeArcFlag) {\n          this._largeArcFlag = largeArcFlag;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcRel.prototype, \"sweepFlag\", {\n        get: function get() {\n          return this._sweepFlag;\n        },\n        set: function set(sweepFlag) {\n          this._sweepFlag = sweepFlag;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegLinetoHorizontalAbs = function (owningPathSegList, x) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS, \"H\", owningPathSegList);\n        this._x = x;\n      };\n\n      window.SVGPathSegLinetoHorizontalAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegLinetoHorizontalAbs.prototype.toString = function () {\n        return \"[object SVGPathSegLinetoHorizontalAbs]\";\n      };\n\n      window.SVGPathSegLinetoHorizontalAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x;\n      };\n\n      window.SVGPathSegLinetoHorizontalAbs.prototype.clone = function () {\n        return new window.SVGPathSegLinetoHorizontalAbs(undefined, this._x);\n      };\n\n      Object.defineProperty(window.SVGPathSegLinetoHorizontalAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegLinetoHorizontalRel = function (owningPathSegList, x) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL, \"h\", owningPathSegList);\n        this._x = x;\n      };\n\n      window.SVGPathSegLinetoHorizontalRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegLinetoHorizontalRel.prototype.toString = function () {\n        return \"[object SVGPathSegLinetoHorizontalRel]\";\n      };\n\n      window.SVGPathSegLinetoHorizontalRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x;\n      };\n\n      window.SVGPathSegLinetoHorizontalRel.prototype.clone = function () {\n        return new window.SVGPathSegLinetoHorizontalRel(undefined, this._x);\n      };\n\n      Object.defineProperty(window.SVGPathSegLinetoHorizontalRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegLinetoVerticalAbs = function (owningPathSegList, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS, \"V\", owningPathSegList);\n        this._y = y;\n      };\n\n      window.SVGPathSegLinetoVerticalAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegLinetoVerticalAbs.prototype.toString = function () {\n        return \"[object SVGPathSegLinetoVerticalAbs]\";\n      };\n\n      window.SVGPathSegLinetoVerticalAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._y;\n      };\n\n      window.SVGPathSegLinetoVerticalAbs.prototype.clone = function () {\n        return new window.SVGPathSegLinetoVerticalAbs(undefined, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegLinetoVerticalAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegLinetoVerticalRel = function (owningPathSegList, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL, \"v\", owningPathSegList);\n        this._y = y;\n      };\n\n      window.SVGPathSegLinetoVerticalRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegLinetoVerticalRel.prototype.toString = function () {\n        return \"[object SVGPathSegLinetoVerticalRel]\";\n      };\n\n      window.SVGPathSegLinetoVerticalRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._y;\n      };\n\n      window.SVGPathSegLinetoVerticalRel.prototype.clone = function () {\n        return new window.SVGPathSegLinetoVerticalRel(undefined, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegLinetoVerticalRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoCubicSmoothAbs = function (owningPathSegList, x, y, x2, y2) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS, \"S\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._x2 = x2;\n        this._y2 = y2;\n      };\n\n      window.SVGPathSegCurvetoCubicSmoothAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoCubicSmoothAbs.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoCubicSmoothAbs]\";\n      };\n\n      window.SVGPathSegCurvetoCubicSmoothAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x2 + \" \" + this._y2 + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoCubicSmoothAbs.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoCubicSmoothAbs(undefined, this._x, this._y, this._x2, this._y2);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, \"x2\", {\n        get: function get() {\n          return this._x2;\n        },\n        set: function set(x2) {\n          this._x2 = x2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, \"y2\", {\n        get: function get() {\n          return this._y2;\n        },\n        set: function set(y2) {\n          this._y2 = y2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoCubicSmoothRel = function (owningPathSegList, x, y, x2, y2) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL, \"s\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._x2 = x2;\n        this._y2 = y2;\n      };\n\n      window.SVGPathSegCurvetoCubicSmoothRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoCubicSmoothRel.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoCubicSmoothRel]\";\n      };\n\n      window.SVGPathSegCurvetoCubicSmoothRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x2 + \" \" + this._y2 + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoCubicSmoothRel.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoCubicSmoothRel(undefined, this._x, this._y, this._x2, this._y2);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, \"x2\", {\n        get: function get() {\n          return this._x2;\n        },\n        set: function set(x2) {\n          this._x2 = x2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, \"y2\", {\n        get: function get() {\n          return this._y2;\n        },\n        set: function set(y2) {\n          this._y2 = y2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoQuadraticSmoothAbs = function (owningPathSegList, x, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS, \"T\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n      };\n\n      window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoQuadraticSmoothAbs]\";\n      };\n\n      window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoQuadraticSmoothAbs(undefined, this._x, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoQuadraticSmoothRel = function (owningPathSegList, x, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL, \"t\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n      };\n\n      window.SVGPathSegCurvetoQuadraticSmoothRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoQuadraticSmoothRel.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoQuadraticSmoothRel]\";\n      };\n\n      window.SVGPathSegCurvetoQuadraticSmoothRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoQuadraticSmoothRel.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoQuadraticSmoothRel(undefined, this._x, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      }); // Add createSVGPathSeg* functions to window.SVGPathElement.\n      // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-Interfacewindow.SVGPathElement.\n\n      window.SVGPathElement.prototype.createSVGPathSegClosePath = function () {\n        return new window.SVGPathSegClosePath(undefined);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegMovetoAbs = function (x, y) {\n        return new window.SVGPathSegMovetoAbs(undefined, x, y);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegMovetoRel = function (x, y) {\n        return new window.SVGPathSegMovetoRel(undefined, x, y);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegLinetoAbs = function (x, y) {\n        return new window.SVGPathSegLinetoAbs(undefined, x, y);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegLinetoRel = function (x, y) {\n        return new window.SVGPathSegLinetoRel(undefined, x, y);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs = function (x, y, x1, y1, x2, y2) {\n        return new window.SVGPathSegCurvetoCubicAbs(undefined, x, y, x1, y1, x2, y2);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel = function (x, y, x1, y1, x2, y2) {\n        return new window.SVGPathSegCurvetoCubicRel(undefined, x, y, x1, y1, x2, y2);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs = function (x, y, x1, y1) {\n        return new window.SVGPathSegCurvetoQuadraticAbs(undefined, x, y, x1, y1);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel = function (x, y, x1, y1) {\n        return new window.SVGPathSegCurvetoQuadraticRel(undefined, x, y, x1, y1);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegArcAbs = function (x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n        return new window.SVGPathSegArcAbs(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegArcRel = function (x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n        return new window.SVGPathSegArcRel(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs = function (x) {\n        return new window.SVGPathSegLinetoHorizontalAbs(undefined, x);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel = function (x) {\n        return new window.SVGPathSegLinetoHorizontalRel(undefined, x);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs = function (y) {\n        return new window.SVGPathSegLinetoVerticalAbs(undefined, y);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel = function (y) {\n        return new window.SVGPathSegLinetoVerticalRel(undefined, y);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs = function (x, y, x2, y2) {\n        return new window.SVGPathSegCurvetoCubicSmoothAbs(undefined, x, y, x2, y2);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel = function (x, y, x2, y2) {\n        return new window.SVGPathSegCurvetoCubicSmoothRel(undefined, x, y, x2, y2);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs = function (x, y) {\n        return new window.SVGPathSegCurvetoQuadraticSmoothAbs(undefined, x, y);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel = function (x, y) {\n        return new window.SVGPathSegCurvetoQuadraticSmoothRel(undefined, x, y);\n      };\n\n      if (!(\"getPathSegAtLength\" in window.SVGPathElement.prototype)) {\n        // Add getPathSegAtLength to SVGPathElement.\n        // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-__svg__SVGPathElement__getPathSegAtLength\n        // This polyfill requires SVGPathElement.getTotalLength to implement the distance-along-a-path algorithm.\n        window.SVGPathElement.prototype.getPathSegAtLength = function (distance) {\n          if (distance === undefined || !isFinite(distance)) throw \"Invalid arguments.\";\n          var measurementElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n          measurementElement.setAttribute(\"d\", this.getAttribute(\"d\"));\n          var lastPathSegment = measurementElement.pathSegList.numberOfItems - 1; // If the path is empty, return 0.\n\n          if (lastPathSegment <= 0) return 0;\n\n          do {\n            measurementElement.pathSegList.removeItem(lastPathSegment);\n            if (distance > measurementElement.getTotalLength()) break;\n            lastPathSegment--;\n          } while (lastPathSegment > 0);\n\n          return lastPathSegment;\n        };\n      }\n    }\n\n    if (!(\"SVGPathSegList\" in window)) {\n      // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSegList\n      window.SVGPathSegList = function (pathElement) {\n        this._pathElement = pathElement;\n        this._list = this._parsePath(this._pathElement.getAttribute(\"d\")); // Use a MutationObserver to catch changes to the path's \"d\" attribute.\n\n        this._mutationObserverConfig = {\n          \"attributes\": true,\n          \"attributeFilter\": [\"d\"]\n        };\n        this._pathElementMutationObserver = new MutationObserver(this._updateListFromPathMutations.bind(this));\n\n        this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);\n      };\n\n      window.SVGPathSegList.prototype.classname = \"SVGPathSegList\";\n      Object.defineProperty(window.SVGPathSegList.prototype, \"numberOfItems\", {\n        get: function get() {\n          this._checkPathSynchronizedToList();\n\n          return this._list.length;\n        },\n        enumerable: true\n      }); // Add the pathSegList accessors to window.SVGPathElement.\n      // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGAnimatedPathData\n\n      Object.defineProperty(window.SVGPathElement.prototype, \"pathSegList\", {\n        get: function get() {\n          if (!this._pathSegList) this._pathSegList = new window.SVGPathSegList(this);\n          return this._pathSegList;\n        },\n        enumerable: true\n      }); // FIXME: The following are not implemented and simply return window.SVGPathElement.pathSegList.\n\n      Object.defineProperty(window.SVGPathElement.prototype, \"normalizedPathSegList\", {\n        get: function get() {\n          return this.pathSegList;\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathElement.prototype, \"animatedPathSegList\", {\n        get: function get() {\n          return this.pathSegList;\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathElement.prototype, \"animatedNormalizedPathSegList\", {\n        get: function get() {\n          return this.pathSegList;\n        },\n        enumerable: true\n      }); // Process any pending mutations to the path element and update the list as needed.\n      // This should be the first call of all public functions and is needed because\n      // MutationObservers are not synchronous so we can have pending asynchronous mutations.\n\n      window.SVGPathSegList.prototype._checkPathSynchronizedToList = function () {\n        this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords());\n      };\n\n      window.SVGPathSegList.prototype._updateListFromPathMutations = function (mutationRecords) {\n        if (!this._pathElement) return;\n        var hasPathMutations = false;\n        mutationRecords.forEach(function (record) {\n          if (record.attributeName == \"d\") hasPathMutations = true;\n        });\n        if (hasPathMutations) this._list = this._parsePath(this._pathElement.getAttribute(\"d\"));\n      }; // Serialize the list and update the path's 'd' attribute.\n\n\n      window.SVGPathSegList.prototype._writeListToPath = function () {\n        this._pathElementMutationObserver.disconnect();\n\n        this._pathElement.setAttribute(\"d\", window.SVGPathSegList._pathSegArrayAsString(this._list));\n\n        this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);\n      }; // When a path segment changes the list needs to be synchronized back to the path element.\n\n\n      window.SVGPathSegList.prototype.segmentChanged = function (pathSeg) {\n        this._writeListToPath();\n      };\n\n      window.SVGPathSegList.prototype.clear = function () {\n        this._checkPathSynchronizedToList();\n\n        this._list.forEach(function (pathSeg) {\n          pathSeg._owningPathSegList = null;\n        });\n\n        this._list = [];\n\n        this._writeListToPath();\n      };\n\n      window.SVGPathSegList.prototype.initialize = function (newItem) {\n        this._checkPathSynchronizedToList();\n\n        this._list = [newItem];\n        newItem._owningPathSegList = this;\n\n        this._writeListToPath();\n\n        return newItem;\n      };\n\n      window.SVGPathSegList.prototype._checkValidIndex = function (index) {\n        if (isNaN(index) || index < 0 || index >= this.numberOfItems) throw \"INDEX_SIZE_ERR\";\n      };\n\n      window.SVGPathSegList.prototype.getItem = function (index) {\n        this._checkPathSynchronizedToList();\n\n        this._checkValidIndex(index);\n\n        return this._list[index];\n      };\n\n      window.SVGPathSegList.prototype.insertItemBefore = function (newItem, index) {\n        this._checkPathSynchronizedToList(); // Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.\n\n\n        if (index > this.numberOfItems) index = this.numberOfItems;\n\n        if (newItem._owningPathSegList) {\n          // SVG2 spec says to make a copy.\n          newItem = newItem.clone();\n        }\n\n        this._list.splice(index, 0, newItem);\n\n        newItem._owningPathSegList = this;\n\n        this._writeListToPath();\n\n        return newItem;\n      };\n\n      window.SVGPathSegList.prototype.replaceItem = function (newItem, index) {\n        this._checkPathSynchronizedToList();\n\n        if (newItem._owningPathSegList) {\n          // SVG2 spec says to make a copy.\n          newItem = newItem.clone();\n        }\n\n        this._checkValidIndex(index);\n\n        this._list[index] = newItem;\n        newItem._owningPathSegList = this;\n\n        this._writeListToPath();\n\n        return newItem;\n      };\n\n      window.SVGPathSegList.prototype.removeItem = function (index) {\n        this._checkPathSynchronizedToList();\n\n        this._checkValidIndex(index);\n\n        var item = this._list[index];\n\n        this._list.splice(index, 1);\n\n        this._writeListToPath();\n\n        return item;\n      };\n\n      window.SVGPathSegList.prototype.appendItem = function (newItem) {\n        this._checkPathSynchronizedToList();\n\n        if (newItem._owningPathSegList) {\n          // SVG2 spec says to make a copy.\n          newItem = newItem.clone();\n        }\n\n        this._list.push(newItem);\n\n        newItem._owningPathSegList = this; // TODO: Optimize this to just append to the existing attribute.\n\n        this._writeListToPath();\n\n        return newItem;\n      };\n\n      window.SVGPathSegList._pathSegArrayAsString = function (pathSegArray) {\n        var string = \"\";\n        var first = true;\n        pathSegArray.forEach(function (pathSeg) {\n          if (first) {\n            first = false;\n            string += pathSeg._asPathString();\n          } else {\n            string += \" \" + pathSeg._asPathString();\n          }\n        });\n        return string;\n      }; // This closely follows SVGPathParser::parsePath from Source/core/svg/SVGPathParser.cpp.\n\n\n      window.SVGPathSegList.prototype._parsePath = function (string) {\n        if (!string || string.length == 0) return [];\n        var owningPathSegList = this;\n\n        var Builder = function Builder() {\n          this.pathSegList = [];\n        };\n\n        Builder.prototype.appendSegment = function (pathSeg) {\n          this.pathSegList.push(pathSeg);\n        };\n\n        var Source = function Source(string) {\n          this._string = string;\n          this._currentIndex = 0;\n          this._endIndex = this._string.length;\n          this._previousCommand = window.SVGPathSeg.PATHSEG_UNKNOWN;\n\n          this._skipOptionalSpaces();\n        };\n\n        Source.prototype._isCurrentSpace = function () {\n          var character = this._string[this._currentIndex];\n          return character <= \" \" && (character == \" \" || character == \"\\n\" || character == \"\\t\" || character == \"\\r\" || character == \"\\f\");\n        };\n\n        Source.prototype._skipOptionalSpaces = function () {\n          while (this._currentIndex < this._endIndex && this._isCurrentSpace()) {\n            this._currentIndex++;\n          }\n\n          return this._currentIndex < this._endIndex;\n        };\n\n        Source.prototype._skipOptionalSpacesOrDelimiter = function () {\n          if (this._currentIndex < this._endIndex && !this._isCurrentSpace() && this._string.charAt(this._currentIndex) != \",\") return false;\n\n          if (this._skipOptionalSpaces()) {\n            if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == \",\") {\n              this._currentIndex++;\n\n              this._skipOptionalSpaces();\n            }\n          }\n\n          return this._currentIndex < this._endIndex;\n        };\n\n        Source.prototype.hasMoreData = function () {\n          return this._currentIndex < this._endIndex;\n        };\n\n        Source.prototype.peekSegmentType = function () {\n          var lookahead = this._string[this._currentIndex];\n          return this._pathSegTypeFromChar(lookahead);\n        };\n\n        Source.prototype._pathSegTypeFromChar = function (lookahead) {\n          switch (lookahead) {\n            case \"Z\":\n            case \"z\":\n              return window.SVGPathSeg.PATHSEG_CLOSEPATH;\n\n            case \"M\":\n              return window.SVGPathSeg.PATHSEG_MOVETO_ABS;\n\n            case \"m\":\n              return window.SVGPathSeg.PATHSEG_MOVETO_REL;\n\n            case \"L\":\n              return window.SVGPathSeg.PATHSEG_LINETO_ABS;\n\n            case \"l\":\n              return window.SVGPathSeg.PATHSEG_LINETO_REL;\n\n            case \"C\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS;\n\n            case \"c\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL;\n\n            case \"Q\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS;\n\n            case \"q\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL;\n\n            case \"A\":\n              return window.SVGPathSeg.PATHSEG_ARC_ABS;\n\n            case \"a\":\n              return window.SVGPathSeg.PATHSEG_ARC_REL;\n\n            case \"H\":\n              return window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS;\n\n            case \"h\":\n              return window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL;\n\n            case \"V\":\n              return window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS;\n\n            case \"v\":\n              return window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL;\n\n            case \"S\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS;\n\n            case \"s\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL;\n\n            case \"T\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS;\n\n            case \"t\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL;\n\n            default:\n              return window.SVGPathSeg.PATHSEG_UNKNOWN;\n          }\n        };\n\n        Source.prototype._nextCommandHelper = function (lookahead, previousCommand) {\n          // Check for remaining coordinates in the current command.\n          if ((lookahead == \"+\" || lookahead == \"-\" || lookahead == \".\" || lookahead >= \"0\" && lookahead <= \"9\") && previousCommand != window.SVGPathSeg.PATHSEG_CLOSEPATH) {\n            if (previousCommand == window.SVGPathSeg.PATHSEG_MOVETO_ABS) return window.SVGPathSeg.PATHSEG_LINETO_ABS;\n            if (previousCommand == window.SVGPathSeg.PATHSEG_MOVETO_REL) return window.SVGPathSeg.PATHSEG_LINETO_REL;\n            return previousCommand;\n          }\n\n          return window.SVGPathSeg.PATHSEG_UNKNOWN;\n        };\n\n        Source.prototype.initialCommandIsMoveTo = function () {\n          // If the path is empty it is still valid, so return true.\n          if (!this.hasMoreData()) return true;\n          var command = this.peekSegmentType(); // Path must start with moveTo.\n\n          return command == window.SVGPathSeg.PATHSEG_MOVETO_ABS || command == window.SVGPathSeg.PATHSEG_MOVETO_REL;\n        }; // Parse a number from an SVG path. This very closely follows genericParseNumber(...) from Source/core/svg/SVGParserUtilities.cpp.\n        // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-PathDataBNF\n\n\n        Source.prototype._parseNumber = function () {\n          var exponent = 0;\n          var integer = 0;\n          var frac = 1;\n          var decimal = 0;\n          var sign = 1;\n          var expsign = 1;\n          var startIndex = this._currentIndex;\n\n          this._skipOptionalSpaces(); // Read the sign.\n\n\n          if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == \"+\") this._currentIndex++;else if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == \"-\") {\n            this._currentIndex++;\n            sign = -1;\n          }\n          if (this._currentIndex == this._endIndex || (this._string.charAt(this._currentIndex) < \"0\" || this._string.charAt(this._currentIndex) > \"9\") && this._string.charAt(this._currentIndex) != \".\") // The first character of a number must be one of [0-9+-.].\n            return undefined; // Read the integer part, build right-to-left.\n\n          var startIntPartIndex = this._currentIndex;\n\n          while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= \"0\" && this._string.charAt(this._currentIndex) <= \"9\") {\n            this._currentIndex++;\n          } // Advance to first non-digit.\n\n\n          if (this._currentIndex != startIntPartIndex) {\n            var scanIntPartIndex = this._currentIndex - 1;\n            var multiplier = 1;\n\n            while (scanIntPartIndex >= startIntPartIndex) {\n              integer += multiplier * (this._string.charAt(scanIntPartIndex--) - \"0\");\n              multiplier *= 10;\n            }\n          } // Read the decimals.\n\n\n          if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == \".\") {\n            this._currentIndex++; // There must be a least one digit following the .\n\n            if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < \"0\" || this._string.charAt(this._currentIndex) > \"9\") return undefined;\n\n            while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= \"0\" && this._string.charAt(this._currentIndex) <= \"9\") {\n              frac *= 10;\n              decimal += (this._string.charAt(this._currentIndex) - \"0\") / frac;\n              this._currentIndex += 1;\n            }\n          } // Read the exponent part.\n\n\n          if (this._currentIndex != startIndex && this._currentIndex + 1 < this._endIndex && (this._string.charAt(this._currentIndex) == \"e\" || this._string.charAt(this._currentIndex) == \"E\") && this._string.charAt(this._currentIndex + 1) != \"x\" && this._string.charAt(this._currentIndex + 1) != \"m\") {\n            this._currentIndex++; // Read the sign of the exponent.\n\n            if (this._string.charAt(this._currentIndex) == \"+\") {\n              this._currentIndex++;\n            } else if (this._string.charAt(this._currentIndex) == \"-\") {\n              this._currentIndex++;\n              expsign = -1;\n            } // There must be an exponent.\n\n\n            if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < \"0\" || this._string.charAt(this._currentIndex) > \"9\") return undefined;\n\n            while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= \"0\" && this._string.charAt(this._currentIndex) <= \"9\") {\n              exponent *= 10;\n              exponent += this._string.charAt(this._currentIndex) - \"0\";\n              this._currentIndex++;\n            }\n          }\n\n          var number = integer + decimal;\n          number *= sign;\n          if (exponent) number *= Math.pow(10, expsign * exponent);\n          if (startIndex == this._currentIndex) return undefined;\n\n          this._skipOptionalSpacesOrDelimiter();\n\n          return number;\n        };\n\n        Source.prototype._parseArcFlag = function () {\n          if (this._currentIndex >= this._endIndex) return undefined;\n          var flag = false;\n\n          var flagChar = this._string.charAt(this._currentIndex++);\n\n          if (flagChar == \"0\") flag = false;else if (flagChar == \"1\") flag = true;else return undefined;\n\n          this._skipOptionalSpacesOrDelimiter();\n\n          return flag;\n        };\n\n        Source.prototype.parseSegment = function () {\n          var lookahead = this._string[this._currentIndex];\n\n          var command = this._pathSegTypeFromChar(lookahead);\n\n          if (command == window.SVGPathSeg.PATHSEG_UNKNOWN) {\n            // Possibly an implicit command. Not allowed if this is the first command.\n            if (this._previousCommand == window.SVGPathSeg.PATHSEG_UNKNOWN) return null;\n            command = this._nextCommandHelper(lookahead, this._previousCommand);\n            if (command == window.SVGPathSeg.PATHSEG_UNKNOWN) return null;\n          } else {\n            this._currentIndex++;\n          }\n\n          this._previousCommand = command;\n\n          switch (command) {\n            case window.SVGPathSeg.PATHSEG_MOVETO_REL:\n              return new window.SVGPathSegMovetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_MOVETO_ABS:\n              return new window.SVGPathSegMovetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_LINETO_REL:\n              return new window.SVGPathSegLinetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_LINETO_ABS:\n              return new window.SVGPathSegLinetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:\n              return new window.SVGPathSegLinetoHorizontalRel(owningPathSegList, this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:\n              return new window.SVGPathSegLinetoHorizontalAbs(owningPathSegList, this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:\n              return new window.SVGPathSegLinetoVerticalRel(owningPathSegList, this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:\n              return new window.SVGPathSegLinetoVerticalAbs(owningPathSegList, this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_CLOSEPATH:\n              this._skipOptionalSpaces();\n\n              return new window.SVGPathSegClosePath(owningPathSegList);\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:\n              var points = {\n                x1: this._parseNumber(),\n                y1: this._parseNumber(),\n                x2: this._parseNumber(),\n                y2: this._parseNumber(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegCurvetoCubicRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:\n              var points = {\n                x1: this._parseNumber(),\n                y1: this._parseNumber(),\n                x2: this._parseNumber(),\n                y2: this._parseNumber(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegCurvetoCubicAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:\n              var points = {\n                x2: this._parseNumber(),\n                y2: this._parseNumber(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegCurvetoCubicSmoothRel(owningPathSegList, points.x, points.y, points.x2, points.y2);\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:\n              var points = {\n                x2: this._parseNumber(),\n                y2: this._parseNumber(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegCurvetoCubicSmoothAbs(owningPathSegList, points.x, points.y, points.x2, points.y2);\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:\n              var points = {\n                x1: this._parseNumber(),\n                y1: this._parseNumber(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegCurvetoQuadraticRel(owningPathSegList, points.x, points.y, points.x1, points.y1);\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:\n              var points = {\n                x1: this._parseNumber(),\n                y1: this._parseNumber(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegCurvetoQuadraticAbs(owningPathSegList, points.x, points.y, points.x1, points.y1);\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:\n              return new window.SVGPathSegCurvetoQuadraticSmoothRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:\n              return new window.SVGPathSegCurvetoQuadraticSmoothAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_ARC_REL:\n              var points = {\n                x1: this._parseNumber(),\n                y1: this._parseNumber(),\n                arcAngle: this._parseNumber(),\n                arcLarge: this._parseArcFlag(),\n                arcSweep: this._parseArcFlag(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegArcRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);\n\n            case window.SVGPathSeg.PATHSEG_ARC_ABS:\n              var points = {\n                x1: this._parseNumber(),\n                y1: this._parseNumber(),\n                arcAngle: this._parseNumber(),\n                arcLarge: this._parseArcFlag(),\n                arcSweep: this._parseArcFlag(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegArcAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);\n\n            default:\n              throw \"Unknown path seg type.\";\n          }\n        };\n\n        var builder = new Builder();\n        var source = new Source(string);\n        if (!source.initialCommandIsMoveTo()) return [];\n\n        while (source.hasMoreData()) {\n          var pathSeg = source.parseSegment();\n          if (!pathSeg) return [];\n          builder.appendSegment(pathSeg);\n        }\n\n        return builder.pathSegList;\n      };\n    }\n  })(); // String.padEnd polyfill for IE11\n  //\n  // https://github.com/uxitten/polyfill/blob/master/string.polyfill.js\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n\n\n  if (!String.prototype.padEnd) {\n    String.prototype.padEnd = function padEnd(targetLength, padString) {\n      targetLength = targetLength >> 0; //floor if number or convert non-number to 0;\n\n      padString = String(typeof padString !== 'undefined' ? padString : ' ');\n\n      if (this.length > targetLength) {\n        return String(this);\n      } else {\n        targetLength = targetLength - this.length;\n\n        if (targetLength > padString.length) {\n          padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed\n        }\n\n        return String(this) + padString.slice(0, targetLength);\n      }\n    };\n  }\n  /* jshint ignore:end */\n\n  Chart.prototype.axis = function () {};\n\n  Chart.prototype.axis.labels = function (labels) {\n    var $$ = this.internal;\n\n    if (arguments.length) {\n      Object.keys(labels).forEach(function (axisId) {\n        $$.axis.setLabelText(axisId, labels[axisId]);\n      });\n      $$.axis.updateLabels();\n    } // TODO: return some values?\n\n  };\n\n  Chart.prototype.axis.max = function (max) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (arguments.length) {\n      if (_typeof(max) === 'object') {\n        if (isValue(max.x)) {\n          config.axis_x_max = max.x;\n        }\n\n        if (isValue(max.y)) {\n          config.axis_y_max = max.y;\n        }\n\n        if (isValue(max.y2)) {\n          config.axis_y2_max = max.y2;\n        }\n      } else {\n        config.axis_y_max = config.axis_y2_max = max;\n      }\n\n      $$.redraw({\n        withUpdateOrgXDomain: true,\n        withUpdateXDomain: true\n      });\n    } else {\n      return {\n        x: config.axis_x_max,\n        y: config.axis_y_max,\n        y2: config.axis_y2_max\n      };\n    }\n  };\n\n  Chart.prototype.axis.min = function (min) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (arguments.length) {\n      if (_typeof(min) === 'object') {\n        if (isValue(min.x)) {\n          config.axis_x_min = min.x;\n        }\n\n        if (isValue(min.y)) {\n          config.axis_y_min = min.y;\n        }\n\n        if (isValue(min.y2)) {\n          config.axis_y2_min = min.y2;\n        }\n      } else {\n        config.axis_y_min = config.axis_y2_min = min;\n      }\n\n      $$.redraw({\n        withUpdateOrgXDomain: true,\n        withUpdateXDomain: true\n      });\n    } else {\n      return {\n        x: config.axis_x_min,\n        y: config.axis_y_min,\n        y2: config.axis_y2_min\n      };\n    }\n  };\n\n  Chart.prototype.axis.range = function (range) {\n    if (arguments.length) {\n      if (isDefined(range.max)) {\n        this.axis.max(range.max);\n      }\n\n      if (isDefined(range.min)) {\n        this.axis.min(range.min);\n      }\n    } else {\n      return {\n        max: this.axis.max(),\n        min: this.axis.min()\n      };\n    }\n  };\n\n  Chart.prototype.category = function (i, category) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (arguments.length > 1) {\n      config.axis_x_categories[i] = category;\n      $$.redraw();\n    }\n\n    return config.axis_x_categories[i];\n  };\n\n  Chart.prototype.categories = function (categories) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (!arguments.length) {\n      return config.axis_x_categories;\n    }\n\n    config.axis_x_categories = categories;\n    $$.redraw();\n    return config.axis_x_categories;\n  };\n\n  Chart.prototype.resize = function (size) {\n    var $$ = this.internal,\n        config = $$.config;\n    config.size_width = size ? size.width : null;\n    config.size_height = size ? size.height : null;\n    this.flush();\n  };\n\n  Chart.prototype.flush = function () {\n    var $$ = this.internal;\n    $$.updateAndRedraw({\n      withLegend: true,\n      withTransition: false,\n      withTransitionForTransform: false\n    });\n  };\n\n  Chart.prototype.destroy = function () {\n    var $$ = this.internal;\n    window.clearInterval($$.intervalForObserveInserted);\n\n    if ($$.resizeTimeout !== undefined) {\n      window.clearTimeout($$.resizeTimeout);\n    }\n\n    if (window.detachEvent) {\n      window.detachEvent('onresize', $$.resizeIfElementDisplayed);\n    } else if (window.removeEventListener) {\n      window.removeEventListener('resize', $$.resizeIfElementDisplayed);\n    } else {\n      var wrapper = window.onresize; // check if no one else removed our wrapper and remove our resizeFunction from it\n\n      if (wrapper && wrapper.add && wrapper.remove) {\n        wrapper.remove($$.resizeFunction);\n      }\n    } // Removes the inner resize functions\n\n\n    $$.resizeFunction.remove(); // Unbinds from the window focus event\n\n    $$.unbindWindowFocus();\n    $$.selectChart.classed('c3', false).html(\"\"); // MEMO: this is needed because the reference of some elements will not be released, then memory leak will happen.\n\n    Object.keys($$).forEach(function (key) {\n      $$[key] = null;\n    });\n    return null;\n  };\n\n  Chart.prototype.color = function (id) {\n    var $$ = this.internal;\n    return $$.color(id); // more patterns\n  };\n\n  Chart.prototype.data = function (targetIds) {\n    var targets = this.internal.data.targets;\n    return typeof targetIds === 'undefined' ? targets : targets.filter(function (t) {\n      return [].concat(targetIds).indexOf(t.id) >= 0;\n    });\n  };\n\n  Chart.prototype.data.shown = function (targetIds) {\n    return this.internal.filterTargetsToShow(this.data(targetIds));\n  };\n\n  Chart.prototype.data.values = function (targetId) {\n    var targets,\n        values = null;\n\n    if (targetId) {\n      targets = this.data(targetId);\n      values = targets[0] ? targets[0].values.map(function (d) {\n        return d.value;\n      }) : null;\n    }\n\n    return values;\n  };\n\n  Chart.prototype.data.names = function (names) {\n    this.internal.clearLegendItemTextBoxCache();\n    return this.internal.updateDataAttributes('names', names);\n  };\n\n  Chart.prototype.data.colors = function (colors) {\n    return this.internal.updateDataAttributes('colors', colors);\n  };\n\n  Chart.prototype.data.axes = function (axes) {\n    return this.internal.updateDataAttributes('axes', axes);\n  };\n\n  Chart.prototype.flow = function (args) {\n    var $$ = this.internal,\n        targets,\n        data,\n        notfoundIds = [],\n        orgDataCount = $$.getMaxDataCount(),\n        dataCount,\n        domain,\n        baseTarget,\n        baseValue,\n        length = 0,\n        tail = 0,\n        diff,\n        to;\n\n    if (args.json) {\n      data = $$.convertJsonToData(args.json, args.keys);\n    } else if (args.rows) {\n      data = $$.convertRowsToData(args.rows);\n    } else if (args.columns) {\n      data = $$.convertColumnsToData(args.columns);\n    } else {\n      return;\n    }\n\n    targets = $$.convertDataToTargets(data, true); // Update/Add data\n\n    $$.data.targets.forEach(function (t) {\n      var found = false,\n          i,\n          j;\n\n      for (i = 0; i < targets.length; i++) {\n        if (t.id === targets[i].id) {\n          found = true;\n\n          if (t.values[t.values.length - 1]) {\n            tail = t.values[t.values.length - 1].index + 1;\n          }\n\n          length = targets[i].values.length;\n\n          for (j = 0; j < length; j++) {\n            targets[i].values[j].index = tail + j;\n\n            if (!$$.isTimeSeries()) {\n              targets[i].values[j].x = tail + j;\n            }\n          }\n\n          t.values = t.values.concat(targets[i].values);\n          targets.splice(i, 1);\n          break;\n        }\n      }\n\n      if (!found) {\n        notfoundIds.push(t.id);\n      }\n    }); // Append null for not found targets\n\n    $$.data.targets.forEach(function (t) {\n      var i, j;\n\n      for (i = 0; i < notfoundIds.length; i++) {\n        if (t.id === notfoundIds[i]) {\n          tail = t.values[t.values.length - 1].index + 1;\n\n          for (j = 0; j < length; j++) {\n            t.values.push({\n              id: t.id,\n              index: tail + j,\n              x: $$.isTimeSeries() ? $$.getOtherTargetX(tail + j) : tail + j,\n              value: null\n            });\n          }\n        }\n      }\n    }); // Generate null values for new target\n\n    if ($$.data.targets.length) {\n      targets.forEach(function (t) {\n        var i,\n            missing = [];\n\n        for (i = $$.data.targets[0].values[0].index; i < tail; i++) {\n          missing.push({\n            id: t.id,\n            index: i,\n            x: $$.isTimeSeries() ? $$.getOtherTargetX(i) : i,\n            value: null\n          });\n        }\n\n        t.values.forEach(function (v) {\n          v.index += tail;\n\n          if (!$$.isTimeSeries()) {\n            v.x += tail;\n          }\n        });\n        t.values = missing.concat(t.values);\n      });\n    }\n\n    $$.data.targets = $$.data.targets.concat(targets); // add remained\n    // check data count because behavior needs to change when it's only one\n\n    dataCount = $$.getMaxDataCount();\n    baseTarget = $$.data.targets[0];\n    baseValue = baseTarget.values[0]; // Update length to flow if needed\n\n    if (isDefined(args.to)) {\n      length = 0;\n      to = $$.isTimeSeries() ? $$.parseDate(args.to) : args.to;\n      baseTarget.values.forEach(function (v) {\n        if (v.x < to) {\n          length++;\n        }\n      });\n    } else if (isDefined(args.length)) {\n      length = args.length;\n    } // If only one data, update the domain to flow from left edge of the chart\n\n\n    if (!orgDataCount) {\n      if ($$.isTimeSeries()) {\n        if (baseTarget.values.length > 1) {\n          diff = baseTarget.values[baseTarget.values.length - 1].x - baseValue.x;\n        } else {\n          diff = baseValue.x - $$.getXDomain($$.data.targets)[0];\n        }\n      } else {\n        diff = 1;\n      }\n\n      domain = [baseValue.x - diff, baseValue.x];\n      $$.updateXDomain(null, true, true, false, domain);\n    } else if (orgDataCount === 1) {\n      if ($$.isTimeSeries()) {\n        diff = (baseTarget.values[baseTarget.values.length - 1].x - baseValue.x) / 2;\n        domain = [new Date(+baseValue.x - diff), new Date(+baseValue.x + diff)];\n        $$.updateXDomain(null, true, true, false, domain);\n      }\n    } // Set targets\n\n\n    $$.updateTargets($$.data.targets); // Redraw with new targets\n\n    $$.redraw({\n      flow: {\n        index: baseValue.index,\n        length: length,\n        duration: isValue(args.duration) ? args.duration : $$.config.transition_duration,\n        done: args.done,\n        orgDataCount: orgDataCount\n      },\n      withLegend: true,\n      withTransition: orgDataCount > 1,\n      withTrimXDomain: false,\n      withUpdateXAxis: true\n    });\n  };\n\n  ChartInternal.prototype.generateFlow = function (args) {\n    var $$ = this,\n        config = $$.config,\n        d3 = $$.d3;\n    return function () {\n      var targets = args.targets,\n          flow = args.flow,\n          drawBar = args.drawBar,\n          drawLine = args.drawLine,\n          drawArea = args.drawArea,\n          cx = args.cx,\n          cy = args.cy,\n          xv = args.xv,\n          xForText = args.xForText,\n          yForText = args.yForText,\n          duration = args.duration;\n\n      var translateX,\n          scaleX = 1,\n          transform,\n          flowIndex = flow.index,\n          flowLength = flow.length,\n          flowStart = $$.getValueOnIndex($$.data.targets[0].values, flowIndex),\n          flowEnd = $$.getValueOnIndex($$.data.targets[0].values, flowIndex + flowLength),\n          orgDomain = $$.x.domain(),\n          domain,\n          durationForFlow = flow.duration || duration,\n          done = flow.done || function () {},\n          wait = $$.generateWait();\n\n      var xgrid, xgridLines, mainRegion, mainText, mainBar, mainLine, mainArea, mainCircle; // set flag\n\n      $$.flowing = true; // remove head data after rendered\n\n      $$.data.targets.forEach(function (d) {\n        d.values.splice(0, flowLength);\n      }); // update x domain to generate axis elements for flow\n\n      domain = $$.updateXDomain(targets, true, true); // update elements related to x scale\n\n      if ($$.updateXGrid) {\n        $$.updateXGrid(true);\n      }\n\n      xgrid = $$.xgrid || d3.selectAll([]); // xgrid needs to be obtained after updateXGrid\n\n      xgridLines = $$.xgridLines || d3.selectAll([]);\n      mainRegion = $$.mainRegion || d3.selectAll([]);\n      mainText = $$.mainText || d3.selectAll([]);\n      mainBar = $$.mainBar || d3.selectAll([]);\n      mainLine = $$.mainLine || d3.selectAll([]);\n      mainArea = $$.mainArea || d3.selectAll([]);\n      mainCircle = $$.mainCircle || d3.selectAll([]); // generate transform to flow\n\n      if (!flow.orgDataCount) {\n        // if empty\n        if ($$.data.targets[0].values.length !== 1) {\n          translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);\n        } else {\n          if ($$.isTimeSeries()) {\n            flowStart = $$.getValueOnIndex($$.data.targets[0].values, 0);\n            flowEnd = $$.getValueOnIndex($$.data.targets[0].values, $$.data.targets[0].values.length - 1);\n            translateX = $$.x(flowStart.x) - $$.x(flowEnd.x);\n          } else {\n            translateX = diffDomain(domain) / 2;\n          }\n        }\n      } else if (flow.orgDataCount === 1 || (flowStart && flowStart.x) === (flowEnd && flowEnd.x)) {\n        translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);\n      } else {\n        if ($$.isTimeSeries()) {\n          translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);\n        } else {\n          translateX = $$.x(flowStart.x) - $$.x(flowEnd.x);\n        }\n      }\n\n      scaleX = diffDomain(orgDomain) / diffDomain(domain);\n      transform = 'translate(' + translateX + ',0) scale(' + scaleX + ',1)';\n      $$.hideXGridFocus();\n      var flowTransition = d3.transition().ease(d3.easeLinear).duration(durationForFlow);\n      wait.add($$.xAxis($$.axes.x, flowTransition));\n      wait.add(mainBar.transition(flowTransition).attr('transform', transform));\n      wait.add(mainLine.transition(flowTransition).attr('transform', transform));\n      wait.add(mainArea.transition(flowTransition).attr('transform', transform));\n      wait.add(mainCircle.transition(flowTransition).attr('transform', transform));\n      wait.add(mainText.transition(flowTransition).attr('transform', transform));\n      wait.add(mainRegion.filter($$.isRegionOnX).transition(flowTransition).attr('transform', transform));\n      wait.add(xgrid.transition(flowTransition).attr('transform', transform));\n      wait.add(xgridLines.transition(flowTransition).attr('transform', transform));\n      wait(function () {\n        var i,\n            shapes = [],\n            texts = []; // remove flowed elements\n\n        if (flowLength) {\n          for (i = 0; i < flowLength; i++) {\n            shapes.push('.' + CLASS.shape + '-' + (flowIndex + i));\n            texts.push('.' + CLASS.text + '-' + (flowIndex + i));\n          }\n\n          $$.svg.selectAll('.' + CLASS.shapes).selectAll(shapes).remove();\n          $$.svg.selectAll('.' + CLASS.texts).selectAll(texts).remove();\n          $$.svg.select('.' + CLASS.xgrid).remove();\n        } // draw again for removing flowed elements and reverting attr\n\n\n        xgrid.attr('transform', null).attr('x1', $$.xgridAttr.x1).attr('x2', $$.xgridAttr.x2).attr('y1', $$.xgridAttr.y1).attr('y2', $$.xgridAttr.y2).style(\"opacity\", $$.xgridAttr.opacity);\n        xgridLines.attr('transform', null);\n        xgridLines.select('line').attr(\"x1\", config.axis_rotated ? 0 : xv).attr(\"x2\", config.axis_rotated ? $$.width : xv);\n        xgridLines.select('text').attr(\"x\", config.axis_rotated ? $$.width : 0).attr(\"y\", xv);\n        mainBar.attr('transform', null).attr(\"d\", drawBar);\n        mainLine.attr('transform', null).attr(\"d\", drawLine);\n        mainArea.attr('transform', null).attr(\"d\", drawArea);\n        mainCircle.attr('transform', null).attr(\"cx\", cx).attr(\"cy\", cy);\n        mainText.attr('transform', null).attr('x', xForText).attr('y', yForText).style('fill-opacity', $$.opacityForText.bind($$));\n        mainRegion.attr('transform', null);\n        mainRegion.filter($$.isRegionOnX).attr(\"x\", $$.regionX.bind($$)).attr(\"width\", $$.regionWidth.bind($$)); // callback for end of flow\n\n        done();\n        $$.flowing = false;\n      });\n    };\n  };\n\n  Chart.prototype.focus = function (targetIds) {\n    var $$ = this.internal,\n        candidates;\n    targetIds = $$.mapToTargetIds(targetIds);\n    candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$))), this.revert();\n    this.defocus();\n    candidates.classed(CLASS.focused, true).classed(CLASS.defocused, false);\n\n    if ($$.hasArcType()) {\n      $$.expandArc(targetIds);\n    }\n\n    $$.toggleFocusLegend(targetIds, true);\n    $$.focusedTargetIds = targetIds;\n    $$.defocusedTargetIds = $$.defocusedTargetIds.filter(function (id) {\n      return targetIds.indexOf(id) < 0;\n    });\n  };\n\n  Chart.prototype.defocus = function (targetIds) {\n    var $$ = this.internal,\n        candidates;\n    targetIds = $$.mapToTargetIds(targetIds);\n    candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$))), candidates.classed(CLASS.focused, false).classed(CLASS.defocused, true);\n\n    if ($$.hasArcType()) {\n      $$.unexpandArc(targetIds);\n    }\n\n    $$.toggleFocusLegend(targetIds, false);\n    $$.focusedTargetIds = $$.focusedTargetIds.filter(function (id) {\n      return targetIds.indexOf(id) < 0;\n    });\n    $$.defocusedTargetIds = targetIds;\n  };\n\n  Chart.prototype.revert = function (targetIds) {\n    var $$ = this.internal,\n        candidates;\n    targetIds = $$.mapToTargetIds(targetIds);\n    candidates = $$.svg.selectAll($$.selectorTargets(targetIds)); // should be for all targets\n\n    candidates.classed(CLASS.focused, false).classed(CLASS.defocused, false);\n\n    if ($$.hasArcType()) {\n      $$.unexpandArc(targetIds);\n    }\n\n    if ($$.config.legend_show) {\n      $$.showLegend(targetIds.filter($$.isLegendToShow.bind($$)));\n      $$.legend.selectAll($$.selectorLegends(targetIds)).filter(function () {\n        return $$.d3.select(this).classed(CLASS.legendItemFocused);\n      }).classed(CLASS.legendItemFocused, false);\n    }\n\n    $$.focusedTargetIds = [];\n    $$.defocusedTargetIds = [];\n  };\n\n  Chart.prototype.xgrids = function (grids) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (!grids) {\n      return config.grid_x_lines;\n    }\n\n    config.grid_x_lines = grids;\n    $$.redrawWithoutRescale();\n    return config.grid_x_lines;\n  };\n\n  Chart.prototype.xgrids.add = function (grids) {\n    var $$ = this.internal;\n    return this.xgrids($$.config.grid_x_lines.concat(grids ? grids : []));\n  };\n\n  Chart.prototype.xgrids.remove = function (params) {\n    // TODO: multiple\n    var $$ = this.internal;\n    $$.removeGridLines(params, true);\n  };\n\n  Chart.prototype.ygrids = function (grids) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (!grids) {\n      return config.grid_y_lines;\n    }\n\n    config.grid_y_lines = grids;\n    $$.redrawWithoutRescale();\n    return config.grid_y_lines;\n  };\n\n  Chart.prototype.ygrids.add = function (grids) {\n    var $$ = this.internal;\n    return this.ygrids($$.config.grid_y_lines.concat(grids ? grids : []));\n  };\n\n  Chart.prototype.ygrids.remove = function (params) {\n    // TODO: multiple\n    var $$ = this.internal;\n    $$.removeGridLines(params, false);\n  };\n\n  Chart.prototype.groups = function (groups) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (isUndefined(groups)) {\n      return config.data_groups;\n    }\n\n    config.data_groups = groups;\n    $$.redraw();\n    return config.data_groups;\n  };\n\n  Chart.prototype.legend = function () {};\n\n  Chart.prototype.legend.show = function (targetIds) {\n    var $$ = this.internal;\n    $$.showLegend($$.mapToTargetIds(targetIds));\n    $$.updateAndRedraw({\n      withLegend: true\n    });\n  };\n\n  Chart.prototype.legend.hide = function (targetIds) {\n    var $$ = this.internal;\n    $$.hideLegend($$.mapToTargetIds(targetIds));\n    $$.updateAndRedraw({\n      withLegend: false\n    });\n  };\n\n  Chart.prototype.load = function (args) {\n    var $$ = this.internal,\n        config = $$.config; // update xs if specified\n\n    if (args.xs) {\n      $$.addXs(args.xs);\n    } // update names if exists\n\n\n    if ('names' in args) {\n      Chart.prototype.data.names.bind(this)(args.names);\n    } // update classes if exists\n\n\n    if ('classes' in args) {\n      Object.keys(args.classes).forEach(function (id) {\n        config.data_classes[id] = args.classes[id];\n      });\n    } // update categories if exists\n\n\n    if ('categories' in args && $$.isCategorized()) {\n      config.axis_x_categories = args.categories;\n    } // update axes if exists\n\n\n    if ('axes' in args) {\n      Object.keys(args.axes).forEach(function (id) {\n        config.data_axes[id] = args.axes[id];\n      });\n    } // update colors if exists\n\n\n    if ('colors' in args) {\n      Object.keys(args.colors).forEach(function (id) {\n        config.data_colors[id] = args.colors[id];\n      });\n    } // use cache if exists\n\n\n    if ('cacheIds' in args && $$.hasCaches(args.cacheIds)) {\n      $$.load($$.getCaches(args.cacheIds), args.done);\n      return;\n    } // unload if needed\n\n\n    if ('unload' in args) {\n      // TODO: do not unload if target will load (included in url/rows/columns)\n      $$.unload($$.mapToTargetIds(typeof args.unload === 'boolean' && args.unload ? null : args.unload), function () {\n        $$.loadFromArgs(args);\n      });\n    } else {\n      $$.loadFromArgs(args);\n    }\n  };\n\n  Chart.prototype.unload = function (args) {\n    var $$ = this.internal;\n    args = args || {};\n\n    if (args instanceof Array) {\n      args = {\n        ids: args\n      };\n    } else if (typeof args === 'string') {\n      args = {\n        ids: [args]\n      };\n    }\n\n    $$.unload($$.mapToTargetIds(args.ids), function () {\n      $$.redraw({\n        withUpdateOrgXDomain: true,\n        withUpdateXDomain: true,\n        withLegend: true\n      });\n\n      if (args.done) {\n        args.done();\n      }\n    });\n  };\n\n  Chart.prototype.regions = function (regions) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (!regions) {\n      return config.regions;\n    }\n\n    config.regions = regions;\n    $$.redrawWithoutRescale();\n    return config.regions;\n  };\n\n  Chart.prototype.regions.add = function (regions) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (!regions) {\n      return config.regions;\n    }\n\n    config.regions = config.regions.concat(regions);\n    $$.redrawWithoutRescale();\n    return config.regions;\n  };\n\n  Chart.prototype.regions.remove = function (options) {\n    var $$ = this.internal,\n        config = $$.config,\n        duration,\n        classes,\n        regions;\n    options = options || {};\n    duration = getOption(options, \"duration\", config.transition_duration);\n    classes = getOption(options, \"classes\", [CLASS.region]);\n    regions = $$.main.select('.' + CLASS.regions).selectAll(classes.map(function (c) {\n      return '.' + c;\n    }));\n    (duration ? regions.transition().duration(duration) : regions).style('opacity', 0).remove();\n    config.regions = config.regions.filter(function (region) {\n      var found = false;\n\n      if (!region['class']) {\n        return true;\n      }\n\n      region['class'].split(' ').forEach(function (c) {\n        if (classes.indexOf(c) >= 0) {\n          found = true;\n        }\n      });\n      return !found;\n    });\n    return config.regions;\n  };\n\n  Chart.prototype.selected = function (targetId) {\n    var $$ = this.internal,\n        d3 = $$.d3;\n    return d3.merge($$.main.selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(targetId)).selectAll('.' + CLASS.shape).filter(function () {\n      return d3.select(this).classed(CLASS.SELECTED);\n    }).map(function (d) {\n      return d.map(function (d) {\n        var data = d.__data__;\n        return data.data ? data.data : data;\n      });\n    }));\n  };\n\n  Chart.prototype.select = function (ids, indices, resetOther) {\n    var $$ = this.internal,\n        d3 = $$.d3,\n        config = $$.config;\n\n    if (!config.data_selection_enabled) {\n      return;\n    }\n\n    $$.main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape).each(function (d, i) {\n      var shape = d3.select(this),\n          id = d.data ? d.data.id : d.id,\n          toggle = $$.getToggle(this, d).bind($$),\n          isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0,\n          isTargetIndex = !indices || indices.indexOf(i) >= 0,\n          isSelected = shape.classed(CLASS.SELECTED); // line/area selection not supported yet\n\n      if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) {\n        return;\n      }\n\n      if (isTargetId && isTargetIndex) {\n        if (config.data_selection_isselectable(d) && !isSelected) {\n          toggle(true, shape.classed(CLASS.SELECTED, true), d, i);\n        }\n      } else if (isDefined(resetOther) && resetOther) {\n        if (isSelected) {\n          toggle(false, shape.classed(CLASS.SELECTED, false), d, i);\n        }\n      }\n    });\n  };\n\n  Chart.prototype.unselect = function (ids, indices) {\n    var $$ = this.internal,\n        d3 = $$.d3,\n        config = $$.config;\n\n    if (!config.data_selection_enabled) {\n      return;\n    }\n\n    $$.main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape).each(function (d, i) {\n      var shape = d3.select(this),\n          id = d.data ? d.data.id : d.id,\n          toggle = $$.getToggle(this, d).bind($$),\n          isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0,\n          isTargetIndex = !indices || indices.indexOf(i) >= 0,\n          isSelected = shape.classed(CLASS.SELECTED); // line/area selection not supported yet\n\n      if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) {\n        return;\n      }\n\n      if (isTargetId && isTargetIndex) {\n        if (config.data_selection_isselectable(d)) {\n          if (isSelected) {\n            toggle(false, shape.classed(CLASS.SELECTED, false), d, i);\n          }\n        }\n      }\n    });\n  };\n\n  Chart.prototype.show = function (targetIds, options) {\n    var $$ = this.internal,\n        targets;\n    targetIds = $$.mapToTargetIds(targetIds);\n    options = options || {};\n    $$.removeHiddenTargetIds(targetIds);\n    targets = $$.svg.selectAll($$.selectorTargets(targetIds));\n    targets.transition().style('display', 'initial', 'important').style('opacity', 1, 'important').call($$.endall, function () {\n      targets.style('opacity', null).style('opacity', 1);\n    });\n\n    if (options.withLegend) {\n      $$.showLegend(targetIds);\n    }\n\n    $$.redraw({\n      withUpdateOrgXDomain: true,\n      withUpdateXDomain: true,\n      withLegend: true\n    });\n  };\n\n  Chart.prototype.hide = function (targetIds, options) {\n    var $$ = this.internal,\n        targets;\n    targetIds = $$.mapToTargetIds(targetIds);\n    options = options || {};\n    $$.addHiddenTargetIds(targetIds);\n    targets = $$.svg.selectAll($$.selectorTargets(targetIds));\n    targets.transition().style('opacity', 0, 'important').call($$.endall, function () {\n      targets.style('opacity', null).style('opacity', 0);\n      targets.style('display', 'none');\n    });\n\n    if (options.withLegend) {\n      $$.hideLegend(targetIds);\n    }\n\n    $$.redraw({\n      withUpdateOrgXDomain: true,\n      withUpdateXDomain: true,\n      withLegend: true\n    });\n  };\n\n  Chart.prototype.toggle = function (targetIds, options) {\n    var that = this,\n        $$ = this.internal;\n    $$.mapToTargetIds(targetIds).forEach(function (targetId) {\n      $$.isTargetToShow(targetId) ? that.hide(targetId, options) : that.show(targetId, options);\n    });\n  };\n\n  Chart.prototype.tooltip = function () {};\n\n  Chart.prototype.tooltip.show = function (args) {\n    var $$ = this.internal,\n        targets,\n        data,\n        mouse = {}; // determine mouse position on the chart\n\n    if (args.mouse) {\n      mouse = args.mouse;\n    } else {\n      // determine focus data\n      if (args.data) {\n        data = args.data;\n      } else if (typeof args.x !== 'undefined') {\n        if (args.id) {\n          targets = $$.data.targets.filter(function (t) {\n            return t.id === args.id;\n          });\n        } else {\n          targets = $$.data.targets;\n        }\n\n        data = $$.filterByX(targets, args.x).slice(0, 1)[0];\n      }\n\n      mouse = data ? $$.getMousePosition(data) : null;\n    } // emulate mouse events to show\n\n\n    $$.dispatchEvent('mousemove', mouse);\n    $$.config.tooltip_onshow.call($$, data);\n  };\n\n  Chart.prototype.tooltip.hide = function () {\n    // TODO: get target data by checking the state of focus\n    this.internal.dispatchEvent('mouseout', 0);\n    this.internal.config.tooltip_onhide.call(this);\n  };\n\n  Chart.prototype.transform = function (type, targetIds) {\n    var $$ = this.internal,\n        options = ['pie', 'donut'].indexOf(type) >= 0 ? {\n      withTransform: true\n    } : null;\n    $$.transformTo(targetIds, type, options);\n  };\n\n  ChartInternal.prototype.transformTo = function (targetIds, type, optionsForRedraw) {\n    var $$ = this,\n        withTransitionForAxis = !$$.hasArcType(),\n        options = optionsForRedraw || {\n      withTransitionForAxis: withTransitionForAxis\n    };\n    options.withTransitionForTransform = false;\n    $$.transiting = false;\n    $$.setTargetType(targetIds, type);\n    $$.updateTargets($$.data.targets); // this is needed when transforming to arc\n\n    $$.updateAndRedraw(options);\n  };\n\n  Chart.prototype.x = function (x) {\n    var $$ = this.internal;\n\n    if (arguments.length) {\n      $$.updateTargetX($$.data.targets, x);\n      $$.redraw({\n        withUpdateOrgXDomain: true,\n        withUpdateXDomain: true\n      });\n    }\n\n    return $$.data.xs;\n  };\n\n  Chart.prototype.xs = function (xs) {\n    var $$ = this.internal;\n\n    if (arguments.length) {\n      $$.updateTargetXs($$.data.targets, xs);\n      $$.redraw({\n        withUpdateOrgXDomain: true,\n        withUpdateXDomain: true\n      });\n    }\n\n    return $$.data.xs;\n  };\n\n  Chart.prototype.zoom = function (domain) {\n    var $$ = this.internal;\n\n    if (domain) {\n      if ($$.isTimeSeries()) {\n        domain = domain.map(function (x) {\n          return $$.parseDate(x);\n        });\n      }\n\n      if ($$.config.subchart_show) {\n        $$.brush.selectionAsValue(domain, true);\n      } else {\n        $$.updateXDomain(null, true, false, false, domain);\n        $$.redraw({\n          withY: $$.config.zoom_rescale,\n          withSubchart: false\n        });\n      }\n\n      $$.config.zoom_onzoom.call(this, $$.x.orgDomain());\n      return domain;\n    } else {\n      return $$.x.domain();\n    }\n  };\n\n  Chart.prototype.zoom.enable = function (enabled) {\n    var $$ = this.internal;\n    $$.config.zoom_enabled = enabled;\n    $$.updateAndRedraw();\n  };\n\n  Chart.prototype.unzoom = function () {\n    var $$ = this.internal;\n\n    if ($$.config.subchart_show) {\n      $$.brush.clear();\n    } else {\n      $$.updateXDomain(null, true, false, false, $$.subX.domain());\n      $$.redraw({\n        withY: $$.config.zoom_rescale,\n        withSubchart: false\n      });\n    }\n  };\n\n  Chart.prototype.zoom.max = function (max) {\n    var $$ = this.internal,\n        config = $$.config,\n        d3 = $$.d3;\n\n    if (max === 0 || max) {\n      config.zoom_x_max = d3.max([$$.orgXDomain[1], max]);\n    } else {\n      return config.zoom_x_max;\n    }\n  };\n\n  Chart.prototype.zoom.min = function (min) {\n    var $$ = this.internal,\n        config = $$.config,\n        d3 = $$.d3;\n\n    if (min === 0 || min) {\n      config.zoom_x_min = d3.min([$$.orgXDomain[0], min]);\n    } else {\n      return config.zoom_x_min;\n    }\n  };\n\n  Chart.prototype.zoom.range = function (range) {\n    if (arguments.length) {\n      if (isDefined(range.max)) {\n        this.domain.max(range.max);\n      }\n\n      if (isDefined(range.min)) {\n        this.domain.min(range.min);\n      }\n    } else {\n      return {\n        max: this.domain.max(),\n        min: this.domain.min()\n      };\n    }\n  };\n\n  ChartInternal.prototype.initPie = function () {\n    var $$ = this,\n        d3 = $$.d3;\n    $$.pie = d3.pie().value(function (d) {\n      return d.values.reduce(function (a, b) {\n        return a + b.value;\n      }, 0);\n    });\n    var orderFct = $$.getOrderFunction(); // we need to reverse the returned order if asc or desc to have the slice in expected order.\n\n    if (orderFct && ($$.isOrderAsc() || $$.isOrderDesc())) {\n      var defaultSort = orderFct;\n\n      orderFct = function orderFct(t1, t2) {\n        return defaultSort(t1, t2) * -1;\n      };\n    }\n\n    $$.pie.sort(orderFct || null);\n  };\n\n  ChartInternal.prototype.updateRadius = function () {\n    var $$ = this,\n        config = $$.config,\n        w = config.gauge_width || config.donut_width,\n        gaugeArcWidth = $$.filterTargetsToShow($$.data.targets).length * $$.config.gauge_arcs_minWidth;\n    $$.radiusExpanded = Math.min($$.arcWidth, $$.arcHeight) / 2 * ($$.hasType('gauge') ? 0.85 : 1);\n    $$.radius = $$.radiusExpanded * 0.95;\n    $$.innerRadiusRatio = w ? ($$.radius - w) / $$.radius : 0.6;\n    $$.innerRadius = $$.hasType('donut') || $$.hasType('gauge') ? $$.radius * $$.innerRadiusRatio : 0;\n    $$.gaugeArcWidth = w ? w : gaugeArcWidth <= $$.radius - $$.innerRadius ? $$.radius - $$.innerRadius : gaugeArcWidth <= $$.radius ? gaugeArcWidth : $$.radius;\n  };\n\n  ChartInternal.prototype.updateArc = function () {\n    var $$ = this;\n    $$.svgArc = $$.getSvgArc();\n    $$.svgArcExpanded = $$.getSvgArcExpanded();\n    $$.svgArcExpandedSub = $$.getSvgArcExpanded(0.98);\n  };\n\n  ChartInternal.prototype.updateAngle = function (d) {\n    var $$ = this,\n        config = $$.config,\n        found = false,\n        index = 0,\n        gMin,\n        gMax,\n        gTic,\n        gValue;\n\n    if (!config) {\n      return null;\n    }\n\n    $$.pie($$.filterTargetsToShow($$.data.targets)).forEach(function (t) {\n      if (!found && t.data.id === d.data.id) {\n        found = true;\n        d = t;\n        d.index = index;\n      }\n\n      index++;\n    });\n\n    if (isNaN(d.startAngle)) {\n      d.startAngle = 0;\n    }\n\n    if (isNaN(d.endAngle)) {\n      d.endAngle = d.startAngle;\n    }\n\n    if ($$.isGaugeType(d.data)) {\n      gMin = config.gauge_min;\n      gMax = config.gauge_max;\n      gTic = Math.PI * (config.gauge_fullCircle ? 2 : 1) / (gMax - gMin);\n      gValue = d.value < gMin ? 0 : d.value < gMax ? d.value - gMin : gMax - gMin;\n      d.startAngle = config.gauge_startingAngle;\n      d.endAngle = d.startAngle + gTic * gValue;\n    }\n\n    return found ? d : null;\n  };\n\n  ChartInternal.prototype.getSvgArc = function () {\n    var $$ = this,\n        hasGaugeType = $$.hasType('gauge'),\n        singleArcWidth = $$.gaugeArcWidth / $$.filterTargetsToShow($$.data.targets).length,\n        arc = $$.d3.arc().outerRadius(function (d) {\n      return hasGaugeType ? $$.radius - singleArcWidth * d.index : $$.radius;\n    }).innerRadius(function (d) {\n      return hasGaugeType ? $$.radius - singleArcWidth * (d.index + 1) : $$.innerRadius;\n    }),\n        newArc = function newArc(d, withoutUpdate) {\n      var updated;\n\n      if (withoutUpdate) {\n        return arc(d);\n      } // for interpolate\n\n\n      updated = $$.updateAngle(d);\n      return updated ? arc(updated) : \"M 0 0\";\n    }; // TODO: extends all function\n\n\n    newArc.centroid = arc.centroid;\n    return newArc;\n  };\n\n  ChartInternal.prototype.getSvgArcExpanded = function (rate) {\n    rate = rate || 1;\n    var $$ = this,\n        hasGaugeType = $$.hasType('gauge'),\n        singleArcWidth = $$.gaugeArcWidth / $$.filterTargetsToShow($$.data.targets).length,\n        expandWidth = Math.min($$.radiusExpanded * rate - $$.radius, singleArcWidth * 0.8 - (1 - rate) * 100),\n        arc = $$.d3.arc().outerRadius(function (d) {\n      return hasGaugeType ? $$.radius - singleArcWidth * d.index + expandWidth : $$.radiusExpanded * rate;\n    }).innerRadius(function (d) {\n      return hasGaugeType ? $$.radius - singleArcWidth * (d.index + 1) : $$.innerRadius;\n    });\n    return function (d) {\n      var updated = $$.updateAngle(d);\n      return updated ? arc(updated) : \"M 0 0\";\n    };\n  };\n\n  ChartInternal.prototype.getArc = function (d, withoutUpdate, force) {\n    return force || this.isArcType(d.data) ? this.svgArc(d, withoutUpdate) : \"M 0 0\";\n  };\n\n  ChartInternal.prototype.transformForArcLabel = function (d) {\n    var $$ = this,\n        config = $$.config,\n        updated = $$.updateAngle(d),\n        c,\n        x,\n        y,\n        h,\n        ratio,\n        translate = \"\",\n        hasGauge = $$.hasType('gauge');\n\n    if (updated && !hasGauge) {\n      c = this.svgArc.centroid(updated);\n      x = isNaN(c[0]) ? 0 : c[0];\n      y = isNaN(c[1]) ? 0 : c[1];\n      h = Math.sqrt(x * x + y * y);\n\n      if ($$.hasType('donut') && config.donut_label_ratio) {\n        ratio = isFunction(config.donut_label_ratio) ? config.donut_label_ratio(d, $$.radius, h) : config.donut_label_ratio;\n      } else if ($$.hasType('pie') && config.pie_label_ratio) {\n        ratio = isFunction(config.pie_label_ratio) ? config.pie_label_ratio(d, $$.radius, h) : config.pie_label_ratio;\n      } else {\n        ratio = $$.radius && h ? (36 / $$.radius > 0.375 ? 1.175 - 36 / $$.radius : 0.8) * $$.radius / h : 0;\n      }\n\n      translate = \"translate(\" + x * ratio + ',' + y * ratio + \")\";\n    } else if (updated && hasGauge && $$.filterTargetsToShow($$.data.targets).length > 1) {\n      var y1 = Math.sin(updated.endAngle - Math.PI / 2);\n      x = Math.cos(updated.endAngle - Math.PI / 2) * ($$.radiusExpanded + 25);\n      y = y1 * ($$.radiusExpanded + 15 - Math.abs(y1 * 10)) + 3;\n      translate = \"translate(\" + x + ',' + y + \")\";\n    }\n\n    return translate;\n  };\n\n  ChartInternal.prototype.getArcRatio = function (d) {\n    var $$ = this,\n        config = $$.config,\n        whole = Math.PI * ($$.hasType('gauge') && !config.gauge_fullCircle ? 1 : 2);\n    return d ? (d.endAngle - d.startAngle) / whole : null;\n  };\n\n  ChartInternal.prototype.convertToArcData = function (d) {\n    return this.addName({\n      id: d.data.id,\n      value: d.value,\n      ratio: this.getArcRatio(d),\n      index: d.index\n    });\n  };\n\n  ChartInternal.prototype.textForArcLabel = function (d) {\n    var $$ = this,\n        updated,\n        value,\n        ratio,\n        id,\n        format;\n\n    if (!$$.shouldShowArcLabel()) {\n      return \"\";\n    }\n\n    updated = $$.updateAngle(d);\n    value = updated ? updated.value : null;\n    ratio = $$.getArcRatio(updated);\n    id = d.data.id;\n\n    if (!$$.hasType('gauge') && !$$.meetsArcLabelThreshold(ratio)) {\n      return \"\";\n    }\n\n    format = $$.getArcLabelFormat();\n    return format ? format(value, ratio, id) : $$.defaultArcValueFormat(value, ratio);\n  };\n\n  ChartInternal.prototype.textForGaugeMinMax = function (value, isMax) {\n    var $$ = this,\n        format = $$.getGaugeLabelExtents();\n    return format ? format(value, isMax) : value;\n  };\n\n  ChartInternal.prototype.expandArc = function (targetIds) {\n    var $$ = this,\n        interval; // MEMO: avoid to cancel transition\n\n    if ($$.transiting) {\n      interval = window.setInterval(function () {\n        if (!$$.transiting) {\n          window.clearInterval(interval);\n\n          if ($$.legend.selectAll('.c3-legend-item-focused').size() > 0) {\n            $$.expandArc(targetIds);\n          }\n        }\n      }, 10);\n      return;\n    }\n\n    targetIds = $$.mapToTargetIds(targetIds);\n    $$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)).each(function (d) {\n      if (!$$.shouldExpand(d.data.id)) {\n        return;\n      }\n\n      $$.d3.select(this).selectAll('path').transition().duration($$.expandDuration(d.data.id)).attr(\"d\", $$.svgArcExpanded).transition().duration($$.expandDuration(d.data.id) * 2).attr(\"d\", $$.svgArcExpandedSub).each(function (d) {\n        if ($$.isDonutType(d.data)) ;\n      });\n    });\n  };\n\n  ChartInternal.prototype.unexpandArc = function (targetIds) {\n    var $$ = this;\n\n    if ($$.transiting) {\n      return;\n    }\n\n    targetIds = $$.mapToTargetIds(targetIds);\n    $$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)).selectAll('path').transition().duration(function (d) {\n      return $$.expandDuration(d.data.id);\n    }).attr(\"d\", $$.svgArc);\n    $$.svg.selectAll('.' + CLASS.arc);\n  };\n\n  ChartInternal.prototype.expandDuration = function (id) {\n    var $$ = this,\n        config = $$.config;\n\n    if ($$.isDonutType(id)) {\n      return config.donut_expand_duration;\n    } else if ($$.isGaugeType(id)) {\n      return config.gauge_expand_duration;\n    } else if ($$.isPieType(id)) {\n      return config.pie_expand_duration;\n    } else {\n      return 50;\n    }\n  };\n\n  ChartInternal.prototype.shouldExpand = function (id) {\n    var $$ = this,\n        config = $$.config;\n    return $$.isDonutType(id) && config.donut_expand || $$.isGaugeType(id) && config.gauge_expand || $$.isPieType(id) && config.pie_expand;\n  };\n\n  ChartInternal.prototype.shouldShowArcLabel = function () {\n    var $$ = this,\n        config = $$.config,\n        shouldShow = true;\n\n    if ($$.hasType('donut')) {\n      shouldShow = config.donut_label_show;\n    } else if ($$.hasType('pie')) {\n      shouldShow = config.pie_label_show;\n    } // when gauge, always true\n\n\n    return shouldShow;\n  };\n\n  ChartInternal.prototype.meetsArcLabelThreshold = function (ratio) {\n    var $$ = this,\n        config = $$.config,\n        threshold = $$.hasType('donut') ? config.donut_label_threshold : config.pie_label_threshold;\n    return ratio >= threshold;\n  };\n\n  ChartInternal.prototype.getArcLabelFormat = function () {\n    var $$ = this,\n        config = $$.config,\n        format = config.pie_label_format;\n\n    if ($$.hasType('gauge')) {\n      format = config.gauge_label_format;\n    } else if ($$.hasType('donut')) {\n      format = config.donut_label_format;\n    }\n\n    return format;\n  };\n\n  ChartInternal.prototype.getGaugeLabelExtents = function () {\n    var $$ = this,\n        config = $$.config;\n    return config.gauge_label_extents;\n  };\n\n  ChartInternal.prototype.getArcTitle = function () {\n    var $$ = this;\n    return $$.hasType('donut') ? $$.config.donut_title : \"\";\n  };\n\n  ChartInternal.prototype.updateTargetsForArc = function (targets) {\n    var $$ = this,\n        main = $$.main,\n        mainPies,\n        mainPieEnter,\n        classChartArc = $$.classChartArc.bind($$),\n        classArcs = $$.classArcs.bind($$),\n        classFocus = $$.classFocus.bind($$);\n    mainPies = main.select('.' + CLASS.chartArcs).selectAll('.' + CLASS.chartArc).data($$.pie(targets)).attr(\"class\", function (d) {\n      return classChartArc(d) + classFocus(d.data);\n    });\n    mainPieEnter = mainPies.enter().append(\"g\").attr(\"class\", classChartArc);\n    mainPieEnter.append('g').attr('class', classArcs);\n    mainPieEnter.append(\"text\").attr(\"dy\", $$.hasType('gauge') ? \"-.1em\" : \".35em\").style(\"opacity\", 0).style(\"text-anchor\", \"middle\").style(\"pointer-events\", \"none\"); // MEMO: can not keep same color..., but not bad to update color in redraw\n    //mainPieUpdate.exit().remove();\n  };\n\n  ChartInternal.prototype.initArc = function () {\n    var $$ = this;\n    $$.arcs = $$.main.select('.' + CLASS.chart).append(\"g\").attr(\"class\", CLASS.chartArcs).attr(\"transform\", $$.getTranslate('arc'));\n    $$.arcs.append('text').attr('class', CLASS.chartArcsTitle).style(\"text-anchor\", \"middle\").text($$.getArcTitle());\n  };\n\n  ChartInternal.prototype.redrawArc = function (duration, durationForExit, withTransform) {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config,\n        main = $$.main,\n        arcs,\n        mainArc,\n        arcLabelLines,\n        mainArcLabelLine,\n        hasGaugeType = $$.hasType('gauge');\n    arcs = main.selectAll('.' + CLASS.arcs).selectAll('.' + CLASS.arc).data($$.arcData.bind($$));\n    mainArc = arcs.enter().append('path').attr(\"class\", $$.classArc.bind($$)).style(\"fill\", function (d) {\n      return $$.color(d.data);\n    }).style(\"cursor\", function (d) {\n      return config.interaction_enabled && config.data_selection_isselectable(d) ? \"pointer\" : null;\n    }).each(function (d) {\n      if ($$.isGaugeType(d.data)) {\n        d.startAngle = d.endAngle = config.gauge_startingAngle;\n      }\n\n      this._current = d;\n    }).merge(arcs);\n\n    if (hasGaugeType) {\n      arcLabelLines = main.selectAll('.' + CLASS.arcs).selectAll('.' + CLASS.arcLabelLine).data($$.arcData.bind($$));\n      mainArcLabelLine = arcLabelLines.enter().append('rect').attr(\"class\", function (d) {\n        return CLASS.arcLabelLine + ' ' + CLASS.target + ' ' + CLASS.target + '-' + d.data.id;\n      }).merge(arcLabelLines);\n\n      if ($$.filterTargetsToShow($$.data.targets).length === 1) {\n        mainArcLabelLine.style(\"display\", \"none\");\n      } else {\n        mainArcLabelLine.style(\"fill\", function (d) {\n          return $$.levelColor ? $$.levelColor(d.data.values[0].value) : $$.color(d.data);\n        }).style(\"display\", config.gauge_labelLine_show ? \"\" : \"none\").each(function (d) {\n          var lineLength = 0,\n              lineThickness = 2,\n              x = 0,\n              y = 0,\n              transform = \"\";\n\n          if ($$.hiddenTargetIds.indexOf(d.data.id) < 0) {\n            var updated = $$.updateAngle(d),\n                innerLineLength = $$.gaugeArcWidth / $$.filterTargetsToShow($$.data.targets).length * (updated.index + 1),\n                lineAngle = updated.endAngle - Math.PI / 2,\n                arcInnerRadius = $$.radius - innerLineLength,\n                linePositioningAngle = lineAngle - (arcInnerRadius === 0 ? 0 : 1 / arcInnerRadius);\n            lineLength = $$.radiusExpanded - $$.radius + innerLineLength;\n            x = Math.cos(linePositioningAngle) * arcInnerRadius;\n            y = Math.sin(linePositioningAngle) * arcInnerRadius;\n            transform = \"rotate(\" + lineAngle * 180 / Math.PI + \", \" + x + \", \" + y + \")\";\n          }\n\n          d3.select(this).attr('x', x).attr('y', y).attr('width', lineLength).attr('height', lineThickness).attr('transform', transform).style(\"stroke-dasharray\", \"0, \" + (lineLength + lineThickness) + \", 0\");\n        });\n      }\n    }\n\n    mainArc.attr(\"transform\", function (d) {\n      return !$$.isGaugeType(d.data) && withTransform ? \"scale(0)\" : \"\";\n    }).on('mouseover', config.interaction_enabled ? function (d) {\n      var updated, arcData;\n\n      if ($$.transiting) {\n        // skip while transiting\n        return;\n      }\n\n      updated = $$.updateAngle(d);\n\n      if (updated) {\n        arcData = $$.convertToArcData(updated); // transitions\n\n        $$.expandArc(updated.data.id);\n        $$.api.focus(updated.data.id);\n        $$.toggleFocusLegend(updated.data.id, true);\n        $$.config.data_onmouseover(arcData, this);\n      }\n    } : null).on('mousemove', config.interaction_enabled ? function (d) {\n      var updated = $$.updateAngle(d),\n          arcData,\n          selectedData;\n\n      if (updated) {\n        arcData = $$.convertToArcData(updated), selectedData = [arcData];\n        $$.showTooltip(selectedData, this);\n      }\n    } : null).on('mouseout', config.interaction_enabled ? function (d) {\n      var updated, arcData;\n\n      if ($$.transiting) {\n        // skip while transiting\n        return;\n      }\n\n      updated = $$.updateAngle(d);\n\n      if (updated) {\n        arcData = $$.convertToArcData(updated); // transitions\n\n        $$.unexpandArc(updated.data.id);\n        $$.api.revert();\n        $$.revertLegend();\n        $$.hideTooltip();\n        $$.config.data_onmouseout(arcData, this);\n      }\n    } : null).on('click', config.interaction_enabled ? function (d, i) {\n      var updated = $$.updateAngle(d),\n          arcData;\n\n      if (updated) {\n        arcData = $$.convertToArcData(updated);\n\n        if ($$.toggleShape) {\n          $$.toggleShape(this, arcData, i);\n        }\n\n        $$.config.data_onclick.call($$.api, arcData, this);\n      }\n    } : null).each(function () {\n      $$.transiting = true;\n    }).transition().duration(duration).attrTween(\"d\", function (d) {\n      var updated = $$.updateAngle(d),\n          interpolate;\n\n      if (!updated) {\n        return function () {\n          return \"M 0 0\";\n        };\n      } //                if (this._current === d) {\n      //                    this._current = {\n      //                        startAngle: Math.PI*2,\n      //                        endAngle: Math.PI*2,\n      //                    };\n      //                }\n\n\n      if (isNaN(this._current.startAngle)) {\n        this._current.startAngle = 0;\n      }\n\n      if (isNaN(this._current.endAngle)) {\n        this._current.endAngle = this._current.startAngle;\n      }\n\n      interpolate = d3.interpolate(this._current, updated);\n      this._current = interpolate(0);\n      return function (t) {\n        var interpolated = interpolate(t);\n        interpolated.data = d.data; // data.id will be updated by interporator\n\n        return $$.getArc(interpolated, true);\n      };\n    }).attr(\"transform\", withTransform ? \"scale(1)\" : \"\").style(\"fill\", function (d) {\n      return $$.levelColor ? $$.levelColor(d.data.values[0].value) : $$.color(d.data.id);\n    }) // Where gauge reading color would receive customization.\n    .call($$.endall, function () {\n      $$.transiting = false;\n    });\n    arcs.exit().transition().duration(durationForExit).style('opacity', 0).remove();\n    main.selectAll('.' + CLASS.chartArc).select('text').style(\"opacity\", 0).attr('class', function (d) {\n      return $$.isGaugeType(d.data) ? CLASS.gaugeValue : '';\n    }).text($$.textForArcLabel.bind($$)).attr(\"transform\", $$.transformForArcLabel.bind($$)).style('font-size', function (d) {\n      return $$.isGaugeType(d.data) && $$.filterTargetsToShow($$.data.targets).length === 1 ? Math.round($$.radius / 5) + 'px' : '';\n    }).transition().duration(duration).style(\"opacity\", function (d) {\n      return $$.isTargetToShow(d.data.id) && $$.isArcType(d.data) ? 1 : 0;\n    });\n    main.select('.' + CLASS.chartArcsTitle).style(\"opacity\", $$.hasType('donut') || hasGaugeType ? 1 : 0);\n\n    if (hasGaugeType) {\n      var index = 0;\n      var backgroundArc = $$.arcs.select('g.' + CLASS.chartArcsBackground).selectAll('path.' + CLASS.chartArcsBackground).data($$.data.targets);\n      backgroundArc.enter().append(\"path\").attr(\"class\", function (d, i) {\n        return CLASS.chartArcsBackground + ' ' + CLASS.chartArcsBackground + '-' + i;\n      }).merge(backgroundArc).attr(\"d\", function (d1) {\n        if ($$.hiddenTargetIds.indexOf(d1.id) >= 0) {\n          return \"M 0 0\";\n        }\n\n        var d = {\n          data: [{\n            value: config.gauge_max\n          }],\n          startAngle: config.gauge_startingAngle,\n          endAngle: -1 * config.gauge_startingAngle * (config.gauge_fullCircle ? Math.PI : 1),\n          index: index++\n        };\n        return $$.getArc(d, true, true);\n      });\n      backgroundArc.exit().remove();\n      $$.arcs.select('.' + CLASS.chartArcsGaugeUnit).attr(\"dy\", \".75em\").text(config.gauge_label_show ? config.gauge_units : '');\n      $$.arcs.select('.' + CLASS.chartArcsGaugeMin).attr(\"dx\", -1 * ($$.innerRadius + ($$.radius - $$.innerRadius) / (config.gauge_fullCircle ? 1 : 2)) + \"px\").attr(\"dy\", \"1.2em\").text(config.gauge_label_show ? $$.textForGaugeMinMax(config.gauge_min, false) : '');\n      $$.arcs.select('.' + CLASS.chartArcsGaugeMax).attr(\"dx\", $$.innerRadius + ($$.radius - $$.innerRadius) / (config.gauge_fullCircle ? 1 : 2) + \"px\").attr(\"dy\", \"1.2em\").text(config.gauge_label_show ? $$.textForGaugeMinMax(config.gauge_max, true) : '');\n    }\n  };\n\n  ChartInternal.prototype.initGauge = function () {\n    var arcs = this.arcs;\n\n    if (this.hasType('gauge')) {\n      arcs.append('g').attr(\"class\", CLASS.chartArcsBackground);\n      arcs.append(\"text\").attr(\"class\", CLASS.chartArcsGaugeUnit).style(\"text-anchor\", \"middle\").style(\"pointer-events\", \"none\");\n      arcs.append(\"text\").attr(\"class\", CLASS.chartArcsGaugeMin).style(\"text-anchor\", \"middle\").style(\"pointer-events\", \"none\");\n      arcs.append(\"text\").attr(\"class\", CLASS.chartArcsGaugeMax).style(\"text-anchor\", \"middle\").style(\"pointer-events\", \"none\");\n    }\n  };\n\n  ChartInternal.prototype.getGaugeLabelHeight = function () {\n    return this.config.gauge_label_show ? 20 : 0;\n  };\n\n  ChartInternal.prototype.hasCaches = function (ids) {\n    for (var i = 0; i < ids.length; i++) {\n      if (!(ids[i] in this.cache)) {\n        return false;\n      }\n    }\n\n    return true;\n  };\n\n  ChartInternal.prototype.addCache = function (id, target) {\n    this.cache[id] = this.cloneTarget(target);\n  };\n\n  ChartInternal.prototype.getCaches = function (ids) {\n    var targets = [],\n        i;\n\n    for (i = 0; i < ids.length; i++) {\n      if (ids[i] in this.cache) {\n        targets.push(this.cloneTarget(this.cache[ids[i]]));\n      }\n    }\n\n    return targets;\n  };\n\n  ChartInternal.prototype.categoryName = function (i) {\n    var config = this.config;\n    return i < config.axis_x_categories.length ? config.axis_x_categories[i] : i;\n  };\n\n  ChartInternal.prototype.generateTargetClass = function (targetId) {\n    return targetId || targetId === 0 ? ('-' + targetId).replace(/\\s/g, '-') : '';\n  };\n\n  ChartInternal.prototype.generateClass = function (prefix, targetId) {\n    return \" \" + prefix + \" \" + prefix + this.generateTargetClass(targetId);\n  };\n\n  ChartInternal.prototype.classText = function (d) {\n    return this.generateClass(CLASS.text, d.index);\n  };\n\n  ChartInternal.prototype.classTexts = function (d) {\n    return this.generateClass(CLASS.texts, d.id);\n  };\n\n  ChartInternal.prototype.classShape = function (d) {\n    return this.generateClass(CLASS.shape, d.index);\n  };\n\n  ChartInternal.prototype.classShapes = function (d) {\n    return this.generateClass(CLASS.shapes, d.id);\n  };\n\n  ChartInternal.prototype.classLine = function (d) {\n    return this.classShape(d) + this.generateClass(CLASS.line, d.id);\n  };\n\n  ChartInternal.prototype.classLines = function (d) {\n    return this.classShapes(d) + this.generateClass(CLASS.lines, d.id);\n  };\n\n  ChartInternal.prototype.classCircle = function (d) {\n    return this.classShape(d) + this.generateClass(CLASS.circle, d.index);\n  };\n\n  ChartInternal.prototype.classCircles = function (d) {\n    return this.classShapes(d) + this.generateClass(CLASS.circles, d.id);\n  };\n\n  ChartInternal.prototype.classBar = function (d) {\n    return this.classShape(d) + this.generateClass(CLASS.bar, d.index);\n  };\n\n  ChartInternal.prototype.classBars = function (d) {\n    return this.classShapes(d) + this.generateClass(CLASS.bars, d.id);\n  };\n\n  ChartInternal.prototype.classArc = function (d) {\n    return this.classShape(d.data) + this.generateClass(CLASS.arc, d.data.id);\n  };\n\n  ChartInternal.prototype.classArcs = function (d) {\n    return this.classShapes(d.data) + this.generateClass(CLASS.arcs, d.data.id);\n  };\n\n  ChartInternal.prototype.classArea = function (d) {\n    return this.classShape(d) + this.generateClass(CLASS.area, d.id);\n  };\n\n  ChartInternal.prototype.classAreas = function (d) {\n    return this.classShapes(d) + this.generateClass(CLASS.areas, d.id);\n  };\n\n  ChartInternal.prototype.classRegion = function (d, i) {\n    return this.generateClass(CLASS.region, i) + ' ' + ('class' in d ? d['class'] : '');\n  };\n\n  ChartInternal.prototype.classEvent = function (d) {\n    return this.generateClass(CLASS.eventRect, d.index);\n  };\n\n  ChartInternal.prototype.classTarget = function (id) {\n    var $$ = this;\n    var additionalClassSuffix = $$.config.data_classes[id],\n        additionalClass = '';\n\n    if (additionalClassSuffix) {\n      additionalClass = ' ' + CLASS.target + '-' + additionalClassSuffix;\n    }\n\n    return $$.generateClass(CLASS.target, id) + additionalClass;\n  };\n\n  ChartInternal.prototype.classFocus = function (d) {\n    return this.classFocused(d) + this.classDefocused(d);\n  };\n\n  ChartInternal.prototype.classFocused = function (d) {\n    return ' ' + (this.focusedTargetIds.indexOf(d.id) >= 0 ? CLASS.focused : '');\n  };\n\n  ChartInternal.prototype.classDefocused = function (d) {\n    return ' ' + (this.defocusedTargetIds.indexOf(d.id) >= 0 ? CLASS.defocused : '');\n  };\n\n  ChartInternal.prototype.classChartText = function (d) {\n    return CLASS.chartText + this.classTarget(d.id);\n  };\n\n  ChartInternal.prototype.classChartLine = function (d) {\n    return CLASS.chartLine + this.classTarget(d.id);\n  };\n\n  ChartInternal.prototype.classChartBar = function (d) {\n    return CLASS.chartBar + this.classTarget(d.id);\n  };\n\n  ChartInternal.prototype.classChartArc = function (d) {\n    return CLASS.chartArc + this.classTarget(d.data.id);\n  };\n\n  ChartInternal.prototype.getTargetSelectorSuffix = function (targetId) {\n    return this.generateTargetClass(targetId).replace(/([?!@#$%^&*()_=+,.<>'\":;\\[\\]\\/|~`{}\\\\])/g, '\\\\$1');\n  };\n\n  ChartInternal.prototype.selectorTarget = function (id, prefix) {\n    return (prefix || '') + '.' + CLASS.target + this.getTargetSelectorSuffix(id);\n  };\n\n  ChartInternal.prototype.selectorTargets = function (ids, prefix) {\n    var $$ = this;\n    ids = ids || [];\n    return ids.length ? ids.map(function (id) {\n      return $$.selectorTarget(id, prefix);\n    }) : null;\n  };\n\n  ChartInternal.prototype.selectorLegend = function (id) {\n    return '.' + CLASS.legendItem + this.getTargetSelectorSuffix(id);\n  };\n\n  ChartInternal.prototype.selectorLegends = function (ids) {\n    var $$ = this;\n    return ids && ids.length ? ids.map(function (id) {\n      return $$.selectorLegend(id);\n    }) : null;\n  };\n\n  ChartInternal.prototype.getClipPath = function (id) {\n    var isIE9 = window.navigator.appVersion.toLowerCase().indexOf(\"msie 9.\") >= 0;\n    return \"url(\" + (isIE9 ? \"\" : document.URL.split('#')[0]) + \"#\" + id + \")\";\n  };\n\n  ChartInternal.prototype.appendClip = function (parent, id) {\n    return parent.append(\"clipPath\").attr(\"id\", id).append(\"rect\");\n  };\n\n  ChartInternal.prototype.getAxisClipX = function (forHorizontal) {\n    // axis line width + padding for left\n    var left = Math.max(30, this.margin.left);\n    return forHorizontal ? -(1 + left) : -(left - 1);\n  };\n\n  ChartInternal.prototype.getAxisClipY = function (forHorizontal) {\n    return forHorizontal ? -20 : -this.margin.top;\n  };\n\n  ChartInternal.prototype.getXAxisClipX = function () {\n    var $$ = this;\n    return $$.getAxisClipX(!$$.config.axis_rotated);\n  };\n\n  ChartInternal.prototype.getXAxisClipY = function () {\n    var $$ = this;\n    return $$.getAxisClipY(!$$.config.axis_rotated);\n  };\n\n  ChartInternal.prototype.getYAxisClipX = function () {\n    var $$ = this;\n    return $$.config.axis_y_inner ? -1 : $$.getAxisClipX($$.config.axis_rotated);\n  };\n\n  ChartInternal.prototype.getYAxisClipY = function () {\n    var $$ = this;\n    return $$.getAxisClipY($$.config.axis_rotated);\n  };\n\n  ChartInternal.prototype.getAxisClipWidth = function (forHorizontal) {\n    var $$ = this,\n        left = Math.max(30, $$.margin.left),\n        right = Math.max(30, $$.margin.right); // width + axis line width + padding for left/right\n\n    return forHorizontal ? $$.width + 2 + left + right : $$.margin.left + 20;\n  };\n\n  ChartInternal.prototype.getAxisClipHeight = function (forHorizontal) {\n    // less than 20 is not enough to show the axis label 'outer' without legend\n    return (forHorizontal ? this.margin.bottom : this.margin.top + this.height) + 20;\n  };\n\n  ChartInternal.prototype.getXAxisClipWidth = function () {\n    var $$ = this;\n    return $$.getAxisClipWidth(!$$.config.axis_rotated);\n  };\n\n  ChartInternal.prototype.getXAxisClipHeight = function () {\n    var $$ = this;\n    return $$.getAxisClipHeight(!$$.config.axis_rotated);\n  };\n\n  ChartInternal.prototype.getYAxisClipWidth = function () {\n    var $$ = this;\n    return $$.getAxisClipWidth($$.config.axis_rotated) + ($$.config.axis_y_inner ? 20 : 0);\n  };\n\n  ChartInternal.prototype.getYAxisClipHeight = function () {\n    var $$ = this;\n    return $$.getAxisClipHeight($$.config.axis_rotated);\n  };\n\n  ChartInternal.prototype.generateColor = function () {\n    var $$ = this,\n        config = $$.config,\n        d3 = $$.d3,\n        colors = config.data_colors,\n        pattern = notEmpty(config.color_pattern) ? config.color_pattern : d3.schemeCategory10,\n        callback = config.data_color,\n        ids = [];\n    return function (d) {\n      var id = d.id || d.data && d.data.id || d,\n          color; // if callback function is provided\n\n      if (colors[id] instanceof Function) {\n        color = colors[id](d);\n      } // if specified, choose that color\n      else if (colors[id]) {\n          color = colors[id];\n        } // if not specified, choose from pattern\n        else {\n            if (ids.indexOf(id) < 0) {\n              ids.push(id);\n            }\n\n            color = pattern[ids.indexOf(id) % pattern.length];\n            colors[id] = color;\n          }\n\n      return callback instanceof Function ? callback(color, d) : color;\n    };\n  };\n\n  ChartInternal.prototype.generateLevelColor = function () {\n    var $$ = this,\n        config = $$.config,\n        colors = config.color_pattern,\n        threshold = config.color_threshold,\n        asValue = threshold.unit === 'value',\n        values = threshold.values && threshold.values.length ? threshold.values : [],\n        max = threshold.max || 100;\n    return notEmpty(threshold) && notEmpty(colors) ? function (value) {\n      var i,\n          v,\n          color = colors[colors.length - 1];\n\n      for (i = 0; i < values.length; i++) {\n        v = asValue ? value : value * 100 / max;\n\n        if (v < values[i]) {\n          color = colors[i];\n          break;\n        }\n      }\n\n      return color;\n    } : null;\n  };\n\n  ChartInternal.prototype.getDefaultConfig = function () {\n    var config = {\n      bindto: '#chart',\n      svg_classname: undefined,\n      size_width: undefined,\n      size_height: undefined,\n      padding_left: undefined,\n      padding_right: undefined,\n      padding_top: undefined,\n      padding_bottom: undefined,\n      resize_auto: true,\n      zoom_enabled: false,\n      zoom_initialRange: undefined,\n      zoom_type: 'scroll',\n      zoom_disableDefaultBehavior: false,\n      zoom_privileged: false,\n      zoom_rescale: false,\n      zoom_onzoom: function zoom_onzoom() {},\n      zoom_onzoomstart: function zoom_onzoomstart() {},\n      zoom_onzoomend: function zoom_onzoomend() {},\n      zoom_x_min: undefined,\n      zoom_x_max: undefined,\n      interaction_brighten: true,\n      interaction_enabled: true,\n      onmouseover: function onmouseover() {},\n      onmouseout: function onmouseout() {},\n      onresize: function onresize() {},\n      onresized: function onresized() {},\n      oninit: function oninit() {},\n      onrendered: function onrendered() {},\n      transition_duration: 350,\n      data_x: undefined,\n      data_xs: {},\n      data_xFormat: '%Y-%m-%d',\n      data_xLocaltime: true,\n      data_xSort: true,\n      data_idConverter: function data_idConverter(id) {\n        return id;\n      },\n      data_names: {},\n      data_classes: {},\n      data_groups: [],\n      data_axes: {},\n      data_type: undefined,\n      data_types: {},\n      data_labels: {},\n      data_order: 'desc',\n      data_regions: {},\n      data_color: undefined,\n      data_colors: {},\n      data_hide: false,\n      data_filter: undefined,\n      data_selection_enabled: false,\n      data_selection_grouped: false,\n      data_selection_isselectable: function data_selection_isselectable() {\n        return true;\n      },\n      data_selection_multiple: true,\n      data_selection_draggable: false,\n      data_onclick: function data_onclick() {},\n      data_onmouseover: function data_onmouseover() {},\n      data_onmouseout: function data_onmouseout() {},\n      data_onselected: function data_onselected() {},\n      data_onunselected: function data_onunselected() {},\n      data_url: undefined,\n      data_headers: undefined,\n      data_json: undefined,\n      data_rows: undefined,\n      data_columns: undefined,\n      data_mimeType: undefined,\n      data_keys: undefined,\n      // configuration for no plot-able data supplied.\n      data_empty_label_text: \"\",\n      // subchart\n      subchart_show: false,\n      subchart_size_height: 60,\n      subchart_axis_x_show: true,\n      subchart_onbrush: function subchart_onbrush() {},\n      // color\n      color_pattern: [],\n      color_threshold: {},\n      // legend\n      legend_show: true,\n      legend_hide: false,\n      legend_position: 'bottom',\n      legend_inset_anchor: 'top-left',\n      legend_inset_x: 10,\n      legend_inset_y: 0,\n      legend_inset_step: undefined,\n      legend_item_onclick: undefined,\n      legend_item_onmouseover: undefined,\n      legend_item_onmouseout: undefined,\n      legend_equally: false,\n      legend_padding: 0,\n      legend_item_tile_width: 10,\n      legend_item_tile_height: 10,\n      // axis\n      axis_rotated: false,\n      axis_x_show: true,\n      axis_x_type: 'indexed',\n      axis_x_localtime: true,\n      axis_x_categories: [],\n      axis_x_tick_centered: false,\n      axis_x_tick_format: undefined,\n      axis_x_tick_culling: {},\n      axis_x_tick_culling_max: 10,\n      axis_x_tick_count: undefined,\n      axis_x_tick_fit: true,\n      axis_x_tick_values: null,\n      axis_x_tick_rotate: 0,\n      axis_x_tick_outer: true,\n      axis_x_tick_multiline: true,\n      axis_x_tick_multilineMax: 0,\n      axis_x_tick_width: null,\n      axis_x_max: undefined,\n      axis_x_min: undefined,\n      axis_x_padding: {},\n      axis_x_height: undefined,\n      axis_x_selection: undefined,\n      axis_x_label: {},\n      axis_x_inner: undefined,\n      axis_y_show: true,\n      axis_y_type: undefined,\n      axis_y_max: undefined,\n      axis_y_min: undefined,\n      axis_y_inverted: false,\n      axis_y_center: undefined,\n      axis_y_inner: undefined,\n      axis_y_label: {},\n      axis_y_tick_format: undefined,\n      axis_y_tick_outer: true,\n      axis_y_tick_values: null,\n      axis_y_tick_rotate: 0,\n      axis_y_tick_count: undefined,\n      axis_y_tick_time_type: undefined,\n      axis_y_tick_time_interval: undefined,\n      axis_y_padding: {},\n      axis_y_default: undefined,\n      axis_y2_show: false,\n      axis_y2_max: undefined,\n      axis_y2_min: undefined,\n      axis_y2_inverted: false,\n      axis_y2_center: undefined,\n      axis_y2_inner: undefined,\n      axis_y2_label: {},\n      axis_y2_tick_format: undefined,\n      axis_y2_tick_outer: true,\n      axis_y2_tick_values: null,\n      axis_y2_tick_count: undefined,\n      axis_y2_padding: {},\n      axis_y2_default: undefined,\n      // grid\n      grid_x_show: false,\n      grid_x_type: 'tick',\n      grid_x_lines: [],\n      grid_y_show: false,\n      // not used\n      // grid_y_type: 'tick',\n      grid_y_lines: [],\n      grid_y_ticks: 10,\n      grid_focus_show: true,\n      grid_lines_front: true,\n      // point - point of each data\n      point_show: true,\n      point_r: 2.5,\n      point_sensitivity: 10,\n      point_focus_expand_enabled: true,\n      point_focus_expand_r: undefined,\n      point_select_r: undefined,\n      // line\n      line_connectNull: false,\n      line_step_type: 'step',\n      // bar\n      bar_width: undefined,\n      bar_width_ratio: 0.6,\n      bar_width_max: undefined,\n      bar_zerobased: true,\n      bar_space: 0,\n      // area\n      area_zerobased: true,\n      area_above: false,\n      // pie\n      pie_label_show: true,\n      pie_label_format: undefined,\n      pie_label_threshold: 0.05,\n      pie_label_ratio: undefined,\n      pie_expand: {},\n      pie_expand_duration: 50,\n      // gauge\n      gauge_fullCircle: false,\n      gauge_label_show: true,\n      gauge_labelLine_show: true,\n      gauge_label_format: undefined,\n      gauge_min: 0,\n      gauge_max: 100,\n      gauge_startingAngle: -1 * Math.PI / 2,\n      gauge_label_extents: undefined,\n      gauge_units: undefined,\n      gauge_width: undefined,\n      gauge_arcs_minWidth: 5,\n      gauge_expand: {},\n      gauge_expand_duration: 50,\n      // donut\n      donut_label_show: true,\n      donut_label_format: undefined,\n      donut_label_threshold: 0.05,\n      donut_label_ratio: undefined,\n      donut_width: undefined,\n      donut_title: \"\",\n      donut_expand: {},\n      donut_expand_duration: 50,\n      // spline\n      spline_interpolation_type: 'cardinal',\n      // region - region to change style\n      regions: [],\n      // tooltip - show when mouseover on each data\n      tooltip_show: true,\n      tooltip_grouped: true,\n      tooltip_order: undefined,\n      tooltip_format_title: undefined,\n      tooltip_format_name: undefined,\n      tooltip_format_value: undefined,\n      tooltip_position: undefined,\n      tooltip_contents: function tooltip_contents(d, defaultTitleFormat, defaultValueFormat, color) {\n        return this.getTooltipContent ? this.getTooltipContent(d, defaultTitleFormat, defaultValueFormat, color) : '';\n      },\n      tooltip_init_show: false,\n      tooltip_init_x: 0,\n      tooltip_init_position: {\n        top: '0px',\n        left: '50px'\n      },\n      tooltip_onshow: function tooltip_onshow() {},\n      tooltip_onhide: function tooltip_onhide() {},\n      // title\n      title_text: undefined,\n      title_padding: {\n        top: 0,\n        right: 0,\n        bottom: 0,\n        left: 0\n      },\n      title_position: 'top-center'\n    };\n    Object.keys(this.additionalConfig).forEach(function (key) {\n      config[key] = this.additionalConfig[key];\n    }, this);\n    return config;\n  };\n\n  ChartInternal.prototype.additionalConfig = {};\n\n  ChartInternal.prototype.loadConfig = function (config) {\n    var this_config = this.config,\n        target,\n        keys,\n        read;\n\n    function find() {\n      var key = keys.shift(); //        console.log(\"key =>\", key, \", target =>\", target);\n\n      if (key && target && _typeof(target) === 'object' && key in target) {\n        target = target[key];\n        return find();\n      } else if (!key) {\n        return target;\n      } else {\n        return undefined;\n      }\n    }\n\n    Object.keys(this_config).forEach(function (key) {\n      target = config;\n      keys = key.split('_');\n      read = find(); //        console.log(\"CONFIG : \", key, read);\n\n      if (isDefined(read)) {\n        this_config[key] = read;\n      }\n    });\n  };\n\n  ChartInternal.prototype.convertUrlToData = function (url, mimeType, headers, keys, done) {\n    var $$ = this,\n        type = mimeType ? mimeType : 'csv',\n        f,\n        converter;\n\n    if (type === 'json') {\n      f = $$.d3.json;\n      converter = $$.convertJsonToData;\n    } else if (type === 'tsv') {\n      f = $$.d3.tsv;\n      converter = $$.convertXsvToData;\n    } else {\n      f = $$.d3.csv;\n      converter = $$.convertXsvToData;\n    }\n\n    f(url, headers).then(function (data) {\n      done.call($$, converter.call($$, data, keys));\n    }).catch(function (error) {\n      throw error;\n    });\n  };\n\n  ChartInternal.prototype.convertXsvToData = function (xsv) {\n    var keys = xsv.columns,\n        rows = xsv;\n\n    if (rows.length === 0) {\n      return {\n        keys: keys,\n        rows: [keys.reduce(function (row, key) {\n          return Object.assign(row, _defineProperty({}, key, null));\n        }, {})]\n      };\n    } else {\n      // [].concat() is to convert result into a plain array otherwise\n      // test is not happy because rows have properties.\n      return {\n        keys: keys,\n        rows: [].concat(xsv)\n      };\n    }\n  };\n\n  ChartInternal.prototype.convertJsonToData = function (json, keys) {\n    var $$ = this,\n        new_rows = [],\n        targetKeys,\n        data;\n\n    if (keys) {\n      // when keys specified, json would be an array that includes objects\n      if (keys.x) {\n        targetKeys = keys.value.concat(keys.x);\n        $$.config.data_x = keys.x;\n      } else {\n        targetKeys = keys.value;\n      }\n\n      new_rows.push(targetKeys);\n      json.forEach(function (o) {\n        var new_row = [];\n        targetKeys.forEach(function (key) {\n          // convert undefined to null because undefined data will be removed in convertDataToTargets()\n          var v = $$.findValueInJson(o, key);\n\n          if (isUndefined(v)) {\n            v = null;\n          }\n\n          new_row.push(v);\n        });\n        new_rows.push(new_row);\n      });\n      data = $$.convertRowsToData(new_rows);\n    } else {\n      Object.keys(json).forEach(function (key) {\n        new_rows.push([key].concat(json[key]));\n      });\n      data = $$.convertColumnsToData(new_rows);\n    }\n\n    return data;\n  };\n\n  ChartInternal.prototype.findValueInJson = function (object, path) {\n    path = path.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties (replace [] with .)\n\n    path = path.replace(/^\\./, ''); // strip a leading dot\n\n    var pathArray = path.split('.');\n\n    for (var i = 0; i < pathArray.length; ++i) {\n      var k = pathArray[i];\n\n      if (k in object) {\n        object = object[k];\n      } else {\n        return;\n      }\n    }\n\n    return object;\n  };\n  /**\n   * Converts the rows to normalized data.\n   * @param {any[][]} rows The row data\n   * @return {Object}\n   */\n\n\n  ChartInternal.prototype.convertRowsToData = function (rows) {\n    var newRows = [];\n    var keys = rows[0];\n\n    for (var i = 1; i < rows.length; i++) {\n      var newRow = {};\n\n      for (var j = 0; j < rows[i].length; j++) {\n        if (isUndefined(rows[i][j])) {\n          throw new Error(\"Source data is missing a component at (\" + i + \",\" + j + \")!\");\n        }\n\n        newRow[keys[j]] = rows[i][j];\n      }\n\n      newRows.push(newRow);\n    }\n\n    return {\n      keys: keys,\n      rows: newRows\n    };\n  };\n  /**\n   * Converts the columns to normalized data.\n   * @param {any[][]} columns The column data\n   * @return {Object}\n   */\n\n\n  ChartInternal.prototype.convertColumnsToData = function (columns) {\n    var newRows = [];\n    var keys = [];\n\n    for (var i = 0; i < columns.length; i++) {\n      var key = columns[i][0];\n\n      for (var j = 1; j < columns[i].length; j++) {\n        if (isUndefined(newRows[j - 1])) {\n          newRows[j - 1] = {};\n        }\n\n        if (isUndefined(columns[i][j])) {\n          throw new Error(\"Source data is missing a component at (\" + i + \",\" + j + \")!\");\n        }\n\n        newRows[j - 1][key] = columns[i][j];\n      }\n\n      keys.push(key);\n    }\n\n    return {\n      keys: keys,\n      rows: newRows\n    };\n  };\n  /**\n   * Converts the data format into the target format.\n   * @param {!Object} data\n   * @param {!Array} data.keys Ordered list of target IDs.\n   * @param {!Array} data.rows Rows of data to convert.\n   * @param {boolean} appendXs True to append to $$.data.xs, False to replace.\n   * @return {!Array}\n   */\n\n\n  ChartInternal.prototype.convertDataToTargets = function (data, appendXs) {\n    var $$ = this,\n        config = $$.config,\n        targets,\n        ids,\n        xs,\n        keys; // handles format where keys are not orderly provided\n\n    if (isArray(data)) {\n      keys = Object.keys(data[0]);\n    } else {\n      keys = data.keys;\n      data = data.rows;\n    }\n\n    ids = keys.filter($$.isNotX, $$);\n    xs = keys.filter($$.isX, $$); // save x for update data by load when custom x and c3.x API\n\n    ids.forEach(function (id) {\n      var xKey = $$.getXKey(id);\n\n      if ($$.isCustomX() || $$.isTimeSeries()) {\n        // if included in input data\n        if (xs.indexOf(xKey) >= 0) {\n          $$.data.xs[id] = (appendXs && $$.data.xs[id] ? $$.data.xs[id] : []).concat(data.map(function (d) {\n            return d[xKey];\n          }).filter(isValue).map(function (rawX, i) {\n            return $$.generateTargetX(rawX, id, i);\n          }));\n        } // if not included in input data, find from preloaded data of other id's x\n        else if (config.data_x) {\n            $$.data.xs[id] = $$.getOtherTargetXs();\n          } // if not included in input data, find from preloaded data\n          else if (notEmpty(config.data_xs)) {\n              $$.data.xs[id] = $$.getXValuesOfXKey(xKey, $$.data.targets);\n            } // MEMO: if no x included, use same x of current will be used\n\n      } else {\n        $$.data.xs[id] = data.map(function (d, i) {\n          return i;\n        });\n      }\n    }); // check x is defined\n\n    ids.forEach(function (id) {\n      if (!$$.data.xs[id]) {\n        throw new Error('x is not defined for id = \"' + id + '\".');\n      }\n    }); // convert to target\n\n    targets = ids.map(function (id, index) {\n      var convertedId = config.data_idConverter(id);\n      return {\n        id: convertedId,\n        id_org: id,\n        values: data.map(function (d, i) {\n          var xKey = $$.getXKey(id),\n              rawX = d[xKey],\n              value = d[id] !== null && !isNaN(d[id]) ? +d[id] : null,\n              x; // use x as categories if custom x and categorized\n\n          if ($$.isCustomX() && $$.isCategorized() && !isUndefined(rawX)) {\n            if (index === 0 && i === 0) {\n              config.axis_x_categories = [];\n            }\n\n            x = config.axis_x_categories.indexOf(rawX);\n\n            if (x === -1) {\n              x = config.axis_x_categories.length;\n              config.axis_x_categories.push(rawX);\n            }\n          } else {\n            x = $$.generateTargetX(rawX, id, i);\n          } // mark as x = undefined if value is undefined and filter to remove after mapped\n\n\n          if (isUndefined(d[id]) || $$.data.xs[id].length <= i) {\n            x = undefined;\n          }\n\n          return {\n            x: x,\n            value: value,\n            id: convertedId\n          };\n        }).filter(function (v) {\n          return isDefined(v.x);\n        })\n      };\n    }); // finish targets\n\n    targets.forEach(function (t) {\n      var i; // sort values by its x\n\n      if (config.data_xSort) {\n        t.values = t.values.sort(function (v1, v2) {\n          var x1 = v1.x || v1.x === 0 ? v1.x : Infinity,\n              x2 = v2.x || v2.x === 0 ? v2.x : Infinity;\n          return x1 - x2;\n        });\n      } // indexing each value\n\n\n      i = 0;\n      t.values.forEach(function (v) {\n        v.index = i++;\n      }); // this needs to be sorted because its index and value.index is identical\n\n      $$.data.xs[t.id].sort(function (v1, v2) {\n        return v1 - v2;\n      });\n    }); // cache information about values\n\n    $$.hasNegativeValue = $$.hasNegativeValueInTargets(targets);\n    $$.hasPositiveValue = $$.hasPositiveValueInTargets(targets); // set target types\n\n    if (config.data_type) {\n      $$.setTargetType($$.mapToIds(targets).filter(function (id) {\n        return !(id in config.data_types);\n      }), config.data_type);\n    } // cache as original id keyed\n\n\n    targets.forEach(function (d) {\n      $$.addCache(d.id_org, d);\n    });\n    return targets;\n  };\n\n  ChartInternal.prototype.isX = function (key) {\n    var $$ = this,\n        config = $$.config;\n    return config.data_x && key === config.data_x || notEmpty(config.data_xs) && hasValue(config.data_xs, key);\n  };\n\n  ChartInternal.prototype.isNotX = function (key) {\n    return !this.isX(key);\n  };\n\n  ChartInternal.prototype.getXKey = function (id) {\n    var $$ = this,\n        config = $$.config;\n    return config.data_x ? config.data_x : notEmpty(config.data_xs) ? config.data_xs[id] : null;\n  };\n\n  ChartInternal.prototype.getXValuesOfXKey = function (key, targets) {\n    var $$ = this,\n        xValues,\n        ids = targets && notEmpty(targets) ? $$.mapToIds(targets) : [];\n    ids.forEach(function (id) {\n      if ($$.getXKey(id) === key) {\n        xValues = $$.data.xs[id];\n      }\n    });\n    return xValues;\n  };\n\n  ChartInternal.prototype.getXValue = function (id, i) {\n    var $$ = this;\n    return id in $$.data.xs && $$.data.xs[id] && isValue($$.data.xs[id][i]) ? $$.data.xs[id][i] : i;\n  };\n\n  ChartInternal.prototype.getOtherTargetXs = function () {\n    var $$ = this,\n        idsForX = Object.keys($$.data.xs);\n    return idsForX.length ? $$.data.xs[idsForX[0]] : null;\n  };\n\n  ChartInternal.prototype.getOtherTargetX = function (index) {\n    var xs = this.getOtherTargetXs();\n    return xs && index < xs.length ? xs[index] : null;\n  };\n\n  ChartInternal.prototype.addXs = function (xs) {\n    var $$ = this;\n    Object.keys(xs).forEach(function (id) {\n      $$.config.data_xs[id] = xs[id];\n    });\n  };\n\n  ChartInternal.prototype.addName = function (data) {\n    var $$ = this,\n        name;\n\n    if (data) {\n      name = $$.config.data_names[data.id];\n      data.name = name !== undefined ? name : data.id;\n    }\n\n    return data;\n  };\n\n  ChartInternal.prototype.getValueOnIndex = function (values, index) {\n    var valueOnIndex = values.filter(function (v) {\n      return v.index === index;\n    });\n    return valueOnIndex.length ? valueOnIndex[0] : null;\n  };\n\n  ChartInternal.prototype.updateTargetX = function (targets, x) {\n    var $$ = this;\n    targets.forEach(function (t) {\n      t.values.forEach(function (v, i) {\n        v.x = $$.generateTargetX(x[i], t.id, i);\n      });\n      $$.data.xs[t.id] = x;\n    });\n  };\n\n  ChartInternal.prototype.updateTargetXs = function (targets, xs) {\n    var $$ = this;\n    targets.forEach(function (t) {\n      if (xs[t.id]) {\n        $$.updateTargetX([t], xs[t.id]);\n      }\n    });\n  };\n\n  ChartInternal.prototype.generateTargetX = function (rawX, id, index) {\n    var $$ = this,\n        x;\n\n    if ($$.isTimeSeries()) {\n      x = rawX ? $$.parseDate(rawX) : $$.parseDate($$.getXValue(id, index));\n    } else if ($$.isCustomX() && !$$.isCategorized()) {\n      x = isValue(rawX) ? +rawX : $$.getXValue(id, index);\n    } else {\n      x = index;\n    }\n\n    return x;\n  };\n\n  ChartInternal.prototype.cloneTarget = function (target) {\n    return {\n      id: target.id,\n      id_org: target.id_org,\n      values: target.values.map(function (d) {\n        return {\n          x: d.x,\n          value: d.value,\n          id: d.id\n        };\n      })\n    };\n  };\n\n  ChartInternal.prototype.getMaxDataCount = function () {\n    var $$ = this;\n    return $$.d3.max($$.data.targets, function (t) {\n      return t.values.length;\n    });\n  };\n\n  ChartInternal.prototype.mapToIds = function (targets) {\n    return targets.map(function (d) {\n      return d.id;\n    });\n  };\n\n  ChartInternal.prototype.mapToTargetIds = function (ids) {\n    var $$ = this;\n    return ids ? [].concat(ids) : $$.mapToIds($$.data.targets);\n  };\n\n  ChartInternal.prototype.hasTarget = function (targets, id) {\n    var ids = this.mapToIds(targets),\n        i;\n\n    for (i = 0; i < ids.length; i++) {\n      if (ids[i] === id) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  ChartInternal.prototype.isTargetToShow = function (targetId) {\n    return this.hiddenTargetIds.indexOf(targetId) < 0;\n  };\n\n  ChartInternal.prototype.isLegendToShow = function (targetId) {\n    return this.hiddenLegendIds.indexOf(targetId) < 0;\n  };\n\n  ChartInternal.prototype.filterTargetsToShow = function (targets) {\n    var $$ = this;\n    return targets.filter(function (t) {\n      return $$.isTargetToShow(t.id);\n    });\n  };\n\n  ChartInternal.prototype.mapTargetsToUniqueXs = function (targets) {\n    var $$ = this;\n    var xs = $$.d3.set($$.d3.merge(targets.map(function (t) {\n      return t.values.map(function (v) {\n        return +v.x;\n      });\n    }))).values();\n    xs = $$.isTimeSeries() ? xs.map(function (x) {\n      return new Date(+x);\n    }) : xs.map(function (x) {\n      return +x;\n    });\n    return xs.sort(function (a, b) {\n      return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n    });\n  };\n\n  ChartInternal.prototype.addHiddenTargetIds = function (targetIds) {\n    targetIds = targetIds instanceof Array ? targetIds : new Array(targetIds);\n\n    for (var i = 0; i < targetIds.length; i++) {\n      if (this.hiddenTargetIds.indexOf(targetIds[i]) < 0) {\n        this.hiddenTargetIds = this.hiddenTargetIds.concat(targetIds[i]);\n      }\n    }\n  };\n\n  ChartInternal.prototype.removeHiddenTargetIds = function (targetIds) {\n    this.hiddenTargetIds = this.hiddenTargetIds.filter(function (id) {\n      return targetIds.indexOf(id) < 0;\n    });\n  };\n\n  ChartInternal.prototype.addHiddenLegendIds = function (targetIds) {\n    targetIds = targetIds instanceof Array ? targetIds : new Array(targetIds);\n\n    for (var i = 0; i < targetIds.length; i++) {\n      if (this.hiddenLegendIds.indexOf(targetIds[i]) < 0) {\n        this.hiddenLegendIds = this.hiddenLegendIds.concat(targetIds[i]);\n      }\n    }\n  };\n\n  ChartInternal.prototype.removeHiddenLegendIds = function (targetIds) {\n    this.hiddenLegendIds = this.hiddenLegendIds.filter(function (id) {\n      return targetIds.indexOf(id) < 0;\n    });\n  };\n\n  ChartInternal.prototype.getValuesAsIdKeyed = function (targets) {\n    var ys = {};\n    targets.forEach(function (t) {\n      ys[t.id] = [];\n      t.values.forEach(function (v) {\n        ys[t.id].push(v.value);\n      });\n    });\n    return ys;\n  };\n\n  ChartInternal.prototype.checkValueInTargets = function (targets, checker) {\n    var ids = Object.keys(targets),\n        i,\n        j,\n        values;\n\n    for (i = 0; i < ids.length; i++) {\n      values = targets[ids[i]].values;\n\n      for (j = 0; j < values.length; j++) {\n        if (checker(values[j].value)) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  };\n\n  ChartInternal.prototype.hasNegativeValueInTargets = function (targets) {\n    return this.checkValueInTargets(targets, function (v) {\n      return v < 0;\n    });\n  };\n\n  ChartInternal.prototype.hasPositiveValueInTargets = function (targets) {\n    return this.checkValueInTargets(targets, function (v) {\n      return v > 0;\n    });\n  };\n\n  ChartInternal.prototype.isOrderDesc = function () {\n    var config = this.config;\n    return typeof config.data_order === 'string' && config.data_order.toLowerCase() === 'desc';\n  };\n\n  ChartInternal.prototype.isOrderAsc = function () {\n    var config = this.config;\n    return typeof config.data_order === 'string' && config.data_order.toLowerCase() === 'asc';\n  };\n\n  ChartInternal.prototype.getOrderFunction = function () {\n    var $$ = this,\n        config = $$.config,\n        orderAsc = $$.isOrderAsc(),\n        orderDesc = $$.isOrderDesc();\n\n    if (orderAsc || orderDesc) {\n      var reducer = function reducer(p, c) {\n        return p + Math.abs(c.value);\n      };\n\n      return function (t1, t2) {\n        var t1Sum = t1.values.reduce(reducer, 0),\n            t2Sum = t2.values.reduce(reducer, 0);\n        return orderAsc ? t2Sum - t1Sum : t1Sum - t2Sum;\n      };\n    } else if (isFunction(config.data_order)) {\n      return config.data_order;\n    } else if (isArray(config.data_order)) {\n      var order = config.data_order;\n      return function (t1, t2) {\n        return order.indexOf(t1.id) - order.indexOf(t2.id);\n      };\n    }\n  };\n\n  ChartInternal.prototype.orderTargets = function (targets) {\n    var fct = this.getOrderFunction();\n\n    if (fct) {\n      targets.sort(fct);\n    }\n\n    return targets;\n  };\n\n  ChartInternal.prototype.filterByX = function (targets, x) {\n    return this.d3.merge(targets.map(function (t) {\n      return t.values;\n    })).filter(function (v) {\n      return v.x - x === 0;\n    });\n  };\n\n  ChartInternal.prototype.filterRemoveNull = function (data) {\n    return data.filter(function (d) {\n      return isValue(d.value);\n    });\n  };\n\n  ChartInternal.prototype.filterByXDomain = function (targets, xDomain) {\n    return targets.map(function (t) {\n      return {\n        id: t.id,\n        id_org: t.id_org,\n        values: t.values.filter(function (v) {\n          return xDomain[0] <= v.x && v.x <= xDomain[1];\n        })\n      };\n    });\n  };\n\n  ChartInternal.prototype.hasDataLabel = function () {\n    var config = this.config;\n\n    if (typeof config.data_labels === 'boolean' && config.data_labels) {\n      return true;\n    } else if (_typeof(config.data_labels) === 'object' && notEmpty(config.data_labels)) {\n      return true;\n    }\n\n    return false;\n  };\n\n  ChartInternal.prototype.getDataLabelLength = function (min, max, key) {\n    var $$ = this,\n        lengths = [0, 0],\n        paddingCoef = 1.3;\n    $$.selectChart.select('svg').selectAll('.dummy').data([min, max]).enter().append('text').text(function (d) {\n      return $$.dataLabelFormat(d.id)(d);\n    }).each(function (d, i) {\n      lengths[i] = this.getBoundingClientRect()[key] * paddingCoef;\n    }).remove();\n    return lengths;\n  };\n  /**\n   * Returns true if the given data point is not arc type, otherwise false.\n   * @param {Object} d The data point\n   * @return {boolean}\n   */\n\n\n  ChartInternal.prototype.isNoneArc = function (d) {\n    return this.hasTarget(this.data.targets, d.id);\n  };\n  /**\n   * Returns true if the given data point is arc type, otherwise false.\n   * @param {Object} d The data point\n   * @return {boolean}\n   */\n\n\n  ChartInternal.prototype.isArc = function (d) {\n    return 'data' in d && this.hasTarget(this.data.targets, d.data.id);\n  };\n\n  ChartInternal.prototype.findClosestFromTargets = function (targets, pos) {\n    var $$ = this,\n        candidates; // map to array of closest points of each target\n\n    candidates = targets.map(function (target) {\n      return $$.findClosest(target.values, pos);\n    }); // decide closest point and return\n\n    return $$.findClosest(candidates, pos);\n  };\n\n  ChartInternal.prototype.findClosest = function (values, pos) {\n    var $$ = this,\n        minDist = $$.config.point_sensitivity,\n        closest; // find mouseovering bar\n\n    values.filter(function (v) {\n      return v && $$.isBarType(v.id);\n    }).forEach(function (v) {\n      var shape = $$.main.select('.' + CLASS.bars + $$.getTargetSelectorSuffix(v.id) + ' .' + CLASS.bar + '-' + v.index).node();\n\n      if (!closest && $$.isWithinBar($$.d3.mouse(shape), shape)) {\n        closest = v;\n      }\n    }); // find closest point from non-bar\n\n    values.filter(function (v) {\n      return v && !$$.isBarType(v.id);\n    }).forEach(function (v) {\n      var d = $$.dist(v, pos);\n\n      if (d < minDist) {\n        minDist = d;\n        closest = v;\n      }\n    });\n    return closest;\n  };\n\n  ChartInternal.prototype.dist = function (data, pos) {\n    var $$ = this,\n        config = $$.config,\n        xIndex = config.axis_rotated ? 1 : 0,\n        yIndex = config.axis_rotated ? 0 : 1,\n        y = $$.circleY(data, data.index),\n        x = $$.x(data.x);\n    return Math.sqrt(Math.pow(x - pos[xIndex], 2) + Math.pow(y - pos[yIndex], 2));\n  };\n\n  ChartInternal.prototype.convertValuesToStep = function (values) {\n    var converted = [].concat(values),\n        i;\n\n    if (!this.isCategorized()) {\n      return values;\n    }\n\n    for (i = values.length + 1; 0 < i; i--) {\n      converted[i] = converted[i - 1];\n    }\n\n    converted[0] = {\n      x: converted[0].x - 1,\n      value: converted[0].value,\n      id: converted[0].id\n    };\n    converted[values.length + 1] = {\n      x: converted[values.length].x + 1,\n      value: converted[values.length].value,\n      id: converted[values.length].id\n    };\n    return converted;\n  };\n\n  ChartInternal.prototype.updateDataAttributes = function (name, attrs) {\n    var $$ = this,\n        config = $$.config,\n        current = config['data_' + name];\n\n    if (typeof attrs === 'undefined') {\n      return current;\n    }\n\n    Object.keys(attrs).forEach(function (id) {\n      current[id] = attrs[id];\n    });\n    $$.redraw({\n      withLegend: true\n    });\n    return current;\n  };\n\n  ChartInternal.prototype.load = function (targets, args) {\n    var $$ = this;\n\n    if (targets) {\n      // filter loading targets if needed\n      if (args.filter) {\n        targets = targets.filter(args.filter);\n      } // set type if args.types || args.type specified\n\n\n      if (args.type || args.types) {\n        targets.forEach(function (t) {\n          var type = args.types && args.types[t.id] ? args.types[t.id] : args.type;\n          $$.setTargetType(t.id, type);\n        });\n      } // Update/Add data\n\n\n      $$.data.targets.forEach(function (d) {\n        for (var i = 0; i < targets.length; i++) {\n          if (d.id === targets[i].id) {\n            d.values = targets[i].values;\n            targets.splice(i, 1);\n            break;\n          }\n        }\n      });\n      $$.data.targets = $$.data.targets.concat(targets); // add remained\n    } // Set targets\n\n\n    $$.updateTargets($$.data.targets); // Redraw with new targets\n\n    $$.redraw({\n      withUpdateOrgXDomain: true,\n      withUpdateXDomain: true,\n      withLegend: true\n    });\n\n    if (args.done) {\n      args.done();\n    }\n  };\n\n  ChartInternal.prototype.loadFromArgs = function (args) {\n    var $$ = this;\n\n    if (args.data) {\n      $$.load($$.convertDataToTargets(args.data), args);\n    } else if (args.url) {\n      $$.convertUrlToData(args.url, args.mimeType, args.headers, args.keys, function (data) {\n        $$.load($$.convertDataToTargets(data), args);\n      });\n    } else if (args.json) {\n      $$.load($$.convertDataToTargets($$.convertJsonToData(args.json, args.keys)), args);\n    } else if (args.rows) {\n      $$.load($$.convertDataToTargets($$.convertRowsToData(args.rows)), args);\n    } else if (args.columns) {\n      $$.load($$.convertDataToTargets($$.convertColumnsToData(args.columns)), args);\n    } else {\n      $$.load(null, args);\n    }\n  };\n\n  ChartInternal.prototype.unload = function (targetIds, done) {\n    var $$ = this;\n\n    if (!done) {\n      done = function done() {};\n    } // filter existing target\n\n\n    targetIds = targetIds.filter(function (id) {\n      return $$.hasTarget($$.data.targets, id);\n    }); // If no target, call done and return\n\n    if (!targetIds || targetIds.length === 0) {\n      done();\n      return;\n    }\n\n    $$.svg.selectAll(targetIds.map(function (id) {\n      return $$.selectorTarget(id);\n    })).transition().style('opacity', 0).remove().call($$.endall, done);\n    targetIds.forEach(function (id) {\n      // Reset fadein for future load\n      $$.withoutFadeIn[id] = false; // Remove target's elements\n\n      if ($$.legend) {\n        $$.legend.selectAll('.' + CLASS.legendItem + $$.getTargetSelectorSuffix(id)).remove();\n      } // Remove target\n\n\n      $$.data.targets = $$.data.targets.filter(function (t) {\n        return t.id !== id;\n      });\n    });\n  };\n\n  ChartInternal.prototype.getYDomainMin = function (targets) {\n    var $$ = this,\n        config = $$.config,\n        ids = $$.mapToIds(targets),\n        ys = $$.getValuesAsIdKeyed(targets),\n        j,\n        k,\n        baseId,\n        idsInGroup,\n        id,\n        hasNegativeValue;\n\n    if (config.data_groups.length > 0) {\n      hasNegativeValue = $$.hasNegativeValueInTargets(targets);\n\n      for (j = 0; j < config.data_groups.length; j++) {\n        // Determine baseId\n        idsInGroup = config.data_groups[j].filter(function (id) {\n          return ids.indexOf(id) >= 0;\n        });\n\n        if (idsInGroup.length === 0) {\n          continue;\n        }\n\n        baseId = idsInGroup[0]; // Consider negative values\n\n        if (hasNegativeValue && ys[baseId]) {\n          ys[baseId].forEach(function (v, i) {\n            ys[baseId][i] = v < 0 ? v : 0;\n          });\n        } // Compute min\n\n\n        for (k = 1; k < idsInGroup.length; k++) {\n          id = idsInGroup[k];\n\n          if (!ys[id]) {\n            continue;\n          }\n\n          ys[id].forEach(function (v, i) {\n            if ($$.axis.getId(id) === $$.axis.getId(baseId) && ys[baseId] && !(hasNegativeValue && +v > 0)) {\n              ys[baseId][i] += +v;\n            }\n          });\n        }\n      }\n    }\n\n    return $$.d3.min(Object.keys(ys).map(function (key) {\n      return $$.d3.min(ys[key]);\n    }));\n  };\n\n  ChartInternal.prototype.getYDomainMax = function (targets) {\n    var $$ = this,\n        config = $$.config,\n        ids = $$.mapToIds(targets),\n        ys = $$.getValuesAsIdKeyed(targets),\n        j,\n        k,\n        baseId,\n        idsInGroup,\n        id,\n        hasPositiveValue;\n\n    if (config.data_groups.length > 0) {\n      hasPositiveValue = $$.hasPositiveValueInTargets(targets);\n\n      for (j = 0; j < config.data_groups.length; j++) {\n        // Determine baseId\n        idsInGroup = config.data_groups[j].filter(function (id) {\n          return ids.indexOf(id) >= 0;\n        });\n\n        if (idsInGroup.length === 0) {\n          continue;\n        }\n\n        baseId = idsInGroup[0]; // Consider positive values\n\n        if (hasPositiveValue && ys[baseId]) {\n          ys[baseId].forEach(function (v, i) {\n            ys[baseId][i] = v > 0 ? v : 0;\n          });\n        } // Compute max\n\n\n        for (k = 1; k < idsInGroup.length; k++) {\n          id = idsInGroup[k];\n\n          if (!ys[id]) {\n            continue;\n          }\n\n          ys[id].forEach(function (v, i) {\n            if ($$.axis.getId(id) === $$.axis.getId(baseId) && ys[baseId] && !(hasPositiveValue && +v < 0)) {\n              ys[baseId][i] += +v;\n            }\n          });\n        }\n      }\n    }\n\n    return $$.d3.max(Object.keys(ys).map(function (key) {\n      return $$.d3.max(ys[key]);\n    }));\n  };\n\n  ChartInternal.prototype.getYDomain = function (targets, axisId, xDomain) {\n    var $$ = this,\n        config = $$.config,\n        targetsByAxisId = targets.filter(function (t) {\n      return $$.axis.getId(t.id) === axisId;\n    }),\n        yTargets = xDomain ? $$.filterByXDomain(targetsByAxisId, xDomain) : targetsByAxisId,\n        yMin = axisId === 'y2' ? config.axis_y2_min : config.axis_y_min,\n        yMax = axisId === 'y2' ? config.axis_y2_max : config.axis_y_max,\n        yDomainMin = $$.getYDomainMin(yTargets),\n        yDomainMax = $$.getYDomainMax(yTargets),\n        domain,\n        domainLength,\n        padding,\n        padding_top,\n        padding_bottom,\n        center = axisId === 'y2' ? config.axis_y2_center : config.axis_y_center,\n        yDomainAbs,\n        lengths,\n        diff,\n        ratio,\n        isAllPositive,\n        isAllNegative,\n        isZeroBased = $$.hasType('bar', yTargets) && config.bar_zerobased || $$.hasType('area', yTargets) && config.area_zerobased,\n        isInverted = axisId === 'y2' ? config.axis_y2_inverted : config.axis_y_inverted,\n        showHorizontalDataLabel = $$.hasDataLabel() && config.axis_rotated,\n        showVerticalDataLabel = $$.hasDataLabel() && !config.axis_rotated; // MEMO: avoid inverting domain unexpectedly\n\n    yDomainMin = isValue(yMin) ? yMin : isValue(yMax) ? yDomainMin < yMax ? yDomainMin : yMax - 10 : yDomainMin;\n    yDomainMax = isValue(yMax) ? yMax : isValue(yMin) ? yMin < yDomainMax ? yDomainMax : yMin + 10 : yDomainMax;\n\n    if (yTargets.length === 0) {\n      // use current domain if target of axisId is none\n      return axisId === 'y2' ? $$.y2.domain() : $$.y.domain();\n    }\n\n    if (isNaN(yDomainMin)) {\n      // set minimum to zero when not number\n      yDomainMin = 0;\n    }\n\n    if (isNaN(yDomainMax)) {\n      // set maximum to have same value as yDomainMin\n      yDomainMax = yDomainMin;\n    }\n\n    if (yDomainMin === yDomainMax) {\n      yDomainMin < 0 ? yDomainMax = 0 : yDomainMin = 0;\n    }\n\n    isAllPositive = yDomainMin >= 0 && yDomainMax >= 0;\n    isAllNegative = yDomainMin <= 0 && yDomainMax <= 0; // Cancel zerobased if axis_*_min / axis_*_max specified\n\n    if (isValue(yMin) && isAllPositive || isValue(yMax) && isAllNegative) {\n      isZeroBased = false;\n    } // Bar/Area chart should be 0-based if all positive|negative\n\n\n    if (isZeroBased) {\n      if (isAllPositive) {\n        yDomainMin = 0;\n      }\n\n      if (isAllNegative) {\n        yDomainMax = 0;\n      }\n    }\n\n    domainLength = Math.abs(yDomainMax - yDomainMin);\n    padding = padding_top = padding_bottom = domainLength * 0.1;\n\n    if (typeof center !== 'undefined') {\n      yDomainAbs = Math.max(Math.abs(yDomainMin), Math.abs(yDomainMax));\n      yDomainMax = center + yDomainAbs;\n      yDomainMin = center - yDomainAbs;\n    } // add padding for data label\n\n\n    if (showHorizontalDataLabel) {\n      lengths = $$.getDataLabelLength(yDomainMin, yDomainMax, 'width');\n      diff = diffDomain($$.y.range());\n      ratio = [lengths[0] / diff, lengths[1] / diff];\n      padding_top += domainLength * (ratio[1] / (1 - ratio[0] - ratio[1]));\n      padding_bottom += domainLength * (ratio[0] / (1 - ratio[0] - ratio[1]));\n    } else if (showVerticalDataLabel) {\n      lengths = $$.getDataLabelLength(yDomainMin, yDomainMax, 'height');\n      padding_top += $$.axis.convertPixelsToAxisPadding(lengths[1], domainLength);\n      padding_bottom += $$.axis.convertPixelsToAxisPadding(lengths[0], domainLength);\n    }\n\n    if (axisId === 'y' && notEmpty(config.axis_y_padding)) {\n      padding_top = $$.axis.getPadding(config.axis_y_padding, 'top', padding_top, domainLength);\n      padding_bottom = $$.axis.getPadding(config.axis_y_padding, 'bottom', padding_bottom, domainLength);\n    }\n\n    if (axisId === 'y2' && notEmpty(config.axis_y2_padding)) {\n      padding_top = $$.axis.getPadding(config.axis_y2_padding, 'top', padding_top, domainLength);\n      padding_bottom = $$.axis.getPadding(config.axis_y2_padding, 'bottom', padding_bottom, domainLength);\n    } // Bar/Area chart should be 0-based if all positive|negative\n\n\n    if (isZeroBased) {\n      if (isAllPositive) {\n        padding_bottom = yDomainMin;\n      }\n\n      if (isAllNegative) {\n        padding_top = -yDomainMax;\n      }\n    }\n\n    domain = [yDomainMin - padding_bottom, yDomainMax + padding_top];\n    return isInverted ? domain.reverse() : domain;\n  };\n\n  ChartInternal.prototype.getXDomainMin = function (targets) {\n    var $$ = this,\n        config = $$.config;\n    return isDefined(config.axis_x_min) ? $$.isTimeSeries() ? this.parseDate(config.axis_x_min) : config.axis_x_min : $$.d3.min(targets, function (t) {\n      return $$.d3.min(t.values, function (v) {\n        return v.x;\n      });\n    });\n  };\n\n  ChartInternal.prototype.getXDomainMax = function (targets) {\n    var $$ = this,\n        config = $$.config;\n    return isDefined(config.axis_x_max) ? $$.isTimeSeries() ? this.parseDate(config.axis_x_max) : config.axis_x_max : $$.d3.max(targets, function (t) {\n      return $$.d3.max(t.values, function (v) {\n        return v.x;\n      });\n    });\n  };\n\n  ChartInternal.prototype.getXDomainPadding = function (domain) {\n    var $$ = this,\n        config = $$.config,\n        diff = domain[1] - domain[0],\n        maxDataCount,\n        padding,\n        paddingLeft,\n        paddingRight;\n\n    if ($$.isCategorized()) {\n      padding = 0;\n    } else if ($$.hasType('bar')) {\n      maxDataCount = $$.getMaxDataCount();\n      padding = maxDataCount > 1 ? diff / (maxDataCount - 1) / 2 : 0.5;\n    } else {\n      padding = diff * 0.01;\n    }\n\n    if (_typeof(config.axis_x_padding) === 'object' && notEmpty(config.axis_x_padding)) {\n      paddingLeft = isValue(config.axis_x_padding.left) ? config.axis_x_padding.left : padding;\n      paddingRight = isValue(config.axis_x_padding.right) ? config.axis_x_padding.right : padding;\n    } else if (typeof config.axis_x_padding === 'number') {\n      paddingLeft = paddingRight = config.axis_x_padding;\n    } else {\n      paddingLeft = paddingRight = padding;\n    }\n\n    return {\n      left: paddingLeft,\n      right: paddingRight\n    };\n  };\n\n  ChartInternal.prototype.getXDomain = function (targets) {\n    var $$ = this,\n        xDomain = [$$.getXDomainMin(targets), $$.getXDomainMax(targets)],\n        firstX = xDomain[0],\n        lastX = xDomain[1],\n        padding = $$.getXDomainPadding(xDomain),\n        min = 0,\n        max = 0; // show center of x domain if min and max are the same\n\n    if (firstX - lastX === 0 && !$$.isCategorized()) {\n      if ($$.isTimeSeries()) {\n        firstX = new Date(firstX.getTime() * 0.5);\n        lastX = new Date(lastX.getTime() * 1.5);\n      } else {\n        firstX = firstX === 0 ? 1 : firstX * 0.5;\n        lastX = lastX === 0 ? -1 : lastX * 1.5;\n      }\n    }\n\n    if (firstX || firstX === 0) {\n      min = $$.isTimeSeries() ? new Date(firstX.getTime() - padding.left) : firstX - padding.left;\n    }\n\n    if (lastX || lastX === 0) {\n      max = $$.isTimeSeries() ? new Date(lastX.getTime() + padding.right) : lastX + padding.right;\n    }\n\n    return [min, max];\n  };\n\n  ChartInternal.prototype.updateXDomain = function (targets, withUpdateXDomain, withUpdateOrgXDomain, withTrim, domain) {\n    var $$ = this,\n        config = $$.config;\n\n    if (withUpdateOrgXDomain) {\n      $$.x.domain(domain ? domain : $$.d3.extent($$.getXDomain(targets)));\n      $$.orgXDomain = $$.x.domain();\n\n      if (config.zoom_enabled) {\n        $$.zoom.update();\n      }\n\n      $$.subX.domain($$.x.domain());\n\n      if ($$.brush) {\n        $$.brush.updateScale($$.subX);\n      }\n    }\n\n    if (withUpdateXDomain) {\n      $$.x.domain(domain ? domain : !$$.brush || $$.brush.empty() ? $$.orgXDomain : $$.brush.selectionAsValue());\n    } // Trim domain when too big by zoom mousemove event\n\n\n    if (withTrim) {\n      $$.x.domain($$.trimXDomain($$.x.orgDomain()));\n    }\n\n    return $$.x.domain();\n  };\n\n  ChartInternal.prototype.trimXDomain = function (domain) {\n    var zoomDomain = this.getZoomDomain(),\n        min = zoomDomain[0],\n        max = zoomDomain[1];\n\n    if (domain[0] <= min) {\n      domain[1] = +domain[1] + (min - domain[0]);\n      domain[0] = min;\n    }\n\n    if (max <= domain[1]) {\n      domain[0] = +domain[0] - (domain[1] - max);\n      domain[1] = max;\n    }\n\n    return domain;\n  };\n\n  ChartInternal.prototype.drag = function (mouse) {\n    var $$ = this,\n        config = $$.config,\n        main = $$.main,\n        d3 = $$.d3;\n    var sx, sy, mx, my, minX, maxX, minY, maxY;\n\n    if ($$.hasArcType()) {\n      return;\n    }\n\n    if (!config.data_selection_enabled) {\n      return;\n    } // do nothing if not selectable\n\n\n    if (!config.data_selection_multiple) {\n      return;\n    } // skip when single selection because drag is used for multiple selection\n\n\n    sx = $$.dragStart[0];\n    sy = $$.dragStart[1];\n    mx = mouse[0];\n    my = mouse[1];\n    minX = Math.min(sx, mx);\n    maxX = Math.max(sx, mx);\n    minY = config.data_selection_grouped ? $$.margin.top : Math.min(sy, my);\n    maxY = config.data_selection_grouped ? $$.height : Math.max(sy, my);\n    main.select('.' + CLASS.dragarea).attr('x', minX).attr('y', minY).attr('width', maxX - minX).attr('height', maxY - minY); // TODO: binary search when multiple xs\n\n    main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape).filter(function (d) {\n      return config.data_selection_isselectable(d);\n    }).each(function (d, i) {\n      var shape = d3.select(this),\n          isSelected = shape.classed(CLASS.SELECTED),\n          isIncluded = shape.classed(CLASS.INCLUDED),\n          _x,\n          _y,\n          _w,\n          _h,\n          toggle,\n          isWithin = false,\n          box;\n\n      if (shape.classed(CLASS.circle)) {\n        _x = shape.attr(\"cx\") * 1;\n        _y = shape.attr(\"cy\") * 1;\n        toggle = $$.togglePoint;\n        isWithin = minX < _x && _x < maxX && minY < _y && _y < maxY;\n      } else if (shape.classed(CLASS.bar)) {\n        box = getPathBox(this);\n        _x = box.x;\n        _y = box.y;\n        _w = box.width;\n        _h = box.height;\n        toggle = $$.togglePath;\n        isWithin = !(maxX < _x || _x + _w < minX) && !(maxY < _y || _y + _h < minY);\n      } else {\n        // line/area selection not supported yet\n        return;\n      }\n\n      if (isWithin ^ isIncluded) {\n        shape.classed(CLASS.INCLUDED, !isIncluded); // TODO: included/unincluded callback here\n\n        shape.classed(CLASS.SELECTED, !isSelected);\n        toggle.call($$, !isSelected, shape, d, i);\n      }\n    });\n  };\n\n  ChartInternal.prototype.dragstart = function (mouse) {\n    var $$ = this,\n        config = $$.config;\n\n    if ($$.hasArcType()) {\n      return;\n    }\n\n    if (!config.data_selection_enabled) {\n      return;\n    } // do nothing if not selectable\n\n\n    $$.dragStart = mouse;\n    $$.main.select('.' + CLASS.chart).append('rect').attr('class', CLASS.dragarea).style('opacity', 0.1);\n    $$.dragging = true;\n  };\n\n  ChartInternal.prototype.dragend = function () {\n    var $$ = this,\n        config = $$.config;\n\n    if ($$.hasArcType()) {\n      return;\n    }\n\n    if (!config.data_selection_enabled) {\n      return;\n    } // do nothing if not selectable\n\n\n    $$.main.select('.' + CLASS.dragarea).transition().duration(100).style('opacity', 0).remove();\n    $$.main.selectAll('.' + CLASS.shape).classed(CLASS.INCLUDED, false);\n    $$.dragging = false;\n  };\n\n  ChartInternal.prototype.getYFormat = function (forArc) {\n    var $$ = this,\n        formatForY = forArc && !$$.hasType('gauge') ? $$.defaultArcValueFormat : $$.yFormat,\n        formatForY2 = forArc && !$$.hasType('gauge') ? $$.defaultArcValueFormat : $$.y2Format;\n    return function (v, ratio, id) {\n      var format = $$.axis.getId(id) === 'y2' ? formatForY2 : formatForY;\n      return format.call($$, v, ratio);\n    };\n  };\n\n  ChartInternal.prototype.yFormat = function (v) {\n    var $$ = this,\n        config = $$.config,\n        format = config.axis_y_tick_format ? config.axis_y_tick_format : $$.defaultValueFormat;\n    return format(v);\n  };\n\n  ChartInternal.prototype.y2Format = function (v) {\n    var $$ = this,\n        config = $$.config,\n        format = config.axis_y2_tick_format ? config.axis_y2_tick_format : $$.defaultValueFormat;\n    return format(v);\n  };\n\n  ChartInternal.prototype.defaultValueFormat = function (v) {\n    return isValue(v) ? +v : \"\";\n  };\n\n  ChartInternal.prototype.defaultArcValueFormat = function (v, ratio) {\n    return (ratio * 100).toFixed(1) + '%';\n  };\n\n  ChartInternal.prototype.dataLabelFormat = function (targetId) {\n    var $$ = this,\n        data_labels = $$.config.data_labels,\n        format,\n        defaultFormat = function defaultFormat(v) {\n      return isValue(v) ? +v : \"\";\n    }; // find format according to axis id\n\n\n    if (typeof data_labels.format === 'function') {\n      format = data_labels.format;\n    } else if (_typeof(data_labels.format) === 'object') {\n      if (data_labels.format[targetId]) {\n        format = data_labels.format[targetId] === true ? defaultFormat : data_labels.format[targetId];\n      } else {\n        format = function format() {\n          return '';\n        };\n      }\n    } else {\n      format = defaultFormat;\n    }\n\n    return format;\n  };\n\n  ChartInternal.prototype.initGrid = function () {\n    var $$ = this,\n        config = $$.config,\n        d3 = $$.d3;\n    $$.grid = $$.main.append('g').attr(\"clip-path\", $$.clipPathForGrid).attr('class', CLASS.grid);\n\n    if (config.grid_x_show) {\n      $$.grid.append(\"g\").attr(\"class\", CLASS.xgrids);\n    }\n\n    if (config.grid_y_show) {\n      $$.grid.append('g').attr('class', CLASS.ygrids);\n    }\n\n    if (config.grid_focus_show) {\n      $$.grid.append('g').attr(\"class\", CLASS.xgridFocus).append('line').attr('class', CLASS.xgridFocus);\n    }\n\n    $$.xgrid = d3.selectAll([]);\n\n    if (!config.grid_lines_front) {\n      $$.initGridLines();\n    }\n  };\n\n  ChartInternal.prototype.initGridLines = function () {\n    var $$ = this,\n        d3 = $$.d3;\n    $$.gridLines = $$.main.append('g').attr(\"clip-path\", $$.clipPathForGrid).attr('class', CLASS.grid + ' ' + CLASS.gridLines);\n    $$.gridLines.append('g').attr(\"class\", CLASS.xgridLines);\n    $$.gridLines.append('g').attr('class', CLASS.ygridLines);\n    $$.xgridLines = d3.selectAll([]);\n  };\n\n  ChartInternal.prototype.updateXGrid = function (withoutUpdate) {\n    var $$ = this,\n        config = $$.config,\n        d3 = $$.d3,\n        xgridData = $$.generateGridData(config.grid_x_type, $$.x),\n        tickOffset = $$.isCategorized() ? $$.xAxis.tickOffset() : 0;\n    $$.xgridAttr = config.axis_rotated ? {\n      'x1': 0,\n      'x2': $$.width,\n      'y1': function y1(d) {\n        return $$.x(d) - tickOffset;\n      },\n      'y2': function y2(d) {\n        return $$.x(d) - tickOffset;\n      }\n    } : {\n      'x1': function x1(d) {\n        return $$.x(d) + tickOffset;\n      },\n      'x2': function x2(d) {\n        return $$.x(d) + tickOffset;\n      },\n      'y1': 0,\n      'y2': $$.height\n    };\n\n    $$.xgridAttr.opacity = function () {\n      var pos = +d3.select(this).attr(config.axis_rotated ? 'y1' : 'x1');\n      return pos === (config.axis_rotated ? $$.height : 0) ? 0 : 1;\n    };\n\n    var xgrid = $$.main.select('.' + CLASS.xgrids).selectAll('.' + CLASS.xgrid).data(xgridData);\n    var xgridEnter = xgrid.enter().append('line').attr(\"class\", CLASS.xgrid).attr('x1', $$.xgridAttr.x1).attr('x2', $$.xgridAttr.x2).attr('y1', $$.xgridAttr.y1).attr('y2', $$.xgridAttr.y2).style(\"opacity\", 0);\n    $$.xgrid = xgridEnter.merge(xgrid);\n\n    if (!withoutUpdate) {\n      $$.xgrid.attr('x1', $$.xgridAttr.x1).attr('x2', $$.xgridAttr.x2).attr('y1', $$.xgridAttr.y1).attr('y2', $$.xgridAttr.y2).style(\"opacity\", $$.xgridAttr.opacity);\n    }\n\n    xgrid.exit().remove();\n  };\n\n  ChartInternal.prototype.updateYGrid = function () {\n    var $$ = this,\n        config = $$.config,\n        gridValues = $$.yAxis.tickValues() || $$.y.ticks(config.grid_y_ticks);\n    var ygrid = $$.main.select('.' + CLASS.ygrids).selectAll('.' + CLASS.ygrid).data(gridValues);\n    var ygridEnter = ygrid.enter().append('line') // TODO: x1, x2, y1, y2, opacity need to be set here maybe\n    .attr('class', CLASS.ygrid);\n    $$.ygrid = ygridEnter.merge(ygrid);\n    $$.ygrid.attr(\"x1\", config.axis_rotated ? $$.y : 0).attr(\"x2\", config.axis_rotated ? $$.y : $$.width).attr(\"y1\", config.axis_rotated ? 0 : $$.y).attr(\"y2\", config.axis_rotated ? $$.height : $$.y);\n    ygrid.exit().remove();\n    $$.smoothLines($$.ygrid, 'grid');\n  };\n\n  ChartInternal.prototype.gridTextAnchor = function (d) {\n    return d.position ? d.position : \"end\";\n  };\n\n  ChartInternal.prototype.gridTextDx = function (d) {\n    return d.position === 'start' ? 4 : d.position === 'middle' ? 0 : -4;\n  };\n\n  ChartInternal.prototype.xGridTextX = function (d) {\n    return d.position === 'start' ? -this.height : d.position === 'middle' ? -this.height / 2 : 0;\n  };\n\n  ChartInternal.prototype.yGridTextX = function (d) {\n    return d.position === 'start' ? 0 : d.position === 'middle' ? this.width / 2 : this.width;\n  };\n\n  ChartInternal.prototype.updateGrid = function (duration) {\n    var $$ = this,\n        main = $$.main,\n        config = $$.config,\n        xgridLine,\n        xgridLineEnter,\n        ygridLine,\n        ygridLineEnter,\n        xv = $$.xv.bind($$),\n        yv = $$.yv.bind($$),\n        xGridTextX = $$.xGridTextX.bind($$),\n        yGridTextX = $$.yGridTextX.bind($$); // hide if arc type\n\n    $$.grid.style('visibility', $$.hasArcType() ? 'hidden' : 'visible');\n    main.select('line.' + CLASS.xgridFocus).style(\"visibility\", \"hidden\");\n\n    if (config.grid_x_show) {\n      $$.updateXGrid();\n    }\n\n    xgridLine = main.select('.' + CLASS.xgridLines).selectAll('.' + CLASS.xgridLine).data(config.grid_x_lines); // enter\n\n    xgridLineEnter = xgridLine.enter().append('g').attr(\"class\", function (d) {\n      return CLASS.xgridLine + (d['class'] ? ' ' + d['class'] : '');\n    });\n    xgridLineEnter.append('line').attr(\"x1\", config.axis_rotated ? 0 : xv).attr(\"x2\", config.axis_rotated ? $$.width : xv).attr(\"y1\", config.axis_rotated ? xv : 0).attr(\"y2\", config.axis_rotated ? xv : $$.height).style(\"opacity\", 0);\n    xgridLineEnter.append('text').attr(\"text-anchor\", $$.gridTextAnchor).attr(\"transform\", config.axis_rotated ? \"\" : \"rotate(-90)\").attr(\"x\", config.axis_rotated ? yGridTextX : xGridTextX).attr(\"y\", xv).attr('dx', $$.gridTextDx).attr('dy', -5).style(\"opacity\", 0); // udpate\n\n    $$.xgridLines = xgridLineEnter.merge(xgridLine); // done in d3.transition() of the end of this function\n    // exit\n\n    xgridLine.exit().transition().duration(duration).style(\"opacity\", 0).remove(); // Y-Grid\n\n    if (config.grid_y_show) {\n      $$.updateYGrid();\n    }\n\n    ygridLine = main.select('.' + CLASS.ygridLines).selectAll('.' + CLASS.ygridLine).data(config.grid_y_lines); // enter\n\n    ygridLineEnter = ygridLine.enter().append('g').attr(\"class\", function (d) {\n      return CLASS.ygridLine + (d['class'] ? ' ' + d['class'] : '');\n    });\n    ygridLineEnter.append('line').attr(\"x1\", config.axis_rotated ? yv : 0).attr(\"x2\", config.axis_rotated ? yv : $$.width).attr(\"y1\", config.axis_rotated ? 0 : yv).attr(\"y2\", config.axis_rotated ? $$.height : yv).style(\"opacity\", 0);\n    ygridLineEnter.append('text').attr(\"text-anchor\", $$.gridTextAnchor).attr(\"transform\", config.axis_rotated ? \"rotate(-90)\" : \"\").attr(\"x\", config.axis_rotated ? xGridTextX : yGridTextX).attr(\"y\", yv).attr('dx', $$.gridTextDx).attr('dy', -5).style(\"opacity\", 0); // update\n\n    $$.ygridLines = ygridLineEnter.merge(ygridLine);\n    $$.ygridLines.select('line').transition().duration(duration).attr(\"x1\", config.axis_rotated ? yv : 0).attr(\"x2\", config.axis_rotated ? yv : $$.width).attr(\"y1\", config.axis_rotated ? 0 : yv).attr(\"y2\", config.axis_rotated ? $$.height : yv).style(\"opacity\", 1);\n    $$.ygridLines.select('text').transition().duration(duration).attr(\"x\", config.axis_rotated ? $$.xGridTextX.bind($$) : $$.yGridTextX.bind($$)).attr(\"y\", yv).text(function (d) {\n      return d.text;\n    }).style(\"opacity\", 1); // exit\n\n    ygridLine.exit().transition().duration(duration).style(\"opacity\", 0).remove();\n  };\n\n  ChartInternal.prototype.redrawGrid = function (withTransition, transition) {\n    var $$ = this,\n        config = $$.config,\n        xv = $$.xv.bind($$),\n        lines = $$.xgridLines.select('line'),\n        texts = $$.xgridLines.select('text');\n    return [(withTransition ? lines.transition(transition) : lines).attr(\"x1\", config.axis_rotated ? 0 : xv).attr(\"x2\", config.axis_rotated ? $$.width : xv).attr(\"y1\", config.axis_rotated ? xv : 0).attr(\"y2\", config.axis_rotated ? xv : $$.height).style(\"opacity\", 1), (withTransition ? texts.transition(transition) : texts).attr(\"x\", config.axis_rotated ? $$.yGridTextX.bind($$) : $$.xGridTextX.bind($$)).attr(\"y\", xv).text(function (d) {\n      return d.text;\n    }).style(\"opacity\", 1)];\n  };\n\n  ChartInternal.prototype.showXGridFocus = function (selectedData) {\n    var $$ = this,\n        config = $$.config,\n        dataToShow = selectedData.filter(function (d) {\n      return d && isValue(d.value);\n    }),\n        focusEl = $$.main.selectAll('line.' + CLASS.xgridFocus),\n        xx = $$.xx.bind($$);\n\n    if (!config.tooltip_show) {\n      return;\n    } // Hide when scatter plot exists\n\n\n    if ($$.hasType('scatter') || $$.hasArcType()) {\n      return;\n    }\n\n    focusEl.style(\"visibility\", \"visible\").data([dataToShow[0]]).attr(config.axis_rotated ? 'y1' : 'x1', xx).attr(config.axis_rotated ? 'y2' : 'x2', xx);\n    $$.smoothLines(focusEl, 'grid');\n  };\n\n  ChartInternal.prototype.hideXGridFocus = function () {\n    this.main.select('line.' + CLASS.xgridFocus).style(\"visibility\", \"hidden\");\n  };\n\n  ChartInternal.prototype.updateXgridFocus = function () {\n    var $$ = this,\n        config = $$.config;\n    $$.main.select('line.' + CLASS.xgridFocus).attr(\"x1\", config.axis_rotated ? 0 : -10).attr(\"x2\", config.axis_rotated ? $$.width : -10).attr(\"y1\", config.axis_rotated ? -10 : 0).attr(\"y2\", config.axis_rotated ? -10 : $$.height);\n  };\n\n  ChartInternal.prototype.generateGridData = function (type, scale) {\n    var $$ = this,\n        gridData = [],\n        xDomain,\n        firstYear,\n        lastYear,\n        i,\n        tickNum = $$.main.select(\".\" + CLASS.axisX).selectAll('.tick').size();\n\n    if (type === 'year') {\n      xDomain = $$.getXDomain();\n      firstYear = xDomain[0].getFullYear();\n      lastYear = xDomain[1].getFullYear();\n\n      for (i = firstYear; i <= lastYear; i++) {\n        gridData.push(new Date(i + '-01-01 00:00:00'));\n      }\n    } else {\n      gridData = scale.ticks(10);\n\n      if (gridData.length > tickNum) {\n        // use only int\n        gridData = gridData.filter(function (d) {\n          return (\"\" + d).indexOf('.') < 0;\n        });\n      }\n    }\n\n    return gridData;\n  };\n\n  ChartInternal.prototype.getGridFilterToRemove = function (params) {\n    return params ? function (line) {\n      var found = false;\n      [].concat(params).forEach(function (param) {\n        if ('value' in param && line.value === param.value || 'class' in param && line['class'] === param['class']) {\n          found = true;\n        }\n      });\n      return found;\n    } : function () {\n      return true;\n    };\n  };\n\n  ChartInternal.prototype.removeGridLines = function (params, forX) {\n    var $$ = this,\n        config = $$.config,\n        toRemove = $$.getGridFilterToRemove(params),\n        toShow = function toShow(line) {\n      return !toRemove(line);\n    },\n        classLines = forX ? CLASS.xgridLines : CLASS.ygridLines,\n        classLine = forX ? CLASS.xgridLine : CLASS.ygridLine;\n\n    $$.main.select('.' + classLines).selectAll('.' + classLine).filter(toRemove).transition().duration(config.transition_duration).style('opacity', 0).remove();\n\n    if (forX) {\n      config.grid_x_lines = config.grid_x_lines.filter(toShow);\n    } else {\n      config.grid_y_lines = config.grid_y_lines.filter(toShow);\n    }\n  };\n\n  ChartInternal.prototype.initEventRect = function () {\n    var $$ = this,\n        config = $$.config;\n    $$.main.select('.' + CLASS.chart).append(\"g\").attr(\"class\", CLASS.eventRects).style('fill-opacity', 0);\n    $$.eventRect = $$.main.select('.' + CLASS.eventRects).append('rect').attr('class', CLASS.eventRect); // event rect handle zoom event as well\n\n    if (config.zoom_enabled && $$.zoom) {\n      $$.eventRect.call($$.zoom).on(\"dblclick.zoom\", null);\n\n      if (config.zoom_initialRange) {\n        // WORKAROUND: Add transition to apply transform immediately when no subchart\n        $$.eventRect.transition().duration(0).call($$.zoom.transform, $$.zoomTransform(config.zoom_initialRange));\n      }\n    }\n  };\n\n  ChartInternal.prototype.redrawEventRect = function () {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config,\n        x,\n        y,\n        w,\n        h; // TODO: rotated not supported yet\n\n    x = 0;\n    y = 0;\n    w = $$.width;\n    h = $$.height;\n\n    function mouseout() {\n      $$.svg.select('.' + CLASS.eventRect).style('cursor', null);\n      $$.hideXGridFocus();\n      $$.hideTooltip();\n      $$.unexpandCircles();\n      $$.unexpandBars();\n    } // rects for mouseover\n\n\n    $$.main.select('.' + CLASS.eventRects).style('cursor', config.zoom_enabled ? config.axis_rotated ? 'ns-resize' : 'ew-resize' : null);\n    $$.eventRect.attr('x', x).attr('y', y).attr('width', w).attr('height', h).on('mouseout', config.interaction_enabled ? function () {\n      if (!config) {\n        return;\n      } // chart is destroyed\n\n\n      if ($$.hasArcType()) {\n        return;\n      }\n\n      mouseout();\n    } : null).on('mousemove', config.interaction_enabled ? function () {\n      var targetsToShow, mouse, closest, sameXData, selectedData;\n\n      if ($$.dragging) {\n        return;\n      } // do nothing when dragging\n\n\n      if ($$.hasArcType(targetsToShow)) {\n        return;\n      }\n\n      targetsToShow = $$.filterTargetsToShow($$.data.targets);\n      mouse = d3.mouse(this);\n      closest = $$.findClosestFromTargets(targetsToShow, mouse);\n\n      if ($$.mouseover && (!closest || closest.id !== $$.mouseover.id)) {\n        config.data_onmouseout.call($$.api, $$.mouseover);\n        $$.mouseover = undefined;\n      }\n\n      if (!closest) {\n        mouseout();\n        return;\n      }\n\n      if ($$.isScatterType(closest) || !config.tooltip_grouped) {\n        sameXData = [closest];\n      } else {\n        sameXData = $$.filterByX(targetsToShow, closest.x);\n      } // show tooltip when cursor is close to some point\n\n\n      selectedData = sameXData.map(function (d) {\n        return $$.addName(d);\n      });\n      $$.showTooltip(selectedData, this); // expand points\n\n      if (config.point_focus_expand_enabled) {\n        $$.unexpandCircles();\n        selectedData.forEach(function (d) {\n          $$.expandCircles(d.index, d.id, false);\n        });\n      }\n\n      $$.expandBars(closest.index, closest.id, true); // Show xgrid focus line\n\n      $$.showXGridFocus(selectedData); // Show cursor as pointer if point is close to mouse position\n\n      if ($$.isBarType(closest.id) || $$.dist(closest, mouse) < config.point_sensitivity) {\n        $$.svg.select('.' + CLASS.eventRect).style('cursor', 'pointer');\n\n        if (!$$.mouseover) {\n          config.data_onmouseover.call($$.api, closest);\n          $$.mouseover = closest;\n        }\n      }\n    } : null).on('click', config.interaction_enabled ? function () {\n      var targetsToShow, mouse, closest, sameXData;\n\n      if ($$.hasArcType(targetsToShow)) {\n        return;\n      }\n\n      targetsToShow = $$.filterTargetsToShow($$.data.targets);\n      mouse = d3.mouse(this);\n      closest = $$.findClosestFromTargets(targetsToShow, mouse);\n\n      if (!closest) {\n        return;\n      } // select if selection enabled\n\n\n      if ($$.isBarType(closest.id) || $$.dist(closest, mouse) < config.point_sensitivity) {\n        if ($$.isScatterType(closest) || !config.data_selection_grouped) {\n          sameXData = [closest];\n        } else {\n          sameXData = $$.filterByX(targetsToShow, closest.x);\n        }\n\n        sameXData.forEach(function (d) {\n          $$.main.selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(d.id)).selectAll('.' + CLASS.shape + '-' + d.index).each(function () {\n            if (config.data_selection_grouped || $$.isWithinShape(this, d)) {\n              $$.toggleShape(this, d, d.index);\n              config.data_onclick.call($$.api, d, this);\n            }\n          });\n        });\n      }\n    } : null).call(config.interaction_enabled && config.data_selection_draggable && $$.drag ? d3.drag().on('drag', function () {\n      $$.drag(d3.mouse(this));\n    }).on('start', function () {\n      $$.dragstart(d3.mouse(this));\n    }).on('end', function () {\n      $$.dragend();\n    }) : function () {});\n  };\n\n  ChartInternal.prototype.getMousePosition = function (data) {\n    var $$ = this;\n    return [$$.x(data.x), $$.getYScale(data.id)(data.value)];\n  };\n\n  ChartInternal.prototype.dispatchEvent = function (type, mouse) {\n    var $$ = this,\n        selector = '.' + CLASS.eventRect,\n        eventRect = $$.main.select(selector).node(),\n        box = eventRect.getBoundingClientRect(),\n        x = box.left + (mouse ? mouse[0] : 0),\n        y = box.top + (mouse ? mouse[1] : 0),\n        event = document.createEvent(\"MouseEvents\");\n    event.initMouseEvent(type, true, true, window, 0, x, y, x, y, false, false, false, false, 0, null);\n    eventRect.dispatchEvent(event);\n  };\n\n  ChartInternal.prototype.initLegend = function () {\n    var $$ = this;\n    $$.legendItemTextBox = {};\n    $$.legendHasRendered = false;\n    $$.legend = $$.svg.append(\"g\").attr(\"transform\", $$.getTranslate('legend'));\n\n    if (!$$.config.legend_show) {\n      $$.legend.style('visibility', 'hidden');\n      $$.hiddenLegendIds = $$.mapToIds($$.data.targets);\n      return;\n    } // MEMO: call here to update legend box and tranlate for all\n    // MEMO: translate will be upated by this, so transform not needed in updateLegend()\n\n\n    $$.updateLegendWithDefaults();\n  };\n\n  ChartInternal.prototype.updateLegendWithDefaults = function () {\n    var $$ = this;\n    $$.updateLegend($$.mapToIds($$.data.targets), {\n      withTransform: false,\n      withTransitionForTransform: false,\n      withTransition: false\n    });\n  };\n\n  ChartInternal.prototype.updateSizeForLegend = function (legendHeight, legendWidth) {\n    var $$ = this,\n        config = $$.config,\n        insetLegendPosition = {\n      top: $$.isLegendTop ? $$.getCurrentPaddingTop() + config.legend_inset_y + 5.5 : $$.currentHeight - legendHeight - $$.getCurrentPaddingBottom() - config.legend_inset_y,\n      left: $$.isLegendLeft ? $$.getCurrentPaddingLeft() + config.legend_inset_x + 0.5 : $$.currentWidth - legendWidth - $$.getCurrentPaddingRight() - config.legend_inset_x + 0.5\n    };\n    $$.margin3 = {\n      top: $$.isLegendRight ? 0 : $$.isLegendInset ? insetLegendPosition.top : $$.currentHeight - legendHeight,\n      right: NaN,\n      bottom: 0,\n      left: $$.isLegendRight ? $$.currentWidth - legendWidth : $$.isLegendInset ? insetLegendPosition.left : 0\n    };\n  };\n\n  ChartInternal.prototype.transformLegend = function (withTransition) {\n    var $$ = this;\n    (withTransition ? $$.legend.transition() : $$.legend).attr(\"transform\", $$.getTranslate('legend'));\n  };\n\n  ChartInternal.prototype.updateLegendStep = function (step) {\n    this.legendStep = step;\n  };\n\n  ChartInternal.prototype.updateLegendItemWidth = function (w) {\n    this.legendItemWidth = w;\n  };\n\n  ChartInternal.prototype.updateLegendItemHeight = function (h) {\n    this.legendItemHeight = h;\n  };\n\n  ChartInternal.prototype.getLegendWidth = function () {\n    var $$ = this;\n    return $$.config.legend_show ? $$.isLegendRight || $$.isLegendInset ? $$.legendItemWidth * ($$.legendStep + 1) : $$.currentWidth : 0;\n  };\n\n  ChartInternal.prototype.getLegendHeight = function () {\n    var $$ = this,\n        h = 0;\n\n    if ($$.config.legend_show) {\n      if ($$.isLegendRight) {\n        h = $$.currentHeight;\n      } else {\n        h = Math.max(20, $$.legendItemHeight) * ($$.legendStep + 1);\n      }\n    }\n\n    return h;\n  };\n\n  ChartInternal.prototype.opacityForLegend = function (legendItem) {\n    return legendItem.classed(CLASS.legendItemHidden) ? null : 1;\n  };\n\n  ChartInternal.prototype.opacityForUnfocusedLegend = function (legendItem) {\n    return legendItem.classed(CLASS.legendItemHidden) ? null : 0.3;\n  };\n\n  ChartInternal.prototype.toggleFocusLegend = function (targetIds, focus) {\n    var $$ = this;\n    targetIds = $$.mapToTargetIds(targetIds);\n    $$.legend.selectAll('.' + CLASS.legendItem).filter(function (id) {\n      return targetIds.indexOf(id) >= 0;\n    }).classed(CLASS.legendItemFocused, focus).transition().duration(100).style('opacity', function () {\n      var opacity = focus ? $$.opacityForLegend : $$.opacityForUnfocusedLegend;\n      return opacity.call($$, $$.d3.select(this));\n    });\n  };\n\n  ChartInternal.prototype.revertLegend = function () {\n    var $$ = this,\n        d3 = $$.d3;\n    $$.legend.selectAll('.' + CLASS.legendItem).classed(CLASS.legendItemFocused, false).transition().duration(100).style('opacity', function () {\n      return $$.opacityForLegend(d3.select(this));\n    });\n  };\n\n  ChartInternal.prototype.showLegend = function (targetIds) {\n    var $$ = this,\n        config = $$.config;\n\n    if (!config.legend_show) {\n      config.legend_show = true;\n      $$.legend.style('visibility', 'visible');\n\n      if (!$$.legendHasRendered) {\n        $$.updateLegendWithDefaults();\n      }\n    }\n\n    $$.removeHiddenLegendIds(targetIds);\n    $$.legend.selectAll($$.selectorLegends(targetIds)).style('visibility', 'visible').transition().style('opacity', function () {\n      return $$.opacityForLegend($$.d3.select(this));\n    });\n  };\n\n  ChartInternal.prototype.hideLegend = function (targetIds) {\n    var $$ = this,\n        config = $$.config;\n\n    if (config.legend_show && isEmpty(targetIds)) {\n      config.legend_show = false;\n      $$.legend.style('visibility', 'hidden');\n    }\n\n    $$.addHiddenLegendIds(targetIds);\n    $$.legend.selectAll($$.selectorLegends(targetIds)).style('opacity', 0).style('visibility', 'hidden');\n  };\n\n  ChartInternal.prototype.clearLegendItemTextBoxCache = function () {\n    this.legendItemTextBox = {};\n  };\n\n  ChartInternal.prototype.updateLegend = function (targetIds, options, transitions) {\n    var $$ = this,\n        config = $$.config;\n    var xForLegend, xForLegendText, xForLegendRect, yForLegend, yForLegendText, yForLegendRect, x1ForLegendTile, x2ForLegendTile, yForLegendTile;\n    var paddingTop = 4,\n        paddingRight = 10,\n        maxWidth = 0,\n        maxHeight = 0,\n        posMin = 10,\n        tileWidth = config.legend_item_tile_width + 5;\n    var l,\n        totalLength = 0,\n        offsets = {},\n        widths = {},\n        heights = {},\n        margins = [0],\n        steps = {},\n        step = 0;\n    var withTransition, withTransitionForTransform;\n    var texts, rects, tiles, background; // Skip elements when their name is set to null\n\n    targetIds = targetIds.filter(function (id) {\n      return !isDefined(config.data_names[id]) || config.data_names[id] !== null;\n    });\n    options = options || {};\n    withTransition = getOption(options, \"withTransition\", true);\n    withTransitionForTransform = getOption(options, \"withTransitionForTransform\", true);\n\n    function getTextBox(textElement, id) {\n      if (!$$.legendItemTextBox[id]) {\n        $$.legendItemTextBox[id] = $$.getTextRect(textElement.textContent, CLASS.legendItem, textElement);\n      }\n\n      return $$.legendItemTextBox[id];\n    }\n\n    function updatePositions(textElement, id, index) {\n      var reset = index === 0,\n          isLast = index === targetIds.length - 1,\n          box = getTextBox(textElement, id),\n          itemWidth = box.width + tileWidth + (isLast && !($$.isLegendRight || $$.isLegendInset) ? 0 : paddingRight) + config.legend_padding,\n          itemHeight = box.height + paddingTop,\n          itemLength = $$.isLegendRight || $$.isLegendInset ? itemHeight : itemWidth,\n          areaLength = $$.isLegendRight || $$.isLegendInset ? $$.getLegendHeight() : $$.getLegendWidth(),\n          margin,\n          maxLength; // MEMO: care about condifion of step, totalLength\n\n      function updateValues(id, withoutStep) {\n        if (!withoutStep) {\n          margin = (areaLength - totalLength - itemLength) / 2;\n\n          if (margin < posMin) {\n            margin = (areaLength - itemLength) / 2;\n            totalLength = 0;\n            step++;\n          }\n        }\n\n        steps[id] = step;\n        margins[step] = $$.isLegendInset ? 10 : margin;\n        offsets[id] = totalLength;\n        totalLength += itemLength;\n      }\n\n      if (reset) {\n        totalLength = 0;\n        step = 0;\n        maxWidth = 0;\n        maxHeight = 0;\n      }\n\n      if (config.legend_show && !$$.isLegendToShow(id)) {\n        widths[id] = heights[id] = steps[id] = offsets[id] = 0;\n        return;\n      }\n\n      widths[id] = itemWidth;\n      heights[id] = itemHeight;\n\n      if (!maxWidth || itemWidth >= maxWidth) {\n        maxWidth = itemWidth;\n      }\n\n      if (!maxHeight || itemHeight >= maxHeight) {\n        maxHeight = itemHeight;\n      }\n\n      maxLength = $$.isLegendRight || $$.isLegendInset ? maxHeight : maxWidth;\n\n      if (config.legend_equally) {\n        Object.keys(widths).forEach(function (id) {\n          widths[id] = maxWidth;\n        });\n        Object.keys(heights).forEach(function (id) {\n          heights[id] = maxHeight;\n        });\n        margin = (areaLength - maxLength * targetIds.length) / 2;\n\n        if (margin < posMin) {\n          totalLength = 0;\n          step = 0;\n          targetIds.forEach(function (id) {\n            updateValues(id);\n          });\n        } else {\n          updateValues(id, true);\n        }\n      } else {\n        updateValues(id);\n      }\n    }\n\n    if ($$.isLegendInset) {\n      step = config.legend_inset_step ? config.legend_inset_step : targetIds.length;\n      $$.updateLegendStep(step);\n    }\n\n    if ($$.isLegendRight) {\n      xForLegend = function xForLegend(id) {\n        return maxWidth * steps[id];\n      };\n\n      yForLegend = function yForLegend(id) {\n        return margins[steps[id]] + offsets[id];\n      };\n    } else if ($$.isLegendInset) {\n      xForLegend = function xForLegend(id) {\n        return maxWidth * steps[id] + 10;\n      };\n\n      yForLegend = function yForLegend(id) {\n        return margins[steps[id]] + offsets[id];\n      };\n    } else {\n      xForLegend = function xForLegend(id) {\n        return margins[steps[id]] + offsets[id];\n      };\n\n      yForLegend = function yForLegend(id) {\n        return maxHeight * steps[id];\n      };\n    }\n\n    xForLegendText = function xForLegendText(id, i) {\n      return xForLegend(id, i) + 4 + config.legend_item_tile_width;\n    };\n\n    yForLegendText = function yForLegendText(id, i) {\n      return yForLegend(id, i) + 9;\n    };\n\n    xForLegendRect = function xForLegendRect(id, i) {\n      return xForLegend(id, i);\n    };\n\n    yForLegendRect = function yForLegendRect(id, i) {\n      return yForLegend(id, i) - 5;\n    };\n\n    x1ForLegendTile = function x1ForLegendTile(id, i) {\n      return xForLegend(id, i) - 2;\n    };\n\n    x2ForLegendTile = function x2ForLegendTile(id, i) {\n      return xForLegend(id, i) - 2 + config.legend_item_tile_width;\n    };\n\n    yForLegendTile = function yForLegendTile(id, i) {\n      return yForLegend(id, i) + 4;\n    }; // Define g for legend area\n\n\n    l = $$.legend.selectAll('.' + CLASS.legendItem).data(targetIds).enter().append('g').attr('class', function (id) {\n      return $$.generateClass(CLASS.legendItem, id);\n    }).style('visibility', function (id) {\n      return $$.isLegendToShow(id) ? 'visible' : 'hidden';\n    }).style('cursor', 'pointer').on('click', function (id) {\n      if (config.legend_item_onclick) {\n        config.legend_item_onclick.call($$, id);\n      } else {\n        if ($$.d3.event.altKey) {\n          $$.api.hide();\n          $$.api.show(id);\n        } else {\n          $$.api.toggle(id);\n          $$.isTargetToShow(id) ? $$.api.focus(id) : $$.api.revert();\n        }\n      }\n    }).on('mouseover', function (id) {\n      if (config.legend_item_onmouseover) {\n        config.legend_item_onmouseover.call($$, id);\n      } else {\n        $$.d3.select(this).classed(CLASS.legendItemFocused, true);\n\n        if (!$$.transiting && $$.isTargetToShow(id)) {\n          $$.api.focus(id);\n        }\n      }\n    }).on('mouseout', function (id) {\n      if (config.legend_item_onmouseout) {\n        config.legend_item_onmouseout.call($$, id);\n      } else {\n        $$.d3.select(this).classed(CLASS.legendItemFocused, false);\n        $$.api.revert();\n      }\n    });\n    l.append('text').text(function (id) {\n      return isDefined(config.data_names[id]) ? config.data_names[id] : id;\n    }).each(function (id, i) {\n      updatePositions(this, id, i);\n    }).style(\"pointer-events\", \"none\").attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendText : -200).attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendText);\n    l.append('rect').attr(\"class\", CLASS.legendItemEvent).style('fill-opacity', 0).attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendRect : -200).attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendRect);\n    l.append('line').attr('class', CLASS.legendItemTile).style('stroke', $$.color).style(\"pointer-events\", \"none\").attr('x1', $$.isLegendRight || $$.isLegendInset ? x1ForLegendTile : -200).attr('y1', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendTile).attr('x2', $$.isLegendRight || $$.isLegendInset ? x2ForLegendTile : -200).attr('y2', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendTile).attr('stroke-width', config.legend_item_tile_height); // Set background for inset legend\n\n    background = $$.legend.select('.' + CLASS.legendBackground + ' rect');\n\n    if ($$.isLegendInset && maxWidth > 0 && background.size() === 0) {\n      background = $$.legend.insert('g', '.' + CLASS.legendItem).attr(\"class\", CLASS.legendBackground).append('rect');\n    }\n\n    texts = $$.legend.selectAll('text').data(targetIds).text(function (id) {\n      return isDefined(config.data_names[id]) ? config.data_names[id] : id;\n    }) // MEMO: needed for update\n    .each(function (id, i) {\n      updatePositions(this, id, i);\n    });\n    (withTransition ? texts.transition() : texts).attr('x', xForLegendText).attr('y', yForLegendText);\n    rects = $$.legend.selectAll('rect.' + CLASS.legendItemEvent).data(targetIds);\n    (withTransition ? rects.transition() : rects).attr('width', function (id) {\n      return widths[id];\n    }).attr('height', function (id) {\n      return heights[id];\n    }).attr('x', xForLegendRect).attr('y', yForLegendRect);\n    tiles = $$.legend.selectAll('line.' + CLASS.legendItemTile).data(targetIds);\n    (withTransition ? tiles.transition() : tiles).style('stroke', $$.levelColor ? function (id) {\n      return $$.levelColor($$.cache[id].values[0].value);\n    } : $$.color).attr('x1', x1ForLegendTile).attr('y1', yForLegendTile).attr('x2', x2ForLegendTile).attr('y2', yForLegendTile);\n\n    if (background) {\n      (withTransition ? background.transition() : background).attr('height', $$.getLegendHeight() - 12).attr('width', maxWidth * (step + 1) + 10);\n    } // toggle legend state\n\n\n    $$.legend.selectAll('.' + CLASS.legendItem).classed(CLASS.legendItemHidden, function (id) {\n      return !$$.isTargetToShow(id);\n    }); // Update all to reflect change of legend\n\n    $$.updateLegendItemWidth(maxWidth);\n    $$.updateLegendItemHeight(maxHeight);\n    $$.updateLegendStep(step); // Update size and scale\n\n    $$.updateSizes();\n    $$.updateScales();\n    $$.updateSvgSize(); // Update g positions\n\n    $$.transformAll(withTransitionForTransform, transitions);\n    $$.legendHasRendered = true;\n  };\n\n  ChartInternal.prototype.initRegion = function () {\n    var $$ = this;\n    $$.region = $$.main.append('g').attr(\"clip-path\", $$.clipPath).attr(\"class\", CLASS.regions);\n  };\n\n  ChartInternal.prototype.updateRegion = function (duration) {\n    var $$ = this,\n        config = $$.config; // hide if arc type\n\n    $$.region.style('visibility', $$.hasArcType() ? 'hidden' : 'visible');\n    var mainRegion = $$.main.select('.' + CLASS.regions).selectAll('.' + CLASS.region).data(config.regions);\n    var mainRegionEnter = mainRegion.enter().append('rect').attr(\"x\", $$.regionX.bind($$)).attr(\"y\", $$.regionY.bind($$)).attr(\"width\", $$.regionWidth.bind($$)).attr(\"height\", $$.regionHeight.bind($$)).style(\"fill-opacity\", 0);\n    $$.mainRegion = mainRegionEnter.merge(mainRegion).attr('class', $$.classRegion.bind($$));\n    mainRegion.exit().transition().duration(duration).style(\"opacity\", 0).remove();\n  };\n\n  ChartInternal.prototype.redrawRegion = function (withTransition, transition) {\n    var $$ = this,\n        regions = $$.mainRegion;\n    return [(withTransition ? regions.transition(transition) : regions).attr(\"x\", $$.regionX.bind($$)).attr(\"y\", $$.regionY.bind($$)).attr(\"width\", $$.regionWidth.bind($$)).attr(\"height\", $$.regionHeight.bind($$)).style(\"fill-opacity\", function (d) {\n      return isValue(d.opacity) ? d.opacity : 0.1;\n    })];\n  };\n\n  ChartInternal.prototype.regionX = function (d) {\n    var $$ = this,\n        config = $$.config,\n        xPos,\n        yScale = d.axis === 'y' ? $$.y : $$.y2;\n\n    if (d.axis === 'y' || d.axis === 'y2') {\n      xPos = config.axis_rotated ? 'start' in d ? yScale(d.start) : 0 : 0;\n    } else {\n      xPos = config.axis_rotated ? 0 : 'start' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start) : 0;\n    }\n\n    return xPos;\n  };\n\n  ChartInternal.prototype.regionY = function (d) {\n    var $$ = this,\n        config = $$.config,\n        yPos,\n        yScale = d.axis === 'y' ? $$.y : $$.y2;\n\n    if (d.axis === 'y' || d.axis === 'y2') {\n      yPos = config.axis_rotated ? 0 : 'end' in d ? yScale(d.end) : 0;\n    } else {\n      yPos = config.axis_rotated ? 'start' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start) : 0 : 0;\n    }\n\n    return yPos;\n  };\n\n  ChartInternal.prototype.regionWidth = function (d) {\n    var $$ = this,\n        config = $$.config,\n        start = $$.regionX(d),\n        end,\n        yScale = d.axis === 'y' ? $$.y : $$.y2;\n\n    if (d.axis === 'y' || d.axis === 'y2') {\n      end = config.axis_rotated ? 'end' in d ? yScale(d.end) : $$.width : $$.width;\n    } else {\n      end = config.axis_rotated ? $$.width : 'end' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end) : $$.width;\n    }\n\n    return end < start ? 0 : end - start;\n  };\n\n  ChartInternal.prototype.regionHeight = function (d) {\n    var $$ = this,\n        config = $$.config,\n        start = this.regionY(d),\n        end,\n        yScale = d.axis === 'y' ? $$.y : $$.y2;\n\n    if (d.axis === 'y' || d.axis === 'y2') {\n      end = config.axis_rotated ? $$.height : 'start' in d ? yScale(d.start) : $$.height;\n    } else {\n      end = config.axis_rotated ? 'end' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end) : $$.height : $$.height;\n    }\n\n    return end < start ? 0 : end - start;\n  };\n\n  ChartInternal.prototype.isRegionOnX = function (d) {\n    return !d.axis || d.axis === 'x';\n  };\n\n  ChartInternal.prototype.getScale = function (min, max, forTimeseries) {\n    return (forTimeseries ? this.d3.scaleTime() : this.d3.scaleLinear()).range([min, max]);\n  };\n\n  ChartInternal.prototype.getX = function (min, max, domain, offset) {\n    var $$ = this,\n        scale = $$.getScale(min, max, $$.isTimeSeries()),\n        _scale = domain ? scale.domain(domain) : scale,\n        key; // Define customized scale if categorized axis\n\n\n    if ($$.isCategorized()) {\n      offset = offset || function () {\n        return 0;\n      };\n\n      scale = function scale(d, raw) {\n        var v = _scale(d) + offset(d);\n        return raw ? v : Math.ceil(v);\n      };\n    } else {\n      scale = function scale(d, raw) {\n        var v = _scale(d);\n\n        return raw ? v : Math.ceil(v);\n      };\n    } // define functions\n\n\n    for (key in _scale) {\n      scale[key] = _scale[key];\n    }\n\n    scale.orgDomain = function () {\n      return _scale.domain();\n    }; // define custom domain() for categorized axis\n\n\n    if ($$.isCategorized()) {\n      scale.domain = function (domain) {\n        if (!arguments.length) {\n          domain = this.orgDomain();\n          return [domain[0], domain[1] + 1];\n        }\n\n        _scale.domain(domain);\n\n        return scale;\n      };\n    }\n\n    return scale;\n  };\n\n  ChartInternal.prototype.getY = function (min, max, domain) {\n    var scale = this.getScale(min, max, this.isTimeSeriesY());\n\n    if (domain) {\n      scale.domain(domain);\n    }\n\n    return scale;\n  };\n\n  ChartInternal.prototype.getYScale = function (id) {\n    return this.axis.getId(id) === 'y2' ? this.y2 : this.y;\n  };\n\n  ChartInternal.prototype.getSubYScale = function (id) {\n    return this.axis.getId(id) === 'y2' ? this.subY2 : this.subY;\n  };\n\n  ChartInternal.prototype.updateScales = function () {\n    var $$ = this,\n        config = $$.config,\n        forInit = !$$.x; // update edges\n\n    $$.xMin = config.axis_rotated ? 1 : 0;\n    $$.xMax = config.axis_rotated ? $$.height : $$.width;\n    $$.yMin = config.axis_rotated ? 0 : $$.height;\n    $$.yMax = config.axis_rotated ? $$.width : 1;\n    $$.subXMin = $$.xMin;\n    $$.subXMax = $$.xMax;\n    $$.subYMin = config.axis_rotated ? 0 : $$.height2;\n    $$.subYMax = config.axis_rotated ? $$.width2 : 1; // update scales\n\n    $$.x = $$.getX($$.xMin, $$.xMax, forInit ? undefined : $$.x.orgDomain(), function () {\n      return $$.xAxis.tickOffset();\n    });\n    $$.y = $$.getY($$.yMin, $$.yMax, forInit ? config.axis_y_default : $$.y.domain());\n    $$.y2 = $$.getY($$.yMin, $$.yMax, forInit ? config.axis_y2_default : $$.y2.domain());\n    $$.subX = $$.getX($$.xMin, $$.xMax, $$.orgXDomain, function (d) {\n      return d % 1 ? 0 : $$.subXAxis.tickOffset();\n    });\n    $$.subY = $$.getY($$.subYMin, $$.subYMax, forInit ? config.axis_y_default : $$.subY.domain());\n    $$.subY2 = $$.getY($$.subYMin, $$.subYMax, forInit ? config.axis_y2_default : $$.subY2.domain()); // update axes\n\n    $$.xAxisTickFormat = $$.axis.getXAxisTickFormat();\n    $$.xAxisTickValues = $$.axis.getXAxisTickValues();\n    $$.yAxisTickValues = $$.axis.getYAxisTickValues();\n    $$.y2AxisTickValues = $$.axis.getY2AxisTickValues();\n    $$.xAxis = $$.axis.getXAxis($$.x, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues, config.axis_x_tick_outer);\n    $$.subXAxis = $$.axis.getXAxis($$.subX, $$.subXOrient, $$.xAxisTickFormat, $$.xAxisTickValues, config.axis_x_tick_outer);\n    $$.yAxis = $$.axis.getYAxis($$.y, $$.yOrient, config.axis_y_tick_format, $$.yAxisTickValues, config.axis_y_tick_outer);\n    $$.y2Axis = $$.axis.getYAxis($$.y2, $$.y2Orient, config.axis_y2_tick_format, $$.y2AxisTickValues, config.axis_y2_tick_outer); // Set initialized scales to brush and zoom\n\n    if (!forInit) {\n      if ($$.brush) {\n        $$.brush.updateScale($$.subX);\n      }\n    } // update for arc\n\n\n    if ($$.updateArc) {\n      $$.updateArc();\n    }\n  };\n\n  ChartInternal.prototype.selectPoint = function (target, d, i) {\n    var $$ = this,\n        config = $$.config,\n        cx = (config.axis_rotated ? $$.circleY : $$.circleX).bind($$),\n        cy = (config.axis_rotated ? $$.circleX : $$.circleY).bind($$),\n        r = $$.pointSelectR.bind($$);\n    config.data_onselected.call($$.api, d, target.node()); // add selected-circle on low layer g\n\n    $$.main.select('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(d.id)).selectAll('.' + CLASS.selectedCircle + '-' + i).data([d]).enter().append('circle').attr(\"class\", function () {\n      return $$.generateClass(CLASS.selectedCircle, i);\n    }).attr(\"cx\", cx).attr(\"cy\", cy).attr(\"stroke\", function () {\n      return $$.color(d);\n    }).attr(\"r\", function (d) {\n      return $$.pointSelectR(d) * 1.4;\n    }).transition().duration(100).attr(\"r\", r);\n  };\n\n  ChartInternal.prototype.unselectPoint = function (target, d, i) {\n    var $$ = this;\n    $$.config.data_onunselected.call($$.api, d, target.node()); // remove selected-circle from low layer g\n\n    $$.main.select('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(d.id)).selectAll('.' + CLASS.selectedCircle + '-' + i).transition().duration(100).attr('r', 0).remove();\n  };\n\n  ChartInternal.prototype.togglePoint = function (selected, target, d, i) {\n    selected ? this.selectPoint(target, d, i) : this.unselectPoint(target, d, i);\n  };\n\n  ChartInternal.prototype.selectPath = function (target, d) {\n    var $$ = this;\n    $$.config.data_onselected.call($$, d, target.node());\n\n    if ($$.config.interaction_brighten) {\n      target.transition().duration(100).style(\"fill\", function () {\n        return $$.d3.rgb($$.color(d)).brighter(0.75);\n      });\n    }\n  };\n\n  ChartInternal.prototype.unselectPath = function (target, d) {\n    var $$ = this;\n    $$.config.data_onunselected.call($$, d, target.node());\n\n    if ($$.config.interaction_brighten) {\n      target.transition().duration(100).style(\"fill\", function () {\n        return $$.color(d);\n      });\n    }\n  };\n\n  ChartInternal.prototype.togglePath = function (selected, target, d, i) {\n    selected ? this.selectPath(target, d, i) : this.unselectPath(target, d, i);\n  };\n\n  ChartInternal.prototype.getToggle = function (that, d) {\n    var $$ = this,\n        toggle;\n\n    if (that.nodeName === 'circle') {\n      if ($$.isStepType(d)) {\n        // circle is hidden in step chart, so treat as within the click area\n        toggle = function toggle() {}; // TODO: how to select step chart?\n\n      } else {\n        toggle = $$.togglePoint;\n      }\n    } else if (that.nodeName === 'path') {\n      toggle = $$.togglePath;\n    }\n\n    return toggle;\n  };\n\n  ChartInternal.prototype.toggleShape = function (that, d, i) {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config,\n        shape = d3.select(that),\n        isSelected = shape.classed(CLASS.SELECTED),\n        toggle = $$.getToggle(that, d).bind($$);\n\n    if (config.data_selection_enabled && config.data_selection_isselectable(d)) {\n      if (!config.data_selection_multiple) {\n        $$.main.selectAll('.' + CLASS.shapes + (config.data_selection_grouped ? $$.getTargetSelectorSuffix(d.id) : \"\")).selectAll('.' + CLASS.shape).each(function (d, i) {\n          var shape = d3.select(this);\n\n          if (shape.classed(CLASS.SELECTED)) {\n            toggle(false, shape.classed(CLASS.SELECTED, false), d, i);\n          }\n        });\n      }\n\n      shape.classed(CLASS.SELECTED, !isSelected);\n      toggle(!isSelected, shape, d, i);\n    }\n  };\n\n  ChartInternal.prototype.initBar = function () {\n    var $$ = this;\n    $$.main.select('.' + CLASS.chart).append(\"g\").attr(\"class\", CLASS.chartBars);\n  };\n\n  ChartInternal.prototype.updateTargetsForBar = function (targets) {\n    var $$ = this,\n        config = $$.config,\n        mainBars,\n        mainBarEnter,\n        classChartBar = $$.classChartBar.bind($$),\n        classBars = $$.classBars.bind($$),\n        classFocus = $$.classFocus.bind($$);\n    mainBars = $$.main.select('.' + CLASS.chartBars).selectAll('.' + CLASS.chartBar).data(targets).attr('class', function (d) {\n      return classChartBar(d) + classFocus(d);\n    });\n    mainBarEnter = mainBars.enter().append('g').attr('class', classChartBar).style(\"pointer-events\", \"none\"); // Bars for each data\n\n    mainBarEnter.append('g').attr(\"class\", classBars).style(\"cursor\", function (d) {\n      return config.data_selection_isselectable(d) ? \"pointer\" : null;\n    });\n  };\n\n  ChartInternal.prototype.updateBar = function (durationForExit) {\n    var $$ = this,\n        barData = $$.barData.bind($$),\n        classBar = $$.classBar.bind($$),\n        initialOpacity = $$.initialOpacity.bind($$),\n        color = function color(d) {\n      return $$.color(d.id);\n    };\n\n    var mainBar = $$.main.selectAll('.' + CLASS.bars).selectAll('.' + CLASS.bar).data(barData);\n    var mainBarEnter = mainBar.enter().append('path').attr(\"class\", classBar).style(\"stroke\", color).style(\"fill\", color);\n    $$.mainBar = mainBarEnter.merge(mainBar).style(\"opacity\", initialOpacity);\n    mainBar.exit().transition().duration(durationForExit).style(\"opacity\", 0);\n  };\n\n  ChartInternal.prototype.redrawBar = function (drawBar, withTransition, transition) {\n    return [(withTransition ? this.mainBar.transition(transition) : this.mainBar).attr('d', drawBar).style(\"stroke\", this.color).style(\"fill\", this.color).style(\"opacity\", 1)];\n  };\n\n  ChartInternal.prototype.getBarW = function (axis, barTargetsNum) {\n    var $$ = this,\n        config = $$.config,\n        w = typeof config.bar_width === 'number' ? config.bar_width : barTargetsNum ? axis.tickInterval() * config.bar_width_ratio / barTargetsNum : 0;\n    return config.bar_width_max && w > config.bar_width_max ? config.bar_width_max : w;\n  };\n\n  ChartInternal.prototype.getBars = function (i, id) {\n    var $$ = this;\n    return (id ? $$.main.selectAll('.' + CLASS.bars + $$.getTargetSelectorSuffix(id)) : $$.main).selectAll('.' + CLASS.bar + (isValue(i) ? '-' + i : ''));\n  };\n\n  ChartInternal.prototype.expandBars = function (i, id, reset) {\n    var $$ = this;\n\n    if (reset) {\n      $$.unexpandBars();\n    }\n\n    $$.getBars(i, id).classed(CLASS.EXPANDED, true);\n  };\n\n  ChartInternal.prototype.unexpandBars = function (i) {\n    var $$ = this;\n    $$.getBars(i).classed(CLASS.EXPANDED, false);\n  };\n\n  ChartInternal.prototype.generateDrawBar = function (barIndices, isSub) {\n    var $$ = this,\n        config = $$.config,\n        getPoints = $$.generateGetBarPoints(barIndices, isSub);\n    return function (d, i) {\n      // 4 points that make a bar\n      var points = getPoints(d, i); // switch points if axis is rotated, not applicable for sub chart\n\n      var indexX = config.axis_rotated ? 1 : 0;\n      var indexY = config.axis_rotated ? 0 : 1;\n      var path = 'M ' + points[0][indexX] + ',' + points[0][indexY] + ' ' + 'L' + points[1][indexX] + ',' + points[1][indexY] + ' ' + 'L' + points[2][indexX] + ',' + points[2][indexY] + ' ' + 'L' + points[3][indexX] + ',' + points[3][indexY] + ' ' + 'z';\n      return path;\n    };\n  };\n\n  ChartInternal.prototype.generateGetBarPoints = function (barIndices, isSub) {\n    var $$ = this,\n        axis = isSub ? $$.subXAxis : $$.xAxis,\n        barTargetsNum = barIndices.__max__ + 1,\n        barW = $$.getBarW(axis, barTargetsNum),\n        barX = $$.getShapeX(barW, barTargetsNum, barIndices, !!isSub),\n        barY = $$.getShapeY(!!isSub),\n        barOffset = $$.getShapeOffset($$.isBarType, barIndices, !!isSub),\n        barSpaceOffset = barW * ($$.config.bar_space / 2),\n        yScale = isSub ? $$.getSubYScale : $$.getYScale;\n    return function (d, i) {\n      var y0 = yScale.call($$, d.id)(0),\n          offset = barOffset(d, i) || y0,\n          // offset is for stacked bar chart\n      posX = barX(d),\n          posY = barY(d); // fix posY not to overflow opposite quadrant\n\n      if ($$.config.axis_rotated) {\n        if (0 < d.value && posY < y0 || d.value < 0 && y0 < posY) {\n          posY = y0;\n        }\n      } // 4 points that make a bar\n\n\n      return [[posX + barSpaceOffset, offset], [posX + barSpaceOffset, posY - (y0 - offset)], [posX + barW - barSpaceOffset, posY - (y0 - offset)], [posX + barW - barSpaceOffset, offset]];\n    };\n  };\n\n  ChartInternal.prototype.isWithinBar = function (mouse, that) {\n    var box = that.getBoundingClientRect(),\n        seg0 = that.pathSegList.getItem(0),\n        seg1 = that.pathSegList.getItem(1),\n        x = Math.min(seg0.x, seg1.x),\n        y = Math.min(seg0.y, seg1.y),\n        w = box.width,\n        h = box.height,\n        offset = 2,\n        sx = x - offset,\n        ex = x + w + offset,\n        sy = y + h + offset,\n        ey = y - offset;\n    return sx < mouse[0] && mouse[0] < ex && ey < mouse[1] && mouse[1] < sy;\n  };\n\n  ChartInternal.prototype.getShapeIndices = function (typeFilter) {\n    var $$ = this,\n        config = $$.config,\n        indices = {},\n        i = 0,\n        j,\n        k;\n    $$.filterTargetsToShow($$.data.targets.filter(typeFilter, $$)).forEach(function (d) {\n      for (j = 0; j < config.data_groups.length; j++) {\n        if (config.data_groups[j].indexOf(d.id) < 0) {\n          continue;\n        }\n\n        for (k = 0; k < config.data_groups[j].length; k++) {\n          if (config.data_groups[j][k] in indices) {\n            indices[d.id] = indices[config.data_groups[j][k]];\n            break;\n          }\n        }\n      }\n\n      if (isUndefined(indices[d.id])) {\n        indices[d.id] = i++;\n      }\n    });\n    indices.__max__ = i - 1;\n    return indices;\n  };\n\n  ChartInternal.prototype.getShapeX = function (offset, targetsNum, indices, isSub) {\n    var $$ = this,\n        scale = isSub ? $$.subX : $$.x;\n    return function (d) {\n      var index = d.id in indices ? indices[d.id] : 0;\n      return d.x || d.x === 0 ? scale(d.x) - offset * (targetsNum / 2 - index) : 0;\n    };\n  };\n\n  ChartInternal.prototype.getShapeY = function (isSub) {\n    var $$ = this;\n    return function (d) {\n      var scale = isSub ? $$.getSubYScale(d.id) : $$.getYScale(d.id);\n      return scale(d.value);\n    };\n  };\n\n  ChartInternal.prototype.getShapeOffset = function (typeFilter, indices, isSub) {\n    var $$ = this,\n        targets = $$.orderTargets($$.filterTargetsToShow($$.data.targets.filter(typeFilter, $$))),\n        targetIds = targets.map(function (t) {\n      return t.id;\n    });\n    return function (d, i) {\n      var scale = isSub ? $$.getSubYScale(d.id) : $$.getYScale(d.id),\n          y0 = scale(0),\n          offset = y0;\n      targets.forEach(function (t) {\n        var values = $$.isStepType(d) ? $$.convertValuesToStep(t.values) : t.values;\n\n        if (t.id === d.id || indices[t.id] !== indices[d.id]) {\n          return;\n        }\n\n        if (targetIds.indexOf(t.id) < targetIds.indexOf(d.id)) {\n          // check if the x values line up\n          if (typeof values[i] === 'undefined' || +values[i].x !== +d.x) {\n            // \"+\" for timeseries\n            // if not, try to find the value that does line up\n            i = -1;\n            values.forEach(function (v, j) {\n              if (v.x === d.x) {\n                i = j;\n              }\n            });\n          }\n\n          if (i in values && values[i].value * d.value >= 0) {\n            offset += scale(values[i].value) - y0;\n          }\n        }\n      });\n      return offset;\n    };\n  };\n\n  ChartInternal.prototype.isWithinShape = function (that, d) {\n    var $$ = this,\n        shape = $$.d3.select(that),\n        isWithin;\n\n    if (!$$.isTargetToShow(d.id)) {\n      isWithin = false;\n    } else if (that.nodeName === 'circle') {\n      isWithin = $$.isStepType(d) ? $$.isWithinStep(that, $$.getYScale(d.id)(d.value)) : $$.isWithinCircle(that, $$.pointSelectR(d) * 1.5);\n    } else if (that.nodeName === 'path') {\n      isWithin = shape.classed(CLASS.bar) ? $$.isWithinBar($$.d3.mouse(that), that) : true;\n    }\n\n    return isWithin;\n  };\n\n  ChartInternal.prototype.getInterpolate = function (d) {\n    var $$ = this,\n        d3 = $$.d3,\n        types = {\n      'linear': d3.curveLinear,\n      'linear-closed': d3.curveLinearClosed,\n      'basis': d3.curveBasis,\n      'basis-open': d3.curveBasisOpen,\n      'basis-closed': d3.curveBasisClosed,\n      'bundle': d3.curveBundle,\n      'cardinal': d3.curveCardinal,\n      'cardinal-open': d3.curveCardinalOpen,\n      'cardinal-closed': d3.curveCardinalClosed,\n      'monotone': d3.curveMonotoneX,\n      'step': d3.curveStep,\n      'step-before': d3.curveStepBefore,\n      'step-after': d3.curveStepAfter\n    },\n        type;\n\n    if ($$.isSplineType(d)) {\n      type = types[$$.config.spline_interpolation_type] || types.cardinal;\n    } else if ($$.isStepType(d)) {\n      type = types[$$.config.line_step_type];\n    } else {\n      type = types.linear;\n    }\n\n    return type;\n  };\n\n  ChartInternal.prototype.initLine = function () {\n    var $$ = this;\n    $$.main.select('.' + CLASS.chart).append(\"g\").attr(\"class\", CLASS.chartLines);\n  };\n\n  ChartInternal.prototype.updateTargetsForLine = function (targets) {\n    var $$ = this,\n        config = $$.config,\n        mainLines,\n        mainLineEnter,\n        classChartLine = $$.classChartLine.bind($$),\n        classLines = $$.classLines.bind($$),\n        classAreas = $$.classAreas.bind($$),\n        classCircles = $$.classCircles.bind($$),\n        classFocus = $$.classFocus.bind($$);\n    mainLines = $$.main.select('.' + CLASS.chartLines).selectAll('.' + CLASS.chartLine).data(targets).attr('class', function (d) {\n      return classChartLine(d) + classFocus(d);\n    });\n    mainLineEnter = mainLines.enter().append('g').attr('class', classChartLine).style('opacity', 0).style(\"pointer-events\", \"none\"); // Lines for each data\n\n    mainLineEnter.append('g').attr(\"class\", classLines); // Areas\n\n    mainLineEnter.append('g').attr('class', classAreas); // Circles for each data point on lines\n\n    mainLineEnter.append('g').attr(\"class\", function (d) {\n      return $$.generateClass(CLASS.selectedCircles, d.id);\n    });\n    mainLineEnter.append('g').attr(\"class\", classCircles).style(\"cursor\", function (d) {\n      return config.data_selection_isselectable(d) ? \"pointer\" : null;\n    }); // Update date for selected circles\n\n    targets.forEach(function (t) {\n      $$.main.selectAll('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(t.id)).selectAll('.' + CLASS.selectedCircle).each(function (d) {\n        d.value = t.values[d.index].value;\n      });\n    }); // MEMO: can not keep same color...\n    //mainLineUpdate.exit().remove();\n  };\n\n  ChartInternal.prototype.updateLine = function (durationForExit) {\n    var $$ = this;\n    var mainLine = $$.main.selectAll('.' + CLASS.lines).selectAll('.' + CLASS.line).data($$.lineData.bind($$));\n    var mainLineEnter = mainLine.enter().append('path').attr('class', $$.classLine.bind($$)).style(\"stroke\", $$.color);\n    $$.mainLine = mainLineEnter.merge(mainLine).style(\"opacity\", $$.initialOpacity.bind($$)).style('shape-rendering', function (d) {\n      return $$.isStepType(d) ? 'crispEdges' : '';\n    }).attr('transform', null);\n    mainLine.exit().transition().duration(durationForExit).style('opacity', 0);\n  };\n\n  ChartInternal.prototype.redrawLine = function (drawLine, withTransition, transition) {\n    return [(withTransition ? this.mainLine.transition(transition) : this.mainLine).attr(\"d\", drawLine).style(\"stroke\", this.color).style(\"opacity\", 1)];\n  };\n\n  ChartInternal.prototype.generateDrawLine = function (lineIndices, isSub) {\n    var $$ = this,\n        config = $$.config,\n        line = $$.d3.line(),\n        getPoints = $$.generateGetLinePoints(lineIndices, isSub),\n        yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale,\n        xValue = function xValue(d) {\n      return (isSub ? $$.subxx : $$.xx).call($$, d);\n    },\n        yValue = function yValue(d, i) {\n      return config.data_groups.length > 0 ? getPoints(d, i)[0][1] : yScaleGetter.call($$, d.id)(d.value);\n    };\n\n    line = config.axis_rotated ? line.x(yValue).y(xValue) : line.x(xValue).y(yValue);\n\n    if (!config.line_connectNull) {\n      line = line.defined(function (d) {\n        return d.value != null;\n      });\n    }\n\n    return function (d) {\n      var values = config.line_connectNull ? $$.filterRemoveNull(d.values) : d.values,\n          x = isSub ? $$.subX : $$.x,\n          y = yScaleGetter.call($$, d.id),\n          x0 = 0,\n          y0 = 0,\n          path;\n\n      if ($$.isLineType(d)) {\n        if (config.data_regions[d.id]) {\n          path = $$.lineWithRegions(values, x, y, config.data_regions[d.id]);\n        } else {\n          if ($$.isStepType(d)) {\n            values = $$.convertValuesToStep(values);\n          }\n\n          path = line.curve($$.getInterpolate(d))(values);\n        }\n      } else {\n        if (values[0]) {\n          x0 = x(values[0].x);\n          y0 = y(values[0].value);\n        }\n\n        path = config.axis_rotated ? \"M \" + y0 + \" \" + x0 : \"M \" + x0 + \" \" + y0;\n      }\n\n      return path ? path : \"M 0 0\";\n    };\n  };\n\n  ChartInternal.prototype.generateGetLinePoints = function (lineIndices, isSub) {\n    // partial duplication of generateGetBarPoints\n    var $$ = this,\n        config = $$.config,\n        lineTargetsNum = lineIndices.__max__ + 1,\n        x = $$.getShapeX(0, lineTargetsNum, lineIndices, !!isSub),\n        y = $$.getShapeY(!!isSub),\n        lineOffset = $$.getShapeOffset($$.isLineType, lineIndices, !!isSub),\n        yScale = isSub ? $$.getSubYScale : $$.getYScale;\n    return function (d, i) {\n      var y0 = yScale.call($$, d.id)(0),\n          offset = lineOffset(d, i) || y0,\n          // offset is for stacked area chart\n      posX = x(d),\n          posY = y(d); // fix posY not to overflow opposite quadrant\n\n      if (config.axis_rotated) {\n        if (0 < d.value && posY < y0 || d.value < 0 && y0 < posY) {\n          posY = y0;\n        }\n      } // 1 point that marks the line position\n\n\n      return [[posX, posY - (y0 - offset)], [posX, posY - (y0 - offset)], // needed for compatibility\n      [posX, posY - (y0 - offset)], // needed for compatibility\n      [posX, posY - (y0 - offset)] // needed for compatibility\n      ];\n    };\n  };\n\n  ChartInternal.prototype.lineWithRegions = function (d, x, y, _regions) {\n    var $$ = this,\n        config = $$.config,\n        prev = -1,\n        i,\n        j,\n        s = \"M\",\n        sWithRegion,\n        xp,\n        yp,\n        dx,\n        dy,\n        dd,\n        diff,\n        diffx2,\n        xOffset = $$.isCategorized() ? 0.5 : 0,\n        xValue,\n        yValue,\n        regions = [];\n\n    function isWithinRegions(x, regions) {\n      var i;\n\n      for (i = 0; i < regions.length; i++) {\n        if (regions[i].start < x && x <= regions[i].end) {\n          return true;\n        }\n      }\n\n      return false;\n    } // Check start/end of regions\n\n\n    if (isDefined(_regions)) {\n      for (i = 0; i < _regions.length; i++) {\n        regions[i] = {};\n\n        if (isUndefined(_regions[i].start)) {\n          regions[i].start = d[0].x;\n        } else {\n          regions[i].start = $$.isTimeSeries() ? $$.parseDate(_regions[i].start) : _regions[i].start;\n        }\n\n        if (isUndefined(_regions[i].end)) {\n          regions[i].end = d[d.length - 1].x;\n        } else {\n          regions[i].end = $$.isTimeSeries() ? $$.parseDate(_regions[i].end) : _regions[i].end;\n        }\n      }\n    } // Set scales\n\n\n    xValue = config.axis_rotated ? function (d) {\n      return y(d.value);\n    } : function (d) {\n      return x(d.x);\n    };\n    yValue = config.axis_rotated ? function (d) {\n      return x(d.x);\n    } : function (d) {\n      return y(d.value);\n    }; // Define svg generator function for region\n\n    function generateM(points) {\n      return 'M' + points[0][0] + ' ' + points[0][1] + ' ' + points[1][0] + ' ' + points[1][1];\n    }\n\n    if ($$.isTimeSeries()) {\n      sWithRegion = function sWithRegion(d0, d1, j, diff) {\n        var x0 = d0.x.getTime(),\n            x_diff = d1.x - d0.x,\n            xv0 = new Date(x0 + x_diff * j),\n            xv1 = new Date(x0 + x_diff * (j + diff)),\n            points;\n\n        if (config.axis_rotated) {\n          points = [[y(yp(j)), x(xv0)], [y(yp(j + diff)), x(xv1)]];\n        } else {\n          points = [[x(xv0), y(yp(j))], [x(xv1), y(yp(j + diff))]];\n        }\n\n        return generateM(points);\n      };\n    } else {\n      sWithRegion = function sWithRegion(d0, d1, j, diff) {\n        var points;\n\n        if (config.axis_rotated) {\n          points = [[y(yp(j), true), x(xp(j))], [y(yp(j + diff), true), x(xp(j + diff))]];\n        } else {\n          points = [[x(xp(j), true), y(yp(j))], [x(xp(j + diff), true), y(yp(j + diff))]];\n        }\n\n        return generateM(points);\n      };\n    } // Generate\n\n\n    for (i = 0; i < d.length; i++) {\n      // Draw as normal\n      if (isUndefined(regions) || !isWithinRegions(d[i].x, regions)) {\n        s += \" \" + xValue(d[i]) + \" \" + yValue(d[i]);\n      } // Draw with region // TODO: Fix for horizotal charts\n      else {\n          xp = $$.getScale(d[i - 1].x + xOffset, d[i].x + xOffset, $$.isTimeSeries());\n          yp = $$.getScale(d[i - 1].value, d[i].value);\n          dx = x(d[i].x) - x(d[i - 1].x);\n          dy = y(d[i].value) - y(d[i - 1].value);\n          dd = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n          diff = 2 / dd;\n          diffx2 = diff * 2;\n\n          for (j = diff; j <= 1; j += diffx2) {\n            s += sWithRegion(d[i - 1], d[i], j, diff);\n          }\n        }\n\n      prev = d[i].x;\n    }\n\n    return s;\n  };\n\n  ChartInternal.prototype.updateArea = function (durationForExit) {\n    var $$ = this,\n        d3 = $$.d3;\n    var mainArea = $$.main.selectAll('.' + CLASS.areas).selectAll('.' + CLASS.area).data($$.lineData.bind($$));\n    var mainAreaEnter = mainArea.enter().append('path').attr(\"class\", $$.classArea.bind($$)).style(\"fill\", $$.color).style(\"opacity\", function () {\n      $$.orgAreaOpacity = +d3.select(this).style('opacity');\n      return 0;\n    });\n    $$.mainArea = mainAreaEnter.merge(mainArea).style(\"opacity\", $$.orgAreaOpacity);\n    mainArea.exit().transition().duration(durationForExit).style('opacity', 0);\n  };\n\n  ChartInternal.prototype.redrawArea = function (drawArea, withTransition, transition) {\n    return [(withTransition ? this.mainArea.transition(transition) : this.mainArea).attr(\"d\", drawArea).style(\"fill\", this.color).style(\"opacity\", this.orgAreaOpacity)];\n  };\n\n  ChartInternal.prototype.generateDrawArea = function (areaIndices, isSub) {\n    var $$ = this,\n        config = $$.config,\n        area = $$.d3.area(),\n        getPoints = $$.generateGetAreaPoints(areaIndices, isSub),\n        yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale,\n        xValue = function xValue(d) {\n      return (isSub ? $$.subxx : $$.xx).call($$, d);\n    },\n        value0 = function value0(d, i) {\n      return config.data_groups.length > 0 ? getPoints(d, i)[0][1] : yScaleGetter.call($$, d.id)($$.getAreaBaseValue(d.id));\n    },\n        value1 = function value1(d, i) {\n      return config.data_groups.length > 0 ? getPoints(d, i)[1][1] : yScaleGetter.call($$, d.id)(d.value);\n    };\n\n    area = config.axis_rotated ? area.x0(value0).x1(value1).y(xValue) : area.x(xValue).y0(config.area_above ? 0 : value0).y1(value1);\n\n    if (!config.line_connectNull) {\n      area = area.defined(function (d) {\n        return d.value !== null;\n      });\n    }\n\n    return function (d) {\n      var values = config.line_connectNull ? $$.filterRemoveNull(d.values) : d.values,\n          x0 = 0,\n          y0 = 0,\n          path;\n\n      if ($$.isAreaType(d)) {\n        if ($$.isStepType(d)) {\n          values = $$.convertValuesToStep(values);\n        }\n\n        path = area.curve($$.getInterpolate(d))(values);\n      } else {\n        if (values[0]) {\n          x0 = $$.x(values[0].x);\n          y0 = $$.getYScale(d.id)(values[0].value);\n        }\n\n        path = config.axis_rotated ? \"M \" + y0 + \" \" + x0 : \"M \" + x0 + \" \" + y0;\n      }\n\n      return path ? path : \"M 0 0\";\n    };\n  };\n\n  ChartInternal.prototype.getAreaBaseValue = function () {\n    return 0;\n  };\n\n  ChartInternal.prototype.generateGetAreaPoints = function (areaIndices, isSub) {\n    // partial duplication of generateGetBarPoints\n    var $$ = this,\n        config = $$.config,\n        areaTargetsNum = areaIndices.__max__ + 1,\n        x = $$.getShapeX(0, areaTargetsNum, areaIndices, !!isSub),\n        y = $$.getShapeY(!!isSub),\n        areaOffset = $$.getShapeOffset($$.isAreaType, areaIndices, !!isSub),\n        yScale = isSub ? $$.getSubYScale : $$.getYScale;\n    return function (d, i) {\n      var y0 = yScale.call($$, d.id)(0),\n          offset = areaOffset(d, i) || y0,\n          // offset is for stacked area chart\n      posX = x(d),\n          posY = y(d); // fix posY not to overflow opposite quadrant\n\n      if (config.axis_rotated) {\n        if (0 < d.value && posY < y0 || d.value < 0 && y0 < posY) {\n          posY = y0;\n        }\n      } // 1 point that marks the area position\n\n\n      return [[posX, offset], [posX, posY - (y0 - offset)], [posX, posY - (y0 - offset)], // needed for compatibility\n      [posX, offset] // needed for compatibility\n      ];\n    };\n  };\n\n  ChartInternal.prototype.updateCircle = function (cx, cy) {\n    var $$ = this;\n    var mainCircle = $$.main.selectAll('.' + CLASS.circles).selectAll('.' + CLASS.circle).data($$.lineOrScatterData.bind($$));\n    var mainCircleEnter = mainCircle.enter().append(\"circle\").attr(\"class\", $$.classCircle.bind($$)).attr(\"cx\", cx).attr(\"cy\", cy).attr(\"r\", $$.pointR.bind($$)).style(\"fill\", $$.color);\n    $$.mainCircle = mainCircleEnter.merge(mainCircle).style(\"opacity\", $$.initialOpacityForCircle.bind($$));\n    mainCircle.exit().style(\"opacity\", 0);\n  };\n\n  ChartInternal.prototype.redrawCircle = function (cx, cy, withTransition, transition) {\n    var $$ = this,\n        selectedCircles = $$.main.selectAll('.' + CLASS.selectedCircle);\n    return [(withTransition ? $$.mainCircle.transition(transition) : $$.mainCircle).style('opacity', this.opacityForCircle.bind($$)).style(\"fill\", $$.color).attr(\"cx\", cx).attr(\"cy\", cy), (withTransition ? selectedCircles.transition(transition) : selectedCircles).attr(\"cx\", cx).attr(\"cy\", cy)];\n  };\n\n  ChartInternal.prototype.circleX = function (d) {\n    return d.x || d.x === 0 ? this.x(d.x) : null;\n  };\n\n  ChartInternal.prototype.updateCircleY = function () {\n    var $$ = this,\n        lineIndices,\n        getPoints;\n\n    if ($$.config.data_groups.length > 0) {\n      lineIndices = $$.getShapeIndices($$.isLineType), getPoints = $$.generateGetLinePoints(lineIndices);\n\n      $$.circleY = function (d, i) {\n        return getPoints(d, i)[0][1];\n      };\n    } else {\n      $$.circleY = function (d) {\n        return $$.getYScale(d.id)(d.value);\n      };\n    }\n  };\n\n  ChartInternal.prototype.getCircles = function (i, id) {\n    var $$ = this;\n    return (id ? $$.main.selectAll('.' + CLASS.circles + $$.getTargetSelectorSuffix(id)) : $$.main).selectAll('.' + CLASS.circle + (isValue(i) ? '-' + i : ''));\n  };\n\n  ChartInternal.prototype.expandCircles = function (i, id, reset) {\n    var $$ = this,\n        r = $$.pointExpandedR.bind($$);\n\n    if (reset) {\n      $$.unexpandCircles();\n    }\n\n    $$.getCircles(i, id).classed(CLASS.EXPANDED, true).attr('r', r);\n  };\n\n  ChartInternal.prototype.unexpandCircles = function (i) {\n    var $$ = this,\n        r = $$.pointR.bind($$);\n    $$.getCircles(i).filter(function () {\n      return $$.d3.select(this).classed(CLASS.EXPANDED);\n    }).classed(CLASS.EXPANDED, false).attr('r', r);\n  };\n\n  ChartInternal.prototype.pointR = function (d) {\n    var $$ = this,\n        config = $$.config;\n    return $$.isStepType(d) ? 0 : isFunction(config.point_r) ? config.point_r(d) : config.point_r;\n  };\n\n  ChartInternal.prototype.pointExpandedR = function (d) {\n    var $$ = this,\n        config = $$.config;\n\n    if (config.point_focus_expand_enabled) {\n      return isFunction(config.point_focus_expand_r) ? config.point_focus_expand_r(d) : config.point_focus_expand_r ? config.point_focus_expand_r : $$.pointR(d) * 1.75;\n    } else {\n      return $$.pointR(d);\n    }\n  };\n\n  ChartInternal.prototype.pointSelectR = function (d) {\n    var $$ = this,\n        config = $$.config;\n    return isFunction(config.point_select_r) ? config.point_select_r(d) : config.point_select_r ? config.point_select_r : $$.pointR(d) * 4;\n  };\n\n  ChartInternal.prototype.isWithinCircle = function (that, r) {\n    var d3 = this.d3,\n        mouse = d3.mouse(that),\n        d3_this = d3.select(that),\n        cx = +d3_this.attr(\"cx\"),\n        cy = +d3_this.attr(\"cy\");\n    return Math.sqrt(Math.pow(cx - mouse[0], 2) + Math.pow(cy - mouse[1], 2)) < r;\n  };\n\n  ChartInternal.prototype.isWithinStep = function (that, y) {\n    return Math.abs(y - this.d3.mouse(that)[1]) < 30;\n  };\n\n  ChartInternal.prototype.getCurrentWidth = function () {\n    var $$ = this,\n        config = $$.config;\n    return config.size_width ? config.size_width : $$.getParentWidth();\n  };\n\n  ChartInternal.prototype.getCurrentHeight = function () {\n    var $$ = this,\n        config = $$.config,\n        h = config.size_height ? config.size_height : $$.getParentHeight();\n    return h > 0 ? h : 320 / ($$.hasType('gauge') && !config.gauge_fullCircle ? 2 : 1);\n  };\n\n  ChartInternal.prototype.getCurrentPaddingTop = function () {\n    var $$ = this,\n        config = $$.config,\n        padding = isValue(config.padding_top) ? config.padding_top : 0;\n\n    if ($$.title && $$.title.node()) {\n      padding += $$.getTitlePadding();\n    }\n\n    return padding;\n  };\n\n  ChartInternal.prototype.getCurrentPaddingBottom = function () {\n    var config = this.config;\n    return isValue(config.padding_bottom) ? config.padding_bottom : 0;\n  };\n\n  ChartInternal.prototype.getCurrentPaddingLeft = function (withoutRecompute) {\n    var $$ = this,\n        config = $$.config;\n\n    if (isValue(config.padding_left)) {\n      return config.padding_left;\n    } else if (config.axis_rotated) {\n      return !config.axis_x_show || config.axis_x_inner ? 1 : Math.max(ceil10($$.getAxisWidthByAxisId('x', withoutRecompute)), 40);\n    } else if (!config.axis_y_show || config.axis_y_inner) {\n      // && !config.axis_rotated\n      return $$.axis.getYAxisLabelPosition().isOuter ? 30 : 1;\n    } else {\n      return ceil10($$.getAxisWidthByAxisId('y', withoutRecompute));\n    }\n  };\n\n  ChartInternal.prototype.getCurrentPaddingRight = function () {\n    var $$ = this,\n        config = $$.config,\n        defaultPadding = 10,\n        legendWidthOnRight = $$.isLegendRight ? $$.getLegendWidth() + 20 : 0;\n\n    if (isValue(config.padding_right)) {\n      return config.padding_right + 1; // 1 is needed not to hide tick line\n    } else if (config.axis_rotated) {\n      return defaultPadding + legendWidthOnRight;\n    } else if (!config.axis_y2_show || config.axis_y2_inner) {\n      // && !config.axis_rotated\n      return 2 + legendWidthOnRight + ($$.axis.getY2AxisLabelPosition().isOuter ? 20 : 0);\n    } else {\n      return ceil10($$.getAxisWidthByAxisId('y2')) + legendWidthOnRight;\n    }\n  };\n\n  ChartInternal.prototype.getParentRectValue = function (key) {\n    var parent = this.selectChart.node(),\n        v;\n\n    while (parent && parent.tagName !== 'BODY') {\n      try {\n        v = parent.getBoundingClientRect()[key];\n      } catch (e) {\n        if (key === 'width') {\n          // In IE in certain cases getBoundingClientRect\n          // will cause an \"unspecified error\"\n          v = parent.offsetWidth;\n        }\n      }\n\n      if (v) {\n        break;\n      }\n\n      parent = parent.parentNode;\n    }\n\n    return v;\n  };\n\n  ChartInternal.prototype.getParentWidth = function () {\n    return this.getParentRectValue('width');\n  };\n\n  ChartInternal.prototype.getParentHeight = function () {\n    return this.getParentRectValue('height');\n  };\n\n  ChartInternal.prototype.getSvgLeft = function (withoutRecompute) {\n    var $$ = this,\n        config = $$.config,\n        hasLeftAxisRect = config.axis_rotated || !config.axis_rotated && !config.axis_y_inner,\n        leftAxisClass = config.axis_rotated ? CLASS.axisX : CLASS.axisY,\n        leftAxis = $$.main.select('.' + leftAxisClass).node(),\n        svgRect = leftAxis && hasLeftAxisRect ? leftAxis.getBoundingClientRect() : {\n      right: 0\n    },\n        chartRect = $$.selectChart.node().getBoundingClientRect(),\n        hasArc = $$.hasArcType(),\n        svgLeft = svgRect.right - chartRect.left - (hasArc ? 0 : $$.getCurrentPaddingLeft(withoutRecompute));\n    return svgLeft > 0 ? svgLeft : 0;\n  };\n\n  ChartInternal.prototype.getAxisWidthByAxisId = function (id, withoutRecompute) {\n    var $$ = this,\n        position = $$.axis.getLabelPositionById(id);\n    return $$.axis.getMaxTickWidth(id, withoutRecompute) + (position.isInner ? 20 : 40);\n  };\n\n  ChartInternal.prototype.getHorizontalAxisHeight = function (axisId) {\n    var $$ = this,\n        config = $$.config,\n        h = 30;\n\n    if (axisId === 'x' && !config.axis_x_show) {\n      return 8;\n    }\n\n    if (axisId === 'x' && config.axis_x_height) {\n      return config.axis_x_height;\n    }\n\n    if (axisId === 'y' && !config.axis_y_show) {\n      return config.legend_show && !$$.isLegendRight && !$$.isLegendInset ? 10 : 1;\n    }\n\n    if (axisId === 'y2' && !config.axis_y2_show) {\n      return $$.rotated_padding_top;\n    } // Calculate x axis height when tick rotated\n\n\n    if (axisId === 'x' && !config.axis_rotated && config.axis_x_tick_rotate) {\n      h = 30 + $$.axis.getMaxTickWidth(axisId) * Math.cos(Math.PI * (90 - Math.abs(config.axis_x_tick_rotate)) / 180);\n    } // Calculate y axis height when tick rotated\n\n\n    if (axisId === 'y' && config.axis_rotated && config.axis_y_tick_rotate) {\n      h = 30 + $$.axis.getMaxTickWidth(axisId) * Math.cos(Math.PI * (90 - Math.abs(config.axis_y_tick_rotate)) / 180);\n    }\n\n    return h + ($$.axis.getLabelPositionById(axisId).isInner ? 0 : 10) + (axisId === 'y2' ? -10 : 0);\n  };\n\n  ChartInternal.prototype.initBrush = function (scale) {\n    var $$ = this,\n        d3 = $$.d3; // TODO: dynamically change brushY/brushX according to axis_rotated.\n\n    $$.brush = ($$.config.axis_rotated ? d3.brushY() : d3.brushX()).on(\"brush\", function () {\n      var event = d3.event.sourceEvent;\n\n      if (event && event.type === \"zoom\") {\n        return;\n      }\n\n      $$.redrawForBrush();\n    }).on(\"end\", function () {\n      var event = d3.event.sourceEvent;\n\n      if (event && event.type === \"zoom\") {\n        return;\n      }\n\n      if ($$.brush.empty() && event && event.type !== 'end') {\n        $$.brush.clear();\n      }\n    });\n\n    $$.brush.updateExtent = function () {\n      var range = this.scale.range(),\n          extent;\n\n      if ($$.config.axis_rotated) {\n        extent = [[0, range[0]], [$$.width2, range[1]]];\n      } else {\n        extent = [[range[0], 0], [range[1], $$.height2]];\n      }\n\n      this.extent(extent);\n      return this;\n    };\n\n    $$.brush.updateScale = function (scale) {\n      this.scale = scale;\n      return this;\n    };\n\n    $$.brush.update = function (scale) {\n      this.updateScale(scale || $$.subX).updateExtent();\n      $$.context.select('.' + CLASS.brush).call(this);\n    };\n\n    $$.brush.clear = function () {\n      $$.context.select('.' + CLASS.brush).call($$.brush.move, null);\n    };\n\n    $$.brush.selection = function () {\n      return d3.brushSelection($$.context.select('.' + CLASS.brush).node());\n    };\n\n    $$.brush.selectionAsValue = function (selectionAsValue, withTransition) {\n      var selection, brush;\n\n      if (selectionAsValue) {\n        if ($$.context) {\n          selection = [this.scale(selectionAsValue[0]), this.scale(selectionAsValue[1])];\n          brush = $$.context.select('.' + CLASS.brush);\n\n          if (withTransition) {\n            brush = brush.transition();\n          }\n\n          $$.brush.move(brush, selection);\n        }\n\n        return [];\n      }\n\n      selection = $$.brush.selection() || [0, 0];\n      return [this.scale.invert(selection[0]), this.scale.invert(selection[1])];\n    };\n\n    $$.brush.empty = function () {\n      var selection = $$.brush.selection();\n      return !selection || selection[0] === selection[1];\n    };\n\n    return $$.brush.updateScale(scale);\n  };\n\n  ChartInternal.prototype.initSubchart = function () {\n    var $$ = this,\n        config = $$.config,\n        context = $$.context = $$.svg.append(\"g\").attr(\"transform\", $$.getTranslate('context')),\n        visibility = config.subchart_show ? 'visible' : 'hidden'; // set style\n\n    context.style('visibility', visibility); // Define g for chart area\n\n    context.append('g').attr(\"clip-path\", $$.clipPathForSubchart).attr('class', CLASS.chart); // Define g for bar chart area\n\n    context.select('.' + CLASS.chart).append(\"g\").attr(\"class\", CLASS.chartBars); // Define g for line chart area\n\n    context.select('.' + CLASS.chart).append(\"g\").attr(\"class\", CLASS.chartLines); // Add extent rect for Brush\n\n    context.append(\"g\").attr(\"clip-path\", $$.clipPath).attr(\"class\", CLASS.brush); // ATTENTION: This must be called AFTER chart added\n    // Add Axis\n\n    $$.axes.subx = context.append(\"g\").attr(\"class\", CLASS.axisX).attr(\"transform\", $$.getTranslate('subx')).attr(\"clip-path\", config.axis_rotated ? \"\" : $$.clipPathForXAxis);\n  };\n\n  ChartInternal.prototype.initSubchartBrush = function () {\n    var $$ = this; // Add extent rect for Brush\n\n    $$.initBrush($$.subX).updateExtent();\n    $$.context.select('.' + CLASS.brush).call($$.brush);\n  };\n\n  ChartInternal.prototype.updateTargetsForSubchart = function (targets) {\n    var $$ = this,\n        context = $$.context,\n        config = $$.config,\n        contextLineEnter,\n        contextLine,\n        contextBarEnter,\n        contextBar,\n        classChartBar = $$.classChartBar.bind($$),\n        classBars = $$.classBars.bind($$),\n        classChartLine = $$.classChartLine.bind($$),\n        classLines = $$.classLines.bind($$),\n        classAreas = $$.classAreas.bind($$);\n\n    if (config.subchart_show) {\n      //-- Bar --//\n      contextBar = context.select('.' + CLASS.chartBars).selectAll('.' + CLASS.chartBar).data(targets);\n      contextBarEnter = contextBar.enter().append('g').style('opacity', 0);\n      contextBarEnter.merge(contextBar).attr('class', classChartBar); // Bars for each data\n\n      contextBarEnter.append('g').attr(\"class\", classBars); //-- Line --//\n\n      contextLine = context.select('.' + CLASS.chartLines).selectAll('.' + CLASS.chartLine).data(targets);\n      contextLineEnter = contextLine.enter().append('g').style('opacity', 0);\n      contextLineEnter.merge(contextLine).attr('class', classChartLine); // Lines for each data\n\n      contextLineEnter.append(\"g\").attr(\"class\", classLines); // Area\n\n      contextLineEnter.append(\"g\").attr(\"class\", classAreas); //-- Brush --//\n\n      context.selectAll('.' + CLASS.brush + ' rect').attr(config.axis_rotated ? \"width\" : \"height\", config.axis_rotated ? $$.width2 : $$.height2);\n    }\n  };\n\n  ChartInternal.prototype.updateBarForSubchart = function (durationForExit) {\n    var $$ = this;\n    var contextBar = $$.context.selectAll('.' + CLASS.bars).selectAll('.' + CLASS.bar).data($$.barData.bind($$));\n    var contextBarEnter = contextBar.enter().append('path').attr(\"class\", $$.classBar.bind($$)).style(\"stroke\", 'none').style(\"fill\", $$.color);\n    contextBar.exit().transition().duration(durationForExit).style('opacity', 0).remove();\n    $$.contextBar = contextBarEnter.merge(contextBar).style(\"opacity\", $$.initialOpacity.bind($$));\n  };\n\n  ChartInternal.prototype.redrawBarForSubchart = function (drawBarOnSub, withTransition, duration) {\n    (withTransition ? this.contextBar.transition(Math.random().toString()).duration(duration) : this.contextBar).attr('d', drawBarOnSub).style('opacity', 1);\n  };\n\n  ChartInternal.prototype.updateLineForSubchart = function (durationForExit) {\n    var $$ = this;\n    var contextLine = $$.context.selectAll('.' + CLASS.lines).selectAll('.' + CLASS.line).data($$.lineData.bind($$));\n    var contextLineEnter = contextLine.enter().append('path').attr('class', $$.classLine.bind($$)).style('stroke', $$.color);\n    contextLine.exit().transition().duration(durationForExit).style('opacity', 0).remove();\n    $$.contextLine = contextLineEnter.merge(contextLine).style(\"opacity\", $$.initialOpacity.bind($$));\n  };\n\n  ChartInternal.prototype.redrawLineForSubchart = function (drawLineOnSub, withTransition, duration) {\n    (withTransition ? this.contextLine.transition(Math.random().toString()).duration(duration) : this.contextLine).attr(\"d\", drawLineOnSub).style('opacity', 1);\n  };\n\n  ChartInternal.prototype.updateAreaForSubchart = function (durationForExit) {\n    var $$ = this,\n        d3 = $$.d3;\n    var contextArea = $$.context.selectAll('.' + CLASS.areas).selectAll('.' + CLASS.area).data($$.lineData.bind($$));\n    var contextAreaEnter = contextArea.enter().append('path').attr(\"class\", $$.classArea.bind($$)).style(\"fill\", $$.color).style(\"opacity\", function () {\n      $$.orgAreaOpacity = +d3.select(this).style('opacity');\n      return 0;\n    });\n    contextArea.exit().transition().duration(durationForExit).style('opacity', 0).remove();\n    $$.contextArea = contextAreaEnter.merge(contextArea).style(\"opacity\", 0);\n  };\n\n  ChartInternal.prototype.redrawAreaForSubchart = function (drawAreaOnSub, withTransition, duration) {\n    (withTransition ? this.contextArea.transition(Math.random().toString()).duration(duration) : this.contextArea).attr(\"d\", drawAreaOnSub).style(\"fill\", this.color).style(\"opacity\", this.orgAreaOpacity);\n  };\n\n  ChartInternal.prototype.redrawSubchart = function (withSubchart, transitions, duration, durationForExit, areaIndices, barIndices, lineIndices) {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config,\n        drawAreaOnSub,\n        drawBarOnSub,\n        drawLineOnSub;\n    $$.context.style('visibility', config.subchart_show ? 'visible' : 'hidden'); // subchart\n\n    if (config.subchart_show) {\n      // reflect main chart to extent on subchart if zoomed\n      if (d3.event && d3.event.type === 'zoom') {\n        $$.brush.selectionAsValue($$.x.orgDomain());\n      } // update subchart elements if needed\n\n\n      if (withSubchart) {\n        // extent rect\n        if (!$$.brush.empty()) {\n          $$.brush.selectionAsValue($$.x.orgDomain());\n        } // setup drawer - MEMO: this must be called after axis updated\n\n\n        drawAreaOnSub = $$.generateDrawArea(areaIndices, true);\n        drawBarOnSub = $$.generateDrawBar(barIndices, true);\n        drawLineOnSub = $$.generateDrawLine(lineIndices, true);\n        $$.updateBarForSubchart(duration);\n        $$.updateLineForSubchart(duration);\n        $$.updateAreaForSubchart(duration);\n        $$.redrawBarForSubchart(drawBarOnSub, duration, duration);\n        $$.redrawLineForSubchart(drawLineOnSub, duration, duration);\n        $$.redrawAreaForSubchart(drawAreaOnSub, duration, duration);\n      }\n    }\n  };\n\n  ChartInternal.prototype.redrawForBrush = function () {\n    var $$ = this,\n        x = $$.x,\n        d3 = $$.d3,\n        s;\n    $$.redraw({\n      withTransition: false,\n      withY: $$.config.zoom_rescale,\n      withSubchart: false,\n      withUpdateXDomain: true,\n      withEventRect: false,\n      withDimension: false\n    }); // update zoom transation binded to event rect\n\n    s = d3.event.selection || $$.brush.scale.range();\n    $$.main.select('.' + CLASS.eventRect).call($$.zoom.transform, d3.zoomIdentity.scale($$.width / (s[1] - s[0])).translate(-s[0], 0));\n    $$.config.subchart_onbrush.call($$.api, x.orgDomain());\n  };\n\n  ChartInternal.prototype.transformContext = function (withTransition, transitions) {\n    var $$ = this,\n        subXAxis;\n\n    if (transitions && transitions.axisSubX) {\n      subXAxis = transitions.axisSubX;\n    } else {\n      subXAxis = $$.context.select('.' + CLASS.axisX);\n\n      if (withTransition) {\n        subXAxis = subXAxis.transition();\n      }\n    }\n\n    $$.context.attr(\"transform\", $$.getTranslate('context'));\n    subXAxis.attr(\"transform\", $$.getTranslate('subx'));\n  };\n\n  ChartInternal.prototype.getDefaultSelection = function () {\n    var $$ = this,\n        config = $$.config,\n        selection = isFunction(config.axis_x_selection) ? config.axis_x_selection($$.getXDomain($$.data.targets)) : config.axis_x_selection;\n\n    if ($$.isTimeSeries()) {\n      selection = [$$.parseDate(selection[0]), $$.parseDate(selection[1])];\n    }\n\n    return selection;\n  };\n\n  ChartInternal.prototype.initText = function () {\n    var $$ = this;\n    $$.main.select('.' + CLASS.chart).append(\"g\").attr(\"class\", CLASS.chartTexts);\n    $$.mainText = $$.d3.selectAll([]);\n  };\n\n  ChartInternal.prototype.updateTargetsForText = function (targets) {\n    var $$ = this,\n        classChartText = $$.classChartText.bind($$),\n        classTexts = $$.classTexts.bind($$),\n        classFocus = $$.classFocus.bind($$);\n    var mainText = $$.main.select('.' + CLASS.chartTexts).selectAll('.' + CLASS.chartText).data(targets);\n    var mainTextEnter = mainText.enter().append('g').attr('class', classChartText).style('opacity', 0).style(\"pointer-events\", \"none\");\n    mainTextEnter.append('g').attr('class', classTexts);\n    mainTextEnter.merge(mainText).attr('class', function (d) {\n      return classChartText(d) + classFocus(d);\n    });\n  };\n\n  ChartInternal.prototype.updateText = function (xForText, yForText, durationForExit) {\n    var $$ = this,\n        config = $$.config,\n        barOrLineData = $$.barOrLineData.bind($$),\n        classText = $$.classText.bind($$);\n    var mainText = $$.main.selectAll('.' + CLASS.texts).selectAll('.' + CLASS.text).data(barOrLineData);\n    var mainTextEnter = mainText.enter().append('text').attr(\"class\", classText).attr('text-anchor', function (d) {\n      return config.axis_rotated ? d.value < 0 ? 'end' : 'start' : 'middle';\n    }).style(\"stroke\", 'none').attr('x', xForText).attr('y', yForText).style(\"fill\", function (d) {\n      return $$.color(d);\n    }).style(\"fill-opacity\", 0);\n    $$.mainText = mainTextEnter.merge(mainText).text(function (d, i, j) {\n      return $$.dataLabelFormat(d.id)(d.value, d.id, i, j);\n    });\n    mainText.exit().transition().duration(durationForExit).style('fill-opacity', 0).remove();\n  };\n\n  ChartInternal.prototype.redrawText = function (xForText, yForText, forFlow, withTransition, transition) {\n    return [(withTransition ? this.mainText.transition(transition) : this.mainText).attr('x', xForText).attr('y', yForText).style(\"fill\", this.color).style(\"fill-opacity\", forFlow ? 0 : this.opacityForText.bind(this))];\n  };\n\n  ChartInternal.prototype.getTextRect = function (text, cls, element) {\n    var dummy = this.d3.select('body').append('div').classed('c3', true),\n        svg = dummy.append(\"svg\").style('visibility', 'hidden').style('position', 'fixed').style('top', 0).style('left', 0),\n        font = this.d3.select(element).style('font'),\n        rect;\n    svg.selectAll('.dummy').data([text]).enter().append('text').classed(cls ? cls : \"\", true).style('font', font).text(text).each(function () {\n      rect = this.getBoundingClientRect();\n    });\n    dummy.remove();\n    return rect;\n  };\n\n  ChartInternal.prototype.generateXYForText = function (areaIndices, barIndices, lineIndices, forX) {\n    var $$ = this,\n        getAreaPoints = $$.generateGetAreaPoints(areaIndices, false),\n        getBarPoints = $$.generateGetBarPoints(barIndices, false),\n        getLinePoints = $$.generateGetLinePoints(lineIndices, false),\n        getter = forX ? $$.getXForText : $$.getYForText;\n    return function (d, i) {\n      var getPoints = $$.isAreaType(d) ? getAreaPoints : $$.isBarType(d) ? getBarPoints : getLinePoints;\n      return getter.call($$, getPoints(d, i), d, this);\n    };\n  };\n\n  ChartInternal.prototype.getXForText = function (points, d, textElement) {\n    var $$ = this,\n        box = textElement.getBoundingClientRect(),\n        xPos,\n        padding;\n\n    if ($$.config.axis_rotated) {\n      padding = $$.isBarType(d) ? 4 : 6;\n      xPos = points[2][1] + padding * (d.value < 0 ? -1 : 1);\n    } else {\n      xPos = $$.hasType('bar') ? (points[2][0] + points[0][0]) / 2 : points[0][0];\n    } // show labels regardless of the domain if value is null\n\n\n    if (d.value === null) {\n      if (xPos > $$.width) {\n        xPos = $$.width - box.width;\n      } else if (xPos < 0) {\n        xPos = 4;\n      }\n    }\n\n    return xPos;\n  };\n\n  ChartInternal.prototype.getYForText = function (points, d, textElement) {\n    var $$ = this,\n        box = textElement.getBoundingClientRect(),\n        yPos;\n\n    if ($$.config.axis_rotated) {\n      yPos = (points[0][0] + points[2][0] + box.height * 0.6) / 2;\n    } else {\n      yPos = points[2][1];\n\n      if (d.value < 0 || d.value === 0 && !$$.hasPositiveValue) {\n        yPos += box.height;\n\n        if ($$.isBarType(d) && $$.isSafari()) {\n          yPos -= 3;\n        } else if (!$$.isBarType(d) && $$.isChrome()) {\n          yPos += 3;\n        }\n      } else {\n        yPos += $$.isBarType(d) ? -3 : -6;\n      }\n    } // show labels regardless of the domain if value is null\n\n\n    if (d.value === null && !$$.config.axis_rotated) {\n      if (yPos < box.height) {\n        yPos = box.height;\n      } else if (yPos > this.height) {\n        yPos = this.height - 4;\n      }\n    }\n\n    return yPos;\n  };\n\n  ChartInternal.prototype.initTitle = function () {\n    var $$ = this;\n    $$.title = $$.svg.append(\"text\").text($$.config.title_text).attr(\"class\", $$.CLASS.title);\n  };\n\n  ChartInternal.prototype.redrawTitle = function () {\n    var $$ = this;\n    $$.title.attr(\"x\", $$.xForTitle.bind($$)).attr(\"y\", $$.yForTitle.bind($$));\n  };\n\n  ChartInternal.prototype.xForTitle = function () {\n    var $$ = this,\n        config = $$.config,\n        position = config.title_position || 'left',\n        x;\n\n    if (position.indexOf('right') >= 0) {\n      x = $$.currentWidth - $$.getTextRect($$.title.node().textContent, $$.CLASS.title, $$.title.node()).width - config.title_padding.right;\n    } else if (position.indexOf('center') >= 0) {\n      x = ($$.currentWidth - $$.getTextRect($$.title.node().textContent, $$.CLASS.title, $$.title.node()).width) / 2;\n    } else {\n      // left\n      x = config.title_padding.left;\n    }\n\n    return x;\n  };\n\n  ChartInternal.prototype.yForTitle = function () {\n    var $$ = this;\n    return $$.config.title_padding.top + $$.getTextRect($$.title.node().textContent, $$.CLASS.title, $$.title.node()).height;\n  };\n\n  ChartInternal.prototype.getTitlePadding = function () {\n    var $$ = this;\n    return $$.yForTitle() + $$.config.title_padding.bottom;\n  };\n\n  ChartInternal.prototype.initTooltip = function () {\n    var $$ = this,\n        config = $$.config,\n        i;\n    $$.tooltip = $$.selectChart.style(\"position\", \"relative\").append(\"div\").attr('class', CLASS.tooltipContainer).style(\"position\", \"absolute\").style(\"pointer-events\", \"none\").style(\"display\", \"none\"); // Show tooltip if needed\n\n    if (config.tooltip_init_show) {\n      if ($$.isTimeSeries() && isString(config.tooltip_init_x)) {\n        config.tooltip_init_x = $$.parseDate(config.tooltip_init_x);\n\n        for (i = 0; i < $$.data.targets[0].values.length; i++) {\n          if ($$.data.targets[0].values[i].x - config.tooltip_init_x === 0) {\n            break;\n          }\n        }\n\n        config.tooltip_init_x = i;\n      }\n\n      $$.tooltip.html(config.tooltip_contents.call($$, $$.data.targets.map(function (d) {\n        return $$.addName(d.values[config.tooltip_init_x]);\n      }), $$.axis.getXAxisTickFormat(), $$.getYFormat($$.hasArcType()), $$.color));\n      $$.tooltip.style(\"top\", config.tooltip_init_position.top).style(\"left\", config.tooltip_init_position.left).style(\"display\", \"block\");\n    }\n  };\n\n  ChartInternal.prototype.getTooltipSortFunction = function () {\n    var $$ = this,\n        config = $$.config;\n\n    if (config.data_groups.length === 0 || config.tooltip_order !== undefined) {\n      // if data are not grouped or if an order is specified\n      // for the tooltip values we sort them by their values\n      var order = config.tooltip_order;\n\n      if (order === undefined) {\n        order = config.data_order;\n      }\n\n      var valueOf = function valueOf(obj) {\n        return obj ? obj.value : null;\n      }; // if data are not grouped, we sort them by their value\n\n\n      if (isString(order) && order.toLowerCase() === 'asc') {\n        return function (a, b) {\n          return valueOf(a) - valueOf(b);\n        };\n      } else if (isString(order) && order.toLowerCase() === 'desc') {\n        return function (a, b) {\n          return valueOf(b) - valueOf(a);\n        };\n      } else if (isFunction(order)) {\n        // if the function is from data_order we need\n        // to wrap the returned function in order to format\n        // the sorted value to the expected format\n        var sortFunction = order;\n\n        if (config.tooltip_order === undefined) {\n          sortFunction = function sortFunction(a, b) {\n            return order(a ? {\n              id: a.id,\n              values: [a]\n            } : null, b ? {\n              id: b.id,\n              values: [b]\n            } : null);\n          };\n        }\n\n        return sortFunction;\n      } else if (isArray(order)) {\n        return function (a, b) {\n          return order.indexOf(a.id) - order.indexOf(b.id);\n        };\n      }\n    } else {\n      // if data are grouped, we follow the order of grouped targets\n      var ids = $$.orderTargets($$.data.targets).map(function (i) {\n        return i.id;\n      }); // if it was either asc or desc we need to invert the order\n      // returned by orderTargets\n\n      if ($$.isOrderAsc() || $$.isOrderDesc()) {\n        ids = ids.reverse();\n      }\n\n      return function (a, b) {\n        return ids.indexOf(a.id) - ids.indexOf(b.id);\n      };\n    }\n  };\n\n  ChartInternal.prototype.getTooltipContent = function (d, defaultTitleFormat, defaultValueFormat, color) {\n    var $$ = this,\n        config = $$.config,\n        titleFormat = config.tooltip_format_title || defaultTitleFormat,\n        nameFormat = config.tooltip_format_name || function (name) {\n      return name;\n    },\n        valueFormat = config.tooltip_format_value || defaultValueFormat,\n        text,\n        i,\n        title,\n        value,\n        name,\n        bgcolor;\n\n    var tooltipSortFunction = this.getTooltipSortFunction();\n\n    if (tooltipSortFunction) {\n      d.sort(tooltipSortFunction);\n    }\n\n    for (i = 0; i < d.length; i++) {\n      if (!(d[i] && (d[i].value || d[i].value === 0))) {\n        continue;\n      }\n\n      if (!text) {\n        title = sanitise(titleFormat ? titleFormat(d[i].x, d[i].index) : d[i].x);\n        text = \"<table class='\" + $$.CLASS.tooltip + \"'>\" + (title || title === 0 ? \"<tr><th colspan='2'>\" + title + \"</th></tr>\" : \"\");\n      }\n\n      value = sanitise(valueFormat(d[i].value, d[i].ratio, d[i].id, d[i].index, d));\n\n      if (value !== undefined) {\n        // Skip elements when their name is set to null\n        if (d[i].name === null) {\n          continue;\n        }\n\n        name = sanitise(nameFormat(d[i].name, d[i].ratio, d[i].id, d[i].index));\n        bgcolor = $$.levelColor ? $$.levelColor(d[i].value) : color(d[i].id);\n        text += \"<tr class='\" + $$.CLASS.tooltipName + \"-\" + $$.getTargetSelectorSuffix(d[i].id) + \"'>\";\n        text += \"<td class='name'><span style='background-color:\" + bgcolor + \"'></span>\" + name + \"</td>\";\n        text += \"<td class='value'>\" + value + \"</td>\";\n        text += \"</tr>\";\n      }\n    }\n\n    return text + \"</table>\";\n  };\n\n  ChartInternal.prototype.tooltipPosition = function (dataToShow, tWidth, tHeight, element) {\n    var $$ = this,\n        config = $$.config,\n        d3 = $$.d3;\n    var svgLeft, tooltipLeft, tooltipRight, tooltipTop, chartRight;\n    var forArc = $$.hasArcType(),\n        mouse = d3.mouse(element); // Determin tooltip position\n\n    if (forArc) {\n      tooltipLeft = ($$.width - ($$.isLegendRight ? $$.getLegendWidth() : 0)) / 2 + mouse[0];\n      tooltipTop = ($$.hasType('gauge') ? $$.height : $$.height / 2) + mouse[1] + 20;\n    } else {\n      svgLeft = $$.getSvgLeft(true);\n\n      if (config.axis_rotated) {\n        tooltipLeft = svgLeft + mouse[0] + 100;\n        tooltipRight = tooltipLeft + tWidth;\n        chartRight = $$.currentWidth - $$.getCurrentPaddingRight();\n        tooltipTop = $$.x(dataToShow[0].x) + 20;\n      } else {\n        tooltipLeft = svgLeft + $$.getCurrentPaddingLeft(true) + $$.x(dataToShow[0].x) + 20;\n        tooltipRight = tooltipLeft + tWidth;\n        chartRight = svgLeft + $$.currentWidth - $$.getCurrentPaddingRight();\n        tooltipTop = mouse[1] + 15;\n      }\n\n      if (tooltipRight > chartRight) {\n        // 20 is needed for Firefox to keep tooltip width\n        tooltipLeft -= tooltipRight - chartRight + 20;\n      }\n\n      if (tooltipTop + tHeight > $$.currentHeight) {\n        tooltipTop -= tHeight + 30;\n      }\n    }\n\n    if (tooltipTop < 0) {\n      tooltipTop = 0;\n    }\n\n    return {\n      top: tooltipTop,\n      left: tooltipLeft\n    };\n  };\n\n  ChartInternal.prototype.showTooltip = function (selectedData, element) {\n    var $$ = this,\n        config = $$.config;\n    var tWidth, tHeight, position;\n    var forArc = $$.hasArcType(),\n        dataToShow = selectedData.filter(function (d) {\n      return d && isValue(d.value);\n    }),\n        positionFunction = config.tooltip_position || ChartInternal.prototype.tooltipPosition;\n\n    if (dataToShow.length === 0 || !config.tooltip_show) {\n      return;\n    }\n\n    $$.tooltip.html(config.tooltip_contents.call($$, selectedData, $$.axis.getXAxisTickFormat(), $$.getYFormat(forArc), $$.color)).style(\"display\", \"block\"); // Get tooltip dimensions\n\n    tWidth = $$.tooltip.property('offsetWidth');\n    tHeight = $$.tooltip.property('offsetHeight');\n    position = positionFunction.call(this, dataToShow, tWidth, tHeight, element); // Set tooltip\n\n    $$.tooltip.style(\"top\", position.top + \"px\").style(\"left\", position.left + 'px');\n  };\n\n  ChartInternal.prototype.hideTooltip = function () {\n    this.tooltip.style(\"display\", \"none\");\n  };\n\n  ChartInternal.prototype.setTargetType = function (targetIds, type) {\n    var $$ = this,\n        config = $$.config;\n    $$.mapToTargetIds(targetIds).forEach(function (id) {\n      $$.withoutFadeIn[id] = type === config.data_types[id];\n      config.data_types[id] = type;\n    });\n\n    if (!targetIds) {\n      config.data_type = type;\n    }\n  };\n\n  ChartInternal.prototype.hasType = function (type, targets) {\n    var $$ = this,\n        types = $$.config.data_types,\n        has = false;\n    targets = targets || $$.data.targets;\n\n    if (targets && targets.length) {\n      targets.forEach(function (target) {\n        var t = types[target.id];\n\n        if (t && t.indexOf(type) >= 0 || !t && type === 'line') {\n          has = true;\n        }\n      });\n    } else if (Object.keys(types).length) {\n      Object.keys(types).forEach(function (id) {\n        if (types[id] === type) {\n          has = true;\n        }\n      });\n    } else {\n      has = $$.config.data_type === type;\n    }\n\n    return has;\n  };\n\n  ChartInternal.prototype.hasArcType = function (targets) {\n    return this.hasType('pie', targets) || this.hasType('donut', targets) || this.hasType('gauge', targets);\n  };\n\n  ChartInternal.prototype.isLineType = function (d) {\n    var config = this.config,\n        id = isString(d) ? d : d.id;\n    return !config.data_types[id] || ['line', 'spline', 'area', 'area-spline', 'step', 'area-step'].indexOf(config.data_types[id]) >= 0;\n  };\n\n  ChartInternal.prototype.isStepType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return ['step', 'area-step'].indexOf(this.config.data_types[id]) >= 0;\n  };\n\n  ChartInternal.prototype.isSplineType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return ['spline', 'area-spline'].indexOf(this.config.data_types[id]) >= 0;\n  };\n\n  ChartInternal.prototype.isAreaType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return ['area', 'area-spline', 'area-step'].indexOf(this.config.data_types[id]) >= 0;\n  };\n\n  ChartInternal.prototype.isBarType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return this.config.data_types[id] === 'bar';\n  };\n\n  ChartInternal.prototype.isScatterType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return this.config.data_types[id] === 'scatter';\n  };\n\n  ChartInternal.prototype.isPieType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return this.config.data_types[id] === 'pie';\n  };\n\n  ChartInternal.prototype.isGaugeType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return this.config.data_types[id] === 'gauge';\n  };\n\n  ChartInternal.prototype.isDonutType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return this.config.data_types[id] === 'donut';\n  };\n\n  ChartInternal.prototype.isArcType = function (d) {\n    return this.isPieType(d) || this.isDonutType(d) || this.isGaugeType(d);\n  };\n\n  ChartInternal.prototype.lineData = function (d) {\n    return this.isLineType(d) ? [d] : [];\n  };\n\n  ChartInternal.prototype.arcData = function (d) {\n    return this.isArcType(d.data) ? [d] : [];\n  };\n  /* not used\n   function scatterData(d) {\n   return isScatterType(d) ? d.values : [];\n   }\n   */\n\n\n  ChartInternal.prototype.barData = function (d) {\n    return this.isBarType(d) ? d.values : [];\n  };\n\n  ChartInternal.prototype.lineOrScatterData = function (d) {\n    return this.isLineType(d) || this.isScatterType(d) ? d.values : [];\n  };\n\n  ChartInternal.prototype.barOrLineData = function (d) {\n    return this.isBarType(d) || this.isLineType(d) ? d.values : [];\n  };\n\n  ChartInternal.prototype.isSafari = function () {\n    var ua = window.navigator.userAgent;\n    return ua.indexOf('Safari') >= 0 && ua.indexOf('Chrome') < 0;\n  };\n\n  ChartInternal.prototype.isChrome = function () {\n    var ua = window.navigator.userAgent;\n    return ua.indexOf('Chrome') >= 0;\n  };\n\n  ChartInternal.prototype.initZoom = function () {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config,\n        startEvent;\n    $$.zoom = d3.zoom().on(\"start\", function () {\n      if (config.zoom_type !== 'scroll') {\n        return;\n      }\n\n      var e = d3.event.sourceEvent;\n\n      if (e && e.type === \"brush\") {\n        return;\n      }\n\n      startEvent = e;\n      config.zoom_onzoomstart.call($$.api, e);\n    }).on(\"zoom\", function () {\n      if (config.zoom_type !== 'scroll') {\n        return;\n      }\n\n      var e = d3.event.sourceEvent;\n\n      if (e && e.type === \"brush\") {\n        return;\n      }\n\n      $$.redrawForZoom();\n      config.zoom_onzoom.call($$.api, $$.x.orgDomain());\n    }).on('end', function () {\n      if (config.zoom_type !== 'scroll') {\n        return;\n      }\n\n      var e = d3.event.sourceEvent;\n\n      if (e && e.type === \"brush\") {\n        return;\n      } // if click, do nothing. otherwise, click interaction will be canceled.\n\n\n      if (e && startEvent.clientX === e.clientX && startEvent.clientY === e.clientY) {\n        return;\n      }\n\n      config.zoom_onzoomend.call($$.api, $$.x.orgDomain());\n    });\n\n    $$.zoom.updateDomain = function () {\n      if (d3.event && d3.event.transform) {\n        $$.x.domain(d3.event.transform.rescaleX($$.subX).domain());\n      }\n\n      return this;\n    };\n\n    $$.zoom.updateExtent = function () {\n      this.scaleExtent([1, Infinity]).translateExtent([[0, 0], [$$.width, $$.height]]).extent([[0, 0], [$$.width, $$.height]]);\n      return this;\n    };\n\n    $$.zoom.update = function () {\n      return this.updateExtent().updateDomain();\n    };\n\n    return $$.zoom.updateExtent();\n  };\n\n  ChartInternal.prototype.zoomTransform = function (range) {\n    var $$ = this,\n        s = [$$.x(range[0]), $$.x(range[1])];\n    return $$.d3.zoomIdentity.scale($$.width / (s[1] - s[0])).translate(-s[0], 0);\n  };\n\n  ChartInternal.prototype.initDragZoom = function () {\n    var $$ = this;\n    var d3 = $$.d3;\n    var config = $$.config;\n    var context = $$.context = $$.svg;\n    var brushXPos = $$.margin.left + 20.5;\n    var brushYPos = $$.margin.top + 0.5;\n\n    if (!(config.zoom_type === 'drag' && config.zoom_enabled)) {\n      return;\n    }\n\n    var getZoomedDomain = function getZoomedDomain(selection) {\n      return selection && selection.map(function (x) {\n        return $$.x.invert(x);\n      });\n    };\n\n    var brush = $$.dragZoomBrush = d3.brushX().on(\"start\", function () {\n      $$.api.unzoom();\n      $$.svg.select(\".\" + CLASS.dragZoom).classed(\"disabled\", false);\n      config.zoom_onzoomstart.call($$.api, d3.event.sourceEvent);\n    }).on(\"brush\", function () {\n      config.zoom_onzoom.call($$.api, getZoomedDomain(d3.event.selection));\n    }).on(\"end\", function () {\n      if (d3.event.selection == null) {\n        return;\n      }\n\n      var zoomedDomain = getZoomedDomain(d3.event.selection);\n\n      if (!config.zoom_disableDefaultBehavior) {\n        $$.api.zoom(zoomedDomain);\n      }\n\n      $$.svg.select(\".\" + CLASS.dragZoom).classed(\"disabled\", true);\n      config.zoom_onzoomend.call($$.api, zoomedDomain);\n    });\n    context.append(\"g\").classed(CLASS.dragZoom, true).attr(\"clip-path\", $$.clipPath).attr(\"transform\", \"translate(\" + brushXPos + \",\" + brushYPos + \")\").call(brush);\n  };\n\n  ChartInternal.prototype.getZoomDomain = function () {\n    var $$ = this,\n        config = $$.config,\n        d3 = $$.d3,\n        min = d3.min([$$.orgXDomain[0], config.zoom_x_min]),\n        max = d3.max([$$.orgXDomain[1], config.zoom_x_max]);\n    return [min, max];\n  };\n\n  ChartInternal.prototype.redrawForZoom = function () {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config,\n        zoom = $$.zoom,\n        x = $$.x;\n\n    if (!config.zoom_enabled) {\n      return;\n    }\n\n    if ($$.filterTargetsToShow($$.data.targets).length === 0) {\n      return;\n    }\n\n    zoom.update();\n\n    if (config.zoom_disableDefaultBehavior) {\n      return;\n    }\n\n    if ($$.isCategorized() && x.orgDomain()[0] === $$.orgXDomain[0]) {\n      x.domain([$$.orgXDomain[0] - 1e-10, x.orgDomain()[1]]);\n    }\n\n    $$.redraw({\n      withTransition: false,\n      withY: config.zoom_rescale,\n      withSubchart: false,\n      withEventRect: false,\n      withDimension: false\n    });\n\n    if (d3.event.sourceEvent && d3.event.sourceEvent.type === 'mousemove') {\n      $$.cancelClick = true;\n    }\n  };\n\n  return c3;\n\n})));\n\n","// svg-pan-zoom v3.6.0\n// https://github.com/ariutta/svg-pan-zoom\n!function t(e,o,n){function i(r,a){if(!o[r]){if(!e[r]){var l=\"function\"==typeof require&&require;if(!a&&l)return l(r,!0);if(s)return s(r,!0);var u=new Error(\"Cannot find module '\"+r+\"'\");throw u.code=\"MODULE_NOT_FOUND\",u}var h=o[r]={exports:{}};e[r][0].call(h.exports,function(t){var o=e[r][1][t];return i(o?o:t)},h,h.exports,t,e,o,n)}return o[r].exports}for(var s=\"function\"==typeof require&&require,r=0;r<n.length;r++)i(n[r]);return i}({1:[function(t,e,o){var n=t(\"./svg-pan-zoom.js\");!function(t,o){\"function\"==typeof define&&define.amd?define(\"svg-pan-zoom\",[],function(){return n}):\"undefined\"!=typeof e&&e.exports&&(e.exports=n,t.svgPanZoom=n)}(window,document)},{\"./svg-pan-zoom.js\":4}],2:[function(t,e,o){var n=t(\"./svg-utilities\");e.exports={enable:function(t){var e=t.svg.querySelector(\"defs\");e||(e=document.createElementNS(n.svgNS,\"defs\"),t.svg.appendChild(e));var o=e.querySelector(\"style#svg-pan-zoom-controls-styles\");if(!o){var i=document.createElementNS(n.svgNS,\"style\");i.setAttribute(\"id\",\"svg-pan-zoom-controls-styles\"),i.setAttribute(\"type\",\"text/css\"),i.textContent=\".svg-pan-zoom-control { cursor: pointer; fill: black; fill-opacity: 0.333; } .svg-pan-zoom-control:hover { fill-opacity: 0.8; } .svg-pan-zoom-control-background { fill: white; fill-opacity: 0.5; } .svg-pan-zoom-control-background { fill-opacity: 0.8; }\",e.appendChild(i)}var s=document.createElementNS(n.svgNS,\"g\");s.setAttribute(\"id\",\"svg-pan-zoom-controls\"),s.setAttribute(\"transform\",\"translate(\"+(t.width-70)+\" \"+(t.height-76)+\") scale(0.75)\"),s.setAttribute(\"class\",\"svg-pan-zoom-control\"),s.appendChild(this._createZoomIn(t)),s.appendChild(this._createZoomReset(t)),s.appendChild(this._createZoomOut(t)),t.svg.appendChild(s),t.controlIcons=s},_createZoomIn:function(t){var e=document.createElementNS(n.svgNS,\"g\");e.setAttribute(\"id\",\"svg-pan-zoom-zoom-in\"),e.setAttribute(\"transform\",\"translate(30.5 5) scale(0.015)\"),e.setAttribute(\"class\",\"svg-pan-zoom-control\"),e.addEventListener(\"click\",function(){t.getPublicInstance().zoomIn()},!1),e.addEventListener(\"touchstart\",function(){t.getPublicInstance().zoomIn()},!1);var o=document.createElementNS(n.svgNS,\"rect\");o.setAttribute(\"x\",\"0\"),o.setAttribute(\"y\",\"0\"),o.setAttribute(\"width\",\"1500\"),o.setAttribute(\"height\",\"1400\"),o.setAttribute(\"class\",\"svg-pan-zoom-control-background\"),e.appendChild(o);var i=document.createElementNS(n.svgNS,\"path\");return i.setAttribute(\"d\",\"M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\"),i.setAttribute(\"class\",\"svg-pan-zoom-control-element\"),e.appendChild(i),e},_createZoomReset:function(t){var e=document.createElementNS(n.svgNS,\"g\");e.setAttribute(\"id\",\"svg-pan-zoom-reset-pan-zoom\"),e.setAttribute(\"transform\",\"translate(5 35) scale(0.4)\"),e.setAttribute(\"class\",\"svg-pan-zoom-control\"),e.addEventListener(\"click\",function(){t.getPublicInstance().reset()},!1),e.addEventListener(\"touchstart\",function(){t.getPublicInstance().reset()},!1);var o=document.createElementNS(n.svgNS,\"rect\");o.setAttribute(\"x\",\"2\"),o.setAttribute(\"y\",\"2\"),o.setAttribute(\"width\",\"182\"),o.setAttribute(\"height\",\"58\"),o.setAttribute(\"class\",\"svg-pan-zoom-control-background\"),e.appendChild(o);var i=document.createElementNS(n.svgNS,\"path\");i.setAttribute(\"d\",\"M33.051,20.632c-0.742-0.406-1.854-0.609-3.338-0.609h-7.969v9.281h7.769c1.543,0,2.701-0.188,3.473-0.562c1.365-0.656,2.048-1.953,2.048-3.891C35.032,22.757,34.372,21.351,33.051,20.632z\"),i.setAttribute(\"class\",\"svg-pan-zoom-control-element\"),e.appendChild(i);var s=document.createElementNS(n.svgNS,\"path\");return s.setAttribute(\"d\",\"M170.231,0.5H15.847C7.102,0.5,0.5,5.708,0.5,11.84v38.861C0.5,56.833,7.102,61.5,15.847,61.5h154.384c8.745,0,15.269-4.667,15.269-10.798V11.84C185.5,5.708,178.976,0.5,170.231,0.5z M42.837,48.569h-7.969c-0.219-0.766-0.375-1.383-0.469-1.852c-0.188-0.969-0.289-1.961-0.305-2.977l-0.047-3.211c-0.03-2.203-0.41-3.672-1.142-4.406c-0.732-0.734-2.103-1.102-4.113-1.102h-7.05v13.547h-7.055V14.022h16.524c2.361,0.047,4.178,0.344,5.45,0.891c1.272,0.547,2.351,1.352,3.234,2.414c0.731,0.875,1.31,1.844,1.737,2.906s0.64,2.273,0.64,3.633c0,1.641-0.414,3.254-1.242,4.84s-2.195,2.707-4.102,3.363c1.594,0.641,2.723,1.551,3.387,2.73s0.996,2.98,0.996,5.402v2.32c0,1.578,0.063,2.648,0.19,3.211c0.19,0.891,0.635,1.547,1.333,1.969V48.569z M75.579,48.569h-26.18V14.022h25.336v6.117H56.454v7.336h16.781v6H56.454v8.883h19.125V48.569z M104.497,46.331c-2.44,2.086-5.887,3.129-10.34,3.129c-4.548,0-8.125-1.027-10.731-3.082s-3.909-4.879-3.909-8.473h6.891c0.224,1.578,0.662,2.758,1.316,3.539c1.196,1.422,3.246,2.133,6.15,2.133c1.739,0,3.151-0.188,4.236-0.562c2.058-0.719,3.087-2.055,3.087-4.008c0-1.141-0.504-2.023-1.512-2.648c-1.008-0.609-2.607-1.148-4.796-1.617l-3.74-0.82c-3.676-0.812-6.201-1.695-7.576-2.648c-2.328-1.594-3.492-4.086-3.492-7.477c0-3.094,1.139-5.664,3.417-7.711s5.623-3.07,10.036-3.07c3.685,0,6.829,0.965,9.431,2.895c2.602,1.93,3.966,4.73,4.093,8.402h-6.938c-0.128-2.078-1.057-3.555-2.787-4.43c-1.154-0.578-2.587-0.867-4.301-0.867c-1.907,0-3.428,0.375-4.565,1.125c-1.138,0.75-1.706,1.797-1.706,3.141c0,1.234,0.561,2.156,1.682,2.766c0.721,0.406,2.25,0.883,4.589,1.43l6.063,1.43c2.657,0.625,4.648,1.461,5.975,2.508c2.059,1.625,3.089,3.977,3.089,7.055C108.157,41.624,106.937,44.245,104.497,46.331z M139.61,48.569h-26.18V14.022h25.336v6.117h-18.281v7.336h16.781v6h-16.781v8.883h19.125V48.569z M170.337,20.14h-10.336v28.43h-7.266V20.14h-10.383v-6.117h27.984V20.14z\"),s.setAttribute(\"class\",\"svg-pan-zoom-control-element\"),e.appendChild(s),e},_createZoomOut:function(t){var e=document.createElementNS(n.svgNS,\"g\");e.setAttribute(\"id\",\"svg-pan-zoom-zoom-out\"),e.setAttribute(\"transform\",\"translate(30.5 70) scale(0.015)\"),e.setAttribute(\"class\",\"svg-pan-zoom-control\"),e.addEventListener(\"click\",function(){t.getPublicInstance().zoomOut()},!1),e.addEventListener(\"touchstart\",function(){t.getPublicInstance().zoomOut()},!1);var o=document.createElementNS(n.svgNS,\"rect\");o.setAttribute(\"x\",\"0\"),o.setAttribute(\"y\",\"0\"),o.setAttribute(\"width\",\"1500\"),o.setAttribute(\"height\",\"1400\"),o.setAttribute(\"class\",\"svg-pan-zoom-control-background\"),e.appendChild(o);var i=document.createElementNS(n.svgNS,\"path\");return i.setAttribute(\"d\",\"M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z\"),i.setAttribute(\"class\",\"svg-pan-zoom-control-element\"),e.appendChild(i),e},disable:function(t){t.controlIcons&&(t.controlIcons.parentNode.removeChild(t.controlIcons),t.controlIcons=null)}}},{\"./svg-utilities\":5}],3:[function(t,e,o){var n=t(\"./svg-utilities\"),i=t(\"./utilities\"),s=function(t,e){this.init(t,e)};s.prototype.init=function(t,e){this.viewport=t,this.options=e,this.originalState={zoom:1,x:0,y:0},this.activeState={zoom:1,x:0,y:0},this.updateCTMCached=i.proxy(this.updateCTM,this),this.requestAnimationFrame=i.createRequestAnimationFrame(this.options.refreshRate),this.viewBox={x:0,y:0,width:0,height:0},this.cacheViewBox();var o=this.processCTM();this.setCTM(o),this.updateCTM()},s.prototype.cacheViewBox=function(){var t=this.options.svg.getAttribute(\"viewBox\");if(t){var e=t.split(/[\\s\\,]/).filter(function(t){return t}).map(parseFloat);this.viewBox.x=e[0],this.viewBox.y=e[1],this.viewBox.width=e[2],this.viewBox.height=e[3];var o=Math.min(this.options.width/this.viewBox.width,this.options.height/this.viewBox.height);this.activeState.zoom=o,this.activeState.x=(this.options.width-this.viewBox.width*o)/2,this.activeState.y=(this.options.height-this.viewBox.height*o)/2,this.updateCTMOnNextFrame(),this.options.svg.removeAttribute(\"viewBox\")}else this.simpleViewBoxCache()},s.prototype.simpleViewBoxCache=function(){var t=this.viewport.getBBox();this.viewBox.x=t.x,this.viewBox.y=t.y,this.viewBox.width=t.width,this.viewBox.height=t.height},s.prototype.getViewBox=function(){return i.extend({},this.viewBox)},s.prototype.processCTM=function(){var t=this.getCTM();if(this.options.fit||this.options.contain){var e;e=this.options.fit?Math.min(this.options.width/this.viewBox.width,this.options.height/this.viewBox.height):Math.max(this.options.width/this.viewBox.width,this.options.height/this.viewBox.height),t.a=e,t.d=e,t.e=-this.viewBox.x*e,t.f=-this.viewBox.y*e}if(this.options.center){var o=.5*(this.options.width-(this.viewBox.width+2*this.viewBox.x)*t.a),n=.5*(this.options.height-(this.viewBox.height+2*this.viewBox.y)*t.a);t.e=o,t.f=n}return this.originalState.zoom=t.a,this.originalState.x=t.e,this.originalState.y=t.f,t},s.prototype.getOriginalState=function(){return i.extend({},this.originalState)},s.prototype.getState=function(){return i.extend({},this.activeState)},s.prototype.getZoom=function(){return this.activeState.zoom},s.prototype.getRelativeZoom=function(){return this.activeState.zoom/this.originalState.zoom},s.prototype.computeRelativeZoom=function(t){return t/this.originalState.zoom},s.prototype.getPan=function(){return{x:this.activeState.x,y:this.activeState.y}},s.prototype.getCTM=function(){var t=this.options.svg.createSVGMatrix();return t.a=this.activeState.zoom,t.b=0,t.c=0,t.d=this.activeState.zoom,t.e=this.activeState.x,t.f=this.activeState.y,t},s.prototype.setCTM=function(t){var e=this.isZoomDifferent(t),o=this.isPanDifferent(t);if(e||o){if(e&&(this.options.beforeZoom(this.getRelativeZoom(),this.computeRelativeZoom(t.a))===!1?(t.a=t.d=this.activeState.zoom,e=!1):(this.updateCache(t),this.options.onZoom(this.getRelativeZoom()))),o){var n=this.options.beforePan(this.getPan(),{x:t.e,y:t.f}),s=!1,r=!1;n===!1?(t.e=this.getPan().x,t.f=this.getPan().y,s=r=!0):i.isObject(n)&&(n.x===!1?(t.e=this.getPan().x,s=!0):i.isNumber(n.x)&&(t.e=n.x),n.y===!1?(t.f=this.getPan().y,r=!0):i.isNumber(n.y)&&(t.f=n.y)),s&&r||!this.isPanDifferent(t)?o=!1:(this.updateCache(t),this.options.onPan(this.getPan()))}(e||o)&&this.updateCTMOnNextFrame()}},s.prototype.isZoomDifferent=function(t){return this.activeState.zoom!==t.a},s.prototype.isPanDifferent=function(t){return this.activeState.x!==t.e||this.activeState.y!==t.f},s.prototype.updateCache=function(t){this.activeState.zoom=t.a,this.activeState.x=t.e,this.activeState.y=t.f},s.prototype.pendingUpdate=!1,s.prototype.updateCTMOnNextFrame=function(){this.pendingUpdate||(this.pendingUpdate=!0,this.requestAnimationFrame.call(window,this.updateCTMCached))},s.prototype.updateCTM=function(){var t=this.getCTM();n.setCTM(this.viewport,t,this.defs),this.pendingUpdate=!1,this.options.onUpdatedCTM&&this.options.onUpdatedCTM(t)},e.exports=function(t,e){return new s(t,e)}},{\"./svg-utilities\":5,\"./utilities\":7}],4:[function(t,e,o){var n=t(\"./uniwheel\"),i=t(\"./control-icons\"),s=t(\"./utilities\"),r=t(\"./svg-utilities\"),a=t(\"./shadow-viewport\"),l=function(t,e){this.init(t,e)},u={viewportSelector:\".svg-pan-zoom_viewport\",panEnabled:!0,controlIconsEnabled:!1,zoomEnabled:!0,dblClickZoomEnabled:!0,mouseWheelZoomEnabled:!0,preventMouseEventsDefault:!0,zoomScaleSensitivity:.1,minZoom:.5,maxZoom:10,fit:!0,contain:!1,center:!0,refreshRate:\"auto\",beforeZoom:null,onZoom:null,beforePan:null,onPan:null,customEventsHandler:null,eventsListenerElement:null,onUpdatedCTM:null},h={passive:!0};l.prototype.init=function(t,e){var o=this;this.svg=t,this.defs=t.querySelector(\"defs\"),r.setupSvgAttributes(this.svg),this.options=s.extend(s.extend({},u),e),this.state=\"none\";var n=r.getBoundingClientRectNormalized(t);this.width=n.width,this.height=n.height,this.viewport=a(r.getOrCreateViewport(this.svg,this.options.viewportSelector),{svg:this.svg,width:this.width,height:this.height,fit:this.options.fit,contain:this.options.contain,center:this.options.center,refreshRate:this.options.refreshRate,beforeZoom:function(t,e){if(o.viewport&&o.options.beforeZoom)return o.options.beforeZoom(t,e)},onZoom:function(t){if(o.viewport&&o.options.onZoom)return o.options.onZoom(t)},beforePan:function(t,e){if(o.viewport&&o.options.beforePan)return o.options.beforePan(t,e)},onPan:function(t){if(o.viewport&&o.options.onPan)return o.options.onPan(t)},onUpdatedCTM:function(t){if(o.viewport&&o.options.onUpdatedCTM)return o.options.onUpdatedCTM(t)}});var l=this.getPublicInstance();l.setBeforeZoom(this.options.beforeZoom),l.setOnZoom(this.options.onZoom),l.setBeforePan(this.options.beforePan),l.setOnPan(this.options.onPan),l.setOnUpdatedCTM(this.options.onUpdatedCTM),this.options.controlIconsEnabled&&i.enable(this),this.lastMouseWheelEventTime=Date.now(),this.setupHandlers()},l.prototype.setupHandlers=function(){var t=this,e=null;if(this.eventListeners={mousedown:function(o){var n=t.handleMouseDown(o,e);return e=o,n},touchstart:function(o){var n=t.handleMouseDown(o,e);return e=o,n},mouseup:function(e){return t.handleMouseUp(e)},touchend:function(e){return t.handleMouseUp(e)},mousemove:function(e){return t.handleMouseMove(e)},touchmove:function(e){return t.handleMouseMove(e)},mouseleave:function(e){return t.handleMouseUp(e)},touchleave:function(e){return t.handleMouseUp(e)},touchcancel:function(e){return t.handleMouseUp(e)}},null!=this.options.customEventsHandler){this.options.customEventsHandler.init({svgElement:this.svg,eventsListenerElement:this.options.eventsListenerElement,instance:this.getPublicInstance()});var o=this.options.customEventsHandler.haltEventListeners;if(o&&o.length)for(var n=o.length-1;n>=0;n--)this.eventListeners.hasOwnProperty(o[n])&&delete this.eventListeners[o[n]]}for(var i in this.eventListeners)(this.options.eventsListenerElement||this.svg).addEventListener(i,this.eventListeners[i],!this.options.preventMouseEventsDefault&&h);this.options.mouseWheelZoomEnabled&&(this.options.mouseWheelZoomEnabled=!1,this.enableMouseWheelZoom())},l.prototype.enableMouseWheelZoom=function(){if(!this.options.mouseWheelZoomEnabled){var t=this;this.wheelListener=function(e){return t.handleMouseWheel(e)};var e=!this.options.preventMouseEventsDefault;n.on(this.options.eventsListenerElement||this.svg,this.wheelListener,e),this.options.mouseWheelZoomEnabled=!0}},l.prototype.disableMouseWheelZoom=function(){if(this.options.mouseWheelZoomEnabled){var t=!this.options.preventMouseEventsDefault;n.off(this.options.eventsListenerElement||this.svg,this.wheelListener,t),this.options.mouseWheelZoomEnabled=!1}},l.prototype.handleMouseWheel=function(t){if(this.options.zoomEnabled&&\"none\"===this.state){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1);var e=t.deltaY||1,o=Date.now()-this.lastMouseWheelEventTime,n=3+Math.max(0,30-o);this.lastMouseWheelEventTime=Date.now(),\"deltaMode\"in t&&0===t.deltaMode&&t.wheelDelta&&(e=0===t.deltaY?0:Math.abs(t.wheelDelta)/t.deltaY),e=-.3<e&&e<.3?e:(e>0?1:-1)*Math.log(Math.abs(e)+10)/n;var i=this.svg.getScreenCTM().inverse(),s=r.getEventPoint(t,this.svg).matrixTransform(i),a=Math.pow(1+this.options.zoomScaleSensitivity,-1*e);this.zoomAtPoint(a,s)}},l.prototype.zoomAtPoint=function(t,e,o){var n=this.viewport.getOriginalState();o?(t=Math.max(this.options.minZoom*n.zoom,Math.min(this.options.maxZoom*n.zoom,t)),t/=this.getZoom()):this.getZoom()*t<this.options.minZoom*n.zoom?t=this.options.minZoom*n.zoom/this.getZoom():this.getZoom()*t>this.options.maxZoom*n.zoom&&(t=this.options.maxZoom*n.zoom/this.getZoom());var i=this.viewport.getCTM(),s=e.matrixTransform(i.inverse()),r=this.svg.createSVGMatrix().translate(s.x,s.y).scale(t).translate(-s.x,-s.y),a=i.multiply(r);a.a!==i.a&&this.viewport.setCTM(a)},l.prototype.zoom=function(t,e){this.zoomAtPoint(t,r.getSvgCenterPoint(this.svg,this.width,this.height),e)},l.prototype.publicZoom=function(t,e){e&&(t=this.computeFromRelativeZoom(t)),this.zoom(t,e)},l.prototype.publicZoomAtPoint=function(t,e,o){if(o&&(t=this.computeFromRelativeZoom(t)),\"SVGPoint\"!==s.getType(e)){if(!(\"x\"in e&&\"y\"in e))throw new Error(\"Given point is invalid\");e=r.createSVGPoint(this.svg,e.x,e.y)}this.zoomAtPoint(t,e,o)},l.prototype.getZoom=function(){return this.viewport.getZoom()},l.prototype.getRelativeZoom=function(){return this.viewport.getRelativeZoom()},l.prototype.computeFromRelativeZoom=function(t){return t*this.viewport.getOriginalState().zoom},l.prototype.resetZoom=function(){var t=this.viewport.getOriginalState();this.zoom(t.zoom,!0)},l.prototype.resetPan=function(){this.pan(this.viewport.getOriginalState())},l.prototype.reset=function(){this.resetZoom(),this.resetPan()},l.prototype.handleDblClick=function(t){if(this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),this.options.controlIconsEnabled){var e=t.target.getAttribute(\"class\")||\"\";if(e.indexOf(\"svg-pan-zoom-control\")>-1)return!1}var o;o=t.shiftKey?1/(2*(1+this.options.zoomScaleSensitivity)):2*(1+this.options.zoomScaleSensitivity);var n=r.getEventPoint(t,this.svg).matrixTransform(this.svg.getScreenCTM().inverse());this.zoomAtPoint(o,n)},l.prototype.handleMouseDown=function(t,e){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),s.mouseAndTouchNormalize(t,this.svg),this.options.dblClickZoomEnabled&&s.isDblClick(t,e)?this.handleDblClick(t):(this.state=\"pan\",this.firstEventCTM=this.viewport.getCTM(),this.stateOrigin=r.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()))},l.prototype.handleMouseMove=function(t){if(this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),\"pan\"===this.state&&this.options.panEnabled){var e=r.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()),o=this.firstEventCTM.translate(e.x-this.stateOrigin.x,e.y-this.stateOrigin.y);this.viewport.setCTM(o)}},l.prototype.handleMouseUp=function(t){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),\"pan\"===this.state&&(this.state=\"none\")},l.prototype.fit=function(){var t=this.viewport.getViewBox(),e=Math.min(this.width/t.width,this.height/t.height);this.zoom(e,!0)},l.prototype.contain=function(){var t=this.viewport.getViewBox(),e=Math.max(this.width/t.width,this.height/t.height);this.zoom(e,!0)},l.prototype.center=function(){var t=this.viewport.getViewBox(),e=.5*(this.width-(t.width+2*t.x)*this.getZoom()),o=.5*(this.height-(t.height+2*t.y)*this.getZoom());this.getPublicInstance().pan({x:e,y:o})},l.prototype.updateBBox=function(){this.viewport.simpleViewBoxCache()},l.prototype.pan=function(t){var e=this.viewport.getCTM();e.e=t.x,e.f=t.y,this.viewport.setCTM(e)},l.prototype.panBy=function(t){var e=this.viewport.getCTM();e.e+=t.x,e.f+=t.y,this.viewport.setCTM(e)},l.prototype.getPan=function(){var t=this.viewport.getState();return{x:t.x,y:t.y}},l.prototype.resize=function(){var t=r.getBoundingClientRectNormalized(this.svg);this.width=t.width,this.height=t.height;var e=this.viewport;e.options.width=this.width,e.options.height=this.height,e.processCTM(),this.options.controlIconsEnabled&&(this.getPublicInstance().disableControlIcons(),this.getPublicInstance().enableControlIcons())},l.prototype.destroy=function(){var t=this;this.beforeZoom=null,this.onZoom=null,this.beforePan=null,this.onPan=null,this.onUpdatedCTM=null,null!=this.options.customEventsHandler&&this.options.customEventsHandler.destroy({svgElement:this.svg,eventsListenerElement:this.options.eventsListenerElement,instance:this.getPublicInstance()});for(var e in this.eventListeners)(this.options.eventsListenerElement||this.svg).removeEventListener(e,this.eventListeners[e],!this.options.preventMouseEventsDefault&&h);this.disableMouseWheelZoom(),this.getPublicInstance().disableControlIcons(),this.reset(),c=c.filter(function(e){return e.svg!==t.svg}),delete this.options,delete this.viewport,delete this.publicInstance,delete this.pi,this.getPublicInstance=function(){return null}},l.prototype.getPublicInstance=function(){var t=this;return this.publicInstance||(this.publicInstance=this.pi={enablePan:function(){return t.options.panEnabled=!0,t.pi},disablePan:function(){return t.options.panEnabled=!1,t.pi},isPanEnabled:function(){return!!t.options.panEnabled},pan:function(e){return t.pan(e),t.pi},panBy:function(e){return t.panBy(e),t.pi},getPan:function(){return t.getPan()},setBeforePan:function(e){return t.options.beforePan=null===e?null:s.proxy(e,t.publicInstance),t.pi},setOnPan:function(e){return t.options.onPan=null===e?null:s.proxy(e,t.publicInstance),t.pi},enableZoom:function(){return t.options.zoomEnabled=!0,t.pi},disableZoom:function(){return t.options.zoomEnabled=!1,t.pi},isZoomEnabled:function(){return!!t.options.zoomEnabled},enableControlIcons:function(){return t.options.controlIconsEnabled||(t.options.controlIconsEnabled=!0,i.enable(t)),t.pi},disableControlIcons:function(){return t.options.controlIconsEnabled&&(t.options.controlIconsEnabled=!1,i.disable(t)),t.pi},isControlIconsEnabled:function(){return!!t.options.controlIconsEnabled},enableDblClickZoom:function(){return t.options.dblClickZoomEnabled=!0,t.pi},disableDblClickZoom:function(){return t.options.dblClickZoomEnabled=!1,t.pi},isDblClickZoomEnabled:function(){return!!t.options.dblClickZoomEnabled},enableMouseWheelZoom:function(){return t.enableMouseWheelZoom(),t.pi},disableMouseWheelZoom:function(){return t.disableMouseWheelZoom(),t.pi},isMouseWheelZoomEnabled:function(){return!!t.options.mouseWheelZoomEnabled},setZoomScaleSensitivity:function(e){return t.options.zoomScaleSensitivity=e,t.pi},setMinZoom:function(e){return t.options.minZoom=e,t.pi},setMaxZoom:function(e){return t.options.maxZoom=e,t.pi},setBeforeZoom:function(e){return t.options.beforeZoom=null===e?null:s.proxy(e,t.publicInstance),t.pi},setOnZoom:function(e){return t.options.onZoom=null===e?null:s.proxy(e,t.publicInstance),t.pi},zoom:function(e){return t.publicZoom(e,!0),t.pi},zoomBy:function(e){return t.publicZoom(e,!1),t.pi},zoomAtPoint:function(e,o){return t.publicZoomAtPoint(e,o,!0),t.pi},zoomAtPointBy:function(e,o){return t.publicZoomAtPoint(e,o,!1),t.pi},zoomIn:function(){return this.zoomBy(1+t.options.zoomScaleSensitivity),t.pi},zoomOut:function(){return this.zoomBy(1/(1+t.options.zoomScaleSensitivity)),t.pi},getZoom:function(){return t.getRelativeZoom()},setOnUpdatedCTM:function(e){return t.options.onUpdatedCTM=null===e?null:s.proxy(e,t.publicInstance),t.pi},resetZoom:function(){return t.resetZoom(),t.pi},resetPan:function(){return t.resetPan(),t.pi},reset:function(){return t.reset(),t.pi},fit:function(){return t.fit(),t.pi},contain:function(){return t.contain(),t.pi},center:function(){return t.center(),t.pi},updateBBox:function(){return t.updateBBox(),t.pi},resize:function(){return t.resize(),t.pi},getSizes:function(){return{width:t.width,height:t.height,realZoom:t.getZoom(),viewBox:t.viewport.getViewBox()}},destroy:function(){return t.destroy(),t.pi}}),this.publicInstance};var c=[],p=function(t,e){var o=s.getSvg(t);if(null===o)return null;for(var n=c.length-1;n>=0;n--)if(c[n].svg===o)return c[n].instance.getPublicInstance();return c.push({svg:o,instance:new l(o,e)}),c[c.length-1].instance.getPublicInstance()};e.exports=p},{\"./control-icons\":2,\"./shadow-viewport\":3,\"./svg-utilities\":5,\"./uniwheel\":6,\"./utilities\":7}],5:[function(t,e,o){var n=t(\"./utilities\"),i=\"unknown\";document.documentMode&&(i=\"ie\"),e.exports={svgNS:\"http://www.w3.org/2000/svg\",xmlNS:\"http://www.w3.org/XML/1998/namespace\",xmlnsNS:\"http://www.w3.org/2000/xmlns/\",xlinkNS:\"http://www.w3.org/1999/xlink\",evNS:\"http://www.w3.org/2001/xml-events\",getBoundingClientRectNormalized:function(t){if(t.clientWidth&&t.clientHeight)return{width:t.clientWidth,height:t.clientHeight};if(t.getBoundingClientRect())return t.getBoundingClientRect();throw new Error(\"Cannot get BoundingClientRect for SVG.\")},getOrCreateViewport:function(t,e){var o=null;if(o=n.isElement(e)?e:t.querySelector(e),!o){var i=Array.prototype.slice.call(t.childNodes||t.children).filter(function(t){return\"defs\"!==t.nodeName&&\"#text\"!==t.nodeName});1===i.length&&\"g\"===i[0].nodeName&&null===i[0].getAttribute(\"transform\")&&(o=i[0])}if(!o){var s=\"viewport-\"+(new Date).toISOString().replace(/\\D/g,\"\");o=document.createElementNS(this.svgNS,\"g\"),o.setAttribute(\"id\",s);var r=t.childNodes||t.children;if(r&&r.length>0)for(var a=r.length;a>0;a--)\"defs\"!==r[r.length-a].nodeName&&o.appendChild(r[r.length-a]);t.appendChild(o)}var l=[];return o.getAttribute(\"class\")&&(l=o.getAttribute(\"class\").split(\" \")),~l.indexOf(\"svg-pan-zoom_viewport\")||(l.push(\"svg-pan-zoom_viewport\"),o.setAttribute(\"class\",l.join(\" \"))),o},setupSvgAttributes:function(t){if(t.setAttribute(\"xmlns\",this.svgNS),t.setAttributeNS(this.xmlnsNS,\"xmlns:xlink\",this.xlinkNS),t.setAttributeNS(this.xmlnsNS,\"xmlns:ev\",this.evNS),null!==t.parentNode){var e=t.getAttribute(\"style\")||\"\";e.toLowerCase().indexOf(\"overflow\")===-1&&t.setAttribute(\"style\",\"overflow: hidden; \"+e)}},internetExplorerRedisplayInterval:300,refreshDefsGlobal:n.throttle(function(){for(var t=document.querySelectorAll(\"defs\"),e=t.length,o=0;o<e;o++){var n=t[o];n.parentNode.insertBefore(n,n)}},this?this.internetExplorerRedisplayInterval:null),setCTM:function(t,e,o){var n=this,s=\"matrix(\"+e.a+\",\"+e.b+\",\"+e.c+\",\"+e.d+\",\"+e.e+\",\"+e.f+\")\";t.setAttributeNS(null,\"transform\",s),\"transform\"in t.style?t.style.transform=s:\"-ms-transform\"in t.style?t.style[\"-ms-transform\"]=s:\"-webkit-transform\"in t.style&&(t.style[\"-webkit-transform\"]=s),\"ie\"===i&&o&&(o.parentNode.insertBefore(o,o),window.setTimeout(function(){n.refreshDefsGlobal()},n.internetExplorerRedisplayInterval))},getEventPoint:function(t,e){var o=e.createSVGPoint();return n.mouseAndTouchNormalize(t,e),o.x=t.clientX,o.y=t.clientY,o},getSvgCenterPoint:function(t,e,o){return this.createSVGPoint(t,e/2,o/2)},createSVGPoint:function(t,e,o){var n=t.createSVGPoint();return n.x=e,n.y=o,n}}},{\"./utilities\":7}],6:[function(t,e,o){e.exports=function(){function t(t,e){var o=function(t){!t&&(t=window.event);var o={originalEvent:t,target:t.target||t.srcElement,type:\"wheel\",deltaMode:\"MozMousePixelScroll\"==t.type?0:1,deltaX:0,delatZ:0,preventDefault:function(){t.preventDefault?t.preventDefault():t.returnValue=!1}};return\"mousewheel\"==u?(o.deltaY=-.025*t.wheelDelta,t.wheelDeltaX&&(o.deltaX=-.025*t.wheelDeltaX)):o.deltaY=t.detail,e(o)};return c.push({element:t,fn:o}),o}function e(t){for(var e=0;e<c.length;e++)if(c[e].element===t)return c[e].fn;return function(){}}function o(t){for(var e=0;e<c.length;e++)if(c[e].element===t)return c.splice(e,1)}function n(e,o,n,i){var s;s=\"wheel\"===u?n:t(e,n),e[a](h+o,s,!!i&&p)}function i(t,n,i,s){var r;r=\"wheel\"===u?i:e(t),t[l](h+n,r,!!s&&p),o(t)}function s(t,e,o){n(t,u,e,o),\"DOMMouseScroll\"==u&&n(t,\"MozMousePixelScroll\",e,o)}function r(t,e,o){i(t,u,e,o),\"DOMMouseScroll\"==u&&i(t,\"MozMousePixelScroll\",e,o)}var a,l,u,h=\"\",c=[],p={passive:!0};return window.addEventListener?(a=\"addEventListener\",l=\"removeEventListener\"):(a=\"attachEvent\",l=\"detachEvent\",h=\"on\"),u=\"onwheel\"in document.createElement(\"div\")?\"wheel\":void 0!==document.onmousewheel?\"mousewheel\":\"DOMMouseScroll\",{on:s,off:r}}()},{}],7:[function(t,e,o){function n(t){return function(e){window.setTimeout(e,t)}}e.exports={extend:function(t,e){t=t||{};for(var o in e)this.isObject(e[o])?t[o]=this.extend(t[o],e[o]):t[o]=e[o];return t},isElement:function(t){return t instanceof HTMLElement||t instanceof SVGElement||t instanceof SVGSVGElement||t&&\"object\"==typeof t&&null!==t&&1===t.nodeType&&\"string\"==typeof t.nodeName},isObject:function(t){return\"[object Object]\"===Object.prototype.toString.call(t)},isNumber:function(t){return!isNaN(parseFloat(t))&&isFinite(t)},getSvg:function(t){var e,o;if(this.isElement(t))e=t;else{if(!(\"string\"==typeof t||t instanceof String))throw new Error(\"Provided selector is not an HTML object nor String\");if(e=document.querySelector(t),!e)throw new Error(\"Provided selector did not find any elements. Selector: \"+t)}if(\"svg\"===e.tagName.toLowerCase())o=e;else if(\"object\"===e.tagName.toLowerCase())o=e.contentDocument.documentElement;else{if(\"embed\"!==e.tagName.toLowerCase())throw\"img\"===e.tagName.toLowerCase()?new Error('Cannot script an SVG in an \"img\" element. Please use an \"object\" element or an in-line SVG.'):new Error(\"Cannot get SVG.\");o=e.getSVGDocument().documentElement}return o},proxy:function(t,e){return function(){return t.apply(e,arguments)}},getType:function(t){return Object.prototype.toString.apply(t).replace(/^\\[object\\s/,\"\").replace(/\\]$/,\"\")},mouseAndTouchNormalize:function(t,e){if(void 0===t.clientX||null===t.clientX)if(t.clientX=0,t.clientY=0,void 0!==t.touches&&t.touches.length){if(void 0!==t.touches[0].clientX)t.clientX=t.touches[0].clientX,t.clientY=t.touches[0].clientY;else if(void 0!==t.touches[0].pageX){var o=e.getBoundingClientRect();t.clientX=t.touches[0].pageX-o.left,t.clientY=t.touches[0].pageY-o.top}}else void 0!==t.originalEvent&&void 0!==t.originalEvent.clientX&&(t.clientX=t.originalEvent.clientX,t.clientY=t.originalEvent.clientY)},isDblClick:function(t,e){if(2===t.detail)return!0;if(void 0!==e&&null!==e){var o=t.timeStamp-e.timeStamp,n=Math.sqrt(Math.pow(t.clientX-e.clientX,2)+Math.pow(t.clientY-e.clientY,2));return o<250&&n<10}return!1},now:Date.now||function(){return(new Date).getTime()},throttle:function(t,e,o){var n,i,s,r=this,a=null,l=0;o||(o={});var u=function(){l=o.leading===!1?0:r.now(),a=null,s=t.apply(n,i),a||(n=i=null)};return function(){var h=r.now();l||o.leading!==!1||(l=h);var c=e-(h-l);return n=this,i=arguments,c<=0||c>e?(clearTimeout(a),a=null,l=h,s=t.apply(n,i),a||(n=i=null)):a||o.trailing===!1||(a=setTimeout(u,c)),s}},createRequestAnimationFrame:function(t){var e=null;return\"auto\"!==t&&t<60&&t>1&&(e=Math.floor(1e3/t)),null===e?window.requestAnimationFrame||n(33):n(e)}}},{}]},{},[1]);\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Combine the SWISH components.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('jswish',[ \"jquery\",\n\t \"config\",\n\t \"preferences\",\n\t \"history\",\n\t \"modal\",\n\t \"chat\",\n\t \"splitter\",\n\t \"bootstrap\",\n\t \"pane\",\n\t \"tabbed\",\n\t \"notebook\",\n\t \"navbar\",\n\t \"search\",\n\t \"editor\",\n\t \"query\",\n\t \"runner\",\n\t \"term\",\n\t \"laconic\",\n\t \"login\",\n\t \"chatroom\",\n\t \"version\",\n\t \"d3\",\n\t \"c3\",\n\t \"svg-pan-zoom\"\n       ], function($, config, preferences, history, modal) {\n\npreferences.setDefault(\"semantic-highlighting\", true);\npreferences.setDefault(\"emacs-keybinding\", false);\npreferences.setDefault(\"new-tab\", true);\npreferences.setDefault(\"preserve-state\", true);\npreferences.setInform(\"preserve-state\", \".unloadable\");\n\n(function($) {\n  var pluginName = 'swish';\n\n  function glyph(name, func) {\n    func.glyph = name;\n    return func;\n  }\n\n  function icon(name, func) {\n    func.typeIcon = name;\n    return func;\n  }\n\n  var defaults = {\n    menu: {\n      \"File\":\n      { \"Save ...\": glyph(\"cloud-upload\", function() {\n\t  menuBroadcast(\"save\", \"as\");\n\t}),\n\t\"Info & history ...\": glyph(\"info-sign\", function() {\n\t  menuBroadcast(\"fileInfo\");\n\t}),\n\t\"Reload\": glyph(\"refresh\", function() {\n\t  menuBroadcast(\"reload\");\n\t}),\n\t\"Open recent\": {\n\t  type: \"submenu\",\n\t  glyph: \"paperclip\",\n\t  action: function(ev) {\n\t    history.openRecent(ev, $(this).data('document'));\n\t  },\n\t  update: history.updateRecentUL\n\t},\n\t\"Share\": \"--\",\n\t\"Follow ...\": config.http.locations.follow_file_options ?\n\t\t      glyph(\"eye-open\", function() {\n\t  menuBroadcast(\"follow-file\");\n\t}) : undefined,\n\t\"Start TogetherJS ...\": icon(\"togetherjs\", function() {\n\t  $(\"body\").swish('collaborate');\n\t}),\n\t\"Export\": \"--\",\n\t\"Download\": glyph(\"floppy-save\", function() {\n\t  menuBroadcast(\"download\");\n\t}),\n\t\"Print ...\": glyph(\"print\", function() {\n\t  menuBroadcast(\"print\");\n\t})\n      },\n      \"Edit\":\n      { \"Clear messages\": function() {\n\t  menuBroadcast(\"clearMessages\");\n\t},\n\t\"Changes\": \"--\",\n\t\"View changes\": function() {\n\t  menuBroadcast(\"diff\");\n\t},\n\t\"Edit\": \"--\",\n\t\"Find (Ctrl-F)\": function() {\n\t  menuBroadcast(\"edit-command\", \"find\");\n\t},\n\t\"Find and replace (Shift-Ctrl-F)\": function() {\n\t  menuBroadcast(\"edit-command\", \"replace\");\n\t},\n\t\"Jump to line (Alt-G)\": function() {\n\t  menuBroadcast(\"edit-command\", \"jumpToLine\");\n\t},\n\t\"Options\": \"--\",\n\t\"Semantic highlighting\": {\n\t  preference: \"semantic-highlighting\",\n\t  type: \"checkbox\"\n\t},\n\t\"Emacs Keybinding\": {\n\t  preference: \"emacs-keybinding\",\n\t  type: \"checkbox\",\n\t  value: \"false\"\n\t},\n\t\"Open document in new tab\": {\n\t  preference: \"new-tab\",\n\t  type: \"checkbox\",\n\t  value: \"true\"\n\t},\n\t\"Preserve state in browser\": {\n\t  preference: \"preserve-state\",\n\t  type: \"checkbox\",\n\t  value: \"true\"\n\t}\n      },\n      \"Examples\": function(navbar, dropdown) {\n\t$(\"body\").swish('populateExamples', navbar, dropdown);\n      },\n      \"Help\": function(navbar, dropdown) {\n\t$(\"body\").swish('populateHelp', navbar, dropdown);\n      }\n    }\n  }; // defaults;\n\n\n  /** @lends $.fn.swish */\n  var methods = {\n    /**\n     * Initialise SWISH on the page. At this moment, a page can only\n     * contain one SWISH application and swish is normally initialised\n     * on the body.  This might change.\n     * @example $(\"body\").swish();\n     * {Object} options\n     * {Boolean} options.show_beware If `true`, show a dialogue box\n     * telling this is a limited version.\n     */\n    _init: function(options) {\n      swishLogo();\n      setupModal();\n      setupPanes();\n      setupResize();\n      setupUnload();\n      $(\"#search\").search();\n\n      options = options||{};\n      this.addClass(\"swish\");\n\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\t\t\t/* private data */\n\n\t$(\"#navbar\").navbar(defaults.menu);\n\t$(\"#login\").login();\n\n\tvar  editor = $(\".prolog-editor\").prologEditor({save:true});\n\tdata.runner = $(\".prolog-runners\").prologRunners();\n\tdata.query  = $(\".prolog-query\").queryEditor(\n          { source:   function() {\n\t      return elem.swish('prologSource');\n\t    },\n\t    sourceID: function() {\n\t      return editor.prologEditor('getSourceID');\n\t    },\n\t    examples: elem.swish('examples'),\n\t    runner:   data.runner,\n\t    editor:   editor[0]\n\t  });\n\telem.data(pluginName, data);\t/* store with element */\n\tdata.restoring = true;\n\n\t$(\".notebook\").notebook();\n\n\tif ( options.show_beware &&\n\t     !(swish.option && swish.option.show_beware == false) )\n\t  menuBroadcast(\"help\", {file:\"beware.html\", notagain:\"beware\"});\n\n\tif ( window.location.href.indexOf(\"&togetherjs=\") > 0 )\n\t  elem.swish('collaborate');\n\n\t$(\"#chat\").chat('');\n\t$(\"#broadcast-bell\")\n\t\t.chatbell({\n\t\t  empty_title: \"Click to open chat\"\n\t\t});\n\t$(\"#chat-menu\").on(\"click\", \"a\", function(ev) {\n\t  var a = $(ev.target).closest(\"a\");\n\t  switch ( a.data('action') ) {\n\t  case 'chat-shared':\n\t    $(\"body\").swish('playFile', {\n\t      file: config.swish.hangout,\n\t      chat: 'large'\n\t    });\n\t    break;\n\t  case 'chat-about-file':\n\t    menuBroadcast(\"chat-about-file\");\n\t  }\n\t});\n\n\tsetInterval(function(){\n\t  $(\".each-minute\").trigger(\"minute\");\n\t}, 60000);\n\n\tif ( elem[pluginName]('preserve_state') )\n\t{ $(\".unloadable\").trigger(\"restore\");\n\t}\n\n\tdelete data.restoring;\n\telem[pluginName]('runDelayedRestore');\n\t$().version('checkForUpdates');\n      });\n    },\n\n    /**\n     * @return {Boolean} `true` when we should save and restore\n     * the state to the browser local store.\n     */\n    preserve_state: function() {\n      if ( swish.option.preserve_state == false )\n\treturn false;\n      if ( preferences.getVal(\"preserve-state\") == false )\n\treturn false;\n\n      function getQueryVariable(variable) {\n\tvar query = window.location.search.substring(1);\n\tvar vars = query.split('&');\n\tfor (var i = 0; i < vars.length; i++) {\n\t  var pair = vars[i].split('=');\n\t  if (decodeURIComponent(pair[0]) == variable) {\n\t    return decodeURIComponent(pair[1]);\n\t  }\n\t}\n      }\n\n      if ( getQueryVariable(\"restore\") == \"false\" )\n\treturn false;\n\n      return true;\n    },\n\n    afterRestore: function(f) {\n      var data = this.data(\"swish\");\n\n      if ( data.after_restore )\n\tdata.after_restore.push(f);\n      else\n\tdata.after_restore = [f];\n\n      return this;\n    },\n\n    runDelayedRestore: function() {\n      var swish = this;\n      var data = this.data(\"swish\");\n\n      if ( data.after_restore ) {\n\tvar f;\n\twhile( (f = data.after_restore.pop()) )\n\t  f.call(swish);\n      }\n\n      return this;\n    },\n\n\n    /**\n     * Trigger a global event in SWISH.  Currently defined events are:\n     *\n     *   - `help`        -- show a modal help window\n     *   - `source`      -- load a new source\n     *   - `saveProgram` -- save the current program\n     *\n     * This method triggers all elements of class\n     * `swish-event-receiver`.\n     *\n     * @param {String} name is the name of the trigger.\n     * @param {Object|null} data provides additional data for the event.\n     */\n    trigger: function(name, data) {\n      menuBroadcast(name, data);\n      return this;\n    },\n\n    /**\n     * Play a file from the webstore, loading it through ajax\n     * @param {String|Object} options If a string, the name\n     * of the file in the web storage\n     * @param {String} options.file is the name of the file in the web\n     * storage\n     * @param {Number} [options.line] is the initial line number\n     * @param {RegEx} [options.regex] search to highlight\n     * @param {Boolean} [options.showAllMatches] Show other matches on\n     * page.\n     * @param {Boolean} [options.newTab] if `true`, open the file in\n     * a new tab.\n     * @param {Boolean} [options.noHistory] if `true`, do not push the\n     * new document to the history.\n     * @param {Object} [options.prompt] provided for trace events.  Must\n     * be used to highlight the Prolog port at the indicated location.\n     */\n    playFile: function(options) {\n      var elem = this;\n      if ( typeof(options) == \"string\" )\n\toptions = {file:options};\n\n      var existing = this.find(\".storage\").storage('match', options);\n      if ( existing && existing.storage('expose', \"Already open\") )\n\treturn this;\t\t\t\t/* FIXME: go to line */\n\n      var url = config.http.locations.web_storage + options.file;\n      $.ajax({ url: url,\n\t       type: \"GET\",\n\t       data: {format: \"json\"},\n\t       success: function(reply) {\n\t\t reply.url = url;\n\t\t reply.st_type = \"gitty\";\n\n\t\t function copyAttrs(names) {\n\t\t   for(var i=0; i<names.length; i++) {\n\t\t     var name = names[i];\n\t\t     if ( options[name] )\n\t\t       reply[name] = options[name];\n\t\t   }\n\t\t }\n\n\t\t copyAttrs([ \"line\",\n\t\t\t     \"regex\", \"showAllMatches\",\n\t\t\t     \"newTab\", \"noHistory\",\n\t\t\t     \"prompt\", \"chat\"\n\t\t\t   ]);\n\n\t\t elem.swish('setSource', reply);\n\t       },\n\t       error: function(jqXHR) {\n\t\t modal.ajaxError(jqXHR);\n\t       }\n\t     });\n\n      return this;\n    },\n\n    /**\n     * Load file from a URL.  This fetches the data from the URL and\n     * broadcasts a `\"source\"` event that is normally picked up by\n     * the tabbed pane.\n     * @param {Object}   options\n     * @param {String}   options.url     URL to load.\n     * @param {Integer} [options.line]   Line to go to.\n     * @param {Regex}   [options.search] Text searched for.\n     */\n    playURL: function(options) {\n      var elem = this;\n      var existing = this.find(\".storage\").storage('match', options);\n\n      if ( existing && existing.storage('expose', \"Already open\") )\n\treturn this;\t\t\t\t/* FIXME: go to line */\n\n      $.ajax({ url: options.url,\n\t       type: \"GET\",\n\t       data: {format: \"json\"},\n\t       success: function(source) {\n\t\t var msg;\n\n\t\t if ( typeof(source) == \"string\" ) {\n\t\t   msg = { data: source };\n\t\t   msg.st_type = \"external\";\n\t\t } else if ( typeof(source) == \"object\" &&\n\t\t\t     typeof(source.data) == \"string\" ) {\n\t\t   msg = source;\n\t\t   msg.st_type = \"filesys\";\n\t\t } else {\n\t\t   alert(\"Invalid data\");\n\t\t   return;\n\t\t }\n\n\t\t msg.url  = options.url;\n\n\t\t function copyAttrs(names) {\n\t\t   for(var i=0; i<names.length; i++) {\n\t\t     var name = names[i];\n\t\t     if ( options[name] )\n\t\t       msg[name] = options[name];\n\t\t   }\n\t\t }\n\n\t\t copyAttrs([ \"line\",\n\t\t\t     \"regex\", \"showAllMatches\",\n\t\t\t     \"newTab\", \"noHistory\",\n\t\t\t     \"prompt\"\n\t\t\t   ]);\n\n\t\t elem.swish('setSource', msg);\n\t       },\n\t       error: function(jqXHR) {\n\t\t modal.ajaxError(jqXHR);\n\t       }\n      });\n    },\n\n    /**\n     * Open a source.  If we are in fullscreen mode and the current\n     * object cannot be opened by the current fullscreen node, we\n     * leave fullscreen mode.  Called by playFile and playURL.\n     */\n    setSource: function(src) {\n      var st = this.swish('isFullscreen');\n\n      if ( !(st && st.storage('setSource', src)) ) {\n\tif ( st )\n\t  this.swish('exitFullscreen');\n\tthis.find(\".tabbed\").tabbed('tabFromSource', src);\n      }\n\n      return this;\n    },\n\n\n    /**\n     * @param {Object} ex\n     * @param {String} ex.title is the title of the example\n     * @param {String} ex.file is the (file) name of the example\n     * @param {String} ex.href is the URL from which to download the\n     * program.\n     * @returns {Function|String} function that loads an example\n     */\n    openExampleFunction: function(ex) {\n      var swish = this;\n\n      if ( ex.type == \"divider\" ) {\n\treturn \"--\";\n      } else if ( ex.type == \"store\" ) {\n\treturn function() {\n\t  methods.playFile.call(swish, ex.file);\n\t};\n      } else {\n\treturn function() {\n\t  methods.playURL.call(swish, {url:ex.href});\n\t};\n      }\n    },\n\n    /**\n     * Populate the examples dropdown of the navigation bar. This\n     * method is used by the navigation bar initialization.\n     * @param {Object} navbar is the navigation bar\n     * @param {Object} dropdown is the examples dropdown\n     */\n    populateExamples: function(navbar, dropdown) {\n      var that = this;\n\n      that.off(\"examples-changed\")\n\t  .on(\"examples-changed\", function() {\n\t     $(\"#navbar\").navbar('clearDropdown', dropdown);\n\t     that.swish('populateExamples', navbar, dropdown);\n\t   });\n      $.ajax(config.http.locations.swish_examples,\n\t     { dataType: \"json\",\n\t       success: function(data) {\n\t\t for(var i=0; i<data.length; i++) {\n\t\t   var ex = data[i];\n\t\t   var title;\n\t\t   var options;\n\n\t\t   if ( ex == \"--\" || ex.type == \"divider\" ) {\n\t\t     title = \"--\";\n\t\t     options = \"--\";\n\t\t   } else {\n\t\t     var name = ex.file || ex.href;\n\t\t     title = ex.title;\n\t\t     options = that.swish('openExampleFunction', ex);\n\t\t     if ( name )\n\t\t       options.typeIcon = name.split('.').pop();\n\t\t   }\n\n\t\t   $(\"#navbar\").navbar('extendDropdown', dropdown,\n\t\t\t\t       title, options);\n\t\t }\n\t       },\n\t       error: function(jqXHR) {\n\t\t modal.ajaxError(jqXHR);\n\t       }\n\t     });\n      return this;\n    },\n\n    /**\n     * Populate the help dropdown of the navigation bar. This\n     * method is used by the navigation bar initialization.\n     * @param {Object} navbar is the navigation bar\n     * @param {Object} dropdown is the examples dropdown\n     */\n    populateHelp: function(navbar, dropdown) {\n      var that = this;\n\n      function openHelpFunction(help) {\n\treturn function() {\n\t  menuBroadcast(\"help\", {file:help.file});\n\t};\n      }\n\n      $.ajax(config.http.locations.swish_help_index,\n\t     { dataType: \"json\",\n\t       success: function(data) {\n\t\t for(var i=0; i<data.length; i++) {\n\t\t   var help = data[i];\n\t\t   var title;\n\t\t   var options;\n\n\t\t   if ( help == \"--\" || help.type == \"divider\" ) {\n\t\t     title = \"--\";\n\t\t     options = \"--\";\n\t\t   } else {\n\t\t     var name = help.file;\n\t\t     title = help.title;\n\t\t     options = openHelpFunction(help);\n\t\t   }\n\n\t\t   $(\"#navbar\").navbar('extendDropdown', dropdown,\n\t\t\t\t       title, options);\n\t\t }\n\t       },\n\t       error: function(jqXHR) {\n\t\t modal.ajaxError(jqXHR);\n\t       }\n\t     });\n      return this;\n    },\n\n\n    /**\n     * pick up all Prolog sources, preparing to execute a query. Currently\n     * picks up:\n     *\n     *   - The `.text()` from all elements that match\n     *   `\".background.prolog.source\"`\n     *   - The source of the Prolog editor.  We need some notion of a\n     *   _current_ Prolog editor.\n     */\n    prologSource: function() {\n      var list = [];\n      var src;\n\n      if ( (src=$(\".prolog-editor\").prologEditor('getSource', \"source\")) )\n\tlist.push(src);\n      if ( (src=$(\".background.prolog.source\").text()) )\n\tlist.push(src);\n\n      return list.join(\"\\n\\n\");\n    },\n\n    /**\n     * Pick up all breakpoints.  Currently assumes a single source.\n     * @param {String} pengineID is the pengine for which to set\n     * the breakpoints.\n     */\n    breakpoints: function(pengineID) {\n      return this.find(\".prolog-editor\")\n                 .prologEditor('getBreakpoints', pengineID)||[];\n    },\n\n    /**\n     * @param {Object} [options]\n     * @param {Boolean} [options.active=false] If `true`, only return\n     * info on the active tab\n     */\n    tabData: function(options) {\n      options = options||{};\n      if ( options.active ) {\n\treturn this.find(\".tab-pane.active .storage\").storage('getData', options);\n      } else {\n\treturn this.find(\".storage\").storage('getData', options);\n      }\n    },\n\n    /**\n     * Extract examples from `$(\".examples.prolog\").text()`.  If this\n     * does not exist, it returns a function that extracts the examples\n     * from the current Prolog source editor.\n     * @param {Boolean} [onlyglobal] if `true`, only extract globally\n     * listed examples.\n     * @returns {Array.String|null|Function}\n     */\n    examples: function(onlyglobal) {\n      var text = $(\".examples.prolog\").text();\n\n      if ( text ) {\n\treturn $().prologEditor('getExamples', text, false);\n      } else if ( onlyglobal != true ) {\n\treturn function() {\n\t  return $(\".prolog-editor\").prologEditor('getExamples');\n\t};\n      }\n    },\n\n    /**\n     * Make DOM element fullscreen\n     * @param {jQuery} node is the element to turn into fullscreen.\n     * Currently this only works for a notebook.\n     * @param {jQuery} main is the node getting the `fullscreen\n     * hamburger` class.\n     * @param {Boolean} [hide_navbar] if `true`, also hide\n     * the navigation bar.\n     */\n    fullscreen: function(node, main, hide_navbar) {\n      var swish = this;\n      var content = this.find(\".container.tile-top\");\n      var swishdata = this.data(\"swish\");\n\n      if ( swishdata.restoring ) {\n\tthis[pluginName]('afterRestore', function() {\n\t  swish.swish('fullscreen', node, main, hide_navbar);\n\t});\n\treturn this;\n      }\n\n      if ( !content.hasClass(\"fullscreen\") ) {\n\tif ( hide_navbar == true ||\n\t     ( config.swish.fullscreen &&\n\t       config.swish.fullscreen.hide_navbar == true ) )\n\t  this[pluginName]('showNavbar', false);\n\n\tvar data = this.data(\"fullscreen\");\n\tif ( !data ) {\n\t  data = {};\n\t  this.data(\"fullscreen\", data);\n\t}\n\tcontent.addClass(\"fullscreen\");\n\tmain = main||node;\n\tmain.addClass(\"fullscreen hamburger\");\n\tdata.fullscreen_origin = node.parent()[0];\n\tdata.fullscreen_main = main[0];\n\t$(content.children()[0]).hide();\n\tcontent.append(node);\n\tmain.trigger('fullscreen', true);\n      }\n\n      return this;\n    },\n\n    /**\n     * If some element is in fullscreen mode, revert\n     * back to tabbed mode.\n     * @return {Boolean} `true` if successful.\n     */\n    exitFullscreen: function() {\n      var content = this.find(\".container.tile-top\");\n\n      if ( content.hasClass(\"fullscreen\") ) {\n\tvar data = this.data(\"fullscreen\");\n\tvar node = $(content.children()[1]);\n\tvar main = data.fullscreen_main;\n\n\tthis[pluginName]('showNavbar', true);\n\n\tcontent.removeClass(\"fullscreen\");\n\t$(data.fullscreen_main).removeClass(\"fullscreen hamburger\");\n\t$(data.fullscreen_origin).append(node);\n\tdata.fullscreen_origin = null;\n\tdata.fullscreen_main = null;\n\t$(content.children()[0]).show();\n\t$(main).trigger('fullscreen', false);\n\n\treturn true;\n      }\n\n      return false;\n    },\n\n    /**\n     * Detect fullscreen mode\n     * @return {jQuery} storage object that is running in fullscreen\n     * mode.\n     */\n    isFullscreen: function() {\n      var content = this.find(\".container.tile-top\");\n\n      if ( content.hasClass(\"fullscreen\") ) {\n\tvar st = content.find(\".storage\");\n\tif ( st.length != 0 )\n\t  return st;\n      }\n    },\n\n    /**\n     * Control visibility of the navbar\n     * @param {Boolean} show controls whether or not the navbar\n     * is visible.\n     */\n    showNavbar: function(show) {\n      if ( show ) {\n\t$(\"nav.navbar\").attr(\"style\", \"display:block !important\")\n      } else {\n\t$(\"nav.navbar\").attr(\"style\", \"display:none !important\")\n      }\n    },\n\n    /**\n     * Open TogetherJS after lazy loading.\n     */\n    collaborate: function() {\n      var elem = this;\n      $(this).attr(\"data-end-togetherjs-html\", \"End collaboration\");\n      require([ \"https://togetherjs.com/togetherjs-min.js\"\n\t      ],\n\t      function() {\n\t\tTogetherJS(elem);\n\t      });\n      return this;\n    },\n\n    /**\n     * Show showUpdates\n     */\n    showUpdates: function(options) {\n      modal.show({\n        title: options.title || \"Recent SWISH updates\",\n\tbody: function() {\n\t  this.version(options);\n\t}\n      });\n    }\n  }; // methods\n\n  /**\n   * General actions on SWISH are sent as triggers.  Any part of\n   * the interface that is interested in events should add the class\n   * `swish-event-receiver` and listen to the events in which it is\n   * interested.\n   */\n  function menuBroadcast(event, data) {\n    $(\".swish-event-receiver\").trigger(event, data);\n  }\n\n  /**\n   * Turn elements with class `swish-logo` into the SWISH logo.\n   */\n  function swishLogo() {\n    $(\".swish-logo\")\n      .append($.el.b($.el.span({style:\"color:darkblue\"}, \"SWI\"),\n\t\t     $.el.span({style:\"color:maroon\"}, \"SH\")))\n      .css(\"margin-left\", \"30px\")\n      .css(\"font-size\", \"24px\")\n      .addClass(\"navbar-brand\");\n  }\n\n  /**\n   * Setup modal actions.  Subsequently, modal dialogue windows\n   * are opened by using the trigger `help`.\n   * @example $(\"body\").swish('action', 'help', {file:\"about.html\"});\n   */\n  function setupModal() {\n    if ( $(\"#modal\").length == 0 ) {\n      $(\"body\").append($.el.div({id:\"modal\"}));\n      $(\"#modal\").swishModal();\n    }\n  }\n\n  /**\n   * Setup the panes and allow for resizing them\n   */\n  function setupPanes() {\n    $(\".tile\").tile();\n    $(window).resize(function() { $(\".tile\").tile('resize'); });\n    $(\".tabbed\").tabbed();\n  }\n\n  function setupResize() {\n    $(window).resize(function() {\n      $(\".reactive-size\").trigger('reactive-resize');\n    });\n  }\n\n  function setupUnload() {\n    $(window).bind(\"beforeunload\", function(ev) {\n      var rc;\n\n      $(\".unloadable\").each(function() {\n\tvar r = {};\n\t$(this).trigger(\"unload\", r);\n\trc = rc||r.rc;\n      });\n\n      return rc;\n    });\n  }\n\n  /**\n   * <Class description>\n   *\n   * @class swish\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.swish = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n}); // define()\n;\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2018, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * RequireJS module to load additional web plugins. Such plugins notably\n * may deal with extending HTML cells in notebooks.\n */\n\ndefine('plugin',[ \"jquery\", \"config\", \"utils\" ],\n       function($, config, utils) {\n\nfunction to_array(x) {\n  if ( x !== undefined ) {\n    return $.isArray(x) ? x : [x];\n  } else {\n    return [];\n  }\n}\n\nfunction load_plugin(plugin) {\n  to_array(plugin.css).forEach(utils.loadCSS);\n\n  return to_array(plugin.js);\n}\n\nvar plugin = {\n  /**\n   * @return array of required JavaScript dependencies\n   */\n  load: function() {\n    var jsdeps = [];\n    if ( $.isArray(config.plugins) ) {\n      for(var i=0; i<config.plugins.length; i++) {\n\t$.merge(jsdeps, load_plugin(config.plugins[i]));\n      }\n    }\n\n    return jsdeps;\n  }\n};\n\nreturn plugin;\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Load SWISH. Just provides the RequireJS config, requires jswish.js\n * and initialises this on the body.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\nrequire.config({\n  urlArgs: \"ts=\"+new Date().getTime(),\t/* prevent caching during development */\n  waitSeconds: 60,\t\t\t/* swish-min.js is big */\n  paths:\n  { jquery:      \"../bower_components/jquery/dist/jquery.min\",\n    \"jquery-ui\": \"../bower_components/jquery-ui/jquery-ui.min\",\n    laconic:     \"../bower_components/laconic/laconic\",\n    bootstrap:   \"../bower_components/bootstrap/dist/js/bootstrap.min\",\n    bloodhound:  \"../bower_components/typeahead.js/dist/bloodhound\",\n    typeahead:   \"../bower_components/typeahead.js/dist/typeahead.jquery\",\n    splitter:    \"../bower_components/jquery.splitter/js/jquery.splitter-0.15.0\",\n    tagmanager:  \"../bower_components/tagmanager/tagmanager\",\n    sha1:        \"../bower_components/js-sha1/src/sha1\",\n    c3:          \"../bower_components/c3/c3\",\n    d3:          \"../bower_components/d3/d3\",\n    \"svg-pan-zoom\": \"../bower_components/svg-pan-zoom/dist/svg-pan-zoom.min\",\n    sparkline:\t \"../bower_components/sparkline/dist/jquery.sparkline\",\n\n\t\t\t\t\t/* CodeMirror extensions */\n    \"cm/mode/prolog\": \"codemirror/mode/prolog\",\n    \"cm/addon/hover/prolog-hover\": \"codemirror/addon/hover/prolog-hover\",\n    \"cm/addon/hover/text-hover\": \"codemirror/addon/hover/text-hover\",\n    \"cm/addon/hint/templates-hint\": \"codemirror/addon/hint/templates-hint\",\n    \"cm/addon/hint/show-context-info\": \"codemirror/addon/hint/show-context-info\",\n\n\t\t\t\t\t/* Standard CodeMirror */\n    \"cm\" : \"../bower_components/codemirror\"\n  },\n  shim:\n  { bootstrap:\n    { deps:[\"jquery\"]\n    },\n    typeahead: /* HACK: See https://github.com/twitter/typeahead.js/issues/1211 */\n    { deps:[\"jquery\"],\n      init: function ($) {\n\treturn require.s.contexts._.registry['typeahead.js'].factory($);\n      }\n    },\n    bloodhound:\n    { deps:[\"jquery\"]\n    },\n    splitter:\n    { deps:[\"jquery\"]\n    },\n    laconic:\n    { deps:[\"jquery\"]\n    },\n    tagmanager:\n    { deps:[\"jquery\"]\n    },\n  }\n}); //require.config\n\n/*\n * Create the SWISH application.  Note that we need two levels of\n * require because the first gives us the location of the pengine\n * API, while the second fetches the pengines and starts the\n * application.\n */\nrequire([\"jquery\", \"config\", \"jswish\", \"plugin\"],\n\tfunction($, config, swish, plugin) {\n  var deps = plugin.load();\n\n  deps.push(config.http.locations.pengines+\"/pengines.js\");\n\n  require(deps, function() {\n    $(function() {\n      $(\"body\").swish(config.swish||{});\n    });\n  });\n});\n\n\ndefine(\"swish\", function(){});\n\n"]}
\ No newline at end of file
+{"version":3,"sources":["../bower_components/bootstrap/dist/js/bootstrap.min.js","../bower_components/jquery/dist/jquery.min.js","config.js","preferences.js","links.js","utils.js","../bower_components/laconic/laconic.js","version.js","modal.js","../bower_components/tagmanager/tagmanager.js","form.js","history.js","svgavatar.js","chat.js","../bower_components/jquery.splitter/js/jquery.splitter-0.15.0.js","pane.js","../bower_components/typeahead.js/dist/bloodhound.js","../bower_components/typeahead.js/dist/typeahead.jquery.js","search.js","../bower_components/codemirror/lib/codemirror.js","chatroom.js","chatbell.js","sourcelist.js","tabbed.js","prolog.js","codemirror/addon/hint/templates-hint.js","codemirror/mode/prolog/prolog-template-hint.js","gitty.js","difflib.js","diffview.js","diff.js","storage.js","codemirror/mode/prolog/prolog-ctype.js","codemirror/mode/prolog/prolog.js","codemirror/mode/prolog/prolog_keys.js","codemirror/mode/prolog/prolog_query.js","codemirror/mode/prolog/prolog_server.js","../bower_components/codemirror/mode/xml/xml.js","../bower_components/codemirror/mode/meta.js","../bower_components/codemirror/mode/markdown/markdown.js","../bower_components/codemirror/addon/edit/matchbrackets.js","../bower_components/codemirror/addon/comment/continuecomment.js","../bower_components/codemirror/addon/comment/comment.js","../bower_components/codemirror/addon/hint/show-hint.js","../bower_components/codemirror/addon/hint/anyword-hint.js","../bower_components/codemirror/addon/display/placeholder.js","../bower_components/codemirror/addon/runmode/runmode.js","../bower_components/codemirror/addon/search/searchcursor.js","../bower_components/codemirror/addon/dialog/dialog.js","../bower_components/codemirror/addon/search/search.js","../bower_components/codemirror/addon/search/jump-to-line.js","codemirror/addon/hover/text-hover.js","codemirror/addon/hover/prolog-hover.js","codemirror/addon/hint/show-context-info.js","../bower_components/codemirror/keymap/emacs.js","editor.js","answer.js","../bower_components/sparkline/dist/jquery.sparkline.js","download.js","runner.js","../bower_components/js-sha1/src/sha1.js","notebook.js","navbar.js","query.js","term.js","login.js","../bower_components/d3/d3.js","../bower_components/c3/c3.js","../bower_components/svg-pan-zoom/dist/svg-pan-zoom.min.js","jswish.js","plugin.js","swish.js"],"names":["e","t","module","exports","document","Error","window","this","m","n","i","o","r","createElement","text","v","head","appendChild","parentNode","removeChild","x","l","c","call","C","length","g","y","N","nodeName","toLowerCase","j","w","grep","nodeType","u","filter","P","R","each","match","M","I","W","$","promise","done","fail","then","apply","slice","_","removeEventListener","ready","V","toUpperCase","G","replace","X","U","Q","expando","uid","te","Z","test","JSON","parse","ne","ee","getAttribute","K","set","ue","a","s","cur","css","cssNumber","ie","exec","style","unit","start","end","ce","ownerDocument","le","body","fe","display","J","get","ae","ye","getElementsByTagName","querySelectorAll","merge","ve","xe","f","createDocumentFragment","p","d","h","me","de","ge","_default","innerHTML","htmlPrefilter","lastChild","childNodes","firstChild","textContent","push","createTextNode","inArray","contains","he","type","Ee","ke","Se","activeElement","De","off","arguments","guid","event","add","Le","children","He","Oe","removeAttribute","Pe","hasData","access","events","handle","extend","Me","pe","checked","defaultValue","Re","checkClone","je","eq","html","map","clone","src","_evalUrl","qe","Ie","cleanData","Fe","$e","getPropertyValue","pixelBoxStyles","We","Be","width","minWidth","maxWidth","_e","Qe","Ye","Ge","Je","cssProps","Ke","Math","max","Ze","oe","ceil","et","boxSizingReliable","parseFloat","tt","prototype","init","at","rt","hidden","requestAnimationFrame","setTimeout","fx","interval","tick","st","nt","Date","now","ut","height","opacity","lt","pt","tweeners","concat","ct","queue","_queueHooks","unqueued","empty","fire","always","it","isEmptyObject","overflow","overflowX","overflowY","remove","ft","Array","isArray","cssHooks","expand","prefilters","Deferred","elem","startTime","duration","tweens","run","notifyWith","resolveWith","props","opts","specialEasing","easing","originalProperties","originalOptions","createTween","Tween","stop","rejectWith","bind","progress","complete","timer","anim","vt","join","mt","xt","jt","St","Ft","unshift","_t","dataTypes","Wt","zt","ajaxSettings","flatOptions","Xt","contents","shift","mimeType","getResponseHeader","converters","Ut","responseFields","dataFilter","dataType","split","state","error","data","Object","getPrototypeOf","indexOf","toString","hasOwnProperty","noModule","fn","T","jquery","constructor","toArray","pushStack","prevObject","first","last","sort","splice","isPlainObject","random","isReady","noop","globalEval","trim","makeArray","support","Symbol","iterator","E","getElementById","id","L","getElementsByClassName","qsa","S","setAttribute","b","B","cacheLength","se","attrHandle","sourceIndex","nextSibling","disabled","isDisabled","value","dir","next","uniqueID","be","we","Te","O","Ce","relative","matches","find","TAG","k","uniqueSort","D","A","pop","q","H","RegExp","F","z","ID","CLASS","ATTR","PSEUDO","CHILD","bool","needsContext","Y","String","fromCharCode","charCodeAt","re","isXML","documentElement","setDocument","defaultView","top","addEventListener","attachEvent","attributes","className","createComment","getById","getElementsByName","getAttributeNode","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","sortDetached","attr","specified","escape","detectDuplicates","sortStable","getText","nodeValue","selectors","createPseudo",">"," ","+","~","preFilter","pseudos","setFilters","not","has","innerText","lang","target","location","hash","root","focus","hasFocus","href","tabIndex","enabled","selected","selectedIndex","parent","header","input","button","even","odd","gt","nth","radio","checkbox","file","password","image","submit","reset","filters","tokenize","compile","selector","select","expr","unique","isXMLDoc","escapeSelector","is","parseHTML","prev","closest","index","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","content","reverse","Callbacks","once","stopOnFalse","memory","disable","lock","locked","fireWith","fired","catch","pipe","notify","resolve","reject","TypeError","exceptionHook","stackTrace","getStackHook","when","console","warn","name","message","stack","readyException","readyWait","readyState","doScroll","cache","defineProperty","configurable","removeData","_data","_removeData","dequeue","clearQueue","source","show","hide","toggle","option","thead","col","tr","td","optgroup","tbody","tfoot","colgroup","caption","th","cloneNode","noCloneChecked","global","handler","triggered","dispatch","special","delegateType","bindType","origType","namespace","delegateCount","setup","teardown","removeEvent","fix","delegateTarget","preDispatch","handlers","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","handleObj","result","preventDefault","stopPropagation","postDispatch","addProp","Event","enumerable","originalEvent","writable","load","noBubble","trigger","blur","click","beforeunload","returnValue","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","stopImmediatePropagation","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","key","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","mouseenter","mouseleave","pointerenter","pointerleave","on","one","Ne","Ae","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","opener","getComputedStyle","cssText","marginLeft","right","position","offsetWidth","round","backgroundClip","clearCloneStyle","pixelPosition","reliableMarginLeft","scrollboxSize","ze","Xe","Ue","visibility","Ve","letterSpacing","fontWeight","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","setProperty","isFinite","getClientRects","getBoundingClientRect","left","margin","padding","border","prop","options","propHooks","pos","step","scrollTop","scrollLeft","linear","swing","cos","PI","ot","Animation","*","tweener","prefilter","speed","speeds","old","fadeTo","animate","finish","timers","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","clearTimeout","checkOn","optSelected","radioValue","dt","ht","removeAttr","attrHooks","yt","removeProp","propFix","parseInt","for","class","addClass","removeClass","toggleClass","hasClass","bt","val","valHooks","focusin","wt","Tt","isTrigger","parentWindow","simulate","triggerHandler","Ct","Et","kt","parseXML","DOMParser","parseFromString","Dt","Nt","At","param","encodeURIComponent","serialize","serializeArray","qt","Lt","Ht","Ot","Pt","Mt","Rt","It","$t","Bt","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","xml","json","* text","text html","text json","text xml","context","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","ifModified","status","statusText","statusCode","getAllResponseHeaders","setRequestHeader","overrideMimeType","abort","method","crossDomain","host","traditional","hasContent","headers","beforeSend","success","timeout","send","getJSON","getScript","throws","wrapAll","firstElementChild","wrapInner","wrap","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","Vt","0","1223","Gt","cors","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","response","script","text script","charset","scriptCharset","Yt","Qt","jsonp","jsonpCallback","createHTMLDocument","implementation","animated","offset","setOffset","using","pageYOffset","pageXOffset","offsetParent","scrollTo","Height","Width","","hover","unbind","delegate","undelegate","proxy","holdReady","parseJSON","isFunction","isWindow","camelCase","isNumeric","isNaN","define","amd","Jt","jQuery","Kt","noConflict","setCachedConfig","config","swish","config_hash","localStorage","setItem","KEY","stringify","str","getItem","alert","readNotAgain","err","hasLocalStore","defaults","inform","preferences","persistent","setNotAgain","notagain","broadcast","sel","undefined","setVal","setDefault","setInform","getVal","setDocVal","docid","prefs","getDocVal","def","modal","functions","PlDoc","from","ev","pred","substring","charAt","arity","decodeURIComponent","runQueryLink","isVar","vars","novars","nb","qname","cell","prologEditor","nbCell","anon","bindings","vr","feedback","owner","followLink","accept","swishStore","http","locations","swishExamples","startsWith","styles_loaded","utils","htmlEncode","loadCSS","styles","rel","media","generateUUID","getTime","floor","flash","obj","ago","time","basename","path","lastIndexOf","laconic","el","arg","substr","toExponential","toFixed","attributeMap","isEvent","child","acceptcharset","accesskey","allowtransparency","bgcolor","cellpadding","cellspacing","classname","colspan","csstext","defaultchecked","defaultselected","defaultvalue","frameborder","hspace","htmlfor","longdesc","maxlength","marginwidth","marginheight","noresize","noshade","readonly","rowspan","tabindex","valign","vspace","registerElement","renderer","deprecatedTags","tags","tagName","dollar","methods","_init","versions","div","table","commit","update","prolog","log","swishversion","title","version","span","brand","versionDetails","changelog","that","params","addChange","ch","desc","cls","author","committer_date_relative","checkForUpdates","saveCheckpoint","date","changes","emulateTransitionEnd","transition","WebkitTransition","MozTransition","OTransition","bsTransitionEnd","close","VERSION","TRANSITION_DURATION","Constructor","setState","$element","DEFAULTS","isLoading","loadingText","resetText","slide","to","pause","cycle","$indicators","paused","sliding","$active","$items","keyboard","keydown","clearInterval","setInterval","getItemIndex","getItemForDirection","direction","carousel","$trigger","transitioning","$parent","getParent","addAriaAndCollapsedClass","dimension","collapse","dropdown","$body","$dialog","$backdrop","isShown","originalBodyPad","scrollbarWidth","ignoreBackdropClick","fixedContent","remote","BACKDROP_TRANSITION_DURATION","backdrop","checkScrollbar","setScrollbar","resize","adjustDialog","enforceFocus","hideModal","handleUpdate","resetAdjustments","resetScrollbar","removeBackdrop","scrollHeight","clientHeight","paddingLeft","bodyIsOverflowing","paddingRight","innerWidth","abs","clientWidth","measureScrollbar","Boolean","area","br","code","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","pre","small","sub","sup","strong","ul","hoverState","inState","animation","placement","template","container","viewport","sanitize","sanitizeFn","whiteList","getOptions","$viewport","enter","leave","_options","fixTitle","getDefaults","getDelegateOptions","tip","isInStateTrue","getUID","setContent","getPosition","bottom","getCalculatedOffset","applyPlacement","$tip","getViewportAdjustedDelta","replaceArrow","arrow","getTitle","SVGElement","scroll","$arrow","enable","toggleEnabled","destroy","sanitizeHtml","tooltip","getContent","popover","$scrollElement","offsets","targets","activeTarget","process","refresh","getScrollHeight","activate","clear","scrollspy","element","tab","$target","checkPosition","checkPositionWithEventLoop","affixed","unpin","pinnedOffset","RESET","getState","getPinnedOffset","affix","offsetBottom","offsetTop","links","form","saveNotagain","closeButton","data-dismiss","notAgain","label","data-notagain","initTagsManagers","prefilled","tagsManager","swishModal","jqXHR","showHelp","help","showForm","showPlDoc","docURL","term","pldoc_doc_for","docBody","md","modalel","role","onclose","server_form","require","jqXHDR","formel","serializeAsObject","onreply","formError","showAjaxError","dom","win","resizeIframe","iframe","contentWindow","ntfid","ajaxError","wsid","epos","outerWidth","onremove","chat","CapitalizeFirstLetter","preventSubmitOnEnter","isClearInputOnEsc","externalTagId","prefillIdFieldName","prefillValueFieldName","AjaxPush","AjaxPushAllTags","AjaxPushParameters","delimiters","backspace","maxTags","hiddenTagListName","hiddenTagListId","output","deleteTagsOnBackspace","tagsContainer","tagCloseIcon","tagClass","validator","onlyTagList","tagList","fillInputOnTagRemove","publicMethods","pushTag","tag","ignoreEvents","alreadyInList","tlisLowerCase","tagId","idx","newTagId","newTagRemoveId","escaped","$el","lastTagObj","$self","tlis","tlid","privateMethods","trimTag","delimiterChars","$tagList","item","blinkClass","backgroundColor","blinkBGColor_1","blinkBGColor_2","Infinity","post","tagClasses","TagIdToRemove","spliceTag","refreshHiddenTagList","showOrHide","popTag","tagBeingRemoved","cl","tagBaseClass","inputBaseClass","lhiddenTagList","baseDelimiter","change","killEvent","cancelBubble","keyInArray","ary","applyDelimiter","prefill","pta","pushAllTags","keyNums","delimeters","delimiterKeys","hiddenObj","rndid","albet","navigator","userAgent","valgridw","LABELWIDTH","elemName","attrs","textInput","placeholder","tagInput","textarea","ignore_empty","arr","inset","jvalue","errors","fieldError","field","msg","group","showDialog","formBroadcast","dyn_clear","onclear","$this","fields","fileName","public","example","labeltext","fork","community_examples","btn","identity","link","stamp","labels","toLocaleString","description","commit_message","modify","who","canmodify","checkboxes","follow","email","projection","csvFormat","list","format","limit","distinct","boxes","boxel","dopts","box","autocomplete","chunk","filename","action","data-toggle","lblopts","widgets","glyphIcon","glyph","typeIcon","glyphIconButton","dropdownButton","icon","divClass","ulClass","actions","populateMenu","client","menu","runMenu","onclick","bound","history","pathname","reason","pushState","recentMaxLength","addRecent","doc","recent","d1","d2","openRecent","st_type","updateRecentUL","gitty","onpopstate","setAVappearanceByUserID","_this","svgavatar","selectAppearance","section","setFill","color","avatar","svg_images","reply","li_user","keypress","reconnect_delay","last_open","connect","add_pref_param","pname","lead","swish_chat","ws","connection","reconnect","WebSocket","onmessage","origin","onopen","empty_queue","disconnect","subscribe","channel","sub_channel","unsubscribe","subchannel","welcome","avatar_source","visitors","check_login","login","storage","userCount","cnt","gazers","gazer","profile","rejoined","avatars","joined","session_closed","chat-message","rooms","chatroom","hangout","chatbell","displayed","user","forbidden","read_until","broadcast_room","notifyUser","event_argv","create_user","user_li","unnotify","updateFiles","addUser","removeUser","lost","tmo","user_info","users","rc","self","is_self","addUserFile","fli","data-file","removeUserFile","user_too","removeFile","count","splitter_id","splitters","current_splitter","get_position","settings","orientation","panel_1","panel_2","invisible","onDragStart","onDragEnd","onDrag","splitter","new_width","new_height","silent","sw","sw2","pw","outerHeight","isActive","not_null","paneInfo","pane","panes","second","flipdir","tile","resize_start","info","resize_save","percent","resizestart","minheight","relto","sumh","splitContainer","factory","a0","isMsie","isBlankString","escapeRegExChars","isString","isNumber","isObject","isUndefined","isElement","isJQuery","toStr","collection","cb","reverseArgs","every","some","mixin","getIdGenerator","counter","templatify","defer","debounce","func","wait","immediate","later","callNow","args","throttle","previous","remaining","tokenizers","whitespace","nonword","getObjTokenizer","tokenizer","keys","tokens","LruCache","maxSize","List","tail","Node","node","tailItem","size","moveToFront","PersistentStorage","override","prefix","ttlKey","keyMatcher","ls","LOCAL_STORAGE","_noop","encode","decode","gatherMatchingKeys","len","removeItem","_prefix","_ttlKey","isExpired","_safeSet","ttl","Transport","cancelled","lastReq","_send","transport","_get","limiter","_cache","sharedCache","pendingRequestsCount","pendingRequests","maxPendingRequests","setMaxPendingRequests","num","resetCache","_fingerprint","resp","fingerprint","onDeckRequestArgs","jqXhr","cancel","SearchIndex","datumTokenizer","queryTokenizer","identify","normalizeTokens","token","newNode","IDS","CHILDREN","array","seen","uniques","getIntersection","arrayA","arrayB","ai","bi","intersection","lenArrayA","lenArrayB","bootstrap","datums","trie","datum","chars","ids","search","query","all","values","Prefetch","prepare","transform","thumbprint","cacheKey","_settings","store","fromCache","stored","fromNetwork","onError","onResponse","Remote","cancelLastRequest","oParser","parsePrefetch","callbackToDeferred","parseRemote","wildcard","rateLimitBy","rateLimitWait","toRemotePrepare","toLimiter","prepareByReplace","prepareByWildcard","idenityPrepare","onSuccess","deferred","sorter","initialize","sufficient","local","prefetch","Bloodhound","__ttAdapter","withAsync","sync","withoutAsync","_loadPrefetch","serialized","_initialize","addLocalToIndex","initPromise","force","processRemote","nonDuplicates","clearPrefetchCache","clearRemoteCache","ttAdapter","WWW","build","www","classes","defaultClassNames","buildCss","buildHtml","buildSelectors","wrapper","hint","borderColor","boxShadow","verticalAlign","inputWithNoHint","ltr","rtl","backgroundImage","dataset","suggestion","selectable","cursor","highlight","EventBus","deprecationMap","render","cursorchange","_trigger","deprecatedType","EventEmitter","types","bindContext","_callbacks","onAsync","onSync","callbacks","syncFlush","asyncFlush","getFlush","nextTick","flush","setImmediate","getRegex","patterns","caseSensitive","wordsOnly","regexStr","escapedPatterns","pattern","hightlightTextNode","textNode","patternNode","wrapperNode","regex","splitText","traverse","childNode","Input","$hint","$input","queryWhenFocused","$overflowHelper","buildOverflowHelper","_checkLanguageDirection","setHint","getHint","clearHint","clearHintIfInvalid","whiteSpace","fontFamily","fontSize","fontStyle","fontVariant","wordSpacing","textIndent","textRendering","textTransform","areQueriesEquivalent","normalizeQuery","withModifier","specialKeyCodeMap","9","27","37","39","13","38","40","_onBlur","resetInputValue","_onFocus","_onKeydown","keyName","_managePreventDefault","_shouldTrigger","_onInput","_setQuery","getInputValue","areEquivalent","hasDifferentWhitespace","onBlur","onFocus","onKeydown","onInput","getLangDir","getQuery","setQuery","setInputValue","hasQueryChangedSinceLastFocus","valIsPrefixOfHint","isValid","hasOverflow","constraint","isCursorAtEnd","valueLength","selectionStart","range","selection","createRange","moveStart","Dataset","templates","notFound","isValidName","nameGenerator","displayFn","getDisplayFn","displayKey","getTemplates","_resetLastSuggestion","suggestionTemplate","pending","footer","extractData","_overwrite","suggestions","_renderSuggestions","_renderPending","_renderNotFound","_empty","_append","$lastSuggestion","_appendSuggestions","$fragment","_getSuggestionsFragment","_getHeader","_getFooter","fragment","_injectQuery","_query","syncCalled","rendered","canceled","isEmpty","Menu","initializeDataset","oDataset","$node","datasets","_onSelectableClick","_onRendered","_allDatasetsEmpty","_onCleared","_propagate","isDatasetEmpty","_getSelectables","_removeCursor","$selectable","getActiveSelectable","_ensureVisible","elTop","elBottom","nodeScrollTop","nodeHeight","onSelectableClick","isOpen","setLanguageDirection","selectableRelativeToCursor","delta","$selectables","$oldCursor","oldIndex","newIndex","setCursor","getSelectableData","getTopSelectable","updateDataset","isValidUpdate","clearDataset","destroyDataset","DefaultMenu","_show","_hide","Typeahead","onFocused","onBlurred","onEnterKeyed","onTabKeyed","onEscKeyed","onUpKeyed","onDownKeyed","onLeftKeyed","onRightKeyed","onQueryChanged","onWhitespaceChanged","eventBus","minLength","_hacks","_onSelectableClicked","_onAsyncRequested","_onAsyncCanceled","_onAsyncReceived","_onDatasetRendered","_onDatasetCleared","_onLangDirChanged","ctx","$menu","hasActive","_updateHint","_onFocused","_minLengthMet","_onBlurred","_onEnterKeyed","_onTabKeyed","_onEscKeyed","_onUpKeyed","moveCursor","_onDownKeyed","_onLeftKeyed","_onRightKeyed","_onQueryChanged","_onWhitespaceChanged","_openIfActive","escapedQuery","frontMatchRegEx","isEnabled","deactivate","$candidate","payload","ttEach","$els","typeahead","buildHintFromInput","getBackgroundStyles","spellcheck","prepInput","backgroundAttachment","backgroundOrigin","backgroundPosition","backgroundRepeat","backgroundSize","revert","$wrapper","$elOrNull","attach","defaultHint","defaultMenu","MenuConstructor","classNames","newVal","contexts","registry","bloodHoundURL","fileTokenizer","renderFile","renderStoreSourceLine","hit","currentFile","alias","currentAlias","ext","renderSourceMatch","sourceLineTokenizer","renderSourceLine","predicateMatcher","ql","pl","templ","renderPredicate","mode","iso","summary","sourceMatcher","sourceRE","editor","line","renderUser","encodeURI","files","swish_typeahead","storeContent","sources","query_cache_length","typeaheadProperties","store_content","predicates","of","showAllMatches","play","string","CodeMirror","classTest","removeChildren","removeChildrenAndAdd","elt","eltP","activeElt","shadowRoot","current","joinClasses","as","copyObj","overwrite","countColumn","tabSize","startIndex","startValue","nextTab","findColumn","goal","skipped","min","spaceStr","spaceStrs","lst","out","insertSorted","score","priority","nothing","createObj","base","inst","create","isWordCharBasic","nonASCIISingleCaseWordChar","isWordChar","helper","isExtendingChar","extendingChars","skipExtendingChars","findFirst","midF","mid","Display","place","scrollbarFiller","gutterFiller","lineDiv","selectionDiv","cursorDiv","measure","lineMeasure","lineSpace","lines","mover","sizer","sizerWidth","heightForcer","scrollerGap","gutters","lineGutter","scroller","ie_version","webkit","gecko","mobile","draggable","viewFrom","viewTo","reportedViewFrom","reportedViewTo","renderedView","externalMeasured","viewOffset","lastWrapHeight","lastWrapWidth","updateLineNumbers","nativeBarWidth","barHeight","barWidth","scrollbarsClipped","lineNumWidth","lineNumInnerWidth","lineNumChars","alignWidgets","cachedCharWidth","cachedTextHeight","cachedPaddingH","maxLine","maxLineLength","maxLineChanged","wheelDX","wheelDY","wheelStartX","wheelStartY","selForContextMenu","activeTouch","getLine","sz","chunkSize","getBetween","iter","getLines","updateLineHeight","diff","lineNo","no","lineAtHeight","outer","i$1","lh","isLine","lineNumberFor","lineNumberFormatter","firstLineNumber","Pos","sticky","cmp","equalCursorPos","copyPos","maxPos","minPos","clipLine","clipPos","clipToLen","linelen","clipPosArray","seeReadOnlySpans","sawReadOnlySpans","seeCollapsedSpans","sawCollapsedSpans","MarkedSpan","marker","getMarkedSpanFor","spans","removeMarkedSpan","addMarkedSpan","markedSpans","attachLine","markedSpansBefore","startCh","isInsert","nw","startsBefore","inclusiveLeft","insertLeft","endsAfter","inclusiveRight","markedSpansAfter","endCh","stretchSpansOverChange","full","oldFirst","oldLast","sameLine","found","span$1","found$1","clearEmptySpans","newMarkers","gapMarkers","gap","i$2","i$3","clearWhenEmpty","removeReadOnlyRanges","markers","mark","readOnly","parts","mk","newParts","dfrom","dto","detachMarkedSpans","detachLine","attachMarkedSpans","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","bPos","fromCmp","toCmp","collapsedSpanAtSide","sps","sp","collapsed","collapsedSpanAtStart","collapsedSpanAtEnd","collapsedSpanAround","conflictingCollapsedRange","lineNo$$1","visualLine","merged","visualLineEnd","visualLineContinued","visualLineNo","lineN","vis","visualLineEndNo","lastLine","lineIsHidden","widgetNode","lineIsHiddenInner","heightAtLine","lineObj","lineLength","findMaxLine","cm","iterateBidiSections","part","level","getBidiPartAt","bidiOther","getOrder","bidiOrdering","getHandlers","emitter","_handlers","noHandlers","detachEvent","map$$1","signal","signalDOMEvent","e_defaultPrevented","codemirrorIgnore","signalCursorActivity","cursorActivity","curOp","cursorActivityHandlers","hasHandler","eventMixin","ctor","e_preventDefault","e_stopPropagation","e_stop","e_target","srcElement","e_button","mac","zeroWidthElement","zwspSupported","hasBadBidiRects","badBidiRects","txt","r0","r1","hasBadZoomedRects","badZoomedRects","normal","fromRange","defineMode","dependencies","modes","defineMIME","mime","spec","mimeModes","resolveMode","getMode","mfactory","modeObj","modeExtensions","exts","helperType","modeProps","prop$1","extendMode","properties","copyState","nstate","innerMode","startState","a1","a2","highlightLine","forceToEnd","modeGen","lineClasses","runMode","overlays","baseTokens","overlay","i_end","opaque","baseTokenPos","bgClass","textClass","getLineStyles","updateFrontier","getContextBefore","resetState","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","precise","Context","findStartLine","saved","fromSaved","processLine","nextLine","startAt","stream","StringStream","callBlankLine","eol","readToken","blankLine","inner","takeToken","asArray","Token","extractLineClasses","lineClass","flattenSpans","curStart","curStyle","addModeClass","mName","minindent","minline","lim","SavedContext","lookAhead","indented","retreatFrontier","updateLine","estimateHeight","estHeight","cleanUpLine","interpretTokenStyle","styleToClassCacheWithMode","styleToClassCache","buildLineContent","lineView","builder","trailingSpace","splitSpaces","getOption","rest","addToken","buildToken","buildTokenBadBidi","insertLineContent","maps","caches","querySelector","defaultSpecialCharPlaceholder","startStyle","endStyle","displayText","specialChars","mustWrap","lastIndex","txt$1","tabWidth","specialCharPlaceholder","fullStyle","trailingBefore","spaceBefore","buildCollapsedSpan","ignoreWidget","widget","needsContentAttribute","setUneditable","allText","spanStyle","spanEndStyle","spanStartStyle","nextChange","foundBookmarks","endStyles","j$1","j$2","upto","tokenText","LineView","buildViewArray","nextPos","pushOperation","op","operationGroup","ops","ownsGroup","delayedCallbacks","fireCallbacksForOps","cursorActivityCalled","finishOperation","endCb","signalLater","orphanDelayedCallbacks","fireOrphanDelayed","delayed","updateLineForChanges","dims","updateLineText","updateLineGutter","updateLineClasses","updateLineWidgets","ensureLineWrapped","updateLineBackground","background","getLineContent","built","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","gutterMarkers","lineNumbers","wrap$1","gutterWrap","lineNumber","gutterLeft","gutterWidth","alignable","insertLineWidgets","buildLineElement","insertLineWidgetsFor","allowAbove","handleMouseEvents","positionLineWidget","above","noHScroll","wrapperWidth","coverGutter","widgetHeight","parentStyle","eventInWidget","paddingTop","paddingVert","paddingH","currentStyle","scrollGap","displayWidth","displayHeight","ensureLineHeights","rect","wrapping","lineWrapping","curWidth","heights","rects","mapFromLineView","updateExternalMeasurement","measureChar","bias","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","getDimensions","forceUpdate","hasHeights","prepared","varHeight","measureCharInner","bogus","rtop","rbottom","nodeAndOffsetInLineMap","mStart","mEnd","coverStart","coverEnd","getUsefulRect","nullRect","maybeUpdateRectForZooming","rSpan","charWidth","rbot","bot","singleCursorHeightPerLine","screen","logicalXDPI","deviceXDPI","scaleX","scaleY","logicalYDPI","deviceYDPI","clearLineMeasurementCacheFor","clearLineMeasurementCache","externalMeasure","clearCaches","pageScrollX","chrome","android","pageScrollY","marginTop","widgetTopHeight","intoCoordSystem","includeWidgets","yOff","lOff","xOff","fromCoordSystem","coords","localBox","lineSpaceBox","charCoords","cursorCoords","preparedMeasure","getBidi","partPos","invert","other","estimateCoords","PosWithInfo","outside","xRel","coordsChar","coordsCharInner","rangeEnd","wrappedLineExtent","begin","wrappedLineExtentChar","boxIsAfter","widgetHeight$$1","coordsBidiPartWrapped","coordsBidiPart","baseX","chAround","boxAround","atLeft","atStart","_lineNo","ref","closestDist","endX","dist","textHeight","measureText","anchor","clientLeft","offsetLeft","compensateForHScroll","perLine","widgetsHeight","estimateLineHeights","est","posFromMouse","liberal","forRect","space","colDiff","updateSelection","showSelection","prepareSelection","primary","curFragment","cursors","selFragment","ranges","primIndex","range$$1","showCursorWhenSelecting","drawSelectionCursor","drawSelectionRange","cursorHeight","otherCursor","cmpCoords","rightSide","drawForLine","fromArg","toArg","wrapX","side","extent","lineLen","fromPos","toPos","openStart","openEnd","openLeft","docLTR","openRight","leftSide","topLeft","topRight","botLeft","botRight","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","restartBlink","focused","blinker","cursorBlinkRate","ensureFocus","delayBlurEvent","delayingBlurEvent","receivedFocus","rmClass","updateHeightsInViewport","prevBottom","updateWidgetHeight","chWidth","visibleLines","ensure","ensureFrom","ensureTo","alignHorizontally","comp","gutterW","align","maybeUpdateLineNumberWidth","innerW","updateGutterSpace","maybeScrollWindow","innerHeight","phantom","scrollNode","scrollIntoView","scrollPosIntoView","changed","endCoords","scrollPos","calculateScrollPos","startTop","startLeft","updateScrollTop","setScrollLeft","snapMargin","screentop","docBottom","atTop","atBottom","newTop","screenleft","screenw","tooWide","addToScrollTop","resolveScrollToPos","ensureCursorVisible","getCursor","scrollToPos","cursorScrollMargin","scrollToCoords","scrollToRange","scrollToCoordsRange","sPos","updateDisplaySimple","setScrollTop","startWorker","forceScroll","scrollbars","isScroller","scrollWidth","measureForScrollbars","docH","viewHeight","viewWidth","barLeft","docHeight","updateScrollbars","startWidth","startHeight","updateScrollbarsInner","sizes","paddingBottom","borderBottom","coverGutterNextToScrollbar","initScrollbars","scrollbarModel","scrollbarStyle","axis","startOperation","viewChanged","updateInput","typing","changeObjs","selectionChanged","updateMaxLine","nextOpId","endOperation","endOperations","endOperation_R1","endOperation_W1","endOperation_R2","endOperation_W2","i$4","endOperation_finish","maybeClipScrollbars","mustUpdate","DisplayUpdate","updatedDisplay","updateDisplayIfNeeded","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","takeFocus","setDocumentHeight","postUpdateDisplay","maybeHiddenMarkers","unhidden","maybeUnhiddenMarkers","runInOp","operation","methodOp","docMethodOp","regChange","lendiff","resetView","cut","viewCuttingPoint","cut$1","cutTop","cutBot","regLineChange","oldN","newN","adjustView","countDirtyView","dirty","highlightWorker","workTime","changedLines","oldStyles","highlighted","oldCls","newCls","ischange","workDelay","marginBottom","borderRightWidth","selectionSnapshot","getSelection","anchorNode","anchorOffset","focusNode","focusOffset","restoreSelection","snapshot","setEnd","removeAllRanges","addRange","editorIsHidden","viewportMargin","different","wrapperHeight","toUpdate","selSnapshot","patchDisplay","minHeight","oldDisplayWidth","updateNumbersFrom","rm","currentWheelTarget","updateNumber","updateGutters","specs","gElt","setGuttersForLineNumbers","wheelEventDelta","dx","wheelDeltaX","dy","wheelDeltaY","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","wheelPixelsPerUnit","onScrollWheel","canScrollX","canScrollY","presto","pixels","wheelSamples","movedX","movedY","sample","normalizeSelection","mayTouch","selectionsMayTouch","prim","inv","Range","Selection","simpleSelection","changeEnd","adjustForChange","computeSelAfterChange","offsetPos","computeReplacedSel","oldPrev","newPrev","loadMode","modeOption","resetModeState","isWholeLineUpdate","wholeLineUpdateBefore","updateDoc","estimateHeight$$1","spansFor","linesFor","Line","firstLine","lastText","lastSpans","nlines","insert","added","added$1","added$2","linkedDocs","sharedHistOnly","propagate","skip","sharedHist","linked","shared","attachDoc","setDirectionClass","directionChanged","History","startGen","undone","undoDepth","lastModTime","lastSelTime","lastOp","lastSelOp","lastOrigin","lastSelOrigin","generation","maxGeneration","historyChangeFromChange","histChange","attachLocalSpans","clearSelectionEvents","lastChangeEvent","hist","addChangeToHistory","selAfter","opId","historyEventDelay","pushSelectionToHistory","selectionEventCanBeMerged","somethingSelected","addSelectionToHistory","clearRedo","dest","equals","existing","removeClearedSpans","explicitlyCleared","getOldSpans","mergeOldSpans","stretched","oldCur","stretchCur","copyHistoryArray","newGroup","instantiateSel","copy","deepCopy","newChanges","Number","extendRange","posBefore","extendSelection","setSelection","extendSelections","heads","replaceOneSelection","setSimpleSelection","filterSelectionChange","this$1","setSelectionReplaceHistory","setSelectionNoUndo","NaN","setSelectionInner","skipAtomicInSelection","reCheckSelection","mayClear","newAnchor","skipAtomic","newHead","skipAtomicInner","oldPos","atomic","near","movePos","far","cantEdit","selectAll","sel_dontScroll","filterChange","makeChange","ignoreReadOnly","suppressEdits","makeChangeInner","makeChangeSingleDoc","rebased","rebaseHist","makeChangeFromHistory","allowSelectionOnly","suppress","antiChanges","returned","shiftDoc","distance","removed","makeChangeSingleDocInEditor","recomputeMaxLength","checkWidthStart","changesHandler","changeHandler","replaceRange","assign","splitLines","rebaseHistSelSingle","rebaseHistArray","ok","copied","changeLine","changeType","LeafChunk","BranchChunk","adjustScrollWhenAboveVisible","addLineWidget","LineWidget","insertAt","aboveVisible","markText","markTextShared","TextMarker","replacedWith","addToHistory","curLine","clearOnEnter","clearHistory","nextMarkerId","isParent","SharedTextMarker","findSharedMarkers","findMarks","copySharedMarkers","mFrom","mTo","subMark","detachSharedMarkers","subMarker","onDrop","clearDragCursor","lastDrop","dataTransfer","isReadOnly","FileReader","File","read","allowDropFileTypes","reader","lineSeparator","readAsText","draggingText","text$1","getData","listSelections","replaceSelection","setData","effectAllowed","setDragImage","safari","_top","onDragOver","frag","dragCursor","forEachCodeMirror","byClass","editors","ensureGlobalHandlers","globalsRegistered","registerGlobalHandlers","resizeTimer","onResize","setSize","normalizeKeyName","alt","ctrl","cmd","mod","normalizeKeyMap","keymap","keyname","lookupKey","getKeyMap","fallthrough","isModifierKey","keyNames","addModifierNames","noShift","flipCtrlCmd","altGraphKey","keyMap","deleteNearSelection","compute","kill","toKill","replaced","moveCharLogically","moveLogically","endOfLine","visually","moveInStorageOrder","prep","targetTop","moveVisually","bidi","mv","getWrappedLineExtent","searchInVisualLine","getRes","res","nextCh","lineStart","visual","lineEnd","lineStartSmart","firstNonWS","inWS","doHandleBinding","dropShift","commands","ensurePolled","prevShift","Pass","lookupKeyForEditor","keyMaps","extraKeys","dispatchKey","seq","keySeq","stopSeq","dispatchKeyInner","handleKeyBinding","motion","handleCharBinding","onKeyDown","handled","lastStoppedKey","hasCopyEvent","showCrossHair","up","onKeyUp","onKeyPress","clickRepeat","lastDoubleClick","compare","lastClick","PastClick","onMouseDown","supportsTouch","clickInGutter","repeat","selectingText","handleMappedButton","leftButtonDown","captureRightClick","onContextMenu","configureMouse","chromeOS","addNew","moveOnDrag","contained","behavior","dragDrop","dragAndDrop","leftButtonStartDrag","leftButtonSelect","moved","dragEnd","mouseMove","dragStart","e2","rangeForUnit","findWordAt","extendTo","lastPos","startCol","posCol","leftPos","startSel","ourIndex","oldRange","ourRange","ranges$1","bidiSimplify","sel_mouse","curCount","editorSize","move","anchorLine","boundary","headIndex","usePart","gutterEvent","prevent","mX","mY","lineBox","contextMenuInGutter","themeChanged","theme","guttersChanged","dragDropChanged","Init","funcs","dragFunctions","over","drop","wrappingChanged","Doc","inputStyles","inputStyle","pasteIncoming","cutIncoming","Delayed","autofocus","registerEventHandlers","opt","optionHandlers","finishInit","initHooks","finishTouch","touchFinished","prevTouch","isMouseLikeTouchEvent","touch","radiusX","radiusY","farAway","word","inp","getField","indentLine","how","aggressive","indent","curSpace","indentation","curSpaceString","indentUnit","indentString","indentWithTabs","pos$1","setLastCopied","newLastCopied","lastCopied","applyTextInput","inserted","deleted","paste","textLines","splitLinesAuto","multiPaste","pasteLinesPerSelection","lineWise","changeEvent","triggerElectric","handlePaste","pasted","clipboardData","disableInput","electricChars","smartIndent","getModeAt","electricInput","copyableRanges","lineRange","getRange","disableBrowserMagic","autocorrect","autocapitalize","hiddenTextarea","ios","findPosH","findNextLine","moveOnce","boundToLine","origDir","sawType","getHelper","hitSide","findPosV","pageSize","moveAmount","posToDOM","isInGutter","scan","badPos","bad","domTextBetween","recognizeMarker","closing","lineSep","extraLinebreak","addText","walk","cmText","markerID","isBlock","domToPos","lineNode","locateNodeInLineView","topNode","curNode","previousSibling","dist$1","fromTextArea","getValue","realSubmit","leaveSubmitMethodAlone","wrappedSubmit","getTextArea","toTextArea","getWrapperElement","platform","ie_upto10","ie_11up","edge","documentMode","qtwebkit","vendor","mac_geMountainLion","windows","presto_version","endNode","setStart","createTextRange","moveToElementText","moveEnd","selectInput","selectionEnd","ms","sel_move","charType","lowTypes","arabicTypes","BidiSpan","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","outerType","type$1","prev$1","type$2","type$3","i$5","cur$1","type$4","i$6","end$1","replace$1","i$7","nstart","nl","hasSelection","parentElement","compareEndPoints","oncopy","lineOracle","lastColumnPos","lastColumnValue","sol","peek","eat","eatWhile","eatSpace","skipToEnd","skipTo","backUp","column","consume","caseInsensitive","cased","hideFirstChars","oracle","baseToken","maxLookAhead","NativeScrollbars","vert","horiz","checkedZeroWidth","needsH","needsV","sWidth","totalHeight","totalWidth","zeroWidthHack","disableHoriz","enableZeroWidthBar","disableVert","pointerEvents","bar","maybeDisable","elementFromPoint","NullScrollbars","native","null","here","there","removeInner","insertInner","iterN","oldHeight","leaf","maybeSpill","spilled","sibling","myIndex","used","oldH","withOp","dHeight","nextDocId","cleanGeneration","setValue","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","extendSelectionsBy","setSelections","addSelection","getSelections","dup","replaceSelections","newSel","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","gen","getHistory","setHistory","histData","setGutterMarker","gutterID","clearGutter","lineInfo","addLineClass","where","removeLineClass","removeLineWidget","setBookmark","realOpts","findMarksAt","getAllMarks","posFromIndex","sepSize","indexFromPos","copyHistory","linkedDoc","unlinkDoc","splitIds","iterLinkedDocs","getEditor","setDirection","eachLine","3","8","16","17","18","19","20","32","33","34","35","36","44","45","46","59","61","91","92","93","106","107","109","110","111","127","145","173","186","187","188","189","190","191","192","219","220","221","222","63232","63233","63234","63235","63272","63273","63275","63276","63277","63302","basic","Left","Right","Up","Down","End","Home","PageUp","PageDown","Delete","Backspace","Shift-Backspace","Tab","Shift-Tab","Enter","Insert","Esc","pcDefault","Ctrl-A","Ctrl-D","Ctrl-Z","Shift-Ctrl-Z","Ctrl-Y","Ctrl-Home","Ctrl-End","Ctrl-Up","Ctrl-Down","Ctrl-Left","Ctrl-Right","Alt-Left","Alt-Right","Ctrl-Backspace","Ctrl-Delete","Ctrl-S","Ctrl-F","Ctrl-G","Shift-Ctrl-G","Shift-Ctrl-F","Shift-Ctrl-R","Ctrl-[","Ctrl-]","Ctrl-U","Shift-Ctrl-U","Alt-U","emacsy","Ctrl-B","Ctrl-P","Ctrl-N","Alt-F","Alt-B","Ctrl-E","Ctrl-V","Shift-Ctrl-V","Ctrl-H","Alt-D","Alt-Backspace","Ctrl-K","Ctrl-T","Ctrl-O","macDefault","Cmd-A","Cmd-D","Cmd-Z","Shift-Cmd-Z","Cmd-Y","Cmd-Home","Cmd-Up","Cmd-End","Cmd-Down","Cmd-Left","Cmd-Right","Ctrl-Alt-Backspace","Alt-Delete","Cmd-S","Cmd-F","Cmd-G","Shift-Cmd-G","Cmd-Alt-F","Shift-Cmd-Alt-F","Cmd-[","Cmd-]","Cmd-Backspace","Cmd-Delete","Cmd-U","Shift-Cmd-U","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","delWrappedLineRight","rightPos","goDocStart","goDocEnd","goLineStart","goLineStartSmart","goLineEnd","goLineRight","goLineLeft","goLineLeftSmart","goLineUp","moveV","goLineDown","goPageUp","goPageDown","goCharLeft","moveH","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","deleteH","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentSelection","indentMore","indentLess","insertTab","insertSoftTab","spaces","defaultTab","execCommand","transposeChars","newlineAndIndent","sels","openLine","toggleOverwrite","defineInitHook","ContentEditableInput","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","onCopyCut","lineWiseCopyCut","clearData","kludge","hadFocus","showPrimarySelection","updateFromDOM","readFromDOMSoon","forceCompositionEnd","showMultipleSelections","curAnchor","curFocus","rng","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","poll","pollSelection","pollInterval","triggerOnKeyDown","pollContent","fromIndex","fromNode","toNode","toIndex","newText","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","contentEditable","readOnlyChanged","resetPosition","TextareaInput","prevInput","pollingFast","prepareCopyCut","createField","fastPoll","dispatchEvent","_display","moveInputWithCursor","headPos","wrapOff","lineOff","teTop","teLeft","drawn","contextMenuPending","slowPoll","missed","same","prepareSelectAllHack","extval","rehide","oldWrapperCSS","oldCSS","detectingSelectAll","resetSelectionOnContextMenu","wrapperBox","oldScrollY","scrollY","mouseup","deflt","notOnInit","defineOption","newBreaks","getInputField","integer","helpers","setOption","getDoc","addKeyMap","removeKeyMap","addOverlay","modeSpec","removeOverlay","newRanges","getTokenAt","getLineTokens","getTokenTypeAt","getHelpers","_global","getStateAfter","defaultTextHeight","defaultCharWidth","getViewport","addWidget","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","amount","rtlMoveVisually","goalColumn","goals","startChar","check","getScrollInfo","interpret","swapDoc","phrase","phraseText","phrases","getScrollerElement","getGutterElement","registerHelper","registerGlobalHelper","predicate","dontDelegate","contenteditable","defineExtension","defineDocExtension","cmpPos","sourceToolTip","markdown","web_storage","delim","lasthangoutwarning","messages","aria-haspopup","aria-expanded","Include my query","queryEditor","Broadcast to hangout","oneline","ta","has_payload","uuid","muser","suser","profile_id","data-userid","payload_handlers","load_from_server","ifempty","chat_messages","textStatus","errorThrown","update_time","diffBody","baseName","headName","scrollToBottom","onlydown","room","dif","nwe","about","chats","empty_title","total","chats++","chat_status","from_cache","entry","add_to_cache","qr","qc","current_profile","pluginName","current_query","default_query","query_cache","qid","check_cache","display_name","source_modified","modified","sourcelist","source_list","page","fill","results","tdtags","forEach","data-name","toISOString","search_footer","bopts","noresults","act","search_form","members","data-tag","data-value","resettimeout","btnsubmit","tagv","inputel","busy","tabbed","tabTypes","permalink","typeName","wrapInTab","wrapped","glyphicon","genId","tabid","profileObject","profiles","newTab","prompt","clean","pref","makeTabbed","newContentID","sl","fromURL","tabs","restoreTab","restoreData","into","noHistory","newtab","restoring","tabFromSource","inNewTab","setSource","meta","tabType","showTracePort","pengineID","addTab","removeTab","new_active","prologRunner","move_right","tabLabel","close_button","data-id","get_ordered_storage","tabSelect","data-type","data-ext","typelabel","download","print","fileInfo","searchForm","sform","data-search-in","sourceList","profileForm","pform","profileValue","navTabs","navTab","navContent","downloadCSV","infoBody","csv_formats","disposition","pengines","trimFullStop","application","Pengine","DEBUG","topic","TemplateState","marked","selectableMarkers","varIndex","isNested","_templateStack","Template","varTemplates","_tokens","parseTemplate","varParsing","addChar","line_selection","variable","getMarkerChanged","textChanged","_templateVar","onChange","_templateState","updating","markerChanged","uninstall","posChanged","newContent","onEndCompletion","selectNextVariable","exitOnEnd","exit","hintValue","samePos","p1","p2","_hintTemplateMarker","cursorPos","ourMap","templatesMap","templatesHint","Ctrl-Space","_content","nested","variables","startLine","_templates","tvar","targetLine","getCompletions","completions","completion","addTemplates","TemplatesHint","PrologHint","varp","detp","metav","hintsFor","myTemplates","symbol","anyword","anyhint","getHints","callback","attachContextInfo","diffMeta","m1","m2","diffAttr","diffTags","reduceMeta","t1","t2","commits","henabled","symbolic","showMetaData","metaData","newMetaData","showHistory","playButton","depth","data-click-to-select","data-single-select","row","fillHistoryTable","historyobj","data-commit","setCommit","showDiff","fillDiff","addTag","udiffData","classmap","@","-","__whitespace","\t","\n","\f","\r","difflib","defaultJunkFunction","stripLinebreaks","stringAsLines","lfpos","crpos","linebreak","__reduce","initial","__ntuplecomp","mlen","__calculate_ratio","__isindict","dict","__dictget","SequenceMatcher","isjunk","set_seqs","set_seq1","set_seq2","matching_blocks","opcodes","fullbcount","__chain_b","b2j","populardict","indices","junkdict","isbjunk","isbpopular","find_longest_match","alo","ahi","blo","bhi","besti","bestj","bestsize","j2len","newj2len","jdict","jkey","get_matching_blocks","qi","la","lb","i2","j2","k2","i1","j1","k1","block","non_adjacent","get_opcodes","answer","bj","blocks","get_grouped_opcodes","codes","nn","groups","ratio","sum","triple","quick_ratio","avail","availhas","numb","real_quick_ratio","_calculate_ratio","diffview","buildView","celt","clazz","telt","ctelt","addCells","tidx","tend","addCellsInline","tidx2","baseTextLines","newTextLines","baseTextName","newTextName","contextSize","inline","viewType","tdata","node2","rows","rowcnt","toprows","botrows","jump","newtxt","sm","filebase","udiff","editConflicts","addLine","filesysInfo","last_modified","modified_since_loaded","loaded","errorString","is_clean","onStorage","supportsType","changeGen","cleanCheckpoint","update_tab_title","reload","what","default","saveAs","saveAsBody","saveURL","restoreLocal","resolveEditConflict","tabContent","bdiv","merge-my-edits","edit","merge-server-edits","server","merge-conflicts","patch_status","editConflictAction","copyMeta","expose","rb","new","selections","notebook","getSelectionLabel","editorLabel","ed","getActive","percentage","close_chat","chatroom_size","cr","chat_message","load_messages","warnings","kind","explain","follow_file_options","unload","why","confirm","opened","uflagsW","chr","cp","UNICODE_MAP_SIZE","uflags_map","flags","id_start","id_continue","uppercase","separator","control","ctype","cmConfig","parserConfig","chain","readDigits","readEsc","isSingleEscChar","unicodeEscape","isHexDigit","isOctalDigit","nextUntilUnescaped","nesting","multiLineQuoted","setArg1","nest","goalStart","setArgAlignment","alignment","leftCol","nextArg","isControl","inBody","ret","tp","cont","peekSpace","plTokenBase","lastType","functor","functorName","functorColumn","closeColumn","tagColumn","plTokenComment","isSoloChar","commaAtEOL","quasiQuotations","plTokenQuasiQuotation","plTokenString","groupedIntegers","atom","isNeck","isControlOp","dicts","sec","quote","quoteType","maybeEnd","\"","'","`","curTerm","curToken","metainfo","enrich","textAfter","blockCommentStart","blockCommentEnd","blockCommentContinue","lineComment","prologStartIfThenElse","prologStartThen","prologStartElse","'('","'>'","';'","Ctrl-L","prologMaybeFireQuery","lastl","endc","prologFireQuery","Ctrl-Enter","State","sourceID","DEFAULT_DELAY","generationFromServer","changeEditor","prologHighlightServer","askRefresh","serverAssistedHighlight","leaveEditor","enrichStyle","matchTokenText","isQuoted","serverStyle","syntax_error","outOfSync","oos","skippedTerms","skippedTokens","okToken","okTerm","syncOnType","serverSync","leaveCM","modeOptions","refreshHighlight","var","qatom","bqstring","number","neg-number","pos-number","list_open","list_close","qq_open","qq_sep","qq_close","dict_open","dict_close","brace_term_open","brace_term_close","neck","fullstop","singleton","uatom","op_type","int","float","sep","ext_quant","expanded","comment_string","identifier","delimiter","head_exported","head_public","head_extern","head_dynamic","head_multifile","head_unreferenced","head_hook","head_meta","head_constraint","head_imported","head_built_in","head_iso","head_def_iso","head_def_swi","goal_built_in","goal_imported","goal_autoload","goal_global","goal_undefined","goal_thread_local","goal_dynamic","goal_multifile","goal_expanded","goal_extern","goal_recursion","goal_meta","goal_foreign","goal_local","goal_constraint","goal_not_callable","xpce_method","xpce_class_builtin","xpce_class_lib","xpce_class_user","xpce_class_undef","option_name","no_option_name","flag_name","no_flag_name","format_string","file_no_depends","nofile","qq_type","string_terminal","entity","html_attribute","sgml_attr_function","http_location_for_id","http_no_location_for_id","getEnrichedToken","terminfo","tokenInfo","getTokenReferences","setFile","htmlConfig","autoSelfClosers","command","embed","frame","keygen","track","wbr","menuitem","implicitlyClosed","dd","rp","contextGrabbers","address","article","aside","blockquote","dl","fieldset","hgroup","nav","doNotIndent","allowUnquoted","allowMissing","caseFold","xmlConfig","allowMissingTagName","editorConf","config_","inText","parser","inBlock","doctype","inTag","baseState","tagStart","inAttribute","stringStartCol","closure","isInAttribute","terminator","startOfLine","noIndent","popContext","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","setStyle","attrState","matchClosing","closeState","closeStateErr","_stream","attrEqState","attrValueState","attrContinuedState","htmlMode","isInText","baseIndent","fullLine","multilineTagIndentPastTag","multilineTagIndentFactor","alignCDATA","tagAfter","grabbers","configuration","skipAttribute","modeInfo","mimes","findModeByMIME","findModeByExtension","findModeByFileName","dot","findModeByName","cmCfg","modeCfg","switchInline","switchBlock","lineIsEmpty","linkTitle","linkHref","linkText","strikethrough","indentedCode","htmlBlock","htmlModeMissing","htmlState","inlineNormal","blockNormal","trailingSpaceNewLine","prevLine","thisLine","firstTokenOnLine","prevLineLineIsEmpty","prevLineIsIndentedCode","prevLineIsHr","prevLineIsList","maxNonCodeIndentation","listStack","lineIndentation","indentationDiff","allowsInlineContinuation","fencedCodeEnd","isHr","hrRE","tokenTypes","atxHeaderRE","highlightFormatting","formatting","getType","setext","listRE","listType","taskLists","taskListRE","taskList","fencedCodeRE","fencedEndRE","localMode","fencedCodeBlockHighlighting","localState","linkDefRE","setextHeaderRE","footnoteLink","md_inside","currListInd","hasExitedList","maxFencedEndInd","returnType","maxBlockquoteDepth","taskOpen","taskClosed","emoji","imageAltText","imageMarker","listMod","list2","list3","list1","handleText","textRE","matchCh","previousFormatting","formattingEscape","linkInline","linkEmail","leftFlanking","punctuation","rightFlanking","setEm","setStrong","retType","getLinkHrefInside","endChar","returnState","linkRE","footnoteLinkInside","footnoteUrl","tokenTypeOverrides","tokenType","allowAtxHeaderWithoutSpace",")","]","closeBrackets","fold","bracketRegex","findMatchingBracket","afterCursor","matching","strict","scanForBracket","forward","maxScanLen","maxScanLineLength","maxScanLines","matchBrackets","autoclear","maxHighlightLen","maxHighlightLineLength","marks","ie_lt8","doMatchBrackets","currentlyHighlighted","(","[","{","}","<","oldConfig","continueComment","inserts","modeHere","continueLineCommentEnabled","continueLineComment","nonWS","probablyInsideString","useInnerComments","noOptions","toggleComment","minLine","uncomment","commentString","fullLines","blockComment","pad","blankLines","commentBlankLines","baseString","startString","endString","lastLineHasText","blockCommentLead","didSomething","lineString","endPos","endLine","insideStart","insideEnd","lastStart","firstEnd","almostLastStart","foundEnd","Completion","startPos","startLen","activityFunc","parseOptions","hintOptions","defaultOptions","buildKeyMap","addBinding","baseMap","moveFocus","menuSize","setFocus","pick","custom","customKeys","extra","getHintElement","hintsElement","Widget","picked","hints","selectedHint","HINT_ELEMENT_CLASS","ACTIVE_HINT_ELEMENT_CLASS","hintId","alignWithWord","below","winW","winH","overlapY","scrolls","startScroll","overlapX","avoidWrap","changeActive","screenAmount","closeOnUnfocus","closingOnBlur","onScroll","curScroll","point","completeOnSingleClick","applicableHelpers","supportsSelection","fetchHints","resolveAutoHints","words","resolved","app","fromList","showHint","newOpts","completionActive","cancelAnimationFrame","closeCharacters","myTick","finishUpdate","completeSingle","auto","WORD","curWord","clearPlaceholder","setPlaceholder","placeHolder","modespec","ie_lt9","regexpFlags","regexp","ignoreCase","multiline","ensureFlags","maybeMultiline","searchRegexpForward","searchRegexpForwardMultiline","inside","lastMatchIn","cutOff","newMatch","searchRegexpBackward","searchRegexpBackwardMultiline","adjustPos","orig","folded","foldFunc","searchStringForward","doFold","noFold","cutFrom","searchStringBackward","topString","SearchCursor","atOccurrence","normalize","findNext","findPrevious","getSearchCursor","dialogDiv","dialog","closeNotification","currentNotificationClose","closed","onClose","selectValueOnOpen","closeOnEnter","closeOnBlur","blurring","doneTimer","searchOverlay","SearchState","posFrom","posTo","lastQuery","getSearchState","queryCaseInsensitive","persistentDialog","onEnter","openDialog","clearSearch","shortText","confirmDialog","fs","openConfirm","parseString","parseQuery","isRE","startSearch","queryText","showMatchesOnScrollbar","annotate","doSearch","rev","hiding","searchNext","getQueryDialog","getReplaceQueryDialog","getReplacementQueryDialog","getDoReplaceConfirm","dialogText","advance","doReplace","findPersistent","findPersistentNext","findPersistentPrev","findPrev","getJumpDialog","interpretLine","jumpToLine","posStr","showTooltip","hideTooltip","showTooltipFor","HOVER_CLASS","TextHoverState","onMouseOver","onMouseOverWithDelay","Function","getTextHover","textHover","newE","getTokenAndPosAt","optionHandler","nearby","predName","addFileTranslation","pathTranslations","localDef","capitalizeFirstLetter","tokenHelp","unused_import","undefined_import","expected","instantiation_error","html_call","html_raw","comment","operator","contextInfo","information","showContextInfo","showHints","posEq","addToRing","killRing","growRingTop","getFromRing","popFromRing","ring","lastKill","byChar","byWord","byLine","byPage","byParagraph","sawText","fst","bySentence","sawWord","byExpr","newPos","getPrefix","digits","emacsPrefix","clearPrefix","repeated","findEnd","by","killTo","killRegion","addPrefix","digit","maybeClearPrefix","maybeDuplicateInput","emacsPrefixMap","prefixPreservingKeys","addPrefixMap","prefixMap","maybeRemovePrefixMap","setMark","clearMark","getInput","operateOnWord","toEnclosingExpr","quit","regPrefix","Alt-G","Ctrl-X","Ctrl-Q","emacs","Ctrl-W","Alt-W","Alt-Y","Ctrl-Shift-2","Alt-V","Alt-A","Alt-E","Alt-K","Ctrl-Alt-K","Ctrl-Alt-F","Ctrl-Alt-B","Shift-Ctrl-Alt-2","Ctrl-Alt-T","leftStart","rightEnd","Ctrl-Alt-U","Alt-Space","Alt-C","letter","Alt-L","Alt-;","Ctrl-/","Shift-Ctrl--","Shift-Alt-,","Shift-Alt-.","Ctrl-R","Shift-Alt-5","Alt-/","Ctrl-J","Alt-G G","Ctrl-X Tab","Ctrl-X Ctrl-X","Ctrl-X Ctrl-S","Ctrl-X Ctrl-W","Ctrl-X S","Ctrl-X F","Ctrl-X U","Ctrl-X K","Ctrl-X Delete","Ctrl-X H","Ctrl-Q Tab","templateHint","loadStyleExtensions","sname","lastEditor","modeDefaults","autoCurrent","prologKeys","roleDefaults","moveLongClick","lc","long_click","sqrt","cancelLongClick","copyData","getSource","cm_highlight","continueComments","traceMark","pengine","setKeybinding","schema","isPengineSource","storageData","getBreakpoints","breakpoints","direct","mysrc","getSourceEx","bps","stdoc","getSourceID","makeCurrent","clean_signalled","setIsClean","printWithIframe","preference","highlightError","chmark","error_context","error_handler","clearMessages","isMyFile","charOffsetToPos","port","cppos","esel","cell_name","sr","l1","l2","restoreEditorSelection","cmsel","loffset","poff","goffset","l0","choff","cml","soff","toff","getExamples","inComment","comments","exlist","exl","ex","addExample","lineno","tmp","gotoLine","clearSearchMarkers","_searchMarkers","markMatches","myHeight","vp","setupStorage","contextAction","loc","data-locindex","coord","addVars","incl","use_proj","qspan","wrapSolution","wrapQuery","program","tab_types","editDefaults","charno","cm_style","cm_hover_style","answerHasOutput","residuals","renderSubstitutions","substs","renderAnswer","substitutions","renderTabledAnswer","vname","binding","evalScripts","ajaxScript","eval","renderMulti","prologAnswer","selectMenu","hovering","startMenuTimeout","resetHover","closeSelectMenu","showSelect","hideSelect","selectNodeContents","outerHTML","extension","svg","blob","Blob","URL","createObjectURL","prologText","sparkline","createClass","SPFormat","clipval","quartile","normalizeValue","normalizeValues","addCSS","ensureArray","formatNumber","RangeMap","MouseHandler","Tooltip","barHighlightMixin","tristate","discrete","bullet","pie","defaultStyles","initStyles","VShape","VCanvas_base","VCanvas_canvas","VCanvas_vml","UNSET_OPTION","shapeCount","common","lineColor","fillColor","defaultPixelsPerValue","composite","tagValuesAttribute","tagOptionsPrefix","enableTagOptions","enableHighlight","highlightLighten","tooltipSkipNull","tooltipPrefix","tooltipSuffix","disableHiddenCheck","numberFormatter","numberDigitGroupCount","numberDigitGroupSep","numberDecimalMark","disableTooltips","disableInteraction","spotColor","highlightSpotColor","highlightLineColor","spotRadius","minSpotColor","maxSpotColor","lineWidth","normalRangeMin","normalRangeMax","normalRangeColor","drawNormalOnTop","chartRangeMin","chartRangeMax","chartRangeMinX","chartRangeMaxX","tooltipFormat","barColor","negBarColor","stackedBarColor","zeroColor","nullColor","zeroAxis","barSpacing","chartRangeClip","colorMap","posBarColor","zeroBarColor","tooltipValueLookups","-1","1","thresholdColor","thresholdValue","targetColor","targetWidth","performanceColor","rangeColors","sliceColors","borderWidth","raw","boxLineColor","boxFillColor","whiskerColor","outlierLineColor","outlierFillColor","medianColor","showOutliers","outlierIQR","tooltipFormatFieldlistKey","lq","med","uq","lo","ro","lw","rw","Class","_super","SPFormatClass","fre","precre","fclass","lookups","lookupkey","fieldvalue","prec","lookup","spformat","vl","nf","vals","groupsize","groupsep","decsep","ignoreNull","createStyleSheet","WebkitAppearance","simpledraw","useExisting","interact","mhandler","canvas","getContext","namespaces","registerCanvas","cleardraw","RangeMapClass","rangelist","range_map","currentPageX","currentPageY","splist","displayTooltips","highlightEnabled","registerSparkline","updateDisplay","$canvas","mouseclick","removeTooltip","clickEvent","sparklines","mousemove","currentEl","updatePosition","spcount","needsRefresh","clearRegionHighlight","tooltiphtml","localX","localY","setRegionHighlight","getCurrentRegionTooltip","disableHighlight","sizeStyle","tooltipClassname","sizetipStyle","tooltipOffsetX","tooltipOffsetY","sizetip","updateWindowDims","scrollRight","getSize","mousex","mousey","userValues","userOptions","sparkline_display_visible","extendedOptions","tagOptionType","tagValCache","getTagSetting","mergedOptions","pairs","keyval","defaultval","tagOption","_base","currentRegion","initTarget","interactive","canvasWidth","pixelWidth","canvasHeight","pixelHeight","getRegion","newRegion","removeHighlight","renderHighlight","changeHighlight","formats","formatlen","showFields","showFieldsKey","newFields","fv","formatter","fieldlen","entries","getCurrentRegionFields","isNull","suffix","calcHighlightColor","mult","rgbnew","highlightColor","lighten","newShapes","shapeids","regionShapes","renderRegion","replaceWithShapes","newShape","replaceWithShape","shapes","vertices","regionMap","xvalues","yvalues","yminmax","hightlightSpotId","lastShapeId","highlightSpot","vertex","drawCircle","highlightSpotId","insertAfterShape","drawLine","canvasTop","highlightLineId","removeShapeId","scanValues","isStr","valcount","maxy","maxyorg","miny","minyorg","maxx","minx","processRangeOptions","drawNormalRange","canvasLeft","rangey","ytop","drawRect","rangex","yvallast","paths","xnext","xpos","xposnext","yvalcount","lineShapes","fillShapes","plen","valueSpots","hlSpotsEnabled","drawShape","getLastShapeId","isStackString","groupMin","groupMax","stackRanges","numValues","vlen","xaxisOffset","clipMin","clipMax","stacked","vlist","slen","svals","yoffset","yMaxCalc","stackMin","stackMax","totalBarWidth","stackTotals","stackRangesNeg","canvasHeightEf","colorMapByIndex","colorMapByValue","calcColor","stacknum","valuenum","newColor","yoffsetNeg","minPlotted","allMin","halfHeight","itemWidth","pheight","valueShapes","regiondata","shapeid","getShapeAt","fieldkey","region","shape","renderRange","renderPerformance","renderTarget","rn","rangeval","rangewidth","perfval","perfwidth","targetval","targettop","targetheight","t0","radius","newslice","renderSlice","circle","drawPieSlice","quartiles","loutlier","routlier","lwhisker","rwhisker","iqr","q1","q2","q3","unitSize","minValue","maxValue","appendShape","_pxregex","x1","y1","x2","y2","_genShape","startAngle","endAngle","getElement","_insert","_calculatePixelDims","shapetype","shapeargs","shapeseq","currentTargetShapeId","_getContext","strokeStyle","fillStyle","clearRect","_drawShape","beginPath","moveTo","lineTo","stroke","targetX","targetY","isPointInPath","_drawCircle","arc","_drawPieSlice","closePath","_drawRect","sid","shapemap","groupel","insertAdjacentHTML","prerender","vpath","startx","starty","endx","endy","sin","vel","content_type","downloader","glyphButton","stretch","Collapse all","Expand all","Stop all","Clear","prologRunners","iconifyLast","runner","jrunner","alive","toggleIconic","RS","addAnswer","aliveState","answerTable","tds","runScripts","scripts","my_node","registerSources","handleCreate","resvar","residuals_var","hashvar","permahash_var","ask","termNoFullStop","handleSuccess","more","handleFailure","handleStop","handlePrompt","wait_for","clickableLocations","matched","gotoError","econtext","handleOutput","clickableError","handleError","handleAbort","handlePing","keyBindings","65","112","titleBarButton","tabled","next10","next100","next1000","savedFocus","answers","oncreate","onsuccess","onfailure","onstop","onprompt","onoutput","onping","ping","setScreenDimensions","sh","cw","cols","permahash","outputHTML","downloadButton","syntaxError","query_editor","trace","respond","exception","setPrompt","receiver","request","fdata","stopOrAbort","populateActionMenu","Re-run","savePermalink","save_permalink","stateful","stats","toBytes","bytes","pow","spark","stacks","colors","names","usage","trail","log10","tooltipChartTitle","node_id","unique_id","Sha1","sharedMemory","h0","hBytes","finalized","hashed","NODE_JS","JS_SHA1_NO_NODE_JS","COMMON_JS","JS_SHA1_NO_COMMON_JS","AMD","HEX_CHARS","EXTRA","SHIFT","OUTPUT_TYPES","createOutputMethod","outputType","createMethod","nodeWrap","crypto","Buffer","nodeMethod","createHash","digest","ArrayBuffer","Uint8Array","notString","lastByteIndex","finalize","hex","arrayBuffer","buffer","dataView","DataView","setUint32","sha1","data-action","imageButton","glyphButtonGlyph","notebook_menu","cell_type_select_div","cellTypes","Notebook","my_cell","currentCell","stringifyNotebookDOM","orderAttrs","is_cell","clipboard","toolbar","Delete cell","Copy cell","Paste cell","Move cell up","Move cell down","Insert cell","--","Clear all","Play","Settings","---","Exit fullscreen","removeSelector","mdiv","menu_state","focusout","eds","aeds","nc","fullscreen","delete","restore","down","insertAbove","insertBelow","if_visible","getSettings","open_fullscreen","hide_navbar","notebookSettingsBody","chat_container","cellType","checkModified","removeNotForQuery","viewrect","seltop","selbottom","organize","skipEmpty","isnew","outer_div","getClasses","allowed","cg","assignCellNames","updatePlaceHolder","run_all","queries","clear_all","cellText","fileInsertInput","theFile","typeMore","typeLess","less","prevprog","ensure_in_view","vh","assignName","runTabled","querySettingsBody","singleline","program_cells","programs","saveDOM","restoreDOM","prologQuery","Aggregate (count all)","Projection","Order by","Distinct","Limit","markdownText","makeEditable","setHTML","nbdata","markdown_post_renderer","htmlText","eval_script","runHTML","pretext","copyClassAttr","isDefault","getAttr","addClassAttr","addData","pcells","formsel","bindQuery","hideQuery","appendDropdown","accell","submenu","items","dropDownUL","clickNotSubMenu","clickSubMenu","grandparent","navbar","ul1","ul2","populateDropdown","clearDropdown","extendDropdown","dropup","examplesButton","updateExamples","examples","mousedown","historyButton","aggregateButton","aggregates","runButton","tableSelected","tableCheckbox","tabled_results","maxHistoryLength","qediv","setProgramEditor","bg","getProgramEditor","setExamples","exs","ex0","addHistory","restoreHistory","cleanGen","unfold","DEFAULT_USER_FIELDS","clearAuthenticationCache","oncomplete","agt","xmlhttp","createXMLObject","ActiveXObject","openPopup","uri","closeCallback","Logout","Profile","logged_in","swish_profile_url","user_profile","get_profile","set_from_chat","chat_key","given_name","family_name","nick_name","external_identity","identity_provider","logout","logout_url","auth_method","http_logout","d3","ascending","bisector","ascendingComparator","hi","pair","cross","values0","values1","reduce","i0","value0","n0","n1","descending","variance","valueof","mean","deviation","constant","sequence","ticks","tickIncrement","power","LN10","e10","e5","tickStep","step0","step1","thresholdSturges","LN2","histogram","xz","domain","x0","tz","threshold","bin","bins","bisectRight","thresholds","freedmanDiaconis","scott","median","numbers","arrays","permute","indexes","permutes","xi","xj","shuffle","transpose","matrix","zip","identity$1","translateX","translateY","number$1","scale","center","bandwidth","entering","__axis","orient","tickValues","tickArguments","tickFormat","spacing","tickSizeInner","tickPadding","range0","range1","tickExit","tickEnter","epsilon","tickSizeOuter","slice$1","tickSize","axisTop","axisRight","axisBottom","axisLeft","Dispatch","parseTypenames","typenames","creatorInherit","namespaceURI","xhtml","createElementNS","creatorFixed","fullname","creator","none","selection_select","_groups","subgroups","subnode","subgroup","__data__","_parents","selectorAll","selection_selectAll","matcher","selection_filter","sparse","selection_enter","_enter","EnterNode","_next","_parent","constant$1","bindIndex","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","keyPrefix","selection_data","enterGroup","updateGroup","_exit","selection_exit","selection_join","onenter","onupdate","onexit","selection_merge","selection$$1","groups0","groups1","m0","merges","group0","group1","selection_order","selection_sort","compareNode","ascending$1","sortgroups","sortgroup","selection_call","selection_nodes","nodes","selection_node","selection_size","selection_empty","selection_each","attrRemove","attrRemoveNS","removeAttributeNS","attrConstant","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","selection_attr","getAttributeNS","styleRemove","removeProperty","styleConstant","styleFunction","selection_style","styleValue","propertyRemove","propertyConstant","propertyFunction","selection_property","classArray","classList","ClassList","_node","_names","classedAdd","classedRemove","classedTrue","classedFalse","classedFunction","selection_classed","textRemove","textConstant","textFunction","selection_text","htmlRemove","htmlConstant","htmlFunction","selection_html","raise","selection_raise","lower","selection_lower","selection_append","constantNull","selection_insert","selection_remove","selection_cloneShallow","selection_cloneDeep","selection_clone","deep","selection_datum","property","filterContextListener","listener","contextListener","related","event1","event0","parseTypenames$1","onRemove","typename","__on","capture","onAdd","filterEvents","selection_on","customEvent","sourceEvent","CustomEvent","createEvent","initEvent","dispatchConstant","dispatchFunction","selection_dispatch","Local","nextId","ownerSVGElement","createSVGPoint","matrixTransform","getScreenCTM","inverse","clientTop","mouse","points","nopropagation","noevent","dragDisable","__noselect","MozUserSelect","yesdrag","noclick","constant$2","DragEvent","subject","defaultFilter","defaultContainer","defaultSubject","defaultTouchable","drag","mousedowned","touchable","touchstarted","touchmoved","touchended","touchending","gesture","beforestart","mousemoved","mouseupped","mousemoving","mousedownx","mousedowny","clickDistance2","gestures","touches$$1","point$$1","sublisteners","listeners","p0","clickDistance","definition","Color","reHex3","Rgb","reHex6","rgbn","reRgbInteger","reRgbPercent","reRgbaInteger","rgba","reRgbaPercent","reHslPercent","hsla","reHslaPercent","named","rgbConvert","rgb","Hsl","hslConvert","hsl","hsl2rgb","labConvert","Lab","Hcl","deg2rad","rgb2lrgb","xyz2lab","Yn","Xn","Zn","gray","lab","t3","lab2xyz","lrgb2rgb","hclConvert","atan2","rad2deg","lch","hcl","cubehelixConvert","Cubehelix","BC_DA","ED","EB","bl","cubehelix","basis","v0","v1","v2","v3","basis$1","basisClosed","constant$3","exponential","hue","gamma","nogamma","rgbSpline","spline","color$$1","array$1","na","interpolateValue","setTime","interpolateNumber","object","zero","interpolateString","am","bm","bs","reA","reB","interpolateRgb","valueOf","hue$1","interpolateRound","decompose","skewX","rotate","degrees","atan","parseCss","identity$2","cssNode","cssRoot","cssView","parseSvg","svgNode","baseVal","consolidate","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","cosh","exp","sinh","tanh","interpolateZoom","ux0","uy0","w0","ux1","uy1","w1","epsilon2","rho","b0","rho4","rho2","b1","coshr0","hsl$1","hue$$1","lab$1","hcl$1","cubehelix$1","cubehelixGamma","cubehelix$$1","piecewise","interpolate","quantize","interpolator","samples","clockNow","setFrame","clearNow","clock","clockSkew","Timer","_call","_time","restart","timerFlush","taskHead","wake","clockLast","nap","poke","pokeDelay","taskTail","sleep","timeout$1","elapsed","interval$1","schedule","timing","schedules","__transition","create$1","emptyOn","tween","emptyTween","ease","CREATED","get$1","set$1","STARTED","SCHEDULED","RUNNING","ENDED","STARTING","ENDING","interrupt","schedule$$1","selection_interrupt","tweenRemove","tween0","tween1","tweenFunction","transition_tween","_id","tweenValue","attrRemove$1","attrRemoveNS$1","attrConstant$1","interpolate$$1","value1","string00","interpolate0","string1","string0","attrConstantNS$1","attrFunction$1","string10","attrFunctionNS$1","transition_attr","interpolateTransformSvg","attrTween","attrInterpolate","attrInterpolateNS","attrTweenNS","_value","transition_attrTween","delayFunction","delayConstant","transition_delay","durationFunction","durationConstant","transition_duration","easeConstant","transition_ease","transition_filter","Transition","_name","transition_merge","transition$$1","onFunction","on0","on1","sit","transition_on","removeFunction","transition_remove","transition_select","select$$1","transition_selectAll","inherit","transition_selection","Selection$1","styleNull","styleRemove$1","styleConstant$1","styleFunction$1","styleMaybeRemove","listener0","transition_style","interpolateTransformCss","styleTween","styleInterpolate","transition_styleTween","textConstant$1","textFunction$1","transition_text","transition_transition","id0","id1","newId","transition_end","Promise","linear$1","quadIn","quadOut","quadInOut","cubicIn","cubicOut","cubicInOut","sinIn","halfPi","sinOut","sinInOut","pi","expIn","expOut","expInOut","circleIn","circleOut","circleInOut","bounceIn","bounceOut","b3","b2","b4","b6","b5","b7","b8","b9","bounceInOut","defaultTiming","selection_transition","root$1","constant$4","BrushEvent","nopropagation$1","noevent$1","defaultFilter$1","defaultExtent","local$1","__brush","empty$1","brushSelection","dim","brushX","brush$1","brushY","brush","XY","handles","redraw","started","handleSize","Emitter","point1","shifting","lockX","lockY","moving","point0","MODE_SPACE","MODE_DRAG","signX","e0","e1","signY","s0","s1","MODE_HANDLE","MODE_CENTER","flipX","flipY","emit","ended","keydowned","keyupped","signsX","signsY","selection1","selection0","starting","compareValue","chord","groupSums","groupIndex","subgroupIndex","chords","sortGroups","sortSubgroups","max$1","tau$1","padAngle","di","dj","subindex","sortChords","constant$5","Path","_x0","_y0","_x1","_y1","defaultSource","defaultTarget","defaultRadius","defaultStartAngle","defaultEndAngle","ribbon","argv","slice$2","sa0","halfPi$1","sa1","sx0","sy0","ta0","ta1","quadraticCurveTo","Map","map$1","createResult","setResult","sortValues","rollup","valuesByKey","sortKey","sortKeys","createObject","setObject","createMap","setMap","Set","set$2","ascending$2","constant$6","hole","ringContains","yi","pj","yj","segmentContains","collinear","within","noop$1","contours","threshold$$1","contour","polygons","holes","isorings","smooth","polygon","coordinates","stitch","endIndex","fragmentByEnd","fragmentByStart","cases","smoothLinear","_0","_1","slice$3","blurX","blurY","defaultX","defaultY","defaultWeight","density","Float32Array","wi","weight","geometry","transformPolygon","transformRing","transformPoint","cellSize","objectConverter","columns","customConverter","inferColumns","columnSet","formatYear","year","formatDate","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","dsvFormat","convert","parseRows","eof","EOF","EOL","QUOTE","NEWLINE","RETURN","DELIMITER","preformatBody","formatValue","formatBody","formatRows","formatRow","reFormat","autoType","responseBlob","fetch","responseArrayBuffer","dsvParse","dsv","Image","responseJson","text$$1","center$1","sx","sy","constant$7","jiggle","tree_add","_x","_y","cover","tree","xm","ym","xp","yp","_root","y0","addAll","yz","tree_cover","tree_data","visit","tree_extent","Quad","tree_find","x3","y3","quads","tree_remove","retainer","removeAll","tree_root","tree_size","tree_visit","tree_visitAfter","defaultX$1","tree_x","defaultY$1","tree_y","quadtree","Quadtree","leaf_copy","vx","vy","collide","quad","rj","ri","strength","ri2","iterations","visitAfter","radii","nodeById","nodeId","defaultStrength","alpha","distances","strengths","initializeStrength","initializeDistance","x$1","y$1","simulation","alphaMin","stepper","alphaTarget","alphaDecay","forces","velocityDecay","fy","initializeNodes","initialRadius","angle","initialAngle","initializeForce","manyBody","accumulate","theta2","distanceMax2","distanceMin2","distanceMin","distanceMax","theta","radial","radiuses","x$2","y$2","formatDecimal","coefficient","exponent$1","formatGroup","grouping","thousands","formatNumerals","numerals","formatSpecifier","specifier","FormatSpecifier","sign","comma","precision","formatTrim","formatPrefixAuto","exponent","prefixExponent","formatRounded","identity$3","formatLocale","locale","newFormat","valuePrefix","valueSuffix","formatType","valueNegative","prefixes","maybeSuffix","decimal","formatTypes","currency","formatPrefix","defaultLocale","precisionFixed","precisionPrefix","precisionRound","adder","Adder","add$1","bv","av","acos","pi$3","asin","halfPi$2","haversin","sin$1","noop$2","streamGeometry","streamGeometryType","streamLine","coordinate","streamPolygon","polygonStart","polygonEnd","geoStream","streamObjectType","areaRingStart","areaStream","areaPointFirst","areaRingEnd","areaPoint","lambda00","phi00","lambda","phi","radians","lambda0","cosPhi0","cos$1","quarterPi","sinPhi0","dLambda","sdLambda","adLambda","cosPhi","sinPhi","areaRingSum","area$1","areaSum","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","boundsPoint","lambda0$1","lambda1","phi0","phi1","linePoint","equatorial","inflection","phii","lambda2","sign$$1","lambdai","degrees$1","antimeridian","boundsLineStart","boundsStream","boundsLineEnd","boundsRingPoint","deltaSum","lambda00$1","phi00$1","boundsRingStart","boundsRingEnd","epsilon$2","rangeCompare","rangeContains","bounds","feature","deltaMax","centroidPoint","centroidPointCartesian","W0","X0","Y0","Z0","centroidLineStart","centroidStream","centroidLinePointFirst","z0","centroidLinePoint","W1","X1","Y1","Z1","centroidLineEnd","centroidRingStart","centroidRingPointFirst","centroidRingEnd","centroidRingPoint","lambda00$2","phi00$2","cx","cy","cz","X2","Y2","Z2","centroid","epsilon2$1","constant$8","compose","rotationIdentity","tau$3","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleStream","cosRadius","sinRadius","circleRadius","clipBuffer","rejoin","pointEqual","Intersection","clipRejoin","segments","compareIntersection","startInside","clip","segment","link$1","isSubject","polygonContains","winding","sum$1","sinPhi1","cosPhi1","absDelta","phiArc","pointVisible","sink","pointLine","pointRing","ringSink","ringStart","ringEnd","ringSegments","ringBuffer","polygonStarted","validSegment","sphere","clipAntimeridianLine","sign0","sign1","clipAntimeridianIntersect","sinLambda0Lambda1","clipAntimeridianInterpolate","clipCircle","c0","v00","point2","smallRadius","intersect","notHemisphere","two","pa","pb","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","uu","polar","meridian","ax","ay","bx","clipRectangle","corner","comparePoint","ca","activeStream","polygonInside","bufferStream","cleanInside","clipStream","v_","x_","y_","x__","y__","v__","extent$1","cacheStream","lengthLineStart","lengthStream","lengthPointFirst","lengthLineEnd","lambda0$2","sinPhi0$1","cosPhi0$1","lengthPoint","cosDelta","sinDelta","lengthSum","length$1","object$1","containsGeometry","containsGeometryType","containsPoint","containsLine","ab","containsPolygon","ringRadians","pointRadians","contains$1","containsObjectType","graticuleX","graticuleY","graticule","DX","DY","outline","extentMajor","extentMinor","stepMajor","stepMinor","graticule10","interpolate$1","cy0","cy1","sy1","kx0","ky0","kx1","ky1","identity$4","areaRingStart$1","areaStream$1","areaPointFirst$1","areaPoint$1","x00","x0$1","y00","y0$1","areaRingSum$1","areaRingEnd$1","boundsPoint$1","x0$2","y0$2","centroidPoint$1","X0$1","Y0$1","Z0$1","centroidLineStart$1","centroidStream$1","centroidPointFirstLine","centroidPointLine","x0$3","y0$3","X1$1","Y1$1","Z1$1","centroidLineEnd$1","centroidRingStart$1","centroidPointFirstRing","centroidRingEnd$1","centroidPointRing","x00$1","y00$1","X2$1","Y2$1","Z2$1","PathContext","_context","lengthPointFirst$1","lengthStream$1","lengthPoint$1","x00$2","x0$4","y00$2","y0$4","lengthSum$1","PathString","_string","circle$1","index$1","pointRadius","contextStream","projectionStream","boundsStream$1","transformer","TransformStream","fit","fitBounds","clipExtent","fitExtent","fitSize","fitWidth","fitHeight","resample","project","delta2","resample$1","resampleNone","resampleLineTo","phi2","dx2","dy2","dz","cosMinDistance","resampleStream","maxDepth","ringPoint","a00","b00","c00","transformRotate","scaleTranslate","transform$$1","scaleTranslateRotate","cosAlpha","sinAlpha","ci","fi","projectionMutator","projectAt","projectRotateTransform","recenter","projectTransform","projectResample","preclip","clipAntimeridian","postclip","transformRadians","clipAngle","conicProjection","parallels","cylindricalEqualAreaRaw","conicEqualAreaRaw","r0y","conicEqualArea","albers","multiplex","streams","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","azimuthalRaw","azimuthalInvert","sc","cc","azimuthalEqualArea","azimuthalEqualAreaRaw","azimuthalEquidistant","azimuthalEquidistantRaw","mercatorRaw","tan","mercator","mercatorProjection","reclip","tany","conicConformalRaw","conicConformal","equirectangularRaw","equirectangular","conicEquidistantRaw","gy","nx","conicEquidistant","equalEarthRaw","l6","A1","A2","A3","A4","equalEarth","gnomonicRaw","gnomonic","scaleTranslate$1","kx","ky","tx","ty","identity$5","reflectX","reflectY","naturalEarth1Raw","phi4","naturalEarth1","orthographicRaw","orthographic","stereographicRaw","stereographic","transverseMercatorRaw","transverseMercator","defaultSeparation","meanX","meanXReduce","maxY","maxYReduce","leafLeft","leafRight","cluster","previousNode","eachAfter","separation","nodeSize","node_count","node_each","node_eachBefore","node_eachAfter","node_sum","node_sort","eachBefore","node_path","ancestor","leastCommonAncestor","aNodes","ancestors","bNodes","node_ancestors","node_descendants","node_leaves","leaves","node_links","hierarchy","childs","valued","defaultChildren","computeHeight","node_copy","shuffle$1","enclose","circles","slice$4","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","encloseBasis1","r2","x21","y21","r21","r3","a3","c3","intersects","Node$1","packEnclose","aa","sj","sk","pack","optional","required","constantZero","constant$9","defaultRadius$1","index$2","radiusLeaf","packChildren","translateChild","roundNode","treemapDice","partition","positionNode","defaultId","defaultParentId","parentId","stratify","nodeKey","nodeByKey","keyPrefix$1","ambiguous","preroot","defaultSeparation$1","nextLeft","nextRight","moveSubtree","wm","wp","executeShifts","nextAncestor","vim","TreeNode","treeRoot","firstWalk","secondWalk","sizeNode","midpoint","apportion","vip","vop","vom","sip","sop","sim","som","treemapSlice","squarifyRatio","sumValue","newRatio","minRatio","beta","dice","index$3","treemap","paddingStack","paddingInner","squarify","paddingOuter","valueOffset","sums","valueTarget","valueLeft","valueRight","xk","yk","sliceDice","area$2","centroid$1","cross$1","lexicographicOrder","computeUpperHullIndexes","hull","sortedPoints","flippedPoints","upperIndexes","lowerIndexes","skipLeft","skipRight","contains$2","length$2","perimeter","defaultSource$1","initRange","initInterpolator","ordinal","unknown","implicit","slice$5","band","rescale","ordinalRange","rangeRound","pointish","point$1","constant$a","number$2","identity$6","clamper","bimap","d0","polymap","clamp","transformer$1","piecewise$$1","untransform","map$2","continuous","linearish","nice","linear$2","identity$7","transformLog","transformExp","transformLogn","transformExpn","pow10","powp","logp","log2","reflect","loggish","logs","pows","log$1","transformSymlog","log1p","transformSymexp","expm1","symlogish","symlog","transformPow","transformSqrt","transformSquare","powish","pow$1","sqrt$1","quantile$$1","invertExtent","quantiles","quantize$1","threshold$1","newInterval","floori","offseti","t0$1","t1$1","weekday","setDate","getDate","getDay","setHours","getTimezoneOffset","durationMinute","durationWeek","utcWeekday","setUTCDate","getUTCDay","setUTCHours","localDate","setFullYear","utcDate","UTC","setUTCFullYear","newYear","formatLocale$1","pads","newParse","newDate","week","day$$1","parseSpecifier","utcMonday","utcDay","monday","day","getFullYear","getMonth","parses","parsePeriod","periodRe","periodLookup","parseShortWeekday","shortWeekdayRe","shortWeekdayLookup","parseWeekday","weekdayRe","weekdayLookup","parseShortMonth","shortMonthRe","shortMonthLookup","parseMonth","monthRe","monthLookup","parseLocaleDateTime","locale_dateTime","parseLocaleDate","locale_date","parseLocaleTime","locale_time","formatShortWeekday","locale_shortWeekdays","formatWeekday","locale_weekdays","formatShortMonth","locale_shortMonths","formatMonth","locale_months","formatPeriod","locale_periods","getHours","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","dateTime","periods","days","shortDays","months","shortMonths","formatRe","formatLookup","formatDayOfMonth","formatMicroseconds","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear$1","formatFullYear","formatZone","%","formatLiteralPercent","utcFormats","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parseDayOfMonth","parseMicroseconds","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseYear","parseFullYear","parseZone","parseLiteralPercent","utcFormat","utcParse","pad$1","requote","requoteRe","numberRe","percentRe","getMilliseconds","getMinutes","getSeconds","sunday","thursday","utcYear","dow","utcSunday","utcThursday","defaultLocale$1","locale$1","timeFormat","timeParse","formatIsoNative","parseIsoNative","date$1","number$3","calendar","year$$1","month$$1","hour$$1","minute$$1","second$$1","millisecond$$1","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","tickInterval","tickIntervals","durationYear","durationSecond$1","durationMinute$1","durationHour$1","durationDay$1","durationWeek$1","durationMonth","month","hour","minute","millisecond","utcTime","utcMonth","utcHour","utcMinute","transformer$2","k10","copy$1","sequential","sequentialLog","sequentialSymlog","sequentialPow","sequentialSqrt","sequentialQuantile","transformer$3","k21","diverging","divergingLog","divergingSymlog","divergingPow","divergingSqrt","ramp","scheme","rgbBasis","rainbow","ts","sinebow","c$1","pi_1_3","pi_2_3","ramp$1","constant$b","acos$1","pi$4","asin$1","halfPi$3","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","arcEndAngle","arcPadAngle","x10","y10","x32","y32","epsilon$3","cornerTangents","x01","y01","sqrt$2","ox","oy","x11","y11","max$2","cx0","cx1","dx0","dy0","dx1","dy1","da","abs$1","tau$4","cos$2","sin$2","a01","a11","a10","da0","da1","ap","padRadius","min$1","cornerRadius","rc0","rc1","oc","kc","atan2$1","Linear","curveLinear","x$3","y$3","defined0","curve","defined","x$$1","y$$1","area$3","x0z","y0z","areaStart","areaEnd","arealine","lineX0","lineY0","lineY1","lineX1","descending$1","identity$8","arcs","Radial","_curve","curveRadial","lineRadial","lineRadial$1","curveRadialLinear","areaRadial","lineStartAngle","lineEndAngle","lineInnerRadius","lineOuterRadius","pointRadial","linkSource","linkTarget","link$2","slice$6","curveHorizontal","bezierCurveTo","curveVertical","curveRadial$1","p3","linkHorizontal","linkVertical","linkRadial","draw","circle$2","noop$3","point$2","Basis","basis$2","BasisClosed","basisClosed$1","BasisOpen","basisOpen","Bundle","_basis","_beta","point$3","_k","_x2","_y2","Cardinal","tension","CardinalClosed","CardinalOpen","point$4","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","CatmullRomClosed","CatmullRomOpen","LinearClosed","linearClosed","sign$1","slope3","slope2","point$5","MonotoneX","MonotoneY","ReflectContext","monotoneX","monotoneY","Natural","controlPoints","natural","Step","stepBefore","stepAfter","none$1","series","none$2","stackValue","oz","kz","sij","ki","si","diverging$1","yn","silhouette","wiggle","s2","sij0","sij1","s3","appearance","peaks","peak","vi","vj","ascending$3","sum$2","descending$2","insideOut","tops","bottoms","constant$c","x$4","y$4","RedBlackTree","RedBlackNode","RedBlackRotateLeft","RedBlackRotateRight","RedBlackFirst","createEdge","edges","setEdgeEnd","cells","halfedges","createBorderEdge","clipEdge","connectEdge","fm","fb","lx","ly","rx","ry","clipEdges","epsilon$4","createCell","site","cellHalfedgeAngle","va","vb","cellHalfedgeStart","cellHalfedgeEnd","sortCellHalfedges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endY","nCells","dc","v01","v11","v10","Circle","attachCircle","lArc","rArc","lSite","cSite","rSite","epsilon2$2","ha","hc","circlePool","firstCircle","detachCircle","Beach","createBeach","beach","beachPool","detachBeach","beaches","removeBeach","disappearing","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","voronoi","triangles","constant$d","ZoomEvent","Transform","transform$1","__zoom","identity$9","nopropagation$2","noevent$2","defaultFilter$2","defaultExtent$1","defaultTransform","defaultWheelDelta","deltaY","deltaMode","defaultTouchable$1","defaultConstrain","translateExtent","invertX","invertY","wheeled","dblclicked","scaleExtent","Gesture","wheelidled","wheel","wheelDelay","constrain","touch0","touch1","touchstarting","touchDelay","dp","scaleBy","scaleTo","translateBy","translateTo","ascendingBisect","bisectLeft","xlink","xmlns","classed","reI","reN","reP","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","displayable","brighter","darker","rgbGamma","rgb$$1","rgbBasisClosed","SQRT2","hsl$2","hslLong","hcl$2","hclLong","cubehelix$2","cubehelixLong","performance","selection_prototype","polyIn","polyOut","polyInOut","backIn","overshoot","backOut","backInOut","tau","elasticIn","amplitude","period","elasticOut","elasticInOut","xy","pi$1","pi$2","tau$2","tauEpsilon","arcTo","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","ccw","proto","array$2","csv","csvParse","csvParseRows","csvFormatBody","csvFormatRows","tsv","tsvParse","tsvParseRows","tsvFormat","tsvFormatBody","tsvFormatRows","csv$1","tsv$1","treeProto","toPrecision","temp","Feature","FeatureCollection","features","Sphere","Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection","geometries","areaRing","areaSum$1","_radius","_line","_point","lengthRing","_circle","cxcy","fpy","descendants","resquarify","_squarify","uniform","sourceRandomUniform","randomUniform","sourceRandomNormal","randomNormal","mu","sigma","logNormal","sourceRandomLogNormal","randomLogNormal","irwinHall","sourceRandomIrwinHall","randomIrwinHall","bates","sourceRandomBates","randomBates","exponential$1","sourceRandomExponential","randomExponential","array$3","tuesday","wednesday","friday","saturday","sundays","mondays","tuesdays","wednesdays","thursdays","fridays","saturdays","setMonth","years","setUTCSeconds","utcMinutes","setUTCMinutes","utcHours","utcDays","utcTuesday","utcWednesday","utcFriday","utcSaturday","utcSundays","utcMondays","utcTuesdays","utcWednesdays","utcThursdays","utcFridays","utcSaturdays","setUTCMonth","utcMonths","utcYears","formatIso","parseIso","category10","Accent","Dark2","Paired","Pastel1","Pastel2","Set1","Set2","Set3","BrBG","scheme$1","PRGn","scheme$2","PiYG","scheme$3","PuOr","scheme$4","RdBu","scheme$5","RdGy","scheme$6","RdYlBu","scheme$7","RdYlGn","scheme$8","Spectral","scheme$9","BuGn","scheme$a","BuPu","scheme$b","GnBu","scheme$c","OrRd","scheme$d","PuBuGn","scheme$e","PuBu","scheme$f","PuRd","scheme$g","RdPu","scheme$h","YlGnBu","scheme$i","YlGn","scheme$j","YlOrBr","scheme$k","YlOrRd","scheme$l","Blues","scheme$m","Greens","scheme$n","Greys","scheme$o","Purples","scheme$p","Reds","scheme$q","Oranges","cubehelix$3","warm","cool","viridis","magma","inferno","plasma","cross$2","tan30","tan30_2","diamond","kr","star","square","sqrt3","triangle","wye","symbols","_x3","_x4","_y3","_y4","bundle","cardinal","_x5","_y5","cardinalClosed","cardinal$$1","cardinalOpen","x23","y23","catmullRom","catmullRomClosed","catmullRom$$1","catmullRomOpen","_t0","px","py","grandpa","uncle","_found","applyX","applyY","rescaleX","rescaleY","bisect","thresholdFreedmanDiaconis","thresholdScott","quantile","contourDensity","dragEnable","easeLinear","easeQuad","easeQuadIn","easeQuadOut","easeQuadInOut","easeCubic","easeCubicIn","easeCubicOut","easeCubicInOut","easePoly","easePolyIn","easePolyOut","easePolyInOut","easeSin","easeSinIn","easeSinOut","easeSinInOut","easeExp","easeExpIn","easeExpOut","easeExpInOut","easeCircle","easeCircleIn","easeCircleOut","easeCircleInOut","easeBounce","easeBounceIn","easeBounceOut","easeBounceInOut","easeBack","easeBackIn","easeBackOut","easeBackInOut","easeElastic","easeElasticIn","easeElasticOut","easeElasticInOut","forceCenter","forceCollide","forceLink","forceManyBody","forceRadial","forceSimulation","forceX","forceY","formatDefaultLocale","geoArea","geoBounds","geoCentroid","geoCircle","geoClipAntimeridian","geoClipCircle","geoClipExtent","geoClipRectangle","geoContains","geoDistance","geoGraticule","geoGraticule10","geoInterpolate","geoLength","geoPath","geoAlbers","geoAlbersUsa","geoAzimuthalEqualArea","geoAzimuthalEqualAreaRaw","geoAzimuthalEquidistant","geoAzimuthalEquidistantRaw","geoConicConformal","geoConicConformalRaw","geoConicEqualArea","geoConicEqualAreaRaw","geoConicEquidistant","geoConicEquidistantRaw","geoEqualEarth","geoEqualEarthRaw","geoEquirectangular","geoEquirectangularRaw","geoGnomonic","geoGnomonicRaw","geoIdentity","geoProjection","geoProjectionMutator","geoMercator","geoMercatorRaw","geoNaturalEarth1","geoNaturalEarth1Raw","geoOrthographic","geoOrthographicRaw","geoStereographic","geoStereographicRaw","geoTransverseMercator","geoTransverseMercatorRaw","geoRotation","geoTransform","packSiblings","treemapBinary","treemapSliceDice","treemapSquarify","treemapResquarify","interpolateArray","interpolateBasis","interpolateBasisClosed","interpolateDate","interpolateDiscrete","interpolateHue","interpolateObject","interpolateRgbBasis","interpolateRgbBasisClosed","interpolateHsl","interpolateHslLong","interpolateLab","interpolateHcl","interpolateHclLong","interpolateCubehelix","interpolateCubehelixLong","polygonArea","polygonCentroid","polygonHull","polygonLength","scaleBand","scalePoint","scaleIdentity","scaleLinear","scaleLog","scaleSymlog","scaleOrdinal","scaleImplicit","scalePow","scaleSqrt","scaleQuantile","scaleQuantize","scaleThreshold","scaleTime","scaleUtc","scaleSequential","scaleSequentialLog","scaleSequentialPow","scaleSequentialSqrt","scaleSequentialSymlog","scaleSequentialQuantile","scaleDiverging","scaleDivergingLog","scaleDivergingPow","scaleDivergingSqrt","scaleDivergingSymlog","schemeCategory10","schemeAccent","schemeDark2","schemePaired","schemePastel1","schemePastel2","schemeSet1","schemeSet2","schemeSet3","interpolateBrBG","schemeBrBG","interpolatePRGn","schemePRGn","interpolatePiYG","schemePiYG","interpolatePuOr","schemePuOr","interpolateRdBu","schemeRdBu","interpolateRdGy","schemeRdGy","interpolateRdYlBu","schemeRdYlBu","interpolateRdYlGn","schemeRdYlGn","interpolateSpectral","schemeSpectral","interpolateBuGn","schemeBuGn","interpolateBuPu","schemeBuPu","interpolateGnBu","schemeGnBu","interpolateOrRd","schemeOrRd","interpolatePuBuGn","schemePuBuGn","interpolatePuBu","schemePuBu","interpolatePuRd","schemePuRd","interpolateRdPu","schemeRdPu","interpolateYlGnBu","schemeYlGnBu","interpolateYlGn","schemeYlGn","interpolateYlOrBr","schemeYlOrBr","interpolateYlOrRd","schemeYlOrRd","interpolateBlues","schemeBlues","interpolateGreens","schemeGreens","interpolateGreys","schemeGreys","interpolatePurples","schemePurples","interpolateReds","schemeReds","interpolateOranges","schemeOranges","interpolateCubehelixDefault","interpolateRainbow","interpolateWarm","interpolateCool","interpolateSinebow","interpolateViridis","interpolateMagma","interpolateInferno","interpolatePlasma","clientPoint","radialArea","radialLine","symbolCircle","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolTriangle","symbolWye","curveBasisClosed","curveBasisOpen","curveBasis","curveBundle","curveCardinalClosed","curveCardinalOpen","curveCardinal","curveCatmullRomClosed","curveCatmullRomOpen","curveCatmullRom","curveLinearClosed","curveMonotoneX","curveMonotoneY","curveNatural","curveStep","curveStepAfter","curveStepBefore","stackOffsetExpand","stackOffsetDiverging","stackOffsetNone","stackOffsetSilhouette","stackOffsetWiggle","stackOrderAppearance","stackOrderAscending","stackOrderDescending","stackOrderInsideOut","stackOrderNone","stackOrderReverse","timeInterval","timeMillisecond","timeMilliseconds","utcMillisecond","utcMilliseconds","timeSecond","timeSeconds","utcSecond","utcSeconds","timeMinute","timeMinutes","timeHour","timeHours","timeDay","timeDays","timeWeek","timeWeeks","timeSunday","timeSundays","timeMonday","timeMondays","timeTuesday","timeTuesdays","timeWednesday","timeWednesdays","timeThursday","timeThursdays","timeFriday","timeFridays","timeSaturday","timeSaturdays","timeMonth","timeMonths","timeYear","timeYears","utcWeek","utcWeeks","timeFormatDefaultLocale","timeFormatLocale","isoFormat","isoParse","zoomTransform","zoomIdentity","_typeof","_classCallCheck","instance","_defineProperty","ChartInternal","api","$$","getDefaultConfig","axes","Chart","internal","loadConfig","beforeInit","afterInit","bindThis","argThis","AxisInternal","component","innerTickSize","outerTickSize","withOuterTick","tickOffset","tickCulling","tickCentered","tickTextCharSize","tickTextRotate","tickLength","generateAxis","axisX","axisY","generateTicks","copyScale","newScale","isCategory","textFormatted","formatted","updateRange","rangeExtent","updateTickTextCharSize","isVertical","tspanData","splitted","tickMultiline","splitTickText","tickMultilineMax","ellipsify","spaceIndex","subtext","textWidth","tickText","tickWidth","ellipsified","available","padEnd","updateTickLength","lineY2","tickPosition","textY","textTextAnchor","tspanDx","tspanDy","tickTransform","tickX","tickY","scale0","__chart__","scale1","ticksValues","tickUpdate","lineUpdate","textUpdate","tspans","tspanEnter","tspanUpdate","pathUpdate","rangeBand","isCentered","getTotalLength","culling","chart","chartLine","chartLines","chartBar","chartBars","chartText","chartTexts","chartArc","chartArcs","chartArcsTitle","chartArcsBackground","chartArcsGaugeUnit","chartArcsGaugeMax","chartArcsGaugeMin","selectedCircle","selectedCircles","eventRect","eventRects","eventRectsSingle","eventRectsMultiple","zoomRect","dragZoom","defocused","regions","tooltipContainer","tooltipName","bars","arcLabelLine","areas","texts","gaugeValue","grid","gridLines","xgrid","xgrids","xgridLine","xgridLines","xgridFocus","ygrid","ygrids","ygridLine","ygridLines","axisXLabel","axisYLabel","axisY2","axisY2Label","legendBackground","legendItem","legendItemEvent","legendItemTile","legendItemHidden","legendItemFocused","dragarea","EXPANDED","SELECTED","INCLUDED","asHalfPixel","ceil10","diffDomain","isDefined","getPathBox","pathSegList","hasValue","isValue","notEmpty","sanitise","Axis","main","axis_x_inner","clipPathForXAxis","getTranslate","axis_x_show","axis_rotated","textAnchorForXAxisLabel","axis_y_inner","clipPathForYAxis","axis_y_show","textAnchorForYAxisLabel","axis_y2_show","textAnchorForY2AxisLabel","getXAxis","withoutTransition","withoutRotateTickText","axisParams","isCategorized","axis_x_tick_multiline","axis_x_tick_multilineMax","axis_x_tick_width","axis_x_tick_rotate","isTimeSeries","parseDate","axis_x_tick_centered","axis_x_tick_culling","updateXAxisTickValues","axis_x_tick_fit","axis_x_tick_count","generateTickValues","mapTargetsToUniqueXs","xAxis","subXAxis","getYAxis","axis_y_tick_rotate","isTimeSeriesY","axis_y_tick_time_type","axis_y_tick_time_interval","getId","data_axes","getXAxisTickFormat","defaultAxisTimeFormat","categoryName","axis_x_tick_format","axisTimeFormat","getTickValues","getXAxisTickValues","axis_x_tick_values","getYAxisTickValues","axis_y_tick_values","yAxis","getY2AxisTickValues","axis_y2_tick_values","y2Axis","getLabelOptionByAxisId","axisId","axis_y_label","axis_y2_label","axis_x_label","getLabelText","setLabelText","getLabelPosition","defaultPosition","isInner","isOuter","isLeft","isCenter","isRight","isTop","isMiddle","isBottom","getXAxisLabelPosition","getYAxisLabelPosition","getY2AxisLabelPosition","getLabelPositionById","textForXAxisLabel","textForYAxisLabel","textForY2AxisLabel","xForAxisLabel","forHorizontal","dxForAxisLabel","textAnchorForAxisLabel","xForXAxisLabel","xForYAxisLabel","xForY2AxisLabel","dxForXAxisLabel","dxForYAxisLabel","dxForY2AxisLabel","dyForXAxisLabel","getMaxTickWidth","axis_x_height","dyForYAxisLabel","dyForY2AxisLabel","axis_y2_inner","withoutRecompute","targetsToShow","dummy","currentMaxTickWidths","filterTargetsToShow","getYDomain","yOrient","axis_y_tick_format","yAxisTickValues","y2Orient","axis_y2_tick_format","y2AxisTickValues","getXDomain","xOrient","xAxisTickFormat","xAxisTickValues","updateLabels","withTransition","getPadding","domainLength","convertPixelsToAxisPadding","tickCount","forTimeSeries","targetCount","tickValue","generateTransitions","axisSubX","subx","isHidden","generate","initParams","data_url","convertUrlToData","data_mimeType","data_headers","data_keys","initWithData","data_json","convertJsonToData","data_rows","convertRowsToData","data_columns","convertColumnsToData","clipId","clipIdForXAxis","clipIdForYAxis","clipIdForGrid","clipIdForSubchart","clipPath","getClipPath","clipPathForGrid","clipPathForSubchart","dragging","flowing","cancelClick","mouseover","transiting","generateColor","levelColor","generateLevelColor","dataTimeParse","data_xLocaltime","data_xFormat","axis_x_localtime","hiddenTargetIds","hiddenLegendIds","focusedTargetIds","defocusedTargetIds","subXOrient","isLegendRight","legend_position","isLegendInset","isLegendTop","legend_inset_anchor","isLegendLeft","legendStep","legendItemWidth","legendItemHeight","rotated_padding_left","rotated_padding_right","rotated_padding_top","withoutFadeIn","intervalForObserveInserted","initChartElements","initBar","initLine","initArc","initGauge","initText","defs","bindto","selectChart","observeInserted","xs","convertDataToTargets","data_filter","data_hide","addHiddenTargetIds","mapToIds","legend_hide","addHiddenLegendIds","updateSizes","updateScales","subX","subY","subY2","orgXDomain","onmouseover","onmouseout","svg_classname","clipChart","appendClip","clipXAxis","clipYAxis","clipGrid","clipSubchart","updateSvgSize","initPie","initDragZoom","initSubchart","initTooltip","initLegend","initTitle","initZoom","initSubchartBrush","initRegion","initGrid","grid_lines_front","initGridLines","initEventRect","updateTargets","axis_x_selection","selectionAsValue","getDefaultSelection","updateDimension","oninit","withTransform","withUpdateXDomain","withUpdateOrgXDomain","withTransitionForAxis","bindResize","bindWindowFocus","smoothLines","legendHeight","legend","getLegendHeight","legendWidth","getLegendWidth","legendHeightForBottom","hasArc","hasArcType","xAxisHeight","getHorizontalAxisHeight","subchartHeight","subchart_show","subchart_size_height","currentWidth","getCurrentWidth","currentHeight","getCurrentHeight","getCurrentPaddingTop","getCurrentPaddingRight","getCurrentPaddingBottom","getCurrentPaddingLeft","margin2","margin3","updateSizeForLegend","width2","height2","arcWidth","arcHeight","hasType","gauge_fullCircle","getGaugeLabelHeight","updateRadius","radiusExpanded","updateTargetsForText","updateTargetsForBar","updateTargetsForLine","updateTargetsForArc","updateTargetsForSubchart","showTargets","isTargetToShow","transitions","withY","withSubchart","withTransitionForExit","withTrimXDomain","withLegend","withEventRect","withDimension","withUpdateXAxis","drawArea","drawBar","xForText","yForText","durationForExit","durationForAxis","transitionsToWait","waitForDraw","flow","intervalForCulling","xDomainForZoom","areaIndices","getShapeIndices","isAreaType","barIndices","isBarType","lineIndices","isLineType","hideAxis","xv","legend_show","updateLegend","updateXDomain","zoom_rescale","orgDomain","axis_y_tick_count","axis_y2_tick_count","axis_x_tick_culling_max","generateDrawArea","generateDrawBar","generateDrawLine","generateXYForText","updateCircleY","circleY","circleX","updateXgridFocus","data_empty_label_text","redrawEventRect","updateGrid","updateRegion","updateBar","updateArea","updateCircle","hasDataLabel","updateText","redrawTitle","redrawArc","redrawSubchart","generateFlow","isTabVisible","redrawBar","redrawLine","redrawArea","redrawCircle","redrawText","redrawRegion","redrawGrid","generateWait","onrendered","updateAndRedraw","withTransitionForTransform","transformAll","redrawWithoutRescale","axis_x_type","isCustomX","data_x","data_xs","axis_y_type","initialOpacity","initialOpacityForCircle","opacityForCircle","isPointShouldBeShown","point_show","isScatterType","opacityForText","xx","axis_x_categories","yv","yScale","subxx","transformMain","transformContext","transformLegend","getXAxisClipX","getXAxisClipY","getXAxisClipWidth","getXAxisClipHeight","getYAxisClipX","getYAxisClipY","getYAxisClipWidth","getYAxisClipHeight","withoutAxis","observer","MutationObserver","mutations","mutation","observe","childList","characterData","resizeFunction","generateResize","onresize","resize_auto","resizeTimeout","onresized","resizeIfElementDisplayed","windowFocusHandler","unbindWindowFocus","callResizeFunctions","resizeFunctions","endall","parsedDate","SVGPathSeg","typeAsLetter","owningPathSegList","pathSegType","pathSegTypeAsLetter","_owningPathSegList","PATHSEG_UNKNOWN","PATHSEG_CLOSEPATH","PATHSEG_MOVETO_ABS","PATHSEG_MOVETO_REL","PATHSEG_LINETO_ABS","PATHSEG_LINETO_REL","PATHSEG_CURVETO_CUBIC_ABS","PATHSEG_CURVETO_CUBIC_REL","PATHSEG_CURVETO_QUADRATIC_ABS","PATHSEG_CURVETO_QUADRATIC_REL","PATHSEG_ARC_ABS","PATHSEG_ARC_REL","PATHSEG_LINETO_HORIZONTAL_ABS","PATHSEG_LINETO_HORIZONTAL_REL","PATHSEG_LINETO_VERTICAL_ABS","PATHSEG_LINETO_VERTICAL_REL","PATHSEG_CURVETO_CUBIC_SMOOTH_ABS","PATHSEG_CURVETO_CUBIC_SMOOTH_REL","PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS","PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL","_segmentChanged","segmentChanged","SVGPathSegClosePath","_asPathString","SVGPathSegMovetoAbs","SVGPathSegMovetoRel","SVGPathSegLinetoAbs","SVGPathSegLinetoRel","SVGPathSegCurvetoCubicAbs","SVGPathSegCurvetoCubicRel","SVGPathSegCurvetoQuadraticAbs","SVGPathSegCurvetoQuadraticRel","SVGPathSegArcAbs","largeArcFlag","sweepFlag","_r1","_r2","_angle","_largeArcFlag","_sweepFlag","SVGPathSegArcRel","SVGPathSegLinetoHorizontalAbs","SVGPathSegLinetoHorizontalRel","SVGPathSegLinetoVerticalAbs","SVGPathSegLinetoVerticalRel","SVGPathSegCurvetoCubicSmoothAbs","SVGPathSegCurvetoCubicSmoothRel","SVGPathSegCurvetoQuadraticSmoothAbs","SVGPathSegCurvetoQuadraticSmoothRel","SVGPathElement","createSVGPathSegClosePath","createSVGPathSegMovetoAbs","createSVGPathSegMovetoRel","createSVGPathSegLinetoAbs","createSVGPathSegLinetoRel","createSVGPathSegCurvetoCubicAbs","createSVGPathSegCurvetoCubicRel","createSVGPathSegCurvetoQuadraticAbs","createSVGPathSegCurvetoQuadraticRel","createSVGPathSegArcAbs","createSVGPathSegArcRel","createSVGPathSegLinetoHorizontalAbs","createSVGPathSegLinetoHorizontalRel","createSVGPathSegLinetoVerticalAbs","createSVGPathSegLinetoVerticalRel","createSVGPathSegCurvetoCubicSmoothAbs","createSVGPathSegCurvetoCubicSmoothRel","createSVGPathSegCurvetoQuadraticSmoothAbs","createSVGPathSegCurvetoQuadraticSmoothRel","getPathSegAtLength","measurementElement","lastPathSegment","numberOfItems","SVGPathSegList","pathElement","_pathElement","_list","_parsePath","_mutationObserverConfig","attributeFilter","_pathElementMutationObserver","_updateListFromPathMutations","_checkPathSynchronizedToList","_pathSegList","takeRecords","mutationRecords","hasPathMutations","record","attributeName","_writeListToPath","_pathSegArrayAsString","pathSeg","newItem","_checkValidIndex","insertItemBefore","replaceItem","appendItem","pathSegArray","Builder","appendSegment","Source","_currentIndex","_endIndex","_previousCommand","_skipOptionalSpaces","_isCurrentSpace","character","_skipOptionalSpacesOrDelimiter","hasMoreData","peekSegmentType","lookahead","_pathSegTypeFromChar","_nextCommandHelper","previousCommand","initialCommandIsMoveTo","_parseNumber","frac","expsign","startIntPartIndex","scanIntPartIndex","multiplier","_parseArcFlag","flag","flagChar","parseSegment","arcAngle","arcLarge","arcSweep","targetLength","padString","axis_x_max","axis_y_max","axis_y2_max","axis_x_min","axis_y_min","axis_y2_min","category","categories","size_width","size_height","targetIds","shown","targetId","clearLegendItemTextBoxCache","updateDataAttributes","baseTarget","baseValue","notfoundIds","orgDataCount","getMaxDataCount","getOtherTargetX","missing","mainRegion","mainText","mainBar","mainLine","mainArea","mainCircle","flowIndex","flowLength","flowStart","getValueOnIndex","flowEnd","durationForFlow","updateXGrid","hideXGridFocus","flowTransition","isRegionOnX","xgridAttr","regionX","regionWidth","candidates","mapToTargetIds","selectorTargets","defocus","expandArc","toggleFocusLegend","unexpandArc","showLegend","isLegendToShow","selectorLegends","grids","grid_x_lines","removeGridLines","grid_y_lines","data_groups","hideLegend","addXs","data_classes","data_colors","hasCaches","cacheIds","getCaches","loadFromArgs","getTargetSelectorSuffix","resetOther","data_selection_enabled","getToggle","isTargetId","data_selection_grouped","isTargetIndex","isSelected","data_selection_isselectable","unselect","removeHiddenTargetIds","filterByX","getMousePosition","tooltip_onshow","tooltip_onhide","transformTo","optionsForRedraw","setTargetType","updateTargetX","updateTargetXs","zoom_onzoom","zoom_enabled","unzoom","zoom_x_max","zoom_x_min","orderFct","getOrderFunction","isOrderAsc","isOrderDesc","defaultSort","gauge_width","donut_width","gaugeArcWidth","gauge_arcs_minWidth","innerRadiusRatio","updateArc","svgArc","getSvgArc","svgArcExpanded","getSvgArcExpanded","svgArcExpandedSub","updateAngle","gMin","gMax","gTic","gValue","isGaugeType","gauge_min","gauge_max","gauge_startingAngle","hasGaugeType","singleArcWidth","withoutUpdate","updated","rate","expandWidth","getArc","isArcType","transformForArcLabel","hasGauge","donut_label_ratio","pie_label_ratio","getArcRatio","whole","convertToArcData","addName","textForArcLabel","shouldShowArcLabel","meetsArcLabelThreshold","getArcLabelFormat","defaultArcValueFormat","textForGaugeMinMax","isMax","getGaugeLabelExtents","shouldExpand","expandDuration","isDonutType","donut_expand_duration","gauge_expand_duration","isPieType","pie_expand_duration","donut_expand","gauge_expand","pie_expand","shouldShow","donut_label_show","pie_label_show","donut_label_threshold","pie_label_threshold","pie_label_format","gauge_label_format","donut_label_format","gauge_label_extents","getArcTitle","donut_title","mainPies","mainPieEnter","classChartArc","classArcs","classFocus","mainArc","arcLabelLines","mainArcLabelLine","arcData","classArc","interaction_enabled","_current","gauge_labelLine_show","innerLineLength","lineAngle","linePositioningAngle","data_onmouseover","selectedData","revertLegend","data_onmouseout","toggleShape","data_onclick","interpolated","backgroundArc","gauge_label_show","gauge_units","addCache","cloneTarget","generateTargetClass","generateClass","classText","classTexts","classShape","classShapes","classLine","classLines","classCircle","classCircles","classBar","classBars","classArea","classAreas","classRegion","classEvent","classTarget","additionalClassSuffix","additionalClass","classFocused","classDefocused","classChartText","classChartLine","classChartBar","selectorTarget","selectorLegend","appVersion","getAxisClipX","getAxisClipY","getAxisClipWidth","getAxisClipHeight","color_pattern","data_color","color_threshold","asValue","padding_left","padding_right","padding_top","padding_bottom","zoom_initialRange","zoom_type","zoom_disableDefaultBehavior","zoom_privileged","zoom_onzoomstart","zoom_onzoomend","interaction_brighten","data_xSort","data_idConverter","data_names","data_type","data_types","data_labels","data_order","data_regions","data_selection_multiple","data_selection_draggable","data_onselected","data_onunselected","subchart_axis_x_show","subchart_onbrush","legend_inset_x","legend_inset_y","legend_inset_step","legend_item_onclick","legend_item_onmouseover","legend_item_onmouseout","legend_equally","legend_padding","legend_item_tile_width","legend_item_tile_height","axis_x_tick_outer","axis_x_padding","axis_y_inverted","axis_y_center","axis_y_tick_outer","axis_y_padding","axis_y_default","axis_y2_inverted","axis_y2_center","axis_y2_tick_outer","axis_y2_padding","axis_y2_default","grid_x_show","grid_x_type","grid_y_show","grid_y_ticks","grid_focus_show","point_r","point_sensitivity","point_focus_expand_enabled","point_focus_expand_r","point_select_r","line_connectNull","line_step_type","bar_width","bar_width_ratio","bar_width_max","bar_zerobased","bar_space","area_zerobased","area_above","spline_interpolation_type","tooltip_show","tooltip_grouped","tooltip_order","tooltip_format_title","tooltip_format_name","tooltip_format_value","tooltip_position","tooltip_contents","defaultTitleFormat","defaultValueFormat","getTooltipContent","tooltip_init_show","tooltip_init_x","tooltip_init_position","title_text","title_padding","title_position","additionalConfig","this_config","converter","convertXsvToData","xsv","targetKeys","new_rows","new_row","findValueInJson","pathArray","newRows","newRow","appendXs","isNotX","isX","xKey","getXKey","rawX","generateTargetX","getOtherTargetXs","getXValuesOfXKey","convertedId","id_org","hasNegativeValue","hasNegativeValueInTargets","hasPositiveValue","hasPositiveValueInTargets","xValues","getXValue","idsForX","valueOnIndex","hasTarget","removeHiddenLegendIds","getValuesAsIdKeyed","ys","checkValueInTargets","checker","orderAsc","orderDesc","reducer","t1Sum","t2Sum","orderTargets","fct","filterRemoveNull","filterByXDomain","xDomain","getDataLabelLength","lengths","dataLabelFormat","isNoneArc","isArc","findClosestFromTargets","findClosest","minDist","isWithinBar","xIndex","yIndex","convertValuesToStep","converted","getYDomainMin","baseId","idsInGroup","getYDomainMax","yDomainAbs","isAllPositive","isAllNegative","targetsByAxisId","yTargets","yMin","yMax","yDomainMin","yDomainMax","isZeroBased","isInverted","showHorizontalDataLabel","showVerticalDataLabel","getXDomainMin","getXDomainMax","getXDomainPadding","maxDataCount","firstX","lastX","withTrim","updateScale","trimXDomain","zoomDomain","getZoomDomain","mx","my","minX","maxX","minY","_w","_h","isIncluded","isWithin","togglePoint","togglePath","dragstart","dragend","getYFormat","forArc","formatForY","yFormat","formatForY2","y2Format","defaultFormat","xgridData","generateGridData","xgridEnter","updateYGrid","gridValues","ygridEnter","gridTextAnchor","gridTextDx","xGridTextX","yGridTextX","xgridLineEnter","ygridLineEnter","showXGridFocus","dataToShow","focusEl","firstYear","lastYear","gridData","tickNum","getGridFilterToRemove","forX","toRemove","toShow","mouseout","unexpandCircles","unexpandBars","sameXData","expandCircles","expandBars","isWithinShape","getYScale","initMouseEvent","legendItemTextBox","legendHasRendered","updateLegendWithDefaults","insetLegendPosition","updateLegendStep","updateLegendItemWidth","updateLegendItemHeight","opacityForLegend","opacityForUnfocusedLegend","getTextBox","textElement","getTextRect","updatePositions","updateValues","withoutStep","areaLength","totalLength","itemLength","posMin","steps","margins","maxLength","isLast","tileWidth","itemHeight","maxHeight","widths","xForLegend","xForLegendText","xForLegendRect","yForLegend","yForLegendText","yForLegendRect","x1ForLegendTile","x2ForLegendTile","yForLegendTile","tiles","mainRegionEnter","regionY","regionHeight","getScale","forTimeseries","getX","_scale","getY","getSubYScale","forInit","xMin","xMax","subXMin","subXMax","subYMin","subYMax","selectPoint","pointSelectR","unselectPoint","selectPath","unselectPath","isStepType","mainBars","mainBarEnter","barData","getBarW","barTargetsNum","getBars","isSub","getPoints","generateGetBarPoints","indexX","indexY","__max__","barW","barX","getShapeX","barY","getShapeY","barOffset","getShapeOffset","barSpaceOffset","posX","posY","seg0","seg1","ey","typeFilter","targetsNum","isWithinStep","isWithinCircle","getInterpolate","linear-closed","basis-open","basis-closed","cardinal-open","cardinal-closed","monotone","step-before","step-after","isSplineType","mainLines","mainLineEnter","lineData","generateGetLinePoints","yScaleGetter","xValue","yValue","lineWithRegions","lineTargetsNum","lineOffset","_regions","generateM","sWithRegion","diffx2","xOffset","x_diff","xv0","xv1","mainAreaEnter","orgAreaOpacity","generateGetAreaPoints","getAreaBaseValue","areaTargetsNum","areaOffset","lineOrScatterData","mainCircleEnter","pointR","getCircles","pointExpandedR","d3_this","getParentWidth","getParentHeight","getTitlePadding","getAxisWidthByAxisId","legendWidthOnRight","getParentRectValue","getSvgLeft","hasLeftAxisRect","leftAxisClass","leftAxis","svgRect","chartRect","svgLeft","initBrush","redrawForBrush","updateExtent","contextLineEnter","contextLine","contextBarEnter","contextBar","updateBarForSubchart","redrawBarForSubchart","drawBarOnSub","updateLineForSubchart","redrawLineForSubchart","drawLineOnSub","updateAreaForSubchart","contextArea","contextAreaEnter","redrawAreaForSubchart","drawAreaOnSub","mainTextEnter","barOrLineData","forFlow","font","getAreaPoints","getBarPoints","getLinePoints","getter","getXForText","getYForText","xPos","yPos","isSafari","isChrome","xForTitle","yForTitle","getTooltipSortFunction","sortFunction","titleFormat","nameFormat","valueFormat","tooltipSortFunction","tooltipPosition","tWidth","tHeight","tooltipLeft","tooltipRight","tooltipTop","chartRight","positionFunction","ua","startEvent","redrawForZoom","updateDomain","brushXPos","brushYPos","getZoomedDomain","dragZoomBrush","zoomedDomain","svgPanZoom","./svg-pan-zoom.js","2","svgNS","_createZoomIn","_createZoomReset","_createZoomOut","controlIcons","getPublicInstance","zoomIn","zoomOut","./svg-utilities","originalState","activeState","updateCTMCached","updateCTM","createRequestAnimationFrame","refreshRate","viewBox","cacheViewBox","processCTM","setCTM","updateCTMOnNextFrame","simpleViewBoxCache","getBBox","getViewBox","getCTM","contain","getOriginalState","getZoom","getRelativeZoom","computeRelativeZoom","getPan","createSVGMatrix","isZoomDifferent","isPanDifferent","beforeZoom","updateCache","onZoom","beforePan","onPan","pendingUpdate","onUpdatedCTM","./utilities","4","viewportSelector","panEnabled","controlIconsEnabled","zoomEnabled","dblClickZoomEnabled","mouseWheelZoomEnabled","preventMouseEventsDefault","zoomScaleSensitivity","minZoom","maxZoom","customEventsHandler","eventsListenerElement","passive","setupSvgAttributes","getBoundingClientRectNormalized","getOrCreateViewport","setBeforeZoom","setOnZoom","setBeforePan","setOnPan","setOnUpdatedCTM","lastMouseWheelEventTime","setupHandlers","eventListeners","handleMouseDown","touchstart","handleMouseUp","touchend","handleMouseMove","touchmove","touchleave","touchcancel","svgElement","haltEventListeners","enableMouseWheelZoom","wheelListener","handleMouseWheel","disableMouseWheelZoom","getEventPoint","zoomAtPoint","multiply","getSvgCenterPoint","publicZoom","computeFromRelativeZoom","publicZoomAtPoint","resetZoom","resetPan","pan","handleDblClick","mouseAndTouchNormalize","isDblClick","firstEventCTM","stateOrigin","updateBBox","panBy","disableControlIcons","enableControlIcons","publicInstance","enablePan","disablePan","isPanEnabled","enableZoom","disableZoom","isZoomEnabled","isControlIconsEnabled","enableDblClickZoom","disableDblClickZoom","isDblClickZoomEnabled","isMouseWheelZoomEnabled","setZoomScaleSensitivity","setMinZoom","setMaxZoom","zoomBy","zoomAtPointBy","getSizes","realZoom","getSvg","./control-icons","./shadow-viewport","./uniwheel","5","xmlNS","xmlnsNS","xlinkNS","evNS","internetExplorerRedisplayInterval","refreshDefsGlobal","6","deltaX","delatZ","onmousewheel","7","HTMLElement","SVGSVGElement","getSVGDocument","leading","trailing","menuBroadcast","swishLogo","setupModal","setupPanes","setupResize","setupUnload","Save ...","Info & history ...","Reload","Open recent","Share","Follow ...","Start TogetherJS ...","Export","Download","Print ...","Edit","Clear messages","Changes","View changes","Find (Ctrl-F)","Find and replace (Shift-Ctrl-F)","Jump to line (Alt-G)","Options","Semantic highlighting","Emacs Keybinding","Open document in new tab","Preserve state in browser","Examples","Help","show_beware","preserve_state","afterRestore","after_restore","runDelayedRestore","playFile","playURL","openExampleFunction","populateExamples","swish_examples","populateHelp","openHelpFunction","swish_help_index","prologSource","tabData","onlyglobal","fullscreen_origin","fullscreen_main","exitFullscreen","isFullscreen","showNavbar","collaborate","TogetherJS","showUpdates","to_array","load_plugin","plugin","js","jsdeps","plugins","urlArgs","waitSeconds","jquery-ui","bloodhound","tagmanager","svg-pan-zoom","cm/mode/prolog","cm/addon/hover/prolog-hover","cm/addon/hover/text-hover","cm/addon/hint/templates-hint","cm/addon/hint/show-context-info","shim","deps"],"mappings":"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AAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EA9FA,4SA8FA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EA/FA,8QACA,qeA+FA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAtGA,qeAsGA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EArcA,kaACA,mRAqcA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAneA,kgBAoeA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAlgBA,kgBACA,kgBAkgBA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAhiBA,kgBAiiBA;ij8CAiBA;QACAC,MAAAL,EACAM,SAAA,SAAAL,GAAA,MAAA,KA3qBA,EA2qBAD,EAAAC,KACAM,YAAA,SAAAN,GAAA,MAAA,KA3qBA,EA2qBAD,EAAAC,KACAO,UAAA,SAAAP,GAAA,MAAA,KA3qBA,EA2qBAD,EAAAC,KACAQ,UAAA,SAAAR,GAAA,MAAA,KA3qBA,EA2qBAD,EAAAC,KACArM,OAAA,SAAAqM,GAAA,MAAA,KA3qBA,GA2qBAD,EAAAC,KACAjjD,MAAA,SAAAijD,GAAA,MAAA,KA3qBA,GA2qBAD,EAAAC,KACAS,QAAA,SAAAT,GAAA,MAAA,KA3qBA,GA2qBAD,EAAAC,QCprBA,SAAA/kC,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,yBAAA,uBAAA,kBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,EAAA8jE,GACA,YAEA9jE,GAAA8P,WAAA,SAAA,SAAAi0D,EAAAC,GAEA,QAAAC,GAAA5wD,EAAAx6D,EAAA3K,GAEA,MADA2K,GAAAsJ,SAAAjU,EACAA,EAAAmlE,EAAAx6D,GAiCA,QAAAqrH,GAAA7wD,EAAAv1D,EAAA2iC,GACA,GAAAA,EAAA,GACA,KAAAA,KAAA,GACA,IAAA3iC,EAAA/R,KAAAsnE,EAAAv3D,QACA,OAAA,MAGA,MAAAgC,EAAA/R,KAAAsnE,EAAA88B,SACA98B,EAAAv3D,MAEA,QAAA,EAGA,QAAAqoH,GAAA9wD,GACA,GAAAv3D,GAAAu3D,EAAAv3D,MACA,IAAAsoH,EAAAr4H,KAAA+P,GACA,OAAA,CACA,QAAAA,GACA,IAAA,IACA,QAAAqf,EAAAkpG,eACAH,EAAA7wD,EAAAixD,EAAA,EAEA,KAAA,IACA,QAAAnpG,EAAAkpG,eACAH,EAAA7wD,EAAAixD,EAAA,EAEA,KAAA,MAAA,OAAA,CACA,KAAA,IAAA,MAAAjxD,GAAAi9B,YAAA,CACA,KAAA,IAAA,MAAA4zB,GAAA7wD,EAAAixD,EAAA,GAEA,QAAAC,EAAAx4H,KAAA+P,OACAooH,EAAA7wD,EAAAkxD,GAAA,KAEA,MAAAlxD,EAAA88B,QACA98B,EAAAv3D,QACA,IAKA,QAAA0oH,GAAAnxD,EAAAx6D,EAAA3L,GAEA,IADA,GAAA4O,GACA,OAAAA,EAAAu3D,EAAAv3D,SAAA,CACA,GAAAA,GAAA5O,GAAAA,GAAAmmE,EAAA88B,OAEA,MADAt3F,GAAA4rH,QAAA5nH,OACA,CAEA,IAAA,MAAAf,IACAqoH,EAAA9wD,GACA,OAAA,EAGA,MAAAl4C,GAAAupG,gBAOA,QAAAD,GAAA5rH,GACA,MAAAA,GAAA4rH,QAAAz5H,OAAA,GAAA,GAIA,QAAA25H,GAAA9rH,GACA,GAAA+rH,GAAAH,EAAA5rH,EACA+rH,GACA,GAAAA,EAAAxkG,IACAwkG,EAAAxkG,IAAA,EACA,WAAAwkG,EAAAt1H,OACAuJ,EAAAgsH,WAAA,GAEAhsH,EAAAgsH,WAAA,EAGA,QAAAC,GAAAjsH,GACA,GAAA+rH,GAAAH,EAAA5rH,EACA+rH,KAAAA,EAAAG,eAAAvoG,IAAAooG,EAAAxkG,MACA,GAAAwkG,EAAAxkG,IACAwkG,EAAAG,UAAAH,EAAAI,QAAAJ,EAAAI,QAAA,EAAAJ,EAAAl0B,OAAA,EAEAk0B,EAAAG,UAAAH,EAAAl0B,OAAA,GAIA,QAAAu0B,GAAApsH,GACA,GAAA+rH,GAAAH,EAAA5rH,EACA+rH,GACAA,EAAAxkG,IACAwkG,EAAAxkG,MACA,WAAAwkG,EAAAt1H,OACAuJ,EAAAgsH,WAAA,GAEAhsH,EAAAgsH,WAAA,EAGA,QAAAK,GAAArsH,GACA,GAAA+rH,GAAAH,EAAA5rH,EACA,OAAA+rH,GACA,WAAAA,EAAAt1H,KAKAuJ,EAAAssH,OAMA,QAAAC,GAAAC,EAAAt4H,EAAAu4H,GAEA,MADAh2H,GAAA+1H,EAAA5hH,EAAA6hH,EACAv4H,EAGA,QAAAw4H,GAAAlyD,GACA,SAAAA,EAAAG,QACA,QAAAznE,KAAAsnE,EAAA88B,SAUA,QAAAq1B,GAAAnyD,EAAAx6D,GACA,GAAAirB,GAAAuvC,EAAAv3D,MAEA,IAAA,KAAAgoB,EAeA,MAdA,WAAAjrB,EAAA4sH,UACA5sH,EAAA4rH,QAAAx1H,MAAAy2H,QAAA7sH,EAAA8sH,YACAj1B,OAAAr9B,EAAAq9B,SACAs0B,QAAAnsH,EAAA+sH,cACAxlG,IAAA,UAEAvnB,GAAA8sH,kBACA9sH,GAAA+sH,eAEA/sH,EAAA4rH,QAAAx1H,MAAAK,KAAA,UACAu2H,YAAAxyD,EAAAq9B,SACAq0B,UAAA1xD,EAAAq9B,SAAA,IAGA00B,EAAA,OAAA,KAAA,IAGA,IAAA,KAAAthG,GAAA,OAAAjrB,EAAA4sH,SAQA,MAPA5sH,GAAA4rH,QAAAx1H,MAAAyjC,IAAA75B,EAAA4pB,QACAiuE,OAAAr9B,EAAAq9B,SACAs0B,QAAAnsH,EAAAitH,UACA1lG,IAAA,UAEAvnB,GAAA4pB,cACA5pB,GAAAitH,UACAV,EAAA,YAAA,KAGA,IAAA,KAAAthG,GAAAuvC,EAAA+8B,IAAA,KACA,MAAA6zB,GAAA5wD,EAAAx6D,EAAAktH,EAEA,IAAA,KAAAjiG,EAEA,MADAuvC,GAAAk9B,YACA60B,EAAA,UAAA,UAKA,IAFAT,EAAA9rH,GAEAmtH,EAAAj6H,KAAA+3B,GAAA,CACA,OAAAA,GACA,IAAA,IACAjrB,EAAA4rH,QAAA5nH,KACA,MACA,KAAA,IAEA,MADAhE,GAAA4rH,QAAA5nH,MACAuoH,EAAA,aAAA,KAAA,IACA,KAAA,IACA,GAAAR,GAAAH,EAAA5rH,GACAvJ,EAAAs1H,GAAAA,EAAAlyF,IAAA,aAAA,kBAGA,OADA75B,GAAA4rH,QAAA5nH,MACAuoH,EAAA91H,EAAA,KAEA,KAAA,IACA+jE,EAAAG,QACA36D,EAAAotH,YAAA,GACAhB,EAAApsH,EAEA,KAAA,IACAqsH,EAAArsH,KACAA,EAAAgsH,WAAA,EACA,MACA,KAAA,IAKA,MAJAhsH,GAAA4rH,QAAAx1H,MAAAK,KAAA,OACAu2H,YAAAxyD,EAAAq9B,SACAq0B,UAAA1xD,EAAAq9B,SAAA,IAEA00B,EAAA,YAAA,KAAA,IAEA,KAAA,IACA,MAAAjqG,GAAA+qG,iBAAA7yD,EAAA+8B,IAAA,MACAv3F,EAAA4rH,QAAAx1H,MAAAK,KAAA,kBACAy1H,UAAA1xD,EAAAq9B,SAAA,IAEA00B,EAAA,UAAA,aAEAvsH,EAAA4rH,QAAAx1H,MAAAK,KAAA,QACAu2H,YAAAxyD,EAAAq9B,SACAq0B,UAAA1xD,EAAAq9B,SAAA,IAEA00B,EAAA,kBAAA,MAGA,KAAA,IACA,GAAAjqG,EAAA+qG,gBAAA,CACA,GAAA7yD,EAAA+8B,IAAA,KAEA,MADAv3F,GAAAsJ,SAAAgkH,EACAf,EAAA,SAAA,SACA,IAAA/xD,EAAA+8B,IAAA,KAEA,MADAv3F,GAAA4rH,QAAA5nH,MACAuoH,EAAA,WAAA,YAGAF,EAAArsH,KACAA,EAAAgsH,WAAA,GAGA,MAAAO,GAAA,OAAA,KAAAthG,GAGA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,EAIA,MAHAjrB,GAAA4rH,QAAAx1H,MAAAK,KAAA,SACAy1H,UAAA1xD,EAAAq9B,SAAA,IAEAuzB,EAAA5wD,EAAAx6D,EAAAutH,EAAAtiG,GAGA,IAAA,KAAAA,EAAA,CACA,GAAAuvC,EAAA+8B,IAAA,MAEA,MADA/8B,GAAAg9B,SAAA,YACA+0B,EAAA,SAAA,SAEA,IAAA/xD,EAAA+8B,IAAA,MAEA,MADA/8B,GAAAg9B,SAAA,UACA+0B,EAAA,SAAA,SAEA,IAAA/xD,EAAA+8B,IAAA,KAAA,CAEA,MAAA,MADA/8B,EAAAv3D,QAEAqoH,EAAA9wD,GAGA+xD,EAAA,OAAA,QAFAA,EAAA,QAAA,UAMA,GAAA,KAAAr5H,KAAA+3B,IAAA,OAAA/3B,KAAA+3B,IAAAuvC,EAAA+8B,IAAA,MAKA,MAJAj1E,GAAAkrG,gBACAhzD,EAAA/oE,MAAA,iDAEA+oE,EAAA/oE,MAAA,oCACA86H,EAAA,KAAAthG,EAAA,aACA,KAAAA,EAAA,aACA,SAGA,IAAAggG,EAAA/M,OAAAjzF,GAAA,CACAuvC,EAAAg9B,SAAAyzB,EAAA/M,OACA,IAAAuP,GAAAjzD,EAAA7S,SACA,OAAA,KAAA8lE,GAAAf,EAAAlyD,GACAoxD,EAAA5rH,GACAusH,EAAA,WAAA,QAAAkB,GAEAlB,EAAA,WAAA,WAAAkB,GACAC,EAAAx6H,KAAAu6H,GACAlB,EAAA,OAAA,OAAAkB,GACApB,EAAArsH,IAAA2tH,EAAAz6H,KAAAu6H,IACAztH,EAAAgsH,WAAA,EACAO,EAAA,SAAA,WAAAkB,IAEAlB,EAAA,SAAA,WAAAkB,GAGAjzD,EAAAg9B,SAAAyzB,EAAAJ,YACA,IAAA97B,GAAAv0B,EAAA7S,SACA,IAAA,KAAA6S,EAAA88B,QAAAh1E,EAAAsrG,MAGA,MAFA5tH,GAAA4pB,QAAAmlE,EACA/uF,EAAAitH,UAAAzyD,EAAAq9B,SACA00B,EAAA,MAAA,MAAAx9B,EACA,IAAA,KAAA9jE,EAAA,CACA,GAAA,GAAA8jE,EAAAr+F,OACA,MAAA67H,GAAA,MAAA,OAAAx9B,EAEA,IAAA8+B,GAAA9+B,EAAAnqE,OAAA,EACA,OAAAqmG,GAAAH,UAAA+C,GACAtB,EAAA,MAAA,QAAAx9B,GAEAw9B,EAAA,MAAA,MAAAx9B,GACA,MAAAk8B,GAAAH,UAAA7/F,GACAshG,EAAA,MAAA,MAAAx9B,GACA,KAAAv0B,EAAA88B,QACAt3F,EAAA8sH,YAAA/9B,EACA/uF,EAAA+sH,cAAAvyD,EAAAq9B,SACA00B,EAAA,UAAA,UAAAx9B,IAEAw9B,EAAA,OAAA,OAAAx9B,GAGA,QAAAw+B,GAAAO,GACA,MAAA,UAAAtzD,EAAAx6D,GACA,IAAA2rH,EAAAnxD,EAAAx6D,EAAA8tH,GAAA,CAEA,GADA9tH,EAAAsJ,SAAAqjH,EACA,KAAAnyD,EAAA88B,OAAA,CACA,GAAAvI,GAAAv0B,EAAA7S,SAEA,OADA3nD,GAAA8sH,YAAA/9B,EACAw9B,EAAA,UAAA,UAAAx9B,GAEA,GAAA,KAAAv0B,EAAA88B,QAAAh1E,EAAAsrG,MAAA,CACA,GAAA7+B,GAAAv0B,EAAA7S,SAEA,OADA3nD,GAAA4pB,QAAAmlE,EACAw9B,EAAA,MAAA,MAAAx9B,IAGA,MAAAw9B,GAAAwB,EAAAD,GAAAC,EAAAD,KAIA,QAAAR,GAAA9yD,EAAAx6D,GAEA,IADA,GAAAirB,GAAA+iG,GAAA,EACA/iG,EAAAuvC,EAAAv3D,QAAA,CACA,GAAA,KAAAgoB,GAAA+iG,EAAA,CACAhuH,EAAAsJ,SAAAqjH,EACAnyD,EAAAo9B,OAAA,EACA,OAEAo2B,EAAA,KAAA/iG,EAEA,MAAAshG,GAAA,aAAA,cAGA,QAAAW,GAAA1yD,EAAAx6D,GAEA,IADA,GAAAirB,GAAA+iG,GAAA,EACA/iG,EAAAuvC,EAAAv3D,QAAA,CACA,GAAA,KAAAgoB,GAAA+iG,EAAA,CACAhuH,EAAAsJ,SAAAqjH,CACA,OAEAqB,EAAA,KAAA/iG,EAEA,MAAAshG,GAAA,UAAA,WAxXA,GAuIA91H,GAAAmU,EAvIA0X,GAAA+qG,iBAAA,EACAO,OAAA,EACApC,eAAA,EACAK,iBAAA,EACA2B,iBAAA,GAGAO,GAAAE,IAAA,SACAC,IAAA,QACAC,IAAA,YAGA5C,EAAA,mBACAG,EAAA,QACAD,EAAA,cAGA0B,EAAA,gBACAO,EAAA,aACAC,EAAA,wBA6WA,QACAr1D,WAAA,WACA,OACAhvD,SAAAqjH,EACAL,QAAA,EACAN,WAAA,EACAY,SAAA,KACAhB,QAAA,GAAAjvH,OACAyxH,QAAA,KACAC,SAAA,OAIAv+E,MAAA,SAAA0qB,EAAAx6D,GAWA,GARA,MAAAA,EAAAouH,SAAAjD,EAAAmD,WACAtuH,EAAAouH,QAAA,EACApuH,EAAAquH,SAAA,GAGA7zD,EAAA68B,aACAr3F,GAAAotH,WAEAptH,EAAAsJ,UAAAqjH,GAAAnyD,EAAAi9B,WAGA,MAFAj9B,GAAAG,OACAsxD,EAAAjsH,GACA,IAGA,IAAA9L,GAAA8L,EAAAsJ,SAAAkxD,EAAAx6D,EAkBA,OAhBAw6D,GAAAG,OACAsxD,EAAAjsH,GAEA,QAAAvJ,GACAuJ,EAAAssH,QAAA,EACAtsH,EAAAgsH,WAAA,GACA,YAAAv1H,IACAuJ,EAAAssH,QAAA,EACAtsH,EAAAgsH,WAAA,GAGAhsH,EAAA4sH,SAAAn2H,EAEA,kBAAA00H,GAAA,SACAj3H,EAAAi3H,EAAAoD,OAAA/zD,EAAAx6D,EAAAvJ,EAAAmU,EAAA1W,IAEAA,GAGAm7F,OAAA,SAAArvF,EAAAwuH,GACA,GAAAxuH,EAAAsJ,UAAA4jH,EAAA,MAAA/lE,GAAAkhC,IAEA,IAAA0jC,EACA,QAAAA,EAAAH,EAAA5rH,IACA+rH,EAAAiB,cAAAhtH,EAAAotH,WACArB,EAAAiB,YACAjB,EAAAG,UAEAlsH,EAAAssH,OAGA,EAFA,GAKAp/B,MAAA,SAEAuhC,kBAAA,KACAC,gBAAA,KACAC,qBAAA,MACAC,YAAA,OAIAznE,EAAAiQ,WAAA,gBAAA,YCheA,SAAAouB,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,8BAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,YAkBAA,GAAA+gC,SAAA2mC,sBAAA,SAAAv6D,GACA,GAAAlgE,GAAAkgE,EAAAqb,UAAA,QAGA,OAAA,IAFArb,EAAA+6C,WAAAj7G,GAAA,GAEA4L,MAAAgsH,cACA13D,GAAA4vB,iBAAA,OAAA,OAIA/8B,EAAAkhC,MAGAlhC,EAAA+gC,SAAA4mC,gBAAA,SAAAx6D,GAOA,QAAAs3D,GAAA5rH,GACA,GAAA6tC,GAAA7tC,EAAA4rH,QAAAl7H,MACA,OAAAm9C,GAAA,EACA7tC,EAAA4rH,QAAA/9E,EAAA,GACA,KAVA,GAAAz5C,GAAAkgE,EAAAqb,UAAA,SACA7/B,EAAAwkB,EAAA+6C,WAAAj7G,GAAA,EAuBA,OAAAA,GAAA62B,IAAA6kB,EAAAz7C,KACA,YAAAy7C,EAAAr5C,MACA,KAAAq5C,EAAAoX,QAbA,SAAAlnD,GACA,GAAA+rH,GAAAH,EAAA5rH,EACA,OAAA+rH,GACA,WAAAA,EAAAt1H,KAKAuJ,EAAAssH,QAMAx8E,EAAA9vC,WACAs0D,GAAA4vB,iBAAA,MAAA,OAIA/8B,EAAAkhC,MAGAlhC,EAAA+gC,SAAA6mC,gBAAA,SAAAz6D,GACA,GAAAlgE,GAAAkgE,EAAAqb,UAAA,SACA7/B,EAAAwkB,EAAA+6C,WAAAj7G,GAAA,EAEA,OAAA,IAAA07C,EAAA17C,OAAAA,EAAA62B,IAAA6kB,EAAAz7C,KACA,KAAAnB,KAAA48C,EAAAoX,QAKAC,EAAAkhC,SAJA/zB,GAAA4vB,iBAAA,OAAA,QAOA/8B,EAAAqnD,aAAA,aAAA,KAAA,SAAAl6C,EAAA56C,EAAA1P,GAGA,GAFAA,GAAAA,GAAAm9C,EAAAkmC,MACA/4B,EAAA06C,aAAA,UACAt1F,EAAA,CACA,GAAAlhB,IAAA2T,KAAA,SACA6iH,MAAA,wBACAC,MAAA,kBACAC,MAAA,kBACAC,SAAA,mBAEA76D,GAAAy6C,UAAAv2G,QCjGA,SAAAgtF,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,+BAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,YAEAA,GAAA+gC,SAAAknC,qBAAA,SAAA96D,GAGA,IAFA,GAAA+6D,GAAA/6D,EAAAwmC,YAAA,EAEAu0B,GAAA,GAAA,IAAA/6D,EAAAjH,QAAAgiE,GAAA5tH,QACA4tH,GAEA,IAAAA,GAAA,EAAA,CACA,GAAAC,GAAAh7D,EAAAjH,QAAAgiE,GAAA3+H,OACAo/C,EAAAwkB,EAAA+6C,YAAAjpD,KAAAipE,EAAApkG,GAAAqkG,IAAA,EAEA,IAAA,YAAAx/E,EAAAr5C,KAAA,CACA,GAAAlG,GAAA+jE,EAAAqb,aAEAp/E,EAAA61D,KAAAipE,GAAA9+H,EAAA61D,MAAAipE,GAAA9+H,EAAA06B,IAAA6kB,EAAAz7C,MACAxC,EAAA,yBACAue,QAAA,YACA7X,KAAA,6CACAqtB,MAAA/zB,EAAAyiE,EAAA3/D,QAAAqgD,SAAA/qC,QAAA,oBAMA,MAAAk9C,GAAAkhC,MAGAlhC,EAAA+gC,SAAAqnC,gBAAA,SAAAj7D,GAEA,MAAAA,GAAAi7D,gBAAAj7D,EAAAu/B,aAGA1sC,EAAAqnD,aAAA,cAAA,KAAA,SAAAl6C,EAAA7oB,EAAAzhC,GAGA,GAFAA,GAAAA,GAAAm9C,EAAAkmC,MACA/4B,EAAA06C,aAAA,eACA,kBAAA,GAAA,CACA,GAAAx2G,IAAA2T,KAAA,cACAqjH,aAAA,kBACA7tB,MAAA,uBAEArtC,GAAAy6C,UAAAv2G,GACA87D,EAAAi7D,gBAAA9jF,OC5CA,SAAA+5C,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,gCAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,YAKA,SAAAsoE,GAAAj5G,GACA,gBAAAA,KACAhnB,KAAA2Y,QAAAqO,EAAArO,UAAA,EACA3Y,KAAAsnC,KAAAtgB,EAAAsgB,MAAA,SACAtgB,EAAAk5G,WACAlgI,KAAAkgI,SAAAl5G,EAAAk5G,UACAlgI,KAAAqsB,KAAAqgB,OAAA1lB,EAAAqF,IAAA,SACA2wB,OAAAh2B,EAAAqF,IAAA,SACAsW,MAAA3b,EAAAqF,IAAA,QACA6tB,KAAAlzB,EAAAqF,IAAA,QAEArsB,KAAA8oB,MAAA9B,EAAA8B,MAAA9B,EAAA8B,MAAAq3G,EACAngI,KAAAogI,sBAAA,EACApgI,KAAAw3C,IAAA,MAaA,QAAA6oF,GAAAv7D,EAAAp4B,GACA,GAAAl8B,GAAAs0D,EAAAt0D,MAAA8vH,qBAEA,OAAA9vH,GAAA,MAAAA,EAAA6b,KAAA7b,EAAAmI,UAGAnI,EAAAgnC,KACAstB,EAAAy7D,iBAGApsG,KAAA3jB,EAAAyrB,SACAzrB,EAAAyrB,QAAAr1B,KAAA8lC,GAEA,YAAAA,EAAAmI,SACA,GAAArkC,EAAA4vH,uBACA5vH,EAAAyrB,YAAA9H,GACA2wC,EAAA07D,4BAIA,QAAAC,GAAA37D,GACA,GAAAt0D,GAAAs0D,EAAAt0D,MAAA8vH,qBAEA,IAAA,MAAA9vH,GAAA,MAAAA,EAAA6b,KAAA,MAAA7b,EAAAsyG,KAAA,CAEA,GAAAA,GAAAtyG,EAAAsyG,WACAtyG,GAAAsyG,KAEAzgH,EAAAirB,MAAAjB,IAAA7b,EAAA6b,IAAAsW,MACAlW,OAAA,EACAC,YAAA,mBACAzlB,KAAA,OACAqJ,SAAA,OACAI,KAAA/M,KAAAyvB,WAAA0vF,KAAAA,OA8IA,QAAA3rF,KACA,GAAAnxB,IAAA,GAAA4F,OAAAwrB,SAOA,OANA,uCACAl0B,QAAA,QAAA,SAAAnC,GACA,GAAAV,IAAA2F,EAAA,GAAAuE,KAAAsH,UAAA,GAAA,CAEA,OADA7L,GAAAuE,KAAA8sB,MAAArxB,EAAA,KACA,KAAAjF,EAAAV,EAAA,EAAAA,EAAA,GAAAyQ,SAAA,MAyIA,QAAA4vH,GAAA11D,EAAAx6D,EAAAvJ,EAAAmU,EAAA1W,GAqEA,QAAAi8H,GAAAlxD,GACA,GAAA7qE,EAEA,IAAAwW,GAAAq0D,EACA,OAAA,CAEA,KAAA7qE,EAAA6qE,EAAA73C,YAAAxc,EAAA,KAAA,EAAA,CAEA,IAAA,GADAuL,GAAA8oD,EAAAt6C,UAAA/Z,EAAAla,OAAA0D,GACAzE,EAAA,EAAAA,EAAAwmB,EAAAzlB,OAAAf,IACA,IAAA6qE,EAAA+8B,IAAAphF,EAAAyO,OAAAj1B,IAEA,MADA6qE,GAAAo9B,OAAAjoG,IACA,CAGA,QAAA,EAGA,OAAA,EASA,QAAAygI,GAAAxE,GACA,GAAA3qH,GAAA2qH,EAAAz5H,OAAA,GAAA,EACA,OAAA8O,IAAA,UAAAA,EAAAxK,KAhGA,GAAA00H,GAAA37H,IAwKA,IAAA,MAAAwQ,EAAAouH,QAAA,CACA,GAAAt+E,GACAugF,CAIA,IAAArwH,EAAAswH,aAKA,MAJA,YAAA75H,IACA00H,EAAAhlE,OAAA4pE,mBACA/vH,GAAAswH,cAEAp8H,CAGA,IAAA8L,EAAAuwH,UAAA,CACA,GAAAC,GAAAxwH,EAAAuwH,SAEA,IAAAC,EAAAC,cAAA,EAAA,CAMA,GALAD,EAAAE,cAAAt6H,MAAAK,KAAAA,EACAvC,MAAAA,EACA0W,QAAAA,IAGAylH,EAlJA,WACA,GAAAG,GAAAxwH,EAAAuwH,SACAC,GAAAG,QACAH,EAAAI,MASA,OALAJ,GAAAC,aAKA,QAuIA,MAAAJ,EACA,aAAA55H,IACA+5H,EAAAE,iBACAF,EAAAC,gBAIA,MAAAv8H,GAGA,OAAA47C,EApMA,SAAA9vC,GACA,GAAAy2B,GAAA00F,EAAAmD,SAAAtuH,EAAAouH,QACA,KAAA33F,EAAA,MAAA,KACA,IAAAqZ,GAAArZ,EAAAz2B,EAAAquH,SACA,OAAAv+E,IAAA,MAgMA9vC,QAOA2jB,MAAA0sG,EApGA,SAAAvgF,EAAA9vC,GACA,GAAA8vC,EAAA,CACA,IAAA+gF,EAAAp6H,GA4CA,MAAAmU,IAAAklC,EAAA//C,MAAA6a,GACA5K,EAAAquH,WACAv+E,EAAAr5C,MAEAvC,CA/CA,IAAA47C,EAAA//C,MAAA6a,EAAA,CACA,GAAAulH,EAAArgF,EAAA//C,MAEA,MADAiQ,GAAAquH,WACAv+E,EAAAr5C,IAGA,QACA,GAAAo6H,EAAAp6H,IAAAq6H,EAAAhhF,EAAAr5C,MAOA,MANA,YAAAA,GACAuJ,EAAAouH,UACApuH,EAAAquH,SAAA,GACA+B,EAAApwH,EAAA4rH,UACA5rH,EAAAquH,WAEAv+E,EAAAr5C,IACA,IAAAo6H,EAAAp6H,IAAAq5C,EAAAoZ,KAEA,MADAlpD,GAAAquH,WACAv+E,EAAAr5C,IACA,IAAA,SAAAA,GAAA,QAAAq6H,EAAAhhF,EAAAr5C,MAEA,MADAuJ,GAAAquH,WACAv+E,EAAAr5C,IACA,IAAA,UAAAA,GAAA,QAAAq5C,EAAAr5C,KAEA,MADAuJ,GAAAquH,WACAv+E,EAAAr5C,IACA,IAAA,QAAAq6H,EAAAhhF,EAAAr5C,QACA,QAAAA,GAAA,SAAAA,GAAA,UAAAA,GAEA,MADAuJ,GAAAquH,WACAv+E,EAAAr5C,IACA,IAAA,cAAAA,GACAq5C,EAAA//C,MAAA,KAAA+/C,EAAA//C,KAKA,MADAiQ,GAAAquH,UAAA,EACA,QACA,IAAA,cAAA53H,GACAq5C,EAAA//C,MAAA,KAAA+/C,EAAA//C,KAKA,MADAiQ,GAAAquH,UAAA,EACA,WAwDAv+E,EAAA9vC,IACAqwH,EACA,gBAAAvgF,EAAAr5C,MACAuJ,EAAAswH,cAAA,EACAtwH,EAAAquH,SAAA,EACAruH,EAAAouH,UACAl6H,IAnMA,WACA8L,EAAAuwH,YACAtkH,QAAAqe,IAAA,cAAA1f,EAAA,KAAAnU,EAAA,IAAAq5C,EAAAr5C,MACAuJ,EAAAuwH,WAAAI,QAAA3wH,EAAAquH,SACAuC,OAAA5wH,EAAAouH,QACAqC,aAAA,EACAC,mBAGAvF,EAAAhlE,OAAA4pE,gBA6LA77H,EAAA,eAfAi3H,EAAAhlE,OAAA4pE,aACA77H,GAkBA,MAAAA,GA1jBA,GAAAy7H,GAAA,GAwEAxoE,GAAAqnD,aAAA,yBAAA,EAAA,SAAAl6C,EAAA56C,EAAAjC,GACA,QAAAs5G,KAAAd,EAAA37D,GAEAA,EAAAt0D,MAAA8vH,sBACA,MAAAp2G,GACAu2G,EAAA37D,GACAA,EAAAv9D,IAAA,SAAA84H,GACAtgI,OAAA8C,oBAAA,SAAA0+H,SACAz8D,GAAAt0D,MAAA8vH,sBACAx7D,EAAAu6C,UAAA,QAAA1iG,KAAA,YAEAuN,EAAAvR,SAAAsP,EAAAtP,UACAmsD,EAAAt0D,MAAA8vH,sBAAA3nH,QAAAuR,EAAAvR,QACAuR,EAAAvR,SACAmsD,EAAAthD,GAAA,SAAA68G,GACAtgI,OAAAgW,iBAAA,SAAAwrH,GACAz8D,EAAAwmC,YAAA,GACAxmC,EAAA07D,yBAAA,KAGAC,EAAA37D,GACAA,EAAAv9D,IAAA,SAAA84H,GACAtgI,OAAA8C,oBAAA,SAAA0+H,GACAz8D,EAAAu6C,UAAA,QAAA1iG,KAAA,aAIAuN,IACA46C,EAAAt0D,MAAA8vH,sBAAA,GAAAL,GAAA/1G,GACA46C,EAAAt0D,MAAA8vH,sBAAA3nH,UACAmsD,EAAAthD,GAAA,SAAA68G,GACAtgI,OAAAgW,iBAAA,SAAAwrH,GACAz8D,EAAAwmC,YAAA,GACAxmC,EAAA07D,yBAAA,OAOA7oE,EAAA3sD,UAAAu1H,WAAA,SAAA9oG,GACA,GAAAqtC,GAAA9kE,KACAwQ,EAAAs0D,EAAAt0D,MAAA8vH,qBAEA,OAAA9vH,QAGA2jB,KAAAsD,IACAA,EAAAjnB,EAAAsY,OAEAtY,EAAAgnC,KACAzuB,aAAAvY,EAAAgnC,KAEAhnC,EAAAgnC,IAAAlsC,WAAA,WAAAw5D,EAAA07D,2BACA/oG,KAIAkgC,EAAA3sD,UAAAw1H,wBAAA,SAAA7zH,GAWA,QAAA60H,KACA,GAAAvzH,GAAA62D,EAAAsI,UAAA,OAWA,OATA,gBAAA,GACAn/D,GAAA0O,KAAA,SACAoiH,OAAA2B,EACA/pE,OAAAmO,GAEA72D,EAAA8wH,SACA9wH,EAAA8wH,OAAA2B,EACAzyH,EAAA0oD,OAAAmO,GAEA72D,EAtBA,GAAA62D,GAAA9kE,KACAwQ,EAAAs0D,EAAAt0D,MAAA8vH,sBACA5xF,IAIA,IAFAl+B,EAAAgnC,IAAA,KAEA,MAAAhnC,GAAA,MAAAA,EAAA6b,KAAA7b,EAAAmI,WACAmsD,EAAA0nC,QAAAh8F,EAAA4vH,uBAAAzzH,GADA,CAmBA,GAAA6D,EAAAsyG,KACAp0E,EAAAo0E,KAAAtyG,EAAAsyG,SACA3uF,IAAA3jB,EAAAyrB,SACAyS,EAAAnuC,KAAAukE,EAAAu/B,WACA31D,EAAAnuC,KAAAW,OA/JA,MAgKAsP,EAAAyrB,cAEAyS,EAAAzS,QAAAzrB,EAAAyrB,QACAzrB,EAAAyrB,gBAEA,CAEA,GADAyS,EAAAnuC,KAAAukE,EAAAu/B,WACA,IAAA31D,EAAAnuC,KAAA0R,OACA,MACAzB,GAAAsyG,KAAA3rF,IACAuX,EAAAo0E,KAAAtyG,EAAAsyG,KAEAp0E,EAAApH,KAAA92B,EAAA82B,KACA,kBAAA92B,GAAA,WACAk+B,EAAAwxF,SAAA1vH,EAAA0vH,YAEA1vH,EAAA4vH,qBAAAt7D,EAAAwnC,mBACAjqG,EAAAirB,MAAAjB,IAAA7b,EAAA6b,IAAA2wB,OACA1sC,SAAA,OACAoc,YAAA,mBACAzlB,KAAA,OACAyJ,KAAA/M,KAAAyvB,UAAAsb,GACApgB,QAAA,SAAA5d,EAAA8c,GACA,GAAAvf,GAAAuzH,GACAvzH,GAAA6wH,SAAApuH,EAAAssC,OACA8nB,EAAAu6C,UAAA,OAAApxG,IAEAwC,MAAA,SAAAk2B,GACA,KAAAA,EAAAnZ,cACAhd,GAAAsyG,UAUAnrD,EAAA+gC,SAAA+oC,iBAAA,SAAA38D,GACAA,EAAA07D,yBAAA,GAcA,IAAAa,IAAAK,IAAA,MACAzD,KAAA,OACA0D,MAAA,QACAC,SAAA,SACAlT,OAAA,OACA2O,QAAA,UACAhzF,IAAA,MACAw3F,OAAA,SACAnqE,OAAA,SACA92B,KAAA,SACAkhG,aAAA,SACAC,aAAA,SACAC,UAAA,YACAC,WAAA,aACAC,QAAA,UACAC,OAAA,SACAC,SAAA,WACAC,UAAA,YACAC,WAAA,aACAC,gBAAA,kBACAC,iBAAA,mBACAC,KAAA,OACAC,SAAA,YAEApB,GAAAI,IAAA,MACAiB,UAAA,MACAC,MAAA,MACA3E,KAAA,OACA0D,MAAA,QACAjqE,OAAA,SACAq9D,MAAA,SACAtzE,MAAA,SACA47E,QAAA,UACAhzF,IAAA,MACAmxF,QAAA,OACA9S,KAAA,OACAma,QAAA,OACAC,IAAA,SACAC,MAAA,SACA1gH,IAAA,OACA2gH,IAAA,OACAC,UAAA,OAEAC,SAAA,WACAC,eAAA,SACAC,WAAA,OACAC,UAAA,OACA1jI,OAAA,OAEAosD,WAAA,OAEAu3E,cAAA,OACAC,YAAA,OACAC,YAAA,OACAC,aAAA,OACAC,eAAA,OACAC,kBAAA,OACAC,UAAA,OACAC,UAAA,OACAC,gBAAA,OACAC,cAAA,OACAC,cAAA,OACAC,SAAA,OACAC,aAAA,OACAC,aAAA,OACA1jI,KAAA,OAEA2jI,cAAA,OACAC,cAAA,OACAC,cAAA,OACAC,YAAA,OACAC,eAAA,OACAC,kBAAA,OACAC,aAAA,OACAC,eAAA,OACAC,cAAA,OACAC,YAAA,OACAC,eAAA,OACAC,UAAA,OACAC,aAAA,OACAC,WAAA,OACAC,gBAAA,OACAC,kBAAA,OAEAC,YAAA,UACAC,mBAAA,OACAC,eAAA,OACAC,gBAAA,OACAC,iBAAA,OAEAC,YAAA,OACAC,eAAA,OACAC,UAAA,OACAC,aAAA,OACAC,cAAA,OAEAC,gBAAA,OACAtsH,KAAA,OACAusH,OAAA,OAEA/D,UAAA,YACAC,WAAA,aACAC,QAAA,UACAC,OAAA,SACAC,SAAA,WACA4D,QAAA,OACA3D,UAAA,YACAC,WAAA,aACAC,gBAAA,kBACAC,iBAAA,mBACAC,KAAA,OACAC,SAAA,WAEAuD,gBAAA,SAEAl9H,KAAA,UACAm9H,OAAA,OACAC,eAAA,UACAC,mBAAA,OACAC,qBAAA,OACAC,wBAAA,OAkPA3uE,GAAA3sD,UAAAu7H,iBAAA,SAAAjmF,GACA,GAAA,MAAAA,EAAA9vC,MAAAouH,SAAA,MAAAt+E,EAAA9vC,MAAAquH,SACA,CAAA,GACA2H,GADAh2H,EAAAxQ,KAAAotE,UAAA,OAGA,IAAA58D,EAAAsuH,WAAA0H,EAAAh2H,EAAAsuH,SAAAx+E,EAAA9vC,MAAAouH,UACA,MAAA4H,GAAAlmF,EAAA9vC,MAAAquH,SAAA,KAaAlnE,EAAA3sD,UAAAy7H,UAAA,SAAAnmF,EAAA7yC,GACA,GAAA+C,GAAAxQ,KAAAwQ,MAAA8vH,qBAYA,OAVA7yH,KACAA,EAAApL,EAAAA,EAAAy1B,GAAAoD,MAAAtR,MAAA,cAAA,SAEAvnB,EAAAirB,MAAAjB,IAAA7b,EAAA6b,IAAA6tB,KACAxpC,KAAA4vC,EACAhyB,QAAA,SAAA5d,GACAjD,EAAA1E,KAAA2H,MAIAjD,EAAA,IAQAkqD,EAAA3sD,UAAA07H,mBAAA,SAAApmF,GAGA,QAAAqmF,GAAApvG,EAAAvC,GACA,GAAAA,GAAA,GAAAA,EAAAnkB,QAAA,YAEA,MADA0mB,GAAA/d,KAAAwb,EAAAG,UAAA,IACA,EALA,GAAAlV,KASA,QAAAqgC,EAAAr5C,MACA,IAAA,aACA,GAAAswB,IACAyD,MAAA,cAAAslB,EAAA//C,KAAA,IAAA+/C,EAAAjrB,MACAuhC,KAAAtW,EAAAsW,KACAxO,MAAA,GAAAzzC,QAAA,MAAAA,OAAAsC,OAAAqpC,EAAA//C,MAAA,KACAi3D,gBAAA,EAEAmvE,GAAApvG,EAAA+oB,EAAA9mC,MACAyG,EAAArZ,KAAA2wB,EACA,MACA,KAAA,OACA,GAAAA,KAEAovG,GAAApvG,EAAA+oB,EAAA3oB,QACAJ,EAAAyD,MAAA,iBAAAzD,EAAA/d,KACAyG,EAAArZ,KAAA2wB,IAKA,MAAAtX,MCxpBA,SAAA+1E,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,mBAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,YAEA,IAAAivE,IACAC,iBAAAnmG,MAAA,EAAAg5B,MAAA,EAAA/4B,IAAA,EAAA3iB,KAAA,EAAA8oH,SAAA,EACAC,OAAA,EAAAC,OAAA,EAAAlmG,IAAA,EAAAO,KAAA,EAAAroB,OAAA,EACAiuH,QAAA,EAAAv3F,MAAA,EAAAg5E,MAAA,EAAAt9F,OAAA,EAAA1N,QAAA,EACAwpH,OAAA,EAAAC,KAAA,EAAAC,UAAA,GACAC,kBAAAC,IAAA,EAAAhmG,IAAA,EAAAnjB,UAAA,EAAAL,QAAA,EAAA/X,GAAA,EACAwhI,IAAA,EAAAp8H,IAAA,EAAAiT,OAAA,EAAAF,IAAA,EAAAG,OAAA,EACAG,IAAA,EAAAP,IAAA,GACAupH,iBACAF,IAAAA,IAAA,EAAAn+G,IAAA,GACAA,IAAAm+G,IAAA,EAAAn+G,IAAA,GACAmY,IAAAA,IAAA,GACAxjB,QAAAA,QAAA,EAAAK,UAAA,GACAA,UAAAA,UAAA,GACApY,GAAA0hI,SAAA,EAAAC,SAAA,EAAAC,OAAA,EAAAC,YAAA,EAAAp0H,KAAA,EACAinB,KAAA,EAAAotG,IAAA,EAAAC,UAAA,EAAA36E,QAAA,EAAAnnB,MAAA,EACAjF,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EACAroB,QAAA,EAAAgvH,QAAA,EAAAjnG,IAAA,EAAAoR,MAAA,EAAA81F,KAAA,EAAAzmG,IAAA,EACAx7B,GAAA,EAAAy7B,KAAA,EAAAiS,SAAA,EAAA/Y,OAAA,EAAAmH,IAAA,GACA0lG,IAAAA,IAAA,EAAAp8H,IAAA,GACAA,IAAAo8H,IAAA,EAAAp8H,IAAA,GACAiT,OAAAA,OAAA,EAAAC,OAAA,GACAH,IAAAA,IAAA,EAAAM,IAAA,GACAH,OAAAD,OAAA,GACAI,IAAAN,IAAA,EAAAM,IAAA,GACAT,OAAAK,OAAA,EAAAC,OAAA,GACAJ,IAAAA,IAAA,IAEAgqH,aAAAzmG,KAAA,GACA0mG,eAAA,EACAC,cAAA,EACAC,UAAA,GAGAC,GACAxB,mBACAQ,oBACAG,mBACAS,eACAC,eAAA,EACAC,cAAA,EACAG,qBAAA,EACAF,UAAA,EAGAzwE,GAAA8P,WAAA,MAAA,SAAA8gE,EAAAC,GAUA,QAAAC,GAAAz9D,EAAAx6D,GACA,QAAAorH,GAAA8M,GAEA,MADAl4H,GAAAsJ,SAAA4uH,EACAA,EAAA19D,EAAAx6D,GAGA,GAAAirB,GAAAuvC,EAAAv3D,MACA,IAAA,KAAAgoB,EACA,MAAAuvC,GAAA+8B,IAAA,KACA/8B,EAAA+8B,IAAA,KACA/8B,EAAA/oE,MAAA,UAAA25H,EAAA+M,EAAA,OAAA,QACA,KACA39D,EAAA/oE,MAAA,MACA25H,EAAA+M,EAAA,UAAA,WACA39D,EAAA/oE,MAAA,WAAA,GAAA,IACA+oE,EAAAg9B,SAAA,aACA4zB,EAAAgN,EAAA,KAEA,KAEA59D,EAAA+8B,IAAA,MACA/8B,EAAAg9B,SAAA,aACAx3F,EAAAsJ,SAAA6uH,EAAA,OAAA,MACA,SAEA1hI,EAAA+jE,EAAA+8B,IAAA,KAAA,WAAA,UACAv3F,EAAAsJ,SAAA+uH,EACA,cAEA,IAAA,KAAAptG,EAAA,CACA,GAAAm2D,EAUA,OAPAA,GAFA5mB,EAAA+8B,IAAA,KACA/8B,EAAA+8B,IAAA,KACA/8B,EAAAg9B,SAAA,eAAAh9B,EAAA+8B,IAAA,KAEA/8B,EAAAg9B,SAAA,SAAAh9B,EAAA+8B,IAAA,KAGA/8B,EAAAg9B,SAAA,cAAAh9B,EAAA+8B,IAAA,KAEAnW,EAAA,OAAA,QAGA,MADA5mB,GAAAg9B,SAAA,SACA,KAKA,QAAA6gC,GAAA79D,EAAAx6D,GACA,GAAAirB,GAAAuvC,EAAAv3D,MACA,IAAA,KAAAgoB,GAAA,KAAAA,GAAAuvC,EAAA+8B,IAAA,KAGA,MAFAv3F,GAAAsJ,SAAA2uH,EACAxhI,EAAA,KAAAw0B,EAAA,SAAA,eACA,aACA,IAAA,KAAAA,EAEA,MADAx0B,GAAA,SACA,IACA,IAAA,KAAAw0B,EAAA,CACAjrB,EAAAsJ,SAAA2uH,EACAj4H,EAAAA,MAAAs4H,EACAt4H,EAAA4pB,QAAA5pB,EAAAu4H,SAAA,IACA,IAAAt1H,GAAAjD,EAAAsJ,SAAAkxD,EAAAx6D,EACA,OAAAiD,GAAAA,EAAA,aAAA,YACA,MAAA,SAAA/P,KAAA+3B,IACAjrB,EAAAsJ,SAAAkvH,EAAAvtG,GACAjrB,EAAAy4H,eAAAj+D,EAAAq9B,SACA73F,EAAAsJ,SAAAkxD,EAAAx6D,KAEAw6D,EAAA/oE,MAAA,4CACA,QAIA,QAAA+mI,GAAA1K,GACA,GAAA4K,GAAA,SAAAl+D,EAAAx6D,GACA,MAAAw6D,EAAAG,OACA,GAAAH,EAAAv3D,QAAA6qH,EAAA,CACA9tH,EAAAsJ,SAAA+uH,CACA,OAGA,MAAA,SAGA,OADAK,GAAAC,eAAA,EACAD,EAGA,QAAAP,GAAAjkI,EAAA0kI,GACA,MAAA,UAAAp+D,EAAAx6D,GACA,MAAAw6D,EAAAG,OAAA,CACA,GAAAH,EAAA/oE,MAAAmnI,GAAA,CACA54H,EAAAsJ,SAAA2uH,CACA,OAEAz9D,EAAAv3D,OAEA,MAAA/O,IAIA,QAAAkkI,GAAA5Y,GACA,MAAA,UAAAhlD,EAAAx6D,GAEA,IADA,GAAAirB,GACA,OAAAA,EAAAuvC,EAAAv3D,SAAA,CACA,GAAA,KAAAgoB,EAEA,MADAjrB,GAAAsJ,SAAA8uH,EAAA5Y,EAAA,GACAx/G,EAAAsJ,SAAAkxD,EAAAx6D,EACA,IAAA,KAAAirB,EAAA,CACA,GAAA,GAAAu0F,EAAA,CACAx/G,EAAAsJ,SAAA2uH,CACA,OAGA,MADAj4H,GAAAsJ,SAAA8uH,EAAA5Y,EAAA,GACAx/G,EAAAsJ,SAAAkxD,EAAAx6D,IAIA,MAAA,QAIA,QAAAi6D,GAAAj6D,EAAA4pB,EAAAivG,GACArpI,KAAAwa,KAAAhK,EAAA0c,QACAltB,KAAAo6B,QAAAA,EACAp6B,KAAA6/F,OAAArvF,EAAA87D,SACAtsE,KAAAqpI,YAAAA,GACAv2G,EAAAm1G,YAAAl3H,eAAAqpB,IAAA5pB,EAAA0c,SAAA1c,EAAA0c,QAAAo8G,YACAtpI,KAAAspI,UAAA,GAEA,QAAAC,GAAA/4H,GACAA,EAAA0c,UAAA1c,EAAA0c,QAAA1c,EAAA0c,QAAA1S,MAEA,QAAAgvH,GAAAh5H,EAAAi5H,GAEA,IADA,GAAAC,KACA,CACA,IAAAl5H,EAAA0c,QACA,MAGA,IADAw8G,EAAAl5H,EAAA0c,QAAAkN,SACAtH,EAAA00G,gBAAAz2H,eAAA24H,KACA52G,EAAA00G,gBAAAkC,GAAA34H,eAAA04H,GACA,MAEAF,GAAA/4H,IAIA,QAAAs4H,GAAA7hI,EAAA+jE,EAAAx6D,GACA,MAAA,WAAAvJ,GACAuJ,EAAAu4H,SAAA/9D,EAAAq9B,SACAshC,GACA,YAAA1iI,EACA2iI,EAEAd,EAGA,QAAAa,GAAA1iI,EAAA+jE,EAAAx6D,GACA,MAAA,QAAAvJ,GACAuJ,EAAA4pB,QAAA4wC,EAAA7S,UACA0xE,EAAA,MACAC,GACAh3G,EAAAw1G,qBAAA,UAAArhI,GACA4iI,EAAA,cACAC,EAAA7iI,EAAA+jE,EAAAx6D,KAEAq5H,EAAA,QACAF,GAGA,QAAAC,GAAA3iI,EAAA+jE,EAAAx6D,GACA,GAAA,QAAAvJ,EAAA,CACA,GAAAmzB,GAAA4wC,EAAA7S,SAIA,OAHA3nD,GAAA0c,SAAA1c,EAAA0c,QAAAkN,SAAAA,GACAtH,EAAAu0G,iBAAAt2H,eAAAP,EAAA0c,QAAAkN,UACAmvG,EAAA/4H,GACAA,EAAA0c,SAAA1c,EAAA0c,QAAAkN,SAAAA,IAAA,IAAAtH,EAAAi3G,cACAF,EAAA,MACAG,IAEAH,EAAA,YACAI,GAEA,MAAAn3G,GAAAw1G,qBAAA,UAAArhI,GACA4iI,EAAA,cACAG,EAAA/iI,EAAA+jE,EAAAx6D,KAEAq5H,EAAA,QACAI,GAIA,QAAAD,GAAA/iI,EAAAijI,EAAA15H,GACA,MAAA,UAAAvJ,GACA4iI,EAAA,QACAG,IAEAT,EAAA/4H,GACAs4H,GAEA,QAAAmB,GAAAhjI,EAAA+jE,EAAAx6D,GAEA,MADAq5H,GAAA,QACAG,EAAA/iI,EAAA+jE,EAAAx6D,GAGA,QAAAs5H,GAAA7iI,EAAAijI,EAAA15H,GACA,GAAA,QAAAvJ,EAEA,MADA4iI,GAAA,YACAM,CACA,IAAA,UAAAljI,GAAA,gBAAAA,EAAA,CACA,GAAAmzB,GAAA5pB,EAAA4pB,QAAA2uG,EAAAv4H,EAAAu4H,QASA,OARAv4H,GAAA4pB,QAAA5pB,EAAAu4H,SAAA,KACA,gBAAA9hI,GACA6rB,EAAA+zG,gBAAA91H,eAAAqpB,GACAovG,EAAAh5H,EAAA4pB,IAEAovG,EAAAh5H,EAAA4pB,GACA5pB,EAAA0c,QAAA,GAAAu9C,GAAAj6D,EAAA4pB,EAAA2uG,GAAAv4H,EAAA87D,WAEAw8D,EAGA,MADAe,GAAA,QACAC,EAEA,QAAAK,GAAAljI,EAAA+jE,EAAAx6D,GACA,MAAA,UAAAvJ,EAAAmjI,GACAt3G,EAAAq1G,eAAA0B,EAAA,SACAC,EAAA7iI,EAAA+jE,EAAAx6D,IAEA,QAAA45H,GAAAnjI,EAAA+jE,EAAAx6D,GACA,MAAA,UAAAvJ,EAAAojI,EACA,QAAApjI,GAAA6rB,EAAAo1G,eAAA2B,EAAA,SAAAC,IACAD,EAAA,QACAC,EAAA7iI,EAAA+jE,EAAAx6D,IAEA,QAAA65H,GAAApjI,EAAA+jE,EAAAx6D,GACA,MAAA,UAAAvJ,EAAAojI,EACAP,EAAA7iI,EAAA+jE,EAAAx6D,GAtPA,GAAAyvF,GAAAsoC,EAAAtoC,WACAntE,KACAa,EAAA60G,EAAA8B,SAAA1D,EAAAyB,CACA,KAAA,GAAAthH,KAAA4M,GAAAb,EAAA/L,GAAA4M,EAAA5M,EACA,KAAA,GAAAA,KAAAyhH,GAAA11G,EAAA/L,GAAAyhH,EAAAzhH,EAGA,IAAA9f,GAAA4iI,CAkPA,OAlMApB,GAAA8B,UAAA,GAmMAzhE,WAAA,SAAA0hE,GACA,GAAAh6H,IAAAsJ,SAAA2uH,EACAj4H,MAAAs4H,EACAx8D,SAAAk+D,GAAA,EACApwG,QAAA,KAAA2uG,SAAA,KACA77G,QAAA,KAEA,OADA,OAAAs9G,IAAAh6H,EAAAg6H,WAAAA,GACAh6H,GAGA8vC,MAAA,SAAA0qB,EAAAx6D,GAIA,IAHAA,EAAA4pB,SAAA4wC,EAAA68B,QACAr3F,EAAA87D,SAAAtB,EAAA+0B,eAEA/0B,EAAAi9B,WAAA,MAAA,KACAhhG,GAAA,IACA,IAAAvC,GAAA8L,EAAAsJ,SAAAkxD,EAAAx6D,EAOA,QANA9L,GAAAuC,IAAA,WAAAvC,IACAmlI,EAAA,KACAr5H,EAAAA,MAAAA,EAAAA,MAAAvJ,GAAAvC,EAAAsmE,EAAAx6D,GACAq5H,IACAnlI,EAAA,SAAAmlI,EAAAnlI,EAAA,SAAAmlI,IAEAnlI,GAGAm7F,OAAA,SAAArvF,EAAAwuH,EAAAyL,GACA,GAAAv9G,GAAA1c,EAAA0c,OAEA,IAAA1c,EAAAsJ,SAAAqvH,cACA,MAAA34H,GAAAu4H,UAAAv4H,EAAA87D,SACA97D,EAAAy4H,eAAA,EAEAz4H,EAAA87D,SAAA2zB,CAEA,IAAA/yE,GAAAA,EAAAo8G,SAAA,MAAA3xE,GAAAkhC,IACA,IAAAroF,EAAAsJ,UAAA+uH,GAAAr4H,EAAAsJ,UAAA2uH,EACA,MAAAgC,GAAAA,EAAAxoI,MAAA,UAAA,GAAAf,OAAA,CAEA,IAAAsP,EAAA4pB,QACA,OAAA,IAAAtH,EAAA43G,0BACAl6H,EAAAu4H,SAAAv4H,EAAA4pB,QAAAl5B,OAAA,EAEAsP,EAAAu4H,SAAA9oC,GAAAntE,EAAA63G,0BAAA,EAEA,IAAA73G,EAAA83G,YAAA,cAAAlnI,KAAAs7H,GAAA,MAAA,EACA,IAAA6L,GAAA7L,GAAA,sBAAAv6H,KAAAu6H,EACA,IAAA6L,GAAAA,EAAA,GACA,KAAA39G,GAAA,CACA,GAAAA,EAAAkN,SAAAywG,EAAA,GAAA,CACA39G,EAAAA,EAAA1S,IACA,OACA,IAAAsY,EAAAu0G,iBAAAt2H,eAAAmc,EAAAkN,SAGA,KAFAlN,GAAAA,EAAA1S,SAKA,IAAAqwH,EACA,KAAA39G,GAAA,CACA,GAAA49G,GAAAh4G,EAAA00G,gBAAAt6G,EAAAkN,QACA,KAAA0wG,IAAAA,EAAA/5H,eAAA85H,EAAA,IAGA,KAFA39G,GAAAA,EAAA1S,KAKA,KAAA0S,GAAAA,EAAA1S,OAAA0S,EAAAm8G,aACAn8G,EAAAA,EAAA1S,IACA,OAAA0S,GAAAA,EAAA2yE,OAAAI,EACAzvF,EAAAg6H,YAAA,GAGA9oC,cAAA,gBACAu9B,kBAAA,UACAC,gBAAA,SAEA6L,cAAAj4G,EAAAw3G,SAAA,OAAA,MACAhiE,WAAAx1C,EAAAw3G,SAAA,OAAA,MAEAU,cAAA,SAAAx6H,GACAA,EAAAA,OAAA45H,IACA55H,EAAAA,MAAAs5H,OAKAnyE,EAAAiQ,WAAA,WAAA,OACAjQ,EAAAiQ,WAAA,kBAAA,OACAjQ,EAAAoQ,UAAAh3D,eAAA,cACA4mD,EAAAiQ,WAAA,aAAAjrD,KAAA,MAAA2tH,UAAA,MC5YA,SAAAt0C,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,sBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,gBAAA,qBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,YAEAA,GAAAszE,WACAtuH,KAAA,MAAAkrD,KAAA,WAAAvR,KAAA,MAAAT,KAAA,SAAA,SACAl5C,KAAA,MAAAuuH,OAAA,kBAAA,4BAAA,uBAAA,6BAAA50E,KAAA,aAAAT,KAAA,MAAA,MAAA,SACAl5C,KAAA,QAAAkrD,KAAA,kBAAAvR,KAAA,QAAAT,KAAA,MAAA,UACAl5C,KAAA,WAAAkrD,KAAA,kBAAAvR,KAAA,WAAA98C,KAAA,wBACAmD,KAAA,YAAAkrD,KAAA,mBAAAvR,KAAA,YAAAT,KAAA,IAAA,QACAl5C,KAAA,IAAAkrD,KAAA,cAAAvR,KAAA,QAAAT,KAAA,IAAA,IAAA,SACAl5C,KAAA,MAAAkrD,KAAA,gBAAAvR,KAAA,QAAAT,KAAA,MAAA,MAAA,KAAA,MAAA,MAAA,MAAA,KAAA,OAAAF,OAAA,SACAh5C,KAAA,QAAAkrD,KAAA,eAAAvR,KAAA,QAAAT,KAAA,MAAA,SACAl5C,KAAA,KAAAkrD,KAAA,gBAAAvR,KAAA,QAAAT,KAAA,MAAAF,OAAA,YACAh5C,KAAA,UAAAkrD,KAAA,iBAAAvR,KAAA,UAAAT,KAAA,MAAA,OAAA,UACAl5C,KAAA,gBAAAkrD,KAAA,uBAAAvR,KAAA,UAAAT,KAAA,UACAl5C,KAAA,4BAAAkrD,KAAA,aAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,QAAAkrD,KAAA,eAAAvR,KAAA,QAAAT,KAAA,QAAA,YAAAr8C,KAAA,qBACAmD,KAAA,eAAAuuH,OAAA,+BAAA,oBAAA,uBAAA50E,KAAA,eAAAT,KAAA,UAAAF,OAAA,SAAA,mBACAh5C,KAAA,cAAAkrD,KAAA,qBAAAvR,KAAA,aAAAT,KAAA,KAAA,OAAA,MAAAF,OAAA,UACAh5C,KAAA,SAAAkrD,KAAA,6BAAAvR,KAAA,SAAAT,KAAA,MAAA,YACAl5C,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,SAAAT,KAAA,MAAA,MAAA,SACAl5C,KAAA,UAAAkrD,KAAA,iBAAAvR,KAAA,UAAAT,KAAA,QACAl5C,KAAA,MAAAkrD,KAAA,WAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,MAAAkrD,KAAA,mBAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,IAAAkrD,KAAA,WAAAvR,KAAA,IAAAT,KAAA,OACAl5C,KAAA,OAAAuuH,OAAA,mBAAA,eAAA50E,KAAA,OAAAT,KAAA,UACAl5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,OAAAT,KAAA,OAAA,WACAl5C,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,WACA35C,KAAA,aAAAkrD,KAAA,oBAAAvR,KAAA,aAAA98C,KAAA,iBACAmD,KAAA,MAAAkrD,KAAA,sBAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,QAAAkrD,KAAA,eAAAvR,KAAA,QAAAT,KAAA,QAAA,MAAA,UACAl5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,SACA35C,KAAA,MAAAkrD,KAAA,aAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,MAAAkrD,KAAA,kBAAAvR,KAAA,UAAAT,KAAA,SACAl5C,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,SAAAT,KAAA,OACAl5C,KAAA,MAAAkrD,KAAA,aAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,sBAAAkrD,KAAA,oBAAAvR,KAAA,eAAAT,KAAA,SACAl5C,KAAA,gBAAAkrD,KAAA,oBAAAvR,KAAA,eAAAT,KAAA,SACAl5C,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,SAAAT,KAAA,SACAl5C,KAAA,QAAAkrD,KAAA,eAAAvR,KAAA,QACA35C,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,SAAAT,KAAA,YACAl5C,KAAA,MAAAkrD,KAAA,aAAAvR,KAAA,QACA35C,KAAA,QAAAkrD,KAAA,eAAAvR,KAAA,QAAAT,KAAA,QAAA,MAAA,SACAl5C,KAAA,UAAAkrD,KAAA,iBAAAvR,KAAA,UAAAT,KAAA,IAAA,MAAA,MAAA,MAAA,SACAl5C,KAAA,KAAAkrD,KAAA,gBAAAvR,KAAA,SAAAT,KAAA,MAAAF,OAAA,YACAh5C,KAAA,MAAAkrD,KAAA,aAAAvR,KAAA,MAAAT,KAAA,OACAl5C,KAAA,UAAAkrD,KAAA,iBAAAvR,KAAA,UAAAT,KAAA,aACAl5C,KAAA,2BAAAkrD,KAAA,aAAAvR,KAAA,MAAA98C,KAAA,wCACAmD,KAAA,KAAAkrD,KAAA,YAAAvR,KAAA,KAAAT,KAAA,QACAl5C,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,SAAAT,KAAA,SAAA,UAAAr8C,KAAA,kBACAmD,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,OAAAT,KAAA,UACAl5C,KAAA,UAAAkrD,KAAA,iBAAAvR,KAAA,UAAAT,KAAA,QACAl5C,KAAA,qBAAAkrD,KAAA,0BAAAvR,KAAA,mBAAAT,KAAA,SACAl5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,OAAAT,KAAA,QACAl5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,OAAAT,KAAA,UACAl5C,KAAA,UAAAkrD,KAAA,qBAAAvR,KAAA,eAAAT,KAAA,QAAAF,OAAA,MAAA,UACAh5C,KAAA,OAAAkrD,KAAA,YAAAvR,KAAA,YAAAT,KAAA,OAAA,MAAA,aAAA,OAAAF,OAAA,WACAh5C,KAAA,OAAAkrD,KAAA,eAAAvR,KAAA,SACA35C,KAAA,MAAAkrD,KAAA,aAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,MAAAkrD,KAAA,aAAAvR,KAAA,MAAAT,KAAA,OAAA,OAAAF,OAAA,UACAh5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,QAAAT,KAAA,UACAl5C,KAAA,oBAAAkrD,KAAA,oBAAAvR,KAAA,eAAAT,KAAA,OAAAF,OAAA,SACAh5C,KAAA,aAAAuuH,OAAA,kBAAA,kBAAA,yBAAA,2BAAA,0BACA50E,KAAA,aAAAT,KAAA,MAAAF,OAAA,aAAA,KAAA,UACAh5C,KAAA,OAAAuuH,OAAA,mBAAA,sBAAA50E,KAAA,aAAAT,KAAA,OAAA,OAAAF,OAAA,WACAh5C,KAAA,UAAAkrD,KAAA,sBAAAvR,KAAA,aAAAT,KAAA,UAAAF,OAAA,YACAh5C,KAAA,MAAAkrD,KAAA,WAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,SAAAkrD,KAAA,cAAAvR,KAAA,SAAAT,KAAA,KAAA,QAAA,YACAl5C,KAAA,QAAAkrD,KAAA,eAAAvR,KAAA,QAAAT,KAAA,QACAl5C,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,QAAAT,KAAA,QACAl5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,MAAAT,KAAA,UACAl5C,KAAA,aAAAkrD,KAAA,oBAAAvR,KAAA,aAAAT,KAAA,MAAAF,OAAA,QACAh5C,KAAA,MAAAkrD,KAAA,aAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,WAAAkrD,KAAA,kBAAAvR,KAAA,WAAAT,KAAA,WAAA,KAAA,SACAl5C,KAAA,OAAAkrD,KAAA,YAAAvR,KAAA,SACA35C,KAAA,cAAAkrD,KAAA,iBAAAvR,KAAA,QACA35C,KAAA,cAAAkrD,KAAA,qBAAAvR,KAAA,cAAAT,KAAA,IAAA,QACAl5C,KAAA,WAAAkrD,KAAA,kBAAAvR,KAAA,WAAAT,KAAA,QACAl5C,KAAA,QAAAkrD,KAAA,eAAAvR,KAAA,QAAAT,KAAA,SACAl5C,KAAA,SAAAkrD,KAAA,eAAAvR,KAAA,QACA35C,KAAA,OAAAkrD,KAAA,mBAAAvR,KAAA,OAAAT,KAAA,UACAl5C,KAAA,QAAAkrD,KAAA,eAAAvR,KAAA,QACA35C,KAAA,QAAAkrD,KAAA,oBAAAvR,KAAA,QAAA98C,KAAA,oBACAmD,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,OAAAT,KAAA,MAAA,SACAl5C,KAAA,WAAAuuH,OAAA,wBAAA,sBAAA,kBACA50E,KAAA,WAAAT,KAAA,KAAA,QACAl5C,KAAA,cAAAkrD,KAAA,oBAAAvR,KAAA,QAAAT,KAAA,IAAA,MAAAF,OAAA,cAAA,UACAh5C,KAAA,QAAAkrD,KAAA,eAAAvR,KAAA,SAAAT,KAAA,KAAA,MAAA,MAAA,SACAl5C,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,SAAAT,KAAA,OACAl5C,KAAA,KAAAkrD,KAAA,YAAAvR,KAAA,KAAAT,KAAA,QACAl5C,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,SAAAT,KAAA,IAAA,SACAl5C,KAAA,SAAAkrD,KAAA,OAAAvR,KAAA,QAAAT,KAAA,YACAl5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,OAAAT,KAAA,KAAA,QACAl5C,KAAA,MAAAuuH,OAAA,aAAA,0BAAA,gCAAA50E,KAAA,MAAAT,KAAA,MAAA,OAAA,OAAA,OAAA,OAAA,WACAl5C,KAAA,MAAAkrD,KAAA,aAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,aAAAkrD,KAAA,aAAAvR,KAAA,OAAAT,KAAA,MAAA,OAAA,OAAA,MAAA,OAAA,SACAl5C,KAAA,QAAAkrD,KAAA,eAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,aAAAkrD,KAAA,2BAAAvR,KAAA,aAAAT,KAAA,MAAA,OAAA,UACAl5C,KAAA,mBAAAkrD,KAAA,oBAAAvR,KAAA,aAAAT,KAAA,aAAA,MAAA,MAAAF,OAAA,MAAA,gBACAh5C,KAAA,WAAAkrD,KAAA,kBAAAvR,KAAA,WAAAT,KAAA,WACAl5C,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,SAAAT,KAAA,QAAA,MAAA,KAAA,OAAAr8C,KAAA,mBACAmD,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,SAAAT,KAAA,QACAl5C,KAAA,IAAAkrD,KAAA,WAAAvR,KAAA,IAAAT,KAAA,OACAl5C,KAAA,IAAAkrD,KAAA,cAAAvR,KAAA,IAAAT,KAAA,IAAA,KAAAF,OAAA,aACAh5C,KAAA,mBAAAkrD,KAAA,aAAAvR,KAAA,MAAAT,KAAA,OAAAF,OAAA,SACAh5C,KAAA,cAAAkrD,KAAA,qBAAAvR,KAAA,QACA35C,KAAA,WAAAkrD,KAAA,kBAAAvR,KAAA,MAAAT,KAAA,UACAl5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,OAAAT,KAAA,MAAAF,OAAA,QAAA,UAAA,OAAA,KAAA,SACAh5C,KAAA,OAAAkrD,KAAA,iBAAAvR,KAAA,OAAAT,KAAA,QACAl5C,KAAA,MAAAkrD,KAAA,aAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,OAAAT,KAAA,UACAl5C,KAAA,QAAAkrD,KAAA,eAAAvR,KAAA,QAAAT,KAAA,WACAl5C,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,SAAAT,KAAA,MAAA,QACAl5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,MAAAT,KAAA,UACAl5C,KAAA,QAAAuuH,OAAA,YAAA,oBAAA50E,KAAA,QAAAT,KAAA,KAAA,MAAA,QAAAF,OAAA,OAAA,KAAA,OAAAn8C,KAAA,eACAmD,KAAA,QAAAkrD,KAAA,oBAAAvR,KAAA,QAAAT,KAAA,MAAA,WACAl5C,KAAA,OAAAuuH,OAAA,cAAA,sBAAA50E,KAAA,OAAAT,KAAA,UACAl5C,KAAA,YAAAkrD,KAAA,eAAAvR,KAAA,YAAAT,KAAA,QACAl5C,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,SAAAT,KAAA,SACAl5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,SACA35C,KAAA,MAAAkrD,KAAA,aAAAvR,KAAA,SAAAT,KAAA,MAAA,MAAA,MAAA,eACAl5C,KAAA,MAAAkrD,KAAA,aAAAvR,KAAA,MAAAT,KAAA,OAAAF,OAAA,sBACAh5C,KAAA,SAAAkrD,KAAA,2BAAAvR,KAAA,SAAAT,KAAA,KAAA,UAAAF,OAAA,YACAh5C,KAAA,cAAAkrD,KAAA,qBAAAvR,KAAA,cAAAX,OAAA,QAAA,aACAh5C,KAAA,MAAAkrD,KAAA,aAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,QACA35C,KAAA,WAAAkrD,KAAA,kBAAAvR,KAAA,QAAAT,KAAA,SACAl5C,KAAA,SAAAkrD,KAAA,cAAAvR,KAAA,SAAAT,KAAA,UACAl5C,KAAA,QAAAkrD,KAAA,eAAAvR,KAAA,QAAAT,KAAA,WACAl5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,SACA35C,KAAA,QAAAkrD,KAAA,eAAAvR,KAAA,OAAAT,KAAA,OAAA,MAAA,OAAAF,OAAA,SACAh5C,KAAA,gBAAAkrD,KAAA,uBAAAvR,KAAA,UAAAT,KAAA,IAAA,KAAA,SACAl5C,KAAA,MAAAkrD,KAAA,aAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,UAAAkrD,KAAA,iBAAAvR,KAAA,UAAAT,KAAA,aACAl5C,KAAA,cAAAkrD,KAAA,oBAAAvR,KAAA,eACA35C,KAAA,YAAAkrD,KAAA,YAAAvR,KAAA,SACA35C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,OAAAT,KAAA,UACAl5C,KAAA,UAAAkrD,KAAA,iBAAAvR,KAAA,YACA35C,KAAA,QAAAkrD,KAAA,aAAAvR,KAAA,QAAAT,KAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,OACAl5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,OAAAT,KAAA,OAAA,QAAA,YACAl5C,KAAA,WAAAkrD,KAAA,kBAAAvR,KAAA,WAAAT,KAAA,SACAl5C,KAAA,SAAAkrD,KAAA,cAAAvR,KAAA,SAAAT,KAAA,SACAl5C,KAAA,aAAAkrD,KAAA,yBAAAvR,KAAA,aAAAT,KAAA,MAAAF,OAAA,QACAh5C,KAAA,iBAAAkrD,KAAA,sBAAAvR,KAAA,MAAAT,KAAA,OAAAF,OAAA,SACAh5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA;GACA35C,KAAA,UAAAkrD,KAAA,gBAAAvR,KAAA,SAAAT,KAAA,YACAl5C,KAAA,SAAAkrD,KAAA,YAAAvR,KAAA,KAAAT,KAAA,QACAl5C,KAAA,WAAAkrD,KAAA,gBAAAvR,KAAA,WAAAT,KAAA,SACAl5C,KAAA,WAAAkrD,KAAA,gBAAAvR,KAAA,WAAAT,KAAA,SACAl5C,KAAA,UAAAkrD,KAAA,iBAAAvR,KAAA,UAAAT,KAAA,OACAl5C,KAAA,OAAAkrD,KAAA,cAAAvR,KAAA,OAAAT,KAAA,MAAA,UACAl5C,KAAA,mBAAAuuH,OAAA,eAAA,cAAA50E,KAAA,MAAAT,KAAA,SACAl5C,KAAA,MAAAuuH,OAAA,kBAAA,YAAA50E,KAAA,MAAAT,KAAA,MAAA,MAAA,MAAA,OAAAF,OAAA,MAAA,OAAA,SACAh5C,KAAA,SAAAkrD,KAAA,qBAAAvR,KAAA,SAAAT,KAAA,KAAA,YACAl5C,KAAA,QAAAkrD,KAAA,eAAAvR,KAAA,QAAAT,KAAA,QACAl5C,KAAA,OAAAuuH,OAAA,cAAA,aAAA50E,KAAA,OAAAT,KAAA,OAAA,OAAAF,OAAA,SACAh5C,KAAA,MAAAkrD,KAAA,aAAAvR,KAAA,MAAAT,KAAA,SACAl5C,KAAA,SAAAkrD,KAAA,gBAAAvR,KAAA,SAAAT,KAAA,SAAA,QAAA,SACAl5C,KAAA,KAAAkrD,KAAA,YAAAvR,KAAA,SAAAT,KAAA,QACAl5C,KAAA,UAAAkrD,KAAA,iBAAAvR,KAAA,SAAAT,KAAA,YAGA,KAAA,GAAA11D,GAAA,EAAAA,EAAAw3D,EAAAszE,SAAA/pI,OAAAf,IAAA,CACA,GAAA+5C,GAAAyd,EAAAszE,SAAA9qI,EACA+5C,GAAAgxF,QAAAhxF,EAAA2tB,KAAA3tB,EAAAgxF,MAAA,IAGAvzE,EAAAwzE,eAAA,SAAAtjE,GACAA,EAAAA,EAAAtmE,aACA,KAAA,GAAApB,GAAA,EAAAA,EAAAw3D,EAAAszE,SAAA/pI,OAAAf,IAAA,CACA,GAAA+5C,GAAAyd,EAAAszE,SAAA9qI,EACA,IAAA+5C,EAAA2tB,MAAAA,EAAA,MAAA3tB,EACA,IAAAA,EAAAgxF,MAAA,IAAA,GAAA1pI,GAAA,EAAAA,EAAA04C,EAAAgxF,MAAAhqI,OAAAM,IACA,GAAA04C,EAAAgxF,MAAA1pI,IAAAqmE,EAAA,MAAA3tB,GAEA,MAAA,SAAAx2C,KAAAmkE,GAAAlQ,EAAAwzE,eAAA,mBACA,UAAAznI,KAAAmkE,GAAAlQ,EAAAwzE,eAAA,wBAAA,IAGAxzE,EAAAyzE,oBAAA,SAAAv1E,GACA,IAAA,GAAA11D,GAAA,EAAAA,EAAAw3D,EAAAszE,SAAA/pI,OAAAf,IAAA,CACA,GAAA+5C,GAAAyd,EAAAszE,SAAA9qI,EACA,IAAA+5C,EAAA2b,IAAA,IAAA,GAAAr0D,GAAA,EAAAA,EAAA04C,EAAA2b,IAAA30D,OAAAM,IACA,GAAA04C,EAAA2b,IAAAr0D,IAAAq0D,EAAA,MAAA3b,KAIAyd,EAAA0zE,mBAAA,SAAAn6F,GACA,IAAA,GAAA/wC,GAAA,EAAAA,EAAAw3D,EAAAszE,SAAA/pI,OAAAf,IAAA,CACA,GAAA+5C,GAAAyd,EAAAszE,SAAA9qI,EACA,IAAA+5C,EAAA1gC,MAAA0gC,EAAA1gC,KAAA9V,KAAAwtC,GAAA,MAAAgJ,GAEA,GAAAoxF,GAAAp6F,EAAAtZ,YAAA,KACAi+B,EAAAy1E,GAAA,GAAAp6F,EAAA/b,UAAAm2G,EAAA,EAAAp6F,EAAAhwC,OACA,IAAA20D,EAAA,MAAA8B,GAAAyzE,oBAAAv1E,IAGA8B,EAAA4zE,eAAA,SAAA5uH,GACAA,EAAAA,EAAApb,aACA,KAAA,GAAApB,GAAA,EAAAA,EAAAw3D,EAAAszE,SAAA/pI,OAAAf,IAAA,CACA,GAAA+5C,GAAAyd,EAAAszE,SAAA9qI,EACA,IAAA+5C,EAAAv9B,KAAApb,eAAAob,EAAA,MAAAu9B,EACA,IAAAA,EAAAyb,MAAA,IAAA,GAAAn0D,GAAA,EAAAA,EAAA04C,EAAAyb,MAAAz0D,OAAAM,IACA,GAAA04C,EAAAyb,MAAAn0D,GAAAD,eAAAob,EAAA,MAAAu9B,OClNA,SAAA87C,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,wBAAAA,QAAA,cAAAA,QAAA,YACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,6BAAA,uBAAA,aAAA,WAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,YAEAA,GAAA8P,WAAA,WAAA,SAAA+jE,EAAAC,GAKA,QAAAxjE,GAAAtrD,GACA,GAAAg7C,EAAA4zE,eAAA,CACA,GAAAhqE,GAAA5J,EAAA4zE,eAAA5uH,EACA4kD,KAAA5kD,EAAA4kD,EAAAsG,MAAAtG,EAAA2pE,MAAA,IAEA,GAAA50E,GAAAqB,EAAAsQ,QAAAujE,EAAA7uH,EACA,OAAA,QAAA25C,EAAA35C,KAAA,KAAA25C,EAwEA,QAAAo1E,GAAA1gE,EAAAx6D,EAAA3K,GAEA,MADA2K,GAAA3K,EAAA2K,EAAAmmH,OAAA9wH,EACAA,EAAAmlE,EAAAx6D,GAGA,QAAAm7H,GAAA3gE,EAAAx6D,EAAA3K,GAEA,MADA2K,GAAA3K,EAAA2K,EAAAgkH,MAAA3uH,EACAA,EAAAmlE,EAAAx6D,GAGA,QAAAo7H,GAAAh1E,GACA,OAAAA,IAAA,KAAAlzD,KAAAkzD,EAAAc,QAKA,QAAA2T,GAAA76D,GAeA,GAbAA,EAAAq7H,WAAA,EACAr7H,EAAAs7H,UAAA,EACAt7H,EAAAu7H,UAAA,EAEAv7H,EAAAqwB,IAAA,EAEArwB,EAAAoxB,QAAA,EAEApxB,EAAAw7H,eAAA,EAEAx7H,EAAA8tH,MAAA,EAEA9tH,EAAAy7H,cAAA,EACAz7H,EAAA3K,GAAAqmI,EAAA,CACA,GAAArf,GAAAsf,CACA,KAAAtf,EAAA,CACA,GAAAvhD,GAAA3T,EAAAkR,UAAAyhE,EAAA95H,EAAA47H,UACAvf,GAAA,OAAAvhD,EAAAhV,KAAA35C,MAAA,OAAA2uD,EAAA96D,MAAAu4H,WACAz9D,EAAA96D,MAAA0c,SAAAo+C,EAAA96D,MAAAsJ,SAAAywH,SAEA1d,IACAr8G,EAAA3K,EAAAwmI,EACA77H,EAAAgkH,MAAA8X,EACA97H,EAAA47H,UAAA,MASA,MALA57H,GAAA08D,cAAA,EACA18D,EAAA+7H,sBAAA,EAEA/7H,EAAAg8H,SAAAh8H,EAAAi8H,SACAj8H,EAAAi8H,UAAAzhE,OAAA,MACA,KAGA,QAAAshE,GAAAthE,EAAAx6D,GACA,GAAAk8H,GAAA1hE,EAAAq9B,WAAA73F,EAAAuvF,YACA4sC,EAAAf,EAAAp7H,EAAAg8H,SAAAxhE,QACA4hE,EAAAp8H,EAAAy7H,aACAY,EAAAr8H,EAAAg8H,SAAA1rG,GACAgsG,GAAA,IAAAt8H,EAAAggC,KACAu8F,GAAAv8H,EAAAw8H,UAAAx8H,EAAAw8H,UAAA9rI,OAAA,IAAA,GAAA,CAEAsP,GAAAy7H,cAAA,CAEA,IAAAgB,GAAAz8H,EAAAuvF,WAEA,IAAA,OAAAvvF,EAAA08H,kBACA18H,EAAA08H,gBAAA18H,EAAAuvF,YACA+sC,GAAA,CAWA,IATAt8H,EAAAqwB,IAAA,EACArwB,EAAAoxB,QAAA,EACApxB,EAAAowB,MAAA,EACApwB,EAAAw7H,eAAA,EAEAx7H,EAAAggC,KAAA,KAIAy8F,EAAAz8H,EAAAw8H,UAAAx8H,EAAAw8H,UAAA9rI,OAAA,IACAsP,EAAAw8H,UAAAx4H,MACAhE,EAAAw8H,UAAA9rI,OACAsP,EAAAuvF,YAAAvvF,EAAAw8H,UAAAx8H,EAAAw8H,UAAA9rI,OAAA,GAGAsP,EAAAggC,MAAA,GAGA,IAAAhgC,EAAAggC,OACAhgC,EAAA08H,gBAAAD,EAAAz8H,EAAAw8H,UAAAx8H,EAAAw8H,UAAA9rI,OAAA,IAMA,GAAAisI,KACAR,GAAAE,GAAAr8H,EAAAg8H,SAAAzzH,QACA+zH,GAAAF,GACAp8H,EAAAg8H,SAAAY,eAGAC,IAAA,IAAA78H,EAAAggC,MAAAq8F,GAAAF,IACAn8H,EAAAuvF,aAAAgtC,GAAA/hE,EAAA/oE,MAAAqrI,GAEArrI,EAAA,IACA,IAAAuO,EAAA08H,iBAAA,IAAAN,GAAAp8H,EAAAg8H,SAAAY,eACA58H,EAAAg8H,SAAAzzH,QAAA4zH,GAGA,MAFA3hE,GAAAk9B,YACA13F,EAAAy7H,cAAA,EACAsB,EAAA3sG,IACA,IAAAoqC,EAAAi9B,WACA,MAAA,KACA,IAAAykC,GAAAl8H,EAAAuvF,aAAAgtC,IAAA9qI,EAAA+oE,EAAA/oE,MAAAurI,KAAAvrI,EAAA,GAAAf,QAAA,EAMA,MALAsP,GAAA8tH,MAAA,EACA9tH,EAAAuI,OAAA9W,EAAA,GAAAf,OACAsP,EAAAi8H,SAAA1zH,QAAA,EACA0yH,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,UACAl9H,EAAA3K,EAAA2K,EAAAmmH,OACAgX,EAAAn9H,EACA,IAAAA,EAAAuvF,aAAAgtC,GAAA/hE,EAAA+8B,IAAA,KAIA,MAHAv3F,GAAA8tH,MAAAoO,EAAA,EAAAl8H,EAAA8tH,MAAA,EACAmN,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,SACA1iE,EAAAi9B,WACA0lC,EAAAn9H,EACA,KAAA68H,IAAA78H,EAAAo9H,QAAAlB,GAAAl8H,EAAAuvF,aAAAgtC,IAAA9qI,EAAA+oE,EAAA/oE,MAAA4rI,IAAA,CACA,GAAAC,GAAA7rI,EAAA,GAAA,KAAA,IAcA,OAZAuO,GAAAuvF,YAAAktC,EAAAjiE,EAAA7S,UAAAj3D,OACAsP,EAAAggC,MAAA,EACAhgC,EAAA8tH,MAAA,EAGA9tH,EAAAw8H,UAAApmI,KAAA4J,EAAAuvF,aAEA0rC,EAAAsC,WAAA/iE,EAAA/oE,MAAA+rI,GAAA,KACAx9H,EAAAy9H,UAAA,GAEAz9H,EAAA3K,EAAA2K,EAAAmmH,OACA8U,EAAAgC,sBAAAj9H,EAAAk9H,YAAA,OAAA,QAAAI,IACAH,EAAAn9H,GACA,MAAAk8H,IAAAl8H,EAAAuvF,aAAAgtC,IAAA9qI,EAAA+oE,EAAA/oE,MAAAisI,GAAA,KACA19H,EAAA8tH,MAAA,EACA9tH,EAAA29H,YAAA,GAAAx5H,QAAA1S,EAAA,GAAA,QAEAuO,EAAA49H,UAAA3C,EAAA4C,6BAAApmE,EAAAhmE,EAAA,IACAuO,EAAA49H,YAAA59H,EAAA89H,WAAA32E,EAAAmR,WAAAt4D,EAAA49H,YACA59H,EAAA3K,EAAA2K,EAAAgkH,MAAA1wE,EACA2nF,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,cACAl9H,EAAAowB,MAAA,EACA+sG,EAAAn9H,IAKAA,EAAAo9H,UAEAT,GAAAL,GAAAt8H,EAAA8tH,QAAA,IAAA9tH,EAAAggC,MACAhgC,EAAAowB,MAAAysG,GAAAkB,EAAA7qI,KAAAsnE,EAAAtT,WACAz1D,EAAA+oE,EAAAqB,UAAA,MAAApqE,EAAAA,EAAAA,MAAAusI,KAGAh+H,EAAAo9H,QAIAp9H,EAAAuI,OAAAvI,EAAAo9H,OAEAp9H,EAAAo9H,OAAA,EACA5iE,EAAAk9B,YACAujC,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,YAPAl9H,EAAAuI,OAAA,KAAA9W,EAAA,GAAAmzB,OAAA,GAAA,EAAA,EACA5kB,EAAAo9H,OAAAp9H,EAAAuI,QAQAvI,EAAAi8H,SAAA1zH,QAAA,EACAvI,EAAA3K,EAAA2K,EAAAmmH,OACAgX,EAAAn9H,IACA68H,GACAriE,EAAAk9B,YACA13F,EAAAswB,IAAA,EACAtwB,EAAAi8H,SAAA3rG,IAAA,EACAysG,EAAAzsG,IACA,MAAAkqC,EAAA88B,OACA4jC,EAAA1gE,EAAAx6D,EAAAi+H,GAGA/C,EAAA1gE,EAAAx6D,EAAAA,EAAAmmH,QAGA,QAAAuV,GAAAlhE,EAAAx6D,GACA,GAAA9L,GAAA4lI,EAAAhqF,MAAA0qB,EAAAx6D,EAAA47H,UACA,KAAAD,EAAA,CACA,GAAA7gE,GAAA3T,EAAAkR,UAAAyhE,EAAA95H,EAAA47H,YACA,OAAA9gE,EAAAhV,KAAA35C,MAAA,OAAA2uD,EAAA96D,MAAAu4H,WACAz9D,EAAA96D,MAAA0c,SAAAo+C,EAAA96D,MAAAsJ,SAAAywH,UACA/5H,EAAAk+H,WAAA1jE,EAAA7S,UAAAtnD,QAAA,MAAA,KACAL,EAAA3K,EAAAwmI,EACA77H,EAAAgkH,MAAA8X,EACA97H,EAAA47H,UAAA,MAGA,MAAA1nI,GAGA,QAAAo/C,GAAAknB,EAAAx6D,GACA,GAAAm+H,GAAAn+H,EAAAw8H,UAAAx8H,EAAAw8H,UAAA9rI,OAAA,IAAA,EACA0tI,EAAAp+H,EAAAuvF,YAAA4uC,EACAE,EAAAF,EAAA,CACA,IAAAn+H,EAAA29H,aAAA39H,EAAAuvF,aAAA8uC,IAAAD,GAAA5jE,EAAA/oE,MAAAuO,EAAA29H,cAAA,CACA1C,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,aACA,IAAAoB,EAQA,OAPAF,KAAAE,EAAAnB,EAAAn9H,IACAA,EAAA49H,UAAA59H,EAAA89H,WAAA,KACA99H,EAAAgkH,MAAA8X,EACA97H,EAAA3K,EAAAwmI,EACA77H,EAAA29H,YAAA,KACA39H,EAAAowB,KAAA,EACApwB,EAAAi8H,SAAAW,eAAA,EACAwB,EAAAjD,EAAA3gE,EAAAx6D,EAAAA,EAAAgkH,OACAsa,EACA,MAAAt+H,GAAA49H,UACA59H,EAAA49H,UAAA9tF,MAAA0qB,EAAAx6D,EAAA89H,aAEAtjE,EAAAk9B,YACAqlC,EAAA3sG,MAKA,QAAA+sG,GAAAn9H,GACA,GAAAwmB,KAEA,IAAAxmB,EAAAk9H,WAAA,CACA12G,EAAApwB,KAAA2mI,EAAAG,YAEA,gBAAAl9H,GAAAk9H,aAAAl9H,EAAAk9H,YAAAl9H,EAAAk9H,YAEA,KAAA,GAAAvtI,GAAA,EAAAA,EAAAqQ,EAAAk9H,WAAAxsI,OAAAf,IACA62B,EAAApwB,KAAA2mI,EAAAG,WAAA,IAAAl9H,EAAAk9H,WAAAvtI,IAEA,WAAAqQ,EAAAk9H,WAAAvtI,IACA62B,EAAApwB,KAAA2mI,EAAAG,WAAA,IAAAl9H,EAAAk9H,WAAAvtI,GAAA,IAAAqQ,EAAAuI,QAKA,UAAAvI,EAAAk9H,WAAAvtI,MACAsrI,EAAAsD,oBAAAtD,EAAAsD,oBAAAv+H,EAAA8tH,MACAtnG,EAAApwB,KAAA2mI,EAAAG,WAAA,IAAAl9H,EAAAk9H,WAAAvtI,GAAA,IAAAqQ,EAAA8tH,OAEAtnG,EAAApwB,KAAA,UAMA,GAAA4J,EAAAw+H,SAEA,MADAh4G,GAAApwB,KAAA,QACAowB,EAAA91B,OAAA81B,EAAAhoB,KAAA,KAAA,IAEA,IAAAwB,EAAAy+H,WAEA,MADAj4G,GAAApwB,KAAA,YACAowB,EAAA91B,OAAA81B,EAAAhoB,KAAA,KAAA,IA8BA,IA3BAwB,EAAAs7H,SACA90G,EAAApwB,KAAA2mI,EAAAzB,SAAA,QAEAt7H,EAAAoxB,QAAA5K,EAAApwB,KAAA2mI,EAAA3rG,QACApxB,EAAAqwB,IAAA7J,EAAApwB,KAAA2mI,EAAA1sG,IACArwB,EAAAw7H,eAAAh1G,EAAApwB,KAAA2mI,EAAAvB,eACAx7H,EAAA0+H,OAAAl4G,EAAApwB,KAAA2mI,EAAA2B,OACA1+H,EAAAu7H,UAAA/0G,EAAApwB,KAAA2mI,EAAAxB,UACAv7H,EAAAowB,MAAA5J,EAAApwB,KAAA2mI,EAAA3sG,MACApwB,EAAAkJ,OAAAsd,EAAApwB,KAAA2mI,EAAA7zH,OACAlJ,EAAA2+H,cAAAn4G,EAAApwB,KAAA2mI,EAAA4B,aAAA,QACA3+H,EAAA4+H,aAAAp4G,EAAApwB,KAAA2mI,EAAA6B,cAGA5+H,EAAAuI,QAAAie,EAAApwB,KAAA2mI,EAAAx0H,OAAAw0H,EAAAx0H,OAAA,IAAAvI,EAAAuI,QAEAvI,EAAA8tH,QACAtnG,EAAApwB,KAAA2mI,EAAAjP,QAGAmN,EAAAsD,oBAAAtD,EAAAsD,oBAAAv+H,EAAA8tH,MACAtnG,EAAApwB,KAAA2mI,EAAAjP,MAAA,IAAA9tH,EAAA8tH,OAEAtnG,EAAApwB,KAAA2mI,EAAAjP,MAAA,IAAAmN,EAAAsD,sBAIA,IAAAv+H,EAAAggC,KAAA,CACA,GAAA6+F,IAAA7+H,EAAAw8H,UAAA9rI,OAAA,GAAA,CACAmuI,GAEA,IAAAA,EACAr4G,EAAApwB,KAAA2mI,EAAA+B,OAEAt4G,EAAApwB,KAAA2mI,EAAAgC,OAJAv4G,EAAApwB,KAAA2mI,EAAAiC,OAcA,MANAh/H,GAAA+7H,qBACAv1G,EAAApwB,KAAA,2BACA4J,EAAA08D,eACAl2C,EAAApwB,KAAA,mBAAA4J,EAAA08D,cAAA,EAAA,IAAA,MAGAl2C,EAAA91B,OAAA81B,EAAAhoB,KAAA,KAAA,KAGA,QAAAygI,GAAAzkE,EAAAx6D,GACA,GAAAw6D,EAAA/oE,MAAAytI,GAAA,GACA,MAAA/B,GAAAn9H,GAKA,QAAA67H,GAAArhE,EAAAx6D,GACA,GAAA9L,GAAA8L,EAAAjQ,KAAAyqE,EAAAx6D,EACA,QAAA,KAAA9L,EACA,MAAAA,EAEA,IAAA8L,EAAAggC,KAEA,MADAhgC,GAAAggC,KAAA,KACAm9F,EAAAn9H,EAGA,IAAAA,EAAAy9H,SAAA,CAMA,MALA,MAAAjjE,EAAA/oE,MAAA+rI,GAAA,GAAA,GACAx9H,EAAAw+H,UAAA,EACAx+H,EAAAy+H,YAAA,EACAxD,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,QACAl9H,EAAAy9H,UAAA,EACAN,EAAAn9H,GAMA,GAHAA,EAAAw+H,UAAA,EACAx+H,EAAAy+H,YAAA,EAEAz+H,EAAAuI,QAAAiyD,EAAA/oE,MAAA,QAAA,GAEA,MADAwpI,GAAAgC,sBAAAj9H,EAAAk9H,WAAA,UACAC,EAAAn9H,EAGA,IAAAirB,GAAAuvC,EAAAv3D,MAGA,IAAAjD,EAAAq7H,UAAA,CACAr7H,EAAAq7H,WAAA,CACA,IAAA8D,GAAAl0G,CACA,OAAAA,IACAk0G,EAAA,KAEAA,GAAAA,EAAA,IAAAzsI,QAAA,yBAAA,OACA,IAAAklD,GAAA,aAAAunF,EAAA,yBAAAA,CACA,IAAA3kE,EAAA/oE,MAAA,GAAA0S,QAAAyzC,IAAA,GACA,MAAAmlF,GAAAzB,SAKA,GAAA,MAAArwG,EAAA,CACA,GAAAm0G,GAAAp/H,EAAAk9H,UACAjC,GAAAgC,sBAAAj9H,EAAAk9H,WAAA,QACA1iE,EAAAg9B,SAAA,IACA,IAAA5vD,GAAA4yB,EAAA7S,UAAAj3D,MACA,IAAA,GAAAsP,EAAAowB,MAAApwB,EAAA8tH,OAAA,GAAAlmF,EAGA,CAAA,GAAAA,GAAA5nC,EAAAowB,KAAA,CACA,GAAAlhC,GAAAiuI,EAAAn9H,EAEA,OADAA,GAAAowB,KAAA,EACAlhC,EAGA,MADA8Q,GAAAk9H,WAAAkC,EACAjC,EAAAn9H,GAPA,MADAA,GAAAowB,KAAAwX,EACAu1F,EAAAn9H,GASA,GAAAA,EAAAowB,KACA,MAAA+sG,GAAAn9H,EAGA,IAAA,OAAAirB,IACAuvC,EAAAv3D,OACAg4H,EAAAgC,qBAAA,CACA,GAAAxmI,GAAA0mI,EAAAn9H,GACAq/H,EAAAtC,EAAAG,WAAA,SACA,OAAAzmI,GAAAA,EAAA,IAAA4oI,EAAAA,EAIA,GAAA,MAAAp0G,GAAAuvC,EAAA/oE,MAAA,yBAAA,GAIA,MAHAuO,GAAA4+H,aAAA,EACA5+H,EAAAkJ,OAAA,EACA+xH,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,SACAC,EAAAn9H,EAGA,IAAA,MAAAirB,GAAAjrB,EAAA4+H,aAAApkE,EAAA/oE,MAAA,+BAAA,GAIA,MAHAuO,GAAA4+H,aAAA,EACA5+H,EAAA2+H,cAAA,EACA1D,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,SACAC,EAAAn9H,EAGA,IAAA,MAAAirB,GAAAjrB,EAAA2+H,aAAA,CACA1D,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,QACA,IAAAzmI,GAAA0mI,EAAAn9H,EAIA,OAHAA,GAAA2+H,cAAA,EACA3+H,EAAAkJ,OAAA,EACAlJ,EAAAmmH,OAAAnmH,EAAA3K,EAAAimI,EACA7kI,EAGA,GAAA,MAAAw0B,IAAAjrB,EAAAkJ,MACA,MAAAlJ,GAAAu7H,UAAA/gE,EAAA/oE,MAAA,UAAA0rI,EAAAn9H,IACAA,EAAAu7H,UAAA,EACAN,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,QACAC,EAAAn9H,GAGA,IAAA,MAAAirB,GAAAjrB,EAAAu7H,SAAA,CACAN,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,OACA,IAAAzmI,GAAA0mI,EAAAn9H,EAGA,OAFAA,GAAAu7H,UAAA,EACAv7H,EAAAmmH,OAAAnmH,EAAA3K,EAAAmlE,EAAA/oE,MAAA,qBAAA,GAAA6pI,EAAAO,EACAplI,EAGA,GAAA,MAAAw0B,GAAAuvC,EAAA/oE,MAAA,wCAAA,GAAA,CACAuO,EAAA3K,EAAA2K,EAAAmmH,OAAAmZ,EACArE,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,OACA,IAAAzmI,GAAA0mI,EAAAn9H,EAMA,OALAvJ,GACAA,GAAA,IAEAA,EAAA,GAEAA,EAAAsmI,EAAAuC,WAGA,GAAA,MAAAr0G,GAAAuvC,EAAA/oE,MAAA,8BAAA,GAAA,CACAuO,EAAA3K,EAAA2K,EAAAmmH,OAAAmZ,EACArE,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,OACA,IAAAzmI,GAAA0mI,EAAAn9H,EAMA,OALAvJ,GACAA,GAAA,IAEAA,EAAA,GAEAA,EAAAsmI,EAAAwC,UAGA,GAAAtE,EAAA7+G,KAAA,MAAA6O,GAAAuvC,EAAA/oE,MAAA,uFAAA,GAAA,CACA,GAAA4C,GAAAmmE,EAAAtT,OAAA7mD,QAAA,IAAAm6D,EAAA9jD,IACA,KAAA,GAAAriB,EAAA,CAEA,uCAAAnB,KADAsnE,EAAAtT,OAAAviC,UAAA61C,EAAApmE,MAAAC,MACA2L,EAAAk+H,WAAA,GAIA,MAFA1jE,GAAAo9B,OAAA,GACA53F,EAAA47H,UAAAz0E,EAAAmR,WAAAwhE,GACAqB,EAAA3gE,EAAAx6D,EAAA07H,GAGA,GAAAT,EAAA7+G,KAAA,MAAA6O,GAAAuvC,EAAA/oE,MAAA,YAEA,MADAuO,GAAAk+H,WAAA,EACA,KACA,IAAA,MAAAjzG,GAAA,MAAAA,EAAA,CAEA,IADA,GAAA4iB,GAAA,EAAAr6B,EAAA,GAAAgnD,EAAA9jD,IAAA,IAAA8jD,EAAAtT,OAAAtiC,OAAA41C,EAAA9jD,IAAA,GACAm3B,EAAA,GAAA2sB,EAAA+8B,IAAAtsE,IAAA4iB,GACA,IAAAp6B,GAAA+mD,EAAA88B,QAAA,IAEAkoC,GAAA,KAAAtsI,KAAAugB,MAAAgsH,EAAAvsI,KAAAugB,IAAA,KAAAvgB,KAAAsgB,IAAAisH,EAAAvsI,KAAAsgB,IACAksH,GAAA,KAAAxsI,KAAAsgB,MAAAisH,EAAAvsI,KAAAsgB,IAAA,KAAAtgB,KAAAugB,IAAAgsH,EAAAvsI,KAAAugB,IACAksH,EAAA,KAAAC,EAAA,IAaA,IAZA/xF,EAAA,IACA7tC,EAAAqwB,KAAAmvG,GAAA,MAAAv0G,GAAAy0G,IAAAD,EAAAvsI,KAAAsgB,GAEAxT,EAAAqwB,IAAApF,IAAAy0G,GAAA,MAAAz0G,GAAAu0G,IAAAC,EAAAvsI,KAAAugB,KACAksH,GAAA,GAFAA,GAAA,GAIA9xF,EAAA,IACA7tC,EAAAoxB,SAAAouG,GAAA,MAAAv0G,GAAAy0G,IAAAD,EAAAvsI,KAAAsgB,GAEAxT,EAAAoxB,QAAAnG,IAAAy0G,GAAA,MAAAz0G,GAAAu0G,IAAAC,EAAAvsI,KAAAugB,KACAmsH,GAAA,GAFAA,GAAA,GAIA,MAAAA,GAAA,MAAAD,EAAA,CACA1E,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,MAAAyC,EAAA,SAAA,MAAAC,EAAA,KAAA,cACA,IAAAD,IAAA3/H,EAAAqwB,GAAApF,IACA,IAAA20G,IAAA5/H,EAAAoxB,OAAAnG,EACA,IAAA/7B,GAAAiuI,EAAAn9H,EAGA,QAFA,IAAA2/H,IAAA3/H,EAAAqwB,IAAA,IACA,IAAAuvG,IAAA5/H,EAAAoxB,QAAA,GACAliC,OAEA,IAAA,MAAA+7B,IACAuvC,EAAA+8B,IAAA,MAAA/8B,EAAA+8B,IAAA,MAAA,CACA,GAAA,MAAA/8B,EAAA88B,OACA,MAAA6lC,GAAAn9H,EAEAw6D,GAAAo9B,OAAA,GAKA,GAAAqjC,EAAAO,cACA,GAAA,MAAAvwG,GAAAuvC,EAAAg9B,SAAAvsE,GAAA,CACA,GAAAjrB,EAAAw7H,cAAA,CACAP,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,gBACA,IAAAhuI,GAAAiuI,EAAAn9H,EAEA,OADAA,GAAAw7H,eAAA,EACAtsI,EACA,GAAAsrE,EAAA/oE,MAAA,UAAA,GAGA,MAFAuO,GAAAw7H,eAAA,EACAP,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,iBACAC,EAAAn9H,OAEA,IAAA,MAAAirB,GACAuvC,EAAA/oE,MAAA,OAAA,GAAA,CACA,GAAA,MAAA+oE,EAAA88B,OACA,MAAA6lC,GAAAn9H,EAEAw6D,GAAAo9B,OAAA,GAMA,GAAAqjC,EAAAyD,OAAA,MAAAzzG,GAAAuvC,EAAA/oE,MAAA,qDAAA,CACAuO,EAAA0+H,OAAA,EACAzD,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,QACA,IAAA2C,GAAA1C,EAAAn9H,EAEA,OADAA,GAAA0+H,OAAA,EACAmB,EAWA,MARA,MAAA50G,IACAuvC,EAAA/oE,MAAA,QAAA,GACAuO,EAAA08D,gBACA18D,EAAA08D,gBACA18D,EAAA+7H,sBAAA,IAIAoB,EAAAn9H,GAGA,QAAAs/H,GAAA9kE,EAAAx6D,GAGA,GAAA,MAFAw6D,EAAAv3D,OAEA,CACAjD,EAAA3K,EAAA2K,EAAAmmH,OAAA0V,EACAZ,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,OACA,IAAAzmI,GAAA0mI,EAAAn9H,EAMA,OALAvJ,GACAA,GAAA,IAEAA,EAAA,GAEAA,EAAAsmI,EAAAuC,WAKA,MAFA9kE,GAAA/oE,MAAA,UAAA,GAEAsrI,EAAAuC,WAGA,QAAAhE,GAAA9gE,EAAAx6D,GAEA,GAAAw6D,EAAAi9B,WACA,MAAA,KAEA,IAAAxsE,GAAAuvC,EAAAv3D,MACA,OAAA,MAAAgoB,GAAA,MAAAA,GACAjrB,EAAA3K,EAAA2K,EAAAmmH,OAAA2Z,EAAA,MAAA70G,EAAA,IAAA,KACAgwG,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,eACAl9H,EAAAs7H,UAAA,EACA6B,EAAAn9H,IAEA,QAQA,QAAA8/H,GAAAC,GACA,MAAA,UAAAvlE,EAAAx6D,GAGA,GAFAw6D,EAAAv3D,SAEA88H,EAAA,CACA//H,EAAA3K,EAAA2K,EAAAmmH,OAAA0V,EACAZ,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,cACA,IAAA8C,GAAA7C,EAAAn9H,EAEA,OADAA,GAAAs7H,UAAA,EACA0E,EAKA,MAFAxlE,GAAA/oE,MAAAwuI,EAAAF,IACA//H,EAAAs7H,UAAA,EACA6B,EAAAn9H,IAIA,QAAAi+H,GAAAzjE,EAAAx6D,GACA,MAAAw6D,GAAA/oE,MAAA,sBAAA,IACAuO,EAAA3K,EAAA6qI,EACA1lE,EAAAv3D,OACAg4H,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,QACAl9H,EAAAu7H,UAAA,EACA4B,EAAAn9H,IAEAk7H,EAAA1gE,EAAAx6D,EAAA67H,GAGA,QAAAqE,GAAA1lE,EAAAx6D,GACA,GAAAw6D,EAAA/oE,MAAA,QAAA,GAAA,CACAuO,EAAA3K,EAAA2K,EAAAmmH,OAAAga,EACAlF,EAAAgC,sBAAAj9H,EAAAk9H,WAAA,OACA,IAAAoB,GAAAnB,EAAAn9H,EAEA,OADAA,GAAAu7H,UAAA,EACA+C,EAKA,MAFA9jE,GAAA/oE,MAAA,mBAAA,GAEAsrI,EAAAxB,SAGA,QAAA4E,GAAA3lE,EAAAx6D,GAEA,MAAAw6D,GAAAi9B,WACA,MAGAj9B,EAAA/oE,MAAA,WAAA,OAEAkyB,KAAA62C,EAAA88B,OACAt3F,EAAAq7H,WAAA,EAEA7gE,EAAA/oE,MAAA,uFAAA,GAEAuO,EAAA3K,EAAA2K,EAAAmmH,OAAA0V,EACAkB,EAAAzB,SAAA,QAntBA,GAAAxB,GAAA3yE,EAAAsQ,QAAAujE,EAAA,aACAW,EAAA,QAAA7B,EAAA3tH,SAaAwX,KAAAs3G,EAAAgC,sBACAhC,EAAAgC,qBAAA,OAIAt5G,KAAAs3G,EAAAsD,qBACAtD,EAAAsD,mBAAA,OAGA56G,KAAAs3G,EAAAsC,YAAAtC,EAAAsC,WAAA,OAGA55G,KAAAs3G,EAAAO,gBACAP,EAAAO,eAAA,OAEA73G,KAAAs3G,EAAAyD,QACAzD,EAAAyD,OAAA,OAEA/6G,KAAAs3G,EAAA4C,8BACA5C,EAAA4C,6BAAA,OAEAl6G,KAAAs3G,EAAA7+G,MACA6+G,EAAA7+G,KAAA,OAGAuH,KAAAs3G,EAAAmF,qBACAnF,EAAAmF,sBAEA,IAAArD,IACAx0H,OAAA,SACA6nB,KAAA,UACA09F,MAAA,QACAkR,MAAA,aACAF,MAAA,aACAC,MAAA,UACAzuG,GAAA,KACApnB,MAAA,QACAy1H,aAAA,iBACAC,YAAA,eACA1B,WAAA,aACAoC,WAAA,OACAC,UAAA,OACAhE,SAAA,OACAD,SAAA,SACAjrG,GAAA,KACAe,OAAA,SACAoqG,cAAA,gBACAkD,MAAA,UAGA,KAAA,GAAA2B,KAAAtD,GACAA,EAAAx8H,eAAA8/H,IAAApF,EAAAmF,mBAAAC,KACAtD,EAAAsD,GAAApF,EAAAmF,mBAAAC,GAIA,IAAAvD,GAAA,6BACAO,EAAA,+BACAG,EAAA,oBACAR,EAAA/B,EAAAqF,2BAAA,QAAA,eACAtC,EAAA,0BACAkB,EAAA,2BACAxB,EAAA,uCACAK,EAAA,sBACA0B,EAAA,mpDAukBAQ,GACAM,IAAA,oDACAC,IAAA,qDA+DA16E,GACAwS,WAAA,WACA,OACAjjE,EAAAymI,EAEAE,UAAAxhE,OAAA,MACAyhE,UAAAzhE,OAAA,MAEAwpD,MAAA8X,EACAF,UAAA,KACArsC,YAAA,EAEA42B,OAAA0V,EACA9rI,KAAAkvI,EAEA/B,YAAA,EACA3B,UAAA,EACAD,UAAA,EACAD,WAAA,EACAjrG,KAAA,EACAC,IAAA,EACAe,QAAA,EACA7oB,OAAA,EACA60H,OAAA,EACA9sG,IAAA,EACAmtG,UAAA,EACAz9F,MAAA,EACAw8F,aACA1O,MAAA,EACApxD,cAAA,EACAq/D,sBAAA,EACAP,eAAA,EACAkD,OAAA,EACAf,YAAA,OAIAxlE,UAAA,SAAAvkE,GACA,OACAyB,EAAAzB,EAAAyB,EAEA2mI,SAAApoI,EAAAooI,SACAC,SAAAroI,EAAAqoI,SAEAjY,MAAApwH,EAAAowH,MACA4X,UAAAhoI,EAAAgoI,WAAAz0E,EAAAgR,UAAA2hE,EAAAlmI,EAAAgoI,WACArsC,YAAA37F,EAAA27F,YAEAquC,UAAAhqI,EAAAgqI,UACAE,WAAAlqI,EAAAgqI,UAAAz2E,EAAAgR,UAAAvkE,EAAAgqI,UAAAhqI,EAAAkqI,YAAA,KAEA3X,OAAAvyH,EAAAuyH,OACAp2H,KAAA6D,EAAA7D,KACAmtI,YAAA,EACA3B,SAAA3nI,EAAA2nI,SACAF,UAAAznI,EAAAynI,UACAC,SAAA1nI,EAAA0nI,SACAlrG,KAAAx8B,EAAAw8B,KACAC,GAAAz8B,EAAAy8B,GACAe,OAAAx9B,EAAAw9B,OACAoqG,cAAA5nI,EAAA4nI,cACAkD,MAAA9qI,EAAA8qI,MACAn2H,OAAA3U,EAAA2U,OACA60H,OAAAxpI,EAAAwpI,OACA9sG,GAAA18B,EAAA08B,GACAmtG,SAAA7pI,EAAA6pI,SACAz9F,KAAApsC,EAAAosC,KACAw8F,UAAA5oI,EAAA4oI,UAAArqI,MAAA,GACA27H,MAAAl6H,EAAAk6H,MACA2N,aAAA7nI,EAAA6nI,aACA/+D,cAAA9oE,EAAA8oE,cACAq/D,qBAAAnoI,EAAAmoI,qBACAmC,UAAAtqI,EAAAsqI,UACAP,YAAA/pI,EAAA+pI,cAIA7tF,MAAA,SAAA0qB,EAAAx6D,GAKA,GAFAA,EAAAk9H,YAAA,EAEA1iE,GAAAx6D,EAAAi8H,SAAAzhE,OAAA,CAIA,GAHAx6D,EAAAuI,OAAA,EACAvI,EAAAswB,IAAA,EAEAkqC,EAAA/oE,MAAA,SAAA,GAEA,MADAopE,GAAA76D,GACA,IAaA,IAVAA,EAAAg8H,SAAAh8H,EAAAi8H,SACAj8H,EAAAi8H,UAAAzhE,OAAAA,GAGAx6D,EAAAy9H,UAAA,EAGAz9H,EAAA08D,cAAA,EACA18D,EAAA+7H,sBAAA,GAEA/7H,EAAA89H,aACA99H,EAAA3K,EAAA2K,EAAAgkH,MACAhkH,EAAA3K,GAAAqmI,GAAA,CACA,GAAAnsC,GAAA/0B,EAAA/oE,MAAA,QAAA,GAAA,GAAAiB,QAAA,MA/uBA,QA+uBAhC,MAGA,IAFAsP,EAAAuvF,YAAAA,EACAvvF,EAAA08H,gBAAA,KACAntC,EAAA,EAAA,MAAA,OAIA,MAAAvvF,GAAA3K,EAAAmlE,EAAAx6D,IAGAq4D,UAAA,SAAAr4D,GACA,MAAAA,GAAAgkH,OAAA0X,GAAA17H,MAAAA,EAAA47H,UAAA91E,KAAAg0E,GACA95H,EAAA89H,YAAA99H,MAAAA,EAAA89H,WAAAh4E,KAAA9lD,EAAA49H,YACA59H,MAAAA,EAAA8lD,KAAAA,IAGAupC,OAAA,SAAArvF,EAAAwuH,EAAApoE,GACA,MAAApmD,GAAAgkH,OAAA0X,GAAA5B,EAAAzqC,OAAAyqC,EAAAzqC,OAAArvF,EAAA47H,UAAApN,EAAApoE,GACApmD,EAAA89H,YAAA99H,EAAA49H,UAAAvuC,OAAArvF,EAAA49H,UAAAvuC,OAAArvF,EAAA89H,WAAAtP,EAAApoE,GACAe,EAAAkhC,MAGAxtB,UAAAA,EAEAsiE,QAAAA,EAEA1O,kBAAA,UACAC,gBAAA,SACA+R,cAAA,iBACAC,KAAA,WAEA,OAAA56E,IACA,OAEAqB,EAAAiQ,WAAA,gBAAA,YAEAjQ,EAAAiQ,WAAA,kBAAA,cC92BA,SAAAouB,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,+BAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GAQA,QAAAw5E,GAAAr+G,GACA,MAAAA,IAAAA,EAAAq+G,cAAA,YAGA,QAAAC,GAAAtsE,EAAAooC,EAAAp6E,GACA,GAAA8jC,GAAAkO,EAAAqmC,cAAA+B,EAAAt2C,MAAA1vC,EAAAgmF,EAAAzxE,GAAA,EACA41G,EAAAv+G,GAAAA,EAAAu+G,WACA,OAAAA,IACAA,EAAA,0BAAA3tI,KAAAohE,EAAA6/B,oBAAAzuF,WACA,IAAAT,GAAA07H,EAAAr+G,GAMA7wB,GAAAovI,GAAAnqH,GAAA,GAAAzR,EAAA/R,KAAAkzD,EAAAr2D,KAAA60B,OAAAlO,KAAAoqH,EAAA16E,EAAAr2D,KAAA60B,OAAAlO,KACAzR,EAAA/R,KAAAkzD,EAAAr2D,KAAA60B,OAAAlO,EAAA,KAAAoqH,EAAA16E,EAAAr2D,KAAA60B,SAAAlO,GACA,KAAAjlB,EAAA,MAAA,KACA,IAAAuR,GAAA,KAAAvR,EAAAmzB,OAAA,GAAA,GAAA,CACA,IAAAtC,GAAAA,EAAAy+G,QAAA/9H,EAAA,IAAA0T,GAAAgmF,EAAAzxE,IAAA,MAAA,KACA,IAAA/2B,GAAAogE,EAAAi7C,eAAAhhD,EAAAmuC,EAAAt2C,KAAA1vC,EAAA,IAEAq6C,EAAAiwE,EAAA1sE,EAAA/F,EAAAmuC,EAAAt2C,KAAA1vC,GAAA1T,EAAA,EAAA,EAAA,IAAAA,EAAA9O,GAAA,KAAAouB,EACA,OAAA,OAAAyuC,EAAA,MACAvsC,KAAA+pC,EAAAmuC,EAAAt2C,KAAA1vC,GAAAiW,GAAAokC,GAAAA,EAAAr6C,IACAjlB,MAAAs/D,GAAAA,EAAA9lC,IAAAx5B,EAAAmzB,OAAA,GAAAq8G,QAAAj+H,EAAA,GAUA,QAAAg+H,GAAA1sE,EAAAooC,EAAA15F,EAAA9O,EAAAouB,GAQA,IAAA,GAPA4+G,GAAA5+G,GAAAA,EAAA6+G,mBAAA,IACAC,EAAA9+G,GAAAA,EAAA8+G,cAAA,IAEA/0H,KACApH,EAAA07H,EAAAr+G,GACAslE,EAAA5kF,EAAA,EAAAjJ,KAAAyuD,IAAAk0C,EAAAt2C,KAAAg7E,EAAA9sE,EAAAR,WAAA,GACA/5D,KAAAC,IAAAs6D,EAAAylB,YAAA,EAAA2iB,EAAAt2C,KAAAg7E,GACAvzE,EAAA6uC,EAAAt2C,KAAAyH,GAAA+5B,EAAA/5B,GAAA7qD,EAAA,CACA,GAAAojD,GAAAkO,EAAAjH,QAAAQ,EACA,IAAAzH,EAAA,CACA,GAAA1vC,GAAA1T,EAAA,EAAA,EAAAojD,EAAA11D,OAAA,EAAA2D,EAAA2O,EAAA,EAAAojD,EAAA11D,QAAA,CACA,MAAA01D,EAAA11D,OAAAwwI,GAEA,IADArzE,GAAA6uC,EAAAt2C,OAAA1vC,EAAAgmF,EAAAzxE,IAAAjoB,EAAA,EAAA,EAAA,IACA0T,GAAAriB,EAAAqiB,GAAA1T,EAAA,CACA,GAAAioB,GAAAm7B,EAAAxhC,OAAAlO,EACA,IAAAzR,EAAA/R,KAAA+3B,SAAAtH,KAAAzvB,GAAAogE,EAAAi7C,eAAAhhD,EAAAV,EAAAn3C,EAAA,KAAAxiB,GAAA,CACA,GAAAzC,GAAAqvI,EAAA71G,EACA,IAAA,KAAAx5B,EAAAmzB,OAAA,IAAA5hB,EAAA,EAAAqJ,EAAAjW,KAAA60B,OACA,CAAA,IAAA5e,EAAA3b,OAAA,OAAAgmB,IAAA63C,EAAAV,EAAAn3C,GAAAuU,GAAAA,EACA5e,GAAArI,UAIA,MAAA6pD,GAAA7qD,IAAAA,EAAA,EAAAsxD,EAAAR,WAAAQ,EAAAylB,cAAA,KAGA,QAAAsnD,GAAA/sE,EAAAgtE,EAAAh/G,GAIA,IAAA,GAFAi/G,GAAAjtE,EAAAt0D,MAAAqhI,cAAAG,wBAAA,IACAC,KAAAp3D,EAAA/V,EAAA2vB,iBACAt0F,EAAA,EAAAA,EAAA06E,EAAA35E,OAAAf,IAAA,CACA,GAAA8B,GAAA44E,EAAA16E,GAAAsM,SAAA2kI,EAAAtsE,EAAA+V,EAAA16E,GAAAM,KAAAqyB,EACA,IAAA7wB,GAAA6iE,EAAAjH,QAAA57D,EAAA+yB,KAAA4hC,MAAA11D,QAAA6wI,EAAA,CACA,GAAArtI,GAAAzC,EAAAA,MAAA,6BAAA,+BACAgwI,GAAArrI,KAAAk+D,EAAAytB,SAAAtwF,EAAA+yB,KAAA+pC,EAAA98D,EAAA+yB,KAAA4hC,KAAA30D,EAAA+yB,KAAAyG,GAAA,IAAAvlB,UAAAxR,KACAzC,EAAAk7B,IAAA2nC,EAAAjH,QAAA57D,EAAAk7B,GAAAy5B,MAAA11D,QAAA6wI,GACAE,EAAArrI,KAAAk+D,EAAAytB,SAAAtwF,EAAAk7B,GAAA4hC,EAAA98D,EAAAk7B,GAAAy5B,KAAA30D,EAAAk7B,GAAA1B,GAAA,IAAAvlB,UAAAxR,MAIA,GAAAutI,EAAA/wI,OAAA,CAGAgxI,GAAAptE,EAAAt0D,MAAA0sE,SAAApY,EAAAvsD,OAEA,IAAAwsB,GAAA,WACA+/B,EAAAqf,UAAA,WACA,IAAA,GAAAhkF,GAAA,EAAAA,EAAA8xI,EAAA/wI,OAAAf,IAAA8xI,EAAA9xI,GAAA4kC,UAGA,KAAA+sG,EACA,MAAA/sG,EADAz5B,YAAAy5B,EAAA,MAKA,QAAAotG,GAAArtE,GACAA,EAAAqf,UAAA,WACArf,EAAAt0D,MAAAqhI,cAAAO,uBACAttE,EAAAt0D,MAAAqhI,cAAAO,uBACAttE,EAAAt0D,MAAAqhI,cAAAO,qBAAA,MAEAttE,EAAAt0D,MAAAqhI,cAAAO,qBAAAP,EAAA/sE,GAAA,EAAAA,EAAAt0D,MAAAqhI,iBAxGA,GAAAK,GAAA,UAAAxuI,KAAA+pC,UAAAC,aACA,MAAA7tC,SAAAmlG,cAAAnlG,SAAAmlG,aAAA,GAEAjmC,EAAApH,EAAAoH,IAEAuyE,GAAAe,IAAA,KAAAtB,IAAA,KAAAuB,IAAA,KAAAtB,IAAA,KAAAuB,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAj7H,IAAA,KAuGAmgD,GAAAqnD,aAAA,iBAAA,EAAA,SAAAl6C,EAAA56C,EAAAjC,GACAA,GAAAA,GAAA0vC,EAAAkmC,OACA/4B,EAAAv9D,IAAA,iBAAA4qI,GACArtE,EAAAt0D,MAAAqhI,eAAA/sE,EAAAt0D,MAAAqhI,cAAAO,uBACAttE,EAAAt0D,MAAAqhI,cAAAO,uBACAttE,EAAAt0D,MAAAqhI,cAAAO,qBAAA,OAGAloH,IACA46C,EAAAt0D,MAAAqhI,cAAA,gBAAA3nH,GAAAA,KACA46C,EAAAthD,GAAA,iBAAA2uH,MAIAx6E,EAAAkqD,gBAAA,gBAAA,WAAAgwB,EAAA7xI,MAAA,KACA23D,EAAAkqD,gBAAA,sBAAA,SAAA36F,EAAA4L,EAAA4/G,GAUA,OARAA,GAAA,iBAAA5/G,MACA4/G,GAGAA,EAAAnB,OAAAz+G,EACAA,EAAA4/G,GAHA5/G,EAAAA,GAAAy+G,QAAA,GAAA,MAMAH,EAAApxI,KAAAknB,EAAA4L,KAEA6kC,EAAAkqD,gBAAA,iBAAA,SAAA36F,EAAA1T,EAAA9O,EAAAouB,GACA,MAAA0+G,GAAAxxI,KAAAknB,EAAA1T,EAAA9O,EAAAouB,OChJA,SAAAkjE,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,oCAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,QAAAg7E,GAAA7tE,GACA,GAAAA,EAAAsI,UAAA,gBAAA,MAAAzV,GAAAkhC,IAEA,KAAA,GADAviC,GAAAukB,EAAA/V,EAAA2vB,iBAAAm+C,KACAzyI,EAAA,EAAAA,EAAA06E,EAAA35E,OAAAf,IAAA,CACA,GAAA+mB,GAAA2zD,EAAA16E,GAAAM,IACA,KAAA,cAAAiD,KAAAohE,EAAAi7C,eAAA74F,IAAA,MAAAywC,GAAAkhC,IACA,IAAAg6C,GAAA/tE,EAAA28B,UAAAv6E,EACA,IAAAovC,GACA,GAAAA,GAAAu8E,EAAA,MAAAl7E,GAAAkhC,SADAviC,GAAAu8E,CAGA,IAAAloD,GAAA,IACA,IAAAr0B,EAAA2oE,mBAAA3oE,EAAA6oE,qBAAA,CACA,GACA59D,GADA3K,EAAAkO,EAAAjH,QAAA32C,EAAA0vC,MAAAj0D,MAAA,EAAAukB,EAAAuU,IACA52B,EAAA+xD,EAAAh/B,YAAA0+B,EAAA4oE,gBACA,KAAA,GAAAr6H,GAAAA,GAAAqiB,EAAAuU,GAAA66B,EAAA4oE,gBAAAh+H,YAEA,KAAAqgE,EAAA3K,EAAAh/B,YAAA0+B,EAAA2oE,qBAAA,GAAA19D,EAAA18D,GAEA,GADA8lF,EAAA/zB,EAAAj0D,MAAA,EAAA4+D,GACA,KAAA79D,KAAAinF,GAAA,CACAA,EAAA,EACA,KAAA,GAAAnpF,GAAA,EAAAA,EAAA+/D,IAAA//D,EAAAmpF,GAAA,UAEAppB,EAAA3K,EAAA/lD,QAAAylD,EAAA6oE,wBAAA,IAAA,KAAAz7H,KAAAkzD,EAAAj0D,MAAA,EAAA4+D,MACAopB,EAAA/zB,EAAAj0D,MAAA,EAAA4+D,GAEA,OAAAopB,IAAAA,GAAAr0B,EAAA6oE,sBAEA,GAAA,MAAAx0C,GAAAr0B,EAAA8oE,aAAA0T,EAAAhuE,GAAA,CACA,GAAAlO,GAAAkO,EAAAjH,QAAA32C,EAAA0vC,MAAA2K,EAAA3K,EAAA/lD,QAAAylD,EAAA8oE,YACA79D,IAAA,IACAopB,EAAA/zB,EAAAj0D,MAAA,EAAA4+D,GACA,KAAA79D,KAAAinF,GAAAA,EAAA,KACAA,GAAAr0B,EAAA8oE,YAAAxoE,EAAAj0D,MAAA4+D,EAAAjL,EAAA8oE,YAAAl+H,QAAAe,MAAA,QAAA,IAGA,GAAA,MAAA0oF,EAAA,MAAAhzB,GAAAkhC,IACA+5C,GAAAzyI,GAAA,KAAAwqF,EAGA7lB,EAAAqf,UAAA,WACA,IAAA,GAAAhkF,GAAA06E,EAAA35E,OAAA,EAAAf,GAAA,EAAAA,IACA2kE,EAAAysB,aAAAqhD,EAAAzyI,GAAA06E,EAAA16E,GAAA60B,OAAA6lD,EAAA16E,GAAAg9B,KAAA,aAIA,QAAA21G,GAAAhuE,GACA,GAAA65B,GAAA75B,EAAAsI,UAAA,mBACA,QAAAuxB,GAAA,gBAAAA,KACA,IAAAA,EAAAo0C,oBAIAp7E,EAAAqnD,aAAA,mBAAA,KAAA,SAAAl6C,EAAA56C,EAAA1P,GAGA,GAFAA,GAAAA,GAAAm9C,EAAAkmC,MACA/4B,EAAA06C,aAAA,mBACAt1F,EAAA,CACA,GAAA7H,GAAA,OACA,iBAAA6H,GACA7H,EAAA6H,EACA,gBAAAA,IAAAA,EAAA7H,MACAA,EAAA6H,EAAA7H,IACA,IAAArZ,IAAA2T,KAAA,kBACA3T,GAAAqZ,GAAAswH,EACA7tE,EAAAy6C,UAAAv2G,QCvEA,SAAAgtF,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,4BAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,YAMA,SAAA2gC,GAAAjlE,GACA,GAAAkuC,GAAAluC,EAAAsuB,OAAAqxF,EACA,QAAA,GAAAzxE,EAAA,EAAAA,EA4BA,QAAA0xE,GAAAnuE,EAAA59C,EAAA0vC,GACA,MAAA,aAAAlzD,KAAAohE,EAAAi7C,eAAAhhD,EAAA73C,EAAA0vC,KAAA,OAAA,YAAAlzD,KAAAkzD,GAGA,QAAAqR,GAAAnD,EAAA59C,GACA,GAAAovC,GAAAwO,EAAAmD,SACA,QAAA,IAAA3R,EAAA48E,kBAAA58E,EAAAuS,UAAA/D,EAAA28B,UAAAv6E,GAAAovC,EAxCA,GAAA68E,MACAH,EAAA,cACAj0E,EAAApH,EAAAoH,GAOApH,GAAA+gC,SAAA06C,cAAA,SAAAtuE,GACAA,EAAAsuE,iBAGAz7E,EAAAkqD,gBAAA,gBAAA,SAAA76F,GACAA,IAAAA,EAAAmsH,EAGA,KAAA,GAFAruE,GAAA9kE,KACAqzI,EAAAznG,EAAAA,EAAAivC,EAAA76E,KAAAy0F,iBAAAn+B,EAAA,KACAn2D,EAAA06E,EAAA35E,OAAA,EAAAf,GAAA,EAAAA,IAAA,CACA,GAAA60B,GAAA6lD,EAAA16E,GAAA60B,OAAAmI,EAAA09C,EAAA16E,GAAAg9B,IACAnI,GAAA4hC,MAAAy8E,IACAl2G,EAAAy5B,MAAAy8E,IAAAl2G,EAAA4hC,EAAAs0E,EAAA,IACAA,EAAAr+G,EAAA4hC,KACA,MAAAN,EACAwO,EAAAwuE,UAAAt+G,EAAAmI,EAAAnW,GAAAsvC,EAAA,MACAwO,EAAAs6D,YAAApqG,EAAAmI,EAAAnW,GAAAsvC,EAAA,QACA,MAAAA,EACAwO,EAAAwuE,UAAAt+G,EAAAmI,EAAAnW,GAEA89C,EAAAs6D,YAAApqG,EAAAmI,EAAAnW,OAeA2wC,EAAAkqD,gBAAA,cAAA,SAAA7sF,EAAAmI,EAAAnW,GACAA,IAAAA,EAAAmsH,EACA,IAAAv7F,GAAA53C,KAAAs2D,EAAA2R,EAAArwB,EAAA5iB,GACAu1D,EAAA3yC,EAAAimB,QAAA7oC,EAAA4hC,KACA,IAAA,MAAA2zB,IAAA0oD,EAAAr7F,EAAA5iB,EAAAu1D,GAAA,CAEA,GAAAgpD,GAAAvsH,EAAAo4G,aAAA9oE,EAAA8oE,WACA,KAAAmU,EAKA,aAJAvsH,EAAAi4G,mBAAA3oE,EAAA2oE,qBACAj4G,EAAAwsH,WAAA,EACA57F,EAAA67F,aAAAz+G,EAAAmI,EAAAnW,IAKA,IAAAniB,GAAA0F,KAAAyuD,IAAA,GAAA77B,EAAA1B,IAAA0B,EAAAy5B,MAAA5hC,EAAA4hC,KAAAz5B,EAAAy5B,KAAA,EAAAz5B,EAAAy5B,KAAAhf,EAAA0sB,WAAA,GACAovE,EAAA,MAAA1sH,EAAAH,QAAA,IAAAG,EAAAH,QACA8sH,EAAA3sH,EAAA4sH,mBAAA5+G,EAAA4hC,MAAAz5B,EAAAy5B,IAEAhf,GAAAusC,UAAA,WACA,GAAAn9D,EAAA64E,OAAA,CAEA,IAAA,GADAg0C,GAAA,KACA1zI,EAAA60B,EAAA4hC,KAAAz2D,EAAA0E,IAAA1E,EAAA,CACA,GAAAy2D,GAAAhf,EAAAimB,QAAA19D,GACAw8C,EAAAia,EAAAj0D,MAAA,EAAA21F,EAAA1hC,KACA,MAAAi9E,GAAAA,EAAA3yI,OAAAy7C,EAAAz7C,UACA2yI,EAAAl3F,GAGA,IAAA,GAAAx8C,GAAA60B,EAAA4hC,KAAAz2D,EAAA0E,IAAA1E,EAAA,CACA,GAAAy2D,GAAAhf,EAAAimB,QAAA19D,GAAAskF,EAAAovD,EAAA3yI,QACAyyI,GAAAX,EAAAtvI,KAAAkzD,MACAA,EAAAj0D,MAAA,EAAA8hF,IAAAovD,IAAApvD,EAAA6T,EAAA1hC,IACAhf,EAAA25C,aAAAsiD,EAAAN,EAAAG,EAAA30E,EAAA5+D,EAAA,GAAA4+D,EAAA5+D,EAAAskF,UAGA,KAAA,GAAAtkF,GAAA60B,EAAA4hC,KAAAz2D,EAAA0E,IAAA1E,GACAwzI,GAAAX,EAAAtvI,KAAAk0C,EAAAimB,QAAA19D,MACAy3C,EAAA25C,aAAAgiD,EAAAG,EAAA30E,EAAA5+D,EAAA,SAMAw3D,EAAAkqD,gBAAA,eAAA,SAAA7sF,EAAAmI,EAAAnW,GACAA,IAAAA,EAAAmsH,EACA,IAAAv7F,GAAA53C,KAAAs2D,EAAA2R,EAAArwB,EAAA5iB,GACA8+G,EAAA9sH,EAAAi4G,mBAAA3oE,EAAA2oE,kBACA8U,EAAA/sH,EAAAk4G,iBAAA5oE,EAAA4oE,eACA,KAAA4U,IAAAC,EAGA,aAFA/sH,EAAAo4G,aAAA9oE,EAAA8oE,cAAA,GAAAp4G,EAAAwsH,WACA57F,EAAAwnF,YAAApqG,EAAAmI,EAAAnW,GAGA,KAAA,cAAAtjB,KAAAk0C,EAAAmoE,eAAAhhD,EAAA/pC,EAAA4hC,KAAA,KAAA,CAEA,GAAA/xD,GAAA0F,KAAAyuD,IAAA77B,EAAAy5B,KAAAhf,EAAA0sB,WACAz/D,IAAAmwB,EAAA4hC,MAAA,GAAAz5B,EAAA1B,IAAAu3G,EAAAtvI,KAAAk0C,EAAAimB,QAAAh5D,OAAAA,CAEA,IAAA6uI,GAAA,MAAA1sH,EAAAH,QAAA,IAAAG,EAAAH,OACAmO,GAAA4hC,KAAA/xD,GAEA+yC,EAAAusC,UAAA,WACA,GAAA,GAAAn9D,EAAAwsH,UAAA,CACA,GAAAQ,GAAAhB,EAAAtvI,KAAAk0C,EAAAimB,QAAAh5D,GACA+yC,GAAA25C,aAAAmiD,EAAAK,EAAAh1E,EAAAl6D,IACA+yC,EAAA25C,aAAAuiD,EAAAJ,EAAA30E,EAAA/pC,EAAA4hC,KAAA,GACA,IAAAtiB,GAAAttB,EAAAitH,kBAAA39E,EAAA29E,gBACA,IAAA,MAAA3/F,EAAA,IAAA,GAAAn0C,GAAA60B,EAAA4hC,KAAA,EAAAz2D,GAAA0E,IAAA1E,GACAA,GAAA0E,GAAAmvI,IACAp8F,EAAA25C,aAAAj9C,EAAAo/F,EAAA30E,EAAA5+D,EAAA,QAEAy3C,GAAA25C,aAAAwiD,EAAA52G,GACAya,EAAA25C,aAAAuiD,EAAA9+G,QAKA2iC,EAAAkqD,gBAAA,YAAA,SAAA7sF,EAAAmI,EAAAnW,GACAA,IAAAA,EAAAmsH,EACA,IAKAe,GALAt8F,EAAA53C,KAAAs2D,EAAA2R,EAAArwB,EAAA5iB,GACAnwB,EAAA0F,KAAAyuD,IAAA,GAAA77B,EAAA1B,IAAA0B,EAAAy5B,MAAA5hC,EAAA4hC,KAAAz5B,EAAAy5B,KAAAz5B,EAAAy5B,KAAA,EAAAhf,EAAA0sB,YAAA1/D,EAAA2F,KAAAyuD,IAAAhkC,EAAA4hC,KAAA/xD,GAGAsvI,EAAAntH,EAAAo4G,aAAA9oE,EAAA8oE,YAAAnkE,KACAy4E,EAAA,MAAA1sH,EAAAH,QAAA,IAAAG,EAAAH,OACAu4G,GACA,GAAA+U,EAAA,CACA,IAAA,GAAAh0I,GAAAyE,EAAAzE,GAAA0E,IAAA1E,EAAA,CACA,GAAAy2D,GAAAhf,EAAAimB,QAAA19D,GACAohE,EAAA3K,EAAA/lD,QAAAsjI,EAEA,IADA5yE,GAAA,IAAA,UAAA79D,KAAAk0C,EAAAmoE,eAAAhhD,EAAA5+D,EAAAohE,EAAA,OAAAA,GAAA,IACA,GAAAA,GAAAyxE,EAAAtvI,KAAAkzD,GAAA,KAAAwoE,EACA,IAAA79D,GAAA,GAAAyxE,EAAAtvI,KAAAkzD,EAAAj0D,MAAA,EAAA4+D,IAAA,KAAA69D,EACAnkE,GAAAr0D,KAAAgwD,GAYA,GAVAhf,EAAAusC,UAAA,WACA,IAAA,GAAAhkF,GAAAyE,EAAAzE,GAAA0E,IAAA1E,EAAA,CACA,GAAAy2D,GAAAqE,EAAA96D,EAAAyE,GACAsiB,EAAA0vC,EAAA/lD,QAAAsjI,GAAAC,EAAAltH,EAAAitH,EAAAjzI,MACAgmB,GAAA,IACA0vC,EAAAj0D,MAAAyxI,EAAAA,EAAAV,EAAAxyI,SAAAwyI,IAAAU,GAAAV,EAAAxyI,QACAgzI,GAAA,EACAt8F,EAAA25C,aAAA,GAAAxyB,EAAA5+D,EAAA+mB,GAAA63C,EAAA5+D,EAAAi0I,QAGAF,EAAA,OAAA,EAIA,GAAAJ,GAAA9sH,EAAAi4G,mBAAA3oE,EAAA2oE,kBACA8U,EAAA/sH,EAAAk4G,iBAAA5oE,EAAA4oE,eACA,KAAA4U,IAAAC,EAAA,OAAA,CACA,IAAAz/F,GAAAttB,EAAAitH,kBAAA39E,EAAA29E,iBACAtmB,EAAA/1E,EAAAimB,QAAAj5D,GAAA8qB,EAAAi+F,EAAA98G,QAAAijI,EACA,KAAA,GAAApkH,EAAA,OAAA,CACA,IAAA2kH,GAAAxvI,GAAAD,EAAA+oH,EAAA/1E,EAAAimB,QAAAh5D,GACA23B,EAAA63G,EAAAxjI,QAAAkjI,EAAAlvI,GAAAD,EAAA8qB,EAAAokH,EAAA5yI,OAAA,GACAozI,EAAAv1E,EAAAn6D,EAAA8qB,EAAA,GAAA6kH,EAAAx1E,EAAAl6D,EAAA23B,EAAA,EACA,KAAA,GAAAA,IACA,UAAA94B,KAAAk0C,EAAAmoE,eAAAu0B,MACA,UAAA5wI,KAAAk0C,EAAAmoE,eAAAw0B,KACA38F,EAAAiqD,SAAAyyC,EAAAC,EAAA,MAAA1jI,QAAAkjI,IAAA,EACA,OAAA,CAIA,IAAAS,GAAA7mB,EAAA/1F,YAAAk8G,EAAA9+G,EAAAyG,IACAg5G,GAAA,GAAAD,GAAA,EAAA7mB,EAAAhrH,MAAA,EAAAqyB,EAAAyG,IAAA5qB,QAAAkjI,EAAAS,EAAAV,EAAA5yI,OACA,KAAA,GAAAszI,IAAA,GAAAC,GAAAA,EAAAV,EAAA7yI,QAAA8zB,EAAAyG,GAAA,OAAA,CAEAg5G,GAAAJ,EAAAxjI,QAAAkjI,EAAA52G,EAAA1B,GACA,IAAAi5G,GAAAL,EAAA1xI,MAAAw6B,EAAA1B,IAAA7D,YAAAk8G,EAAAW,EAAAt3G,EAAA1B,GAEA,OADA+4G,IAAA,GAAAC,IAAA,GAAAC,GAAA,EAAAv3G,EAAA1B,GAAAi5G,IACA,GAAAD,IAAA,GAAAD,GAAAA,GAAAr3G,EAAA1B,MAEAmc,EAAAusC,UAAA,WACAvsC,EAAA25C,aAAA,GAAAxyB,EAAAl6D,EAAA23B,GAAAk3G,GAAAW,EAAA1xI,MAAA65B,EAAAk3G,EAAAxyI,OAAAs7B,IAAAk3G,EAAAA,EAAAxyI,OAAA,IACA69D,EAAAl6D,EAAA23B,EAAAu3G,EAAA7yI,QACA,IAAA+6E,GAAAvsD,EAAAokH,EAAA5yI,MAGA,IAFAwyI,GAAA/lB,EAAAhrH,MAAAs5E,EAAAA,EAAAy3D,EAAAxyI,SAAAwyI,IAAAz3D,GAAAy3D,EAAAxyI,QACA02C,EAAA25C,aAAA,GAAAxyB,EAAAn6D,EAAA8qB,GAAAqvC,EAAAn6D,EAAAq3E,IACA3nC,EAAA,IAAA,GAAAn0C,GAAAyE,EAAA,EAAAzE,GAAA0E,IAAA1E,EAAA,CACA,GAAAy2D,GAAAhf,EAAAimB,QAAA19D,GAAAohE,EAAA3K,EAAA/lD,QAAAyjC,EACA,KAAA,GAAAitB,IAAAyxE,EAAAtvI,KAAAkzD,EAAAj0D,MAAA,EAAA4+D,IAAA,CACA,GAAAozE,GAAApzE,EAAAjtB,EAAApzC,MACAwyI,IAAA98E,EAAAj0D,MAAAgyI,EAAAA,EAAAjB,EAAAxyI,SAAAwyI,IAAAiB,GAAAjB,EAAAxyI,QACA02C,EAAA25C,aAAA,GAAAxyB,EAAA5+D,EAAAohE,GAAAxC,EAAA5+D,EAAAw0I,SAGA,OC3MA,SAAA3+C,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,2BAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,YAyCA,SAAAi9E,GAAA9vE,EAAA99C,GACAhnB,KAAA8kE,GAAAA,EACA9kE,KAAAgnB,QAAAA,EACAhnB,KAAA4uE,OAAA,KACA5uE,KAAAg8C,SAAA,EACAh8C,KAAAyL,KAAA,EACAzL,KAAA60I,SAAA70I,KAAA8kE,GAAAqb,UAAA,SACAngF,KAAA80I,SAAA90I,KAAA8kE,GAAAjH,QAAA79D,KAAA60I,SAAAj+E,MAAA11D,OAAAlB,KAAA8kE,GAAAkhB,eAAA9kF,MAEA,IAAA02C,GAAA53C,IACA8kE,GAAAthD,GAAA,iBAAAxjB,KAAA+0I,aAAA,WAAAn9F,EAAAquB,mBA8EA,QAAA+uE,GAAAlwE,EAAA59C,EAAAF,GACA,GAAA2vC,GAAAmO,EAAA99C,QAAAiuH,YACA77E,IACA,KAAA,GAAAryC,KAAAmuH,GAAA97E,EAAAryC,GAAAmuH,EAAAnuH,EACA,IAAA4vC,EAAA,IAAA,GAAA5vC,KAAA4vC,OACAxiC,KAAAwiC,EAAA5vC,KAAAqyC,EAAAryC,GAAA4vC,EAAA5vC,GACA,IAAAC,EAAA,IAAA,GAAAD,KAAAC,OACAmN,KAAAnN,EAAAD,KAAAqyC,EAAAryC,GAAAC,EAAAD,GAEA,OADAqyC,GAAA3T,KAAAvpC,UAAAk9C,EAAA3T,KAAA2T,EAAA3T,KAAAvpC,QAAA4oD,EAAA59C,IACAkyC,EAGA,QAAAhiD,GAAA62G,GACA,MAAA,gBAAAA,GAAAA,EACAA,EAAA1tH,KAGA,QAAA40I,GAAAlnB,EAAA5lH,GAsBA,QAAA+sI,GAAA/yH,EAAA6H,GACA,GAAAmoB,EAEAA,GADA,gBAAAnoB,GACA,SAAA46C,GAAA,MAAA56C,GAAA46C,EAAAz8D,IAEAgtI,EAAAtkI,eAAAmZ,GACAmrH,EAAAnrH,GAEAA,EACAkjG,EAAA/qG,GAAAgwB,EA9BA,GAAAgjG,IACA7jC,GAAA,WAAAnpG,EAAAitI,WAAA,IACA7jC,KAAA,WAAAppG,EAAAitI,UAAA,IACA1jC,OAAA,WAAAvpG,EAAAitI,UAAA,EAAAjtI,EAAAktI,YAAA,IACA1jC,SAAA,WAAAxpG,EAAAitI,UAAAjtI,EAAAktI,WAAA,GAAA,IACA5jC,KAAA,WAAAtpG,EAAAmtI,SAAA,IACA9jC,IAAA,WAAArpG,EAAAmtI,SAAAntI,EAAAnH,OAAA,IACAixG,MAAA9pG,EAAAotI,KACAxjC,IAAA5pG,EAAAotI,KACApjC,IAAAhqG,EAAAm0B,MAGA,OAAA94B,KAAA+pC,UAAAm3D,YAGAywC,EAAA,UAAA,WAAAhtI,EAAAitI,WAAA,IACAD,EAAA,UAAA,WAAAhtI,EAAAitI,UAAA,IAGA,IAAAI,GAAAznB,EAAAjnG,QAAA2uH,WACAvoB,EAAAsoB,KAAAL,CAYA,IAAAK,EACA,IAAA,GAAArzH,KAAAqzH,GAAAA,EAAA3kI,eAAAsR,IACA+yH,EAAA/yH,EAAAqzH,EAAArzH,GACA,IAAAuzH,GAAA3nB,EAAAjnG,QAAAgyE,SACA,IAAA48C,EACA,IAAA,GAAAvzH,KAAAuzH,GAAAA,EAAA7kI,eAAAsR,IACA+yH,EAAA/yH,EAAAuzH,EAAAvzH,GACA,OAAA+qG,GAGA,QAAAyoB,GAAAC,EAAAh+G,GACA,KAAAA,GAAAA,GAAAg+G,GAAA,CACA,GAAA,OAAAh+G,EAAAx2B,SAAA0B,eAAA80B,EAAAn3B,YAAAm1I,EAAA,MAAAh+G,EACAA,GAAAA,EAAAn3B,YAIA,QAAAo1I,GAAA9nB,EAAAv9G,GACA1Q,KAAAiuH,WAAAA,EACAjuH,KAAA0Q,KAAAA,EACA1Q,KAAAg2I,QAAA,CACA,IAAApnE,GAAA5uE,KAAA8kE,EAAAmpD,EAAAnpD,GACA//D,EAAA+/D,EAAAo6C,gBAAAn6G,cACAylB,EAAAzlB,EAAA8Q,aAAA9Q,EAAAylB,aAEAyrH,EAAAj2I,KAAAi2I,MAAAlxI,EAAAzE,cAAA,MACAo9F,EAAAuwB,EAAAnpD,GAAA99C,QAAA02E,KACAu4C,GAAA//H,UAAA,oBAAAwnF,EACA19F,KAAAk2I,aAAAxlI,EAAAwlI,cAAA,CAGA,KAAA,GADAloB,GAAAt9G,EAAA8/B,KACArwC,EAAA,EAAAA,EAAA6tH,EAAA9sH,SAAAf,EAAA,CACA,GAAA43D,GAAAk+E,EAAAv1I,YAAAqE,EAAAzE,cAAA,OAAA+D,EAAA2pH,EAAA7tH,GACA+V,EAAAigI,GAAAh2I,GAAAH,KAAAk2I,aAAA,GAAA,IAAAE,EACA,OAAA/xI,EAAA6R,YAAAA,EAAA7R,EAAA6R,UAAA,IAAAA,GACA6hD,EAAA7hD,UAAAA,EACA7R,EAAAmiD,OAAAniD,EAAAmiD,OAAAuR,EAAArnD,EAAArM,GACA0zD,EAAAr3D,YAAAqE,EAAA8B,eAAAxC,EAAA2pE,aAAA52D,EAAA/S,KACA0zD,EAAAs+E,OAAAl2I,EAGA,GAAA+mB,GAAA49C,EAAA2S,aAAAw2C,EAAAjnG,QAAAsvH,cAAA5lI,EAAAskB,KAAA,MACArO,EAAAO,EAAAP,KAAA7Q,EAAAoR,EAAAmc,OAAAkzG,GAAA,CACAN,GAAAvxI,MAAAiiB,KAAAA,EAAA,KACAsvH,EAAAvxI,MAAAoR,IAAAA,EAAA,IAEA,IAAA0gI,GAAAhsH,EAAA6V,YAAA91B,KAAAC,IAAAzF,EAAAE,KAAA6f,YAAA/f,EAAA4Q,gBAAAmP,aACA2xH,EAAAjsH,EAAAk0D,aAAAn0E,KAAAC,IAAAzF,EAAAE,KAAAiqB,aAAAnqB,EAAA4Q,gBAAAuZ,eACA++F,EAAAjnG,QAAAmb,WAAAp9B,EAAAE,MAAAvE,YAAAu1I,EACA,IAAAllG,GAAAklG,EAAAvvH,wBAAAgwH,EAAA3lG,EAAA1N,OAAAozG,EACAE,EAAAV,EAAAj2G,aAAAi2G,EAAAh2G,aAAA,EACA22G,EAAA9xE,EAAAk8C,eAEA,IAAA01B,EAAA,EAAA,CACA,GAAA3qI,GAAAglC,EAAA1N,OAAA0N,EAAAj7B,GACA,IADAoR,EAAApR,KAAAoR,EAAAmc,OAAA0N,EAAAj7B,KACA/J,EAAA,EACAkqI,EAAAvxI,MAAAoR,KAAAA,EAAAoR,EAAApR,IAAA/J,GAAA,KACAwqI,GAAA,MACA,IAAAxqI,EAAA0qI,EAAA,CACAR,EAAAvxI,MAAAqH,OAAA0qI,EAAA,EAAA,KACAR,EAAAvxI,MAAAoR,KAAAA,EAAAoR,EAAAmc,OAAA0N,EAAAj7B,KAAA,IACA,IAAAswC,GAAA0e,EAAAqb,WACAzvE,GAAAskB,KAAAyG,IAAA2qB,EAAA3qB,KACAvU,EAAA49C,EAAA2S,aAAArxB,GACA6vF,EAAAvxI,MAAAiiB,MAAAA,EAAAO,EAAAP,MAAA,KACAoqB,EAAAklG,EAAAvvH,0BAIA,GAAAmwH,GAAA9lG,EAAAnsB,MAAA4xH,CAQA,IAPAK,EAAA,IACA9lG,EAAAnsB,MAAAmsB,EAAApqB,KAAA6vH,IACAP,EAAAvxI,MAAAmF,MAAA2sI,EAAA,EAAA,KACAK,GAAA9lG,EAAAnsB,MAAAmsB,EAAApqB,KAAA6vH,GAEAP,EAAAvxI,MAAAiiB,MAAAA,EAAAO,EAAAP,KAAAkwH,GAAA,MAEAF,EAAA,IAAA,GAAAr5F,GAAA24F,EAAAvvI,WAAA42C,EAAAA,EAAAA,EAAAlqC,YACAkqC,EAAA54C,MAAA07B,aAAA0kC,EAAA3/D,QAAAs3D,eAAA,IAYA,IAVAqI,EAAAy6C,UAAAv/G,KAAA62F,OAAAs+C,EAAAlnB,GACAqnB,UAAA,SAAAp1I,EAAA42I,GAAAloE,EAAAmoE,aAAAnoE,EAAAsnE,aAAAh2I,EAAA42I,IACAtB,SAAA,SAAAt1I,GAAA0uE,EAAAmoE,aAAA72I,IACAq1I,SAAA,WAAA,MAAA3mE,GAAAooE,gBACA91I,OAAA8sH,EAAA9sH,OACAs7B,MAAA,WAAAyxF,EAAAzxF,SACAi5G,KAAA,WAAA7mE,EAAA6mE,QACA/kI,KAAAA,KAGAu9G,EAAAjnG,QAAAiwH,eAAA,CACA,GAAAC,EACApyE,GAAAthD,GAAA,OAAAxjB,KAAAmrD,OAAA,WAAA+rF,EAAA5rI,WAAA,WAAA2iH,EAAAzxF,SAAA,OACAsoC,EAAAthD,GAAA,QAAAxjB,KAAAorD,QAAA,WAAAriC,aAAAmuH,KA+BA,MA5BApyE,GAAAthD,GAAA,SAAAxjB,KAAAm3I,SAAA,WACA,GAAAC,GAAAtyE,EAAAk8C,gBAAArqD,EAAAmO,EAAA6/B,oBAAAj+E,wBACAk5D,EAAA9pE,EAAA8gI,EAAA9gI,IAAAshI,EAAAthI,IACAuhI,EAAAz3D,GAAAp1D,EAAA4G,cAAArsB,EAAA4Q,iBAAA5Q,EAAAE,MAAAmiB,UAEA,IADAmvH,IAAAc,GAAApB,EAAA/mH,cACAmoH,GAAA1gF,EAAA7gD,KAAAuhI,GAAA1gF,EAAAtzB,OAAA,MAAA4qF,GAAAzxF,OACAy5G,GAAAvxI,MAAAoR,IAAA8pE,EAAA,KACAq2D,EAAAvxI,MAAAiiB,KAAAA,EAAAiwH,EAAAjwH,KAAAywH,EAAAzwH,KAAA,OAGAgxC,EAAAn0C,GAAAyyH,EAAA,WAAA,SAAAx2I,GACA,GAAAC,GAAAm2I,EAAAI,EAAAx2I,EAAA0Y,QAAA1Y,EAAAknE,WACAjnE,IAAA,MAAAA,EAAA22I,SAAAznE,EAAAmoE,aAAAr3I,EAAA22I,QAAAznE,EAAA6mE,UAGA99E,EAAAn0C,GAAAyyH,EAAA,QAAA,SAAAx2I,GACA,GAAAC,GAAAm2I,EAAAI,EAAAx2I,EAAA0Y,QAAA1Y,EAAAknE,WACAjnE,IAAA,MAAAA,EAAA22I,SACAznE,EAAAmoE,aAAAr3I,EAAA22I,QACApoB,EAAAjnG,QAAAswH,uBAAA1oE,EAAA6mE,UAIA99E,EAAAn0C,GAAAyyH,EAAA,YAAA,WACA3qI,WAAA,WAAAw5D,EAAAvsD,SAAA,MAGAo/C,EAAAiO,OAAAl1D,EAAA,SAAAs9G,EAAAhuH,KAAAk2I,cAAAD,EAAAxvI,WAAAzG,KAAAk2I,gBACA,EAmDA,QAAAqB,GAAAzyE,EAAAs6C,GACA,IAAAt6C,EAAAmoB,oBAAA,MAAAmyB,EAEA,KAAA,GADAn/F,MACA9f,EAAA,EAAAA,EAAAi/G,EAAAl+G,OAAAf,IACAi/G,EAAAj/G,GAAAq3I,mBAAAv3H,EAAArZ,KAAAw4G,EAAAj/G,GACA,OAAA8f,GAGA,QAAAw3H,GAAAhyF,EAAAqf,EAAA99C,EAAA8nG,GACA,GAAArpE,EAAAh5B,MACAg5B,EAAAqf,EAAAgqD,EAAA9nG,OACA,CACA,GAAA/G,GAAAwlC,EAAAqf,EAAA99C,EACA/G,IAAAA,EAAAxd,KAAAwd,EAAAxd,KAAAqsH,GACAA,EAAA7uG,IAIA,QAAAy3H,GAAA5yE,EAAA59C,GACA,GAAAywH,GAAAv4B,EAAAt6C,EAAAk7C,WAAA94F,EAAA,OACA,IAAAk4F,EAAAl+G,OAAA,CACA,GAAA02I,GAAA,SAAA9yE,EAAAgqD,EAAA9nG,GAEA,QAAAnZ,GAAA1N,GACA,GAAAA,GAAA03I,EAAA32I,OAAA,MAAA4tH,GAAA,KACA2oB,GAAAI,EAAA13I,GAAA2kE,EAAA99C,EAAA,SAAA/G,GACAA,GAAAA,EAAAuwB,KAAAtvC,OAAA,EAAA4tH,EAAA7uG,GACApS,EAAA1N,EAAA,KALA,GAAA03I,GAAAN,EAAAzyE,EAAAs6C,EAQAvxG,GAAA,GAIA,OAFA+pI,GAAAnrH,OAAA,EACAmrH,EAAAJ,mBAAA,EACAI,EACA,OAAAD,EAAA7yE,EAAA29B,UAAA39B,EAAAqb,YAAA,cACA,SAAArb,GAAA,MAAAnN,GAAAlS,KAAAqyF,SAAAhzE,GAAA6yE,MAAAA,KACAhgF,EAAAlS,KAAAkpE,QACA,SAAA7pD,EAAA99C,GAAA,MAAA2wC,GAAAlS,KAAAkpE,QAAA7pD,EAAA99C,IAEA,aAxYA,GAAAmvH,GAAA,kBACAC,EAAA,wBAIAz+E,GAAAogF,SAAA,SAAAjzE,EAAA+pD,EAAA7nG,GACA,IAAA6nG,EAAA,MAAA/pD,GAAAizE,SAAA/wH,EACAA,IAAAA,EAAAyF,QAAAoiG,EAAApiG,OAAA,EACA,IAAAurH,IAAAvyF,KAAAopE,EACA,IAAA7nG,EAAA,IAAA,GAAAD,KAAAC,GAAAgxH,EAAAjxH,GAAAC,EAAAD,EACA,OAAA+9C,GAAAizE,SAAAC,IAGArgF,EAAAkqD,gBAAA,WAAA,SAAA76F,GACAA,EAAAguH,EAAAh1I,KAAAA,KAAAmgF,UAAA,SAAAn5D,EACA,IAAA0yG,GAAA15H,KAAAy0F,gBACA,MAAAilC,EAAAx4H,OAAA,GAAA,CAIA,GAAAlB,KAAAitF,oBAAA,CACA,IAAAjmE,EAAAy+B,KAAA+xF,kBAAA,MAEA,KAAA,GAAAr3I,GAAA,EAAAA,EAAAu5H,EAAAx4H,OAAAf,IACA,GAAAu5H,EAAAv5H,GAAAM,KAAAm2D,MAAA8iE,EAAAv5H,GAAAs5E,OAAA7iB,KAAA,OAGA52D,KAAAwQ,MAAAynI,kBAAAj4I,KAAAwQ,MAAAynI,iBAAAz7G,OACA,IAAAyxF,GAAAjuH,KAAAwQ,MAAAynI,iBAAA,GAAArD,GAAA50I,KAAAgnB,EACAinG,GAAAjnG,QAAAy+B,OAEAkS,EAAAiO,OAAA5lE,KAAA,kBAAAA,MACAiuH,EAAArzF,QAAA,OAGA+8B,EAAAkqD,gBAAA,YAAA,WACA7hH,KAAAwQ,MAAAynI,kBAAAj4I,KAAAwQ,MAAAynI,iBAAAz7G,SAgBA,IAAAnxB,GAAAtL,OAAAsL,uBAAA,SAAA4F,GACA,MAAA3F,YAAA2F,EAAA,IAAA,KAEAinI,EAAAn4I,OAAAm4I,sBAAAnvH,YAEA6rH,GAAA5pI,WACAwxB,MAAA,WACAx8B,KAAAksB,WACAlsB,KAAA8kE,GAAAt0D,MAAAynI,iBAAA,KACAj4I,KAAAyL,KAAA,KACAzL,KAAA8kE,GAAAv9D,IAAA,iBAAAvH,KAAA+0I,cAEA/0I,KAAA4uE,QAAA5uE,KAAA0Q,MAAAinD,EAAAiO,OAAA5lE,KAAA0Q,KAAA,SACA1Q,KAAA4uE,QAAA5uE,KAAA4uE,OAAApyC,QACAm7B,EAAAiO,OAAA5lE,KAAA8kE,GAAA,gBAAA9kE,KAAA8kE,MAGA54C,OAAA,WACA,MAAAlsB,MAAA8kE,GAAAt0D,MAAAynI,kBAAAj4I,MAGAy1I,KAAA,SAAA/kI,EAAAvQ,GACA,GAAA8tH,GAAAv9G,EAAA8/B,KAAArwC,EACA8tH,GAAAxoE,KAAAwoE,EAAAxoE,KAAAzlD,KAAA8kE,GAAAp0D,EAAAu9G,GACAjuH,KAAA8kE,GAAAysB,aAAAn6E,EAAA62G,GAAAA,EAAAj5F,MAAAtkB,EAAAskB,KACAi5F,EAAA9wF,IAAAzsB,EAAAysB,GAAA,YACAw6B,EAAAiO,OAAAl1D,EAAA,OAAAu9G,GACAjuH,KAAAw8B,SAGAypC,eAAA,WACAjmE,KAAAg8C,WACAk8F,EAAAl4I,KAAAg8C,UACAh8C,KAAAg8C,SAAA,EAGA,IAAA90B,GAAAlnB,KAAA8kE,GAAAqb,YAAAvpB,EAAA52D,KAAA8kE,GAAAjH,QAAA32C,EAAA0vC,KACA,IAAA1vC,EAAA0vC,MAAA52D,KAAA60I,SAAAj+E,MAAAA,EAAA11D,OAAAgmB,EAAAuU,IAAAz7B,KAAA80I,SAAA90I,KAAA60I,SAAAp5G,IACAvU,EAAAuU,GAAAz7B,KAAA60I,SAAAp5G,IAAAz7B,KAAA8kE,GAAAmoB,sBACA/lE,EAAAuU,IAAAz7B,KAAAgnB,QAAAmxH,gBAAAz0I,KAAAkzD,EAAAxhC,OAAAlO,EAAAuU,GAAA,IACAz7B,KAAAw8B,YACA;gNACA,GAAAob,GAAA53C,IACAA,MAAAg8C,SAAA3wC,EAAA,WAAAusC,EAAAhd,WACA56B,KAAA4uE,QAAA5uE,KAAA4uE,OAAAlzD,YAIAkf,OAAA,SAAAppB,GACA,GAAA,MAAAxR,KAAAyL,KAAA,CACA,GAAAmsC,GAAA53C,KAAAo4I,IAAAp4I,KAAAyL,IACAgsI,GAAAz3I,KAAAgnB,QAAAy+B,KAAAzlD,KAAA8kE,GAAA9kE,KAAAgnB,QAAA,SAAAtW,GACAknC,EAAAnsC,MAAA2sI,GAAAxgG,EAAAygG,aAAA3nI,EAAAc,OAIA6mI,aAAA,SAAA3nI,EAAAc,GACAxR,KAAA0Q,MAAAinD,EAAAiO,OAAA5lE,KAAA0Q,KAAA,SAEA,IAAAslI,GAAAh2I,KAAA4uE,QAAA5uE,KAAA4uE,OAAAonE,QAAAxkI,GAAAxR,KAAAgnB,QAAAsxH,cACAt4I,MAAA4uE,QAAA5uE,KAAA4uE,OAAApyC,QAEAx8B,KAAA0Q,KAAAA,EAEAA,GAAAA,EAAA8/B,KAAAtvC,SACA80I,GAAA,GAAAtlI,EAAA8/B,KAAAtvC,OACAlB,KAAAy1I,KAAA/kI,EAAA,IAEA1Q,KAAA4uE,OAAA,GAAAmnE,GAAA/1I,KAAA0Q,GACAinD,EAAAiO,OAAAl1D,EAAA,aAuLAqlI,EAAA/qI,WACAwxB,MAAA,WACA,GAAAx8B,KAAAiuH,WAAAr/C,QAAA5uE,KAAA,CACAA,KAAAiuH,WAAAr/C,OAAA,KACA5uE,KAAAi2I,MAAAt1I,WAAAC,YAAAZ,KAAAi2I,OACAj2I,KAAAiuH,WAAAnpD,GAAA06C,aAAAx/G,KAAA62F,OAEA,IAAA/xB,GAAA9kE,KAAAiuH,WAAAnpD,EACA9kE,MAAAiuH,WAAAjnG,QAAAiwH,iBACAnyE,EAAAv9D,IAAA,OAAAvH,KAAAmrD,QACA2Z,EAAAv9D,IAAA,QAAAvH,KAAAorD,UAEA0Z,EAAAv9D,IAAA,SAAAvH,KAAAm3I,YAGAz7H,QAAA,WACA1b,KAAAiuH,WAAAnpD,GAAA06C,aAAAx/G,KAAA62F,OACA,IAAAjoB,GAAA5uE,IACAA,MAAA62F,QAAAsb,MAAA,WAAAvjC,EAAAonE,QAAA,IACAh2I,KAAAiuH,WAAAnpD,GAAAy6C,UAAAv/G,KAAA62F,SAGA4+C,KAAA,WACAz1I,KAAAiuH,WAAAwnB,KAAAz1I,KAAA0Q,KAAA1Q,KAAAk2I,eAGAa,aAAA,SAAA52I,EAAA22I,GAKA,GAJA32I,GAAAH,KAAA0Q,KAAA8/B,KAAAtvC,OACAf,EAAA22I,EAAA92I,KAAA0Q,KAAA8/B,KAAAtvC,OAAA,EAAA,EACAf,EAAA,IACAA,EAAA22I,EAAA,EAAA92I,KAAA0Q,KAAA8/B,KAAAtvC,OAAA,GACAlB,KAAAk2I,cAAA/1I,EAAA,CACA,GAAAm9C,GAAAt9C,KAAAi2I,MAAAxvI,WAAAzG,KAAAk2I,aACA54F,KAAAA,EAAApnC,UAAAonC,EAAApnC,UAAAhT,QAAA,IAAAkzI,EAAA,KACA94F,EAAAt9C,KAAAi2I,MAAAxvI,WAAAzG,KAAAk2I,aAAA/1I,GACAm9C,EAAApnC,WAAA,IAAAkgI,EACA94F,EAAAxX,UAAA9lC,KAAAi2I,MAAA7uH,UACApnB,KAAAi2I,MAAA7uH,UAAAk2B,EAAAxX,UAAA,EACAwX,EAAAxX,UAAAwX,EAAApuB,aAAAlvB,KAAAi2I,MAAA7uH,UAAApnB,KAAAi2I,MAAAh2G,eACAjgC,KAAAi2I,MAAA7uH,UAAAk2B,EAAAxX,UAAAwX,EAAApuB,aAAAlvB,KAAAi2I,MAAAh2G,aAAA,GACA03B,EAAAiO,OAAA5lE,KAAA0Q,KAAA,SAAA1Q,KAAA0Q,KAAA8/B,KAAAxwC,KAAAk2I,cAAA54F,KAGA05F,aAAA,WACA,MAAAzsI,MAAA8sB,MAAAr3B,KAAAi2I,MAAAh2G,aAAAjgC,KAAAi2I,MAAAvvI,WAAAwoB,eAAA,IAgDAyoC,EAAA6pD,eAAA,OAAA,QACAtlG,QAAAw7H,IAGA//E,EAAA6pD,eAAA,OAAA,WAAA,SAAA18C,EAAA99C,GACA,GACAigB,GADA5iC,EAAAygE,EAAAqb,YAAA7/B,EAAAwkB,EAAA+6C,WAAAx7G,GACA2wB,EAAA2iC,EAAAoH,IAAA16D,EAAAuyD,KAAAtW,EAAA17C,OAAAu4B,EAAA94B,CACAi8C,GAAA17C,MAAAP,EAAAo3B,IAAA,KAAA/3B,KAAA48C,EAAAoX,OAAAtiC,OAAA/wB,EAAAo3B,GAAA6kB,EAAA17C,MAAA,IACAqiC,EAAAqZ,EAAAoX,OAAA1/B,OAAA,EAAA3zB,EAAAo3B,GAAA6kB,EAAA17C,QAEAqiC,EAAA,GACAjS,EAAA3wB,EAGA,KAAA,GADAk9D,MACAphE,EAAA,EAAAA,EAAA6mB,EAAA2wH,MAAAz2I,OAAAf,IAAA,CACA,GAAAo/F,GAAAv4E,EAAA2wH,MAAAx3I,EACAo/F,GAAA58F,MAAA,EAAAskC,EAAA/lC,SAAA+lC,GACAs6B,EAAA36D,KAAA24F,GAGA,GAAAh+B,EAAArgE,OAAA,OAAAsvC,KAAA+wB,EAAAvsC,KAAAA,EAAAmI,GAAAA,KAGAw6B,EAAA+gC,SAAA1nD,aAAA2mB,EAAAogF,QAEA,IAAA7C,IACAzvF,KAAAkS,EAAAlS,KAAA8yF,KACAD,gBAAA,EACAhC,eAAA,EACA6B,gBAAA,mBACAlB,gBAAA,EACAK,uBAAA,EACAn1G,UAAA,KACAwzG,WAAA,KACA38C,UAAA,KAGArhC,GAAAqnD,aAAA,cAAA,QC3bA,SAAAhpB,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,8BAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,YAEA,IAAA6gF,GAAA,QAEA7gF,GAAA6pD,eAAA,OAAA,UAAA,SAAA7qD,EAAA3vC,GAKA,IAJA,GAAAu4E,GAAAv4E,GAAAA,EAAAu4E,MAAAi5C,EACArsF,EAAAnlC,GAAAA,EAAAmlC,OAJA,IAKA9nD,EAAAsyD,EAAAwpB,YAAAyS,EAAAj8B,EAAAkH,QAAAx5D,EAAAuyD,MACA/xD,EAAAR,EAAAo3B,GAAA72B,EAAAC,EACAD,GAAA26F,EAAA77F,KAAAkvF,EAAAx9D,OAAAxwB,EAAA,OAAAA,CAKA,KAAA,GAJA6zI,GAAA7zI,GAAAC,GAAA+tF,EAAAjwF,MAAAiC,EAAAC,GAEA2rC,EAAAxpB,GAAAA,EAAAwpB,SAAAmQ,KACAlrC,EAAA,GAAAd,QAAA4qF,EAAA7hF,OAAA,KACAlK,GAAA,EAAAA,GAAA,EAAAA,GAAA,EAEA,IADA,GAAAojD,GAAAvyD,EAAAuyD,KAAAy9E,EAAA9pI,KAAAyuD,IAAAzuD,KAAAC,IAAAosD,EAAApjD,EAAA24C,EAAAwK,EAAA4zB,aAAA5zB,EAAA2N,YAAA9wD,EACAojD,GAAAy9E,EAAAz9E,GAAApjD,EAEA,IADA,GAAAvT,GAAAM,EAAAo2D,EAAAkH,QAAAjH,GACA32D,EAAAwV,EAAAhR,KAAAlE,IACAq2D,GAAAvyD,EAAAuyD,MAAA32D,EAAA,KAAAw4I,GACAA,GAAA,GAAAx4I,EAAA,GAAA23B,YAAA6gH,EAAA,IAAA9nI,OAAA3F,UAAA+F,eAAA/P,KAAA2/C,EAAA1gD,EAAA,MACA0gD,EAAA1gD,EAAA,KAAA,EACAuwC,EAAA5pC,KAAA3G,EAAA,IAKA,QAAAuwC,KAAAA,EAAAxb,KAAA2iC,EAAAoH,IAAA16D,EAAAuyD,KAAAhyD,GAAAu4B,GAAAw6B,EAAAoH,IAAA16D,EAAAuyD,KAAA/xD,QCnCA,SAAAmxF,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,gCAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GAoBA,QAAA+gF,GAAA5zE,GACAA,EAAAt0D,MAAAw9B,cACA82B,EAAAt0D,MAAAw9B,YAAArtC,WAAAC,YAAAkkE,EAAAt0D,MAAAw9B,aACA82B,EAAAt0D,MAAAw9B,YAAA,MAGA,QAAA2qG,GAAA7zE,GACA4zE,EAAA5zE,EACA,IAAA/M,GAAA+M,EAAAt0D,MAAAw9B,YAAAnuC,SAAAS,cAAA,MACAy3D,GAAArzD,MAAAggB,QAAA,+BACAqzC,EAAArzD,MAAAu5B,UAAA6mC,EAAAsI,UAAA,aACArV,EAAA7hD,UAAA,wBACA,IAAA0iI,GAAA9zE,EAAAsI,UAAA,cACA,iBAAAwrE,KAAAA,EAAA/4I,SAAAgH,eAAA+xI,IACA7gF,EAAAr3D,YAAAk4I,GACA9zE,EAAA3/D,QAAA61D,UAAAj3C,aAAAg0C,EAAA+M,EAAA3/D,QAAA61D,UAAAt0D,YAGA,QAAAykD,GAAA2Z,GACAtW,EAAAsW,IAAA6zE,EAAA7zE,GAEA,QAAAqnD,GAAArnD,GACA,GAAAtf,GAAAsf,EAAA6/B,oBAAAl4F,EAAA+hD,EAAAsW,EACAtf,GAAAtvC,UAAAsvC,EAAAtvC,UAAAhT,QAAA,oBAAA,KAAAuJ,EAAA,oBAAA,IAEAA,EAAAksI,EAAA7zE,GACA4zE,EAAA5zE,GAGA,QAAAtW,GAAAsW,GACA,MAAA,KAAAA,EAAAwmC,aAAA,KAAAxmC,EAAAjH,QAAA,GAjDAlG,EAAAqnD,aAAA,cAAA,GAAA,SAAAl6C,EAAA56C,EAAAjC,GACA,GAAAzN,GAAAyN,GAAAA,GAAA0vC,EAAAkmC,IACA,IAAA3zE,IAAA1P,EACAsqD,EAAAthD,GAAA,OAAA2nC,GACA2Z,EAAAthD,GAAA,SAAA2oG,GACArnD,EAAAthD,GAAA,UAAA2oG,GACAA,EAAArnD,OACA,KAAA56C,GAAA1P,EAAA,CACAsqD,EAAAv9D,IAAA,OAAA4jD,GACA2Z,EAAAv9D,IAAA,SAAA4kH,GACArnD,EAAAv9D,IAAA,UAAA4kH,GACAusB,EAAA5zE,EACA,IAAAtf,GAAAsf,EAAA6/B,mBACAn/C,GAAAtvC,UAAAsvC,EAAAtvC,UAAAhT,QAAA,oBAAA,IAGAgnB,IAAA46C,EAAAtsD,YAAA2yC,EAAA2Z,OCxBA,SAAAkxB,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,4BAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,YAEAA,GAAA0R,QAAA,SAAA3R,EAAAmhF,EAAA/pB,EAAA9nG,GACA,GAAAsvC,GAAAqB,EAAAsQ,QAAAtQ,EAAAhkC,SAAAklH,GACAr0I,EAAA,UAAAd,KAAA+pC,UAAAC,WACAorG,EAAAt0I,IAAA,MAAA3E,SAAAmlG,cAAAnlG,SAAAmlG,aAAA,EAEA,IAAA8pB,EAAApuH,YAAA,CACA,GAAA+3D,GAAAzxC,GAAAA,EAAAyxC,SAAAd,EAAAhkC,SAAA8kC,QACAnb,EAAAwxE,EAAA9wG,EAAA,CACAs/B,GAAAh3C,UAAA,GACAwoH,EAAA,SAAAvuH,EAAAmE,GACA,GAAA,MAAAnE,EAKA,MAFA+8C,GAAA58C,YAAAb,SAAAgH,eAAAiyI,EAAA,KAAAv4I,SACAyd,EAAA,EAKA,KAAA,GAFA5C,GAAA,GAEA8L,EAAA,IAAA,CACA,GAAAwjB,GAAAnqC,EAAAsQ,QAAA,KAAAqW,EACA,KAAA,GAAAwjB,EAAA,CACAtvB,GAAA7a,EAAAoC,MAAAukB,GACAlJ,GAAAzd,EAAAW,OAAAgmB,CACA,OAEAlJ,GAAA0sB,EAAAxjB,EACA9L,GAAA7a,EAAAoC,MAAAukB,EAAAwjB,EACA,IAAA8S,GAAAib,EAAAz6C,EAAAy6C,CACAz6C,IAAAw/B,CACA,KAAA,GAAAr9C,GAAA,EAAAA,EAAAq9C,IAAAr9C,EAAAib,GAAA,GACA8L,GAAAwjB,EAAA,EAIA,GAAAhmC,EAAA,CACA,GAAA6+D,GAAAjmB,EAAA58C,YAAAb,SAAAS,cAAA,QACAijE,GAAArtD,UAAA,MAAAxR,EAAAxB,QAAA,MAAA,QACAqgE,EAAA7iE,YAAAb,SAAAgH,eAAAuU,QAEAkiC,GAAA58C,YAAAb,SAAAgH,eAAAuU,KAMA,IAAA,GADA6/C,GAAAtD,EAAA85B,WAAA/5B,GAAAlnD,EAAAwW,GAAAA,EAAAxW,OAAAmnD,EAAAmR,WAAAxS,GACAn2D,EAAA,EAAAV,EAAAw7D,EAAA/5D,OAAAf,EAAAV,IAAAU,EAAA,CACAA,GAAA2uH,EAAA,KACA,IAAA9jD,GAAA,GAAArT,GAAAsT,aAAAhQ,EAAA96D,GAEA,MADA6qE,EAAAtT,QAAApB,EAAA+U,WAAA/U,EAAA+U,UAAA76D,IACAw6D,EAAAG,OAAA,CACA,GAAAzmE,GAAA4xD,EAAAhW,MAAA0qB,EAAAx6D,EACAs+G,GAAA9jD,EAAA7S,UAAAzzD,EAAAvE,EAAA6qE,EAAApmE,MAAA4L,GACAw6D,EAAApmE,MAAAomE,EAAA9jD,SC/DA,SAAA8uE,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,gCAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,YAGA,SAAAohF,GAAAC,GACA,GAAA7d,GAAA6d,EAAA7d,KACA,OAAA,OAAAA,EAAAA,GAAA6d,EAAAC,WAAA,IAAA,KACAD,EAAAr6H,OAAA,IAAA,KACAq6H,EAAAE,UAAA,IAAA,IAGA,QAAAC,GAAAH,EAAA7d,GAEA,IAAA,GADAhjE,GAAA4gF,EAAAC,GAAA7gI,EAAAggD,EACAh4D,EAAA,EAAAA,EAAAg7H,EAAAj6H,OAAAf,KAAA,GAAAgY,EAAAtH,QAAAsqH,EAAA/lG,OAAAj1B,MACAgY,GAAAgjH,EAAA/lG,OAAAj1B,GACA,OAAAg4D,IAAAhgD,EAAA6gI,EAAA,GAAArkI,QAAAqkI,EAAAt7H,OAAAvF,GAGA,QAAAihI,GAAAJ,GACA,MAAA,0BAAAt1I,KAAAs1I,EAAAt7H,QAGA,QAAA27H,GAAAzmG,EAAAomG,EAAAp0I,GACAo0I,EAAAG,EAAAH,EAAA,IACA,KAAA,GAAApiF,GAAAhyD,EAAAgyD,KAAAn7B,EAAA72B,EAAA62B,GAAAhqB,EAAAmhC,EAAA0xB,WAAA1N,GAAAnlD,EAAAmlD,IAAAn7B,EAAA,EAAA,CACAu9G,EAAA7qE,UAAA1yC,CACA,IAAAi8B,GAAA9kB,EAAAirB,QAAAjH,GAAA30D,EAAA+2I,EAAAv0I,KAAAizD,EACA,IAAAz1D,EACA,OAAA+yB,KAAA+pC,EAAAnI,EAAA30D,EAAAyY,OACAyiB,GAAA4hC,EAAAnI,EAAA30D,EAAAyY,MAAAzY,EAAA,GAAAf,QACAe,MAAAA,IAIA,QAAAq3I,GAAA1mG,EAAAomG,EAAAp0I,GACA,IAAAw0I,EAAAJ,GAAA,MAAAK,GAAAzmG,EAAAomG,EAAAp0I,EAEAo0I,GAAAG,EAAAH,EAAA,KAEA,KAAA,GADAthF,GAAAzmB,EAAA,EACA2lB,EAAAhyD,EAAAgyD,KAAAnlD,EAAAmhC,EAAA0xB,WAAA1N,GAAAnlD,GAAA,CAMA,IAAA,GAAAtR,GAAA,EAAAA,EAAA8wC,KACA2lB,EAAAnlD,GADAtR,IAAA,CAEA,GAAAyyF,GAAAhgD,EAAAirB,QAAAjH,IACAc,GAAA,MAAAA,EAAAk7B,EAAAl7B,EAAA,KAAAk7B,EAEA3hD,GAAA,EACA+nG,EAAA7qE,UAAAvpE,EAAA62B,EACA,IAAAx5B,GAAA+2I,EAAAv0I,KAAAizD,EACA,IAAAz1D,EAAA,CACA,GAAA+hB,GAAA0zC,EAAA/0D,MAAA,EAAAV,EAAAyY,OAAAnK,MAAA,MAAAgpI,EAAAt3I,EAAA,GAAAsO,MAAA,MACAo9G,EAAA/oH,EAAAgyD,KAAA5yC,EAAA9iB,OAAA,EAAAs/D,EAAAx8C,EAAAA,EAAA9iB,OAAA,GAAAA,MACA,QAAA8zB,KAAA+pC,EAAA4uD,EAAAntD,GACArjC,GAAA4hC,EAAA4uD,EAAA4rB,EAAAr4I,OAAA,EACA,GAAAq4I,EAAAr4I,OAAAs/D,EAAA+4E,EAAA,GAAAr4I,OAAAq4I,EAAAA,EAAAr4I,OAAA,GAAAA,QACAe,MAAAA,KAKA,QAAAu3I,GAAA9hF,EAAAshF,GAEA,IADA,GAAA/2I,GAAAw3I,EAAA,IACA,CACAT,EAAA7qE,UAAAsrE,CACA,IAAAC,GAAAV,EAAAv0I,KAAAizD,EACA,KAAAgiF,EAAA,MAAAz3I,EAGA,IAFAA,EAAAy3I,GACAD,EAAAx3I,EAAAyY,OAAAzY,EAAA,GAAAf,QAAA,KACAw2D,EAAAx2D,OAAA,MAAAe,IAIA,QAAA03I,GAAA/mG,EAAAomG,EAAAp0I,GACAo0I,EAAAG,EAAAH,EAAA,IACA,KAAA,GAAApiF,GAAAhyD,EAAAgyD,KAAAn7B,EAAA72B,EAAA62B,GAAAjqB,EAAAohC,EAAA23C,YAAA3zB,GAAAplD,EAAAolD,IAAAn7B,GAAA,EAAA,CACA,GAAAi8B,GAAA9kB,EAAAirB,QAAAjH,EACAn7B,IAAA,IAAAi8B,EAAAA,EAAA/0D,MAAA,EAAA84B,GACA,IAAAx5B,GAAAu3I,EAAA9hF,EAAAshF,EACA,IAAA/2I,EACA,OAAA+yB,KAAA+pC,EAAAnI,EAAA30D,EAAAyY,OACAyiB,GAAA4hC,EAAAnI,EAAA30D,EAAAyY,MAAAzY,EAAA,GAAAf,QACAe,MAAAA,IAIA,QAAA23I,GAAAhnG,EAAAomG,EAAAp0I,GACAo0I,EAAAG,EAAAH,EAAA,KAEA,KAAA,GADAthF,GAAAzmB,EAAA,EACA2lB,EAAAhyD,EAAAgyD,KAAAplD,EAAAohC,EAAA23C,YAAA3zB,GAAAplD,GAAA,CACA,IAAA,GAAArR,GAAA,EAAAA,EAAA8wC,EAAA9wC,IAAA,CACA,GAAAyyF,GAAAhgD,EAAAirB,QAAAjH,IACAc,GAAA,MAAAA,EAAAk7B,EAAAjwF,MAAA,EAAAiC,EAAA62B,IAAAm3D,EAAA,KAAAl7B,EAEAzmB,GAAA,CAEA,IAAAhvC,GAAAu3I,EAAA9hF,EAAAshF,EACA,IAAA/2I,EAAA,CACA,GAAA+hB,GAAA0zC,EAAA/0D,MAAA,EAAAV,EAAAyY,OAAAnK,MAAA,MAAAgpI,EAAAt3I,EAAA,GAAAsO,MAAA,MACAo9G,EAAA/2D,EAAA5yC,EAAA9iB,OAAAs/D,EAAAx8C,EAAAA,EAAA9iB,OAAA,GAAAA,MACA,QAAA8zB,KAAA+pC,EAAA4uD,EAAAntD,GACArjC,GAAA4hC,EAAA4uD,EAAA4rB,EAAAr4I,OAAA,EACA,GAAAq4I,EAAAr4I,OAAAs/D,EAAA+4E,EAAA,GAAAr4I,OAAAq4I,EAAAA,EAAAr4I,OAAA,GAAAA,QACAe,MAAAA,KAgBA,QAAA43I,GAAAC,EAAAC,EAAA7yH,EAAA8yH,GACA,GAAAF,EAAA54I,QAAA64I,EAAA74I,OAAA,MAAAgmB,EACA,KAAA,GAAA8xC,GAAA,EAAAxuD,EAAA0c,EAAA3c,KAAAC,IAAA,EAAAsvI,EAAA54I,OAAA64I,EAAA74I,UAAA,CACA,GAAA83D,GAAAxuD,EAAA,MAAAwuD,EACA,IAAAsB,GAAAtB,EAAAxuD,GAAA,EACA6zC,EAAA27F,EAAAF,EAAAn3I,MAAA,EAAA23D,IAAAp5D,MACA,IAAAm9C,GAAAn3B,EAAA,MAAAozC,EACAjc,GAAAn3B,EAAA1c,EAAA8vD,EACAtB,EAAAsB,EAAA,GAIA,QAAA2/E,GAAArnG,EAAAgP,EAAAh9C,EAAAwjI,GAGA,IAAAxmF,EAAA1gD,OAAA,MAAA,KACA,IAAAgwI,GAAA9I,EAAA8R,EAAAC,EACAl/E,EAAAi2E,EAAAtvF,GAAArxC,MAAA,WAEAoxC,GAAA,IAAA,GAAAiV,GAAAhyD,EAAAgyD,KAAAn7B,EAAA72B,EAAA62B,GAAAhqB,EAAAmhC,EAAA0xB,WAAA,EAAArJ,EAAA/5D,OAAA01D,GAAAnlD,EAAAmlD,IAAAn7B,EAAA,EAAA,CACA,GAAAq+G,GAAAlnG,EAAAirB,QAAAjH,GAAAj0D,MAAA84B,GAAAi8B,EAAAw5E,EAAA4I,EACA,IAAA,GAAA7+E,EAAA/5D,OAAA,CACA,GAAAqgE,GAAA7J,EAAA7mD,QAAAoqD,EAAA,GACA,KAAA,GAAAsG,EAAA,QAAA5f,EACA,IAAA/8C,GAAAi1I,EAAAC,EAAApiF,EAAA6J,EAAA2vE,GAAAz1G,CACA,QAAAzG,KAAA+pC,EAAAnI,EAAAijF,EAAAC,EAAApiF,EAAA6J,EAAA2vE,GAAAz1G,GACA0B,GAAA4hC,EAAAnI,EAAAijF,EAAAC,EAAApiF,EAAA6J,EAAAtG,EAAA,GAAA/5D,OAAAgwI,GAAAz1G,IAEA,GAAA2+G,GAAA1iF,EAAAx2D,OAAA+5D,EAAA,GAAA/5D,MACA,IAAAw2D,EAAA/0D,MAAAy3I,IAAAn/E,EAAA,GAAA,CACA,IAAA,GAAA96D,GAAA,EAAAA,EAAA86D,EAAA/5D,OAAA,EAAAf,IACA,GAAA+wI,EAAAt+F,EAAAirB,QAAAjH,EAAAz2D,KAAA86D,EAAA96D,GAAA,QAAAwhD,EACA,IAAA98C,GAAA+tC,EAAAirB,QAAAjH,EAAAqE,EAAA/5D,OAAA,GAAA6yI,EAAA7C,EAAArsI,GAAAy/D,EAAArJ,EAAAA,EAAA/5D,OAAA,EACA,IAAA6yI,EAAApxI,MAAA,EAAA2hE,EAAApjE,SAAAojE,EACA,OAAAtvC,KAAA+pC,EAAAnI,EAAAijF,EAAAC,EAAApiF,EAAA0iF,EAAAlJ,GAAAz1G,GACA0B,GAAA4hC,EAAAnI,EAAAqE,EAAA/5D,OAAA,EAAA24I,EAAAh1I,EAAAkvI,EAAAzvE,EAAApjE,OAAAgwI,OAKA,QAAAmJ,GAAAznG,EAAAgP,EAAAh9C,EAAAwjI,GACA,IAAAxmF,EAAA1gD,OAAA,MAAA,KACA,IAAAgwI,GAAA9I,EAAA8R,EAAAC,EACAl/E,EAAAi2E,EAAAtvF,GAAArxC,MAAA,WAEAoxC,GAAA,IAAA,GAAAiV,GAAAhyD,EAAAgyD,KAAAn7B,EAAA72B,EAAA62B,GAAAjqB,EAAAohC,EAAA23C,YAAA,EAAAtvB,EAAA/5D,OAAA01D,GAAAplD,EAAAolD,IAAAn7B,GAAA,EAAA,CACA,GAAAq+G,GAAAlnG,EAAAirB,QAAAjH,EACAn7B,IAAA,IAAAq+G,EAAAA,EAAAn3I,MAAA,EAAA84B,GACA,IAAAi8B,GAAAw5E,EAAA4I,EACA,IAAA,GAAA7+E,EAAA/5D,OAAA,CACA,GAAAqgE,GAAA7J,EAAA9/B,YAAAqjC,EAAA,GACA,KAAA,GAAAsG,EAAA,QAAA5f,EACA,QAAA3sB,KAAA+pC,EAAAnI,EAAAijF,EAAAC,EAAApiF,EAAA6J,EAAA2vE,IACA/zG,GAAA4hC,EAAAnI,EAAAijF,EAAAC,EAAApiF,EAAA6J,EAAAtG,EAAA,GAAA/5D,OAAAgwI,KAEA,GAAA5sE,GAAArJ,EAAAA,EAAA/5D,OAAA,EACA,IAAAw2D,EAAA/0D,MAAA,EAAA2hE,EAAApjE,SAAAojE,EAAA,CACA,IAAA,GAAAnkE,GAAA,EAAAyE,EAAAgyD,EAAAqE,EAAA/5D,OAAA,EAAAf,EAAA86D,EAAA/5D,OAAA,EAAAf,IACA,GAAA+wI,EAAAt+F,EAAAirB,QAAAj5D,EAAAzE,KAAA86D,EAAA96D,GAAA,QAAAwhD,EACA,IAAA7rC,GAAA88B,EAAAirB,QAAAjH,EAAA,EAAAqE,EAAA/5D,QAAAo5I,EAAApJ,EAAAp7H,EACA,IAAAwkI,EAAA33I,MAAA23I,EAAAp5I,OAAA+5D,EAAA,GAAA/5D,SAAA+5D,EAAA,GACA,OAAAjmC,KAAA+pC,EAAAnI,EAAA,EAAAqE,EAAA/5D,OAAA24I,EAAA/jI,EAAAwkI,EAAAxkI,EAAA5U,OAAA+5D,EAAA,GAAA/5D,OAAAgwI,IACA/zG,GAAA4hC,EAAAnI,EAAAijF,EAAAC,EAAApiF,EAAA4M,EAAApjE,OAAAgwI,OAKA,QAAAqJ,GAAA3nG,EAAAgP,EAAA16B,EAAAF,GACAhnB,KAAAw6I,cAAA,EACAx6I,KAAA4yC,IAAAA,EACA1rB,EAAAA,EAAA0rB,EAAA2sB,QAAAr4C,GAAA63C,EAAA,EAAA,GACA/+D,KAAAknB,KAAA8N,KAAA9N,EAAAiW,GAAAjW,EAEA,IAAAkhH,EACA,iBAAAphH,GACAohH,EAAAphH,EAAAohH,UAEAA,EAAAphH,EACAA,EAAA,MAGA,gBAAA46B,IACA,MAAAwmF,IAAAA,GAAA,GACApoI,KAAAiU,QAAA,SAAAoH,EAAA6L,GACA,OAAA7L,EAAAg/H,EAAAJ,GAAArnG,EAAAgP,EAAA16B,EAAAkhH,MAGAxmF,EAAAu3F,EAAAv3F,EAAA,MACA56B,IAAA,IAAAA,EAAAkyH,UAKAl5I,KAAAiU,QAAA,SAAAoH,EAAA6L,GACA,OAAA7L,EAAAs+H,EAAAN,GAAAzmG,EAAAgP,EAAA16B,IALAlnB,KAAAiU,QAAA,SAAAoH,EAAA6L,GACA,OAAA7L,EAAAu+H,EAAAN,GAAA1mG,EAAAgP,EAAA16B,KAlNA,GA6GAgzH,GAAAC,EA7GAp7E,EAAApH,EAAAoH,GA8GAzpD,QAAAtK,UAAAyvI,WACAP,EAAA,SAAA7mH,GAAA,MAAAA,GAAAonH,UAAA,OAAAl5I,eACA44I,EAAA,SAAA9mH,GAAA,MAAAA,GAAAonH,UAAA,UAEAP,EAAA,SAAA7mH,GAAA,MAAAA,GAAA9xB,eACA44I,EAAA,SAAA9mH,GAAA,MAAAA,KAwGAknH,EAAAvvI,WACA0vI,SAAA,WAAA,MAAA16I,MAAAkU,MAAA,IACAymI,aAAA,WAAA,MAAA36I,MAAAkU,MAAA,IAEAA,KAAA,SAAAmH,GAKA,IAJA,GAAA4E,GAAAjgB,KAAAiU,QAAAoH,EAAArb,KAAA4yC,IAAA2sB,QAAAlkD,EAAArb,KAAAknB,IAAA8N,KAAAh1B,KAAAknB,IAAAiW,KAIAld,GAAA,GAAA03C,EAAAoqD,OAAA9hG,EAAA+U,KAAA/U,EAAAkd,KACA9hB,EACA4E,EAAA+U,KAAAyG,GAAAxb,EAAA+U,KAAA+pC,EAAA9+C,EAAA+U,KAAA4hC,KAAA32C,EAAA+U,KAAAyG,GAAA,GACAxb,EAAAA,EAAA+U,KAAA4hC,MAAA52D,KAAA4yC,IAAA23C,YAAA,KACAvqF,KAAAiU,QAAAoH,EAAArb,KAAA4yC,IAAA2sB,QAAAR,EAAA9+C,EAAA+U,KAAA4hC,KAAA,KAEA32C,EAAAkd,GAAA1B,GAAAz7B,KAAA4yC,IAAAirB,QAAA59C,EAAAkd,GAAAy5B,MAAA11D,OAAA+e,EAAAkd,GAAA4hC,EAAA9+C,EAAAkd,GAAAy5B,KAAA32C,EAAAkd,GAAA1B,GAAA,GACAxb,EAAAA,EAAAkd,GAAAy5B,MAAA52D,KAAA4yC,IAAA0xB,WAAA,KACAtkE,KAAAiU,QAAAoH,EAAA0jD,EAAA9+C,EAAAkd,GAAAy5B,KAAA,EAAA,GAIA,IAAA32C,EAGA,MAFAjgB,MAAAknB,IAAAjH,EACAjgB,KAAAw6I,cAAA,EACAx6I,KAAAknB,IAAAjlB,QAAA,CAEA,IAAA4C,GAAAk6D,EAAA1jD,EAAArb,KAAA4yC,IAAA23C,YAAAvqF,KAAA4yC,IAAA0xB,WAAA,EAAA,EAEA,OADAtkE,MAAAknB,KAAA8N,KAAAnwB,EAAAs4B,GAAAt4B,GACA7E,KAAAw6I,cAAA,GAIAxlH,KAAA,WAAA,GAAAh1B,KAAAw6I,aAAA,MAAAx6I,MAAAknB,IAAA8N,MACAmI,GAAA,WAAA,GAAAn9B,KAAAw6I,aAAA,MAAAx6I,MAAAknB,IAAAiW,IAEAj6B,QAAA,SAAAg5G,EAAArnE,GACA,GAAA70C,KAAAw6I,aAAA,CACA,GAAAv/E,GAAAtD,EAAA85B,WAAAyqB,EACAl8G,MAAA4yC,IAAA2+C,aAAAt2B,EAAAj7D,KAAAknB,IAAA8N,KAAAh1B,KAAAknB,IAAAiW,GAAA0X,GACA70C,KAAAknB,IAAAiW,GAAA4hC,EAAA/+D,KAAAknB,IAAA8N,KAAA4hC,KAAAqE,EAAA/5D,OAAA,EACA+5D,EAAAA,EAAA/5D,OAAA,GAAAA,QAAA,GAAA+5D,EAAA/5D,OAAAlB,KAAAknB,IAAA8N,KAAAyG,GAAA,OAIAk8B,EAAAkqD,gBAAA,kBAAA,SAAAjgE,EAAA16B,EAAAkhH,GACA,MAAA,IAAAmS,GAAAv6I,KAAA4yC,IAAAgP,EAAA16B,EAAAkhH,KAEAzwE,EAAAmqD,mBAAA,kBAAA,SAAAlgE,EAAA16B,EAAAkhH,GACA,MAAA,IAAAmS,GAAAv6I,KAAA4hD,EAAA16B,EAAAkhH,KAGAzwE,EAAAkqD,gBAAA,gBAAA,SAAAjgE,EAAAwmF,GAGA,IAFA,GAAAvtD,MACAx2E,EAAArE,KAAA46I,gBAAAh5F,EAAA5hD,KAAAmgF,UAAA,QAAAioD,GACA/jI,EAAAq2I,cACA/iF,EAAAoqD,OAAA19G,EAAA84B,KAAAn9B,KAAAmgF,UAAA,OAAA,IACAtF,EAAAj0E,MAAA6yE,OAAAp1E,EAAA2wB,OAAAv0B,KAAA4D,EAAA84B,MAEA09C,GAAA35E,QACAlB,KAAAwrG,cAAA3wB,EAAA,OC7RA,SAAAmb,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,0BAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,QAAAkjF,GAAA/1E,EAAA5iC,EAAAmB,GACA,GACAy3G,GADA/rH,EAAA+1C,EAAA6/B,mBAcA,OAZAm2C,GAAA/rH,EAAAruB,YAAAb,SAAAS,cAAA,QAEAw6I,EAAA5kI,UADAmtB,EACA,6CAEA,0CAEA,gBAAAnB,GACA44G,EAAAx0I,UAAA47B,EAEA44G,EAAAp6I,YAAAwhC,GAEAy1B,EAAA9tC,SAAAkF,EAAA,iBACA+rH,EAGA,QAAAC,GAAAj2E,EAAA5P,GACA4P,EAAAt0D,MAAAwqI,0BACAl2E,EAAAt0D,MAAAwqI,2BACAl2E,EAAAt0D,MAAAwqI,yBAAA9lF,EAGAyC,EAAAkqD,gBAAA,aAAA,SAAA3/E,EAAA4sF,EAAA9nG,GAOA,QAAAwV,GAAA04B,GACA,GAAA,gBAAAA,GACAsqC,EAAAjsF,MAAA2hD,MACA,CACA,GAAA+lF,EAAA,MACAA,IAAA,EACAtjF,EAAA8lB,QAAAq9D,EAAAn6I,WAAA,iBACAm6I,EAAAn6I,WAAAC,YAAAk6I,GACA50I,EAAAqS,QAEAyO,EAAAk0H,SAAAl0H,EAAAk0H,QAAAJ,IAhBA9zH,IAAAA,MAEA+zH,EAAA/6I,KAAA,KAEA,IAgBAiZ,GAhBA6hI,EAAAD,EAAA76I,KAAAkiC,EAAAlb,EAAAqc,QACA43G,GAAA,EAAA/0I,EAAAlG,KAeAw/F,EAAAs7C,EAAAt1I,qBAAA,SAAA,EAqCA,OApCAg6F,IACAA,EAAAjnF,QAEAyO,EAAAzT,QACAisF,EAAAjsF,MAAAyT,EAAAzT,OACA,IAAAyT,EAAAm0H,mBACA37C,EAAAvlF,UAIA+M,EAAAskC,SACAqM,EAAAn0C,GAAAg8E,EAAA,QAAA,SAAA//F,GAAAunB,EAAAskC,QAAA7rD,EAAA+/F,EAAAjsF,MAAAipB,KACAxV,EAAA+yE,SACApiC,EAAAn0C,GAAAg8E,EAAA,QAAA,SAAA//F,GAAAunB,EAAA+yE,QAAAt6F,EAAA+/F,EAAAjsF,MAAAipB,KAEAm7B,EAAAn0C,GAAAg8E,EAAA,UAAA,SAAA//F,GACAunB,GAAAA,EAAAyyE,WAAAzyE,EAAAyyE,UAAAh6F,EAAA+/F,EAAAjsF,MAAAipB,MACA,IAAA/8B,EAAA6iB,UAAA,IAAA0E,EAAAo0H,cAAA,IAAA37I,EAAA6iB,WACAk9E,EAAA3+E,OACA82C,EAAA8O,OAAAhnE,GACA+8B,KAEA,IAAA/8B,EAAA6iB,SAAAwsG,EAAAtvB,EAAAjsF,MAAA9T,OAGA,IAAAunB,EAAAq0H,aAAA1jF,EAAAn0C,GAAAg8E,EAAA,OAAAhjE,KACAvjB,EAAA6hI,EAAAt1I,qBAAA,UAAA,MACAmyD,EAAAn0C,GAAAvK,EAAA,QAAA,WACAujB,IACAt2B,EAAAqS,WAGA,IAAAyO,EAAAq0H,aAAA1jF,EAAAn0C,GAAAvK,EAAA,OAAAujB,GAEAvjB,EAAAV,SAEAikB,IAGAm7B,EAAAkqD,gBAAA,cAAA,SAAA3/E,EAAAglB,EAAAlgC,GAKA,QAAAwV,KACAy+G,IACAA,GAAA,EACAtjF,EAAA8lB,QAAAq9D,EAAAn6I,WAAA,iBACAm6I,EAAAn6I,WAAAC,YAAAk6I,GACA50I,EAAAqS,SATAwiI,EAAA/6I,KAAA,KACA,IAAA86I,GAAAD,EAAA76I,KAAAkiC,EAAAlb,GAAAA,EAAAqc,QACA9gB,EAAAu4H,EAAAt1I,qBAAA,UACAy1I,GAAA,EAAA/0I,EAAAlG,KAAAs7I,EAAA,CAQA/4H,GAAA,GAAAhK,OACA,KAAA,GAAApY,GAAA,EAAAA,EAAAoiB,EAAArhB,SAAAf,EAAA,CACA,GAAA2S,GAAAyP,EAAApiB,IACA,SAAA2uH,GACAn3D,EAAAn0C,GAAA1Q,EAAA,QAAA,SAAArT,GACAk4D,EAAA4O,iBAAA9mE,GACA+8B,IACAsyF,GAAAA,EAAA5oH,MAEAghD,EAAA/mD,IACAw3D,EAAAn0C,GAAA1Q,EAAA,OAAA,aACAwoI,EACAhwI,WAAA,WAAAgwI,GAAA,GAAA9+G,KAAA,OAEAm7B,EAAAn0C,GAAA1Q,EAAA,QAAA,aAAAwoI,OAYA3jF,EAAAkqD,gBAAA,mBAAA,SAAA3/E,EAAAlb,GAMA,QAAAwV,KACAy+G,IACAA,GAAA,EACAlyH,aAAAwyH,GACA5jF,EAAA8lB,QAAAq9D,EAAAn6I,WAAA,iBACAm6I,EAAAn6I,WAAAC,YAAAk6I,IAVAC,EAAA/6I,KAAAw8B,EACA,IACA++G,GADAT,EAAAD,EAAA76I,KAAAkiC,EAAAlb,GAAAA,EAAAqc,QACA43G,GAAA,EACAttI,EAAAqZ,OAAA,KAAAA,EAAArZ,SAAAqZ,EAAArZ,SAAA,GAkBA,OARAgqD,GAAAn0C,GAAAs3H,EAAA,QAAA,SAAAr7I,GACAk4D,EAAA4O,iBAAA9mE,GACA+8B,MAGA7uB,IACA4tI,EAAAjwI,WAAAkxB,EAAA7uB,IAEA6uB,MCnJA,SAAAw5D,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,wBAAAA,QAAA,kBAAAA,QAAA,qBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,0BAAA,uBAAA,iBAAA,oBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,YAEA,SAAA6jF,GAAA55F,EAAA2mD,GAMA,MALA,gBAAA3mD,GACAA,EAAA,GAAAjtC,QAAAitC,EAAA1+C,QAAA,sCAAA,QAAAqlG,EAAA,KAAA,KACA3mD,EAAAjjC,SACAijC,EAAA,GAAAjtC,QAAAitC,EAAAlkC,OAAAkkC,EAAAq3F,WAAA,KAAA,OAEA34F,MAAA,SAAA0qB,GACAppB,EAAAusB,UAAAnD,EAAA9jD,GACA,IAAAjlB,GAAA2/C,EAAAn9C,KAAAumE,EAAAtT,OACA,IAAAz1D,GAAAA,EAAAyY,OAAAswD,EAAA9jD,IAEA,MADA8jD,GAAA9jD,KAAAjlB,EAAA,GAAAf,QAAA,EACA,WACAe,GACA+oE,EAAA9jD,IAAAjlB,EAAAyY,MAEAswD,EAAAk9B,cAKA,QAAAuzC,KACAz7I,KAAA07I,QAAA17I,KAAA27I,MAAA37I,KAAA47I,UAAA57I,KAAA4hD,MAAA,KACA5hD,KAAAwpE,QAAA,KAGA,QAAAqyE,GAAA/2E,GACA,MAAAA,GAAAt0D,MAAAmxC,SAAAmjB,EAAAt0D,MAAAmxC,OAAA,GAAA85F,IAGA,QAAAK,GAAAl6F,GACA,MAAA,gBAAAA,IAAAA,GAAAA,EAAArgD,cAGA,QAAAq5I,GAAA91E,EAAAljB,EAAA16B,GAEA,MAAA49C,GAAA81E,gBAAAh5F,EAAA16B,GAAAkhH,SAAA0T,EAAAl6F,GAAAs3F,WAAA,IAGA,QAAA6C,GAAAj3E,EAAAvkE,EAAAu+G,EAAAk9B,EAAAviD,GACA30B,EAAAm3E,WAAA17I,EAAAy7I,GACAzoI,MAAAurG,EACAq8B,mBAAA,EACAC,cAAA,EACAF,QAAA,WAAAgB,EAAAp3E,IACA20B,UAAAA,IAIA,QAAAqhD,GAAAh2E,EAAAvkE,EAAA47I,EAAAr9B,EAAAj5G,GACAi/D,EAAAm3E,WAAAn3E,EAAAm3E,WAAA17I,EAAAsF,GAAA0N,MAAAurG,EAAAq8B,mBAAA,IACAt1I,EAAA4hH,OAAA00B,EAAAr9B,IAGA,QAAAs9B,GAAAt3E,EAAAvkE,EAAA47I,EAAAE,GACAv3E,EAAAw3E,YAAAx3E,EAAAw3E,YAAA/7I,EAAA87I,GACAzhB,QAAAuhB,IAAAE,EAAA,KAGA,QAAAE,GAAA7kF,GACA,MAAAA,GAAAx0D,QAAA,SAAA,SAAAN,EAAA64B,GACA,MAAA,KAAAA,EAAA,KACA,KAAAA,EAAA,KACAA,IAIA,QAAA+gH,GAAA56F,GACA,GAAA66F,GAAA76F,EAAA3/C,MAAA,qBACA,IAAAw6I,EACA,IAAA76F,EAAA,GAAAjtC,QAAA8nI,EAAA,IAAA,GAAAA,EAAA,GAAA5rI,QAAA,KAAA,GAAA,KACA,MAAApR,QAEAmiD,GAAA26F,EAAA36F,EAIA,QAFA,gBAAAA,GAAA,IAAAA,EAAAA,EAAAl+C,KAAA,OACAk+C,EAAA,MACAA,EAGA,QAAA86F,GAAA53E,EAAAt0D,EAAAoxC,GACApxC,EAAAmsI,UAAA/6F,EACApxC,EAAAoxC,MAAA46F,EAAA56F,GACAkjB,EAAA66C,cAAAnvG,EAAAg5D,QAAAsyE,EAAAtrI,EAAAoxC,QACApxC,EAAAg5D,QAAAgyE,EAAAhrI,EAAAoxC,MAAAk6F,EAAAtrI,EAAAoxC,QACAkjB,EAAA26C,WAAAjvG,EAAAg5D,SACA1E,EAAA83E,yBACApsI,EAAAqsI,WAAArsI,EAAAqsI,SAAA93G,QAAAv0B,EAAAqsI,SAAA,MACArsI,EAAAqsI,SAAA/3E,EAAA83E,uBAAApsI,EAAAoxC,MAAAk6F,EAAAtrI,EAAAoxC,SAIA,QAAAk7F,GAAAh4E,EAAAi4E,EAAAjpH,EAAAqoB,GACA,GAAA3rC,GAAAqrI,EAAA/2E,EACA,IAAAt0D,EAAAoxC,MAAA,MAAA84F,GAAA51E,EAAAi4E,EACA,IAAAtoI,GAAAqwD,EAAAkhB,gBAAAx1E,EAAAorI,SAEA,IADAnnI,YAAAE,SAAA,MAAAF,EAAAiJ,SAAAjJ,EAAA,MACAqf,GAAAgxC,EAAAm3E,WAAA,CACA,GAAAe,GAAA,KACAC,EAAA,SAAAr7F,EAAAl6C,GACAiwD,EAAA8O,OAAA/+D,GACAk6C,IACAA,GAAApxC,EAAAmsI,YACAD,EAAA53E,EAAAt0D,EAAAoxC,GACApxC,EAAAkrI,QAAAlrI,EAAAmrI,MAAA72E,EAAAqb,aAEA68D,IAAAA,EAAAt4I,MAAAsH,QAAA,GACA0uI,EAAA51E,EAAAp9D,EAAAua,SAAA,SAAArf,EAAAu6B,GACA,GAAA29G,EACA39G,GAAAy5B,KAAA,GAAA/2D,SAAA+tE,gBACAktE,EAAAh2E,EAAA3/D,QAAAqgD,QAAAooB,cAAA,wBACAktE,EAAAp0H,wBAAA2c,OAAA,EAAAyhC,EAAA2S,aAAAt6C,EAAA,UAAArnB,OACAknI,EAAAlC,GAAAp2I,MAAAsH,QAAA,OAGA+vI,GAAAj3E,EAAAo4E,EAAAp4E,GAAArwD,EAAAwoI,EAAA,SAAAv1I,EAAAk6C,GACA,GAAA+I,GAAAgN,EAAAhN,QAAAjjD,GACAkuI,EAAA9wE,EAAAsI,UAAA,aAAA2oB,EAAA6/C,GAAAA,EAAAjrF,IAAAgN,EAAAk/B,OAAA/xB,EAAAsI,UAAA,WAAAziB,EACA,aAAAorC,GAAA,YAAAA,GACA,sBAAAA,GAAA,sBAAAA,GACAp+B,EAAA8O,OAAA/+D,GACAg1I,EAAA53E,EAAA+2E,EAAA/2E,GAAAljB,GACAkjB,EAAAw0C,YAAAvjB,IACA,QAAAA,GAAA,kBAAAA,IACAp+B,EAAA8O,OAAA/+D,GACAu1I,EAAAr7F,EAAAl6C,MAGAy0C,GAAA1nC,IACAioI,EAAA53E,EAAAt0D,EAAAiE,GACAimI,EAAA51E,EAAAi4E,QAGAjC,GAAAh2E,EAAAo4E,EAAAp4E,GAAA,cAAArwD,EAAA,SAAAmtC,GACAA,IAAApxC,EAAAoxC,OAAAkjB,EAAAqf,UAAA,WACAu4D,EAAA53E,EAAAt0D,EAAAoxC,GACApxC,EAAAkrI,QAAAlrI,EAAAmrI,MAAA72E,EAAAqb,YACAu6D,EAAA51E,EAAAi4E,OAMA,QAAArC,GAAA51E,EAAAi4E,EAAAjuB,GAAAhqD,EAAAqf,UAAA,WACA,GAAA3zE,GAAAqrI,EAAA/2E,GACA1e,EAAAw0F,EAAA91E,EAAAt0D,EAAAoxC,MAAAm7F,EAAAvsI,EAAAkrI,QAAAlrI,EAAAmrI,QACAv1F,EAAAlyC,KAAA6oI,KACA32F,EAAAw0F,EAAA91E,EAAAt0D,EAAAoxC,MAAAm7F,EAAAplF,EAAAoH,IAAA+F,EAAAR,YAAA3M,EAAAoH,IAAA+F,EAAAylB,YAAA,IACAnkC,EAAAlyC,KAAA6oI,OAEAj4E,EAAA0pB,aAAApoC,EAAApxB,OAAAoxB,EAAAjpB,MACA2nC,EAAA+Z,gBAAA7pD,KAAAoxB,EAAApxB,OAAAmI,GAAAipB,EAAAjpB,MAAA,IACA3sB,EAAAkrI,QAAAt1F,EAAApxB,OAAAxkB,EAAAmrI,MAAAv1F,EAAAjpB,KACA2xF,GAAAA,EAAA1oE,EAAApxB,OAAAoxB,EAAAjpB,SAGA,QAAA++G,GAAAp3E,GAAAA,EAAAqf,UAAA,WACA,GAAA3zE,GAAAqrI,EAAA/2E,EACAt0D,GAAAorI,UAAAprI,EAAAoxC,MACApxC,EAAAoxC,QACApxC,EAAAoxC,MAAApxC,EAAAmsI,UAAA,KACA73E,EAAA66C,cAAAnvG,EAAAg5D,SACAh5D,EAAAqsI,WAAArsI,EAAAqsI,SAAA93G,QAAAv0B,EAAAqsI,SAAA,SAIA,QAAAK,GAAAp4E,GACA,MAAA,yCAAAA,EAAAq8C,OAAA,WAAA,6IAAAr8C,EAAAq8C,OAAA,uCAAA,UAEA,QAAAg8B,GAAAr4E,GACA,MAAA,sIAAAA,EAAAq8C,OAAA,uCAAA,UAEA,QAAAi8B,GAAAt4E,GACA,MAAA,yCAAAA,EAAAq8C,OAAA,SAAA,mFAEA,QAAAk8B,GAAAv4E,GACA,MAAA,yCAAAA,EAAAq8C,OAAA,YAAA,mBAAAr8C,EAAAq8C,OAAA,OAAA,qBAAAr8C,EAAAq8C,OAAA,MAAA,qBAAAr8C,EAAAq8C,OAAA,OAAA,qBAAAr8C,EAAAq8C,OAAA,QAAA,aAGA,QAAA58F,GAAAugD,EAAAljB,EAAArhD,GACAukE,EAAAqf,UAAA,WACA,IAAA,GAAA/9B,GAAAw0F,EAAA91E,EAAAljB,GAAAwE,EAAAs0F,YACA,GAAA,gBAAA94F,GAAA,CACA,GAAA3/C,GAAA6iE,EAAA+8B,SAAAz7C,EAAApxB,OAAAoxB,EAAAjpB,MAAAl7B,MAAA2/C,EACAwE,GAAAljD,QAAA3C,EAAA2C,QAAA,UAAA,SAAAN,EAAAzC,GAAA,MAAA8B,GAAA9B,UACAimD,GAAAljD,QAAA3C,KAKA,QAAA2C,GAAA4hE,EAAAjjB,GACA,IAAAijB,EAAAsI,UAAA,YAAA,CACA,GAAAxrB,GAAAkjB,EAAAkhB,gBAAA61D,EAAA/2E,GAAA82E,UACA0B,EAAA,0CAAAz7F,EAAAijB,EAAAq8C,OAAA,gBAAAr8C,EAAAq8C,OAAA,aAAA,SACA25B,GAAAh2E,EAAAw4E,EAAAH,EAAAr4E,GAAAw4E,EAAA17F,EAAA,SAAAA,GACAA,IACAA,EAAA46F,EAAA56F,GACAk5F,EAAAh2E,EAAAs4E,EAAAt4E,GAAAA,EAAAq8C,OAAA,iBAAA,GAAA,SAAA5gH,GAEA,GADAA,EAAAg8I,EAAAh8I,GACAshD,EACAt9B,EAAAugD,EAAAljB,EAAArhD,OACA,CACA27I,EAAAp3E,EACA,IAAA1e,GAAAw0F,EAAA91E,EAAAljB,EAAAkjB,EAAAqb,UAAA,SACAo9D,EAAA,WACA,GAAAt7I,GAAA2C,EAAAwhD,EAAApxB,SACA/yB,EAAAmkD,EAAAs0F,cACAt0F,EAAAw0F,EAAA91E,EAAAljB,KACA3/C,EAAAmkD,EAAAs0F,aACA91I,GAAAwhD,EAAApxB,OAAA4hC,MAAAhyD,EAAAgyD,MAAAxQ,EAAApxB,OAAAyG,IAAA72B,EAAA62B,MAEAqpC,EAAA0pB,aAAApoC,EAAApxB,OAAAoxB,EAAAjpB,MACA2nC,EAAA+Z,gBAAA7pD,KAAAoxB,EAAApxB,OAAAmI,GAAAipB,EAAAjpB,OACAi/G,EAAAt3E,EAAAu4E,EAAAv4E,GAAAA,EAAAq8C,OAAA,aACA,WAAAq8B,EAAAv7I,IAAAs7I,EACA,WAAAh5H,EAAAugD,EAAAljB,EAAArhD,QAEAi9I,EAAA,SAAAv7I,GACAmkD,EAAAljD,QAAA,gBAAA0+C,GAAArhD,EACAA,EAAA2C,QAAA,UAAA,SAAAN,EAAAzC,GAAA,MAAA8B,GAAA9B,MACAo9I,IAEAA,YAMA5lF,EAAA+gC,SAAAxkF,KAAA,SAAA4wD,GAAAo3E,EAAAp3E,GAAAg4E,EAAAh4E,IACAnN,EAAA+gC,SAAA+kD,eAAA,SAAA34E,GAAAo3E,EAAAp3E,GAAAg4E,EAAAh4E,GAAA,GAAA,IACAnN,EAAA+gC,SAAAglD,mBAAA,SAAA54E,GAAAg4E,EAAAh4E,GAAA,GAAA,GAAA,IACAnN,EAAA+gC,SAAAilD,mBAAA,SAAA74E,GAAAg4E,EAAAh4E,GAAA,GAAA,GAAA,IACAnN,EAAA+gC,SAAAgiD,SAAAoC,EACAnlF,EAAA+gC,SAAAklD,SAAA,SAAA94E,GAAAg4E,EAAAh4E,GAAA,IACAnN,EAAA+gC,SAAAwjD,YAAAA,EACAvkF,EAAA+gC,SAAAx1F,QAAAA,EACAy0D,EAAA+gC,SAAAn0E,WAAA,SAAAugD,GAAA5hE,EAAA4hE,GAAA,MC3PA,SAAAkxB,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,wBAAAA,QAAA,qBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,gCAAA,uBAAA,oBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,YAEA,SAAAmjF,GAAAh2E,EAAAvkE,EAAA47I,EAAAr9B,EAAAj5G,GACAi/D,EAAAm3E,WAAAn3E,EAAAm3E,WAAA17I,EAAAsF,GAAA0N,MAAAurG,EAAAq8B,mBAAA,IACAt1I,EAAA4hH,OAAA00B,EAAAr9B,IAGA,QAAA++B,GAAA/4E,GACA,MAAAA,GAAAq8C,OAAA,iBAAA,sIAAAr8C,EAAAq8C,OAAA,uCAAA,UAGA,QAAA28B,GAAAh5E,EAAApN,GACA,GAAAjY,GAAA2uC,OAAA12B,EACA,OAAA,QAAAh0D,KAAAg0D,GAAAoN,EAAAqb,YAAAvpB,KAAAnX,EACAA,EAAA,EAGAkY,EAAA+gC,SAAAqlD,WAAA,SAAAj5E,GACA,GAAAzgE,GAAAygE,EAAAqb,WACA26D,GAAAh2E,EAAA+4E,EAAA/4E,GAAAA,EAAAq8C,OAAA,iBAAA98G,EAAAuyD,KAAA,EAAA,IAAAvyD,EAAAo3B,GAAA,SAAAuiH,GACA,GAAAA,EAAA,CAEA,GAAA/7I,EACA,IAAAA,EAAA,oCAAAwC,KAAAu5I,GACAl5E,EAAAxU,UAAAwtF,EAAAh5E,EAAA7iE,EAAA,IAAAmsF,OAAAnsF,EAAA,SACA,IAAAA,EAAA,gCAAAwC,KAAAu5I,GAAA,CACA,GAAApnF,GAAArsD,KAAAwa,MAAA+/C,EAAAwmC,YAAAld,OAAAnsF,EAAA,IAAA,IACA,SAAAyB,KAAAzB,EAAA,MAAA20D,EAAAvyD,EAAAuyD,KAAAA,EAAA,GACAkO,EAAAxU,UAAAsG,EAAA,EAAAvyD,EAAAo3B,SACAx5B,EAAA,4BAAAwC,KAAAu5I,KACAl5E,EAAAxU,UAAAwtF,EAAAh5E,EAAA7iE,EAAA,IAAAoC,EAAAo3B,QAKAk8B,EAAAk/B,OAAA,QAAA,SAAA,eAGA,SAAAb,GClDA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,6BAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,cAEA,WAKA,QAAAsmF,GAAAx+I,EAAA2b,GASA,QAAAyJ,GAAAplB,GACA,IAAAsL,EAAApK,WACA,MAAAg3D,GAAApwD,IAAA1H,SAAA,YAAAglB,EACA9Z,GAAArG,MAAAoR,IAAAvL,KAAAC,IAAA,EAAA/K,EAAAgjB,QAAA1X,EAAAmkB,aAAA,GAAA,KACAnkB,EAAArG,MAAAiiB,KAAAlnB,EAAA+iB,QAAA,EAAA,KAZA,GAAAzX,GAAAlL,SAAAS,cAAA,MAkBA,OAjBAyK,GAAAmL,UAAA,2BACA,gBAAAkF,KACAA,EAAAvb,SAAAgH,eAAAuU,IAEArQ,EAAArK,YAAA0a,GACAvb,SAAAoF,KAAAvE,YAAAqK,GAQA4sD,EAAAn0C,GAAA3jB,SAAA,YAAAglB,GACAA,EAAAplB,GACA,MAAAsL,EAAArG,MAAAsH,UACAjB,EAAArG,MAAAsH,QAAA,GACAjB,EAEA,QAAAq8E,GAAArvB,GACAA,EAAAp3D,YACAo3D,EAAAp3D,WAAAC,YAAAm3D,GAEA,QAAAmmF,GAAAnzI,GACAA,EAAApK,aAEA,MAAAoK,EAAArG,MAAAsH,SACAo7E,EAAAr8E,GACAA,EAAArG,MAAAsH,QAAA,EACAV,WAAA,WACA87E,EAAAr8E,IACA,MAGA,QAAAozI,GAAA1+I,EAAA2b,EAAAkiC,EAAA9sC,EAAAs0D,GAEA,QAAAlnD,KACA+5C,EAAApwD,IAAA+1C,EAAA,WAAA1/B,GACA+5C,EAAApwD,IAAA+1C,EAAA,QAAA1/B,GACA0/B,EAAApnC,UAAAonC,EAAApnC,UAAAhT,QAAAk7I,EAAA,IACAh6G,IACA85G,EAAA95G,GACAA,EAAA,MAEA0gC,EAAA06C,aAAAhvG,EAAAqmF,QATA,GAAAzyD,GAAA65G,EAAAx+I,EAAA2b,GAWAqgG,EAAA39E,YAAA,WACA,GAAAsG,EACA,IAAA,GAAAlkC,GAAAo9C,GAAAp9C,EAAAA,EAAAS,WAAA,CACA,GAAAT,GAAAL,SAAAoF,KACA,MACA,KAAA/E,EAAA,CACA0d,GACA,QAGA,IAAAwmB,EACA,MAAAvG,eAAA49E,IACA,IACA9jD,GAAAn0C,GAAA85B,EAAA,WAAA1/B,GACA+5C,EAAAn0C,GAAA85B,EAAA,QAAA1/B,GACApN,EAAAqmF,QAAAwb,IAAAz0F,GACAknD,EAAAy6C,UAAA/uG,EAAAqmF,QAGA,QAAAwnD,GAAAv5E,EAAA99C,GACAhnB,KAAAgnB,QAAAA,EACAhnB,KAAAuuB,QAAA,KACAvH,EAAA8B,MACA9oB,KAAAs+I,YAAA,SAAA7+I,GACA8+I,EAAAz5E,EAAArlE,IAGAO,KAAAs+I,YAAA,SAAA7+I,GACA6+I,EAAAx5E,EAAArlE,IAGAO,KAAA62F,OAAA,KAGA,QAAAm+C,GAAAlwE,EAAA99C,GACA,GAAAA,YAAAw3H,UACA,OACAC,aAAAz3H,EAMA,IAJAA,IAAA,IAAAA,IACAA,MACAA,EAAAy3H,eACAz3H,EAAAy3H,aAAA35E,EAAA29B,UAAA9qC,EAAAoH,IAAA,EAAA,GAAA,eACA/3C,EAAAy3H,aACA,KAAA,IAAA3+I,OACA,4DACA,OAAAknB,GAGA,QAAAu3H,GAAAz5E,EAAArlE,GACA,GAAA+Q,GAAAs0D,EAAAt0D,MAAAkuI,UAAA51H,EAAAtY,EAAAwW,QAAA8B,KAEA,IADAC,aAAAvY,EAAA+d,SACA9uB,EAAAknE,WAAA,CAEA,GAAAg4E,IAAAh4E,WAAAlnE,EAAAknE,WAAAnkD,QAAA/iB,EAAA+iB,QAAAC,QAAAhjB,EAAAgjB,QACAhjB,GAAAk/I,EAEAnuI,EAAA+d,QAAAjjB,WAAA,WAAAgzI,EAAAx5E,EAAArlE,IAAAqpB,GAGA,QAAAw1H,GAAAx5E,EAAArlE,GACA,GAAA69C,GAAA79C,EAAA0Y,QAAA1Y,EAAAknE,UACA,IAAArpB,EAAA,CACA,GAAA9sC,GAAAs0D,EAAAt0D,MAAAkuI,UAAAhuI,EAAAkuI,EAAA95E,EAAArlE,GACA2b,EAAA5K,EAAAwW,QAAAy3H,aAAA35E,EAAAp0D,EAAAjR,EACA2b,KACAkiC,EAAApnC,WAAAkoI,EACA,kBAAAhjI,GACAA,EAAA+iI,EAAAztI,EAAAjR,EAAA69C,EAAA9sC,EAAAs0D,GAEAq5E,EAAA1+I,EAAA2b,EAAAkiC,EAAA9sC,EAAAs0D,KAKA,QAAA+5E,GAAA/5E,EAAA56C,EAAAjC,GAOA,GANAA,GAAAA,GAAA0vC,EAAAkmC,OACAlmC,EAAApwD,IAAAu9D,EAAA6/B,oBAAA,YACA7/B,EAAAt0D,MAAAkuI,UAAAJ,mBACAx5E,GAAAt0D,MAAAkuI,WAGAx0H,EAAA,CACA,GAAA1Z,GAAAs0D,EAAAt0D,MAAAkuI,UAAA,GAAAL,GAAAv5E,EAAAkwE,EAAAlwE,EACA56C,GACAytC,GAAAn0C,GAAAshD,EAAA6/B,oBAAA,YAAAn0F,EAAA8tI,cASA,QAAAM,GAAA95E,EAAArlE,GAGA,IAAA,GAFA69C,GAAA79C,EAAA0Y,QAAA1Y,EAAAknE,WAAApmE,EAAA+8C,EAAArlC,WACAqlC,EAAA32C,YACAxG,EAAA,EAAAA,EAAA2+I,EAAA59I,OAAAf,GAAA,EAAA,CACA,GAAA+mB,GAAA49C,EAAAqT,YACAxxD,KAAAlnB,EAAA+iB,QAAAs8H,EAAA3+I,GACA2V,IAAArW,EAAAgjB,QAAAq8H,EAAA3+I,EAAA,KAEAmgD,EAAAwkB,EAAA+6C,WAAA34F,EACA,IAAAo5B,GAAAA,EAAAoX,SAAAn3D,EACA,OACA+/C,MAAAA,EACAp5B,IAAAA,IA5JA,GAAAk3H,GAAA,oBA8IAU,GAAA,EAAA,EAAA,EAAA,EAAA,GAAA,EAAA,EAAA,GAAA,EAAA,EAoBAnnF,GAAAqnD,aAAA,aAAA,EAAA6/B,QAMAtsH,OAAA,+BAAA,uBCpLA,SACA,WAEA,SAAAolC,EAAAt1D,GACA,YA+HA,SAAA08I,GAAAruI,GACA,MAAArO,GAAAy1B,GAAAoD,MAAAtR,MAAA,aACAlZ,EAAAnQ,KAAA,IAAAmQ,EAAA2kB,OAGA,QAAA2pH,GAAAl6E,EAAAvkE,EAAAo3B,GACAsnH,EAAAtnH,GAAAp3B,EAGA,QAAA2uC,GAAAx+B,EAAAo0D,GACA,GAAArzD,EAEA,OAAAwtI,GAAAvuI,EAAA8I,MACAylI,EAAAvuI,EAAA8I,OAEA/H,EAAAf,EAAA8I,KAAAoe,YAAA,MACAlnB,EAAA8I,KAAA2b,UAAA1jB,EAAA,GAEAf,EAAA8I,KAGA,QAAA0lI,GAAAj4I,EAAAyJ,EAAAo0D,GACA,MAAAp0D,IAAAA,EAAA8I,KACAnX,EAAAy1B,GAAA2C,IAAA0kH,EAAAl4I,GACA,kBACA5E,EAAAy1B,GAAAoD,MAAAtR,MAAA,aACAlZ,EAAA8I,OACA9I,GAAAA,EAAAkmD,KACAuoF,EAAAl4I,GAAA,oBAAAyJ,EAAAkmD,KAEA,mBAAA3vD,EAIA,QAAAk4I,GAAAznF,GACA,MAAAA,GAAA,GAAA10D,cAAA00D,EAAA/0D,MAAA,GAhKA,GAAAs8I,MAEAG,GACAhb,cAAA,SAAA1zH,EAAAo0D,GACA,MAAAp0D,GACArO,EAAAy1B,GAAA2C,IAAAskH,EAAAruI,GACAo0D,EAAA2hE,UAAA/1H,IAEA,sBAIA6zH,YAAA,SAAA7zH,EAAAo0D,GACA,MAAAp0D,GACArO,EAAAy1B,GAAA2C,IAAAskH,EAAAruI,GACAo0D,EAAA2hE,UAAA/1H,IAEA,oBAIA4zH,cAAA,SAAA5zH,EAAAo0D,GACA,MAAAp0D,GACArO,EAAAy1B,GAAA2C,IAAAskH,EAAAruI,GAAA,mBACAw+B,EAAAx+B,EAAAo0D,GAAA,MACAA,EAAA2hE,UAAA/1H,IAEA,wBAIA2zH,cAAA,SAAA3zH,EAAAo0D,GACA,MAAAp0D,GACArO,EAAAy1B,GAAA2C,IAAAskH,EAAAruI,GAAA,mBACAw+B,EAAAx+B,EAAAo0D,GAAA,MACAA,EAAA2hE,UAAA/1H,IAEA,sBAIAo0H,eAAA,iBACAJ,aAAA,oBACAF,eAAA,sBACAS,WAAA,SAAAv0H,EAAAo0D,GACA,MAAAo6E,GAAA,YAAAxuI,EAAAo0D,IAEAogE,gBAAA,SAAAx0H,EAAAo0D,GACA,MAAAo6E,GAAA,iBAAAxuI,EAAAo0D,IAEA6+D,kBAAA,0BACA0b,cAAA,iCACAC,iBAAA,oCACAxb,gBAAA,iBAEAtqH,KAAA,SAAA9I,EAAAo0D,GACA,MAAAp0D,IACAsuI,EAAAl6E,EAAAp0D,EAAAnQ,KAAAmQ,EAAAinB,MACAt1B,EAAAy1B,GAAA2C,IAAA,SACAp4B,EAAAy1B,GAAAoD,MAAAtR,MAAA,aACAlZ,EAAAinB,QAEA,aAIAmuG,gBAAA,SAAAp1H,EAAAo0D,GACA,MAAAp0D,IACAsuI,EAAAl6E,EAAAp0D,EAAAnQ,KAAAmQ,EAAAinB,MACAt1B,EAAAy1B,GAAA2C,IAAA,SACAp4B,EAAAy1B,GAAAoD,MAAAtR,MAAA,aACAlZ,EAAAinB,MACAt1B,EAAAy1B,GAAA2C,KAAA7Q,MAAA,gBACA,uCAGA,iDAIAnZ,MAAA,SAAAC,EAAAo0D,GACA,MAAAp0D,IACAA,EAAA6uI,SACAl9I,EAAAy1B,GAAA2C,IAAA,UAAAp4B,EAAAy1B,GAAA8J,OAAAlxB,EAAA6uI,UAAA,aAGA,SAGA5c,UAAA,+BACA5N,MAAA,yCACAtzE,MAAA,8BACAiW,OAAA,uDACAiqE,MAAA,cACAiB,MAAA,wCACAv4F,IAAA,qBACA44F,UAAA,sCACAuc,oBAAA,2BAEAvZ,gBAAA,iBACAJ,cAAA,gBACA98H,KAAA,eACAo9H,eAAA,yBACAsZ,UAAA,iBACAC,SAAA,mBAEAj/I,KAAA,KACA+6H,QAAA,KACAkH,SAAA,KACAhB,IAAA,KACAoB,IAAA,KACAC,MAAA,KACAlB,OAAA,KACA5D,KAAA,KACAZ,QAAA,KACAsiB,QAAA,KACAld,KAAA,KACAmd,SAAA,KACA5c,IAAA,KACAhB,UAAA,KACAC,WAAA,KACAI,UAAA,KACAC,WAAA,KAyCA3qE,GAAA6pD,eAAA,YAAA,SAAA,SAAA18C,EAAAp0D,EAAA4sC,GACA,GAAA5sC,EAAA,CACA,GAEA9F,GAFA01C,EAAA5vC,EAAA4vC,MACAzZ,EAAAu4G,EAAA9+F,EAAAr5C,KAGA,QAAAktB,KAAA0S,EAWA,OAAAj8B,EAAAk6D,EAAAyhE,iBAAAjmF,IACA11C,EAAA4rD,SAAA,QAAA5rD,EAAAsvC,KACA73C,EAAAy1B,GAAA2C,IAAA7vB,EAAA4rD,QAAAsO,EAAA2hE,UAAA77H,IACAA,EAAA4rD,QACAn0D,EAAAy1B,GAAA2C,IAAA7vB,EAAA4rD,SAEAn0D,EAAAy1B,GAAA2C,IAAA6lB,EAAAr5C,MAEA5E,EAAAy1B,GAAA2C,IAAA6lB,EAAAr5C,KAlBA,IAAA,kBAAA,GAAA,CACA,GAAA5G,GAAAwmC,EAAAi+B,EAAAyhE,iBAAAjmF,GAAAwkB,EAEA,OAAA,gBAAA,GACAziE,EAAAy1B,GAAA2C,IAAAp6B,GAEAA,EACA,GAAA,gBAAA,GACA,MAAAgC,GAAAy1B,GAAA2C,IAAAoM,GAcA,MAAA,UAKA,SAAAmvD,GC3MA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,yBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,mCAAA,wBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,GAAAkoF,GAAA,IAEAloF,GAAAo3D,kBAAA,SAAAr+G,GACAinD,EAAAn0C,GAAA9S,EAAA,SAAA,SAAAu9G,EAAAgoB,GACAA,EAAAA,EAAAt1I,UACA,IAAAm/I,GAAA,IAIA,IAHA7xB,EAAA/zE,OACA4lG,EAAA7xB,EAAA/zE,KAAA+zE,IAEA6xB,EAAA,CACA,GAAA/uG,GAAAklG,EAAAvvH,uBACA,OAAAm5H,IACAA,EAAAhgJ,SAAAS,cAAA,OACAu/I,EAAA3pI,UAAA,+BACArW,SAAAoF,KAAAvE,YAAAm/I,IAEAA,EAAAv5I,UAAA,GACAu5I,EAAAn7I,MAAAoR,IAAAmgI,EAAAvxI,MAAAoR,IACA+pI,EAAAn7I,MAAAiiB,KAAAoqB,EAAAnsB,MAAA,KACA,gBAAAk7H,GACAD,EAAAv5I,UAAAw5I,EAEAD,EAAAn/I,YAAAo/I,GAEAD,EAAAn7I,MAAAS,QAAA,YAEA,OAAA06I,IACAA,EAAAv5I,UAAA,GACAu5I,EAAAn7I,MAAAS,QAAA,UAKAwyD,EAAAn0C,GAAA9S,EAAA,QAAA,WACA,MAAAmvI,GACAA,EAAAl/I,WAAAC,YAAAi/I,GAEAA,EAAA,QAKAloF,EAAAooF,gBAAA,SAAAlxB,GACA,MAAA,UAAA/pD,EAAAk7E,EAAAh5H,GACAA,IACAA,EAAAg5H,EACA,IAAAtvI,GAAAm+G,EAAA/pD,EAAA99C,EAEA,OADA2wC,GAAAo3D,kBAAAr+G,GACAA,MCrDA,SAAAslF,GACA,gBAAAp2F,UAAA,gBAAAD,QACAq2F,EAAAvuD,QAAA,sBACA,kBAAAlV,SAAAA,OAAAC,IACAD,OAAA,mBAAA,qBAAAyjE,GAEAA,EAAAr+B,aACA,SAAAA,GACA,YAGA,SAAAsoF,GAAA97I,EAAA2O,GAAA,MAAA3O,GAAAyyD,MAAA9jD,EAAA8jD,MAAAzyD,EAAAs3B,IAAA3oB,EAAA2oB,GAKA,QAAAykH,GAAA7sH,GACA8sH,EAAAv5I,KAAAysB,GACA8sH,EAAAj/I,OAAA,IAAAi/I,EAAApwI,QAEA,QAAAqwI,GAAA/sH,GACA,IAAA8sH,EAAAj/I,OAAA,MAAAg/I,GAAA7sH,EACA8sH,GAAAA,EAAAj/I,OAAA,IAAAmyB,EAEA,QAAAgtH,GAAAngJ,GAAA,MAAAigJ,GAAAA,EAAAj/I,QAAAhB,EAAAqK,KAAAyuD,IAAA94D,EAAA,GAAA,KAAA,GACA,QAAAogJ,KAAA,MAAAH,GAAAj/I,OAAA,GAAAi/I,EAAA3rI,MAAA6rI,IAIA,QAAArpD,GAAAlyB,EAAA9vC,EAAAmI,EAAAojH,EAAAhgJ,GACA,MAAAA,IAAAA,EAAAukE,EAAA+8B,SAAA7sE,EAAAmI,IAEA,QAAAojH,GAAAC,GAAAA,EAAA17E,IAAAA,GAAAm7E,EAAAjrH,EAAAwrH,EAAAt5H,MAAA49C,EAAA0nC,QAAAg0C,EAAA/zC,KACA2zC,EAAA7/I,IACA,IAAAggJ,GACAL,EAAA3/I,GACAukE,EAAAysB,aAAA,GAAAv8D,EAAAmI,EAAA,WAEAqjH,EAAA,QAAAD,GAAAz7E,GAAAA,EAAA59C,IAAA8N,EAAAy3E,IAAA3nC,EAAAwnC,oBACA,KAKA,QAAAm0C,GAAA37E,EAAA59C,EAAA1T,GACA,MAAAsxD,GAAAq9B,SAAAj7E,EAAA1T,EAAA,QAAA,GAGA,QAAAktI,GAAA57E,EAAA59C,EAAA1T,GACA,MAAAsxD,GAAAq9B,SAAAj7E,EAAA1T,EAAA,QAAA,GAGA,QAAAmtI,GAAA77E,EAAA59C,EAAA1T,GACA,MAAAsxD,GAAA69B,SAAAz7E,EAAA1T,EAAA,OAAAsxD,EAAAlyB,IAAA1e,IAAA0sF,YAGA,QAAAggC,GAAA97E,EAAA59C,EAAA1T,GACA,MAAAsxD,GAAA69B,SAAAz7E,EAAA1T,EAAA,OAAAsxD,EAAAlyB,IAAA1e,IAAA0sF,YAGA,QAAAigC,GAAA/7E,EAAA59C,EAAA1T,GAIA,IAHA,GAAA8qD,GAAAp3C,EAAA0vC,KAAAA,EAAAkO,EAAAjH,QAAAS,GACAwiF,EAAA,KAAAp9I,KAAA8P,EAAA,EAAAojD,EAAAj0D,MAAA,EAAAukB,EAAAuU,IAAAm7B,EAAAj0D,MAAAukB,EAAAuU,KACAslH,EAAAj8E,EAAAylB,YAAApxB,EAAA2L,EAAAR,aACA,CAEA,IADAhG,GAAA9qD,GACAutI,GAAAziF,EAAAnF,EACA,MAAA2L,GAAAvF,QAAAR,EAAAT,EAAA9qD,EAAAA,EAAA,EAAA,EAAA,MACAojD,GAAAkO,EAAAjH,QAAAS,EAEA,IADA,KAAA56D,KAAAkzD,GACAkqF,GAAA,MACA,IAAAA,EAAA,MAAA/hF,GAAAT,EAAA,IAIA,QAAA0iF,GAAAl8E,EAAA59C,EAAA1T,GAGA,IAFA,GAAAojD,GAAA1vC,EAAA0vC,KAAAn7B,EAAAvU,EAAAuU,GACAl7B,EAAAukE,EAAAjH,QAAA32C,EAAA0vC,MAAAqqF,GAAA,IACA,CACA,GAAAxtI,GAAAlT,EAAA60B,OAAAqG,GAAAjoB,EAAA,GAAA,EAAA,GACA,IAAAC,EAAA,CAQA,GAAAwtI,GAAA,QAAAv9I,KAAA+P,GAAA,MAAAsrD,GAAAnI,EAAAn7B,GAAAjoB,EAAA,EAAA,EAAA,GACAytI,KAAAA,EAAA,KAAAv9I,KAAA+P,IACAgoB,GAAAjoB,MAVA,CACA,GAAAojD,IAAApjD,EAAA,EAAAsxD,EAAAylB,YAAAzlB,EAAAR,YAAA,MAAAvF,GAAAnI,EAAAn7B,EAEA,IADAl7B,EAAAukE,EAAAjH,QAAAjH,EAAApjD,IACA,KAAA9P,KAAAnD,GAAA,MAAAw+D,GAAAnI,EAAAn7B,EACAm7B,IAAApjD,EACAioB,EAAAjoB,EAAA,EAAAjT,EAAAW,OAAA,IASA,QAAAggJ,GAAAp8E,EAAA59C,EAAA1T,GACA,GAAAub,EACA,IAAA+1C,EAAAssE,sBAAAriH,EAAA+1C,EAAAssE,oBAAAlqH,GAAAqqH,QAAA,MACAxiH,EAAA9sB,QAAA8sB,EAAA0iH,QAAA,GAAA,IAAAj+H,EACA,MAAAA,GAAA,EAAAurD,EAAAhwC,EAAAoO,GAAAy5B,KAAA7nC,EAAAoO,GAAA1B,GAAA,GAAA1M,EAAAoO,EAEA,KAAA,GAAA3rB,IAAA,GAAAA,GAAA,EAAA,CACA,GAAA8uC,GAAAwkB,EAAA+6C,WAAA34F,GACAjD,EAAA86C,EAAA73C,EAAA0vC,KAAApjD,EAAA,EAAA8sC,EAAA17C,MAAA07C,EAAAz7C,IACA,MAAA2M,GAAAgC,EAAA,GAAA8sC,EAAAz7C,KAAAqiB,EAAAuU,KAAA,KAAA/3B,KAAA48C,EAAAoX,QAKA,MAAAzzC,EAJA,IAAAk9H,GAAAr8E,EAAAq9B,SAAAl+E,EAAAzQ,EAAA,OACA,IAAAysI,EAAAh8H,EAAAk9H,GAAA,MAAAj6H,EACAA,GAAAi6H,GASA,QAAAC,GAAAt8E,EAAA0F,GACA,GAAA62E,GAAAv8E,EAAAt0D,MAAA8wI,WACA,OAAAD,IACAE,EAAAz8E,GACA,KAAAu8E,GAAA,EAAAjzD,OAAAizD,IAFA72E,EAAA,KAAA,EAKA,QAAAg3E,GAAAzrD,GACA,GAAAlwF,GAAA,gBAAAkwF,GAAA,SAAAjxB,GAAAA,EAAAw0C,YAAAvjB,IAAAA,CACA,OAAA,UAAAjxB,GACA,GAAAlnB,GAAAwjG,EAAAt8E,EACAj/D,GAAAi/D,EACA,KAAA,GAAA3kE,GAAA,EAAAA,EAAAy9C,IAAAz9C,EAAA0F,EAAAi/D,IAIA,QAAA28E,GAAA38E,EAAA59C,EAAAw6H,EAAAluI,GACA,GAAAoqC,GAAAwjG,EAAAt8E,EACAlnB,GAAA,IAAApqC,GAAAA,EAAAoqC,GAAAA,EACA,KAAA,GAAAz9C,GAAA,EAAAA,EAAAy9C,IAAAz9C,EAAA,CACA,GAAAghJ,GAAAO,EAAA58E,EAAA59C,EAAA1T,EACA,IAAAysI,EAAAkB,EAAAj6H,GAAA,KACAA,GAAAi6H,EAEA,MAAAj6H,GAGA,QAAA41E,GAAA4kD,EAAAluI,GACA,GAAA3N,GAAA,SAAAi/D,GACAA,EAAAypB,gBAAAkzD,EAAA38E,EAAAA,EAAAqb,YAAAuhE,EAAAluI,IAGA,OADA3N,GAAA0zF,QAAA,EACA1zF,EAGA,QAAA87I,GAAA78E,EAAA48E,EAAAluI,EAAA+sI,GAGA,IAFA,GAAAn6F,GAAAszE,EAAA50D,EAAA2vB,iBACAt0F,EAAAu5H,EAAAx4H,OACAf,KACAimD,EAAAszE,EAAAv5H,GAAAM,KACAu2F,EAAAlyB,EAAA1e,EAAAq7F,EAAA38E,EAAA1e,EAAAs7F,EAAAluI,GAAA+sI,GAIA,QAAAqB,GAAA98E,EAAAy7E,GACA,GAAAz7E,EAAAmoB,oBAAA,CAGA,IAFA,GAAA7gC,GAAAstE,EAAA50D,EAAA2vB,iBACAt0F,EAAAu5H,EAAAx4H,OACAf,KACAisD,EAAAstE,EAAAv5H,GACA62F,EAAAlyB,EAAA1Y,EAAAqtB,OAAArtB,EAAA3rD,KAAA8/I,EAEA,QAAA,GAIA,QAAAsB,GAAA/8E,EAAAg9E,GACA,GAAAh9E,EAAAt0D,MAAA8wI,YAEA,YADA,KAAAQ,IAAAh9E,EAAAt0D,MAAA8wI,aAAAQ,GAIAh9E,GAAAt0D,MAAA8wI,YAAAQ,EACAh9E,EAAAthD,GAAA,aAAAu+H,GACAj9E,EAAAthD,GAAA,YAAAw+H,GAKA,QAAAD,GAAAj9E,EAAA/sC,GACA+sC,EAAAt0D,MAAAyxI,gBAAAC,EAAAnxI,eAAAgnB,IACAwpH,EAAAz8E,GAGA,QAAAy8E,GAAAz8E,GACAA,EAAAt0D,MAAA8wI,YAAA,KACAx8E,EAAAv9D,IAAA,aAAAw6I,GACAj9E,EAAAv9D,IAAA,YAAAy6I,GAGA,QAAAA,GAAAl9E,EAAAp9D,GACA,GAAAikG,GAAAy1C,EAAAt8E,EACA,IAAA6mC,EAAA,GAAA,UAAAjkG,EAAAmtC,OAAA,CAEA,IAAA,GADApxB,GAAA/b,EAAAnH,KAAAyO,KAAA,MAAAk4D,EAAA,GACA/mE,EAAA,EAAAA,EAAAwrG,IAAAxrG,EAAA+mE,GAAAzjD,CACAqhD,GAAA4vB,iBAAAxtB,IAIA,QAAAi7E,GAAAr9E,GACAA,EAAAt0D,MAAAyxI,gBAAA,EACAn9E,EAAAy6C,UAAA6iC,GACAt9E,EAAAthD,GAAA,aAAA6+H,GACAv9E,EAAAthD,GAAA,YAAA6+H,GAGA,QAAAA,GAAAv9E,EAAA/sC,IACA,gBAAAA,KAAA,OAAAr0B,KAAAq0B,IAAA,UAAAA,KACA+sC,EAAA06C,aAAA4iC,GACAt9E,EAAAt0D,MAAAyxI,gBAAA,EACAn9E,EAAAv9D,IAAA,aAAA86I,GACAv9E,EAAAv9D,IAAA,YAAA86I,IAKA,QAAAC,GAAAx9E,GACAA,EAAAxU,UAAAwU,EAAAqb,aACArb,EAAAonC,cAAApnC,EAAAqnC,gBACArnC,EAAAthD,GAAA,SAAA,WAAAshD,EAAAonC,cAAA,KAGA,QAAAq2C,GAAAz9E,GACAA,EAAAonC,cAAA,GACApnC,EAAAxU,UAAAwU,EAAAqb,aAGA,QAAAqiE,GAAA19E,EAAAp2B,EAAA7oC,GACAi/D,EAAAm3E,WACAn3E,EAAAm3E,WAAAvtG,EAAA,6CAAA7oC,GAAAw9B,QAAA,IAEAx9B,EAAA4hH,OAAA/4E,EAAA,KAGA,QAAA+zG,GAAA39E,EAAAgL,GACA,GAAAlrE,GAAAkgE,EAAAqb,YAAAt7E,EAAAigE,EAAAq9B,SAAAv9F,EAAA,EAAA,OACAkgE,GAAAysB,aAAAzhB,EAAAhL,EAAA+8B,SAAAj9F,EAAAC,IAAAD,EAAAC,GACAigE,EAAAxU,UAAAzrD,GAGA,QAAA69I,GAAA59E,GAGA,IAFA,GAAA59C,GAAA49C,EAAAqb,YAAAvpB,EAAA1vC,EAAA0vC,KAAAn7B,EAAAvU,EAAAuU,GACA5e,KACA+5C,GAAAkO,EAAAylB,aAAA,CAEA,IAAA,GADAhqF,GAAAukE,EAAAjH,QAAAjH,GACAz2D,EAAA,MAAAs7B,EAAAl7B,EAAAW,OAAAu6B,EAAAt7B,EAAA,GAAA,CACA,GAAAs7B,GAAAl7B,EAAA60B,SAAAj1B,EACA,IAAA,KAAAs7B,EACA5e,EAAAjW,KAAA,SACA,IAAA,KAAA60B,EACA5e,EAAAjW,KAAA,SACA,IAAA,KAAA60B,EACA5e,EAAAjW,KAAA,SACA,IAAA,WAAAlD,KAAA+3B,MAAA5e,EAAA3b,QAAA2b,EAAArI,OAAAinB,GACA,MAAAqpC,GAAAypB,gBAAAxvB,EAAAnI,EAAAz2D,MAEAy2D,EAAAn7B,EAAA,MAIA,QAAAknH,GAAA79E,GACAA,EAAAw0C,YAAA,eACAipC,EAAAz9E,GA2IA,QAAA89E,GAAA58I,GACAo8I,EAAAp8I,GAAA,SAAA8+D,GAAA+8E,EAAA/8E,EAAA9+D,IACA6wF,EAAA,QAAA7wF,GAAA,SAAA8+D,GAAA+8E,EAAA/8E,EAAA9+D,IACAk8I,EAAA,QAAAl8I,IAAA,EA/YA,GAAA+4D,GAAApH,EAAAoH,IAKAohF,KAYAK,EAAA,KA2JA0B,GAAAW,SAAA,EAAAC,UAAA,EAAAC,UAAA,EAAAjvC,UAAA,EAwFAn8C,GAAAqrF,OAAAhsD,KAAAA,EAAA4qD,WAAAA,EAAAJ,SAAAA,EA6IA,KAAA,GAzIA3qD,GAAAl/B,EAAAk/B,OAAAmsD,MAAArrF,EAAAs+B,iBACAgtD,SAAA,SAAAn+E,GAAAkyB,EAAAlyB,EAAAA,EAAAqb,UAAA,SAAArb,EAAAqb,UAAA,QAAA,IACA00B,SAAA2sC,EAAA,SAAA18E,GACA,GAAAlgE,GAAAkgE,EAAAqb,YAAAt7E,EAAAigE,EAAAvF,QAAAR,EAAAn6D,EAAAgyD,OACAr2D,EAAAukE,EAAA+8B,SAAAj9F,EAAAC,EACA,MAAAnB,KAAAnD,KACAA,GAAA,KACAsE,EAAAk6D,EAAAn6D,EAAAgyD,KAAA,EAAA,IAEAogC,EAAAlyB,EAAAlgE,EAAAC,EAAA,OAAAtE,KAEA2iJ,QAAA,SAAAp+E,GACAo7E,EAAAp7E,EAAAkhB,gBACAu8D,EAAAz9E,IAEA6tC,SAAA,SAAA7tC,GACA,GAAAlgE,GAAAkgE,EAAAqb,WACArb,GAAAysB,aAAA8uD,EAAAe,EAAAt8E,IAAAlgE,EAAAA,EAAA,SACAkgE,EAAA0pB,aAAA5pF,EAAAkgE,EAAAqb,cAEAgjE,QAAA,SAAAr+E,GAAAA,EAAA4vB,iBAAA4rD,IAAA,SAAA,UAEA/yB,aAAA+0B,EAAAc,eAAAd,EAEA/uC,SAAAzW,EAAA2jD,EAAA,GAAAvsC,SAAApX,EAAA2jD,GAAA,GACAlvC,MAAAzU,EAAA2jD,EAAA,GAAAnvC,KAAAxU,EAAA2jD,GAAA,GACAjuC,SAAA,SAAA1tC,GAAA68E,EAAA78E,EAAA27E,EAAA,GAAA,IACA3uC,OAAA,SAAAhtC,GAAA88E,EAAA98E,GAAA,IAAA68E,EAAA78E,EAAA27E,EAAA,GAAA,IACA/rC,SAAA,SAAA5vC,GAAA68E,EAAA78E,EAAA27E,GAAA,GAAA,IACA1uC,UAAA,SAAAjtC,GAAA88E,EAAA98E,GAAA,IAAA68E,EAAA78E,EAAA27E,GAAA,GAAA,IAEApsC,QAAAvX,EAAA4jD,EAAA,GAAApsC,QAAAxX,EAAA4jD,GAAA,GACAvtC,YAAArW,EAAA4jD,EAAA,GAAAxtC,WAAApW,EAAA4jD,GAAA,GACA/rC,QAAA,SAAA7vC,GAAA68E,EAAA78E,EAAA47E,EAAA,EAAA,SACA9rC,gBAAA,SAAA9vC,GAAA68E,EAAA78E,EAAA47E,GAAA,EAAA,SAEAtsC,SAAAtX,EAAA6jD,EAAA,GAAAxsC,SAAArX,EAAA6jD,GAAA,GACAlvC,KAAA3U,EAAA6jD,EAAA,GAAAnvC,GAAA1U,EAAA6jD,GAAA,GACApuC,SAAA,cAAAgC,SAAA,YACA7C,IAAA,YAAAC,KAAA,cAEA0xC,QAAAvmD,EAAA8jD,GAAA,GAAApsC,SAAA1X,EAAA8jD,EAAA,GACAhvC,OAAA9U,EAAA8jD,GAAA,GAAA/uC,SAAA/U,EAAA8jD,EAAA,GAEA9tC,UAAAhW,EAAA+jD,GAAA,GAAA9tC,YAAAjW,EAAA+jD,EAAA,GAEAyC,QAAAxmD,EAAAkkD,GAAA,GAAAuC,QAAAzmD,EAAAkkD,EAAA,GACAwC,QAAA,SAAA1+E,GAAA68E,EAAA78E,EAAAk8E,EAAA,EAAA,SAEAyC,aAAA,SAAA3+E,GAAA68E,EAAA78E,EAAAo8E,EAAA,EAAA,SACAtrC,qBAAA,SAAA9wC,GAAA68E,EAAA78E,EAAAo8E,GAAA,EAAA,SACAwC,aAAA5mD,EAAAokD,EAAA,GAAAyC,aAAA7mD,EAAAokD,GAAA,GAEA0C,mBAAA,SAAA9+E;+BACA,GAAA1e,GAAA0e,EAAAqb,WACArb,GAAA0pB,aAAAizD,EAAA38E,EAAA1e,EAAA86F,EAAA,GAAA96F,IAEAy9F,aAAA,SAAA/+E,GACA,GAAAg/E,GAAA5C,EAAAp8E,EAAAA,EAAAqb,aAAA,GAAApD,EAAAmkE,EAAAp8E,EAAAg/E,EAAA,GACAC,EAAA7C,EAAAp8E,EAAAiY,EAAA,GAAAC,EAAAkkE,EAAAp8E,EAAAi/E,GAAA,EACAj/E,GAAAysB,aAAAzsB,EAAA+8B,SAAA7kB,EAAA+mE,GAAAj/E,EAAA+8B,SAAA9kB,EAAAC,GACAlY,EAAA+8B,SAAAiiD,EAAA/mE,GAAA+mE,EAAAC,IAEAC,aAAAxC,EAAAkB,GAEAuB,YAAA,SAAAn/E,GAEA,IADA,GAAA59C,GAAA49C,EAAAqb,YAAAnrD,EAAA9N,EAAAuU,GAAA0B,EAAAjW,EAAAuU,GAAAl7B,EAAAukE,EAAAjH,QAAA32C,EAAA0vC,MACA5hC,GAAA,KAAAtxB,KAAAnD,EAAA60B,OAAAJ,EAAA,OAAAA,CACA,MAAAmI,EAAA58B,EAAAW,QAAA,KAAAwC,KAAAnD,EAAA60B,OAAA+H,OAAAA,CACA2nC,GAAAysB,aAAA,IAAAxyB,EAAA73C,EAAA0vC,KAAA5hC,GAAA+pC,EAAA73C,EAAA0vC,KAAAz5B,KAEA43E,SAAAysC,EAAA,SAAA18E,GAAAA,EAAA4vB,iBAAA,KAAA,WACAogB,SAAA0sC,EAAA,SAAA18E,GACAA,EAAAw0C,YAAA,oBAGA4qC,QAAA1C,EAAA,SAAA18E,GACA29E,EAAA39E,EAAA,SAAArjE,GACA,GAAA0iJ,GAAA1iJ,EAAAkgD,OAAA,KACA,QAAA,GAAAwiG,EAAA1iJ,EACAA,EAAAkB,MAAA,EAAAwhJ,GAAA1iJ,EAAA2zB,OAAA+uH,GAAAnhJ,cAAAvB,EAAAkB,MAAAwhJ,EAAA,GAAA5iJ,kBAGAyyG,QAAAwtC,EAAA,SAAA18E,GACA29E,EAAA39E,EAAA,SAAArjE,GAAA,MAAAA,GAAAuB,kBAEAohJ,QAAA5C,EAAA,SAAA18E,GACA29E,EAAA39E,EAAA,SAAArjE,GAAA,MAAAA,GAAAF,kBAGA8iJ,QAAA,gBAEAC,SAAA9C,EAAA,QAAA+C,eAAA/C,EAAA,QACA/uC,SAAA+uC,EAAA,QAAArsC,QAAAqsC,EAAA,QACAgD,cAAA,aAAAC,cAAA,WACAnxC,SAAA,qBAAAoxC,SAAA,qBAAAlxC,SAAAmvC,EAAAgC,cAAA,UACAC,QAAA,eACAzyC,MAAA,mBACA0yC,SAAArD,EAAA,SAAA18E,GAAAA,EAAA4vB,iBAAA,KAAA,SACAud,IAAA,aAEA6yC,UAAA,SAAAhgF,GACA,GAAAlnB,GAAAwjG,EAAAt8E,GAAA,EACA,IAAA,MAAAlnB,GAAAA,EAAA,EAAA,MAAAknB,GAAAxU,UAAA1S,EAAA,EAEA4kG,GAAA19E,EAAA,YAAA,SAAAzxC,GACA,GAAAosB,EACApsB,KAAAf,MAAAmtB,EAAA2uC,OAAA/6D,KAAAosB,IAAA,EAAAA,IAAAA,EAAA,GACAqlB,EAAAxU,UAAA7Q,EAAA,MAIAslG,aAAA,SAAAjgF,GACAA,EAAAi0C,gBAAAqoC,EAAAt8E,GAAA,IAAAA,EAAAsI,UAAA,gBAEA43E,gBAAA,SAAAlgF,GACAA,EAAA0pB,aAAA1pB,EAAAqb,UAAA,QAAArb,EAAAqb,UAAA,YAEA8kE,gBAAA,OACAC,gBAAA,OACAC,WAAA,UACAC,WAAA,OACAC,WAAA7D,EAAA,QACA8D,WAAA,QACAC,gBAAA,SAAAzgF,GAAAkyB,EAAAlyB,EAAAA,EAAAqb,YAAA6gE,EAAAl8E,EAAAA,EAAAqb,YAAA,GAAA,SACAqlE,WAAA,YAEAC,aAAAjE,EAAA,aACA1tC,SAAAquC,IAGAC,GAAA5uC,SAAA+tC,GAMAphJ,EAAA,EAAAA,EAAA,KAAAA,EAAAyiJ,EAAAttI,OAAAnV,GACAyiJ,GAAA,OClXArwH,OAAA,UAAA,oBACA,SACA,cACA,OACA,sCACA,QACA,SACA,SAEA,UAEA,wBACA,6BACA,8BACA,+BAEA,4BAEA,8BACA,mCACA,2BACA,0BACA,6BACA,+BACA,2BACA,yBACA,+BACA,+BACA,yBAEA,4BACA,8BAEA,+BACA,kCAEA,SAAA,UAEA,mBAEA,SAAAolC,EAAA7kC,EAAAe,EAAAmS,EAAA0/G,EACA7wH,EAAAgyF,EAAAhsF,GA+gDA,QAAA8qH,GAAAjhJ,EAAAk5C,GACA,GAAAykB,KAEAzkB,GAAAA,GAAA,GAEAykB,EAAAz7D,KAAA,YACA,KAAA,GAAAg/I,KAAAlhJ,GACA,GAAAA,EAAAqM,eAAA60I,GAAA,CACA,GAAA93G,GAAAppC,EAAAkhJ,EAEAvjF,GAAAz7D,KAAAg3C,EAAAgoG,EAAA,IAEA,KAAA,GAAAzhJ,KAAA2pC,GACAA,EAAA/8B,eAAA5M,IACAk+D,EAAAz7D,KAAAzC,EAAA,IAAA2pC,EAAA3pC,GAAA,IAIAk+D,GAAAz7D,KAAA,OAGAy7D,EAAAz7D,KAAA,cAEAvE,EAAA,QAAAwhB,OAAAw+C,EAAArzD,KAAA,MApiDA,SAAA3M,GACA,GA2CAwjJ,GA3CA/gC,EAAA,eAEAghC,GACAjrH,QACAy7B,KAAA,SACAhvB,KAAA,SACA0G,YAAA,0CACA8jC,aAAA,EACAi0E,aAAA,EACA37E,MAAA,EACAszB,MAAA,SACAm0C,eAAA,EACA6M,WAAA,EACAsH,YAAA,EACAhtD,WACAu0B,aAAA,eACAq3B,QAAA,gBAEA3P,aACAxvF,KAAAigG,EAAA72B,SACAypB,gBAAA,IAIAr2B,UACA3rD,KAAA,WACAtoB,YAAA,oCACA4lC,cAAA,EACAxJ,MAAA,IAIA67E,GACArkG,OACA0U,KAAA,SACAhvB,KAAA,QACA0G,YAAA,2BACA8jC,aAAA,EACA8B,cAAA,EACAxJ,MAAA,IAOA9vC,GAyBAC,MAAA,SAAAtsB,GAEA,MAAAjO,MAAAgC,KAAA,WA0CA,QAAAkkJ,GAAAjxH,GACA,GAAAkxH,GAAAz1I,EAAA01I,WACAx+D,EAAA3yD,EAAAzS,QAAA2jI,EAAA3jI,QACAslE,EAAA7yD,EAAAxS,QAAA0jI,EAAA1jI,OACAlY,MAAA87I,KAAAz+D,EAAAA,EAAAE,EAAAA,GAAA,GACAw+D,IAEA,QAAAA,KACA74I,EAAAlG,IAAA,YAAA2+I,EACA,IAAAC,GAAAz1I,EAAA01I,UACAD,GAAA53H,UACAxF,aAAAo9H,EAAA53H,SACA43H,EAAAhuI,WAAAgc,GACAgyH,EAAA53H,YAAA4F,IAwBA,QAAAoyH,GAAA5pI,GACA,GAAApJ,GAAAlR,EAAAugH,GAAAlyG,KAAAiM,EACApJ,KACAoiC,EAAAh5B,GAAApJ,GAjFA,GAGAqvG,GAHAn1G,EAAApL,EAAArC,MACA21C,KACAjlC,IAGAzC,GAAAA,MACAA,EAAAqoD,KAAAroD,EAAAqoD,MAAA,QAEA,IAAAtvC,GAAA3kB,EAAAiG,UAAAw9I,EAAA73I,EAAAqoD,MACAroD,GAAAq5B,MAAA2+G,EAAAh4I,EAAAq5B,QACAtgB,EAAA3kB,EAAAiG,OAAA0e,EAAAi/H,EAAAh4I,EAAAq5B,QACAtgB,EAAA3kB,EAAAiG,OAAA0e,EAAA/Y,GAEA4lB,EAAAU,OAAA,sBACAvN,EAAA6vE,OAAA,SAEA,UAAA7vE,EAAAsvC,OACA5lD,EAAA42B,KAAAtgB,EAAAsgB,KACAtgB,EAAAw/H,YACA91I,EAAA81I,UAAAx/H,EAAAw/H,WAEA1zH,EAAA0D,KAAAC,UAAAgwH,eACAz/H,EAAAs5G,uBACAj0G,IAAAyG,EAAA0D,KAAAC,UAAAgwH,aACAn/G,KAAAtgB,EAAAsgB,KACA3uB,QAAAkb,EAAAU,OAAA,0BAEAvN,EAAAk5G,WACAl5G,EAAAs5G,sBAAAJ,SAAAl5G,EAAAk5G,UACAl5G,EAAAgyE,UAAA,UAAA,oBAGA,UAAAhyE,EAAAsgB,OACAtgB,EAAA0/H,iBAAA,QACA1/H,EAAAu0C,SAAA,uBAMA7qD,EAAA01I,cAkBA34I,EAAA+V,GAAA,YAAA,mBAAA,SAAAyR,GACA,GAAAkxH,GAAAz1I,EAAA01I,UAEAD,GAAA3jI,QAAAyS,EAAAzS,QACA2jI,EAAA1jI,QAAAwS,EAAAxS,QACAhV,EAAA+V,GAAA,YAAA0iI,GACAx1I,EAAA01I,WAAA73H,QAAAjjB,WAAA,WACAg7I,IACA74I,EAAAqoB,aAAA,kBACA,OAEAroB,EAAA+V,GAAA,UAAA,SAAAyR,GACAqxH,QAOA1jC,EAAAn1G,EAAA5F,SAAA,YAAA,KAQA0+I,EAAA,QACAA,EAAA,OACAA,EAAA,SACAA,EAAA,QACAA,EAAA,WACAA,EAAA,SAEA71I,EAAAo0D,GAAAnN,EAAAysC,aAAAwe,EAAA57F,KAEAA,EAAAzT,QACAyT,EAAAzT,MAAA9F,EAAAlN,QACAmQ,EAAAo0D,GAAAnN,EAAAlqD,EAAA,GAAAuZ,IAGAvZ,EAAAiD,KAAAo0G,EAAAp0G,GACAjD,EAAAqoB,aAAA,WAAA9O,EAAAsvC,MAEA7oD,EAAAoc,SAAA,wBACApc,EAAAoc,SAAA,iBACApc,EAAA+V,GAAA,aAAA,SAAAyR,EAAA0yF,GACAl6G,EAAAqoB,aAAA,aAAA6xF,KAEAl6G,EAAA+V,GAAA,QAAA,WACA,SAAA9S,EAAA42B,MACA75B,EAAAqoB,aAAA,WAEAroB,EAAA+V,GAAA,gBAAA,SAAAyR,GACAxnB,EAAAqoB,aAAA,mBAEAroB,EAAA+V,GAAA,eAAA,SAAAyR,EAAA6xG,GACAr5H,EAAAqoB,aAAA,cAAAgxG,KAEAp2H,EAAAo0D,GAAAthD,GAAA,OAAA,SAAAyR,GACAxnB,EAAAqoB,aAAA,cAAA,aAGA9O,EAAAojD,OACAz0B,EAAAqxE,SAAAhgG,EAAAggG,UAAA,UACAv5G,EAAAqoB,aAAA,eAAA6f,IAMAloC,EAAA+V,GAAA,eAAA,SAAAyR,GACAvkB,EAAAo0D,GAAAlgC,YAGA,UAAA5d,EAAAsvC,MAAA,UAAA5lD,EAAA42B,OACA75B,EAAA+V,GAAA,eAAA,SAAAyR,GACAjO,EAAA++H,aACAt4I,EAAAqoB,aAAA,iBAGAroB,EAAA+V,GAAA,eAAA,SAAAyR,EAAAxkB,GACAhD,EAAAqoB,aAAA,iBAAArlB,KAEAhD,EAAA+V,GAAA,eAAA,SAAAyR,EAAAziB,GACA,GAAA9B,EAAAk6G,SAAA,CACA,GAAAzqH,GAAAuQ,EAAAk6G,SAAA/5G,QAAA2B,EACArS,IAAA,GACAuQ,EAAAk6G,SAAAj5G,OAAAxR,EAAA,GAEAuQ,EAAAi2I,WAAAj2I,EAAAi2I,UAAAC,SAAAp0I,IACA9B,EAAAi2I,UAAA5hH,QACAr0B,EAAAi2I,UAAA,QAGA3/H,EAAAojD,MACA38D,EAAA+V,GAAA,aAAA,SAAAyR,EAAA2sB,GACAn0C,EAAAqoB,aAAA,aAAA8rB,KAGAlxC,EAAAo0D,GAAAthD,GAAA,cAAA,SAAAshD,EAAA5kE,GACA4kE,EAAAkoC,SAAA9sG,GAMA2xE,cACA/M,EAAA+nC,gBAAA3sG,EAAA,qBAAA,MAEA4kE,EAAA+nC,gBAAA3sG,EAAA,qBAPA,WACA,MAAAmC,GAAA,kDAAA,UAUAqO,EAAAo0D,GAAAthD,GAAA,SAAA,SAAAshD,EAAAp4B,GACA,GAAAg7E,EAEA,IAAA,YAAAh7E,EAAAmI,OACA6yE,GAAA,MACA,CACA,GAAArlE,GAAA50C,EAAAiD,KAAA,WACA+7F,EAAApqD,EAAAA,EAAA4oD,gBAAAv6F,EAAAu6F,eAEAyc,GAAAh3G,EAAAo0D,GAAA0nC,QAAAC,GAGAh/F,EAAAqoB,aAAA,YAAA4xF,QAYAt6C,UAAA,SAAAuxB,GACA,MAAA3+F,MAAA0Q,KAAAo0G,GAAAnmB,IAUAkoD,cAAA,SAAAC,GACAA,EAAAA,GAAA,UACA9mJ,KAAA0Q,KAAAo0G,GAAAhgD,GAAA99C,QAAA6vE,OAAAiwD,GAQAj9D,SAAA,SAAAvzB,GACA,GAAA5lD,GAAA1Q,KAAA0Q,KAAAo0G,EAWA,OATAntD,GAAAgQ,MAAArR,GAKAA,GAAA5lD,EAAA4lD,MACA5lD,EAAAo0D,GAAAu6C,UAAA,OAAA/oD,GALA7uB,SAAA,WAAA6uB,EAAA,IAAAA,GACA,WACA5lD,EAAAo0D,GAAAu6C,UAAA,OAAA/oD,KAMAt2D,MAWA+mJ,gBAAA,WACA,GAAAr2I,GAAArO,EAAArC,MAAA0Q,KAAAo0G,EACA,IAAAp0G,GAAA,UAAAA,EAAA42B,KAAA,CACA,GAAA0/G,GAAA3kJ,EAAArC,MAAA0Q,KAAA,UAEA,IAAAs2I,GAAAA,EAAAt+B,OACAs+B,EAAAt+B,KAAAmP,QACAmvB,EAAAt+B,KAAA/oH,QACA,OAAA,EAIA,MAAAK,OAWAinJ,eAAA,SAAAp+B,GACA,GAAA5oG,KAkCA,OAhCAjgB,MAAAgC,KAAA,WAQA,IAPA,GAAA0O,GAAArO,EAAArC,MAAA0Q,KAAAo0G,GACAoiC,KAEApiF,EAAAp0D,EAAAo0D,GACAlO,EAAAkO,EAAAylB,YACA94E,EAAAqzD,EAAAR,WAEA1N,EAAAnlD,EAAAmlD,IAAA,CACAkO,EAAAkoC,SAAAp2C,GACAib,eACAq1E,EAAAtgJ,KARA,EAQAgwD,EAAA,GAGA,GAAAswF,EAAAhmJ,OAAA,EAAA,CACA,GAAAsY,EAEA,IAAA9I,EAAAk6G,UAAAl6G,EAAAk6G,SAAA/5G,QAAAg4G,IAAA,EACArvG,EAAA,aAAAqvG,EAAA,WACA,CACA,GAAAxmE,GAAAhgD,EAAArC,MAAA0Q,KAAA,UACA2xC,KACA7oC,EAAA,WAAA6oC,EAAA7oC,MAGAA,GACAyG,EAAArZ,MAAA4S,KAAAA,EACA0tI,YAAAA,OAKAjnI,GAeAumI,UAAA,SAAAl/G,EAAA6/G,GACA,GAAAj+I,KAwBA,OAtBAlJ,MAAAgC,KAAA,WACA,GAAAK,EAAArC,MAAA81B,aAAA,mBAAA,CACA,GAAAplB,GAAArO,EAAArC,MAAA0Q,KAAAo0G,EAEA,IAAAp0G,KACA42B,GAAAA,GAAA52B,EAAA42B,MAAA,CACA,GAAA8/G,EAMAA,GAHA,kBAAA12I,GAAA,WAAAy2I,EAGAz2I,EAAAo0D,GAAAu/B,WAFA3zF,EAAA81I,YAMAt9I,EAAAtC,KAAAwgJ,OAMAl+I,EAAA8F,KAAA,SAMAq4I,YAAA,WACA,GAAA9vH,IAAAhkB,MAAAvT,KAAA0Q,KAAAo0G,GAAAhgD,GAAAu/B,YAEAijD,EAAAtnJ,KAAA81B,aAAA,iBAIA,OAHAwxH,GAAApmJ,OAAA,IACAq2B,EAAA2vH,YAAAI,GAEA/vH,GAOA9C,MAAA,WACA,GAAA/oB,EAEA,OAAA1L,MAAAgqB,SAAA,WACAhqB,KAAA21C,QAAA,UACAjqC,EAAA1L,KAAAya,QAAA,cAAA/O,EAAAxK,OAAA,IACAqmJ,MAAA77I,EAAAiqC,QAAA,SACA4xG,OACAA,MAAA,IAAAvnJ,KAAAya,QAAA,YAAA1D,KAAA,YAHA,IAYAywI,YAAA,WACA,GAAA9lG,KAWA,OATA1hD,MAAAgC,KAAA,WACA,GAAA0O,GAAArO,EAAArC,MAAA0Q,KAAAo0G,EAEAp0G,IAAAA,EAAAo0D,IAAAp0D,EAAAo0D,GAAAt0D,MAAA8vH,sBACA5+E,EAAA96C,KAAA8J,EAAAo0D,GAAAt0D,MAAA8vH,sBAAAxd,MAEAphE,EAAA96C,KAAA,QAGA86C,GAUA+mE,UAAA,SAAA/qG,EAAAypI,GAIA,GAHA,gBAAA,KACAzpI,GAAAhN,KAAAgN,IAEA1d,KAAA0Q,KAAA,YAAA,GAAAy2I,EACAnnJ,KAAA21C,QAAA,YAAAj4B,OACA,CACA,GAAAhN,GAAA1Q,KAAA0Q,KAAAo0G,EAEAp0G,GAAAo0D,GAAAomC,SAAAxtF,EAAAhN,OACAgN,EAAAk5C,MAAAl5C,EAAA+pG,UACA/2G,EAAAo0D,GAAAlgC,UAEAlnB,EAAAk5C,KACA52D,KAAA81B,aAAA,WAAApY,EAAAk5C,KAAAl5C,GAEA1d,KAAA81B,aAAA,gBAAApY,EAAA+pG,SAIA,UAAA/2G,EAAA42B,MAAA5pB,EAAA0qG,WACA/lH,EAAA,yBAAAue,QAAA,kBACA+1C,OAAA32D,KACA4hD,MAAAlkC,EAAAkkC,QAIA,MAAA5hD,OAOAynJ,YAAA,SAAAzgI,GAIA,MAHAA,IAAAA,EAAAohG,WACA/lH,EAAA,yBAAAue,QAAA,kBAAA5gB,MAEAA,MAMAuY,MAAA,WACA,GAAA7H,GAAA1Q,KAAA0Q,KAAAo0G,EAGA,OAFAp0G,IACAA,EAAAo0D,GAAAvsD,QACAvY,MAQAqsG,UAAA,SAAAqb,GACA,GAAAh3G,GAAA1Q,KAAA0Q,KAAAo0G,EAEAp0G,GAAAg3I,iBAAAhgC,IACAh3G,EAAAg3I,gBAAAhgC,EACA1nH,KAAA4gB,QAAA,gBAAA8mG,KAQAigC,WAAA,WACA,MAAA3nJ,MAAAgC,KAAA,WACA,GAAAyL,GAAApL,EAAArC,MACA0Q,EAAAjD,EAAAiD,KAAAo0G,EACAp0G,GAAAu6F,gBAAAv6F,EAAAo0D,GAAAwnC,mBACA57F,EAAAg3I,iBAAA,KASAd,QAAA,SAAA5/H,GACA,GAAAtW,GAAA1Q,KAAA0Q,KAAAo0G,EAEA,IAAAp0G,EAAA,CACA,GAAAsW,EAAArf,IAKA,MAJA+I,GAAAk6G,SAAAl6G,EAAAk6G,aACAl6G,EAAAk6G,SAAA/5G,QAAAmW,EAAArf,KAAA,GACA+I,EAAAk6G,SAAAhkH,KAAAogB,EAAArf,KAEA3H,IACA,IAAAgnB,EAAAhP,IACA,MAAAtH,GAAAk6G,UACAl6G,EAAAk6G,SAAA/5G,QAAAmW,EAAAhP,MAAA,IAWA4xG,MAAA,SAAA1gH,GAOA,QAAA0+I,GAAAn6I,GACA,GAAA06B,GAAA9lC,EAAAy1B,GAAAqQ,QAAAj/B,IAAA,eACA7G,GAAA,QAAAwhB,OAAAskB,GACA9lC,EAAA,OAAA8lC,EAAAC,cAAAvoC,UAAAgkB,OAAApW,GACA06B,EAAAC,cAAAwhF,QAVA,GAAApoF,GAAAn/B,EAAAy1B,GAAA0J,KAAA5X,MAAA,eAwBA,OAtBA1gB,KAAAA,EAAAlJ,KAAA81B,aAAA,cAEA6hC,EAAA0R,QAAAngE,EAAA,SAAAs4B,GASAn/B,EAAAirB,MAAAjB,IAAAyG,EAAA0D,KAAAC,UAAA1D,MAAA,iCACAziB,SAAA,OACAge,QAAA,SAAA5d,GACAk3I,EAAAvlJ,EAAAy1B,GAAA2C,IAAAp4B,EAAAy1B,GAAApzB,MAAAgM,GACA8wB,KAEA/wB,MAAA,SAAAi3B,GACA7S,EAAAyT,UAAAZ,MAIA1nC,MAYA6nJ,WAAA,SAAAlgC,GACA,GAAAj3G,GAAA1Q,KAAA0Q,KAAAo0G,EAeA,OAbA,yBAAA6C,EAAAhrG,MACAjM,EAAAo0D,GAAAu6C,UAAA,yBACA1mG,QAAAgvG,EAAAp0G,QAGA,oBAAAo0G,EAAAhrG,OACA,GAAAgrG,EAAAp0G,MACA7C,EAAAo0D,GAAAu6C,UAAA,SAAA,SAEA3uG,EAAAo0D,GAAAu6C,UAAA,SAAA,YAIAr/G,MAWA8nJ,eAAA,SAAAr3I,GACA,GAAAA,EAAA2H,SAAAoB,OACA,GAAA/I,EAAA2H,SAAAoB,MACAxZ,KAAA81B,aAAA,WAAArlB,EAAA2H,SAAAoB,OAAA,CACA,GACAuuI,GADAr3I,EAAA1Q,KAAA0Q,KAAAo0G,EAGAr0G,GAAA2H,SAAAqjB,KACA9U,KAAAjW,EAAAo0D,GAAA0S,YAAA5gB,KAAAnmD,EAAA2H,SAAAw+C,KAAA,EACAn7B,GAAAhrB,EAAA2H,SAAAqjB,GAAA,GAEA,SAAA9U,KACAohI,EAAA1lJ,EAAAy1B,GAAA2C,KAAA7Q,MAAA,uBACAvnB,EAAAy1B,GAAAoD,MAAAtR,MAAA,oCACAvnB,EAAA0lJ,GAAAzjJ,IAAA,eAAAqiB,KAAA,MAGA,IAAAlZ,GAAApL,EAAAy1B,GAAA2C,KAAA7Q,MAAA,iCACAoR,MAAA,mCAEA+sH,EACA1lJ,EAAAoO,EAAAC,MAAA,GACArO,EAAAy1B,GAAAoD,MAAAtR,MAAA,uCACAglD,EAAAl+D,EAAAo0D,GAAAqtB,cAAA1hF,EAAA2H,SAAAw+C,KAAA,EAAAnpD,EAEAgD,GAAAu3I,eACA3lJ,EAAAoL,GAAAiD,KAAA,gBAAAD,EAAAu3I,eACA3lJ,EAAAoL,GAAA+V,GAAA,QAAA,SAAAyR,GACAxkB,EAAAw3I,eACA,GAAAx3I,EAAAw3I,cAAAhzH,IAEA25C,EAAA7pC,UAEA1iC,EAAAoL,GAAAiD,KAAA,YAAAk+D,GAGA,MAAA5uE,OAOAyhI,iBAAA,WAGA,MAFAzhI,MAAA0Q,KAAAo0G,GACAhgD,GAAA07D,yBAAA,GACAxgI,MAMA4kC,QAAA,WACA,GAAAl0B,GAAA1Q,KAAA0Q,KAAAo0G,EAGA,OAFAp0G,IACAA,EAAAo0D,GAAAlgC,UACA5kC,MAMAkoJ,cAAA,WAOA,MANAloJ,MAAAkU,KAAA,eAAAlS,KAAA,WACAK,EAAArC,MAAA0Q,KAAA,aAAAq0B,UAGA/kC,KAAA81B,aAAA,gBAAA,MAEA91B,MASAs5G,YAAA,SAAAwtB,GACA,GAAA,WAAAA,EACA+e,EAAA7lJ,KAAA,OACA,IAAA6lJ,GAAA7lJ,KAAA,GAAA,CACAyN,KAAApL,EAAAwjJ,EACA,IAAAn1I,GAAAjD,KAAAiD,KAAAo0G,EACAp0G,GAAAo0D,GAAAw0C,YAAAwtB,GACAr5H,KAAAyG,KAAA,4BAAAqE,QAGA,MAAAvY,OASAmoJ,SAAA,SAAA3uI,GAGA,GAAAA,EAAAmd,WAAA,cAAA,CACA,GAAAjmB,GAAA1Q,KAAA0Q,KAAAo0G,EAEA,IAAAp0G,EAAAk6G,WACAp4G,GAAAgH,EAAAjJ,MAAA,KAAA,KACAG,EAAAk6G,SAAA/5G,QAAA2B,KAAA,EACA,OAAA,EAGA,GAAAgH,EAAAmd,WAXA,YAWA,CACA,GAAA0rB,GAAAriD,KAAA0Q,KAAA,UAEA,IAAA2xC,GAAA7oC,EAAA7W,MAdA,WAcAzB,SAAAmhD,EAAA7oC,KACA,OAAA,EAGA,OAAA,GAWAovG,cAAA,SAAAnB,GACA,GAAA,GAAAznH,KAAAkB,OACA,MAAAlB,KAEA,IAAA0Q,GAAA1Q,KAAA0Q,KAAAo0G,EAOA,IALAp0G,EAAAi2I,YACAj2I,EAAAi2I,UAAA5hH,QACAr0B,EAAAi2I,UAAA,QAGAl/B,GAAAA,EAAA/pG,QAAA+pG,EAAA/pG,OAAAlE,MAuBA,MAAAxZ,KAtBA,IAAAwZ,GAAAiuG,EAAA/pG,OAAAlE,IAEA,IAAAxZ,KAAA81B,aAAA,WAAAtc,GAAA,CACA,GAAAiuG,EAAA/pG,OAAAsX,MAAAyyF,EAAA/pG,OAAAyf,GAAA,CACA,GAAAnI,GAAAtkB,EAAAo0D,GAAAsjF,gBAAA3gC,EAAA/pG,OAAAsX,MACAmI,EAAAzsB,EAAAo0D,GAAAsjF,gBAAA3gC,EAAA/pG,OAAAyf,GAEAn9B,MAAAsa,GAAA,aACAta,KAAA21C,QAAA,SAAA,SAEA3gB,GAAAmI,IACAzsB,EAAAi2I,UAAAj2I,EAAAo0D,GAAAytB,SAAAv9D,EAAAmI,GACAjnB,UAAA,SAAAuxG,EAAA4gC,OAEA33I,EAAAi2I,UAAAC,QAAAn/B,EAAAm/B,QACAl2I,EAAAo0D,GAAA+Z,eAAA7pD,EAAA,KAIA,MAAAh1B,QAgBAgmF,aAAA,WACA,GAAA55B,KA2DA,OAzDApsD,MAAAgC,KAAA,WA8BA,QAAAsmJ,GAAAphI,GACA,OAAA0vC,KAAA1vC,EAAA0vC,KAAAn7B,GAAAvU,EAAAuU,IA9BA,GAAAq+F,GAAAz3H,EAAArC,MACA0Q,EAAAopH,EAAAppH,KAAAo0G,EAEA,IAAA,GAAAp0G,EAAAo0D,GAAAmoB,oBAAA,CACA,GAAA/4D,GAAAxjB,EAAAo0D,GAAA2vB,iBACA8zD,GAAA7uB,eAGA8uB,EAAA1uB,EAAAr/G,QAAA,YAAA1D,KAAA,OACAyxI,KACAD,EAAA1yH,KAAA2yH,EAEA,KAAA,GAAAroJ,GAAA,EAAAA,EAAA+zB,EAAAhzB,OAAAf,IAAA,CACA,GAAAiE,GAAA8vB,EAAA/zB,GACAsoJ,IAmBA,QAjBA,SAAAC,EAAAC,GACA,MAAAD,GAAA9xF,KAAA+xF,EAAA/xF,MAAA,EACA8xF,EAAA9xF,KAAA+xF,EAAA/xF,KAAA,EACA8xF,EAAAjtH,GAAAktH,EAAAltH,IAAA,EACAitH,EAAAjtH,GAAAktH,EAAAltH,GAAA,EACA,GAYAr3B,EAAAq1E,OAAAr1E,EAAA3D,OACA,KAAA,EACAgoJ,EAAAzzH,KAAAszH,EAAAlkJ,EAAAq1E,QACAgvE,EAAAtrH,GAAAmrH,EAAAlkJ,EAAA3D,KACA,MACA,KAAA,GACAgoJ,EAAAtrH,GAAAmrH,EAAAlkJ,EAAAq1E,QACAgvE,EAAAzzH,KAAAszH,EAAAlkJ,EAAA3D,KACA,MACA,KAAA,GACA,SAGAgoJ,EAAA/wF,OAAAhnD,EAAAo0D,GAAA+8B,SAAA4mD,EAAAzzH,KAAAyzH,EAAAtrH,IACAsrH,EAAAv7H,QAAAxc,EAAAo0D,GAAA+8B,SAxBA,SAAA36E,GACA,OAAA0vC,KAAA1vC,EAAA0vC,KAAAn7B,GAAA,IAuBAgtH,EAAAzzH,MArBA,SAAA9N,GACA,OAAA0vC,KAAA1vC,EAAA0vC,KAAAn7B,GAAA/qB,EAAAo0D,GAAAjH,QAAA32C,EAAA0vC,MAAA11D,SAoBAunJ,EAAAtrH,KAEAorH,EAAA7uB,WAAA9yH,KAAA6hJ,GAGAr8F,EAAAxlD,KAAA2hJ,MAIAn8F,EAAAlrD,OAAA,EAAAkrD,EAAA,MAOAi6B,iBAAA,SAAAj6B,GACA,QAAAw8F,GAAA9uB,EAAA5lG,GAmFA,IAAA,GAlFAxjB,GAAAopH,EAAAppH,KAAAo0G,GACAhgD,EAAAp0D,EAAAo0D,GACA+jF,KACAC,EAAA,GA+EA3oJ,EAAA,EAAAA,EAAA+zB,EAAAhzB,OAAAf,IAAA,CACA,GAAAE,GA9EA,SAAA+D,GA6CA,QAAA2kJ,GAAAhjJ,EAAAjF,EAAA26B,GAEA,MADAA,GAAAA,GAAA,GACAm7B,KAAA7wD,EAAA6wD,KAAA91D,EAAA26B,GAAA11B,EAAA01B,GAAAA,GA9CA,GAAAqpC,EAAA+8B,SAAAz9F,EAAA4wB,KAAA5wB,EAAA+4B,KAAA/4B,EAAAszD,OACA,OAAA+hB,OAAAr1E,EAAA4wB,KAAAv0B,KAAA2D,EAAA+4B,GAgDA,KA9CA,GAAAv4B,GAAAkgE,EAAAylB,YACA1lF,EAAAigE,EAAAR,WACArzC,EAAA,EACA+3H,EAAA,EA2CA5kJ,EAAA4wB,KAAA4hC,KAAA3lC,GAAArsB,GACAR,EAAA+4B,GAAAy5B,KAAA3lC,GAAApsB,GAAA,CACA,GAAA42B,EAEA,IA7CA,SAAAwtH,EAAA7kJ,GAEA,IAAA,GADA62D,GAAA72D,EAAAmM,MAAA,MACApQ,EAAA,EAAAA,EAAA86D,EAAA/5D,OAAAf,IACA,GAAA2kE,EAAAjH,QAAAorF,EAAA9oJ,IAAA86D,EAAA96D,GACA,OAAA,CAEA,QAAA,GAuCAiE,EAAA4wB,KAAA4hC,KAAA3lC,EAAA7sB,EAAA8oB,SACA,OAAAusD,OAAAsvE,EAAA3kJ,EAAA4wB,KAAA/D,GACAxwB,KAAAsoJ,EAAA3kJ,EAAA+4B,GAAAlM,GACAA,OAAAA,EAEA,KAAAwK,EAzCA,SAAAwtH,EAAA7kJ,GAEA,IAAA,GADA62D,GAAA72D,EAAAmM,MAAA,MACApQ,EAAA,EAAAA,EAAA86D,EAAA/5D,OAAAf,IAAA,CACA,GAEA+oJ,GAFAC,EAAArkF,EAAAjH,QAAAorF,GACAnoJ,EAAAm6D,EAAA96D,EAGA,IAAA,GAAAA,EAAA,CACA,GAAAA,GAAA86D,EAAA/5D,OAAA,EACA,MAAAioJ,GAAAt4I,QAAA/P,EAIA,OAFAooJ,EAAAC,EAAAt4I,QAAA/P,KAEA,GAAAA,EAAAI,OAAAgoJ,GAAAC,EAAAjoJ,QACA,OAAA,MAEA,IAAAf,GAAA86D,EAAA/5D,OAAA,GACA,GAAA,GAAAioJ,EAAAt4I,QAAA/P,GACA,OAAA,MAEA,IAAAgkE,EAAAjH,QAAAorF,EAAA9oJ,IAAA86D,EAAA96D,GACA,OAAA,EAGA,MAAA+oJ,IAiBA9kJ,EAAA4wB,KAAA4hC,KAAA3lC,EAAA7sB,EAAAszD,UAAA,EAAA,CACA,GAAA0xF,GAAA3tH,EAAAr3B,EAAA4wB,KAAAyG,GACA4tH,EAAAjlJ,EAAA+4B,GAAAy5B,MAAAxyD,EAAA4wB,KAAA4hC,KAAA,EAAAwyF,CAEA,QAAA3vE,OAAAsvE,EAAA3kJ,EAAA4wB,KAAA/D,EAAAm4H,GACA3oJ,KAAAsoJ,EAAA3kJ,EAAA+4B,GAAAlM,EAAAo4H,GACAp4H,OAAAA,GAIA+3H,IACA/3H,EAAA1mB,KAAA8sB,MAAA2xH,EAAA,GACAA,EAAA,GAAA,IACA/3H,GAAAA,KAMAiD,EAAA/zB,GACAE,KACAwoJ,EAAAjiJ,KAAAvG,GACAA,EAAA4wB,SACA,IAAA63H,IACAA,GAAA,KACAA,GAAAzoJ,EAAA4wB,SAOA,GAFA43H,EAAA3nJ,OAAA,GACA4jE,EAAA0mC,cAAAq9C,EAAA,GACA,IAAAC,GAAAD,EAAA3nJ,OAAAgzB,EAAAhzB,OAAA,CACA,GAAAwtC,EAGAA,GADAm6G,EAAA3nJ,QAAAgzB,EAAAhzB,OACA,8BAAA4nJ,EACA,IAAAA,EACA,mCAEA,yCAAAA,EAEAj0H,EAAAsB,UAAAptB,KAAA2lC,EAAAtY,MAAA0jG,KAKA,GAAA1tE,EAAA,GAAAv2B,KAGA,IAAA,GAFAw/D,GAAAr1F,KAEAG,EAAA,EAAAA,EAAAisD,EAAAlrD,OAAAf,IAAA,CACA,GAAAiE,GAAAgoD,EAAAjsD,GASA25H,EAPA,SAAAn9G,GACA,IAAA,GAAAxc,GAAA,EAAAA,EAAAk1F,EAAAn0F,OAAAf,IACA,GAAAkC,EAAAgzF,EAAAl1F,IAAAsa,QAAA,YAAA1D,KAAA,SAAA4F,EACA,MAAAta,GAAAgzF,EAAAl1F,KAIAiE,EAAAyxB,KACAikG,IACA8uB,EAAA9uB,EAAA11H,EAAAs1H,gBAGAkvB,GAAA5oJ,KAAAosD,EAGA,OAAApsD,OAeAspJ,YAAA,SAAApgJ,EAAAqgJ,GACA,GACAC,GADA9rI,EAAAxU,GAAAlJ,KAAA81B,aAAA,aAEA2zH,IAEA,IAAA,IAAApnJ,EAAA4P,KAAAyL,GACA,MAAA,KAOA,IAJA8rI,EADA,GAAAD,GACArgJ,GAEAwU,EAAAzb,MAAA,uCAGA,IAAA,GAAA9B,GAAA,EAAAA,EAAAqpJ,EAAAtoJ,OAAAf,IAAA,CACA,GAAAupJ,GAAAF,EAAArpJ,GAAA8B,MAAA,6CAEA,IAAAynJ,EACA,IAAA,GAAAloJ,GAAA,EAAAA,EAAAkoJ,EAAAxoJ,OAAAM,IAAA,CACA,GAAAmoJ,GAAAD,EAAAloJ,GAAA0B,QAAA,YAAA,IACAA,QAAA,OAAA,GACAumJ,GAAA7iJ,KAAA+iJ,IAMA,MAAAF,IAOAG,WAAA,SAAAhoG,GACA,GAAAkjB,GAAA9kE,KAAA0Q,KAAAo0G,GAAAhgD,GACApnD,EAAA1d,KAAA81B,aAAA,aACAlxB,EAAA5E,KAAA81B,aAAA,SACA,2BAAAtiB,KAAA,EAAAhJ,IAAA,IACA3F,EAAA7E,KAAA81B,aAAA,SAAA,QAAAlxB,MAAAA,EAAAgyD,KAAApsD,IAAA,GAEA,IAAA,GAAA5F,EAAA1D,OACA,CAAA,GAAA2D,GAAA7E,KAAA81B,aAAA,SAAA,QACAlxB,MAAAA,EAAA,GAAAgyD,KAAApsD,IAAA,IACA2tD,EAAAn4D,KAAA81B,aAAA,cAAApY,EAEA,IAAAy6C,IAAA,GAAAA,EAAAtnD,QAAA+wC,GAEA,MADA/sB,GAAAtB,MAAA,gCACAvzB,IAEA,IAAA,GAAA6E,EAAA3D,OAEA,MADA2zB,GAAAtB,MAAA,kDACAvzB,IAGA4hD,GAAAA,EAAArxC,MAAA,MAAAvB,KAAA,SACA81D,EAAA0pB,cAAA53B,KAAA/xD,EAAA,GAAA+xD,KAAA,EAAAn7B,GAAA,IACAqpC,EAAA4vB,iBAAA,MAAA9yC,EAAA,UAEA,CAAA,GAAAioG,GAAA/kF,EAAAR,WACA1N,EAAAkO,EAAAjH,QAAAgsF,EAEA/kF,GAAAysB,aAAA,0BACA3vC,EAAA,UACAgV,KAAAizF,EAAApuH,GAAAm7B,EAAA11D,SAGA,MAAAlB,OAaA2hD,OAAA,SAAAlsC,EAAAuR,GACA,GAAA89C,GAAA9kE,KAAA0Q,KAAAo0G,GAAAhgD,GACAtxD,EAAAwT,EAAAxT,KAAA,EACA5O,MAAAuvB,IAAAnN,EAAApiB,MAAAkgE,EAAAylB,YAAAvjE,EAAApiB,MACAC,MAAAsvB,IAAAnN,EAAAniB,IAAAigE,EAAAR,WAAAt9C,EAAAniB,IACAoP,IAEA,KAAA,GAAAT,GAAA3O,EAAAD,GACA,GAAA4O,GAAA5O,EAAAC,EACA,CAAA,GAAAilJ,GAAAllJ,CACAA,GAAAC,EACAA,EAAAilJ,EAGA,GAAAt2I,EAAA,GAAA5O,EAAAC,GACA2O,EAAA,GAAA5O,EAAAC,EACA,MAAAoP,EACApP,IAAA2O,CAEA,KAAA,GAAArT,GAAAyE,EAAAzE,GAAA0E,EAAA1E,GAAAqT,EAAA,CACA,GAAAojD,GAAAkO,EAAAjH,QAAA19D,EACA,IAAAy2D,EAAAjV,OAAAlsC,IAAA,IACAxB,EAAArN,MAAAgwD,KAAAz2D,EAAA,EAAAI,KAAAq2D,IACA5vC,EAAAxc,KAAAwc,EAAAxc,MAAAyJ,EAAA/S,QACA,MAAA+S,GAIA,MAAAA,IAcA81I,SAAA,SAAAnzF,EAAA5vC,GAMA,QAAAgjI,GAAAllF,GACA,OAAA3wC,KAAA2wC,EAAAmlF,eAAA,CACA,IAAA,GAAA9pJ,GAAA,EAAAA,EAAA2kE,EAAAmlF,eAAA/oJ,OAAAf,IACA2kE,EAAAmlF,eAAA9pJ,GAAA4kC,OACA+/B,GAAAv9D,IAAA,iBAAAyiJ,GAEAllF,EAAAmlF,kBAoBA,QAAAC,GAAAtzF,EAAA1gD,GAGA,IAFA,GAAAjU,GAEAA,EAAAwT,EAAAhR,KAAAqgE,EAAAjH,QAAAjH,KACAkO,EAAAmlF,eAAArjJ,KACAk+D,EAAAytB,UAAA37B,KAAAA,EAAAn7B,GAAAx5B,EAAAyY,QACAk8C,KAAAA,EAAAn7B,GAAAx5B,EAAAyY,MAAAzY,EAAA,GAAAf,SACAgV,UAAAA,EACA28E,cAAA,EACA7wB,gBAAA,EACAhnC,MAAA,kBAzCA,GAGAvlB,GAHA/E,EAAA1Q,KAAA0Q,KAAAo0G,GACAhgD,EAAAp0D,EAAAo0D,GACArpC,EAAA,CAYAuuH,GAAAllF,GACA99C,EAAAA,MACAvR,EAAAuR,EAAAohC,MACAwO,GAAA,EAEAnhD,IACAgmB,EAAAqpC,EAAAjH,QAAAjH,GAAAjV,OAAAlsC,IACA,IACAgmB,EAAA,GAGAqpC,EAAAxU,WAAAsG,KAAAA,EAAAn7B,GAAAA,GACA,IAAA0uH,GAAArlF,EAAAk8C,gBAAA/gF,aACAo3C,EAAAvS,EAAA0S,YAAA5gB,KAAAA,EAAAn7B,GAAA,GAAA,QAGA,IAFAqpC,EAAAvzC,SAAA,MAAA8lD,EAAAvhE,IAAAuhE,EAAAh0C,OAAA8mH,GAAA,GAEA10I,EAAA,CAiBA,GADAy0I,EAAAtzF,EAAA,2BACA5vC,EAAAwwC,eAGA,IAAA,GAFA4yF,GAAAtlF,EAAAu7C,cAEAlgH,EAAAiqJ,EAAAp1H,KAAA70B,EAAAiqJ,EAAAjtH,GAAAh9B,IACAA,GAAAy2D,GACAszF,EAAA/pJ,EAAA,8BAKA2kE,GAAAmlF,eAAA/oJ,OAAA,GACA4jE,EAAAthD,GAAA,iBAAAwmI,OAEAllF,GAAAmlF,eAAArjJ,KACAk+D,EAAAytB,UAAA37B,KAAAA,EAAAn7B,GAAA,IACAm7B,KAAAA,EAAAn7B,GAAAqpC,EAAAjH,QAAAjH,GAAA11D,SACAgV,UAAA,0BACA28E,cAAA,EACA7wB,gBAAA,EACAhnC,MAAA,gBAIA,OAAAh7B,OAMAk4H,UAAA,WACA,MAAAl4H,MAAA0Q,KAAAo0G,GAAAhgD,GAAAwnC,oBAGAE,QAAA,SAAAC,GACA,MAAAzsG,MAAA0Q,KAAAo0G,GAAAhgD,GAAA0nC,QAAAC,IAMA49C,aAAA,SAAA10G,GACA,GAAAjlC,GAAA1Q,KAAA0Q,KAAAo0G,GACAr3G,EAAAzN,IAuBA,OArBA21C,GAAAu1D,SAAA,SAAAxtF,GACAjQ,EAAAqoB,aAAA,YAAApY,GAAA,IAEAi4B,EAAA0uD,SAAA,WACA,MAAA3zF,GAAAo0D,GAAAu/B,YAEA1uD,EAAAuiF,UAAA,WACA,MAAAxnH,GAAAo0D,GAAAwnC,oBAEA32D,EAAA62D,QAAA,SAAArgB,GACA,MAAAz7E,GAAAo0D,GAAA0nC,QAAArgB,IAEAx2C,EAAA02D,UAAA,SAAAqb,GACAj6G,EAAAqoB,aAAA,YAAA4xF,IAGA/xE,EAAAs1D,gBAAAv6F,EAAAo0D,GAAAwnC,mBACA32D,EAAArsC,UAAAoH,EAAAo0D,GAAAu/B,WACA1uD,EAAAwiF,gBAAA,OAEAn4H,KAAA21C,QAAAA,GACA31C,MAMAsqJ,cAAA,WACA,GAAA78I,GAAAzN,KACA0Q,EAAA1Q,KAAA0Q,KAAAo0G,GACA7a,EAAAv5F,EAAAo0D,GAAAqb,YACA7/B,EAAA5vC,EAAAo0D,GAAA+6C,WAAA5V,GAAA,GACAr/F,EAAA8F,EAAAo0D,GAAAyhE,iBAAAjmF,GACA7pB,EAAA/lB,EAAAo0D,GAAA4hE,mBAAA97H,EAEA,IAAA6rB,GAAAA,EAAAv1B,OAAA,EAAA,CAOA,IAAA,GANA2gC,GAAAx/B,EAAAy1B,GAAA+J,KACA5nB,EAAA5X,EAAAy1B,GAAA2C,KAAA7Q,MAAA,eAAAvnB,EAAAy1B,GAAA2C,IAAA,SAAAoH,GACAwF,EAAAhlC,EAAAy1B,GAAA2C,KAAA7Q,MAAA,cACAvnB,EAAAy1B,GAAA2C,KAAA7Q,MAAA,SACA3P,GAEA9Z,EAAA,EAAAA,EAAAs2B,EAAAv1B,OAAAf,IAAA,CACA,GAAAoqJ,GAAA9zH,EAAAt2B,EACAkC,GAAAw/B,GAAAhe,OAAAxhB,EAAAy1B,GAAAwJ,GAAAj/B,EAAAy1B,GAAA3zB,GAAAqmJ,gBAAArqJ,GAAAoqJ,EAAAvvH,SAGA,GAAAyvH,GAAA/5I,EAAAo0D,GAAA2S,cAAA,EACAp1E,GAAA4X,GAAA3V,KAAAwR,IAAA20I,EAAApnH,OAAA1c,KAAA8jI,EAAA9jI,OAEAtkB,EAAA,QAAAwhB,OAAAwjB,GACAhlC,EAAAglC,GAAA7jB,GAAA,QAAA,SAAAyR,GACA,GAAA90B,GAAAkC,EAAA4yB,EAAA9c,QAAAzH,KAAA,WAGA,IAFArO,EAAAglC,GAAAp6B,aAEAknB,KAAAh0B,EAAA,CACA,GAAAoqJ,GAAA9zH,EAAAt2B,EAEA,IAAAoqJ,EAAA/wI,KACA/L,EAAAgN,QAAA,UAAAsY,MAAA,WAAAw3H,OACA,CACA,GAAA5zF,EAIA,UAAAjmD,EAAA42B,MACAqvB,EAAAlpD,EAAAgN,QAAA,wBACAgoG,YAAA,oBAEA9rD,EAAA,IACA9hC,EAAAtB,MAAA,8BAEAojC,EAAAlpD,EAGAkpD,GAAAA,EAAA,IACAA,EAAA7gC,aAAA,WAAAy0H,EAAA3zF,KAAA2zF,GAAAhyI,YAMAlW,EAAAglC,GAAA1pB,OAGA,MAAA3d,OAkBA0tH,UAAA,SAAA9rE,EAAA56B,GAQA,QAAA0jI,GAAA1wI,GACA,GAAA2wI,IAAA,EACAC,GAAA,CAEAvoJ,GAAAwoJ,GAAA32I,KAAA8F,GAAAhY,KAAA,WACA,GAAAyL,GAAApL,EAAArC,MACA2c,EAAAlP,EAAAlN,MAEAkN,GAAAuc,SAAA,cACA,cAAArN,EAAAiuI,GAAA,EACAA,IACAD,GAAA,GAGAA,GAAAl1H,EAAA5kB,QAAA8L,GAAA,GACA8Y,EAAA7uB,KAAA+V,KAtBA,GAAAkuI,GAAAxoJ,EAAAy1B,GAAAoD,MAAAtR,MAAA,sBACA6L,IAkCA,OAhCAzO,GAAAA,MAEA2wC,EAAA0R,QAAAznB,EAAA,SAAAipG,GAsBA7jI,EAAAspB,WACAo6G,EAAA,8CAEAA,EAAA,eACA1jI,EAAAgP,MACA00H,EAAA,kBAGAj1H,GASAq1H,aAAA,SAAAtlG,GAKA,QAAAulG,GAAAvpH,EAAAqK,GAGA,MAFAvQ,GAAAxF,aAAA,YAAA0L,EAAA,IAAAogB,EAAA,IAAA/V,EAAA,KACAtzB,QACA+iB,EAPA,GAAAsmB,GAAA/mB,EAAAgwF,aAAA7qH,KAAA81B,aAAA,YAAA,UACAwF,EAAAt7B,KACAy1B,EAAAz1B,KAAA81B,aAAA,YAAA8rB,EAqBA,QAAA4D,GACA,IAAA,wBACA,MAAAulG,GAAA,wBAAA,WACA,KAAA,aACA,MAjBA,UAAAvpH,GAGA,MAFAlG,GAAAxF,aAAA,YAAA0L,EAAAogB,EAAA,KACArpC,QACA+iB,GAcA,eAAA7F,EAAAzmB,KAAA,KAAA,QACA,KAAA,WACA,MAAA+7I,GAAA,aAbA,SAAAjqJ,GAEA,IAAA,GADAolB,MACA/lB,EAAA,EAAAA,EAAAs1B,EAAAv0B,OAAAf,IACA+lB,EAAAtf,KAAA,OAAA6uB,EAAAt1B,GAAA,IACA,OAAA+lB,GAAAlX,KAAA,MASAymB,GAAA,MAAA,IACA,KAAA,WACA,MAAAs1H,GAAA,aAAAt1H,EAAAzmB,KAAA,KAAA,MAAA,IACA,KAAA,QACA,MAAA+7I,GAAA,aAAA,IACA,KAAA,OACA,MAAAA,GAAA,QAAA,IACA,KAAA,gBACA,MAAAA,GAAA,UAAA,GACA,SACAx3H,MAAA,qBAAAiyB,EAAA,OAkBA,IAbAqhE,EAAAC,SAAAkkC,SACA16I,SAAA,KACA02G,SAAA,UACA3gF,MAAA,UACA3Z,YAAA,gBACAxG,MAAA,IACA0zC,OAAA,SAAA5xB,EAAAhhB,GACA3kB,EAAA2lC,GAAAne,SAAA,iBACAiM,aAAAzzB,EAAAiG,QAAA8hE,MAAA,GAAApjD,IACA8O,aAAA,cAAA9O,KAIA8L,EAAAC,MAAAk4H,UAMA,IAAA,GALAC,IACA9gF,MAAA,EACA0H,aAAA,GAGA3xE,EAAA,EAAAA,EAAA2yB,EAAAC,MAAAk4H,UAAA/pJ,OAAAf,IAAA,CACA,GAAAwoH,GAAA71F,EAAAC,MAAAk4H,UAAA9qJ,EACA,IAAAwoH,EAAAhyD,OAAA,CACA,GAAA3vC,GAAA3kB,EAAAiG,QAAA0+G,SAAA2B,EAAA3B,UACAkkC,EACAviC,EAAAhyD,OAEAgyD,GAAA/uD,OAAA,SAAA5xB,GACA3lC,EAAA2lC,GAAAne,SAAA,iBACAiM,aAAA9O,IAGA6/F,EAAAC,SAAA6B,EAAA3B,UAAA2B,GAsBAtmH,EAAA4O,GAAA6kB,aAAA,SAAA/H,GACA,MAAAuM,GAAAvM,GACAuM,EAAAvM,GACArrB,MAAA1C,KAAAmN,MAAAnC,UAAArI,MAAA3B,KAAAwG,UAAA,IACA,gBAAAumB,IAAAA,MAGA1rB,GAAAoO,MAAA,UAAAsd,EAAA,6BAAA+2F,GAFAxqF,EAAAC,MAAA73B,MAAA1C,KAAAwH,aAKAkrB,QAMAilC,EAAA3sD,UAAAo9I,gBAAA,SAAAn3H,GAKA,IAJA,GAAA2lC,GAAA52D,KAAAuqF,YACA94E,EAAAzR,KAAAskE,WACA6mF,EAAA,EAEAv0F,EAAAnlD,EAAAmlD,IAAA,CACA,GAAAr2D,GAAAP,KAAA69D,QAAAjH,EAEA,IAAAu0F,GAAAl6H,GAAAk6H,EAAA5qJ,EAAAW,QAAA+vB,EACA,OAAA2lC,KAAAA,EAAAn7B,GAAAxK,EAAAk6H,EAEAA,IAAA5qJ,EAAAW,OAAA,IASAy2D,EAAAk/B,OAAAmsD,MAAA7wC,MAAA,mBA+CAr/E,EAAAC,MAAAq4H,UACAzF,EAAA7yH,EAAAC,MAAAq4H,SACA,yBACAt4H,EAAAC,MAAAs4H,gBACA1F,EAAA7yH,EAAAC,MAAAs4H,eACA,gCCxlDA94H,OAAA,UAAA,SAAA,WACA,YAMA,SAAAlwB,GAmEA,QAAAipJ,iBAAA32B,GACA,MAAAA,GAAAjH,UAAAxsH,OAAA,GAAAyzH,EAAA42B,UAGA,QAAAC,qBAAAC,EAAA1iJ,GACAA,EAAAnC,KAAA,iDACA,KAAA,GAAAxC,GAAA,EAAAA,EAAAqnJ,EAAAvqJ,OAAAkD,IACA2E,EAAAnC,KAAA,+BACA,wBAAA6kJ,EAAArnJ,GAAAs9H,IAAA,aACA+pB,EAAArnJ,GAAAmP,MAAA,WACAnP,EAAAqnJ,EAAAvqJ,OAAA,GACA6H,EAAAnC,KAAA,UAIA,QAAA8kJ,cAAA/2B,GAGA,IAAA,GAFA5rH,MACAktB,EAAA0+F,EAAAjH,UACAvtH,EAAA,EAAAA,EAAA81B,EAAA/0B,OAAAf,IAAA,CAEA,IAAA,GADAs1B,GAAAQ,EAAA91B,GAAAutH,UACAltH,EAAA,EAAAA,EAAAi1B,EAAAv0B,OAAA,EAAAV,IACAuI,EAAAnC,KAAA,yBAAA6uB,EAAAj1B,GAAA,aACA,wBAAAi1B,EAAAj1B,EAAA,GAAA,YAEAuI,GAAAnC,KAAA,yBAAA6uB,EAAAA,EAAAv0B,OAAA,GACA,aAAA+0B,EAAA91B,GAAAoT,OACA0iB,EAAA91B,GAAAwrJ,eACAH,oBAAAv1H,EAAA91B,GAAAwrJ,cAAA5iJ,IAEA5I,EAAA81B,EAAA/0B,OAAA,GAAAyzH,EAAA42B,YACAxiJ,EAAAnC,KAAA,UAGA,GAAA2kJ,EACA,IAAAA,EAAA52B,EAAA42B,UACA,IAAA,GAAAprJ,GAAA,EAAAA,EAAAorJ,EAAArqJ,OAAAf,IACA4I,EAAAnC,KAAA2kJ,EAAAprJ,IACAA,EAAAorJ,EAAArqJ,OAAA,GACA6H,EAAAnC,KAAA,SAGA,OAAAmC,GAAAiG,KAAA,IASA,QAAA48I,oBAAAj3B,EAAAj6F,GAeA,IAAA,GAdA3xB,MAcA5I,EAAA,EAAAA,EAAAw0H,EAAArkF,WAAApvC,OAAAf,IAAA,CACA,GAAA0rJ,GAAAl3B,EAAArkF,WAAAnwC,GACA2rJ,EAdA,SAAAnvI,GAEA,IAAA,GADAsZ,GAAA0+F,EAAAjH,UACAvtH,EAAA,EAAAA,EAAA81B,EAAA/0B,OAAAf,IAEA,IAAA,GADAs1B,GAAAQ,EAAA91B,GAAAutH,UACAltH,EAAA,EAAAA,EAAAi1B,EAAAv0B,OAAAV,IACA,GAAAi1B,EAAAj1B,IAAAmc,EACA,MAAAsZ,GAAA91B,EAGA,OAAA,OAKA0rJ,EAEA9iJ,GAAAnC,KAAA,QACAklJ,GACA/iJ,EAAAnC,KAAAklJ,EAAAv4I,OACAu4I,EAAAH,eACAH,oBAAAM,EAAAH,cAAA5iJ,IAEAA,EAAAnC,KAAA,wBAAAilJ,EAAA,WAEA9iJ,EAAAnC,KAAA,SAYA,GAAA2kJ,EACA,IAAAA,EAAA52B,EAAA42B,UAAA,EAVA,WACA,GAAA7wH,EAAAxmB,KAAA,8BAAAhT,SACAmB,EAAA,6CAAA0hB,aACA2W,EAAAxmB,KAAA,gCACA7R,EAAA,aAAA0hB,aACA2W,EAAAxmB,KAAA,yBAOAnL,EAAAnC,KAAA,OACA,KAAA,GAAAzG,GAAA,EAAAA,EAAAorJ,EAAArqJ,OAAAf,IACA4I,EAAAnC,KAAA2kJ,EAAAprJ,IACAA,EAAAorJ,EAAArqJ,OAAA,GACA6H,EAAAnC,KAAA,SAEAmC,GAAAnC,KAAA,SAMA,MAHA+tH,GAAAt7G,KACAtQ,EAAAnC,KAAA,0BAAA+tH,EAAAt7G,IAAA,SAEAtQ,EAAAiG,KAAA,IAWA,QAAA+8I,aAAAt+I,MACAA,KAAAyG,KAAA,UAAAlS,KAAA,WACA,GAAAiF,MAAAjH,KAAA+D,aAAA,SAAA,iBACA,oBAAAkD,OACA5E,EAAA2pJ,WAAA3pJ,EAAArC,MACAisJ,KAAAjsJ,KAAA2G,gBAGAtE,EAAA2pJ,kBACA3pJ,GAAA2pJ,WA9LA,GAGA1xH,UAyCAC,MAAA,SAAAo6F,GACA,MAAA30H,MAAAgC,KAAA,WACA,GAAAyL,GAAApL,EAAArC,KAEA,IAAAsrJ,gBAAA32B,GACA,GAAAlnH,EAAA6M,GAAA,SAAA,CACA,GAAA61G,GAAA9tH,EAAAy1B,GAAA7Z,IACAxQ,GAAAoW,OAAAssG,GACAA,EAAA7pH,UAAAslJ,mBAAAj3B,EAAAlnH,GACAs+I,YAAA1pJ,EAAA8tH,IACA9tH,EAAA8tH,GAAAj8G,KAAA,iBAAAg4I,kBAEAz+I,GAAA,GAAAnH,UAAAolJ,aAAA/2B,GACAo3B,YAAAt+I,GACAA,EAAAyG,KAAA,iBAAAg4I,kBAGAz+I,GAAAoW,OAAAxhB,EAAAy1B,GAAAoD,MAAAtR,MAAA,eAAA,YAkJAvnB,GAAA4O,GAAAk7I,aAAA,SAAAp+H,GACA,MAAAuM,SAAAvM,GACAuM,QAAAvM,GACArrB,MAAA1C,KAAAmN,MAAAnC,UAAArI,MAAA3B,KAAAwG,UAAA,IACA,gBAAAumB,IAAAA,MAGA1rB,GAAAoO,MAAA,UAAAsd,EAAA,0CAFAuM,QAAAC,MAAA73B,MAAA1C,KAAAwH,aAMAkrB,QAMA,SAAArwB,GAyPA,QAAA+pJ,KACA,GAAAl6G,GAAA7vC,EAAA,iBAwBA,OAtBA6vC,GAAA,KACAA,EAAA7vC,EAAAA,EAAAy1B,GAAAkO,MAAAxzB,GAAA,gBACA9N,MAAA,kBAGAwtC,EAAA1uB,GAAA,QAAA,IAAA,SAAAyR,GACA,GAAA9wB,GAAA9B,EAAA4yB,EAAA9c,QAAAsC,QAAA,KACAta,EAAAgE,EAAAuM,KAAA,KAGA,OADAwhC,GAAAxhC,KAAA,UAAAw7I,YAAA/nJ,EAAAuM,KAAA,UAAAvQ,IACA,IAEA+xC,EAAA1uB,GAAA,QAAA,WACA,GAAAnjB,GAAAgC,EAAA,6BAAAA,EAAArC,OAAAkqB,KACAgoB,GAAAxhC,KAAA,UAAAw7I,YAAA,SAAAxiI,SAAArpB,MAEA6xC,EAAAvgB,MAAA,WAAA06H,GAAA,EAAAC,KACA,WAAAC,MAEAlqJ,EAAA,QAAAwhB,OAAAquB,IAGAA,EAGA,QAAAs6G,KACA,IAAAH,EAAA,CACA,GAAAn6G,GAAAk6G,IACAj0I,EAAA+5B,EAAAxhC,KAAA,SAEAyH,KACAA,EAAA2R,YAAA,oBACAooB,EAAAxhC,KAAA,SAAA,OAEAwhC,EAAAt0B,KAAA,MAIA,QAAA0uI,KACA/9H,EAAAjjB,WAAA,WACAkhJ,KACA,KAGA,QAAAD,KACAF,GAAA,EACAC,IAGA,QAAA1wD,GAAA3mE,GAGA,MAFAA,GAAAzU,cAAAqzE,aACAc,QAAA,OAAAtyF,EAAA4yB,EAAA9c,QAAA+zI,YAAA,gBACA,EA/SA,GACA39H,GAAA,EACA89H,GAAA,EAGA/xH,GACAC,MAAA,SAAAvT,GACA,MAAAhnB,MAAAgC,KAAA,WACA,GAAAyL,GAAApL,EAAArC,MACA0Q,GAAAynD,QAAA,GACAhzD,KACA6U,EAAA3X,EAAAy1B,GAAA2C,KAAA7Q,MAAA,wBAEAzpB,EAAA,CACAsN,GAAA5F,WAAA7F,KAAA,WACA,GAAA29F,GAAAt9F,EAAArC,MAAAsE,IAAA,UAEAa,GAAAyB,KAAA+4F,GACA,GAAAx/F,KACAsN,EAAAnJ,IAAA,UAAAq7F,GACAt9F,EAAArC,MAAA+W,KAAA,aAAA,IAEA1U,EAAArC,MAAA4d,SAGAlN,EAAAvL,QAAAA,EACAsI,EAAAoW,OAAA7J,GAEA3X,EAAA2X,GAAA2X,MAAA,SAAAsD,GAAAxnB,EAAAy+I,YAAA,aAAAj3H,IACA,SAAAA,GAAAxnB,EAAAy+I,YAAA,aAAAj3H,KACAxnB,EAAAsJ,KAAA,aAAA,GACArI,KAAA,YAAAktF,GAEAnuF,EAAAiD,KAjCA,cAiCAA,MAQA07I,WAAA,WAwBA,IAAA,GAvBA17I,GAAA1Q,KAAA0Q,KA1CA,eA2CAuJ,GAAA,8BACApS,EAAA7H,KAAA6H,WAoBA1H,EAAA,EACAA,EAAA,EAAAA,EAAAuQ,EAAAvL,QAAAjE,OAAAf,IAAA,CACA,GAAAE,GAAAgC,EAAAwF,EAAA1H,IACAwc,EAAAtc,EAAA0W,KAAA,cAEA4F,KAEAA,EADA,GAAAxc,EACA,mBAEA,kBAAAA,EAAA,GAAA,KAGA8Z,EAAArT,KAAA,4BA9BA,SAAAzG,EAAAwc,GACA,GAAAqe,GAAAwW,CAcA,OAZA,eAAA70B,GACAqe,EAAA,OACAwW,EAAA,SAEAxW,EAAA,WACAwW,EAAA,YAGAhC,IAAA,qDACArvC,EAAA,kBAAAqxC,EAAA,YAAAxW,EAAA,sCACAwW,EAAA,gBAEAhC,KAgBArvC,EAAAwc,GACA,4CAAAxc,EAAA,KACAA,GAAAuQ,EAAAynD,SAAAl+C,EAAArT,KAAA,YACAqT,EAAArT,KAAA,KAAA+V,EAAA,UAIA,MADA1C,GAAArT,KAAA,UACAqT,EAAAjL,KAAA,KAGAy9I,WAAA,SAAAx3H,GACA,GAGA9c,GAHA1K,EAAAzN,KACAkyC,EAAAk6G,IACAllI,EAAAlnB,KAAAixB,QAGAo7H,IAAA,EACA99H,IACAxF,aAAAwF,GACAA,EAAA,IAGApW,EAAA+5B,EAAAxhC,KAAA,YACAyH,EAAA2R,YAAA,oBACAooB,EAAAxhC,KAAA,SAAAjD,GAEAykC,EAAAnpC,KAAA/I,KAAAksJ,YAAA,eACAh6G,EAAA5tC,KAAAwR,IAAAoR,EAAApR,IAAA,EAAA,KACA6Q,KAAAO,EAAAP,KAAA,EAAA,OACAhJ,KAAA,KAEA3d,KAAA6pB,SAAA,qBAGA6iI,WAAA,SAAAz3H,GACAs3H,KAOAtyI,OAAA,SAAA9Z,GACA,GAAAuQ,GAAA1Q,KAAA0Q,KAxHA,cA0HA,IAAAA,EAAAynD,SAAAh4D,EAAA,CACA,GAAAk4B,GAAAr4B,KAAA6H,WACA83F,EAAAjvF,EAAAvL,QAAAhF,EAEAkC,GAAAg2B,EAAA3nB,EAAAynD,UAAAv6C,KAAA,KACAvb,EAAAg2B,EAAAl4B,IAAAwd,KAAA,IAAA,WAAAtb,EAAArC,MAAAsE,IAAA,UAAAq7F,KACA3/F,KAAAsE,IAAA,UAAAq7F,GACAt9F,EAAAg2B,EAAAl4B,IAAAma,GAAA,yBACAta,KAAA+W,KAAA,aAAA,GAEA/W,KAAA+W,KAAA,aAAA,GAGArG,EAAAynD,QAAAh4D,EAGAqsJ,KAGAv+D,KAAA,SAAA9tF,GACA,GAAAk4B,GAAAr4B,KAAA6H,WACA6I,EAAA1Q,KAAA0Q,KA/IA,eAgJAuX,EAAAvX,EAAAynD,OAUAn4D,MAAAksJ,YAAA,SAAA/rJ,GARA,SAAA23B,GACA,GAAAq0B,GAAAtsD,SAAAwsD,aACAF,GAAAwgG,mBAAA70H,EACA,IAAAs0B,GAAArsD,OAAAimF,cACA55B,GAAAo6B,kBACAp6B,EAAAq6B,SAAAt6B,IAIA9zB,EAAAl4B,GACA,KACAN,SAAAy5G,YAAA,QACA,MAAA75G,GACA8zB,MAAA,6CAIA,MAFAvzB,MAAAksJ,YAAA,SAAAjkI,GAEAjoB,MAUA2pH,SAAA,SAAAxpH,GACA,GAGAuQ,GAHA2nB,EAAAr4B,KAAA6H,WACAy1C,EAAAj7C,EAAAg2B,EAAAl4B,IACA01D,EAAA,MAOA,IAAAvY,EAAAtzB,SAAA,cAAA,CACA,GAAA3pB,KACAi9C,GAAAA,EAAA18B,QAAA,aAAAvgB,GACAA,EAAA4kC,SACAv0B,EAAArQ,EAAA4kC,QAAA2nH,UACA/2F,EAAAx1D,EAAAwsJ,WAAA,OACA5lJ,KAAA5G,EAAAqsB,aAAA,aAEA6G,MAAA,wCAEA,IAAA,GAAA+pB,EAAAppC,KAAA,OAAAhT,OAAA,CACA,GAAA4rJ,GAAAxvG,EAAAppC,KAAA,MACA44I,GAAA/1I,KAAA,UACA+1I,EAAA/1I,KAAA,QAAA,8BACArG,EAAAo8I,EAAA,GAAAF,UACA/2F,EAAA,MACA5uD,KAAA,oBAEAyJ,GAAA4sC,EAAAv0C,OACA9B,KAAA,aAvBA,WACA,WAAAktB,IAAA9xB,EAAA,OAAA,GAAAsnH,eA0BA1iH,KAAA,4BAEAwV,QAAAqe,IAAA7zB,KAEA,IAGA9C,GAAA6U,EAAAw2B,EAHAu9G,EAAA,GAAAC,OAAAt8I,IAAAzJ,KAAAA,OACAwR,EAAAw0I,IAAAC,gBAAAH,GACA77G,EAAA,kBAAA2kB,EAGA36B,EAAA74B,EAAAy1B,GAAA2C,KAAA7Q,MAAA,YACA4lB,EAAAntC,EAAAy1B,GAAA7e,QAAAhS,KAAA,SAAA2iB,MAAA,UACAzlB,EAAA9B,EAAAy1B,GAAA3zB,GAAAsU,KAAAA,EACAN,OAAA,SACAwxG,SAAAz4E,GAEA,kCACA7uC,EAAAy1B,GAAA6I,KACA3nB,EAAA3W,EAAAy1B,GAAA9e,OAAAzF,MAAA29B,IAaA,OAZAlxC,MAAA6jB,OAAAqX,GACA74B,EAAAmtC,GACAzmC,KAAA,WACAya,GAAA,QAAA,SAAAyR,GACA5yB,EAAA64B,GAAAjuB,WAEA5K,EAAA2W,GAAAwK,GAAA,qBAAA,SAAAyR,GAGA,MAFA5yB,GAAA8B,GAAA4S,KAAA,WAAA1U,EAAA2W,GAAAkR,OACA+K,EAAA/U,kBACA,IAGAlgB,MAMAmtJ,WAAA,WACA,MAAAntJ,MAAAkU,KAAA,yBAAA3T,QA0EA8B,GAAA4O,GAAAi7I,YAAA,SAAAn+H,GACA,MAAAuM,GAAAvM,GACAuM,EAAAvM,GACArrB,MAAA1C,KAAAmN,MAAAnC,UAAArI,MAAA3B,KAAAwG,UAAA,IACA,gBAAAumB,IAAAA,MAGA1rB,GAAAoO,MAAA,UAAAsd,EAAA,yCAFAuM,EAAAC,MAAA73B,MAAA1C,KAAAwH,aAKAkrB,UChZA,SAAA7yB,EAAA0K,EAAA4pB,IACA,SAAAumB,GACA,kBAAAnoB,SAAAA,OAAAC,IACAD,OAAA,aAAA,UAAAmoB,GACAhoB,SAAAA,OAAAzhB,GAAAm8I,WACA1yG,EAAAhoB,SAGA,SAAArwB,GACA,YAEA,IACAygC,GAAAuqH,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACAzgJ,EAAA+tC,EAAA6G,EAAA8rG,EAAAC,EAAAC,EAAAC,EACAC,EAAAC,EAAAC,EACAr3F,EAAA+yC,EAAAukD,EAAAC,EAAAC,EAAAC,EAAAt9G,EAAAu9G,EAAAC,EACAC,EAAAC,EAAAC,EAAAC,EAAAzhG,EALA0hG,KAKAC,EAAA,CAKA/rH,GAAA,WACA,OAEAgsH,QACA7nJ,KAAA,OACA8nJ,UAAA,OACAC,UAAA,OACAC,sBAAA,EACAplJ,MAAA,OACAkC,OAAA,OACAmjJ,WAAA,EACAC,mBAAA,SACAC,iBAAA,QACAC,kBAAA,EACAC,iBAAA,EACAC,iBAAA,IACAC,iBAAA,EACAC,cAAA,GACAC,cAAA,GACAC,oBAAA,EACAC,iBAAA,EACAC,sBAAA,EACAC,oBAAA,IACAC,kBAAA,IACAC,iBAAA,EACAC,oBAAA,GAGAr5F,MACAs5F,UAAA,OACAC,mBAAA,OACAC,mBAAA,OACAC,WAAA,IACAC,aAAA,OACAC,aAAA,OACAC,UAAA,EACAC,mBAzDA,GA0DAC,mBA1DA,GA2DAC,iBAAA,OACAC,iBAAA,EACAC,kBA7DA,GA8DAC,kBA9DA,GA+DAC,mBA/DA,GAgEAC,mBAhEA,GAiEAC,cAAA,GAAA3D,GAAA,4EAGA3jD,KACAunD,SAAA,UACAC,YAAA,OACAC,iBAAA,UAAA,UAAA,UAAA,UAAA,UACA,UAAA,UAAA,WACAC,cAzEA,GA0EAC,cA1EA,GA2EAC,UAAA,EACA50F,SAAA,EACA60F,WAAA,EACAV,kBA9EA,GA+EAD,kBA/EA,GAgFAY,gBAAA,EACAC,aAjFA,GAkFAT,cAAA,GAAA3D,GAAA,gFAGAY,UACAvxF,SAAA,EACA60F,WAAA,EACAG,YAAA,OACAR,YAAA,OACAS,aAAA,OACAF,YACAT,cAAA,GAAA3D,GAAA,+DACAuE,qBAAA7oJ,KAAA8oJ,KAAA,OAAAxiI,EAAA,OAAAyiI,EAAA,SAGA5D,UACAloI,WAAA,OACA+rI,mBAlGA,GAmGAC,eAAA,EACAnB,kBApGA,GAqGAD,kBArGA,GAsGAY,gBAAA,EACAR,cAAA,GAAA3D,GAAA,kCAGAc,QACA8D,YAAA,OACAC,YAAA,EACAC,iBAAA,OACAC,aAAA,UAAA,UAAA,WACA34F,SA/GA,GAgHAu3F,cAAA,GAAA3D,GAAA,mCACAuE,qBAAA5iH,QAAA5uC,EAAA,QAAA0F,EAAA,cAAArG,EAAA,YAGA2uJ,KACAp9H,OAAA,EACAqhI,aAAA,UAAA,UAAA,UAAA,UAAA,UACA,UAAA,UAAA,WACAC,YAAA,EACA7sG,YAAA,OACAurG,cAAA,GAAA3D,GAAA,6EAGAv8G,KACAyhH,KAAA,EACAC,aAAA,OACAC,aAAA,OACAC,aAAA,OACAC,iBAAA,OACAC,iBAAA,OACAC,YAAA,OACAC,cAAA,EACAC,WAAA,IACA3C,WAAA,IACAl4I,WAxIA,GAyIA+5I,YAAA,OACApB,kBA1IA,GA2IAD,kBA3IA,GA4IAI,cAAA,GAAA3D,GAAA,+BACA2F,0BAAA,QACApB,qBAAA5iH,QAAAikH,GAAA,iBAAAC,IAAA,SACAC,GAAA,iBAAAC,GAAA,eAAAC,GAAA,gBACAC,GAAA,eAAAC,GAAA,qBAMAlF,EAAA,siBA2BAjB,EAAA,WACA,GAAAoG,GAAAn3G,CAoBA,OAnBAm3G,GAAA,WACAzzJ,KAAAiL,KAAAvI,MAAA1C,KAAAwH,YAEAA,UAAAtG,OAAA,GACAsG,UAAA,IACAisJ,EAAAzoJ,UAAA3I,EAAAiG,OAAA,GAAAd,WAAA,GAAAA,UAAAA,UAAAtG,OAAA,IACAuyJ,EAAAC,OAAAlsJ,UAAA,GAAAwD,WAEAyoJ,EAAAzoJ,UAAAxD,UAAAA,UAAAtG,OAAA,GAEAsG,UAAAtG,OAAA,IACAo7C,EAAAnvC,MAAAnC,UAAArI,MAAA3B,KAAAwG,UAAA,GAAA,GACA80C,EAAAhtC,QAAAmkJ,EAAAzoJ,WACA3I,EAAAiG,OAAA5F,MAAAL,EAAAi6C,KAGAm3G,EAAAzoJ,UAAAxD,UAAA,GAEAisJ,EAAAzoJ,UAAA2wB,IAAA83H,EACAA,GASApxJ,EAAAsxJ,cAAArG,EAAAD,GACAuG,IAAA,8BACAC,OAAA,eAEA5oJ,KAAA,SAAAwlC,EAAAqjH,GACA9zJ,KAAAywC,OAAAA,EACAzwC,KAAA8zJ,OAAAA,GAGAttG,OAAA,SAAAshF,EAAAisB,EAAA/sI,GACA,GAEA/kB,GAAAq+C,EAAA0zG,EAAAC,EAAAC,EAFAt8G,EAAA53C,KACAivC,EAAA64F,CAEA,OAAA9nI,MAAAywC,OAAAvtC,QAAAlD,KAAA4zJ,IAAA,WACA,GAAAO,EAWA,OAVA7zG,GAAA94C,UAAA,GACAwsJ,EAAAxsJ,UAAA,GACAvF,EAAA21C,EAAAi8G,OAAApvJ,KAAA67C,GACAr+C,GACAiyJ,EAAAjyJ,EAAA,GACAq+C,EAAAr+C,EAAA,IAEAiyJ,GAAA,MArOA,MAuOAD,EAAAhlH,EAAAqR,IAEA,GAEA0zG,GAAAD,GAAAA,EAAAC,IACAG,EAAAJ,EAAAC,GACAG,EAAA9uJ,IACA0uJ,EAAAC,GAAA3uJ,IAAA4uJ,IAAAA,EAEAF,EAAAC,GAAAC,IAAAA,IAGAj5G,EAAAi5G,KAEAA,EADAjtI,EAAA3hB,IAAA,mBACA2hB,EAAA3hB,IAAA,mBAAA4uJ,GAEApG,EAAAoG,EAAAC,EACAltI,EAAA3hB,IAAA,yBACA2hB,EAAA3hB,IAAA,uBACA2hB,EAAA3hB,IAAA,uBAGA4uJ,QAMA5xJ,EAAA+xJ,SAAA,SAAA3jH,EAAAqjH,GACA,MAAA,IAAAxG,GAAA78G,EAAAqjH,IAGAvG,EAAA,SAAArjI,EAAA8uC,EAAAxuD,GACA,MAAA0f,GAAA8uC,EACAA,EAEA9uC,EAAA1f,EACAA,EAEA0f,GAGAsjI,EAAA,SAAA1rG,EAAArtC,GACA,GAAA4/I,EACA,OAAA,KAAA5/I,GACA4/I,EAAA9pJ,EAAA8sB,MAAAyqB,EAAA5gD,OAAA,GACA4gD,EAAA5gD,OAAA,EAAA4gD,EAAAuyG,IAAAvyG,EAAAuyG,EAAA,GAAAvyG,EAAAuyG,IAAA,GAEAvyG,EAAA5gD,OAAA,GACAmzJ,GAAAvyG,EAAA5gD,OAAAuT,EAAAA,GAAA,EACA4/I,EAAA,GAAAvyG,EAAAv3C,EAAA8sB,MAAAg9H,IAAAvyG,EAAAv3C,EAAA8sB,MAAAg9H,GAAA,IAAA,EAAAvyG,EAAAuyG,EAAA,KAEAA,GAAAvyG,EAAA5gD,OAAAuT,EAAA,GAAA,EACA4/I,EAAA,GAAAvyG,EAAAv3C,EAAA8sB,MAAAg9H,IAAAvyG,EAAAv3C,EAAA8sB,MAAAg9H,GAAA,IAAA,EAAAvyG,EAAAuyG,EAAA,KAMA5G,EAAA,SAAAvjI,GACA,GAAAoqI,EACA,QAAApqI,GACA,IAAA,YACAA,MAtSA,EAuSA,MACA,KAAA,OACAA,EAAA,IACA,MACA,KAAA,OACAA,GAAA,CACA,MACA,KAAA,QACAA,GAAA,CACA,MACA,SACAoqI,EAAAxpJ,WAAAof,GACAA,GAAAoqI,IACApqI,EAAAoqI,GAGA,MAAApqI,IAGAwjI,EAAA,SAAA6G,GACA,GAAAp0J,GAAA8f,IACA,KAAA9f,EAAAo0J,EAAArzJ,OAAAf,KACA8f,EAAA9f,GAAAstJ,EAAA8G,EAAAp0J,GAEA,OAAA8f,IAGAhT,EAAA,SAAAsnJ,EAAA1yJ,GACA,GAAA1B,GAAAk0J,EAAAp0I,IACA,KAAA9f,EAAA,EAAAk0J,EAAAE,EAAArzJ,OAAAf,EAAAk0J,EAAAl0J,IACAo0J,EAAAp0J,KAAA0B,GACAoe,EAAArZ,KAAA2tJ,EAAAp0J,GAGA,OAAA8f,IAGA+6B,EAAA,SAAAyE,GACA,OAAAntB,MAAAxnB,WAAA20C,KAAAj5B,SAAAi5B,IAGAouG,EAAA,SAAApuG,EAAAy0G,EAAAM,EAAAC,EAAAC,GACA,GAAA3uJ,GAAA5F,CAMA,KALAs/C,IAAA,IAAAy0G,EAAAppJ,WAAA20C,GAAA3uC,WAAA2uC,EAAAvnB,QAAAg8H,IAAA3jJ,MAAA,IACAxK,GAAAA,EAAA1D,EAAAyE,QAAA,IAAA24C,IAAA,EAAAA,EAAAv+C,OAAA6E,EACAA,EAAA05C,EAAAv+C,SACAu+C,EAAA15C,GAAA2uJ;qBAEAv0J,EAAA4F,EAAAyuJ,EAAAr0J,EAAA,EAAAA,GAAAq0J,EACA/0G,EAAA9tC,OAAAxR,EAAA,EAAAs0J,EAEA,OAAAh1G,GAAAzwC,KAAA,KAKA6yC,EAAA,SAAA33B,EAAAkkB,EAAAumH,GACA,GAAAx0J,EACA,KAAAA,EAAAiuC,EAAAltC,OAAAf,KACA,KAAAw0J,GAAA,OAAAvmH,EAAAjuC,KACAiuC,EAAAjuC,KAAA+pB,EACA,OAAA,CAGA,QAAA,GAYA0jI,EAAA,SAAA1jI,GACA,MAAA7nB,GAAA+K,QAAA8c,GAAAA,GAAAA,IAIAyjI,EAAA,SAAArpJ,GACA,GAAA+lC,EAEAxqC,GAAA+0J,iBACA/0J,EAAA+0J,mBAAAlwI,QAAApgB,GAEA+lC,EAAAxqC,EAAAS,cAAA,SACA+pC,EAAApjC,KAAA,WACApH,EAAA2F,qBAAA,QAAA,GAAA9E,YAAA2pC,GACAA,EAAA,gBAAAxqC,GAAAoF,KAAAP,MAAAmwJ,iBAAA,YAAA,aAAAvwJ,IAKAjC,EAAA4O,GAAA6jJ,WAAA,SAAAjrJ,EAAAkC,EAAAgpJ,EAAAC,GACA,GAAA78I,GAAA88I,CACA,IAAAF,IAAA58I,EAAAnY,KAAA0Q,KAAA,iBACA,MAAAyH,EAGA,KAAA,IAAA9V,EAAA4O,GAAAm8I,UAAA8H,OAEA,OAAA,CAEA,QAhZA,KAgZA7yJ,EAAA4O,GAAAm8I,UAAA8H,OAAA,CAEA,GAAAp9H,GAAAj4B,EAAAS,cAAA,SACA,IAAAw3B,EAAAq9H,YAAAr9H,EAAAq9H,WAAA,MAEA9yJ,EAAA4O,GAAAm8I,UAAA8H,OAAA,SAAArrJ,EAAAkC,EAAAoM,EAAA68I,GACA,MAAA,IAAAtG,GAAA7kJ,EAAAkC,EAAAoM,EAAA68I,QAEA,CAAA,IAAAn1J,EAAAu1J,YAAAv1J,EAAAu1J,WAAA50J,EASA,MADA6B,GAAA4O,GAAAm8I,UAAA8H,QAAA,GACA,CAPAr1J,GAAAu1J,WAAAztJ,IAAA,IAAA,gCAAA,gBACAtF,EAAA4O,GAAAm8I,UAAA8H,OAAA,SAAArrJ,EAAAkC,EAAAoM,EAAA68I,GACA,MAAA,IAAArG,GAAA9kJ,EAAAkC,EAAAoM,KAsBA,WAlbA,KAqaAtO,IACAA,EAAAxH,EAAArC,MAAAqgC,kBAtaA,KAwaAt0B,IACAA,EAAA1J,EAAArC,MAAA0+E,eAGAvmE,EAAA9V,EAAA4O,GAAAm8I,UAAA8H,OAAArrJ,EAAAkC,EAAA/L,KAAAg1J,GAEAC,EAAA5yJ,EAAArC,MAAA0Q,KAAA,iBACAukJ,GACAA,EAAAI,eAAAl9I,GAEAA,GAGA9V,EAAA4O,GAAAqkJ,UAAA,WACA,GAAAn9I,GAAAnY,KAAA0Q,KAAA,eACAyH,IACAA,EAAAyB,SAIAvX,EAAAkzJ,cAAAzH,EAAAT,GACApiJ,KAAA,SAAAjC,GACA,GAAAqZ,GAAA8pC,EAAAqpG,IACA,KAAAnzI,IAAArZ,GACAA,EAAA+H,eAAAsR,IAAA,gBAAAA,IAAAA,EAAAxR,QAAA,MAAA,IACAs7C,EAAA9pC,EAAA9R,MAAA,KACA47C,EAAA,GAAA,IAAAA,EAAA,GAAAjrD,QAAA0qC,EAAAA,EAAA9gC,WAAAqhD,EAAA,IACAA,EAAA,GAAA,IAAAA,EAAA,GAAAjrD,OAAA0qC,EAAAA,EAAA9gC,WAAAqhD,EAAA,IACAA,EAAA,GAAAnjD,EAAAqZ,GACAmzI,EAAA5uJ,KAAAulD,GAGAnsD,MAAAgJ,IAAAA,EACAhJ,KAAAw1J,UAAAA,IAAA,GAGAnwJ,IAAA,SAAAkO,GACA,GACApT,GAAAgsD,EAAAlsC,EADAu1I,EAAAx1J,KAAAw1J,SAEA,QA/cA,MA+cAv1I,EAAAjgB,KAAAgJ,IAAAuK,IACA,MAAA0M,EAEA,IAAAu1I,EACA,IAAAr1J,EAAAq1J,EAAAt0J,OAAAf,KAEA,GADAgsD,EAAAqpG,EAAAr1J,GACAgsD,EAAA,IAAA54C,GAAA44C,EAAA,IAAA54C,EACA,MAAA44C,GAAA,MASA9pD,EAAAozJ,UAAA,SAAAzsJ,GACA,MAAA,IAAA8kJ,GAAA9kJ,IAGA+kJ,EAAAV,GACApiJ,KAAA,SAAA6sB,EAAA9Q,GACA,GAAA8jB,GAAAzoC,EAAAy1B,EACA93B,MAAA8qC,IAAAA,EACA9qC,KAAAgnB,QAAAA,EACAhnB,KAAA01J,aAAA,EACA11J,KAAA21J,aAAA,EACA31J,KAAA83B,GAAAA,EACA93B,KAAA41J,UACA51J,KAAAokC,QAAA,KACApkC,KAAAg+F,MAAA,EACAh+F,KAAA61J,iBAAA7uI,EAAA3hB,IAAA,mBACArF,KAAA81J,kBAAA9uI,EAAA3hB,IAAA,qBAGA0wJ,kBAAA,SAAAxyF,GACAvjE,KAAA41J,OAAAhvJ,KAAA28D,GACAvjE,KAAAg+F,MACAh+F,KAAAg2J,iBAIAX,eAAA,SAAAH,GACA,GAAAe,GAAA5zJ,EAAA6yJ,EAAAA,OACAl1J,MAAAk1J,OAAAA,EACAl1J,KAAAi2J,QAAAA,EACAA,EAAA7yI,WAAA/gB,EAAA0vB,MAAA/xB,KAAAojB,WAAApjB,OACAi2J,EAAA5yI,WAAAhhB,EAAA0vB,MAAA/xB,KAAAqjB,WAAArjB,OACAi2J,EAAAn1I,MAAAze,EAAA0vB,MAAA/xB,KAAAk2J,WAAAl2J,QAGA4Z,MAAA,SAAAu8I,GACAn2J,KAAA41J,UACA51J,KAAAokC,SAAA+xH,IACAn2J,KAAAokC,QAAAn3B,SACAjN,KAAAokC,YAtgBA,KA0gBA8xH,WAAA,SAAAz2J,GACA,GAAA22J,GAAA/zJ,EAAAie,MAAA,iBACA81I,GAAA51I,cAAA/gB,EACA22J,EAAAC,WAAAr2J,KAAA41J,OACA51J,KAAA8qC,IAAAlqB,QAAAw1I,IAGAhzI,WAAA,SAAA3jB,GACA4C,EAAAxC,EAAAoF,MAAA2sB,OAAA,iBACAvvB,EAAAxC,EAAAoF,MAAAyJ,KAAA,gBAAArM,EAAA0vB,MAAA/xB,KAAAs2J,UAAAt2J,OACAA,KAAAg+F,MAAA,EACAh+F,KAAA01J,aAAAj2J,EAAAsiB,MACA/hB,KAAA21J,aAAAl2J,EAAAuiB,MACAhiB,KAAAu2J,UAAA92J,EAAA0Y,QACAnY,KAAAokC,SAAApkC,KAAA61J,kBACA71J,KAAAokC,QAAA,GAAA4pH,GAAAhuJ,KAAAgnB,SACAhnB,KAAAokC,QAAAoyH,eAAA/2J,EAAAsiB,MAAAtiB,EAAAuiB,QAEAhiB,KAAAg2J,iBAGA3yI,WAAA,WACAhhB,EAAAxC,EAAAoF,MAAA2sB,OAAA,gBACA,IAGA2xC,GAAApjE,EAHAy1J,EAAA51J,KAAA41J,OACAa,EAAAb,EAAA10J,OACAw1J,GAAA,CAUA,KARA12J,KAAAg+F,MAAA,EACAh+F,KAAAu2J,UAAA,KAEAv2J,KAAAokC,UACApkC,KAAAokC,QAAAn3B,SACAjN,KAAAokC,QAAA,MAGAjkC,EAAA,EAAAA,EAAAs2J,EAAAt2J,IACAojE,EAAAqyF,EAAAz1J,GACAojE,EAAAozF,yBACAD,GAAA,EAIAA,IACA12J,KAAAk1J,OAAA1uG,UAIA8vG,UAAA,SAAA72J,GACAO,KAAA01J,aAAAj2J,EAAAsiB,MACA/hB,KAAA21J,aAAAl2J,EAAAuiB,MACAhiB,KAAAu2J,UAAA92J,EAAA0Y,OACAnY,KAAAokC,SACApkC,KAAAokC,QAAAoyH,eAAA/2J,EAAAsiB,MAAAtiB,EAAAuiB,OAEAhiB,KAAAg2J,iBAGAA,cAAA,WACA,GAMAY,GAAArzF,EAAApjE,EAAA8f,EAAAghF,EANA20D,EAAA51J,KAAA41J,OACAa,EAAAb,EAAA10J,OACAw1J,GAAA,EACAzlI,EAAAjxB,KAAAi2J,QAAAhlI,SACA4lI,EAAA72J,KAAA01J,aAAAzkI,EAAAtK,KACAmwI,EAAA92J,KAAA21J,aAAA1kI,EAAAnb,GAEA,IAAA9V,KAAAg+F,KAAA,CAGA,IAAA79F,EAAA,EAAAA,EAAAs2J,EAAAt2J,IACAojE,EAAAqyF,EAAAz1J,IACA8f,EAAAsjD,EAAAwzF,mBAAA/2J,KAAAu2J,UAAAM,EAAAC,MAEAJ,GAAA,EAGA,IAAAA,EAAA,CAIA,GAHAz1D,EAAA5+F,EAAAie,MAAA,yBACA2gF,EAAAo1D,WAAAr2J,KAAA41J,OACA51J,KAAA8qC,IAAAlqB,QAAAqgF,GACAjhG,KAAAokC,QAAA,CAEA,IADAwyH,EAAA,GACAz2J,EAAA,EAAAA,EAAAs2J,EAAAt2J,IACAojE,EAAAqyF,EAAAz1J,GACAy2J,GAAArzF,EAAAyzF,yBAEAh3J,MAAAokC,QAAAjB,WAAAyzH,GAEA52J,KAAAi3J,kBACAj3J,KAAAk1J,OAAA1uG,SAGA,OAAAvmC,GACAjgB,KAAAqjB,iBAMA2qI,EAAAX,GACA6J,UAAA,8GAKAjsJ,KAAA,SAAA+b,GACA,GAEAiK,GAFAkmI,EAAAnwI,EAAA3hB,IAAA,mBAAA,cACA+xJ,EAAAp3J,KAAAk3J,SAEAl3J,MAAAmiC,UAAAnb,EAAA3hB,IAAA,qBAAAxF,EAAAoF,KACAjF,KAAAq3J,eAAArwI,EAAA3hB,IAAA,iBAAA,IACArF,KAAAs3J,eAAAtwI,EAAA3hB,IAAA,iBAAA,IAEAhD,EAAA,eAAA4K,SACA5K,EAAA,eAAA4K,SACAjN,KAAAu3J,QAAAl1J,EAAA,UACAmQ,GAAA,aACA9N,MAAA0yJ,EACAxtI,MAAAutI,IAEAn3J,KAAAokC,QAAA/hC,EAAA,UACAmQ,GAAA,aACAoX,MAAAutI,IACA/yI,SAAApkB,KAAAmiC,WAEAlR,EAAAjxB,KAAAokC,QAAAnT,SACAjxB,KAAA25E,WAAA1oD,EAAAtK,KACA3mB,KAAA8lC,UAAA7U,EAAAnb,IACA9V,KAAAoL,QAAA,EACA/I,EAAAtC,QAAA6xB,OAAA,yBACAvvB,EAAAtC,QAAA2O,KAAA,wBAAArM,EAAA0vB,MAAA/xB,KAAAw3J,iBAAAx3J,OACAA,KAAAw3J,oBAGAA,iBAAA,WACAx3J,KAAAonB,UAAA/kB,EAAAtC,QAAAqnB,YACApnB,KAAAqnB,WAAAhlB,EAAAtC,QAAAsnB,aACArnB,KAAAy3J,YAAAz3J,KAAAqnB,WAAAhlB,EAAAtC,QAAA8J,QACA7J,KAAAw2J,kBAGAkB,QAAA,SAAAt8I,GACApb,KAAAu3J,QAAAxuJ,KAAAqS,GAAAgJ,SAAApkB,KAAAmiC,WACAniC,KAAA6J,MAAA7J,KAAAu3J,QAAA1tJ,QAAA,EACA7J,KAAA+L,OAAA/L,KAAAu3J,QAAAxrJ,SACA/L,KAAAu3J,QAAAtqJ,UAGAk2B,WAAA,SAAA/nB,GACA,IAAAA,EAGA,MAFApb,MAAAokC,QAAA9/B,IAAA,aAAA,eACAtE,KAAAoL,QAAA,EAGApL,MAAA03J,QAAAt8I,GACApb,KAAAokC,QAAAr7B,KAAAqS,GACA9W,KACAuF,MAAA7J,KAAA6J,MACAkC,OAAA/L,KAAA+L,OACAyZ,WAAA,YAEAxlB,KAAAoL,SACApL,KAAAoL,QAAA,EACApL,KAAAw2J,mBAIAA,eAAA,SAAA31J,EAAAO,GACA,OAjrBA,KAirBAP,EAAA,CACA,OAlrBA,KAkrBAb,KAAA23J,OACA,MAEA92J,GAAAb,KAAA23J,OAAA33J,KAAA25E,WACAv4E,EAAApB,KAAA43J,OAAA53J,KAAA8lC,cAGA9lC,MAAA23J,OAAA92J,GAAAb,KAAA25E,WACA35E,KAAA43J,OAAAx2J,GAAApB,KAAA8lC,SAEA9lC,MAAA+L,QAAA/L,KAAA6J,QAAA7J,KAAAoL,SAIAhK,GAAApB,KAAA+L,OAAA/L,KAAAs3J,eACAz2J,GAAAb,KAAAq3J,eAEAj2J,EAAApB,KAAAonB,YACAhmB,EAAApB,KAAAonB,WAEAvmB,EAAAb,KAAAqnB,WACAxmB,EAAAb,KAAAqnB,WACAxmB,EAAAb,KAAA6J,MAAA7J,KAAAy3J,cACA52J,EAAAb,KAAAy3J,YAAAz3J,KAAA6J,OAGA7J,KAAAokC,QAAA9/B,KACAqiB,KAAA9lB,EACAiV,IAAA1U,MAIA6L,OAAA,WACAjN,KAAAokC,QAAAn3B,SACAjN,KAAAu3J,QAAAtqJ,SACAjN,KAAAu3J,QAAAv3J,KAAAokC,YArtBA,GAstBA/hC,EAAAtC,QAAA6xB,OAAA,4BAIA28H,EAAA,WACAZ,EAAAW,IAGAjsJ,EAAAksJ,GAEArhG,KACA7qD,EAAA4O,GAAAm8I,UAAA,SAAAyK,EAAAC,GACA,MAAA93J,MAAAgC,KAAA,WACA,GAEAwkD,GAAArmD,EAFA6mB,EAAA,GAAA3kB,GAAA4O,GAAAm8I,UAAApmI,QAAAhnB,KAAA83J,GACA9oH,EAAA3sC,EAAArC,KAyDA,IAvDAwmD,EAAA,WACA,GAAA1E,GAAAj4C,EAAAkC,EAAA+9I,EAAAmL,EAAA1xF,EAAAgxF,CAsCA,IArCA,SAAAsD,OAxuBA,KAwuBAA,GACAtD,EAAAv0J,KAAA+D,aAAAijB,EAAA3hB,IAAA,2BAzuBA,KA0uBAkvJ,GAAA,OAAAA,IACAA,EAAAvlH,EAAAjmC,QAEA+4C,EAAAyyG,EAAArxJ,QAAA,4BAAA,IAAAqN,MAAA,MAEAuxC,EAAA+1G,EAGAhuJ,EAAA,SAAAmd,EAAA3hB,IAAA,SAAAy8C,EAAA5gD,OAAA8lB,EAAA3hB,IAAA,yBAAA2hB,EAAA3hB,IAAA,SACA,SAAA2hB,EAAA3hB,IAAA,UACA2hB,EAAA3hB,IAAA,cAAAhD,EAAAqO,KAAA1Q,KAAA,kBAEA8pJ,EAAAjqJ,EAAAS,cAAA,QACAwpJ,EAAAxjJ,UAAA,IACA0oC,EAAAjmC,KAAA+gJ,GACA/9I,EAAA1J,EAAAynJ,GAAAprE,eAAAr8E,EAAAynJ,GAAA/9I,SACA1J,EAAAynJ,GAAA78I,SACA68I,EAAA,MAGA/9I,EAAAib,EAAA3hB,IAAA,UAGA2hB,EAAA3hB,IAAA,sBASA4vJ,GAAA,GARAA,EAAA5yJ,EAAAqO,KAAA1Q,KAAA,iBACAi1J,EAGAjuI,EAAA3hB,IAAA,cACA4vJ,EAAAr7I,SAHAq7I,EAAA,GAAAlH,GAAA/tJ,KAAAgnB,GACA3kB,EAAAqO,KAAA1Q,KAAA,gBAAAi1J,KAQAjuI,EAAA3hB,IAAA,eAAAhD,EAAAqO,KAAA1Q,KAAA,gBAKA,YAJAqC,EAAAqO,KAAA1Q,KAAA,oBACAuzB,MAAA,sFACAlxB,EAAAqO,KAAA1Q,KAAA,kBAAA,IAKAujE,GAAA,IAAAlhE,EAAA4O,GAAAm8I,UAAApmI,EAAA3hB,IAAA,UAAArF,KAAA8hD,EAAA96B,EAAAnd,EAAAkC,GAEAw3D,EAAA/c,SAEAyuG,GACAA,EAAAc,kBAAAxyF,IAGAlhE,EAAArC,MAAA+I,SAAAie,EAAA3hB,IAAA,uBAAAhD,EAAArC,MAAAsa,GAAA,aAAAjY,EAAArC,MAAA6a,QAAA,QAAA3Z,OAAA,CACA,IAAA8lB,EAAA3hB,IAAA,cAAAhD,EAAAqO,KAAA1Q,KAAA,gBAEA,IAAAG,EAAA+sD,EAAAhsD,OAAAf,EAAAA,IACA+sD,EAAA/sD,EAAA,GAAA,IAAAH,MACAktD,EAAAv7C,OAAAxR,EAAA,EAAA,EAIA+sD,GAAAtmD,MAAA5G,KAAAwmD,IACAnkD,EAAAqO,KAAA1Q,KAAA,gBAAA,OAEAwmD,GAAAxlD,KAAAhB,SAKAqC,EAAA4O,GAAAm8I,UAAAz5H,SAAAmP,IAGAzgC,EAAA01J,0BAAA,WACA,GAAAjgI,GAAA33B,EAAAg2D,EACA5zD,IACA,KAAApC,EAAA,EAAAg2D,EAAAjJ,EAAAhsD,OAAAf,EAAAg2D,EAAAh2D,IACA23B,EAAAo1B,EAAA/sD,GAAA,GACAkC,EAAAy1B,GAAAxd,GAAA,cAAAjY,EAAAy1B,GAAAjd,UAAAP,GAAA,YACA4yC,EAAA/sD,GAAA,GAAAa,KAAA82B,GACAz1B,EAAAqO,KAAAw8C,EAAA/sD,GAAA,GAAA,gBAAA,GACAoC,EAAAqE,KAAAzG,IACAkC,EAAAy1B,GAAArd,QAAA,QAAAvZ,QAAAmB,EAAAqO,KAAAonB,EAAA,kBAKAz1B,EAAAqO,KAAAw8C,EAAA/sD,GAAA,GAAA,gBAAA,GACAoC,EAAAqE,KAAAzG,GAGA,KAAAA,EAAAoC,EAAArB,OAAAf,EAAAA,IACA+sD,EAAAv7C,OAAApP,EAAApC,EAAA,GAAA,IAQAkC,EAAA4O,GAAAm8I,UAAApmI,QAAAqmI,GACApiJ,KAAA,SAAAo/B,EAAAytH,GACA,GAAAE,GAAArkI,EAAA+lC,EAAAu+F,CACAj4J,MAAA83J,YAAAA,EAAAA,MACA93J,KAAAqqC,IAAAA,EACArqC,KAAAk4J,eACAvkI,EAAAtxB,EAAA4O,GAAAm8I,UAAAz5H,SACA+lC,EAAA/lC,EAAAm7H,OACA9uJ,KAAAovJ,iBAAA0I,EAAAzI,mBAAAyI,EAAA1I,kBAAA11F,EAAA01F,kBAEA6I,EAAAj4J,KAAAm4J,cAAA,QAEAH,EADAC,IAAArJ,EACAj7H,EAAAmkI,EAAA7wJ,MAAAyyD,EAAAzyD,MAEA0sB,EAAAskI,GAEAj4J,KAAAo4J,cAAA/1J,EAAAiG,UAAAoxD,EAAAs+F,EAAAF,IAIAK,cAAA,SAAA91I,GACA,GACA6H,GAAA/pB,EAAAk4J,EAAAC,EADA16G,EAAA59C,KAAAovJ,gBAEA,KAAA,IAAAxxG,OAn2BA,KAm2BAA,EACA,MAAAgxG,EAEA,IAAA5uJ,KAAAk4J,YAAAnnJ,eAAAsR,GACA6H,EAAAlqB,KAAAk4J,YAAA71I,QACA,CAEA,OA12BA,MAy2BA6H,EAAAlqB,KAAAqqC,IAAAtmC,aAAA65C,EAAAv7B,KACA,OAAA6H,EACAA,EAAA0kI,MACA,IAAA,MAAA1kI,EAAA8N,OAAA,EAAA,GAEA,IADA9N,EAAAA,EAAA8N,OAAA,EAAA9N,EAAAhpB,OAAA,GAAAqP,MAAA,KACApQ,EAAA+pB,EAAAhpB,OAAAf,KACA+pB,EAAA/pB,GAAAstJ,EAAAvjI,EAAA/pB,GAAA+C,QAAA,iBAAA,SAEA,IAAA,MAAAgnB,EAAA8N,OAAA,EAAA,GAGA,IAFAqgI,EAAAnuI,EAAA8N,OAAA,EAAA9N,EAAAhpB,OAAA,GAAAqP,MAAA,KACA2Z,KACA/pB,EAAAk4J,EAAAn3J,OAAAf,KACAm4J,EAAAD,EAAAl4J,GAAAoQ,MAAA,IAAA,GACA2Z,EAAAouI,EAAA,GAAAp1J,QAAA,iBAAA,KAAAuqJ,EAAA6K,EAAA,GAAAp1J,QAAA,iBAAA,SAGAgnB,GAAAujI,EAAAvjI,EAEAlqB,MAAAk4J,YAAA71I,IAAA6H,EAEA,MAAAA,IAGA7kB,IAAA,SAAAgd,EAAAk2I,GACA,GACAt4I,GADAu4I,EAAAx4J,KAAAm4J,cAAA91I,EAEA,OAAAm2I,KAAA5J,EACA4J,MAp4BA,MAs4BAv4I,EAAAjgB,KAAAo4J,cAAA/1I,IAAAk2I,EAAAt4I,KAKA5d,EAAA4O,GAAAm8I,UAAAqL,MAAApL,GACAh6I,UAAA,EAEApI,KAAA,SAAA6sB,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GACA/L,KAAA83B,GAAAA,EACA93B,KAAA8qC,IAAAzoC,EAAAy1B,GACA93B,KAAA8hD,OAAAA,EACA9hD,KAAAgnB,QAAAA,EACAhnB,KAAA6J,MAAAA,EACA7J,KAAA+L,OAAAA,EACA/L,KAAA04J,kBAr5BA,IA25BAC,WAAA,WACA,GAAAC,IAAA54J,KAAAgnB,QAAA3hB,IAAA,uBACArF,KAAAmY,OAAAnY,KAAA8qC,IAAAgqH,WAAA90J,KAAA6J,MAAA7J,KAAA+L,OAAA/L,KAAAgnB,QAAA3hB,IAAA,aAAAuzJ,KAGA54J,KAAA64J,YAAA74J,KAAAmY,OAAA2gJ,WACA94J,KAAA+4J,aAAA/4J,KAAAmY,OAAA6gJ,aAHAh5J,KAAAqT,UAAA,GAUAmzC,OAAA,WACA,OAAAxmD,KAAAqT,WACArT,KAAA83B,GAAAxxB,UAAA,IACA,IAQA2yJ,UAAA,SAAAp4J,EAAAO,KAMA21J,mBAAA,SAAAj/H,EAAAj3B,EAAAO,GACA,GAEA83J,GAFAR,EAAA14J,KAAA04J,cACA5C,GAAA91J,KAAAgnB,QAAA3hB,IAAA,mBAEA,OAAAxE,GAAAb,KAAA64J,aAAAz3J,EAAApB,KAAA+4J,cAAAl4J,EAAA,GAAAO,EAAA,EACA,MAEA83J,EAAAl5J,KAAAi5J,UAAAnhI,EAAAj3B,EAAAO,GACAs3J,IAAAQ,QAj8BA,KAk8BAR,GAAA5C,GACA91J,KAAAm5J,kBAEAn5J,KAAA04J,cAAAQ,MAr8BA,KAs8BAA,GAAApD,GACA91J,KAAAo5J,mBAEA,KAQAzC,qBAAA,WACA,WAl9BA,KAk9BA32J,KAAA04J,gBACA14J,KAAAm5J,kBACAn5J,KAAA04J,kBAp9BA,IAq9BA,IAKAU,gBAAA,WACAp5J,KAAAq5J,iBAAA,IAGAF,gBAAA,WACAn5J,KAAAq5J,iBAAA,IAGAA,gBAAA,SAAAhzG,KAKA2wG,wBAAA,WACA,GAGA/nH,GAAAqqH,EAAAC,EAAAzF,EAAAvzJ,EAAAJ,EACAq5J,EAAAC,EAAAC,EAAAC,EACAC,EAAAnpH,EAAAopH,EAAAr4J,EALAwlB,EAAAhnB,KAAAgnB,QACAjO,EAAA,GACA+gJ,IAIA,QA9+BA,KA8+BA95J,KAAA04J,cACA,MAAA,EAIA,IAFAzpH,EAAAjvC,KAAA+5J,yBACAH,EAAA5yI,EAAA3hB,IAAA,oBAEA,MAAAu0J,GAAA55J,KAAAgnB,EAAAioB,EAMA,IAJAjoB,EAAA3hB,IAAA,uBACA0T,GAAA,6BAAAiO,EAAA3hB,IAAA,qBAAA,cAEAi0J,EAAAt5J,KAAAgnB,QAAA3hB,IAAA,kBAEA,MAAA,EAUA,IARAhD,EAAA+K,QAAAksJ,KACAA,GAAAA,IAEAj3J,EAAA+K,QAAA6hC,KACAA,GAAAA,IAEAuqH,EAAAx5J,KAAAgnB,QAAA3hB,IAAA,0BACAo0J,EAAAz5J,KAAAgnB,QAAA3hB,IAAA,6BACAm0J,GAAAC,EAAA,CAGA,IADAC,KACAv5J,EAAA8uC,EAAA/tC,OAAAf,KACAw5J,EAAA1qH,EAAA9uC,GAAAs5J,IACA,IAAAj4J,EAAAa,EAAAyE,QAAA6yJ,EAAAH,MACAE,EAAAl4J,GAAAytC,EAAA9uC,GAGA8uC,GAAAyqH,EAIA,IAFAH,EAAAD,EAAAp4J,OACA24J,EAAA5qH,EAAA/tC,OACAf,EAAA,EAAAA,EAAAo5J,EAAAp5J,IAMA,IALAswC,EAAA6oH,EAAAn5J,GACA,gBAAAswC,KACAA,EAAA,GAAA68G,GAAA78G,IAEAqjH,EAAArjH,EAAAqjH,QAAA,WACAtyJ,EAAA,EAAAA,EAAAq4J,EAAAr4J,IACAytC,EAAAztC,GAAAw4J,QAAAhzI,EAAA3hB,IAAA,qBACAhD,EAAAiG,OAAA2mC,EAAAztC,IACAo8C,OAAA52B,EAAA3hB,IAAA,iBACA40J,OAAAjzI,EAAA3hB,IAAA,mBAEA9E,EAAAkwC,EAAA+V,OAAAvX,EAAAztC,GAAAwlB,EAAA3hB,IAAA,uBAAA2hB,GACA8yI,EAAAlzJ,KAAA,eAAAktJ,EAAA,KAAAvzJ,EAAA,UAIA,OAAAu5J,GAAA54J,OACA6X,EAAA+gJ,EAAA9qJ,KAAA,MAEA,IAGA+qJ,uBAAA,aAEAG,mBAAA,SAAAvmH,EAAA3sB,GACA,GAEApjB,GAAAu2J,EAAAC,EAAAj6J,EAFAk6J,EAAArzI,EAAA3hB,IAAA,kBACAi1J,EAAAtzI,EAAA3hB,IAAA,mBAEA,IAAAg1J,EACA,MAAAA,EAEA,IAAAC,IAEA12J,EAAA,qCAAAa,KAAAkvC,IAAA,8CAAAlvC,KAAAkvC,IACA,CAGA,IAFAymH,KACAD,EAAA,IAAAxmH,EAAAzyC,OAAA,GAAA,EACAf,EAAA,EAAAA,EAAA,EAAAA,IACAi6J,EAAAj6J,GAAAotJ,EAAAhjJ,EAAAwa,MAAA2E,SAAA9lB,EAAAzD,EAAA,GAAA,IAAAg6J,EAAAG,GAAA,EAAA,IAEA,OAAA,OAAAF,EAAAprJ,KAAA,KAAA,IAIA,MAAA2kC,MAKAs6G,GACAoL,gBAAA,SAAAhzG,GACA,GAGAk0G,GAHA7B,EAAA14J,KAAA04J,cACAvgJ,EAAAnY,KAAAmY,OACAqiJ,EAAAx6J,KAAAy6J,aAAA/B,EAGA8B,KACAD,EAAAv6J,KAAA06J,aAAAhC,EAAAryG,GACAhkD,EAAA+K,QAAAmtJ,IAAAl4J,EAAA+K,QAAAotJ,IACAriJ,EAAAwiJ,kBAAAH,EAAAD,GACAv6J,KAAAy6J,aAAA/B,GAAAr2J,EAAA2G,IAAAuxJ,EAAA,SAAAK,GACA,MAAAA,GAAApoJ,OAGA2F,EAAA0iJ,iBAAAL,EAAAD,GACAv6J,KAAAy6J,aAAA/B,GAAA6B,EAAA/nJ,MAKAg0C,OAAA,WACA,GAGAs0G,GAAAp5G,EAAAvhD,EAAAqB,EAHAsgD,EAAA9hD,KAAA8hD,OACA3pC,EAAAnY,KAAAmY,OACAsiJ,EAAAz6J,KAAAy6J,YAGA,IAAAz6J,KAAA27B,IAAA+3H,OAAAltG,OAAAxlD,KAAAhB,MAAA,CAGA,IAAAG,EAAA2hD,EAAA5gD,OAAAf,KAEA,GADA26J,EAAA96J,KAAA06J,aAAAv6J,GAEA,GAAAkC,EAAA+K,QAAA0tJ,GAAA,CAEA,IADAp5G,KACAlgD,EAAAs5J,EAAA55J,OAAAM,KACAs5J,EAAAt5J,GAAAqiB,SACA69B,EAAA96C,KAAAk0J,EAAAt5J,GAAAgR,GAEAioJ,GAAAt6J,GAAAuhD,MAEAo5G,GAAAj3I,SACA42I,EAAAt6J,GAAA26J,EAAAtoJ,OAIAioJ,GAAAt6J,GAAA,IAGAgY,GAAAquC,YAOAnkD,EAAA4O,GAAAm8I,UAAAx2F,KAAAA,EAAAy2F,EAAAhrJ,EAAA4O,GAAAm8I,UAAAqL,OACAxxJ,KAAA,OAEAgE,KAAA,SAAA6sB,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GACA6qD,EAAA88F,OAAAzoJ,KAAAjK,KAAAhB,KAAA83B,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GACA/L,KAAA+6J,YACA/6J,KAAAg7J,aACAh7J,KAAAi7J,WACAj7J,KAAAk7J,WACAl7J,KAAAm7J,WACAn7J,KAAAo7J,iBAAA,KACAp7J,KAAAq7J,YAAA,KACAr7J,KAAA24J,cAGAM,UAAA,SAAAnhI,EAAAj3B,EAAAO,GACA,GAAAjB,GACA66J,EAAAh7J,KAAAg7J,SACA,KAAA76J,EAAA66J,EAAA95J,OAAAf,KACA,GAAA,OAAA66J,EAAA76J,IAAAU,GAAAm6J,EAAA76J,GAAA,IAAAU,GAAAm6J,EAAA76J,GAAA,GACA,MAAA66J,GAAA76J,GAAA,IAMA45J,uBAAA,WACA,GAAArB,GAAA14J,KAAA04J,aACA,QACAsB,OAAA,OAAAh6J,KAAAk7J,QAAAxC,GACA73J,EAAAb,KAAAi7J,QAAAvC,GACAt3J,EAAApB,KAAAk7J,QAAAxC,GACA/kH,MAAA3zC,KAAAgnB,QAAA3hB,IAAA,aACA2pJ,UAAAhvJ,KAAAgnB,QAAA3hB,IAAA,aACA4rB,OAAAynI,IAIAU,gBAAA,WACA,GAOAkC,GAAAryF,EAPAyvF,EAAA14J,KAAA04J,cACAvgJ,EAAAnY,KAAAmY,OACAojJ,EAAAv7J,KAAA+6J,SAAArC,GACA1xI,EAAAhnB,KAAAgnB,QACAqpI,EAAArpI,EAAA3hB,IAAA,cACA8qJ,EAAAnpI,EAAA3hB,IAAA,sBACA+qJ,EAAAppI,EAAA3hB,IAAA,qBAGAk2J,KAGAlL,GAAAF,IACAmL,EAAAnjJ,EAAAqjJ,WAAAD,EAAA,GAAAA,EAAA,GACAlL,MAjrCA,GAirCAF,GACAnwJ,KAAAy7J,gBAAAH,EAAA9oJ,GACA2F,EAAAujJ,iBAAA17J,KAAAq7J,YAAAC,IAEAlL,IACAnnF,EAAA9wD,EAAAwjJ,SAAAJ,EAAA,GAAAv7J,KAAA47J,UAAAL,EAAA,GACAv7J,KAAA47J,UAAA57J,KAAA+4J,aAAA3I,GACApwJ,KAAA67J,gBAAA5yF,EAAAz2D,GACA2F,EAAAujJ,iBAAA17J,KAAAq7J,YAAApyF,MAIAkwF,gBAAA,WACA,GAAAhhJ,GAAAnY,KAAAmY,MACAnY,MAAAy7J,kBACAtjJ,EAAA2jJ,cAAA97J,KAAAy7J,iBACAz7J,KAAAy7J,gBAAA,MAEAz7J,KAAA67J,kBACA1jJ,EAAA2jJ,cAAA97J,KAAA67J,iBACA77J,KAAA67J,gBAAA,OAIAE,WAAA,WACA,GAKA57J,GAAA+pB,EAAA8xI,EAAA5uJ,EAAAm2D,EALAzhB,EAAA9hD,KAAA8hD,OACAm6G,EAAAn6G,EAAA5gD,OACA+5J,EAAAj7J,KAAAi7J,QACAC,EAAAl7J,KAAAk7J,QACAC,EAAAn7J,KAAAm7J,OAEA,KAAAh7J,EAAA,EAAAA,EAAA87J,EAAA97J,IACA+pB,EAAA43B,EAAA3hD,GACA67J,EAAA,gBAAAl6G,GAAA3hD,GACAiN,EAAA,gBAAA00C,GAAA3hD,IAAA2hD,EAAA3hD,YAAAgN,OACAo2D,EAAAy4F,GAAAl6G,EAAA3hD,GAAAoQ,MAAA,KACAyrJ,GAAA,IAAAz4F,EAAAriE,QACA+5J,EAAAr0J,KAAAwnF,OAAA7qB,EAAA,KACA23F,EAAAt0J,KAAAwnF,OAAA7qB,EAAA,KACA43F,EAAAv0J,KAAAwnF,OAAA7qB,EAAA,MACAn2D,GACA6tJ,EAAAr0J,KAAAsjB,EAAA,IACAgxI,EAAAt0J,KAAAsjB,EAAA,IACAixI,EAAAv0J,KAAAsjB,EAAA,MAEA+wI,EAAAr0J,KAAAzG,GACA,OAAA2hD,EAAA3hD,IAAA,SAAA2hD,EAAA3hD,GACA+6J,EAAAt0J,KAAA,OAEAs0J,EAAAt0J,KAAAwnF,OAAAlkE,IACAixI,EAAAv0J,KAAAwnF,OAAAlkE,KAIAlqB,MAAAgnB,QAAA3hB,IAAA,aACA41J,EAAAj7J,KAAAgnB,QAAA3hB,IAAA,YAGArF,KAAAk8J,KAAAl8J,KAAAm8J,QAAA5xJ,EAAAC,IAAA9H,MAAA6H,EAAA4wJ,GACAn7J,KAAAo8J,KAAAp8J,KAAAq8J,QAAA9xJ,EAAAyuD,IAAAt2D,MAAA6H,EAAA4wJ,GAEAn7J,KAAAs8J,KAAA/xJ,EAAAC,IAAA9H,MAAA6H,EAAA0wJ,GACAj7J,KAAAu8J,KAAAhyJ,EAAAyuD,IAAAt2D,MAAA6H,EAAA0wJ,GAEAj7J,KAAAi7J,QAAAA,EACAj7J,KAAAk7J,QAAAA,EACAl7J,KAAAm7J,QAAAA,GAIAqB,oBAAA,WACA,GAAAx1I,GAAAhnB,KAAAgnB,QACAypI,EAAAzpI,EAAA3hB,IAAA,kBACAqrJ,EAAA1pI,EAAA3hB,IAAA,sBA1vCA,KA4vCAorJ,IACAA,EAAAzwJ,KAAAo8J,OACAp8J,KAAAo8J,KAAA3L,GAEAC,EAAA1wJ,KAAAk8J,OACAl8J,KAAAk8J,KAAAxL,QAjwCA,KAowCA1pI,EAAA3hB,IAAA,mBAAA2hB,EAAA3hB,IAAA,mBAAA2hB,EAAA3hB,IAAA,iBAAArF,KAAAo8J,QACAp8J,KAAAo8J,KAAAp1I,EAAA3hB,IAAA,sBArwCA,KAuwCA2hB,EAAA3hB,IAAA,mBAAA2hB,EAAA3hB,IAAA,mBAAA2hB,EAAA3hB,IAAA,iBAAArF,KAAAk8J,QACAl8J,KAAAk8J,KAAAl1I,EAAA3hB,IAAA,sBAxwCA,KA0wCA2hB,EAAA3hB,IAAA,oBAAA2hB,EAAA3hB,IAAA,oBAAA2hB,EAAA3hB,IAAA,kBAAArF,KAAAu8J,QACAv8J,KAAAu8J,KAAAv1I,EAAA3hB,IAAA,uBA3wCA,KA6wCA2hB,EAAA3hB,IAAA,oBAAA2hB,EAAA3hB,IAAA,oBAAA2hB,EAAA3hB,IAAA,kBAAArF,KAAAs8J,QACAt8J,KAAAs8J,KAAAt1I,EAAA3hB,IAAA,oBAKAo3J,gBAAA,SAAAC,EAAAd,EAAA7C,EAAAF,EAAA8D,GACA,GAAAlM,GAAAzwJ,KAAAgnB,QAAA3hB,IAAA,kBACAqrJ,EAAA1wJ,KAAAgnB,QAAA3hB,IAAA,kBACAu3J,EAAAhB,EAAArxJ,EAAAwa,MAAAg0I,EAAAA,IAAArI,EAAA1wJ,KAAAo8J,MAAAO,IACA5wJ,EAAAxB,EAAAwa,MAAAg0I,GAAArI,EAAAD,GAAAkM,EACA38J,MAAAmY,OAAA0kJ,SAAAH,EAAAE,EAAA/D,EAAA9sJ,MAxxCA,GAwxCA/L,KAAAgnB,QAAA3hB,IAAA,qBAAAwe,UAGA2iC,OAAA,WACA,GAOAs2G,GAAAH,EAAAI,EACAnB,EAAAc,EACAnB,EAAA5jI,EAAAqlI,EAAAn8J,EAAAO,EAAA67J,EAAAC,EAAAC,EACA1rJ,EAAAgC,EAAA2pJ,EAAAC,EAAAC,EAAAC,EACAC,EAAAC,EAAA9pH,EAAAsnH,EAAAC,EAAA/6J,EAXA6mB,EAAAhnB,KAAAgnB,QACA7O,EAAAnY,KAAAmY,OACA0gJ,EAAA74J,KAAA64J,YACAE,EAAA/4J,KAAA+4J,aACAgC,EAAA/6J,KAAA+6J,SACA1K,EAAArpI,EAAA3hB,IAAA,cACA21J,EAAAh7J,KAAAg7J,SAOA,IAAApkG,EAAA88F,OAAAltG,OAAAxlD,KAAAhB,QAIAA,KAAA+7J,aACA/7J,KAAAw8J,sBAEAvB,EAAAj7J,KAAAi7J,QACAC,EAAAl7J,KAAAk7J,QAEAl7J,KAAAm7J,QAAAj6J,UAAAlB,KAAAk7J,QAAAh6J,OAAA,IAAA,CA+CA,IA1CA06J,EAAAc,EAAA,EAEAI,EAAA98J,KAAAs8J,KAAAt8J,KAAAu8J,MAAA,EAAA,EAAAv8J,KAAAs8J,KAAAt8J,KAAAu8J,KACAI,EAAA38J,KAAAk8J,KAAAl8J,KAAAo8J,MAAA,EAAA,EAAAp8J,KAAAk8J,KAAAl8J,KAAAo8J,KACAW,EAAA/8J,KAAAk7J,QAAAh6J,OAAA,EAEAmvJ,IAAAwI,EAAA,EAAAxI,GAAA0I,EAAA,EAAA1I,KACAA,EAAA,GAEAA,IAEAoN,EAAAz2I,EAAA3hB,IAAA,wBAAA2hB,EAAA3hB,IAAA,uBACAo4J,GAAAz2I,EAAA3hB,IAAA,iBAAA2hB,EAAA3hB,IAAA,cAAA61J,EAAA6B,KAAA/8J,KAAAo8J,QACArD,GAAAxuJ,EAAAI,KAAA0lJ,KAEAoN,GAAAz2I,EAAA3hB,IAAA,iBAAA2hB,EAAA3hB,IAAA,cAAA61J,EAAA6B,KAAA/8J,KAAAk8J,QACAnD,GAAAxuJ,EAAAI,KAAA0lJ,GACAuL,GAAArxJ,EAAAI,KAAA0lJ,KAEAoN,IACAz2I,EAAA3hB,IAAA,iBAAA2hB,EAAA3hB,IAAA,mBAAA61J,EAAA,KAAAl7J,KAAAo8J,MAAAlB,EAAA,KAAAl7J,KAAAk8J,SACAQ,GAAAnyJ,EAAAI,KAAA0lJ,GACAwI,GAAAtuJ,EAAAI,KAAA0lJ,KAEAoN,GAAAz2I,EAAA3hB,IAAA,cACA2hB,EAAA3hB,IAAA,iBAAA2hB,EAAA3hB,IAAA,kBACA61J,EAAA6B,KAAA/8J,KAAAo8J,MAAAlB,EAAA6B,KAAA/8J,KAAAk8J,SACArD,GAAAtuJ,EAAAI,KAAA0lJ,KAKA0I,QAx1CA,KA01CA/xI,EAAA3hB,IAAA,mBAAA2hB,EAAA3hB,IAAA,oBACArF,KAAAy8J,gBAAAC,EAAAd,EAAA7C,EAAAF,EAAA8D,GAGAhlI,KACAqlI,GAAArlI,GACAlmB,EAAAgC,EAAA,KACA2pJ,EAAAlC,EAAAh6J,OACAf,EAAA,EAAAA,EAAAi9J,EAAAj9J,IACAU,EAAAo6J,EAAA96J,GACA88J,EAAAhC,EAAA96J,EAAA,GACAiB,EAAA85J,EAAA/6J,GACA+8J,EAAAR,EAAAnyJ,EAAAwa,OAAAlkB,EAAAb,KAAAu8J,OAAA1D,EAAAiE,IACAK,EAAAh9J,EAAAi9J,EAAA,EAAAV,EAAAnyJ,EAAAwa,OAAAk4I,EAAAj9J,KAAAu8J,OAAA1D,EAAAiE,IAAAjE,EACAplJ,EAAAypJ,GAAAC,EAAAD,GAAA,EACAlC,EAAA76J,IAAAsR,GAAA,EAAAgC,EAAAtT,GACAsR,EAAAgC,EACA,OAAArS,EACAjB,IACA,OAAA+6J,EAAA/6J,EAAA,KACAw3B,KACAqlI,EAAAp2J,KAAA+wB,IAEAojI,EAAAn0J,KAAA,QAGAxF,EAAApB,KAAAo8J,OACAh7J,EAAApB,KAAAo8J,MAEAh7J,EAAApB,KAAAk8J,OACA96J,EAAApB,KAAAk8J,MAEAvkI,EAAAz2B,QAEAy2B,EAAA/wB,MAAAs2J,EAAAtB,EAAA7C,IAEAwC,GAAA2B,EAAAtB,EAAArxJ,EAAAwa,MAAAg0I,EAAAA,IAAA33J,EAAApB,KAAAo8J,MAAAO,KACAhlI,EAAA/wB,KAAA20J,GACAR,EAAAn0J,KAAA20J,GAOA,KAHA8B,KACAC,KACAC,EAAAP,EAAA97J,OACAf,EAAA,EAAAA,EAAAo9J,EAAAp9J,IACAw3B,EAAAqlI,EAAA78J,GACAw3B,EAAAz2B,SACA8lB,EAAA3hB,IAAA,eACAsyB,EAAA/wB,MAAA+wB,EAAAA,EAAAz2B,OAAA,GAAA,GAAA06J,EAAA7C,IACAuE,EAAA12J,KAAA+wB,EAAAh1B,MAAA,IACAg1B,EAAAnjB,OAIAmjB,EAAAz2B,OAAA,IAEAy2B,EAAA,IAAAA,EAAA,GAAA,GAAAA,EAAA,GAAA,KAEA0lI,EAAAz2J,KAAA+wB,GAMA,KADA4lI,EAAAD,EAAAp8J,OACAf,EAAA,EAAAA,EAAAo9J,EAAAp9J,IACAgY,EAAAulJ,UAAAJ,EAAAn9J,GACA6mB,EAAA3hB,IAAA,aAAA2hB,EAAA3hB,IAAA,cAAAwe,QAQA,SAr6CA,KAg6CAmD,EAAA3hB,IAAA,mBAAA2hB,EAAA3hB,IAAA,oBACArF,KAAAy8J,gBAAAC,EAAAd,EAAA7C,EAAAF,EAAA8D,GAGAY,EAAAF,EAAAn8J,OACAf,EAAA,EAAAA,EAAAo9J,EAAAp9J,IACAgY,EAAAulJ,UAAAL,EAAAl9J,GAAA6mB,EAAA3hB,IAAA,iBAt6CA,GAu6CA2hB,EAAA3hB,IAAA,cAAAwe,QAGA,IAAAwsI,GAAArpI,EAAA3hB,IAAA,cAKA,IAJAm4J,EAAAx2I,EAAA3hB,IAAA,kBA36CA,KA46CAm4J,EAAAn4J,MACAm4J,EAAA,GAAA1P,GAAA0P,IAEAr9J,EAAA,EAAAA,EAAAi9J,EAAAj9J,KACAwzC,EAAA6pH,EAAAn4J,IAAA61J,EAAA/6J,MAEAgY,EAAAqjJ,WAAAkB,EAAAnyJ,EAAAwa,OAAAk2I,EAAA96J,GAAAH,KAAAu8J,OAAA1D,EAAAiE,IACAlB,EAAArxJ,EAAAwa,MAAAg0I,EAAAA,IAAAmC,EAAA/6J,GAAAH,KAAAo8J,MAAAO,IACAtM,MAp7CA,GAq7CA18G,GAAA9vB,QAKAwsI,IAAArpI,EAAA3hB,IAAA,cAAA,OAAA61J,EAAA6B,IACA5kJ,EAAAqjJ,WAAAkB,EAAAnyJ,EAAAwa,OAAAk2I,EAAAA,EAAA/5J,OAAA,GAAAlB,KAAAu8J,OAAA1D,EAAAiE,IACAlB,EAAArxJ,EAAAwa,MAAAg0I,EAAAA,IAAAmC,EAAA6B,GAAA/8J,KAAAo8J,MAAAO,IACAtM,MA77CA,GA87CArpI,EAAA3hB,IAAA,cAAAwe,SAEA7jB,KAAAk8J,OAAAl8J,KAAAq8J,UACAhM,GAAArpI,EAAA3hB,IAAA,kBACAxE,EAAAo6J,EAAA54J,EAAAyE,QAAA9G,KAAAq8J,QAAAnB,IACA/iJ,EAAAqjJ,WAAAkB,EAAAnyJ,EAAAwa,OAAAlkB,EAAAb,KAAAu8J,OAAA1D,EAAAiE,IACAlB,EAAArxJ,EAAAwa,MAAAg0I,EAAAA,IAAA/4J,KAAAq8J,QAAAr8J,KAAAo8J,MAAAO,IACAtM,MAr8CA,GAs8CArpI,EAAA3hB,IAAA,iBAAAwe,UAEAwsI,GAAArpI,EAAA3hB,IAAA,kBACAxE,EAAAo6J,EAAA54J,EAAAyE,QAAA9G,KAAAm8J,QAAAjB,IACA/iJ,EAAAqjJ,WAAAkB,EAAAnyJ,EAAAwa,OAAAlkB,EAAAb,KAAAu8J,OAAA1D,EAAAiE,IACAlB,EAAArxJ,EAAAwa,MAAAg0I,EAAAA,IAAA/4J,KAAAm8J,QAAAn8J,KAAAo8J,MAAAO,IACAtM,MA58CA,GA68CArpI,EAAA3hB,IAAA,iBAAAwe,WAIA7jB,KAAAq7J,YAAAljJ,EAAAwlJ,iBACA39J,KAAA47J,UAAAA,EACAzjJ,EAAAquC,aAOAnkD,EAAA4O,GAAAm8I,UAAAzjD,IAAAA,EAAA0jD,EAAAhrJ,EAAA4O,GAAAm8I,UAAAqL,MAAAxK,GACAhnJ,KAAA,MAEAgE,KAAA,SAAA6sB,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GACA,GAOA6xJ,GAAAC,EAAAC,EAAAC,EACAC,EAAA79J,EAAA89J,EAAA9xG,EAAAolG,EAAA2M,EAAAllG,EAAAxuD,EAAA2zJ,EAAAC,EACAC,EAAAC,EAAA98J,EAAA+8J,EAAAC,EAAAt0I,EAAAu0I,EAAAC,EATA/hG,EAAAjzC,SAAA1C,EAAA3hB,IAAA,YAAA,IACAmsJ,EAAA9nI,SAAA1C,EAAA3hB,IAAA,cAAA,IACAwrJ,EAAA7pI,EAAA3hB,IAAA,iBACAyrJ,EAAA9pI,EAAA3hB,IAAA,iBACAosJ,EAAAzqI,EAAA3hB,IAAA,kBACAs5J,EAAA/yH,EAAAA,EACAgzH,GAAAhzH,EAAAA,CAOA,KAHA+9D,EAAA+pD,OAAAzoJ,KAAAjK,KAAAhB,KAAA83B,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GAGA5L,EAAA,EAAA89J,EAAAn8G,EAAA5gD,OAAAf,EAAA89J,EAAA99J,IACA+pB,EAAA43B,EAAA3hD,KACAy9J,EAAA,gBAAA,IAAA1zI,EAAArZ,QAAA,MAAA,IACAxO,EAAA+K,QAAA8c,MACAm0I,GAAA,EACAT,IACA1zI,EAAA43B,EAAA3hD,GAAAutJ,EAAAxjI,EAAA3Z,MAAA,OAEA2Z,EAAAjd,EAAAid,EAAA,MACA2zI,EAAAtzJ,EAAAyuD,IAAAt2D,MAAA6H,EAAA2f,GACA4zI,EAAAvzJ,EAAAC,IAAA9H,MAAA6H,EAAA2f,GACA2zI,EAAAc,IACAA,EAAAd,GAEAC,EAAAc,IACAA,EAAAd,GAKA99J,MAAAq+J,QAAAA,EACAr+J,KAAAy6J,gBACAz6J,KAAA28D,SAAAA,EACA38D,KAAAwxJ,WAAAA,EACAxxJ,KAAA6+J,cAAAliG,EAAA60F,EACAxxJ,KAAA6J,MAAAA,EAAAi4C,EAAA5gD,OAAAy7D,GAAA7a,EAAA5gD,OAAA,GAAAswJ,EAEAxxJ,KAAA24J,aAEAlH,IACA0M,MAzgDA,KAygDAtN,GAAAjlH,EAAAA,EAAAilH,EACAuN,MA1gDA,KA0gDAtN,EAAAllH,EAAAA,EAAAklH,GAGAkN,KACAD,EAAAM,KAAAL,CACA,IAAAc,MACAC,IACA,KAAA5+J,EAAA,EAAA89J,EAAAn8G,EAAA5gD,OAAAf,EAAA89J,EAAA99J,IACA,GAAAk+J,EAKA,IAJAC,EAAAx8G,EAAA3hD,GACA2hD,EAAA3hD,GAAAq+J,KACAM,EAAA3+J,GAAA,EACA49J,EAAA59J,GAAA4+J,EAAA5+J,GAAA,EACAqB,EAAA,EAAA+8J,EAAAD,EAAAp9J,OAAAM,EAAA+8J,EAAA/8J,IAEA,QADA0oB,EAAAs0I,EAAAh9J,GAAAiwJ,EAAAlE,EAAA+Q,EAAA98J,GAAA28J,EAAAC,GAAAE,EAAA98J,MAEA0oB,EAAA,IACA40I,EAAA3+J,IAAA+pB,GAEAy0I,EAAA,GAAAC,EAAA,EACA10I,EAAA,EACA60I,EAAA5+J,IAAAoK,EAAA+1B,IAAApW,GAEA6zI,EAAA59J,IAAA+pB,EAGA6zI,EAAA59J,IAAAoK,EAAA+1B,IAAApW,GAAAA,EAAA,EAAA00I,EAAAD,IAEAX,EAAAp3J,KAAAsjB,QAIAA,GAAAunI,EAAAlE,EAAAzrG,EAAA3hD,GAAAg+J,EAAAC,GAAAt8G,EAAA3hD,GAEA,QADA+pB,EAAA43B,EAAA3hD,GAAAstJ,EAAAvjI,KAEA8zI,EAAAp3J,KAAAsjB,EAIAlqB,MAAAwK,IAAAA,EAAAD,EAAAC,IAAA9H,MAAA6H,EAAAyzJ,GACAh+J,KAAAg5D,IAAAA,EAAAzuD,EAAAyuD,IAAAt2D,MAAA6H,EAAAyzJ,GACAh+J,KAAA4+J,SAAAA,EAAAP,EAAA9zJ,EAAAC,IAAA9H,MAAA6H,EAAAu0J,GAAAt0J,EACAxK,KAAA2+J,SAAAA,EAAAN,EAAA9zJ,EAAAyuD,IAAAt2D,MAAA6H,EAAAyzJ,GAAAhlG,MApjDA,KAsjDAhyC,EAAA3hB,IAAA,mBAAA2hB,EAAA3hB,IAAA,mBAAA2hB,EAAA3hB,IAAA,iBAAA2zD,KACAA,EAAAhyC,EAAA3hB,IAAA,sBAvjDA,KAyjDA2hB,EAAA3hB,IAAA,mBAAA2hB,EAAA3hB,IAAA,mBAAA2hB,EAAA3hB,IAAA,iBAAAmF,KACAA,EAAAwc,EAAA3hB,IAAA,kBAGArF,KAAAuxJ,SAAAA,EAAAvqI,EAAA3hB,IAAA,YAAA,GAEA64J,EADAllG,GAAA,GAAAxuD,GAAA,GAAA+mJ,EACA,EACA,GAAAA,EACAv4F,EACAA,EAAA,EACAA,EAEAxuD,EAEAxK,KAAAk+J,YAAAA,EAEA/xG,EAAAkyG,EAAA9zJ,EAAAC,IAAA9H,MAAA6H,EAAAwzJ,GAAAxzJ,EAAAC,IAAA9H,MAAA6H,EAAAw0J,GAAAv0J,EAAAwuD,EAIAh5D,KAAAg/J,eAAAzN,GAAAv4F,EAAA,EAAAh5D,KAAA+4J,aAAA,EAAA/4J,KAAA+4J,aAAA,EAEA//F,EAAAklG,GACAQ,EAAAL,GAAA7zJ,GAAA,EAAAo0J,EAAAp0J,GACAi0J,GAAAC,EAAAR,GAAA/xG,EAAAnsD,KAAA+4J,gBACAxuJ,EAAAI,KAAA8zJ,KACAz+J,KAAAg/J,gBAAA,EACAP,EAAAl0J,EAAAI,KAAA8zJ,KAGAA,EAAAz+J,KAAA+4J,aAEA/4J,KAAAy+J,QAAAA,EAEAp8J,EAAA+K,QAAA4Z,EAAA3hB,IAAA,cACArF,KAAAi/J,gBAAAj4I,EAAA3hB,IAAA,YACArF,KAAAk/J,gBAAA,OAEAl/J,KAAAi/J,gBAAA,KACAj/J,KAAAk/J,gBAAAl4I,EAAA3hB,IAAA,YACArF,KAAAk/J,qBAjmDA,KAimDAl/J,KAAAk/J,gBAAA75J,MACArF,KAAAk/J,gBAAA,GAAApR,GAAA9tJ,KAAAk/J,mBAIAl/J,KAAAmsD,MAAAA,GAGA8sG,UAAA,SAAAnhI,EAAAj3B,EAAAO,GACA,GAAA6e,GAAA1V,EAAA8sB,MAAAx2B,EAAAb,KAAA6+J,cACA,OAAA5+I,GAAA,GAAAA,GAAAjgB,KAAA8hD,OAAA5gD,WA3mDA,GA2mDA+e,GAGA85I,uBAAA,WACA,GAGAxmJ,GAAApT,EAHAu4J,EAAA14J,KAAA04J,cACA52G,EAAA8rG,EAAA5tJ,KAAA8hD,OAAA42G,IACAz4I,IAEA,KAAA9f,EAAA2hD,EAAA5gD,OAAAf,KACAoT,EAAAuuC,EAAA3hD,GACA8f,EAAArZ,MACAozJ,OAAA,OAAAzmJ,EACAA,MAAAA,EACAogC,MAAA3zC,KAAAm/J,UAAAh/J,EAAAoT,EAAAmlJ,GACAznI,OAAAynI,GAGA,OAAAz4I,IAGAk/I,UAAA,SAAAC,EAAA7rJ,EAAA8rJ,GACA,GAGA1rH,GAAA2rH,EAHAL,EAAAj/J,KAAAi/J,gBACAC,EAAAl/J,KAAAk/J,gBACAl4I,EAAAhnB,KAAAgnB,OAeA,OAZA2sB,GADA3zC,KAAAq+J,QACAr3I,EAAA3hB,IAAA,mBAEAkO,EAAA,EAAAyT,EAAA3hB,IAAA,eAAA2hB,EAAA3hB,IAAA,YAEA,IAAAkO,OAzoDA,KAyoDAyT,EAAA3hB,IAAA,eACAsuC,EAAA3sB,EAAA3hB,IAAA,cAEA65J,IAAAI,EAAAJ,EAAA75J,IAAAkO,IACAogC,EAAA2rH,EACAL,GAAAA,EAAA/9J,OAAAm+J,IACA1rH,EAAAsrH,EAAAI,IAEAh9J,EAAA+K,QAAAumC,GAAAA,EAAAyrH,EAAAzrH,EAAAzyC,QAAAyyC,GAMA+mH,aAAA,SAAA2E,EAAAh5G,GACA,GAUAjlD,GAAA2K,EAAA4nC,EAAAqmH,EAAAuF,EAAAp/J,EAAA87J,EAAA/xI,EAAAs1I,EAAAC,EAVAlL,EAAAv0J,KAAA8hD,OAAAu9G,GACAr4I,EAAAhnB,KAAAgnB,QACAk3I,EAAAl+J,KAAAk+J,YACAj+I,KACAksC,EAAAnsD,KAAAmsD,MACAkyG,EAAAr+J,KAAAq+J,QACAlmJ,EAAAnY,KAAAmY,OACAtX,EAAAw+J,EAAAr/J,KAAA6+J,cACAG,EAAAh/J,KAAAg/J,eACAP,EAAAz+J,KAAAy+J,OASA,IANAlK,EAAAlyJ,EAAA+K,QAAAmnJ,GAAAA,GAAAA,GACA0H,EAAA1H,EAAArzJ,OACAgpB,EAAAqqI,EAAA,GACAyF,EAAAn4G,EAAA,KAAA0yG,GACAkL,EAAA59G,EAAAq8G,EAAA3J,GAAA,GAEAyF,EACA,MAAAhzI,GAAA3hB,IAAA,cACAsuC,EAAA0S,EAAAr/B,EAAA3hB,IAAA,aAAArF,KAAAk6J,mBAAAlzI,EAAA3hB,IAAA,aAAA2hB,GACA5lB,EAAAq9J,EAAA,EAAAA,EAAA,EAAAA,EACAtmJ,EAAA0kJ,SAAAh8J,EAAAO,EAAApB,KAAA28D,SAAA,EAAA,EAAAhpB,EAAAA,QAEA,EAIA,KADA4rH,EAAAd,EACAt+J,EAAA,EAAAA,EAAA87J,EAAA97J,IAAA,CAGA,GAFA+pB,EAAAqqI,EAAAp0J,GAEAk+J,GAAAn0I,IAAAg0I,EAAA,CACA,IAAAuB,GAAAD,EACA,QAEAA,IAAA,EAIAzzJ,EADAogD,EAAA,EACA5hD,EAAA8sB,MAAA2nI,GAAAz0J,EAAA+1B,IAAApW,EAAAg0I,GAAA/xG,IAAA,EAEA,EAEAjiC,EAAAg0I,GAAAh0I,IAAAg0I,GAAA,IAAAO,GACAr9J,EAAAm+J,EACAA,GAAAxzJ,IAEA3K,EAAAq9J,EAAA1yJ,EACA0yJ,GAAA1yJ,GAEA4nC,EAAA3zC,KAAAm/J,UAAAh/J,EAAA+pB,EAAAm1I,GACAh5G,IACA1S,EAAA3zC,KAAAk6J,mBAAAvmH,EAAA3sB,IAEA/G,EAAArZ,KAAAuR,EAAA0kJ,SAAAh8J,EAAAO,EAAApB,KAAA28D,SAAA,EAAA5wD,EAAA,EAAA4nC,EAAAA,IAEA,MAAA,KAAA1zB,EAAA/e,OACA+e,EAAA,GAEAA,KAOA5d,EAAA4O,GAAAm8I,UAAAc,SAAAA,EAAAb,EAAAhrJ,EAAA4O,GAAAm8I,UAAAqL,MAAAxK,GACAhnJ,KAAA,WAEAgE,KAAA,SAAA6sB,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GACA,GAAA4wD,GAAAjzC,SAAA1C,EAAA3hB,IAAA,YAAA,IACAmsJ,EAAA9nI,SAAA1C,EAAA3hB,IAAA,cAAA,GACA6oJ,GAAAwF,OAAAzoJ,KAAAjK,KAAAhB,KAAA83B,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GAEA/L,KAAAy6J,gBACAz6J,KAAA28D,SAAAA,EACA38D,KAAAwxJ,WAAAA,EACAxxJ,KAAA6+J,cAAAliG,EAAA60F,EACAxxJ,KAAA8hD,OAAAz/C,EAAA2G,IAAA84C,EAAAssC,QACApuF,KAAA6J,MAAAA,EAAAi4C,EAAA5gD,OAAAy7D,GAAA7a,EAAA5gD,OAAA,GAAAswJ,EAEAnvJ,EAAA+K,QAAA4Z,EAAA3hB,IAAA,cACArF,KAAAi/J,gBAAAj4I,EAAA3hB,IAAA,YACArF,KAAAk/J,gBAAA,OAEAl/J,KAAAi/J,gBAAA,KACAj/J,KAAAk/J,gBAAAl4I,EAAA3hB,IAAA,YACArF,KAAAk/J,qBA/uDA,KA+uDAl/J,KAAAk/J,gBAAA75J,MACArF,KAAAk/J,gBAAA,GAAApR,GAAA9tJ,KAAAk/J,mBAGAl/J,KAAA24J,cAGAM,UAAA,SAAAnhI,EAAAj3B,EAAAO,GACA,MAAAmJ,GAAA8sB,MAAAx2B,EAAAb,KAAA6+J,gBAGA9E,uBAAA,WACA,GAAArB,GAAA14J,KAAA04J,aACA,QACAsB,WA7vDA,KA6vDAh6J,KAAA8hD,OAAA42G,GACAnlJ,MAAAvT,KAAA8hD,OAAA42G,GACA/kH,MAAA3zC,KAAAm/J,UAAAn/J,KAAA8hD,OAAA42G,GAAAA,GACAznI,OAAAynI,IAIAyG,UAAA,SAAA5rJ,EAAA8rJ,GACA,GAIAC,GAJAx9G,EAAA9hD,KAAA8hD,OACA96B,EAAAhnB,KAAAgnB,QACAi4I,EAAAj/J,KAAAi/J,gBACAC,EAAAl/J,KAAAk/J,eAcA,OAXAA,KAAAI,EAAAJ,EAAA75J,IAAAkO,IACA+rJ,EACAL,GAAAA,EAAA/9J,OAAAm+J,EACAJ,EAAAI,GACAv9G,EAAAu9G,GAAA,EACAr4I,EAAA3hB,IAAA,eACAy8C,EAAAu9G,GAAA,EACAr4I,EAAA3hB,IAAA,eAEA2hB,EAAA3hB,IAAA,iBAKAq1J,aAAA,SAAA2E,EAAAh5G,GACA,GAGA0yG,GAAAhtJ,EAAA2zJ,EACA7+J,EAAAO,EAAAuyC,EAJAmO,EAAA9hD,KAAA8hD,OACA96B,EAAAhnB,KAAAgnB,QACA7O,EAAAnY,KAAAmY,MAmBA,IAfA4gJ,EAAA5gJ,EAAA6gJ,YACA0G,EAAAn1J,EAAAwa,MAAAg0I,EAAA,GAEAl4J,EAAAw+J,EAAAr/J,KAAA6+J,cACA/8G,EAAAu9G,GAAA,GACAj+J,EAAAs+J,EACA3zJ,EAAA2zJ,EAAA,GACA59G,EAAAu9G,GAAA,GACAj+J,EAAA,EACA2K,EAAA2zJ,EAAA,IAEAt+J,EAAAs+J,EAAA,EACA3zJ,EAAA,GAGA,QADA4nC,EAAA3zC,KAAAm/J,UAAAr9G,EAAAu9G,GAAAA,IAOA,MAHAh5G,KACA1S,EAAA3zC,KAAAk6J,mBAAAvmH,EAAA3sB,IAEA7O,EAAA0kJ,SAAAh8J,EAAAO,EAAApB,KAAA28D,SAAA,EAAA5wD,EAAA,EAAA4nC,EAAAA,MAOAtxC,EAAA4O,GAAAm8I,UAAAe,SAAAA,EAAAd,EAAAhrJ,EAAA4O,GAAAm8I,UAAAqL,MAAAxK,GACAhnJ,KAAA,WAEAgE,KAAA,SAAA6sB,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GACAoiJ,EAAAuF,OAAAzoJ,KAAAjK,KAAAhB,KAAA83B,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GAEA/L,KAAAy6J,gBACAz6J,KAAA8hD,OAAAA,EAAAz/C,EAAA2G,IAAA84C,EAAAssC,QACApuF,KAAAg5D,IAAAzuD,EAAAyuD,IAAAt2D,MAAA6H,EAAAu3C,GACA9hD,KAAAwK,IAAAD,EAAAC,IAAA9H,MAAA6H,EAAAu3C,GACA9hD,KAAAmsD,MAAAnsD,KAAAwK,IAAAxK,KAAAg5D,IACAh5D,KAAA6J,MAAAA,EAAA,SAAAmd,EAAA3hB,IAAA,SAAA,EAAAy8C,EAAA5gD,OAAAlB,KAAA6J,MACA7J,KAAAwL,SAAAjB,EAAA8sB,MAAAxtB,EAAAi4C,EAAA5gD,QACAlB,KAAA2/J,UAAA91J,EAAAi4C,EAAA5gD,WAz0DA,KA00DA8lB,EAAA3hB,IAAA,mBAAA2hB,EAAA3hB,IAAA,mBAAA2hB,EAAA3hB,IAAA,iBAAArF,KAAAg5D,OACAh5D,KAAAg5D,IAAAhyC,EAAA3hB,IAAA,sBA30DA,KA60DA2hB,EAAA3hB,IAAA,mBAAA2hB,EAAA3hB,IAAA,mBAAA2hB,EAAA3hB,IAAA,iBAAArF,KAAAwK,OACAxK,KAAAwK,IAAAwc,EAAA3hB,IAAA,kBAEArF,KAAA24J,aACA34J,KAAAmY,SACAnY,KAAAimB,WAAA,SAAAe,EAAA3hB,IAAA,cAAAkF,EAAAwa,MAAA,GAAA/kB,KAAA+4J,cAAA/xI,EAAA3hB,IAAA,gBAIA4zJ,UAAA,SAAAnhI,EAAAj3B,EAAAO,GACA,MAAAmJ,GAAA8sB,MAAAx2B,EAAAb,KAAA2/J,YAGA5F,uBAAA,WACA,GAAArB,GAAA14J,KAAA04J,aACA,QACAsB,WA71DA,KA61DAh6J,KAAA8hD,OAAA42G,GACAnlJ,MAAAvT,KAAA8hD,OAAA42G,GACAznI,OAAAynI,IAIAgC,aAAA,SAAA2E,EAAAh5G,GACA,GAUAu2G,GAAA1yI,EAAAypB,EAAA9yC,EAVAihD,EAAA9hD,KAAA8hD,OACA96B,EAAAhnB,KAAAgnB,QACAgyC,EAAAh5D,KAAAg5D,IACAxuD,EAAAxK,KAAAwK,IACA2hD,EAAAnsD,KAAAmsD,MACA3gD,EAAAxL,KAAAwL,SACA2M,EAAAnY,KAAAmY,OACA4gJ,EAAA/4J,KAAA+4J,aACA9yI,EAAAjmB,KAAAimB,WACA25I,EAAA7G,EAAA9yI,CAUA,OAPAiE,GAAAqjI,EAAAzrG,EAAAu9G,GAAArmG,EAAAxuD,GACA3J,EAAAw+J,EAAA7zJ,EACAoxJ,EAAAryJ,EAAAwa,MAAA66I,EAAAA,IAAA11I,EAAA8uC,GAAA7M,IACAxY,EAAA3sB,EAAA3hB,IAAA,mBAAA6kB,EAAAlD,EAAA3hB,IAAA,kBAAA2hB,EAAA3hB,IAAA,kBAAA2hB,EAAA3hB,IAAA,aACAghD,IACA1S,EAAA3zC,KAAAk6J,mBAAAvmH,EAAA3sB,IAEA7O,EAAAwjJ,SAAA96J,EAAA+7J,EAAA/7J,EAAA+7J,EAAA32I,EAAA0tB,MAOAtxC,EAAA4O,GAAAm8I,UAAAgB,OAAAA,EAAAf,EAAAhrJ,EAAA4O,GAAAm8I,UAAAqL,OACAxxJ,KAAA,SAEAgE,KAAA,SAAA6sB,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GACA,GAAAitD,GAAAxuD,EAAA+pJ,CACAnG,GAAAsF,OAAAzoJ,KAAAjK,KAAAhB,KAAA83B,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GAGA/L,KAAA8hD,OAAAA,EAAA4rG,EAAA5rG,GAEAyyG,EAAAzyG,EAAAn/C,QACA4xJ,EAAA,GAAA,OAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACAA,EAAA,GAAA,OAAAzyG,EAAA,GAAAyyG,EAAA,GAAAA,EAAA,GACAv7F,EAAAzuD,EAAAyuD,IAAAt2D,MAAA6H,EAAAu3C,GACAt3C,EAAAD,EAAAC,IAAA9H,MAAA6H,EAAAu3C,GAEAkX,MA94DA,KA64DAhyC,EAAA3hB,IAAA,QACA2zD,EAAA,EAAAA,EAAA,EAEAhyC,EAAA3hB,IAAA,QAEArF,KAAAg5D,IAAAA,EACAh5D,KAAAwK,IAAAA,EACAxK,KAAAmsD,MAAA3hD,EAAAwuD,EACAh5D,KAAA86J,UACA96J,KAAA6/J,eACA7/J,KAAA8/J,cACA9/J,KAAA6J,MAAAA,EAAA,SAAAmd,EAAA3hB,IAAA,SAAA,QAAAwE,EACA7J,KAAAmY,OAAAnY,KAAA8qC,IAAAgqH,WAAAjrJ,EAAAkC,EAAAib,EAAA3hB,IAAA,cACAy8C,EAAA5gD,SACAlB,KAAAqT,UAAA,GAEArT,KAAA24J,cAGAM,UAAA,SAAAnhI,EAAAj3B,EAAAO,GACA,GAAA2+J,GAAA//J,KAAAmY,OAAA6nJ,WAAAloI,EAAAj3B,EAAAO,EACA,YAl6DA,KAk6DA2+J,OAl6DA,KAk6DA//J,KAAA86J,OAAAiF,GAAA//J,KAAA86J,OAAAiF,OAl6DA,IAq6DAhG,uBAAA,WACA,GAAArB,GAAA14J,KAAA04J,aACA,QACAuH,SAAAvH,EAAA1gI,OAAA,EAAA,GACAzkB,MAAAvT,KAAA8hD,OAAA42G,EAAA1gI,OAAA,IACAkoI,OAAAxH,IAIAW,gBAAA,SAAAhzG,GACA,GAEA85G,GAFAzH,EAAA14J,KAAA04J,cACAqH,EAAA//J,KAAA6/J,YAAAnH,EAGA,cADA14J,MAAA86J,OAAAiF,GACArH,EAAA1gI,OAAA,EAAA,IACA,IAAA,IACAmoI,EAAAngK,KAAAogK,YAAA1H,EAAA1gI,OAAA,GAAAquB,EACA,MACA,KAAA,IACA85G,EAAAngK,KAAAqgK,kBAAAh6G,EACA,MACA,KAAA,IACA85G,EAAAngK,KAAAsgK,aAAAj6G,GAGArmD,KAAA6/J,YAAAnH,GAAAyH,EAAA3tJ,GACAxS,KAAA86J,OAAAqF,EAAA3tJ,IAAAkmJ,EACA14J,KAAAmY,OAAA0iJ,iBAAAkF,EAAAI,IAGAC,YAAA,SAAAG,EAAAl6G,GACA,GAAAm6G,GAAAxgK,KAAA8hD,OAAAy+G,GACAE,EAAAl2J,EAAAwa,MAAA/kB,KAAA64J,cAAA2H,EAAAxgK,KAAAg5D,KAAAh5D,KAAAmsD,QACAxY,EAAA3zC,KAAAgnB,QAAA3hB,IAAA,eAAAk7J,EAAA,EAIA,OAHAl6G,KACA1S,EAAA3zC,KAAAk6J,mBAAAvmH,EAAA3zC,KAAAgnB,UAEAhnB,KAAAmY,OAAA0kJ,SAAA,EAAA,EAAA4D,EAAA,EAAAzgK,KAAA+4J,aAAA,EAAAplH,EAAAA,IAGA0sH,kBAAA,SAAAh6G,GACA,GAAAq6G,GAAA1gK,KAAA8hD,OAAA,GACA6+G,EAAAp2J,EAAAwa,MAAA/kB,KAAA64J,cAAA6H,EAAA1gK,KAAAg5D,KAAAh5D,KAAAmsD,QACAxY,EAAA3zC,KAAAgnB,QAAA3hB,IAAA,mBAIA,OAHAghD,KACA1S,EAAA3zC,KAAAk6J,mBAAAvmH,EAAA3zC,KAAAgnB,UAEAhnB,KAAAmY,OAAA0kJ,SAAA,EAAAtyJ,EAAAwa,MAAA,GAAA/kB,KAAA+4J,cAAA4H,EAAA,EACAp2J,EAAAwa,MAAA,GAAA/kB,KAAA+4J,cAAA,EAAAplH,EAAAA,IAGA2sH,aAAA,SAAAj6G,GACA,GAAAu6G,GAAA5gK,KAAA8hD,OAAA,GACAjhD,EAAA0J,EAAAwa,MAAA/kB,KAAA64J,cAAA+H,EAAA5gK,KAAAg5D,KAAAh5D,KAAAmsD,OAAAnsD,KAAAgnB,QAAA3hB,IAAA,eAAA,GACAw7J,EAAAt2J,EAAAwa,MAAA,GAAA/kB,KAAA+4J,cACA+H,EAAA9gK,KAAA+4J,aAAA,EAAA8H,EACAltH,EAAA3zC,KAAAgnB,QAAA3hB,IAAA,cAIA,OAHAghD,KACA1S,EAAA3zC,KAAAk6J,mBAAAvmH,EAAA3zC,KAAAgnB,UAEAhnB,KAAAmY,OAAA0kJ,SAAAh8J,EAAAggK,EAAA7gK,KAAAgnB,QAAA3hB,IAAA,eAAA,EAAAy7J,EAAA,EAAAntH,EAAAA,IAGA6S,OAAA,WACA,GAEArmD,GAAAggK,EAFAlC,EAAAj+J,KAAA8hD,OAAA5gD,OACAiX,EAAAnY,KAAAmY,MAEA,IAAAi2I,EAAAsF,OAAAltG,OAAAxlD,KAAAhB,MAAA,CAGA,IAAAG,EAAA,EAAAA,EAAA89J,EAAA99J,IACAggK,EAAAngK,KAAAogK,YAAAjgK,GAAA0jB,SACA7jB,KAAA86J,OAAAqF,EAAA3tJ,IAAA,IAAArS,EACAH,KAAA6/J,YAAA,IAAA1/J,GAAAggK,EAAA3tJ,EAEA,QAAAxS,KAAA8hD,OAAA,KACAq+G,EAAAngK,KAAAqgK,oBAAAx8I,SACA7jB,KAAA86J,OAAAqF,EAAA3tJ,IAAA,KACAxS,KAAA6/J,YAAA7yC,GAAAmzC,EAAA3tJ,IAEA,OAAAxS,KAAA8hD,OAAA,KACAq+G,EAAAngK,KAAAsgK,eAAAz8I,SACA7jB,KAAA86J,OAAAqF,EAAA3tJ,IAAA,KACAxS,KAAA6/J,YAAAkB,GAAAZ,EAAA3tJ,IAEA2F,EAAAquC,aAOAnkD,EAAA4O,GAAAm8I,UAAAiB,IAAAA,EAAAhB,EAAAhrJ,EAAA4O,GAAAm8I,UAAAqL,OACAxxJ,KAAA,MAEAgE,KAAA,SAAA6sB,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GACA,GAAA5L,GAAAkkH,EAAA,CAYA,IAVAgqC,EAAAqF,OAAAzoJ,KAAAjK,KAAAhB,KAAA83B,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GAEA/L,KAAA86J,UACA96J,KAAA6/J,eACA7/J,KAAA8hD,OAAAA,EAAAz/C,EAAA2G,IAAA84C,EAAAssC,QAEA,SAAApnE,EAAA3hB,IAAA,WACArF,KAAA6J,MAAA7J,KAAA+L,QAGA+1C,EAAA5gD,OAAA,EACA,IAAAf,EAAA2hD,EAAA5gD,OAAAf,KACAkkH,GAAAviE,EAAA3hD,EAGAH,MAAAqkH,MAAAA,EACArkH,KAAA24J,aACA34J,KAAAghK,OAAAz2J,EAAA8sB,MAAA9sB,EAAAyuD,IAAAh5D,KAAA64J,YAAA74J,KAAA+4J,cAAA,IAGAE,UAAA,SAAAnhI,EAAAj3B,EAAAO,GACA,GAAA2+J,GAAA//J,KAAAmY,OAAA6nJ,WAAAloI,EAAAj3B,EAAAO,EACA,YA7hEA,KA6hEA2+J,OA7hEA,KA6hEA//J,KAAA86J,OAAAiF,GAAA//J,KAAA86J,OAAAiF,OA7hEA,IAgiEAhG,uBAAA,WACA,GAAArB,GAAA14J,KAAA04J,aACA,QACAsB,WAniEA,KAmiEAh6J,KAAA8hD,OAAA42G,GACAnlJ,MAAAvT,KAAA8hD,OAAA42G,GACAt+G,QAAAp6C,KAAA8hD,OAAA42G,GAAA14J,KAAAqkH,MAAA,IACA1wE,MAAA3zC,KAAAgnB,QAAA3hB,IAAA,eAAAqzJ,EAAA14J,KAAAgnB,QAAA3hB,IAAA,eAAAnE,QACA+vB,OAAAynI,IAIAW,gBAAA,SAAAhzG,GACA,GAAAqyG,GAAA14J,KAAA04J,cACAuI,EAAAjhK,KAAAkhK,YAAAxI,EAAAryG,GACA05G,EAAA//J,KAAA6/J,YAAAnH,SACA14J,MAAA86J,OAAAiF,GACA//J,KAAAmY,OAAA0iJ,iBAAAkF,EAAAkB,GACAjhK,KAAA6/J,YAAAnH,GAAAuI,EAAAzuJ,GACAxS,KAAA86J,OAAAmG,EAAAzuJ,IAAAkmJ,GAGAwI,YAAA,SAAA7B,EAAAh5G,GACA,GASAzhD,GAAAC,EAAA1E,EAAA89J,EAAAtqH,EATAx7B,EAAAnY,KAAAmY,OACA6O,EAAAhnB,KAAAgnB,QACAg6I,EAAAhhK,KAAAghK,OACAzO,EAAAvrI,EAAA3hB,IAAA,eACA4rB,EAAAjK,EAAA3hB,IAAA,UACA87J,EAAA,EAAA52J,EAAAkd,GACAq6B,EAAA9hD,KAAA8hD,OACAuiE,EAAArkH,KAAAqkH,MACA5wG,EAAAwd,EAAA,EAAA1mB,EAAAkd,IAAAwJ,EAAA,KAAA,CAIA,KADAgtI,EAAAn8G,EAAA5gD,OACAf,EAAA,EAAAA,EAAA89J,EAAA99J,IAAA,CAMA,GALAyE,EAAA6O,EACA5O,EAAA4O,EACA4wG,EAAA,IACAx/G,EAAA4O,EAAA0tJ,GAAAr/G,EAAA3hD,GAAAkkH,IAEAg7C,IAAAl/J,EAMA,MALAwzC,GAAA3sB,EAAA3hB,IAAA,eAAAlF,EAAA6mB,EAAA3hB,IAAA,eAAAnE,QACAmlD,IACA1S,EAAA3zC,KAAAk6J,mBAAAvmH,EAAA3sB,IAGA7O,EAAAipJ,aAAAJ,EAAAA,EAAAA,EAAAzO,EAAA3tJ,EAAAC,MA9kEA,GA8kEA8uC,EAEAlgC,GAAA5O,IAIA2hD,OAAA,WACA,GAKA25G,GAAAhgK,EALAgY,EAAAnY,KAAAmY,OACA2pC,EAAA9hD,KAAA8hD,OACA96B,EAAAhnB,KAAAgnB,QACAg6I,EAAAhhK,KAAAghK,OACAzO,EAAAvrI,EAAA3hB,IAAA,cAGA,IAAAgpJ,EAAAqF,OAAAltG,OAAAxlD,KAAAhB,MAAA,CAOA,IAJAuyJ,GACAp6I,EAAAqjJ,WAAAwF,EAAAA,EAAAz2J,EAAA8sB,MAAA2pI,EAAAzO,EAAA,GACAvrI,EAAA3hB,IAAA,mBAjmEA,GAimEAktJ,GAAA1uI,SAEA1jB,EAAA2hD,EAAA5gD,OAAAf,KACA2hD,EAAA3hD,KACAggK,EAAAngK,KAAAkhK,YAAA/gK,GAAA0jB,SACA7jB,KAAA6/J,YAAA1/J,GAAAggK,EAAA3tJ,GACAxS,KAAA86J,OAAAqF,EAAA3tJ,IAAArS,EAGAgY,GAAAquC,aAOAnkD,EAAA4O,GAAAm8I,UAAAr8G,IAAAA,EAAAs8G,EAAAhrJ,EAAA4O,GAAAm8I,UAAAqL,OACAxxJ,KAAA,MAEAgE,KAAA,SAAA6sB,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GACAglC,EAAA2iH,OAAAzoJ,KAAAjK,KAAAhB,KAAA83B,EAAAgqB,EAAA96B,EAAAnd,EAAAkC,GACA/L,KAAA8hD,OAAAz/C,EAAA2G,IAAA84C,EAAAssC,QACApuF,KAAA6J,MAAA,SAAAmd,EAAA3hB,IAAA,SAAA,QAAAwE,EACA7J,KAAA24J,aACA34J,KAAA8hD,OAAA5gD,SACAlB,KAAAqT,SAAA,IAOA4lJ,UAAA,WACA,MAAA,IAGAc,uBAAA,WACA,GAAA95I,KACAwuB,MAAA,KAAAl7B,MAAAvT,KAAAqhK,UAAA,KACA5yH,MAAA,MAAAl7B,MAAAvT,KAAAqhK,UAAA,KACA5yH,MAAA,KAAAl7B,MAAAvT,KAAAqhK,UAAA,IAcA,YAvpEA,KA2oEArhK,KAAAshK,UACArhJ,EAAArZ,MAAA6nC,MAAA,KAAAl7B,MAAAvT,KAAAshK,eA5oEA,KA8oEAthK,KAAAuhK,UACAthJ,EAAArZ,MAAA6nC,MAAA,KAAAl7B,MAAAvT,KAAAuhK,eA/oEA,KAipEAvhK,KAAAwhK,UACAvhJ,EAAArZ,MAAA6nC,MAAA,KAAAl7B,MAAAvT,KAAAwhK,eAlpEA,KAopEAxhK,KAAAyhK,UACAxhJ,EAAArZ,MAAA6nC,MAAA,KAAAl7B,MAAAvT,KAAAyhK,WAEAxhJ,GAGAumC,OAAA,WACA,GASAg7G,GAAAF,EAAAI,EAAAC,EAAAC,EAAAC,EAAAJ,EAAAF,EAAAphK,EACAq9C,EAAAskH,EAVA3pJ,EAAAnY,KAAAmY,OACA2pC,EAAA9hD,KAAA8hD,OACAm8G,EAAAn8G,EAAA5gD,OACA8lB,EAAAhnB,KAAAgnB,QACA6xI,EAAA74J,KAAA64J,YACAE,EAAA/4J,KAAA+4J,aACAgJ,MAjqEA,KAiqEA/6I,EAAA3hB,IAAA,iBAAAkF,EAAAyuD,IAAAt2D,MAAA6H,EAAAu3C,GAAA96B,EAAA3hB,IAAA,iBACA28J,MAlqEA,KAkqEAh7I,EAAA3hB,IAAA,iBAAAkF,EAAAC,IAAA9H,MAAA6H,EAAAu3C,GAAA96B,EAAA3hB,IAAA,iBACAq3J,EAAA,CAIA,IAAA3rH,EAAA2iH,OAAAltG,OAAAxlD,KAAAhB,MAAA,CAIA,GAAAgnB,EAAA3hB,IAAA,OACA2hB,EAAA3hB,IAAA,iBAAAy8C,EAAA5gD,OAAA,GACAogK,EAAAx/G,EAAA,GACA0/G,EAAA1/G,EAAA,GACA6/G,EAAA7/G,EAAA,GACA8/G,EAAA9/G,EAAA,GACA+/G,EAAA//G,EAAA,GACA2/G,EAAA3/G,EAAA,GACAy/G,EAAAz/G,EAAA,KAEA0/G,EAAA1/G,EAAA,GACA6/G,EAAA7/G,EAAA,GACA8/G,EAAA9/G,EAAA,GACA+/G,EAAA//G,EAAA,GACA2/G,EAAA3/G,EAAA,QAQA,IALAA,EAAApwC,KAAA,SAAAvN,EAAA2O,GAAA,MAAA3O,GAAA2O,IACA6uJ,EAAAnU,EAAA1rG,EAAA,GACA8/G,EAAApU,EAAA1rG,EAAA,GACA+/G,EAAArU,EAAA1rG,EAAA,GACA4/G,EAAAG,EAAAF,EACA36I,EAAA3hB,IAAA,gBAAA,CAEA,IADAm8J,EAAAC,MAlsEA,GAmsEAthK,EAAA,EAAAA,EAAA89J,EAAA99J,QAnsEA,KAosEAqhK,GAAA1/G,EAAA3hD,GAAAwhK,EAAAD,EAAA16I,EAAA3hB,IAAA,gBACAm8J,EAAA1/G,EAAA3hD,IAEA2hD,EAAA3hD,GAAA0hK,EAAAH,EAAA16I,EAAA3hB,IAAA,gBACAo8J,EAAA3/G,EAAA3hD,GAGAmhK,GAAAx/G,EAAA,GACAy/G,EAAAz/G,EAAAm8G,EAAA,OAEAuD,GAAA1/G,EAAA,GACA2/G,EAAA3/G,EAAAm8G,EAAA,EAGAj+J,MAAAqhK,WAAAM,EAAAC,EAAAC,GACA7hK,KAAAwhK,SAAAA,EACAxhK,KAAAyhK,SAAAA,EACAzhK,KAAAshK,SAAAA,EACAthK,KAAAuhK,SAAAA,EAEAO,EAAAjJ,GAAAmJ,EAAAD,EAAA,GACA/6I,EAAA3hB,IAAA,kBACAq3J,EAAAnyJ,EAAAI,KAAAqc,EAAA3hB,IAAA,eACAwzJ,GAAA,EAAAtuJ,EAAAI,KAAAqc,EAAA3hB,IAAA,eACAy8J,EAAAjJ,GAAAmJ,EAAAD,EAAA,GACAT,EAAAE,GACArpJ,EAAAqjJ,YAAA8F,EAAAS,GAAAD,EAAApF,EACA3D,EAAA,EACA/xI,EAAA3hB,IAAA,cACA2hB,EAAA3hB,IAAA,oBACA2hB,EAAA3hB,IAAA,qBAAAwe,SAEA09I,EAAAE,GACAtpJ,EAAAqjJ,YAAA+F,EAAAQ,GAAAD,EAAApF,EACA3D,EAAA,EACA/xI,EAAA3hB,IAAA,cACA2hB,EAAA3hB,IAAA,oBACA2hB,EAAA3hB,IAAA,qBAAAwe,UAKA1L,EAAA0kJ,SACAtyJ,EAAAwa,OAAA48I,EAAAI,GAAAD,EAAApF,GACAnyJ,EAAAwa,MAAA,GAAAg0I,GACAxuJ,EAAAwa,OAAA88I,EAAAF,GAAAG,GACAv3J,EAAAwa,MAAA,GAAAg0I,GACA/xI,EAAA3hB,IAAA,gBACA2hB,EAAA3hB,IAAA,iBAAAwe,SAEA1L,EAAAwjJ,SACApxJ,EAAAwa,OAAAy8I,EAAAO,GAAAD,EAAApF,GACAnyJ,EAAAwa,MAAAg0I,EAAA,GACAxuJ,EAAAwa,OAAA48I,EAAAI,GAAAD,EAAApF,GACAnyJ,EAAAwa,MAAAg0I,EAAA,GACA/xI,EAAA3hB,IAAA,cAAAwe,SACA1L,EAAAwjJ,SACApxJ,EAAAwa,OAAAy8I,EAAAO,GAAAD,EAAApF,GACAnyJ,EAAAwa,MAAAg0I,EAAA,GACAxuJ,EAAAwa,OAAAy8I,EAAAO,GAAAD,EAAApF,GACAnyJ,EAAAwa,MAAAg0I,EAAAA,EAAA,GACA/xI,EAAA3hB,IAAA,iBAAAwe,SAEA1L,EAAAwjJ,SAAApxJ,EAAAwa,OAAA08I,EAAAM,GAAAD,EAAApF,GACAnyJ,EAAAwa,MAAAg0I,EAAA,GACAxuJ,EAAAwa,OAAA88I,EAAAE,GAAAD,EAAApF,GACAnyJ,EAAAwa,MAAAg0I,EAAA,GACA/xI,EAAA3hB,IAAA,cAAAwe,SACA1L,EAAAwjJ,SACApxJ,EAAAwa,OAAA08I,EAAAM,GAAAD,EAAApF,GACAnyJ,EAAAwa,MAAAg0I,EAAA,GACAxuJ,EAAAwa,OAAA08I,EAAAM,GAAAD,EAAApF,GACAnyJ,EAAAwa,MAAAg0I,EAAAA,EAAA,GACA/xI,EAAA3hB,IAAA,iBAAAwe,SAEA1L,EAAAwjJ,SACApxJ,EAAAwa,OAAA68I,EAAAG,GAAAD,EAAApF,GACAnyJ,EAAAwa,MAAA,GAAAg0I,GACAxuJ,EAAAwa,OAAA68I,EAAAG,GAAAD,EAAApF,GACAnyJ,EAAAwa,MAAA,GAAAg0I,GACA/xI,EAAA3hB,IAAA,gBAAAwe,SACAmD,EAAA3hB,IAAA,YACAm4C,EAAAjzC,EAAAI,KAAAqc,EAAA3hB,IAAA,eACA8S,EAAAwjJ,SACApxJ,EAAAwa,OAAAiC,EAAA3hB,IAAA,UAAA08J,GAAAD,EAAApF,GACAnyJ,EAAAwa,MAAAg0I,EAAA,EAAAv7G,GACAjzC,EAAAwa,OAAAiC,EAAA3hB,IAAA,UAAA08J,GAAAD,EAAApF,GACAnyJ,EAAAwa,MAAAg0I,EAAA,EAAAv7G,GACAx2B,EAAA3hB,IAAA,gBAAAwe,SACA1L,EAAAwjJ,SACApxJ,EAAAwa,OAAAiC,EAAA3hB,IAAA,UAAA08J,GAAAD,EAAApF,EAAAl/G,GACAjzC,EAAAwa,MAAAg0I,EAAA,GACAxuJ,EAAAwa,OAAAiC,EAAA3hB,IAAA,UAAA08J,GAAAD,EAAApF,EAAAl/G,GACAjzC,EAAAwa,MAAAg0I,EAAA,GACA/xI,EAAA3hB,IAAA,gBAAAwe,UAEA1L,EAAAquC,aAOAgoG,EAAAnB,GACApiJ,KAAA,SAAAkN,EAAA3F,EAAAvL,EAAAq1C,GACAt8C,KAAAmY,OAAAA,EACAnY,KAAAwS,GAAAA,EACAxS,KAAAiH,KAAAA,EACAjH,KAAAs8C,KAAAA,GAEAz4B,OAAA,WAEA,MADA7jB,MAAAmY,OAAA8pJ,YAAAjiK,MACAA,QAIAyuJ,EAAApB,GACA6U,SAAA,kBAEAj3J,KAAA,SAAApB,EAAAkC,EAAAoM,GACAtO,IAGA7J,KAAA6J,MAAAA,EACA7J,KAAA+L,OAAAA,EACA/L,KAAAmY,OAAAA,EACAnY,KAAAq7J,YAAA,KACAljJ,EAAA,KACAA,EAAAA,EAAA,IAEA9V,EAAAqO,KAAAyH,EAAA,eAAAnY,QAGA27J,SAAA,SAAAwG,EAAAC,EAAAC,EAAAC,EAAAvT,EAAAyB,GACA,MAAAxwJ,MAAA09J,YAAAyE,EAAAC,IAAAC,EAAAC,IAAAvT,EAAAyB,IAGAkN,UAAA,SAAA/lI,EAAAo3H,EAAAC,EAAAwB,GACA,MAAAxwJ,MAAAuiK,UAAA,SAAA5qI,EAAAo3H,EAAAC,EAAAwB,KAGAgL,WAAA,SAAA36J,EAAAO,EAAA4/J,EAAAjS,EAAAC,EAAAwB,GACA,MAAAxwJ,MAAAuiK,UAAA,UAAA1hK,EAAAO,EAAA4/J,EAAAjS,EAAAC,EAAAwB,KAGA4Q,aAAA,SAAAvgK,EAAAO,EAAA4/J,EAAAwB,EAAAC,EAAA1T,EAAAC,GACA,MAAAhvJ,MAAAuiK,UAAA,YAAA1hK,EAAAO,EAAA4/J,EAAAwB,EAAAC,EAAA1T,EAAAC,KAGA6N,SAAA,SAAAh8J,EAAAO,EAAAyI,EAAAkC,EAAAgjJ,EAAAC,GACA,MAAAhvJ,MAAAuiK,UAAA,QAAA1hK,EAAAO,EAAAyI,EAAAkC,EAAAgjJ,EAAAC,KAGA0T,WAAA,WACA,MAAA1iK,MAAAk1J,QAMAyI,eAAA,WACA,MAAA39J,MAAAq7J,aAMAzhJ,MAAA,WACA2Z,MAAA,0BAGAovI,QAAA,SAAA7qI,EAAA3f,GACA9V,EAAA8V,GAAApP,KAAA+uB,IAMA8qI,oBAAA,SAAA/4J,EAAAkC,EAAAmpJ,GAEA,GAAAjzJ,EACAA,GAAAjC,KAAAkiK,SAAAz9J,KAAAsH,GAEA/L,KAAAg5J,YADA/2J,EACAA,EAAA,GAEAI,EAAA6yJ,GAAAnpJ,SAEA9J,EAAAjC,KAAAkiK,SAAAz9J,KAAAoF,GAEA7J,KAAA84J,WADA72J,EACAA,EAAA,GAEAI,EAAA6yJ,GAAArrJ,SAOA04J,UAAA,SAAAM,EAAAC,GACA,GAAAtwJ,GAAAq8I,GAEA,OADAiU,GAAAxzJ,QAAAkD,GACA,GAAAg8I,GAAAxuJ,KAAAwS,EAAAqwJ,EAAAC,IAMAb,YAAA,SAAA9B,GACA5sI,MAAA,gCAMAsnI,iBAAA,SAAAkF,EAAAI,GACA5sI,MAAA,qCAMAmoI,iBAAA,SAAAqE,EAAAI,GACA5sI,MAAA,qCAMAuoI,cAAA,SAAAiE,GACAxsI,MAAA,kCAMAysI,WAAA,SAAAloI,EAAAj3B,EAAAO,GACAmyB,MAAA,+BAMAizB,OAAA,WACAjzB,MAAA,6BAIAm7H,EAAArB,EAAAoB,GACAxjJ,KAAA,SAAApB,EAAAkC,EAAAoM,EAAA68I,GACAtG,EAAAgF,OAAAzoJ,KAAAjK,KAAAhB,KAAA6J,EAAAkC,EAAAoM,GACAnY,KAAAk1J,OAAAr1J,EAAAS,cAAA,UACA6X,EAAA,KACAA,EAAAA,EAAA,IAEA9V,EAAAqO,KAAAyH,EAAA,eAAAnY,MACAqC,EAAArC,KAAAk1J,QAAA5wJ,KAAAa,QAAA,eAAA0E,MAAAA,EAAAkC,OAAAA,EAAA65C,cAAA,QACA5lD,KAAA2iK,QAAA3iK,KAAAk1J,OAAA/8I,GACAnY,KAAA4iK,oBAAA/4J,EAAAkC,EAAA/L,KAAAk1J,QACAl1J,KAAAk1J,OAAArrJ,MAAA7J,KAAA84J,WACA94J,KAAAk1J,OAAAnpJ,OAAA/L,KAAAg5J,YACAh5J,KAAAg1J,SAAAA,EACAh1J,KAAA86J,UACA96J,KAAA+iK;iBACA/iK,KAAAgjK,yBA38EA,GA48EA3gK,EAAArC,KAAAk1J,QAAA5wJ,KAAAuF,MAAA7J,KAAA84J,WAAA/sJ,OAAA/L,KAAAg5J,eAGAiK,YAAA,SAAAlU,EAAAC,EAAAwB,GACA,GAAAtjI,GAAAltB,KAAAk1J,OAAAC,WAAA,KAQA,YAx9EA,KAi9EApG,IACA7hI,EAAAg2I,YAAAnU,GAEA7hI,EAAAsjI,cAp9EA,KAo9EAA,EAAA,EAAAA,MAp9EA,KAq9EAxB,IACA9hI,EAAAi2I,UAAAnU,GAEA9hI,GAGAtT,MAAA,WACA5Z,KAAAijK,cACAG,UAAA,EAAA,EAAApjK,KAAA84J,WAAA94J,KAAAg5J,aACAh5J,KAAA86J,UACA96J,KAAA+iK,YACA/iK,KAAAgjK,yBAh+EA,IAm+EAK,WAAA,SAAAtD,EAAApoI,EAAAo3H,EAAAC,EAAAwB,GACA,GACArwJ,GAAAo9J,EADArwI,EAAAltB,KAAAijK,YAAAlU,EAAAC,EAAAwB,EAIA,KAFAtjI,EAAAo2I,YACAp2I,EAAAq2I,OAAA5rI,EAAA,GAAA,GAAA,GAAAA,EAAA,GAAA,GAAA,IACAx3B,EAAA,EAAAo9J,EAAA5lI,EAAAz2B,OAAAf,EAAAo9J,EAAAp9J,IACA+sB,EAAAs2I,OAAA7rI,EAAAx3B,GAAA,GAAA,GAAAw3B,EAAAx3B,GAAA,GAAA,QAz+EA,KA2+EA4uJ,GACA7hI,EAAAu2I,aA5+EA,KA8+EAzU,GACA9hI,EAAAw4F,WA/+EA,KAi/EA1lH,KAAA0jK,aAj/EA,KAi/EA1jK,KAAA2jK,SACAz2I,EAAA02I,cAAA5jK,KAAA0jK,QAAA1jK,KAAA2jK,WACA3jK,KAAAgjK,qBAAAjD,IAIA8D,YAAA,SAAA9D,EAAAl/J,EAAAO,EAAA4/J,EAAAjS,EAAAC,EAAAwB,GACA,GAAAtjI,GAAAltB,KAAAijK,YAAAlU,EAAAC,EAAAwB,EACAtjI,GAAAo2I,YACAp2I,EAAA42I,IAAAjjK,EAAAO,EAAA4/J,EAAA,EAAA,EAAAz2J,EAAAkd,IAAA,OA1/EA,KA2/EAznB,KAAA0jK,aA3/EA,KA2/EA1jK,KAAA2jK,SACAz2I,EAAA02I,cAAA5jK,KAAA0jK,QAAA1jK,KAAA2jK,WACA3jK,KAAAgjK,qBAAAjD,OA7/EA,KA+/EAhR,GACA7hI,EAAAu2I,aAhgFA,KAkgFAzU,GACA9hI,EAAAw4F,QAIAq+C,cAAA,SAAAhE,EAAAl/J,EAAAO,EAAA4/J,EAAAwB,EAAAC,EAAA1T,EAAAC,GACA,GAAA9hI,GAAAltB,KAAAijK,YAAAlU,EAAAC,EACA9hI,GAAAo2I,YACAp2I,EAAAq2I,OAAA1iK,EAAAO,GACA8rB,EAAA42I,IAAAjjK,EAAAO,EAAA4/J,EAAAwB,EAAAC,GAAA,GACAv1I,EAAAs2I,OAAA3iK,EAAAO,GACA8rB,EAAA82I,gBA7gFA,KA8gFAjV,GACA7hI,EAAAu2I,SAEAzU,GACA9hI,EAAAw4F,WAlhFA,KAohFA1lH,KAAA0jK,aAphFA,KAohFA1jK,KAAA2jK,SACAz2I,EAAA02I,cAAA5jK,KAAA0jK,QAAA1jK,KAAA2jK,WACA3jK,KAAAgjK,qBAAAjD,IAIAkE,UAAA,SAAAlE,EAAAl/J,EAAAO,EAAAyI,EAAAkC,EAAAgjJ,EAAAC,GACA,MAAAhvJ,MAAAqjK,WAAAtD,IAAAl/J,EAAAO,IAAAP,EAAAgJ,EAAAzI,IAAAP,EAAAgJ,EAAAzI,EAAA2K,IAAAlL,EAAAO,EAAA2K,IAAAlL,EAAAO,IAAA2tJ,EAAAC,IAGAiT,YAAA,SAAA9B,GAIA,MAHAngK,MAAA86J,OAAAqF,EAAA3tJ,IAAA2tJ,EACAngK,KAAA+iK,SAAAn8J,KAAAu5J,EAAA3tJ,IACAxS,KAAAq7J,YAAA8E,EAAA3tJ,GACA2tJ,EAAA3tJ,IAGAqoJ,iBAAA,SAAAkF,EAAAI,GACA,GACAhgK,GADA4iK,EAAA/iK,KAAA+iK,QAGA,KADA/iK,KAAA86J,OAAAqF,EAAA3tJ,IAAA2tJ,EACAhgK,EAAA4iK,EAAA7hK,OAAAf,KACA4iK,EAAA5iK,IAAA4/J,IACAgD,EAAA5iK,GAAAggK,EAAA3tJ,UAGAxS,MAAA86J,OAAAiF,IAGApF,kBAAA,SAAAH,EAAAM,GACA,GAEAoJ,GAAA/jK,EAAAqR,EAFAuxJ,EAAA/iK,KAAA+iK,SACAoB,IAGA,KAAAhkK,EAAAq6J,EAAAt5J,OAAAf,KACAgkK,EAAA3J,EAAAr6J,KAAA,CAEA,KAAAA,EAAA4iK,EAAA7hK,OAAAf,KACA+jK,EAAAnB,EAAA5iK,GACAgkK,EAAAD,KACAnB,EAAApxJ,OAAAxR,EAAA,SACAH,MAAA86J,OAAAoJ,GACA1yJ,EAAArR,EAGA,KAAAA,EAAA26J,EAAA55J,OAAAf,KACA4iK,EAAApxJ,OAAAH,EAAA,EAAAspJ,EAAA36J,GAAAqS,IACAxS,KAAA86J,OAAAA,EAAA36J,GAAAqS,IAAAsoJ,EAAA36J,IAKAu7J,iBAAA,SAAAqE,EAAAI,GACA,GACAhgK,GADA4iK,EAAA/iK,KAAA+iK,QAEA,KAAA5iK,EAAA4iK,EAAA7hK,OAAAf,KACA,GAAA4iK,EAAA5iK,KAAA4/J,EAGA,MAFAgD,GAAApxJ,OAAAxR,EAAA,EAAA,EAAAggK,EAAA3tJ,SACAxS,KAAA86J,OAAAqF,EAAA3tJ,IAAA2tJ,IAMArE,cAAA,SAAAiE,GACA,GACA5/J,GADA4iK,EAAA/iK,KAAA+iK,QAEA,KAAA5iK,EAAA4iK,EAAA7hK,OAAAf,KACA,GAAA4iK,EAAA5iK,KAAA4/J,EAAA,CACAgD,EAAApxJ,OAAAxR,EAAA,EACA,aAGAH,MAAA86J,OAAAiF,IAGAC,WAAA,SAAAloI,EAAAj3B,EAAAO,GAIA,MAHApB,MAAA0jK,QAAA7iK,EACAb,KAAA2jK,QAAAviK,EACApB,KAAAwmD,SACAxmD,KAAAgjK,sBAGAx8G,OAAA,WACA,GAIAu5G,GAAAI,EAAAhgK,EAJA4iK,EAAA/iK,KAAA+iK,SACAjI,EAAA96J,KAAA86J,OACAjM,EAAAkU,EAAA7hK,OACAgsB,EAAAltB,KAAAijK,aAGA,KADA/1I,EAAAk2I,UAAA,EAAA,EAAApjK,KAAA84J,WAAA94J,KAAAg5J,aACA74J,EAAA,EAAAA,EAAA0uJ,EAAA1uJ,IACA4/J,EAAAgD,EAAA5iK,GACAggK,EAAArF,EAAAiF,GACA//J,KAAA,QAAAmgK,EAAAl5J,MAAAvE,MAAA1C,KAAAmgK,EAAA7jH,KAEAt8C,MAAAg1J,WAEAh1J,KAAA86J,UACA96J,KAAA+iK,gBAMApU,EAAAtB,EAAAoB,GACAxjJ,KAAA,SAAApB,EAAAkC,EAAAoM,GACA,GAAAisJ,EACAzV,GAAA+E,OAAAzoJ,KAAAjK,KAAAhB,KAAA6J,EAAAkC,EAAAoM,GACAA,EAAA,KACAA,EAAAA,EAAA,IAEA9V,EAAAqO,KAAAyH,EAAA,eAAAnY,MACAA,KAAAk1J,OAAAr1J,EAAAS,cAAA,QACA+B,EAAArC,KAAAk1J,QAAA5wJ,KAAAa,QAAA,eAAA0f,SAAA,WAAA/X,SAAA,SAAAjD,MAAAA,EAAAkC,OAAAA,EAAA6a,OAAA,MAAAC,QAAA,MAAA++B,cAAA,QACA5lD,KAAA2iK,QAAA3iK,KAAAk1J,OAAA/8I,GACAnY,KAAA4iK,oBAAA/4J,EAAAkC,EAAA/L,KAAAk1J,QACAl1J,KAAAk1J,OAAArrJ,MAAA7J,KAAA84J,WACA94J,KAAAk1J,OAAAnpJ,OAAA/L,KAAAg5J,YACAoL,EAAA,yCAAApkK,KAAA84J,WAAA,IAAA94J,KAAAg5J,YAAA,iDACAh5J,KAAA84J,WAAA,aAAA94J,KAAAg5J,YAAA,kBACAh5J,KAAAk1J,OAAAmP,mBAAA,YAAAD,GACApkK,KAAA2uC,MAAAtsC,EAAArC,KAAAk1J,QAAArtJ,WAAA,GACA7H,KAAAsuD,UAAA,EACAtuD,KAAAskK,UAAA,IAGAjB,WAAA,SAAAtD,EAAApoI,EAAAo3H,EAAAC,EAAAwB,GACA,GACA5+B,GAAA6xC,EAAA/9C,EAAAu1B,EAAAsiB,EAAAp9J,EADAokK,IAEA,KAAApkK,EAAA,EAAAo9J,EAAA5lI,EAAAz2B,OAAAf,EAAAo9J,EAAAp9J,IACAokK,EAAApkK,GAAAw3B,EAAAx3B,GAAA,GAAA,IAAAw3B,EAAAx3B,GAAA,EAcA,OAZAyxH,GAAA2yC,EAAA5yJ,OAAA,EAAA,GACA6+I,MAzpFA,KAypFAA,EAAA,EAAAA,EACAiT,MA1pFA,KA0pFA1U,EAAA,oBAAA,kBAAAyB,EAAA,oBAAAzB,EAAA,KACArpC,MA3pFA,KA2pFAspC,EAAA,kBAAA,eAAAA,EAAA,mBACA/T,EAAAspB,EAAA,KAAAA,EAAAA,EAAArjK,OAAA,GAAA,KAAA,GACA,yCAAAlB,KAAA84J,WAAA,IAAA94J,KAAAg5J,YAAA,kBACA+G,EAAA,KACA0D,EACA/9C,EACA,qDAAA1lH,KAAAg5J,YAAA,YAAAh5J,KAAA84J,WAAA,wCACAlnC,EAAA,MAAA2yC,EAAAv1J,KAAA,MAAA,IAAAisI,EAAA,kBAKA4oB,YAAA,SAAA9D,EAAAl/J,EAAAO,EAAA4/J,EAAAjS,EAAAC,EAAAwB,GACA,GAAAiT,GAAA/9C,CAUA,OATA7kH,IAAAmgK,EACA5/J,GAAA4/J,EACAyC,MA3qFA,KA2qFA1U,EAAA,oBAAA,kBAAAyB,EAAA,oBAAAzB,EAAA,KACArpC,MA5qFA,KA4qFAspC,EAAA,kBAAA,eAAAA,EAAA,mBACA,wBACA+Q,EAAA,KACA0D,EACA/9C,EACA,iCAAAtkH,EAAA,YAAAP,EAAA,aAAA,EAAAmgK,EAAA,cAAA,EAAAA,EAAA,iBAKA+C,cAAA,SAAAhE,EAAAl/J,EAAAO,EAAA4/J,EAAAwB,EAAAC,EAAA1T,EAAAC,GACA,GAAAuV,GAAAC,EAAAC,EAAAC,EAAAC,EAAAlB,EAAA/9C,CACA,IAAA88C,IAAAC,EACA,MAAA,EAYA,IAVAA,EAAAD,GAAA,EAAAj4J,EAAAkd,KACA+6I,EAAA,EACAC,EAAA,EAAAl4J,EAAAkd,IAGA+8I,EAAA3jK,EAAA0J,EAAAwa,MAAAxa,EAAAid,IAAAg7I,GAAAxB,GACAyD,EAAArjK,EAAAmJ,EAAAwa,MAAAxa,EAAAq6J,IAAApC,GAAAxB,GACA0D,EAAA7jK,EAAA0J,EAAAwa,MAAAxa,EAAAid,IAAAi7I,GAAAzB,GACA2D,EAAAvjK,EAAAmJ,EAAAwa,MAAAxa,EAAAq6J,IAAAnC,GAAAzB,GAEAwD,IAAAE,GAAAD,IAAAE,EAAA,CACA,GAAAlC,EAAAD,EAAAj4J,EAAAkd,GAEA,MAAA,EAGA+8I,GAAAE,EAAA7jK,EAAAmgK,EACAyD,EAAAE,EAAAvjK,EAGA,MAAAojK,KAAAE,GAAAD,IAAAE,GAAAlC,EAAAD,EAAAj4J,EAAAkd,GACA,IAGA88I,GAAA1jK,EAAAmgK,EAAA5/J,EAAA4/J,EAAAngK,EAAAmgK,EAAA5/J,EAAA4/J,EAAAwD,EAAAC,EAAAC,EAAAC,GACAlB,MAptFA,KAotFA1U,EAAA,oBAAA,oCAAAA,EAAA,KACArpC,MArtFA,KAqtFAspC,EAAA,kBAAA,eAAAA,EAAA,mBACA,yCAAAhvJ,KAAA84J,WAAA,IAAA94J,KAAAg5J,YAAA,kBACA+G,EAAA,KACA0D,EACA/9C,EACA,qDAAA1lH,KAAAg5J,YAAA,YAAAh5J,KAAA84J,WAAA,wCACAj4J,EAAA,IAAAO,EAAA,OAAAmjK,EAAAv1J,KAAA,MAAA,sBAKAi1J,UAAA,SAAAlE,EAAAl/J,EAAAO,EAAAyI,EAAAkC,EAAAgjJ,EAAAC,GACA,MAAAhvJ,MAAAqjK,WAAAtD,IAAAl/J,EAAAO,IAAAP,EAAAO,EAAA2K,IAAAlL,EAAAgJ,EAAAzI,EAAA2K,IAAAlL,EAAAgJ,EAAAzI,IAAAP,EAAAO,IAAA2tJ,EAAAC,IAGAp1I,MAAA,WACA5Z,KAAA2uC,MAAAroC,UAAA,IAGA27J,YAAA,SAAA9B,GACA,GAAA0E,GAAA7kK,KAAA,QAAAmgK,EAAAl5J,MAAAvE,MAAA1C,KAAAmgK,EAAA7jH,KAOA,OANAt8C,MAAAsuD,SACAtuD,KAAA2uC,MAAA01H,mBAAA,YAAAQ,GAEA7kK,KAAAskK,WAAAO,EAEA7kK,KAAAq7J,YAAA8E,EAAA3tJ,GACA2tJ,EAAA3tJ,IAGAqoJ,iBAAA,SAAAkF,EAAAI,GACA,GAAA7yE,GAAAjrF,EAAA,YAAA09J,GACA8E,EAAA7kK,KAAA,QAAAmgK,EAAAl5J,MAAAvE,MAAA1C,KAAAmgK,EAAA7jH,KACAgxC,GAAA,GAAAs/D,UAAAiY,GAGAlK,kBAAA,SAAAH,EAAAM,GAEA,GAGA36J,GAHAmtF,EAAAjrF,EAAA,YAAAm4J,EAAA,IACAt3J,EAAA,GACAq7J,EAAAzD,EAAA55J,MAEA,KAAAf,EAAA,EAAAA,EAAAo+J,EAAAp+J,IACA+C,GAAAlD,KAAA,QAAA86J,EAAA36J,GAAA8G,MAAAvE,MAAA1C,KAAA86J,EAAA36J,GAAAm8C,KAGA,KADAgxC,EAAA,GAAAs/D,UAAA1pJ,EACA/C,EAAA,EAAAA,EAAAq6J,EAAAt5J,OAAAf,IACAkC,EAAA,YAAAm4J,EAAAr6J,IAAA8M,UAIAyuJ,iBAAA,SAAAqE,EAAAI,GACA,GAAA7yE,GAAAjrF,EAAA,YAAA09J,GACA8E,EAAA7kK,KAAA,QAAAmgK,EAAAl5J,MAAAvE,MAAA1C,KAAAmgK,EAAA7jH,KACAgxC,GAAA,GAAA+2E,mBAAA,WAAAQ,IAGA/I,cAAA,SAAAiE,GACA,GAAAzyE,GAAAjrF,EAAA,YAAA09J,EACA//J,MAAA2uC,MAAA/tC,YAAA0sF,EAAA,KAGA0yE,WAAA,SAAAloI,EAAAj3B,EAAAO,GAEA,MADA02B,GAAAtlB,GAAAwlB,OAAA,IAIAwuB,OAAA,WACAxmD,KAAAsuD,WAEAtuD,KAAA2uC,MAAAroC,UAAAtG,KAAAskK,UACAtkK,KAAAsuD,UAAA,SAKAzuD,SAAA0K,MCj8FAgoB,OAAA,YAAA,SAAA,SAAA,WACA,SAAAlwB,EAAAywB,IAEA,SAAAzwB,GACA,GAGAi4B,IASAC,MAAA,SAAAvT,GACA,MAAAhnB,MAAAgC,KAAA,WACA,GAAAyL,GAAApL,EAAArC,MAEA8iH,EAAA97F,EAAA87F,KACA77G,EAAA+f,EAAA89I,cAAA,2BACAnoJ,EAAAqK,EAAAkqB,UAAA,sBAEA,WACA,WAAA/c,IAAA9xB,EAAA,OAAA,GAAAsnH,cAGA1iH,IACAA,EAAA,2BAEA,IAAAwR,GAAAqa,EAAA0D,KAAAC,UAAAkzF,SAAA,IACAt+F,mBAAA1O,GACA,iBAAA0O,mBAAApkB,GACA,SAAA67G,CAEAr1G,GAAAsJ,KAAA,WAAA4F,GACAlP,EAAAsJ,KAAA,OAAA0B,GACAhL,EAAAsJ,KAAA,QAAA,wCACAtJ,EAAAlN,KAAAoc,GAEAlP,EAAAoc,SAAA,4BACApc,EAAAoW,OAAAxhB,EAAAy1B,GAAAoD,MAAAtR,MAAA,qCAgBAvnB,GAAA4O,GAAA8zJ,WAAA,SAAAh3I,GACA,MAAAuM,GAAAvM,GACAuM,EAAAvM,GACArrB,MAAA1C,KAAAmN,MAAAnC,UAAArI,MAAA3B,KAAAwG,UAAA,IACA,gBAAAumB,IAAAA,MAGA1rB,GAAAoO,MAAA,UAAAsd,EAAA,wCAFAuM,EAAAC,MAAA73B,MAAA1C,KAAAwH,aAKAkrB,UClEAH,OAAA,UAAA,SAAA,SAAA,cACA,oBAAA,OAAA,SAAA,QAAA,QACA,SAAA,UAAA,YAAA,WAAA,UAEA,SAAAlwB,EAAAywB,OAAAe,YACA8jC,WAAA3xB,KAAAnL,OAAAkL,MAAAlR,OA67CA,QAAAmwI,aAAAxzH,EAAAxW,GAKA,MAJA34B,GAAAy1B,GAAA3zB,GAAAsU,KAAA,IAAAmR,MAAA,4BACAoR,MAAAA,GACA34B,EAAAy1B,GAAAoD,MAAAtR,MAAA,uBAAA4nB,MA17CA,SAAAnvC,GACA,GAGAi4B,IAMAC,MAAA,SAAAvT,GACA,MAAAhnB,MAAAgC,KAAA,WACA,GAAAyL,GAAApL,EAAArC,MACA0Q,IA0BAA,GAAAu0J,QAAA5iK,EAAAA,EAAAy1B,GAAA2C,KAAA7Q,MAAA,aACAlZ,EAAA46D,MAAAjpE,EAAAA,EAAAy1B,GAAA2C,KAAA7Q,MAAA,WAEAnc,EAAAoW,OA3BA,WACA,GAAA+tB,GAAAvvC,EAAAy1B,GAAAoD,MAAAtR,MAAA,sCAoBA,OAnBAoc,MAAAsL,QAAAK,eACAC,GACAC,SAAA,+BACAC,QAAA,aACAG,OAAAxkC,EACAskC,SACAmzH,eAAA,WACAllK,KAAAkU,KAAA,kBAAA+0G,aAAA,gBAAA,IAEAk8C,aAAA,WACAnlK,KAAAkU,KAAA,kBAAA+0G,aAAA,gBAAA,IAEAm8C,WAAA,WACAplK,KAAAkU,KAAA,kBAAA+0G,aAAA,SAEAo8C,MAAA,WAAArlK,KAAAslK,cAAA,iBAWA73J,EAAAoW,OAAAnT,EAAAu0J,SACAx3J,EAAAoW,OAAAnT,EAAA46D,OAEA79D,EAAA+V,GAAA,cAAA,WACA/V,EAAA63J,cAAA,kBAAA,KAEA73J,EAAA+V,GAAA,mBAAA,SAAAyR,EAAA8C,GACAtqB,EAAA63J,cAAA,iBAAAvtI,KAGAtqB,EAAAiD,KApDA,gBAoDAA,MAgBA7C,IAAA,SAAA+zC,GACA,GAAAlxC,GAAA1Q,KAAA0Q,KAAA,gBAEAkxC,GAAA2jH,aACAvlK,KAAAslK,cAAA,cAEA,IAAAE,GAAAnjK,EAAAy1B,GAAA2C,KAAA7Q,MAAA,iBAMA,OAJAlZ,GAAA46D,MAAAznD,OAAA2hJ,GACAnjK,EAAAmjK,GAAAv8C,aAAArnE,GACA5hD,KAAA4gB,QAAA,oBAEA5gB,MAOA+kC,MAAA,WACA/kC,KAAAkU,KAAA,kBAAA+0G,aAAA,UAOAs8C,YAAA,WACA,GAAAE,GAAApjK,EAAArC,KAAAsrE,OAAAzjE,WAAA4J,MAEA,IAAA,GAAAg0J,EAAAvkK,OACA,CAAA,GAAAskK,GAAAC,EAAAx8C,cAEAu8C,GAAAE,SACAF,EAAAG,cAAA,GAGA,MAAA3lK,OAaA6jH,eAAA,SAAAC,GAaA,MAZA9jH,MAAAgC,KAAA,WACA,GAAAyL,GAAApL,EAAArC,MACA0Q,EAAAjD,EAAAiD,KAAA,iBACA3E,EAAA2E,EAAA46D,MAAAv/D,SACAg4G,EAAAt2G,EAAA1B,SAAAA,EAAA,EAAA,GAEAg4G,EAAA,IAAA,IAAAD,KACApzG,EAAAu0J,QAAAl5J,OAAAg4G,EAAA,EAAAA,EAAA,GACAt2G,EAAA2Z,UAAArb,MAIA/L,MAkBAqC,GAAA4O,GAAAq0J,cAAA,SAAAv3I,GACA,MAAAuM,GAAAvM,GACAuM,EAAAvM,GACArrB,MAAA1C,KAAAmN,MAAAnC,UAAArI,MAAA3B,KAAAwG,UAAA,IACA,gBAAAumB,IAAAA,MAGA1rB,GAAAoO,MAAA,UAAAsd,EAAA,2CAFAuM,EAAAC,MAAA73B,MAAA1C,KAAAwH,aAKAkrB,QAOA,SAAArwB,GA+4BA,QAAAujK,IAAA5wI,GACA,MAAA3yB,GAAA2yB,GAAAva,QAAA,mBAGA,QAAAorJ,WAAAL,EAAAz8J,GAGA,MAFAy8J,GAAAtxJ,KAAA,mBACA2P,OAAA9a,GACA/I,KAGA,QAAA8lK,YAAAt1J,GACA,OAAAA,GACA,IAAA,UACA,IAAA,YACA,IAAA,aACA,IAAA,aACA,OAAA,CACA,SACA,OAAA,GAIA,QAAAu1J,aAAAz1H,GACA,GAAA01H,KAAAp8I,MAAA,cAEA,KAAAzpB,EAAA,EAAAA,EAAAmwC,EAAApvC,OAAAf,IACA6lK,EAAAp/J,KAAAvE,EAAAy1B,GAAAtZ,IAAAoL,MAAA,WAAA0mB,EAAAnwC,IAMA,OALA6lK,GAAAp/J,KAAAvE,EAAAy1B,GAAAtZ,IAAAoL,MAAA,cAAA,KAEAvnB,EAAAy1B,GAAA4C,OAAA9Q,MAAA,kBACAvnB,EAAAy1B,GAAA1Z,MAAA/b,EAAAy1B,GAAA7Z,GAAAvb,MAAA1C,KAAAgmK,KAUA,QAAAC,YAAAx4J,MACA,GAAAy4J,WASA,IARAz4J,KAAApL,EAAAoL,MAEAA,KAAAyG,KAAA,UAAAlS,KAAA,WAEA,oBADAhC,KAAA+D,aAAA,SAAA,oBAEAmiK,QAAAt/J,KAAA5G,KAAA2G,eAGAu/J,QAAAhlK,OAAA,EAAA,CACA,GAAAovB,QAAA,mBAAA41I,QAAAl3J,KAAA,MAAA,KACAsuC,KAAA,GAAAD,OACAC,KAAA7vC,KAAA,IAGA,KACAw+I,KAAA37H,QAAAgtB,MACA,MAAA79C,GACA8zB,MAAA9zB,KAKA,QAAA49C,MAAAr2B,GACAhnB,KAAAmmK,QAAAn/I,EAAAs2B,KAsBA,QAAA4pG,aAAAse,GACA,GAAA90J,GAAA80J,EAAA90J,KAAAo0G,WAEA,OAAAziH,GAAAmjK,GAAA3qJ,QAAA,UAAAkY,MAAA,cAAAriB,EAAAmqB,OAAAroB,IAGA,QAAA4zJ,iBAAAxf,GACA,GAAA4e,GAAA5e,EAAA5/H,QAAAw+I,OACA90J,EAAA80J,EAAA90J,KAAAo0G,WAEAp0G,GAAAkxC,MAAA+U,QACAt0D,EAAAqO,EAAAkxC,MAAA+U,QAAA7gC,aAAA,WAAAnuB,IAAAi/I,EAAAp0I,KAGA,QAAA6zJ,gBACA,GAAA54J,GAAAzN,KAAA4mJ,QAAA5/H,QAAAw+I,OACA90J,EAAAjD,EAAAiD,KAAAo0G,WACA,QAAA3wF,IAAAzjB,EACA1Q,KAAA4mJ,QAAA1iH,cAEA,CAAA,GACAojH,GADAtgI,EAAA3kB,EAAAiG,UAAAoI,EAAAolE,QAEAwwF,EAAAxzI,OAAAC,MAAAwzI,eAAA,YACAC,EAAA1zI,OAAAC,MAAA0zI,aAGAD,GADAA,EACA,KAAAA,EAEA,GAEAJ,gBAAApmK,KAAA4mJ,UAEAU,EAAAJ,YAAAz5I,MACAuZ,EAAAkgI,YAAAn8B,QAAA33F,UAAAk0H,IACA52I,EAAAugC,QACAjqB,EAAAiqB,MAAAvgC,EAAAugC,OAEAjxC,KAAA4mJ,QAAA8f,IAAA,uBACAC,eAAAj2J,EAAAkxC,MAAAA,OACA,SAAA0kH,EAAAE,EAAA,KAAAx/I,GACAvZ,EAAAw7G,aAAA,WAAA,YAIA,QAAA29C,iBACA,GAAAn5J,GAAAzN,KAAA4mJ,QAAA5/H,QAAAw+I,MAEA,QAAArxI,IAAA1mB,EAAAiD,KAAAo0G,YACA9kH,KAAA4mJ,QAAA1iH,cACA,CACA,IAAA,GAAA/jC,GAAA,EAAAA,EAAAH,KAAA0Q,KAAAxP,OAAAf,IAAA,CACA,GAAAw0H,GAAA30H,KAAA0Q,KAAAvQ,EACAH,MAAAswC,aACAqkF,EAAArkF,WAAAtwC,KAAAswC,YAEA7iC,EAAAw7G,aAAA,eAAA0L,GAEA30H,KAAAy3B,KAAA,IACAouI,UAAAp4J,EAAApL,EAAAy1B,GAAA2C,KACA7Q,MAAA,WACAvnB,EAAAy1B,GAAAoD,KAAAl7B,KAAAy3B,KAAAS,QAAA,GACA,uBAEAzqB,EAAAw7G,aAAA,WAAAjpH,KAAA6mK,KAAA,YAAA,SAIA,QAAAC,iBACA,GAAAr5J,GAAAzN,KAAA4mJ,QAAA5/H,QAAAw+I,MAEAK,WAAAp4J,EAAApL,EAAAy1B,GAAAoD,MAAAtR,MAAA,gBAAA,UACAnc,EAAAw7G,aAAA,WAAA,SAGA,QAAA89C,cACA/mK,KAAA4mJ,QAAA5/H,QAAAw+I,OAEAv8C,aAAA,WAAA,WAGA,QAAA+9C,gBACA,GAAAv5J,GAAAzN,KAAA4mJ,QAAA5/H,QAAAw+I,OACA90J,EAAAjD,EAAAiD,KAAA,gBACA+2G,EAAAznH,KAAA0Q,MAAA,4BAIA,IAFAA,EAAAu2J,SAAA,OAEA,gBAAA,GAAA,CACA,GAAA,SAAAx/C,EAAAxgH,KACA,MAAAwG,GAAAw7G,aAAA,QAAAjpH,KACA,IAAA,QAAAynH,EAAAxgH,KACA,MAAAwG,GAAAw7G,aAAA,OAAAjpH,KACA,IAAA,UAAAynH,EAAAxgH,KACA,MAAAwG,GAAAw7G,aAAA,SAAAjpH,KACA,YAAAynH,EAAAxgH,MACAwgH,EAAAA,EAAAA,QAAA,YACA/2G,EAAAu2J,SAAA,QAEAx/C,EAAA9jH,KAAAyvB,UAAAq0F,GAIAh6G,EAAAw7G,aAAA,YAAAxB,GACAh6G,EAAAw7G,aAAA,WAAA,cASA,QAAAi+C,oBAAAx4H,EAAAioB,GACA,GAAA5O,GAAA,sCAEA,OAAArZ,GAAAxrC,QAAA6kD,EAAA,SAAAo/G,GAEA,MAAA,+HADAA,EAAAllK,MAAA8lD,GAAA,GAGA,oBAIA,QAAAq/G,WAAAnyI,GACA,GAAA9wB,GAAA9B,EAAA4yB,EAAA9c,QAAAsC,QAAA,gBACA63C,EAAAjwD,EAAA4yB,EAAA9c,QAAAsC,QAAA,kBACA4sJ,EAAA/0G,EAAA5hD,KAAA,gBAEA,IAAAvM,EAAA,GAAA,CACA,GAAAyyD,GAAAltC,SAAAvlB,EAAA+P,KAAA,aAAA3T,QACAiZ,EAAArV,EAAA+P,KAAA,aAAA3T,MAWA,OATA00B,GAAA/U,iBAEA1G,EACA84C,EAAA73C,QAAA,cACAsY,MAAA,YAAAvZ,KAAAA,EAAAo9C,KAAAA,IAEAv0D,EAAAglK,EAAA1wG,QAAA7gC,aAAA,WAAA8gC,IAGA,EACAywG,GAAAA,EAAAjvJ,SAAAoB,KACA84C,EAAA73C,QAAA,cACAsY,MAAA,WAAAs0I,EAAAjvJ,UAEA/V,EAAAglK,EAAA1wG,QAAA7gC,aAAA,WAAAuxI,EAAAjvJ,SAAAw+C,MAWA,QAAA0wG,cAAA54H,GAiBA,QAAA64H,KACA,GAAAl0I,GAAAk3H,EAAA/wI,KAAA,IAAA+wI,EAAA3zF,KAAA,GACA2zF,GAAA9uH,KAAApI,GAAAk3H,EAAA9uH,GAAA,KACApI,GAAA,OAEAqb,EAAAh+B,KAAAw2J,mBACAx4H,EAAAh+B,KAAAxN,QAAA,GAAAyR,QAAA0e,EAAA,KAAA,IACAg0I,EAAA1wG,QAEAz7B,EAAAztB,EAAAw7G,aAAA,aAAAv6E,EAAAh+B,MAEArO,EAAA64B,GAAArR,SAAA,iBACAxnB,EAAA64B,GAAArX,OAAAxhB,EAAAy1B,GAAAoD,MAAAtR,MAAA,oCACAvnB,EAAA64B,GAAAnkB,KAAA,QAAA,+CACA1U,EAAA64B,GAAA1X,GAAA,QAAA4jJ,WACA/kK,EAAA64B,GAAAxqB,KAAA,gBAAA22J,GA/BA,GAAA55J,GAAAihC,EAAAk4G,QAAA5/H,QAAAw+I,OACA90J,EAAAjD,EAAAiD,KAAAo0G,WAEA,IAAAp0G,EAAA,CAGA,GAAA,gBAAAg+B,GAAA,KAAA,CACA,GAAA24H,IAAA1wG,OAAAjmD,EAAAkxC,MAAA+U,OAIA,IAFAjoB,EAAAh+B,KAAAg+B,EAAAh+B,KAAAxN,QAAA,oBAAA,IAEAwrC,EAAAt2B,SAAA,CACA,GAEA8iB,GAFAqvH,EAAA77G,EAAAt2B,QAsBA,IAAAmyI,EAAA/wI,KAAAmd,WArBA,YAqBA,CACA,GAAAnd,GAAA+wI,EAAA/wI,KAAA7W,MAtBA,WAsBAzB,OACAmmK,GAAAjvJ,UAAAoB,KAAAA,EAAAo9C,KAAA2zF,EAAA3zF,MACA2wG,QACAhd,GAAA/wI,KAAAmd,WAAA,gBACA0wI,EAAAjvJ,UAAAw+C,KAAA2zF,EAAA3zF,MACA2wG,EAAA72J,EAAAkxC,MAAA+U,QAEAyvG,iBAAA13H,EAAAk4G,SACAl4G,EAAAs5G,cAAAqf,EACA34H,EAAAu5G,cAAAmf,UACA/kK,EAAA,yBAAAue,QAAA,eAAA8tB,OACA,CACA,GAAAxT,GAAAztB,EAAAw7G,aAAA,aACAi+C,mBAAAx4H,EAAAh+B,KACA22J,EAAA1wG,QACAt0D,GAAA64B,GAAA1X,GAAA,QAAA4jJ,WACA/kK,EAAA64B,GAAAxqB,KAAA,gBAAA22J,QAEA,gBAAA34H,GAAA,KACAjhC,EAAAw7G,aAAAv6E,EAAAh+B,KAAAygC,OAAAzC,EAAAh+B,MAEA+L,QAAAqe,IAAA4T,EAAAh+B,KAEAjD,GAAAmT,QAAA,qBAGA,QAAA4mJ,eACA,GAAA/5J,GAAAzN,KAAA4mJ,QAAA5/H,QAAAw+I,MAGA,sBAAAxlK,KAAA4gC,KACA5gC,KAAA4c,QAAA,6GAGA,gBAAA5c,MAAA,KACAA,KAAA4c,QAAA5c,KAAA0Q,KACAxN,QAAA,GAAAyR,QAAA,IAAA3U,KAAA4mJ,QAAAp0I,GAAA,KAAA,KAAA,IAEAxS,KAAA4c,QAAA,gBAGAnP,EAAAw7G,aAAA,QAAAjpH,MACAyN,EAAAw7G,aAAA,WAAA,SAGA,QAAAw+C,eACA,GAAAh6J,GAAAzN,KAAA4mJ,QAAA5/H,QAAAw+I,MACA/3J,GAAAiD,KAAA,iBAGAjD,EAAAw7G,aAAA,QAAA,2BACAx7G,EAAAw7G,aAAA,WAAA,YAEAjpH,KAAA4mJ,QAAA1iH,UAIA,QAAAwjI,cACA1nK,KAAA4mJ,QAAA5/H,QAAAw+I,OAEAv8C,aAAA,OAAAjpH,KAAA0Q,MASA,QAAA46I,iBAAA32B,GACA,MAAAA,GAAAjH,UAAAxsH,OAAA,GAAAyzH,EAAA42B,UAGA,QAAAob,gBAAAviK,GACA,MAAAkR,QAAAjT,EAAA4P,KAAA7N,IAAAlB,QAAA,MAAA,IAhvCA,GAAA4hH,YAAA,eAGA6iD,aAAAx4D,GAAA,OACAa,IAAA,OACArB,GAAA,OACAyB,IAAA,OACAhmD,GAAA,OACAw9G,GAAA,cACA39G,GAAA,cACAilD,GAAA,QACA24D,IAAA,QAIAvtI,SAkBAC,MAAA,SAAAqnB,GACA,MAAA5hD,MAAAgC,KAAA,WAIA,QAAA8lK,GAAAt2H,EAAAxW,EAAAmW,EAAAhsC,GACA,GAAAqqC,GAAAntC,EAAAy1B,GAAA7e,QAAA+hB,MAAAA,EAAApR,MAAA,OAAAunB,GACA9uC,EAAAy1B,GAAAoD,MAAAtR,MAAA,uBAAA4nB,IAIA,OAHAnvC,GAAAmtC,GAAAhsB,GAAA,QAAA,WAAA/V,EAAAw7G,aAAA93E,KACA,GAAAhsC,GACA9C,EAAAmtC,GAAA5xB,OACA4xB,EATA,GAAA/hC,GAAApL,EAAArC,MACA0Q,IA+EA,IAHAjD,EAAAoc,SAAA,qCACA+3B,EAAAmmH,QACAt6J,EAAAoc,SAAA,UACA,GAAA+3B,EAAA5mB,MAAA,CACA,GAAA6vH,GAAAxoJ,EAAAy1B,GAAAoD,MAAAtR,MAAA,qBACA+tC,YAAA0R,QAAAznB,EAAAA,MAAA,SAAAipG,GACAp9I,EAAAoW,OAAAxhB,EAAAy1B,GAAA2C,KACA7Q,MAAA,8BACAk+I,EAAA,gBAAA,QAAA,SACAA,EAAA,QAAA,UAAA,gBACAA,EAAA,WAAA,eAAA,eACAA,EAAA,OAAA,YAAA,aAAA,GA5EA,WACA,GAAAl2H,GAAAvvC,EAAAy1B,GAAAoD,MAAAtR,MAAA,gCAEA,OAAAoc,MAAAsL,QAAAK,eAAAC,MA2EAi5G,EACAxoJ,EAAAy1B,GAAA6I,IAAAoE,MAAA,cAEAt3B,GAAAoW,OAAAxhB,EAAAy1B,GAAA2C,KACA7Q,MAAA,oCACAk+I,EAAA,gBAAA,QAAA,SACAA,EAAA,QAAA,UAAA,gBACAA,EAAA,WAAA,eAAA,eACAA,EAAA,OAAA,YAAA,aAAA,IA6DA,OA3DAlmH,GAAA3Q,QACAvgC,EAAAugC,MAAA2Q,EAAA3Q,OACAxjC,EAAAoW,OAAAxhB,EAAAy1B,GAAA2C,KAAA7Q,MAAA,+BACAnc,EAAAoW,OArFA,WACA,QAAApQ,KAAAhG,EAAAw7G,aAAA,OAAA,GACA,QAAA++C,KAAAv6J,EAAAw7G,aAAA,OAAA,IACA,QAAAg/C,KAAAx6J,EAAAw7G,aAAA,OAAA,KACA,QAAAi/C,KAAAz6J,EAAAw7G,aAAA,OAAA,KACA,QAAAz6G,KAAAkC,EAAAmqB,OAAArsB,OACA,QAAAsf,KAAApd,EAAAmqB,OAAA/M,QAEA,QAAA7U,GAAAk4B,EAAA9K,GACA,GAAAmJ,GAAAntC,EAAAy1B,GAAA7e,OAAAotB,EAEA,OADAhkC,GAAAmtC,GAAAhsB,GAAA,QAAA2tB,GACA3B,EA8BA,GAAAgwD,GA3BA,WACA,GAAAA,GAAAn9F,EAAAy1B,GAAA9e,OAAA4Q,MAAA,iBACA4lB,EAAAntC,EAAAy1B,GAAA7e,OAAA,OAgBA,OAdA5W,GAAAm9F,GAAAxrD,SAAA,SAAA/e,GACA,GAAA,IAAAA,EAAA9R,OACA1V,EAAAw7G,aAAA,UAAA5mH,EAAAm9F,GAAAt1E,OAGA,MAFA7nB,GAAAm9F,GAAAt1E,IAAA,IACA+K,EAAA/U,kBACA,CACA,QAAA+U,EAAA5S,KACA4S,EAAA9U,oBAGA9d,EAAAmtC,GAAAhsB,GAAA,QAAA,WACA/V,EAAAw7G,aAAA,UAAA5mH,EAAAm9F,GAAAt1E,UAGAlR,MAAAwmF,EAAAvmF,OAAAu2B,KAwBA,OAdAntC,GAAAy1B,GAAA2C,KAAA7Q,MAAA,yBACAvnB,EAAAy1B,GAAAoD,MAAAtR,MAAA,WACA3Q,EAAA6U,EAAA,UACAzrB,EAAAy1B,GAAAoD,MAAAtR,MAAA,aACA3Q,EAAAxF,EAAA,QACAwF,EAAA+uJ,EAAA,MACA/uJ,EAAAgvJ,EAAA,OACAhvJ,EAAAivJ,EAAA,SAAA,IACAjvJ,EAAAzK,EAAA,SACAnM,EAAAy1B,GAAAoD,MAAAtR,MAAA,cACA3Q,EAAA6U,EAAA,SAAA0xE,EAAAvmF,OACA5W,EAAAy1B,GAAAoD,KAAAskE,EAAAxmF,QAlBA,WAGA,MAFA3W,GAAAy1B,GAAAoD,MAAAtR,MAAA,cAAA,YAmDAnc,EAAAiD,KAAA,eAAAA,GAEAjD,EAAAw7G,aAAA,sBACAx7G,EAAAmwB,QAAA,SAAA3I,GACA,cAAAxnB,EAAAw7G,aAAA,aACA5mH,EAAA4yB,EAAA9c,QAAAmC,GAAA,UACA2a,EAAAtT,SAAAsT,EAAA1T,QAEAomJ,YAAA1yI,EAAA9R,SACA8R,EAAA/U,iBACAzS,EAAAw7G,aAAA0+C,YAAA1yI,EAAA9R,WAIA1V,EAAA+V,GAAA,QAAA,IAAAuiB,MAAA1P,YAEA3lB,EAAAy3J,WAAAtoK,SAAAwH,cACAoG,EAAAsJ,KAAA,YAAA,GACAtJ,EAAA8K,QAEA7H,EAAAkxC,MAAAA,EACAlxC,EAAA03J,QAAA,EAEA36J,EAAAw7G,aAAA,uBAMAxhF,SAAA3U,OAAA0D,KAAAC,UAAAm0F,SAAA,gBACA,WAEAl6G,EAAAmqB,OAAA,GAAAkwF,UACAmO,OAAApmG,OAAA0D,KAAAC,UAAAm0F,SACA46C,OAAA/3J,EACAq9G,YAAA,QACA5hH,IAAA04C,EAAAlkC,OACAwmB,SAAA,EACAuM,OAAA,YACA43H,SAAAhC,aACAiC,UAAA1B,cACA2B,UAAAzB,cACA0B,OAAAzB,WACA0B,SAAAzB,aACA0B,SAAApB,aACAqB,OAAAjB,WACA53I,QAAA03I,YACAz3I,QAAA03I,cACA/2J,EAAAmqB,OAAArqB,MAAA,OACAsiB,OAAAC,MAAA61I,UAAAz0I,IAAAzjB,EAAAmqB,OAAA+tI,MACAl4J,EAAAmqB,OAAA+tI,KAAA,IAAA91I,OAAAC,MAAA61I,QAIA5oK,QAIA6oK,oBAAA,WACA,GAGAC,GACA3mI,EAJAzxB,EAAA1Q,KAAA0Q,KAAAo0G,YACAtjF,EAAAn/B,EAAAy1B,GAAA0J,KAAA5X,MAAA,WAAA,cACAyvB,EAAAr5C,KAAA6J,OAIAs4B,GAAAniC,KAAAya,QAAA,mBACA,GAAA0nB,EAAAjhC,SACAihC,EAAAniC,KAAAya,QAAA,aACA0nB,EAAAjhC,SACA4nK,EAAA3mI,EAAAp2B,UAEA/L,KAAA6jB,OAAA2d,EACA,IAAAunI,GAAA1mK,EAAAm/B,GAAA33B,QAAA,GACA4xB,EAAAp5B,EAAAm/B,GAAAz1B,QACA1J,GAAAm/B,GAAAv0B,SAEAyD,EAAAolE,QACAjsE,MAAAwvC,EACA2vH,KAAAz+J,KAAA8sB,MAAAgiB,EAAA0vH,QAEA50I,KAAA20I,IACAp4J,EAAAolE,OAAA/pE,OAAA+8J,EACAp4J,EAAAolE,OAAAihD,KAAAxsH,KAAA8sB,MAAAyxI,EAAArtI,KAYAiwH,aAAA,SAAA/2B,GACA,GAAAjkH,GAAA1Q,KAAA0Q,KAAA,gBACAwI,IAAAxI,EAAA03J,QAAA,GAAA,EACA7wI,EAEA,SAAAo9F,GAMA,IAAA,GALAp9F,MACAtB,EAAA0+F,EAAAjH,UACAp9E,EAAAqkF,EAAArkF,WAGAnwC,EAAA,EAAAA,EAAA81B,EAAA/0B,OAAAf,IAGA,IAAA,GAFAs1B,GAAAQ,EAAA91B,GAAAutH,UAEAltH,EAAA,EAAAA,EAAAi1B,EAAAv0B,OAAAV,IACA,GAAAi1B,EAAAj1B,GAAAm2B,WANA,YAMA,CACA,GAAAha,GAAA8Y,EAAAj1B,GAAA0C,QAPA,WAOA,GACAq0B,GAAA5a,GAAAsZ,EAAA91B,GAAAoT,MACA0iB,EAAAtkB,OAAAxR,EAAA,GACAA,IAKA,GAAAmwC,EACA,IAAA,GAAAnwC,GAAA,EAAAA,EAAAmwC,EAAApvC,OAAAf,IACAmwC,EAAAnwC,GAAAw2B,WAjBA,cAkBA2Z,EAAA3+B,OAAAxR,EAAA,GACAA,IAKA,OAAAo3B,IA9BAo9F,EAwCA,IALAp9F,EAAA0xI,YACAv4J,EAAAu4J,UAAA5mK,EAAAk1B,EAAA0xI,WAAA1oK,OAAA2C,QAAA,KAAA,IACAlD,KAAAkU,KAAA,kBAAAyJ,MAAAhQ,SAAA,OAGA+C,EAAAkxC,MAAAmmH,OAAA,CACA,GAAA,GAAAr3J,EAAA03J,QAcA,MAHAzzC,GAAArkF,WAAA5/B,EAAA4/B,WACAqkF,EAAAt7G,IAAA3I,EAAA03J,QACA/lK,EAAAqO,EAAAgqB,OAAAyxH,aAAAx3B,GACA30H,IAbA,IAAA20H,EAAArkF,YAAAqkF,EAAArkF,WAAApvC,OAAA,EAAA,CACA,GAAAw5B,GAAAqrI,YAAApxC,EAAArkF,WAMA,OALAu1H,WAAA7lK,KAAA06B,GACAhqB,EAAAgqB,MAAAA,EACAhqB,EAAA4/B,WAAAqkF,EAAArkF,WACAqkF,EAAAt7G,IAAA3I,EAAA03J,QACA/lK,EAAAqO,EAAAgqB,OAAAyxH,aAAAx3B,GACA30H,MAUA,GAAAy6B,GAAAp4B,EAAAy1B,GAAA2C,KAAA7Q,MAAA,WAAA1Q,EAAA,OAAA,QACA7W,EAAAy1B,GAAAoD,MAAAtR,MAAA,aAAAlZ,EAAA03J,SAEAvC,WAAA7lK,KAAAy6B,GACAp4B,EAAAo4B,GAAA0xH,aAAAx3B,IAQAu0C,WAAA,SAAAx4J,GACA,GAAAwqB,GAAA74B,EAAAy1B,GAAAoD,MAAAtR,MAAA,UAIA,OAHAi8I,WAAA7lK,KAAAk7B,GACAA,EAAA50B,UAAAoK,EACAu1J,WAAA/qI,GACAA,GAMAiuI,eAAA,SAAA5xI,GACA,GAAAte,GAAA5W,EAAAy1B,GAAA3zB,GAAAylB,MAAA,YACAi8I,WAAA7lK,KAAAiZ,GACA5W,EAAA4W,GAAA8rJ,WAAAxtI,IASA6xI,YAAA,SAAApiJ,GACA,GAAAtW,GAAA1Q,KAAA0Q,KAAAo0G,WAOA,OALA99F,GAAAtW,KAAA,iCACAsW,EAAApK,QACA,SACAoK,EAAA5O,SAAAoB,MAAA,EACAnX,EAAAqO,EAAAkxC,MAAAynH,cAAAvzI,aAAA,iBAAA9O,GACAhnB,MAYAyQ,MAAA,SAAAuW,GACA,GAAA0nB,EAEA,IAAA,gBAAA,GAAA,CACA,GAAA,QAAA1nB,EAAA4Z,KAKA,MAJAilI,WAAA7lK,KAAAqC,EAAAy1B,GAAA2C,KACA7Q,MAAA,MACAoR,MAAA,8BAEAh7B,IACA,IAAA,gBAAAgnB,EAAA4Z,KACA,CAAA,GAAA3gC,GAAA+mB,EAAApK,QAAA3a,MAAA,iCAEAhC,IAAA,GAAAA,EAAAiB,SACAlB,KAAAipH,aAAA,eACA7wG,UACAw+C,KAAAltC,SAAAzpB,EAAA,IAAA,EACAw7B,GAAA/R,SAAAzpB,EAAA,KAEA2c,QAAA3c,EAAA,KAEAyuC,EAAA,+DAGAA,IACAA,EAAA1nB,EAAApK,aAEA8xB,GAAA1nB,CAGA,OADA6+I,WAAA7lK,KAAAqC,EAAAy1B,GAAA0J,KAAA5X,MAAA,4BAAA8kB,IACA1uC,MAMAspK,MAAA,SAAA54J,GAUA,QAAAuI,GAAAotB,EAAA8K,EAAAjkB,GACA,GAAAsiB,GAAAntC,EAAAy1B,GAAA7e,QAAA2Q,MAAAunB,EACAnW,MAAAqL,GAEAhkC,EAAAy1B,GAAAoD,KAAAmL,GAQA,OAPAhkC,GAAAmtC,GAAAhsB,GAAA,QAAA,SAAAyR,OACAd,KAAAjH,IACAikB,GAAA,IAAA45E,QAAA33F,UAAAlG,EAAA+H,IAAA,KAEAvkB,EAAAk2I,QAAA2iB,QAAAp4H,GACA9uC,EAAA4yB,EAAA9c,QAAAW,SAAA7L,WAEAuiC,EArBA,GACAspB,GAAAz2D,EAAAy1B,GAAAoD,MAAAtR,MAAA,SACA69F,EAAA/2G,EAAAA,IACArO,GAAAy2D,GAAA/vD,KAAA0+G,EAAA3uD,MAqBA+sG,UAAA7lK,KACAqC,EAAAy1B,GAAA2C,KAAA7Q,MAAA,gBACAvnB,EAAAy1B,GAAAoD,MAAAtR,MAAA,QACAllB,MAAA,UAAA,EAAA+iH,EAAAuI,MAAA,GAAA,MACA,KACA3tH,EAAAy1B,GAAAoD,MAAAtR,MAAA,QAAA69F,EAAA4gC,MAxBA,SAAA3wF,GACA,MAAAA,GAAAtiC,OAAA,GAAApyB,cAAA00D,EAAA/0D,MAAA,IAyBA8kH,EAAA4gC,MACA,KACAvvF,IACA,aAAA2uD,EAAA4gC,MACAwd,UAAA7lK,KACAqC,EAAAy1B,GAAA2C,KAAA7Q,MAAA,oBACA69F,EAAA+hD,UAAA5sJ,UACAipJ,UAAA7lK,KACAqC,EAAAy1B,GAAA2C,KAAA7Q,MAAA,iBACA3Q,EAAA,WAAA,UAAA,SAAAgc,GACA,MAAAiyH,aAAA7kJ,EAAA4yB,EAAA9c,QACAsC,QAAA,qBAEAxB,EAAA,YAAA,YACAA,EAAA,YAAA,QACAA,EAAA,WAAA,MACAA,EAAA,QAAA,SACAA,EAAA,QAAA,WAEAjZ,KAAAya,QAAA,UACAvG,KAAA,WACA0M,QAAA,iBAAA6mG,GAEAznH,KAAAipH,aAAA,WAAA,eAQAwgD,UAAA,SAAA1jK,GACA/F,KAAAkU,KAAA,qBAAA6C,KAAA,cAAAhR,IAMA2sB,OAAA,SAAA+0F,GACA,GACAiiD,GADAC,EAAAliD,EAAA/2G,IAKA,IAFA+L,QAAAqe,IAAA6uI,GAEA,gBAAAA,GAAA,SACAD,EAAArnK,EAAAsnK,EAAA3vJ,cACA,IAAA,gBAAA2vJ,GAAA,SAAA,CACA,OAAAA,EAAA3vJ,SAAA1B,MACA,IAAA,OAAAA,KAAAtY,IAAA,MACA,KAAA,OAAAsY,KAAAtY,KAAAya,QAAA,WAAA,MACA,KAAA,WAAAnC,KAAAtY,KAAAya,QAAA,YAAA,MACA,KAAA,QAAAnC,KAAAtY,KAAAya,QAAA,UAGAivJ,EADA,IAAAC,EAAA3vJ,SAAA0nB,IACAppB,KAEAA,KAAApE,KAAAy1J,EAAA3vJ,SAAA0nB,KAIAjlB,QAAAqe,IAAA4uI,EACA,IAAAzpJ,GAAAypJ,EAAAC,EAAA57I,QAAArrB,MAAAgnK,EAAAC,EAAAniK,UACAiV,SAAAqe,IAAA7a,GAEAwnG,EAAAm/B,QAAA2iB,QAAAx+C,QAAA33F,UAAAnT,KASA+lB,KAAA,SAAAyhF,GACA,GAAA/2G,GAAA1Q,KAAA0Q,KAAA,eAEAmkB,OAAAlX,MACAqd,MAAA,0BACA/1B,KAAA,WACAjF,KAAA+I,KAAA0+G,EAAA/2G,KAAA3H,MACA/I,KAAAkU,KAAA,oBAAAytC,QAAAA,QAAA,IAEA3hD,KAAAwjB,GAAA,QAAA,sBAAA,SAAAyR,GACA,GAAAhc,GAAA5W,EAAA4yB,EAAA9c,QAAAsC,QAAA,UACA02B,EAAAl4B,EAAAvI,KAAA,SAEA,IAAA,OAAAygC,EAAA,CACA,GAAAxJ,GAAAtlC,EAAA4yB,EAAA9c,QAAAsC,QAAA,QACAmvJ,EAAA5jI,KAAA4B,kBAAAD,GAAA,GACAvjC,EAAA2mH,QAAA33F,UAAAw2I,EACAl5J,GAAAmqB,OAAA0uI,QAAAnlK,OACA,UAAA+sC,GACAzgC,EAAAmqB,OAAA0uI,QAAA,SAKA,OAHAtwJ,GAAAwB,QAAA,UAAAoa,MAAA,QAEAI,EAAA/U,kBACA,QAaAqpJ,QAAA,SAAAhpK,GACA,GAAAmQ,GAAA1Q,KAAA0Q,KAAA,eAEA,IAAA,QAAAA,EAAAu2J,UAEA,GADA7iK,EAAAuiK,eAAApmK,GACA,IAAA6D,EACA,MAAA,UAEAA,GAAA2mH,QAAA33F,UAAA7yB,EAAA,KAKA,OAFAslK,WAAA7lK,KAAAqC,EAAAy1B,GAAA2C,KAAA7Q,MAAA,YAAArpB,IACAmQ,EAAAmqB,OAAA0uI,QAAAnlK,GACApE,MAMAwO,KAAA,WACA,MAAAxO,MAAAgC,KAAA,WACAK,EAAArC,MACA0Q,KAAA,gBACAmqB,OAAArsB,UASAq7J,YAAA,WACA,MAAA7pK,MAAAgC,KAAA,WACA,GAAAyL,GAAApL,EAAArC,MACA0Q,EAAAjD,EAAAiD,KAAA,eAGA,QAFAjD,EAAAw7G,aAAA,aAGA,IAAA,UACA,IAAA,aACAv4G,EAAAmqB,OAAA/M,OACA,MACA,KAAA,YACApd,EAAAmqB,OAAArsB,WAUAiF,KAAA,SAAAw9B,GACA,MAAAjxC,MAAAgC,KAAA,WACA,GAAAyL,GAAApL,EAAArC,KACAyN,GAAAiD,KAAA,gBACAmqB,OAAApnB,KAAAw9B,GACAxjC,EAAAw7G,aAAA,WAAA,cAOAn7F,MAAA,WACA,MAAA9tB,MAAAgC,KAAA,WACAK,EAAArC,MACA0Q,KAAA,gBACAmqB,OAAA/M,WAQA0O,MAAA,WACA,GAAAx8B,KAAAkB,OAAA,CACA,GAAA2Z,GAAA7a,KAAA8Y,QAEA9Y,MAAAgC,KAAA,WACA,GAAAyL,GAAApL,EAAArC,MACA0Q,EAAAjD,EAAAiD,KAAA,eAEAjD,GAAAw7G,aAAA,WACA5mH,EAAA,kBAAAue,QAAA,eAAAlQ,EAAAmqB,OAAAroB,IACA9B,EAAAmqB,OAAA/M,QACArgB,EAAAw7G,aAAA,WAAA,cAGAjpH,KAAAiN,SAEA4N,EAAA+F,QAAA,oBAAA,GAEA,MAAA5gB,OAMA6mC,KAAA,WACAxkC,EAAA,yBAAAue,QAAA,QAAApH,KAAA,iBAQAmsJ,aAAA,SAAAniJ,GAWA,WAVA2Q,IAAA3Q,EACAxjB,KAAA+pB,YAAA,UACAvG,EACAxjB,KAAA6pB,SAAA,UAEA7pB,KAAA8pB,YAAA,UAGA9pB,KAAA4gB,QAAA,oBAAA,GAEA5gB,MAOA8pK,mBAAA,SAAA/3H,GACA,GAAAG,GAAAlyC,KAAAkU,KAAA,oCAOA,OALA69B,GAAA1vC,EAAAiG,QAAAyhK,SAAA,WAAAttJ,QAAAqe,IAAA,UAAA96B,QACA+xC,GAEA/L,KAAAsL,QAAAU,aAAAE,EAAAlyC,KAAA+xC,GAEA/xC,MAMAwqH,YAAA,SAAAxjG,GACA,GAAAtW,GAAA1Q,KAAA0Q,KAAA,gBACAkxC,EAAA+kH,eAAAj2J,EAAAkxC,MAAAA,MAIA,OAFA/mB,QAAA2vF,YAAA5oE,EAAAlxC,EAAAkxC,MAAAlkC,OAAAsJ,GAEAhnB,MAMA+mH,UAAA,WAaA,QAAAijD,KACAhqK,KAAA6jB,OAAAxhB,EAAAy1B,GAAAkO,MACApc,MAAA,mBACAoc,KAAAiJ,OAAA7jC,OAAA,WAAA4qC,EAAAvG,UACAuG,EAAAvG,aAAAtb,GACA6R,KAAAiJ,OAAA7jC,OAAA,SAAA4qC,EAAApC,QACA5N,KAAAiJ,OAAAS,KAAAj3B,GACAutB,KAAAiJ,OAAAC,SAAA,MAAA,GACAlJ,KAAAiJ,OAAAjU,QACAgL,KAAAiJ,OAAAa,cACA9J,KAAAiJ,OAAA9U,SACA6L,KAAAiJ,OAAArT,OAAAA,EAAAoa,EAAAvG,UACAzJ,KAAAiJ,OAAA1sB,SACA8jB,MAAA,iBACA8K,OAAA,SAAAlc,EAAAojC,GAEA,MADAmtG,GAAAv8C,aAAA,iBAAA5wD,IACA,OA5BA,GAAAmtG,GAAAxlK,KACA0Q,EAAA1Q,KAAA0Q,KAAA,eAEA,IAAAA,EAAAu4J,UAAA,CACA,GAAAxwJ,GAAAqa,OAAA0D,KAAAC,UAAAswF,UAAAr2G,EAAAu4J,SACAxwJ,GAAAL,SAAAmU,SAAA,KAAAnU,SAAA6V,KAAAxV,CACA,IAAAu9B,GAAA3zC,EAAA,UAAAqzC,MAAA,eACA,eAAA,SAAA,QACA,aAEA9Z,EAAAoa,EAAAovE,YAuBAp/E,MAAA4I,YACA5T,MAAA,iBACA/1B,KAAA+kK,QAGAn1I,OAAAtB,MAAA,eAGA,OAAAvzB,OAGAiqK,eAAA,SAAA5xG,GACA,GAAAmtG,GAAAxlK,KACA0Q,EAAA1Q,KAAA0Q,KAAA,gBACAm7B,GACAn7B,KAAAA,EAAAu4J,UACAhiK,KAAA,MACAyhH,KAAArwD,EA4BA,cAzBAxsB,GAAA68E,KAAAh5E,KAEArtC,EAAAirB,MAAAjB,IAAAyG,OAAA0D,KAAAC,UAAAyrF,YACA5xG,SAAA,OACAoc,YAAA,mBACAzlB,KAAA,OACAyJ,KAAA/M,KAAAyvB,UAAAyY,GACAvd,QAAA,SAAAwlB,GACAA,EAAArjC,MACAokB,MAAAtB,MAAAukG,YAAA,iBAAAhkF,IAEAjf,MAAAsB,UAAAptB,KAAA,QACAqtB,MAAAovI,KAIA/0J,MAAA,SAAAk2B,EAAA48E,EAAAC,GACA,KAAA78E,EAAAnZ,OACAqH,MAAAtB,MAAA,mDAEAA,MAAA,gBAAAgwF,MAKAvjH,MAuBA48B,SAAA,SAAApsB,GACA,GAAAE,GAAA1Q,KAAA0Q,KAAA,eAEA,IAAAA,EAAA,CAGA,GAAAA,EAAAmqB,OAAArqB,OAAAA,EAAA,CACA,GAAA05J,GAAAlqK,KAAAkU,KAAA,eACA0tC,EAAAlxC,EAAAkxC,KAEAsoH,GAAApgJ,YAAApZ,EAAAmqB,OAAArqB,OAAAqZ,SAAArZ,GACAE,EAAAmqB,OAAArqB,MAAAA,GACAs1J,WAAAt1J,IAAAE,EAAAy3J,YACA9lK,EAAAqO,EAAAy3J,YAAA5vJ,QACA7H,EAAAy3J,WAAA,MACA,cAAA33J,GACAxQ,KAAAkU,KAAA,SAAAqE,QAGA,QAAA/H,GAAAoxC,EAAAtzB,SACAszB,EAAAtzB,QAAAttB,KAAAhB,KAAA0Q,EAAAmqB,SACAirI,WAAAt1J,IAAAoxC,EAAAhzC,UACAgzC,EAAAhzC,SAAA5N,KAAAhB,KAAA0Q,EAAAmqB,QAGA+qI,GAAA5lK,KACA,IAAA8lK,WAAAt1J,GAKA,GAAA,aAAAA,GAAA,QAAAA,EAAA,CACA,GAAA/C,GAAAzN,IACAsL,YAAA,WAAAmC,EAAAmT,QAAA,qBAAA,SAEA5gB,MAAA4gB,QAAA,wBATA,CACA,GAAAnT,GAAAzN,IACAqC,GAAA,kBAAAue,QAAA,eAAAlQ,EAAAmqB,OAAAroB,IACA9B,EAAAmqB,OAAAqJ,UACA54B,WAAA,WAAAmC,EAAAmT,QAAA,qBAAA,KAQA,MAAA5gB,QAOA0lC,SAAA,WACA,GAAAh1B,GAAA1Q,KAAA0Q,KAAA,eAEA,OAAAA,GAAAmqB,OAAAnqB,EAAAmqB,OAAArqB,MAAA,QAQAk1J,MAAA,WACA,MAAAI,YAAA9lK,KAAAipH,aAAA,cAMA2/C,KAAA,SAAAuB,GAmBA,QAAAC,GAAA15H,EAAAxwC,GACA,GAAAmqK,GAAA9/J,KAAAwa,MAAAxa,KAAA+/J,IAAA,GAAApqK,GAAA,IAAAwwC,EAUA,OARA,UAAA7vC,GACAA,EAAAA,EAAAiQ,UAEA,KADA,GAAAi3C,GAAA,iBACAA,EAAArkD,KAAA7C,IACAA,EAAAA,EAAAqC,QAAA6kD,EAAA,QACA,OAAAlnD,IAGAwpK,GA7BA,GAAA35J,GAAA1Q,KAAA0Q,KAAA,eAEA,IAAAA,GAAAA,EAAAmqB,QAAA,WAAAnqB,EAAAmqB,OAAArqB,MAAA,CACA,GAAA+5J,GAAAvqK,KAAAkU,KAAA,eACAs2J,GAAA,SAAA,QAAA,SACAC,GAAA,MAAA,OAAA,SACAC,GAAA,UAAA,SAAA,SAMA,KAHAh6J,EAAA85J,SACA95J,EAAA85J,QAAA7rJ,QAAAgsJ,UAAA7mH,OAAA6mH,UAAAC,OAAAD,YAEAxqK,EAAA,EAAAA,EAAAqqK,EAAAtpK,OAAAf,IAAA,CACA,GAAAiE,GAAAomK,EAAArqK,GACAuwC,EAAAy5H,EAAAK,OAAApmK,GAAAssC,OAAAy5H,EAAAK,OAAAnmD,MAAA3zE,MACAi6H,EAAAR,EAAAK,OAAApmK,GAAAumK,MAEA/oK,EAAA2I,KAAAsgK,MAAAF,EAAAj6H,EAAA,IAeAhgC,GAAA85J,OAAApmK,GAAAssC,MAAAA,EACAhgC,EAAA85J,OAAApmK,GAAAumK,MAAAzpK,QA1BA,KA2BAwP,EAAA85J,OAAApmK,GAAAumK,MAAAj6J,EAAA85J,OAAApmK,GAAAumK,MAAAhoK,MAAA,IACA+N,EAAA85J,OAAApmK,GAAAumK,MAAA/jK,KAAAhF,GACA2oK,EAAAnd,UAAA18I,EAAA85J,OAAApmK,GAAAumK,OACA5+J,OAAA,MACAmjJ,UAAA/uJ,EAAA,EACA0wJ,cAAA,EACAC,cAAA,EACA/B,UAAA0b,EAAAtqK,GACAsvJ,cAAAib,EAAAvqK,GACAuvJ,cAAA,SACAob,kBAAA,GAAA3qK,EAAA,kBAAAg0B,GACAy7H,gBAAA,SAAA1vJ,GACA,MAAAkqK,GAAA15H,EAAAxwC,UAqDA6qK,QAAA,CA6BA1tH,MAAAryC,UAAAsyC,KAAA,WACA,MAAAj7C,GAAArC,KAAAmmK,UAOA9oH,KAAAryC,UAAAggK,UAAA,WAGA,MAFAhrK,MAAAuD,MACAvD,KAAAuD,IAAAwnK,WACA/qK,KAAAuD,KAiSAlB,EAAA4O,GAAAg4G,aAAA,SAAAl7F,GACA,MAAAuM,SAAAvM,GACAuM,QAAAvM,GACArrB,MAAA1C,KAAAmN,MAAAnC,UAAArI,MAAA3B,KAAAwG,UAAA,IACA,gBAAAumB,IAAAA,MAGA1rB,GAAAoO,MAAA,UAAAsd,EAAA,6BAAA+2F,YAFAxqF,QAAAC,MAAA73B,MAAA1C,KAAAwH,aAKAkrB,UCh+CA,WACA,YAwDA,SAAAu4I,MAAAC,GACAA,GACAr2C,OAAA,GAAAA,OAAA,IAAAA,OAAA,GAAAA,OAAA,GAAAA,OAAA,GACAA,OAAA,GAAAA,OAAA,GAAAA,OAAA,GAAAA,OAAA,GACAA,OAAA,GAAAA,OAAA,GAAAA,OAAA,IAAAA,OAAA,IACAA,OAAA,IAAAA,OAAA,IAAAA,OAAA,IAAAA,OAAA,IAAA,EACA70H,KAAA60H,OAAAA,QAEA70H,KAAA60H,QAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAGA70H,KAAAmrK,GAAA,WACAnrK,KAAA+gC,GAAA,WACA/gC,KAAAghC,GAAA,WACAhhC,KAAAihC,GAAA,UACAjhC,KAAAkhC,GAAA,WAEAlhC,KAAAw0H,MAAAx0H,KAAA4E,MAAA5E,KAAAqqK,MAAArqK,KAAAorK,OAAA,EACAprK,KAAAqrK,UAAArrK,KAAAsrK,QAAA,EACAtrK,KAAAwR,OAAA,EAzEA,GAAA8G,MAAA,gBAAAvY,QAAAA,UACAwrK,SAAAjzJ,KAAAkzJ,oBAAA,gBAAA7mI,UAAAA,QAAAnK,UAAAmK,QAAAnK,SAAA8iB,IACAiuH,WACAjzJ,KAAAqG,OAEA,IAAA8sJ,YAAAnzJ,KAAAozJ,sBAAA,gBAAA/rK,SAAAA,OAAAC,QACA+rK,IAAA,kBAAAp5I,SAAAA,OAAAC,IACAo5I,UAAA,mBAAAr7J,MAAA,IACAs7J,QAAA,WAAA,QAAA,MAAA,KACAC,OAAA,GAAA,GAAA,EAAA,GACAC,cAAA,MAAA,QAAA,SAAA,eAEAl3C,UAEAm3C,mBAAA,SAAAC,GACA,MAAA,UAAArvJ,GACA,MAAA,IAAAquJ,OAAA,GAAArwI,OAAAhe,GAAAqvJ,OAIAC,aAAA,WACA,GAAAn+I,GAAAi+I,mBAAA,MACAT,WACAx9I,EAAAo+I,SAAAp+I,IAEAA,EAAA6rC,OAAA,WACA,MAAA,IAAAqxG,OAEAl9I,EAAA6M,OAAA,SAAAhe,GACA,MAAAmR,GAAA6rC,SAAAh/B,OAAAhe,GAEA,KAAA,GAAAzc,GAAA,EAAAA,EAAA4rK,aAAA7qK,SAAAf,EAAA,CACA,GAAA8G,GAAA8kK,aAAA5rK,EACA4tB,GAAA9mB,GAAA+kK,mBAAA/kK,GAEA,MAAA8mB,IAGAo+I,SAAA,SAAAp+I,QACA,GAAAq+I,QAAAngB,KAAA,qBACAogB,OAAApgB,KAAA,4BACAqgB,WAAA,SAAA1vJ,GACA,GAAA,gBAAAA,GACA,MAAAwvJ,QAAAG,WAAA,QAAA3xI,OAAAhe,EAAA,QAAA4vJ,OAAA,MACA,IAAA5vJ,EAAAxL,cAAAq7J,YACA7vJ,EAAA,GAAA8vJ,YAAA9vJ,OACA,QAAAuX,KAAAvX,EAAA1b,OACA,MAAA6sB,QAAAnR,EAEA,OAAAwvJ,QAAAG,WAAA,QAAA3xI,OAAA,GAAAyxI,QAAAzvJ,IAAA4vJ,OAAA,OAEA,OAAAF,YAyBArB,MAAAjgK,UAAA4vB,OAAA,SAAAhe,GACA,IAAA5c,KAAAqrK,UAAA,CAGA,GAAAsB,GAAA,gBAAA,EACAA,IAAA/vJ,EAAAxL,cAAAkH,KAAAm0J,cACA7vJ,EAAA,GAAA8vJ,YAAA9vJ,GAIA,KAFA,GAAAgkB,GAAAzgC,EAAAua,EAAA,EAAAxZ,EAAA0b,EAAA1b,QAAA,EAAA2zH,EAAA70H,KAAA60H,OAEAn6G,EAAAxZ,GAAA,CAUA,GATAlB,KAAAsrK,SACAtrK,KAAAsrK,QAAA,EACAz2C,EAAA,GAAA70H,KAAAw0H,MACAK,EAAA,IAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,IAAAA,EAAA,IACAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,IAAA,GAGA83C,EACA,IAAAxsK,EAAAH,KAAA4E,MAAA8V,EAAAxZ,GAAAf,EAAA,KAAAua,EACAm6G,EAAA10H,GAAA,IAAAyc,EAAAlC,IAAAoxJ,MAAA,EAAA3rK,SAGA,KAAAA,EAAAH,KAAA4E,MAAA8V,EAAAxZ,GAAAf,EAAA,KAAAua,EACAkmB,EAAAhkB,EAAApH,WAAAkF,GACAkmB,EAAA,IACAi0F,EAAA10H,GAAA,IAAAygC,GAAAkrI,MAAA,EAAA3rK,KACAygC,EAAA,MACAi0F,EAAA10H,GAAA,KAAA,IAAAygC,GAAA,IAAAkrI,MAAA,EAAA3rK,KACA00H,EAAA10H,GAAA,KAAA,IAAA,GAAAygC,IAAAkrI,MAAA,EAAA3rK,MACAygC,EAAA,OAAAA,GAAA,OACAi0F,EAAA10H,GAAA,KAAA,IAAAygC,GAAA,KAAAkrI,MAAA,EAAA3rK,KACA00H,EAAA10H,GAAA,KAAA,IAAAygC,GAAA,EAAA,KAAAkrI,MAAA,EAAA3rK,KACA00H,EAAA10H,GAAA,KAAA,IAAA,GAAAygC,IAAAkrI,MAAA,EAAA3rK,OAEAygC,EAAA,QAAA,KAAAA,IAAA,GAAA,KAAAhkB,EAAApH,aAAAkF,IACAm6G,EAAA10H,GAAA,KAAA,IAAAygC,GAAA,KAAAkrI,MAAA,EAAA3rK,KACA00H,EAAA10H,GAAA,KAAA,IAAAygC,GAAA,GAAA,KAAAkrI,MAAA,EAAA3rK,KACA00H,EAAA10H,GAAA,KAAA,IAAAygC,GAAA,EAAA,KAAAkrI,MAAA,EAAA3rK,KACA00H,EAAA10H,GAAA,KAAA,IAAA,GAAAygC,IAAAkrI,MAAA,EAAA3rK,KAKAH,MAAA4sK,cAAAzsK,EACAH,KAAAqqK,OAAAlqK,EAAAH,KAAA4E,MACAzE,GAAA,IACAH,KAAAw0H,MAAAK,EAAA,IACA70H,KAAA4E,MAAAzE,EAAA,GACAH,KAAAqY,OACArY,KAAAsrK,QAAA,GAEAtrK,KAAA4E,MAAAzE,EAOA,MAJAH,MAAAqqK,MAAA,aACArqK,KAAAorK,QAAAprK,KAAAqqK,MAAA,YAAA,EACArqK,KAAAqqK,MAAArqK,KAAAqqK,MAAA,YAEArqK,OAGAirK,KAAAjgK,UAAA6hK,SAAA,WACA,IAAA7sK,KAAAqrK,UAAA,CAGArrK,KAAAqrK,WAAA,CACA,IAAAx2C,GAAA70H,KAAA60H,OAAA10H,EAAAH,KAAA4sK,aACA/3C,GAAA,IAAA70H,KAAAw0H,MACAK,EAAA10H,GAAA,IAAA0rK,MAAA,EAAA1rK,GACAH,KAAAw0H,MAAAK,EAAA,IACA10H,GAAA,KACAH,KAAAsrK,QACAtrK,KAAAqY,OAEAw8G,EAAA,GAAA70H,KAAAw0H,MACAK,EAAA,IAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,IAAAA,EAAA,IACAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,IAAA,GAEAA,EAAA,IAAA70H,KAAAorK,QAAA,EAAAprK,KAAAqqK,QAAA,GACAx1C,EAAA,IAAA70H,KAAAqqK,OAAA,EACArqK,KAAAqY,SAGA4yJ,KAAAjgK,UAAAqN,KAAA,WACA,GACAxS,GAAArE,EAAA9B,EADAyE,EAAAnE,KAAAmrK,GAAAr4J,EAAA9S,KAAA+gC,GAAAhgC,EAAAf,KAAAghC,GAAAh7B,EAAAhG,KAAAihC,GAAAxhC,EAAAO,KAAAkhC,GACA2zF,EAAA70H,KAAA60H,MAEA,KAAArzH,EAAA,GAAAA,EAAA,KAAAA,EACA9B,EAAAm1H,EAAArzH,EAAA,GAAAqzH,EAAArzH,EAAA,GAAAqzH,EAAArzH,EAAA,IAAAqzH,EAAArzH,EAAA,IACAqzH,EAAArzH,GAAA9B,GAAA,EAAAA,IAAA,EAGA,KAAA8B,EAAA,EAAAA,EAAA,GAAAA,GAAA,EACAqE,EAAAiN,EAAA/R,GAAA+R,EAAA9M,EACAtG,EAAAyE,GAAA,EAAAA,IAAA,GACA1E,EAAAC,EAAAmG,EAAApG,EAAA,WAAAo1H,EAAArzH,IAAA,EACAsR,EAAAA,GAAA,GAAAA,IAAA,EAEAjN,EAAA1B,EAAA2O,GAAA3O,EAAApD,EACArB,EAAAD,GAAA,EAAAA,IAAA,GACAuG,EAAAtG,EAAAmG,EAAAG,EAAA,WAAA6uH,EAAArzH,EAAA,IAAA,EACA2C,EAAAA,GAAA,GAAAA,IAAA,EAEA0B,EAAApG,EAAA0E,GAAA1E,EAAAqT,EACApT,EAAAsG,GAAA,EAAAA,IAAA,GACAjF,EAAArB,EAAAmG,EAAA9E,EAAA,WAAA8zH,EAAArzH,EAAA,IAAA,EACA/B,EAAAA,GAAA,GAAAA,IAAA,EAEAoG,EAAAG,EAAAvG,GAAAuG,EAAA7B,EACAzE,EAAAqB,GAAA,EAAAA,IAAA,GACA+R,EAAApT,EAAAmG,EAAAiN,EAAA,WAAA+hH,EAAArzH,EAAA,IAAA,EACAwE,EAAAA,GAAA,GAAAA,IAAA,EAEAH,EAAA9E,EAAAiF,GAAAjF,EAAAtB,EACAC,EAAAoT,GAAA,EAAAA,IAAA,GACA3O,EAAAzE,EAAAmG,EAAA1B,EAAA,WAAA0wH,EAAArzH,EAAA,IAAA,EACAT,EAAAA,GAAA,GAAAA,IAAA,CAGA,MAAAS,EAAA,GAAAA,GAAA,EACAqE,EAAAiN,EAAA/R,EAAAiF,EACAtG,EAAAyE,GAAA,EAAAA,IAAA,GACA1E,EAAAC,EAAAmG,EAAApG,EAAA,WAAAo1H,EAAArzH,IAAA,EACAsR,EAAAA,GAAA,GAAAA,IAAA,EAEAjN,EAAA1B,EAAA2O,EAAA/R,EACArB,EAAAD,GAAA,EAAAA,IAAA,GACAuG,EAAAtG,EAAAmG,EAAAG,EAAA,WAAA6uH,EAAArzH,EAAA,IAAA,EACA2C,EAAAA,GAAA,GAAAA,IAAA,EAEA0B,EAAApG,EAAA0E,EAAA2O,EACApT,EAAAsG,GAAA,EAAAA,IAAA,GACAjF,EAAArB,EAAAmG,EAAA9E,EAAA,WAAA8zH,EAAArzH,EAAA,IAAA,EACA/B,EAAAA,GAAA,GAAAA,IAAA,EAEAoG,EAAAG,EAAAvG,EAAA0E,EACAzE,EAAAqB,GAAA,EAAAA,IAAA,GACA+R,EAAApT,EAAAmG,EAAAiN,EAAA,WAAA+hH,EAAArzH,EAAA,IAAA,EACAwE,EAAAA,GAAA,GAAAA,IAAA,EAEAH,EAAA9E,EAAAiF,EAAAvG,EACAC,EAAAoT,GAAA,EAAAA,IAAA,GACA3O,EAAAzE,EAAAmG,EAAA1B,EAAA,WAAA0wH,EAAArzH,EAAA,IAAA,EACAT,EAAAA,GAAA,GAAAA,IAAA,CAGA,MAAAS,EAAA,GAAAA,GAAA,EACAqE,EAAAiN,EAAA/R,EAAA+R,EAAA9M,EAAAjF,EAAAiF,EACAtG,EAAAyE,GAAA,EAAAA,IAAA,GACA1E,EAAAC,EAAAmG,EAAApG,EAAA,WAAAo1H,EAAArzH,IAAA,EACAsR,EAAAA,GAAA,GAAAA,IAAA,EAEAjN,EAAA1B,EAAA2O,EAAA3O,EAAApD,EAAA+R,EAAA/R,EACArB,EAAAD,GAAA,EAAAA,IAAA,GACAuG,EAAAtG,EAAAmG,EAAAG,EAAA,WAAA6uH,EAAArzH,EAAA,IAAA,EACA2C,EAAAA,GAAA,GAAAA,IAAA,EAEA0B,EAAApG,EAAA0E,EAAA1E,EAAAqT,EAAA3O,EAAA2O,EACApT,EAAAsG,GAAA,EAAAA,IAAA,GACAjF,EAAArB,EAAAmG,EAAA9E,EAAA,WAAA8zH,EAAArzH,EAAA,IAAA,EACA/B,EAAAA,GAAA,GAAAA,IAAA,EAEAoG,EAAAG,EAAAvG,EAAAuG,EAAA7B,EAAA1E,EAAA0E,EACAzE,EAAAqB,GAAA,EAAAA,IAAA,GACA+R,EAAApT,EAAAmG,EAAAiN,EAAA,WAAA+hH,EAAArzH,EAAA,IAAA,EACAwE,EAAAA,GAAA,GAAAA,IAAA,EAEAH,EAAA9E,EAAAiF,EAAAjF,EAAAtB,EAAAuG,EAAAvG,EACAC,EAAAoT,GAAA,EAAAA,IAAA,GACA3O,EAAAzE,EAAAmG,EAAA1B,EAAA,WAAA0wH,EAAArzH,EAAA,IAAA,EACAT,EAAAA,GAAA,GAAAA,IAAA,CAGA,MAAAS,EAAA,GAAAA,GAAA,EACAqE,EAAAiN,EAAA/R,EAAAiF,EACAtG,EAAAyE,GAAA,EAAAA,IAAA,GACA1E,EAAAC,EAAAmG,EAAApG,EAAA,UAAAo1H,EAAArzH,IAAA,EACAsR,EAAAA,GAAA,GAAAA,IAAA,EAEAjN,EAAA1B,EAAA2O,EAAA/R,EACArB,EAAAD,GAAA,EAAAA,IAAA,GACAuG,EAAAtG,EAAAmG,EAAAG,EAAA,UAAA6uH,EAAArzH,EAAA,IAAA,EACA2C,EAAAA,GAAA,GAAAA,IAAA,EAEA0B,EAAApG,EAAA0E,EAAA2O,EACApT,EAAAsG,GAAA,EAAAA,IAAA,GACAjF,EAAArB,EAAAmG,EAAA9E,EAAA,UAAA8zH,EAAArzH,EAAA,IAAA,EACA/B,EAAAA,GAAA,GAAAA,IAAA,EAEAoG,EAAAG,EAAAvG,EAAA0E,EACAzE,EAAAqB,GAAA,EAAAA,IAAA,GACA+R,EAAApT,EAAAmG,EAAAiN,EAAA,UAAA+hH,EAAArzH,EAAA,IAAA,EACAwE,EAAAA,GAAA,GAAAA,IAAA,EAEAH,EAAA9E,EAAAiF,EAAAvG,EACAC,EAAAoT,GAAA,EAAAA,IAAA,GACA3O,EAAAzE,EAAAmG,EAAA1B,EAAA,UAAA0wH,EAAArzH,EAAA,IAAA,EACAT,EAAAA,GAAA,GAAAA,IAAA,CAGAf,MAAAmrK,GAAAnrK,KAAAmrK,GAAAhnK,GAAA,EACAnE,KAAA+gC,GAAA/gC,KAAA+gC,GAAAjuB,GAAA,EACA9S,KAAAghC,GAAAhhC,KAAAghC,GAAAjgC,GAAA,EACAf,KAAAihC,GAAAjhC,KAAAihC,GAAAj7B,GAAA,EACAhG,KAAAkhC,GAAAlhC,KAAAkhC,GAAAzhC,GAAA,GAGAwrK,KAAAjgK,UAAA8hK,IAAA,WACA9sK,KAAA6sK,UAEA,IAAA1B,GAAAnrK,KAAAmrK,GAAApqI,EAAA/gC,KAAA+gC,GAAAC,EAAAhhC,KAAAghC,GAAAC,EAAAjhC,KAAAihC,GAAAC,EAAAlhC,KAAAkhC,EAEA,OAAA0qI,WAAAT,GAAA,GAAA,IAAAS,UAAAT,GAAA,GAAA,IACAS,UAAAT,GAAA,GAAA,IAAAS,UAAAT,GAAA,GAAA,IACAS,UAAAT,GAAA,GAAA,IAAAS,UAAAT,GAAA,EAAA,IACAS,UAAAT,GAAA,EAAA,IAAAS,UAAA,GAAAT,GACAS,UAAA7qI,GAAA,GAAA,IAAA6qI,UAAA7qI,GAAA,GAAA,IACA6qI,UAAA7qI,GAAA,GAAA,IAAA6qI,UAAA7qI,GAAA,GAAA,IACA6qI,UAAA7qI,GAAA,GAAA,IAAA6qI,UAAA7qI,GAAA,EAAA,IACA6qI,UAAA7qI,GAAA,EAAA,IAAA6qI,UAAA,GAAA7qI,GACA6qI,UAAA5qI,GAAA,GAAA,IAAA4qI,UAAA5qI,GAAA,GAAA,IACA4qI,UAAA5qI,GAAA,GAAA,IAAA4qI,UAAA5qI,GAAA,GAAA,IACA4qI,UAAA5qI,GAAA,GAAA,IAAA4qI,UAAA5qI,GAAA,EAAA,IACA4qI,UAAA5qI,GAAA,EAAA,IAAA4qI,UAAA,GAAA5qI,GACA4qI,UAAA3qI,GAAA,GAAA,IAAA2qI,UAAA3qI,GAAA,GAAA,IACA2qI,UAAA3qI,GAAA,GAAA,IAAA2qI,UAAA3qI,GAAA,GAAA,IACA2qI,UAAA3qI,GAAA,GAAA,IAAA2qI,UAAA3qI,GAAA,EAAA,IACA2qI,UAAA3qI,GAAA,EAAA,IAAA2qI,UAAA,GAAA3qI,GACA2qI,UAAA1qI,GAAA,GAAA,IAAA0qI,UAAA1qI,GAAA,GAAA,IACA0qI,UAAA1qI,GAAA,GAAA,IAAA0qI,UAAA1qI,GAAA,GAAA,IACA0qI,UAAA1qI,GAAA,GAAA,IAAA0qI,UAAA1qI,GAAA,EAAA,IACA0qI,UAAA1qI,GAAA,EAAA,IAAA0qI,UAAA,GAAA1qI;2wBAGA+pI,KAAAjgK,UAAA8F,SAAAm6J,KAAAjgK,UAAA8hK,IAEA7B,KAAAjgK,UAAAwhK,OAAA,WACAxsK,KAAA6sK,UAEA,IAAA1B,GAAAnrK,KAAAmrK,GAAApqI,EAAA/gC,KAAA+gC,GAAAC,EAAAhhC,KAAAghC,GAAAC,EAAAjhC,KAAAihC,GAAAC,EAAAlhC,KAAAkhC,EAEA,QACAiqI,GAAA,GAAA,IAAAA,GAAA,GAAA,IAAAA,GAAA,EAAA,IAAA,IAAAA,EACApqI,GAAA,GAAA,IAAAA,GAAA,GAAA,IAAAA,GAAA,EAAA,IAAA,IAAAA,EACAC,GAAA,GAAA,IAAAA,GAAA,GAAA,IAAAA,GAAA,EAAA,IAAA,IAAAA,EACAC,GAAA,GAAA,IAAAA,GAAA,GAAA,IAAAA,GAAA,EAAA,IAAA,IAAAA,EACAC,GAAA,GAAA,IAAAA,GAAA,GAAA,IAAAA,GAAA,EAAA,IAAA,IAAAA,IAIA+pI,KAAAjgK,UAAA01C,MAAAuqH,KAAAjgK,UAAAwhK,OAEAvB,KAAAjgK,UAAA+hK,YAAA,WACA/sK,KAAA6sK,UAEA,IAAAG,GAAA,GAAAP,aAAA,IACAQ,EAAA,GAAAC,UAAAF,EAMA,OALAC,GAAAE,UAAA,EAAAntK,KAAAmrK,IACA8B,EAAAE,UAAA,EAAAntK,KAAA+gC,IACAksI,EAAAE,UAAA,EAAAntK,KAAAghC,IACAisI,EAAAE,UAAA,GAAAntK,KAAAihC,IACAgsI,EAAAE,UAAA,GAAAntK,KAAAkhC,IACA8rI,EAGA,IAAAptK,SAAAssK,cAEAT,WACA9rK,OAAAC,QAAAA,SAEA0Y,KAAA80J,KAAAxtK,QACA+rK,KACAp5I,OAAA,UAAA,WACA,MAAA3yB,eC/TA2yB,OAAA,YAAA,SAAA,SAAA,SAAA,OACA,cAAA,QAAA,SAAA,QAAA,QACA,oBAAA,SAAA,UAAA,SAAA,UAAA,QAEA,SAAAlwB,EAAAywB,OAAA+zF,OAAA7gF,KAAAnS,YAAAgB,MAAAgG,OAAAkL,MACAlP,MAAA8gC,YAi8DA,QAAAqtG,aAAAxzH,EAAAL,EAAAnW,EAAAt2B,EAAA84C,GAOA,MANAA,GAAAA,GAAA,KACAn7C,EAAAy1B,GAAA3zB,GAAAsU,KAAA,IACAmR,MAAA,WAAAllB,EAAA,QAAA84C,EAAA,WAAArM,EACAnW,MAAAA,EAAAqyI,cAAAl8H,GACA9uC,EAAAy1B,GAAAoD,MAAAtR,MAAA,uBAAA4nB,KAKA,QAAA87H,aAAAn8H,EAAAnW,EAAAwiB,GAOA,MANAA,GAAAA,GAAA,KACAn7C,EAAAy1B,GAAA3zB,GAAAsU,KAAA,IACAmR,MAAA,iCAAA4zB,EAAA,WAAArM,EACAnW,MAAAA,EAAAqyI,cAAAl8H,GACA9uC,EAAAy1B,GAAAoD,MAAAtR,MAAA,gBAKA,QAAA2jJ,kBAAA9/J,EAAA0jC,EAAAK,GACA/jC,EAAAyG,KAAA,iBAAAi9B,EAAA,sBAEArnB,YAAA,SAAA3pB,EAAAiE,GACA,MAAAA,GAAAnC,MAAA,sBAAA+M,KAAA,OACA6a,SAAA,aAAA2nB,GAGA,QAAAwxF,OACA,MAAA3gI,GAAAy1B,GAAAoD,MAAAtR,MAAA,cAAA,KAGA,QAAA4jJ,iBACA,MAAAnrK,GAAAy1B,GAAA2C,KAAA7Q,MAAA,WACAvnB,EAAAy1B,GAAA2C,KAAA7Q,MAAA,iBACAvnB,EAAAy1B,GAAA2C,KAAA7Q,MAAA,mBAGA,QAAA6jJ,wBACA,GAAAtsK,GACAs5B,EAAAp4B,EAAAy1B,GAAA2C,KAAA7Q,MAAA,kBACAvnB,EAAAy1B,GAAAuO,MAAA,aACAllC,EAAAkB,EAAAy1B,GAAA2C,KAAA7Q,MAAA,YAAA0d,KAAA,UACAjlC,EAAAy1B,GAAAuO,MAAA,aAEA,KAAA,GAAAjyB,KAAAs5J,WACAA,UAAA38J,eAAAqD,IACA/R,EAAAlB,GAAA0iB,OAAAxhB,EAAAy1B,GAAA7e,QAAAhS,KAAA,SACA2iB,MAAA,kBACA4/F,YAAAp1G,GAEAs5J,UAAAt5J,GAAAiyB,OAGA,OAAAhkC,GAAAo4B,GAQA,QAAAkzI,UAAA3mJ,GACAhnB,KAAA4tK,QAAA5mJ,EAAA6O,KA9/DA,GAAA63I,YACA1iB,SAAA3kH,MAAA,UAAAuX,OAAA,KACAgE,OAAAvb,MAAA,QAAAuX,OAAA,KACAqkE,UAAA57E,MAAA,WAAAuX,OAAA,MACA70C,MAAAs9B,MAAA,OAAAuX,OAAA,OAIA+Z,YAAAgQ,MAAAskF,KAAAt0F,WAAAgQ,MAAA9sC,OAEA,SAAAx4B,GAi0BA,QAAAwrK,GAAAl4I,GACA,GAAAzJ,GAAA7pB,EAAAszB,GAAAzhB,KAAA,kBAEA,OAAA,IAAAgY,EAAAhrB,OACAgrB,EAAA1a,QAEA,KAGA,QAAAs8J,GAAA9lI,GAMA,QAAA+lI,GAAA3pK,GAEA,GADA0pC,MAAA1pC,EAAAnC,MAAA,oBACA6rC,MAAA,CAEA,IAAA,GADAlpC,GAAAR,EAAAnC,MAAA,aACA9B,EAAA,EAAAA,EAAA2tC,MAAA5sC,OAAAf,IAAA,CACA,GAAAW,GAAAgtC,MAAA3tC,GAAAoQ,MAAA,QACAu9B,OAAA3tC,GAAAW,EAAA,GAAAS,cAAA,IAAAT,EAAA,GAEA,MAAA8D,GAAA,GAAAkpC,MAAAp8B,OAAA1C,KAAA,KAAA,IAEA,MAAA5K,GAGA,GAAA2E,GAAA1G,EAAAA,EAAAy1B,GAAA2C,IAAAuN,IAAAj/B,OACAwzH,IACA,OAAAxzH,GAAA7F,QAAA,yBAAA,SAAAxD,GACA,GAAAsuK,EACA,OAAA,UAAAtuK,GACAsuK,EAAAzxC,EAAA/nH,MACAw5J,EAAA,KAAAtuK,EAAA,KAAAA,IAEAsuK,EAAA,MAAAtuK,EAAAuC,MAAA,sBACAs6H,EAAA31H,KAAAonK,GACAA,EAAA,KAAAD,EAAAruK,GAAA,KAAAA,KAEAiD,MAAA,GAx2BA,GACAsrK,GAAA,KAGA3zI,GAQAC,MAAA,SAAAvT,GAEA,MADAA,GAAAA,MACAhnB,KAAAgC,KAAA,WA6KA,QAAAukJ,GAAA5pI,GACA,GAAApJ,GAAA6H,EAAA1K,KAAAiM,EACApJ,KACAoiC,EAAAh5B,GAAApJ,GA/KA,GAGA26J,GAAA9yJ,EAHA3N,EAAApL,EAAArC,MACA21C,KACAjlC,IAGAjD,GAAAoc,SAAA,YACApc,EAAAoc,SAAA,wBA4BApc,EAAAoW,OAAAqqJ,EAAA7rK,EAAAy1B,GAAA2C,KACA7Q,MAAA,cACAo7I,YAAA,QAAA,SAAA,cAAA,WACAhiC,MACAgiC,YAAA,OAAA,OAAA,YAAA,WACAA,YAAA,QAAA,QAAA,mBAAA,WACAhiC,MACAgiC,YAAA,aAAA,KAAA,eAAA,WACAA,YAAA,eAAA,OAAA,iBAAA,WACAhiC,MACAgiC,YAAA,OAAA,cAAA,oBAAA,WACAhiC,MACAgiC,YAAA,QAAA,YAAA,yBAAA,WACAA,YAAA,OAAA,UAAA,kBAAA,WACAA,YAAA,SAAA,WAAA,WAAA,WACAA,YAAA,aAAA,aAAA,cAAA,aAEAv3J,EAAAoW,OA3CA,WACA,GAAA+tB,GAAAvvC,EAAAy1B,GAAAoD,MAAAtR,MAAA,sCAsBA,OArBAoc,MAAAsL,QAAAK,eACAC,GACAC,SAAA,gCACAC,QAAA,aACAG,OAAAxkC,EACAskC,SACAo8H,cAAA,WAAAnuK,KAAA25H,SAAA,WACAy0C,YAAA,WAAApuK,KAAA25H,SAAA,SACA00C,aAAA,WAAAruK,KAAA25H,SAAA,UACA20C,eAAA,WAAAtuK,KAAA25H,SAAA,OACA40C,iBAAA,WAAAvuK,KAAA25H,SAAA,SACA60C,cAAA,WAAAxuK,KAAA25H,SAAA,gBACA80C,KAAA,kBACAC,YAAA,WAAA1uK,KAAA25H,SAAA,cACAg1C,KAAA,WAAA3uK,KAAA25H,SAAA,YACAi1C,SAAA,WAAA5uK,KAAA25H,SAAA,aACAk1C,MAAA,mBACAC,kBAAA,WAAA9uK,KAAA25H,SAAA,cAAA,WAyBAlsH,EAAAoW,OAAAxhB,EAAAy1B,GAAA2C,KAAA7Q,MAAA,UAAAlR,SAAA,MACA0C,EAAA/Y,EAAAy1B,GAAA2C,KAAA7Q,MAAA,eACAvnB,EAAAy1B,GAAA2C,KAAA7Q,MAAA,gBAEAvnB,EAAA6rK,GAAA1qJ,GAAA,QAAA,QAAA,SAAAyR,GACA,GAAAkc,GAAA9uC,EAAA4yB,EAAA9c,QAAAsC,QAAA,KAAA/J,KAAA,SAGA,OAFAjD,GAAAksH,SAAAxoF,GACAlc,EAAA/U,kBACA,IAGA7d,EAAA+Y,GAAAoI,GAAA,QAAA,yBAAA,SAAAyR,GACA,GAAA9wB,GAAA9B,EAAA4yB,EAAA9c,QAAAsC,QAAA,KACAob,EAAA1xB,EAAAsW,QAAA,YAEA02B,EAAAhtC,EAAAuM,KAAA,SAGA,OAFAmlB,GAAAE,OAAAob,GACAlc,EAAA/U,kBACA,IAGA7d,EAAA+Y,GAAAoI,GAAA,wBAAA,iBAAA,SAAAyR,GAQA,QAAA85I,KACA90J,EAAAhN,SACA+hK,EAAA96J,KAAA,iBAAA5P,IAAA,mBAAA,QACAoM,EAAAu+J,WAAA,OAVA,GAAAD,GAAA3sK,EAAA4yB,EAAA9c,QAAAsC,QAAA,WAEA,IAAA,cAAAwa,EAAAhuB,KAAA,CACA,GAAAgT,GAAAwzJ,sBAEAuB,GAAA96J,KAAA,iBAAA5P,IAAA,mBAAA,QAQA2V,EAAA2D,OACAoxJ,EAAAnrJ,OAAA5J,GACAvJ,EAAAu+J,WAAA,UACA3jK,WAAA,WACA0jK,EAAA96J,KAAA,UAAAhT,OAAA,GACAwP,EAAAu+J,WAAA,UACAh1J,EAAAuJ,GAAA,aAAAurJ,GACA90J,EAAAwO,OAAA,MAEAsmJ,KAEA,SAEA,WAAAr+J,EAAAu+J,YACAD,EAAA96J,KAAA,iBAAA5P,IAAA,mBAAA,UAIAjC,EAAA+Y,GAAAoI,GAAA,QAAA,gBAAA,SAAAyR,GACAA,EAAA/U,gBACA,IAAAjZ,GAAA5E,EAAA4yB,EAAA9c,QAAAzH,KAAA,QACAs+J,EAAA3sK,EAAA4yB,EAAA9c,QAAAsC,QAAA,YACAkb,EAAAq5I,EAAAv0J,QAAA,aACAob,EAAAxzB,EAAAy1B,GAAA2C,KAAA7Q,MAAA,WAYA,OAVAolJ,GAAAl2J,SAAAkR,SAAA,kBACA2L,EAAAzhB,KAAA,eAAAzH,QAAAoX,OAAAgS,IAEAm5I,EAAA96J,KAAA,mBAAAjH,SACA+hK,EAAA/qJ,MAAA4R,IAEAxzB,EAAAwzB,GAAAE,QAAA9uB,KAAAA,IACA0uB,EAAAgkG,SAAA,YACAhkG,EAAAgkG,SAAA,SAAAt3H,EAAAwzB,IAAA,IAEA,IAGApoB,EAAA2c,QAAA,SAAA6K,GACA,GAAAY,GAAAxzB,EAAA4yB,EAAA9c,QAAAsC,QAAA,WACAob,GAAA30B,OAAA,EACAuM,EAAAksH,SAAA,SAAA9jG,GACAxzB,EAAA4yB,EAAA9c,QAAAsC,QAAA,YAAAvZ,OAAA,GACAuM,EAAAyG,KAAA,eAAArM,SAAA,mBACAkuB,OAAA,UAAA,KAGAtoB,EAAAyhK,SAAA,SAAAj6I,GACA5yB,EAAA4yB,EAAA9c,QAAAsC,QAAA,aAAA,IAAAhN,EAAA,IACAA,EAAAyG,KAAA,eAAArM,SAAA,mBACAkuB,OAAA,UAAA,KAOAtoB,EAAA+V,GAAA,eAAA,SAAAyR,GACA,GAAAA,EAAA9c,QAAA1K,EAAA,GAAA,CACA,GAAA0hK,GAAA1hK,EAAAyG,KAAA,eACArM,SAAA,oBACAunK,EAAAD,EAAAttK,OAAA,WACAwtK,EAAAD,EAAA,IAAAD,EAAA,EAEAE,IACAhtK,EAAAgtK,GAAAn7J,KAAA,kBAAA4hB,aAAA,eAEAb,EAAA9U,qBAKA1S,EAAA+V,GAAA,mBAAA,SAAAyR,EAAA8C,GACA,GAAAA,GACA11B,EAAA4yB,EAAA9c,QAAAsC,QAAA,YAAAsb,OAAA,iBAAA,YAIAtoB,EAAAiD,KApLA,WAoLAA,EAGA,IAAA0K,GAAA3N,EAAAyG,KAAA,iBACA,IAAA8S,EAAAzT,MACA9F,EAAAksH,SAAA,QAAA3yG,EAAAzT,WACA,IAAA6H,EAAAla,OAAA,EAAA,CAQAqlJ,EAAA,QACAA,EAAA,OACAA,EAAA,SACAA,EAAA,QACAA,EAAA,WACAA,EAAA,QAEA,IAAA9xH,GAAAhnB,EAAAkoC,QAAA,YAAAxhB,GAAAwhB,GACA25H,EAAAz7I,YAAAc,UACAF,EAAA,aACA3B,OAAAC,MAAA4mG,SAAA21C,WAEA7hK,GAAAksH,SAAA,QAAAv+G,EAAA7a,QACA+uK,WAAAA,IAEAl0J,EAAAnO,aAEAQ,GAAAksH,SAAA,cAGAlsH,GAAAksH,SAAA,eAAAhkF,GACAloC,EAAA+V,GAAA,gBAAA,SAAAyR,EAAAyyF,GACA,GAAArlH,EAAA4yB,EAAA9c,QAAA6R,SAAA,iBAGA,MAFAvc,GAAAksH,SAAA,iBACA1kG,EAAA9U,mBACA,IAGA1S,EAAA+V,GAAA,aAAA,SAAAyR,EAAA/K,GACA2J,YAAAW,UAAAC,EAAA,aAAAvK,QASAqlJ,OAAA,SAAA15I,GASA,MARAA,GAAAA,GAAAg4I,EAAA7tK,MACA61B,IACA71B,KAAA25H,SAAA,SACA9jG,EAAAE,OAAA,SAAAF,EAAAE,OAAA,SACAF,EAAAE,OAAA,SACA/1B,KAAA25H,SAAA,sBAEA35H,KAAA25H,SAAA,iBACA35H,MAGAiuF,KAAA,SAAAp4D,GAEA,GADAA,EAAAA,GAAAg4I,EAAA7tK,MACA,CACA,GAAAgoC,GAAA3lC,EAAAy1B,GAAA2C,KAAA7Q,MAAA,YACAvnB,GAAA2lC,GAAAnkB,OAAAxhB,EAAAwzB,GAAAE,OAAA,YACA1zB,EAAA2lC,GAAA9zB,KAAA,YAAAmV,WAAA,QACA4kJ,EAAAH,EAAA9lI,KAIA24D,MAAA,SAAApgG,GACA,GAAAo1B,GAAA31B,IAGA,IADAO,EAAAA,GAAA0tK,EACA,CACA,GAAAjmI,GAAA3lC,EAAAy1B,GAAA2C,KAEAp4B,GAAA2lC,GAAAj/B,KAAAxI,EAEA,IADA8B,EAAA2lC,GAAA9zB,KAAA,YACAhT,OAAA,EAOA,MANAmB,GAAA2lC,GAAA9zB,KAAA,YAAAlS,KAAA,WACA2zB,EAAAgkG,SAAA,UACAzsB,MAAA,QACAsiE,QAAAntK,EAAArC,UAGAA,IAEA60B,OAAAtB,MAAA,4BAGAsB,OAAAtB,MAAA,uBAIAumE,GAAA,SAAAjkE,GAMA,MALAA,GAAAA,GAAAg4I,EAAA7tK,MACA61B,IACAA,EAAA9R,aAAA8R,EAAAE,OAAA,SACA/1B,KAAA25H,SAAA,kBAEA35H,MAGAyvK,KAAA,SAAA55I,GAMA,MALAA,GAAAA,GAAAg4I,EAAA7tK,MACA61B,IACAA,EAAAvR,YAAAuR,EAAAE,OAAA,SACA/1B,KAAA25H,SAAA,kBAEA35H,MAGA0vK,YAAA,WACA,MAAA1vK,MAAA25H,SAAA,UAAAzsB,MAAA,WAGAyiE,YAAA,WASA,MARA,IAAA3vK,KAAA25H,SAAA,UAAAzsB,MAAA,QAAA0iE,YAAA,KACA/6I,MAAAtB,MAAA,oLAOAvzB,MAGA6vK,YAAA,WAKA,OAJAC,gBAAA9vK,KAAAgqB,SAAA,mBACA+lJ,YAAA/vK,KAAAgqB,SAAA,iBAMAyuB,SAAA,WAIA,QAAAu3H,KACAhwK,KAAA6jB,OAAAxhB,EAAAy1B,GAAAkO,MACApc,MAAA,mBAEAoc,KAAAiJ,OAAAkB,aACAxzB,KAAA,kBACA0pB,MAAA,0BACA9yB,MAAA4kD,EAAA23G,gBACA90I,MAAA,6BAEAhd,IAAA,EAAAqoB,MAAA,iBACAL,KAAAiJ,OAAAkB,aACAxzB,KAAA,cACA0pB,MAAA,sBACA9yB,MAAA4kD,EAAA43G,YACA/0I,MAAA,yBAEAhd,IAAA,EAAAqoB,MAAA,wBACAL,KAAAiJ,OAAA1sB,SACA8jB,MAAA,QACApV,OAAA,EACAkgB,OAAA,SAAAlc,EAAA6sB,GACA,QAAAlnB,GAAA6T,EAAA9S,GACAmmB,EAAArT,IAAA0pB,EAAA1pB,KACAqT,EAAArT,GACAnT,EAAAzR,SAAA8R,GAEAL,EAAAxR,YAAA6R,IAIAf,EAAA,cAAA,eACAA,EAAA,kBAAA,mBAEAU,EAAAq+F,SAAA,sBArCA,GAAAr+F,GAAAt7B,KACAm4D,EAAAn4D,KAAA,SAAA,cAyCAgmC,MAAA4I,YAAA5T,MAAA,2BACA/1B,KAAA+qK,KAIAniK,IAAA,SAAAgoB,IACAA,EAAAA,GAAAg4I,EAAA7tK,QAEA61B,EAAAE,OAAA,QAUAu5I,WAAA,SAAAplJ,EAAA6lJ,GAMA,OALA57I,IAAAjK,IACAA,GAAAlqB,KAAAgqB,SAAA,mBACAmK,IAAA47I,IACAA,EAAA/vK,KAAAgqB,SAAA,gBAEAE,EAAA,CACA,GAAA+lJ,GAAAjwK,KAAAya,QAAA,mBACA6iC,EAAA,GAAA2yH,EAAA/uK,OAAA+uK,EAAAjwK,IACAqC,GAAA,cAAA0wB,MAAA,aAAAuqB,EAAAt9C,KAAA+vK,OAEA1tK,GAAA,cAAA0wB,MAAA,iBAGA,OAAA/yB,OAGAkwK,SAAA,SAAAr6I,EAAA5uB,IACA4uB,EAAAA,GAAAg4I,EAAA7tK,QAEA61B,EAAAE,OAAA,OAAA9uB,IAOA++E,aAAA,WACA,MAAAhmF,MAAA25H,SAAA,mBACAzlH,KAAA,kBACA4hB,aAAA,iBAGAuwD,iBAAA,SAAAnyD,GACA,MAAAl0B,MAAA25H,SAAA,mBACAzlH,KAAA,kBACA4hB,aAAA,mBAAA5B,IAQAi8I,cAAA,WACA,MAAAnwK,MAAAgC,KAAA,WACA,GAAA2zB,GAAAtzB,EAAArC,MACAqiD,EAAA1sB,EAAAjlB,KAAA,WACAg3G,EAAArlE,EAAA4oD,iBAAAt1E,EAAAgkG,SAAA,YAEAhkG,GAAAgkG,SAAA,YAAAjS,GACA/xF,EAAAgkG,SAAA,eASAttB,UAAA,SAAAqb,GACA,MAAA1nH,MAAAgC,KAAA,WACA,GAAA2zB,GAAAtzB,EAAArC,MACA0Q,EAAAilB,EAAAjlB,KA7bA,WA+bAA,GAAAg3I,iBAAAhgC,IACAh3G,EAAAg3I,gBAAAhgC,EACA/xF,EAAA/U,QAAA,gBAAA8mG,IAGAA,GACA/xF,EAAAzhB,KAAA,kBAAA4hB,aAAA,iBAcA5J,OAAA,SAAA2J,EAAAtd,GAIA,QAAA63J,GAAA3iK,GACAA,EAAAyG,KAAA,sCACA4V,YAAA,iBALA,GAAA+L,EAAA,CACA,GAAAsiC,GAAAn4D,KAAAkU,KAAA,8BAOA,IAAA,GAAA2hB,EAAA30B,QACA,IAAA,GAAAi3D,EAAAj3D,QAAA20B,EAAA,IAAAsiC,EAAA,MACAi4G,EAAApwK,MACAm4D,EAAApiC,OAAA,UAAA,GACAF,EAAAE,OAAA,UAAA,GACAxd,GAAA,CACA,GAAA88E,GAAAx/D,EAAA3hB,KAAA,iBAEAmhF,GAAAn0F,OAAA,EACAm0F,EAAAv/D,aAAA,SAEAD,EAAAtd,aAIA63J,GAAApwK,MACAm4D,EAAApiC,OAAA,UAAA,KAeA40D,OAAA,SAAA3jE,GACAA,EAAAA,KACA,IAGAqpJ,GAHA91H,EAAAszH,EAAA7tK,MACA61B,EAAA7O,EAAA6O,MAAAxzB,EAAAy1B,GAAA2C,KAAA7Q,MAAA,YACA1H,EAAAliB,KAAAkU,KAAA,WAQA,IALA8S,EAAA4oJ,YACA1tJ,EAAAhO,KAAA,6BAAAhT,OAAA,IACAmvK,EAAAnuJ,EAAA,GAAAwE,yBAGA6zB,EACA,GAAA,SAAAvzB,EAAAkmF,MAAA,CACA,GAAAmjE,EAAA,CACA,GAAAC,GAAA/1H,EAAA,GAAA7zB,wBAAA5Q,GACA,IAAAw6J,EAAAD,EAAAv6J,IACA,OAAA,EAEAzT,EAAAwzB,GAAA9R,aAAAw2B,OACA,CACA,GAAA81H,EAAA,CACA,GAAAE,GAAAh2H,EAAA,GAAA7zB,wBAAA2c,MAEA,IAAAktI,EAAAF,EAAAhtI,OAAA,GACA,OAAA,EAEAhhC,EAAAwzB,GAAAvR,YAAAi2B,OAEA,CACA,GAAAn/B,GAAApb,KAAAkU,KAAA,cAEA,IAAAm8J,EAAA,CAGA,GAFAj1J,EAAA,GAAAsL,wBAAA2c,OAEAgtI,EAAAhtI,OAAA,GACA,OAAA,EAEAjoB,EAAAyI,OAAAgS,GAWA,MARA7O,GAAA6O,MACAxzB,EAAAwzB,GAAAE,OAAA/O,EAAAwoJ,SAEAntK,EAAAwzB,GAAAE,OAAA,cACA/1B,KAAA25H,SAAA,qBACA35H,KAAA25H,SAAA,SAAAt3H,EAAAwzB,IACA71B,KAAA25H,SAAA,iBAEA35H,MAOAwwK,SAAA,WACA,GACAp1J,GAAApb,KAAAkU,KAAA,cACAkH,GAAAvT,SAAA,YAGA7F,KAAA,WACA,GAAA6zB,GAAAxzB,EAAArC,KAEA61B,GAAArb,OAAAwP,SAAA,YACA6L,EAAA7R,OAAAwpJ,iBACA33I,EAAApiB,OAAAuW,SAAA,YACA6L,EAAA5R,MAAAupJ,mBAIApyJ,EAAAvT,SAAA,YAAA7F,KAAA,WACA,GAAAkwC,GAAA7vC,EAAArC,KACAkyC,GAAAz+B,OAAAuW,SAAA,YACAkoB,EAAAjlC,YAWAo9I,aAAA,SAAA10G,GACA,GAAAgkF,GAAA35H,IAyBA,OAvBA21C,GAAAtzC,EAAAiG,OAAAqtC,GACA0uD,SAAA,WACA,MAAAs1B,GAAAA,SAAA,UAEAzuB,SAAA,SAAAxtF,GACA,MAAAi8G,GAAAA,SAAA,YAAAj8G,IAEAw6G,UAAA,WACA,MAAAyB,GAAAA,SAAA,cAEAntB,QAAA,SAAAC,GAEA,MAAAA,IADAktB,EAAAA,SAAA,cAGAttB,UAAA,SAAAqb,GACAiS,EAAAA,SAAA,YAAAjS,IAEAzc,gBAAAjrG,KAAA25H,SAAA,aACArwH,UAAAtJ,KAAA25H,SAAA,SACAxB,gBAAA,OACAnR,SAAA,aAGAhnH,KAAA21C,QAAAA,IAMA8yE,UAAA,SAAA/qG,GACA,gBAAA,KACAA,GAAAhN,KAAAgN,IAEA1d,KAAA25H,SAAA,QAAAj8G,EAAAhN,OAcA6C,MAAA,SAAA2W,EAAAlD,GAGA,GAFAA,EAAAA,UAEAmN,IAAAjK,EAAA,CACA,GAAAi7B,GAAAnlD,KAAA,SAAA,aACAmlD,GAAA71C,QAAA,WACA,IAAA04B,GAAA3lC,EAAAy1B,GAAA2C,KAAA7Q,MAAAu7B,EAAAn2C,KAAA,MASA,OAPAhP,MAAA25H,SAAA,mBAAA,GACA35H,KAAAkU,KAAA,YAAAlS,KAAA,WACA6zB,KAAAxzB,EAAArC,MACAgnB,EAAAypJ,WAAA56I,KAAAE,OAAA,YACA1zB,EAAA2lC,GAAAnkB,OAAAgS,KAAAE,OAAA,cAGA+3I,EAAA9lI,GAEA,GACA5sB,GAAApb,KAAAkU,KAAA,eACA8zB,EAAA3lC,EAAAy1B,GAAA2C,MACAi2I,EAAA,GAAAt1J,EAAAvT,SAAA,YAAA3G,MAEAka,GAAArS,KAAA,IACAi/B,EAAA1hC,UAAA4jB,CACA,IAAAymJ,GAAAtuK,EAAA2lC,GAAA9zB,KAAA,eAEAlU,MAAA8pB,YAAA,0BACA6mJ,EAAA3mJ,SAAA,oBACAhD,EAAAsoJ,YAAA,EACAtvK,KAAA6pB,SAAA,oBACA8mJ,EAAA3mJ,SAAA,gBACAhD,EAAAsoJ,YAAA,EACAtvK,KAAA8pB,YAAA,eAEA6mJ,EAAA3mJ,SAAA,iBACAhD,EAAA+oJ,aAAA,EACA/vK,KAAA6pB,SAAA,gBAGA6mJ,GAAA1pJ,EAAAsoJ,YACAtvK,KAAA25H,SAAA,cAAA,EAAA3yG,EAAA+oJ,aAGA1tK,EAAA2lC,GAAA9zB,KAAA,YAAAlS,KAAA,WACA,GAAA6zB,GAAAxzB,EAAAy1B,GAAA2C,KAAA7Q,MAAA,WACAxO,GAAAyI,OAAAgS,GACAxzB,EAAAwzB,GAAAE,OAAA1zB,EAAArC,SAGAA,KAAAkU,KAAA,YAAA6hB,OAAA,UACA/1B,KAAA25H,SAAA,UAAA,UACA35H,KAAA25H,SAAA,qBACA35H,KAAA25H,SAAA,mBAAA,GACA35H,KAAA25H,SAAA,aAOAi3C,WAAA,WAKA,IAAA,GAJArvG,GAAAvhE,KAAA+W,KAAA,SAAAxG,MAAA,KACA40C,KACA0rH,GAAA,kBAAA,eAEA1wK,EAAA,EAAAA,EAAAohE,EAAArgE,OAAAf,IACA0wK,EAAAhgK,QAAA0wD,EAAAphE,KAAA,GACAglD,EAAAv+C,KAAA26D,EAAAphE,GAGA,OAAAglD,GAAAzzC,QAOAwmH,UAAA,WACA,GAAA1nF,GAAAxwC,KAAA,SAAA,aAKA,OAJAA,MAAAkU,KAAA,YAAAlS,KAAA,WACA,GAAA8uK,GAAAzuK,EAAArC,MAAA+1B,OAAA,YACAya,GAAA5pC,KAAAkqK,KAEA1D,KAAA58H,EAAAxhC,SASA+hK,gBAAA,SAAAhwD,GAIA,MAHA/gH,MAAAkU,KAAA,YAAA6hB,OAAA,cACA,GAAAgrF,GACA/gH,KAAA25H,SAAA,iBACA35H,MAQAgxK,kBAAA,WACA,GAAAhxK,KAAAkU,KAAA,eAAAA,KAAA,YAAAhT,OACAlB,KAAA25H,SAAA,eAEA35H,KAAAkU,KAAA,mBAAAjH,UAGA2rI,YAAA,WACA,GAGAz0I,GAHA+tC,EAAAs7H,gBACAvzJ,EAAAwzJ,uBACAz/H,EAAA3rC,EAAAy1B,GAAA2C,KAAA7Q,MAAA,kBAeA,OAZAvnB,GAAA6vC,GAAAruB,OAAA5J,GACA+zB,EAAAnqB,OACAquB,EACA7vC,EAAAy1B,GAAA2C,KAAA7Q,MAAA,WACA,+BACAzlB,EAAA9B,EAAAy1B,GAAA3zB,EAAA,aACA,MACA9B,EAAA8B,GAAAqf,GAAA,QAAA,WACAnhB,EAAA,yBAAAue,QAAA,QAAApH,KAAA,oBAEAxZ,KAAAkU,KAAA,eAAA2P,OAAAmqB,GAEAhuC,MAMAixK,QAAA,SAAAt2C,GAYA,QAAAsC,GAAA2pB,GACA,OAAAA,EAAAp2I,OACA,IAAA,QACA,IAAA,UACA,OAAA,EAGA,OAAA,EAlBA,GAAA0gK,KAqBA,IAnBAv2C,EAAAA,GAAA,MAEA36H,KAAA25H,SAAA,aAEA35H,KAAAkU,KAAA,kBAAAlS,KAAA,WACA,OAAA24H,GAAAt4H,EAAArC,MAAA0Q,KAAA,QAAAiqH,GACAu2C,EAAAtqK,KAAA5G,QAaAkxK,EAAAhwK,OAAA,EAAA,CACAgwK,EAAA/4G,QAAA,CACA,IAAAvpD,GAAA,SAAAg4I,GACA3pB,EAAA2pB,MACAsqB,EAAA/4G,QAAA+4G,EAAAhwK,QACAmB,EAAA6uK,EAAAA,EAAA/4G,UAAApiC,OAAA,OACAnnB,SAAAA,IAKAvM,GAAA6uK,EAAA,IAAAn7I,OAAA,OACAnnB,SAAAA,MAQAuiK,UAAA,WACAnxK,KAAAkU,KAAA,kBAAA+0G,aAAA,UAsDApC,QAAAC,SAAA6S,UACArpH,SAAA,QACA02G,SAAA,WACA3gF,MAAA,WACA3Z,YAAA,yBACAxG,MAAA,IACA0zC,OAAA,SAAA5xB,EAAAhhB,GACA3kB,EAAA2lC,GAAA2xF,SAAA3yG,KAeA3kB,EAAA4O,GAAA0oH,SAAA,SAAA5rG,GACA,MAAAuM,GAAAvM,GACAuM,EAAAvM,GACArrB,MAAA1C,KAAAmN,MAAAnC,UAAArI,MAAA3B,KAAAwG,UAAA,IACA,gBAAAumB,IAAAA,MAGA1rB,GAAAoO,MAAA,UAAAsd,EAAA,sCAFAuM,EAAAC,MAAA73B,MAAA1C,KAAAwH,aAKAkrB,QAMA,SAAArwB,GAk9BA,QAAA+uK,UAAAv7I,GACA,MAAAA,GAAA3hB,KAAA,WAAA4hB,aAAA,gBAAA3B,IAAA,GAOA,QAAAk9I,mBACA,GAAArrI,GAAA3jC,EAAA,kCAiBA,OAfA2jC,GAAAxiB,GAAA,SAAA,SAAAyR,GACA,GAAAk/D,GAAA,GAAAJ,WAWA,OAVAI,GAAAtkE,OAAA,SAAAyhJ,GACA,GAAAz7I,GAAAxzB,EAAA4yB,EAAA9c,QAAAsC,QAAA,WACAob,GAAApb,QAAA,aAEAk/G,SAAA,QAAAxlC,EAAAl0E,SACA4V,EAAA5oB,UAEAknF,EAAAE,WAAAp/D,EAAA9c,OAAA4+C,MAAA,IAEA9hC,EAAA/U,kBACA,IAGA8lB,EAGA,QAAAurI,YACA,GAAA92I,GAAAp4B,EAAA,oDAQA,OALAo4B,GAAAvmB,KAAA,KAAAsP,GAAA,QAAA,SAAAyR,GACA,GAAA4xI,GAAAxkK,EAAA4yB,EAAA9c,QAAAsC,QAAA,aACAosJ,GAAAjpJ,KAAA,KACAipJ,EAAApzJ,OAAAkK,KAAA,OAEA8c,EAAA,GAGA,QAAA+2I,YAIA,IAAA,GAHA/2I,GAAAp4B,EAAA,kGAGAlC,EAAA,EAAAA,EAAAqH,UAAAtG,OAAAf,IACAs6B,EAAA5W,OAAArc,UAAArH,GAQA,OANAs6B,GAAAvmB,KAAA,UAAAsP,GAAA,QAAA,SAAAyR,GACA,GAAAw8I,GAAApvK,EAAA4yB,EAAA9c,QAAAsC,QAAA,aACAg3J,GAAA7zJ,KAAA,KACA6zJ,EAAAj3J,OAAAmD,KAAA,OAGA8c,EAAA,GAvgCA,GAAAqqF,YAAA,SACAtyG,GAAA,EAGA8nB,SAMAC,MAAA,SAAAvT,GACA,MAAAhnB,MAAAgC,KAAA,WACA,GAAAyL,GAAApL,EAAArC,MACA0Q,IAOA,IAJAjD,EAAAiD,KAAAo0G,WAAAp0G,GACAjD,EAAAsJ,KAAA,YAAA,GACAtJ,EAAAsJ,KAAA,KAAA,MAAAvE,MAEAwU,YAAA0L,QACAjlB,EAAAsoB,OAAA,aAAA/O,OACA,IAAAA,GAAAA,EAAA/f,KACAwG,EAAAsoB,OAAA,OAAA/O,EAAA/f,UACA,CACA,GAAAu1B,GAAAwoI,YAAA,gBAAA,QAAA,QACA,UAAA,KACAv3J,GAAAoW,OAAA2Y,GACAn6B,EAAAm6B,GAAA3S,SAAA,gBACAxnB,EAAAm6B,GAAAhZ,GAAA,QAAA,WACA/V,EAAAsoB,OAAA,UAGA,IAAA9b,GAAAwzJ,sBACAhgK,GAAAoW,OAAA5J,GAEAA,EAAA/F,KAAA,cAAAsP,GAAA,QAAA,OAAA,SAAAyR,GACAxnB,EAAAsoB,OAAA,OAAA1zB,EAAA4yB,EAAA9c,QAAAzH,KAAA,WAGAjD,EAAAoW,OAAAxhB,EAAAy1B,GAAA2C,KAAA7Q,MAAA,gBACA2nJ,WACAC,SAAAnvK,EAAAy1B,GAAAuO,MAAA,oCAEAgrI,kBAAA,UAQAnlJ,OAAA,SAAAhC,GACA,MAAAlqB,MAAAgC,KAAA,WACA,GAAAyL,GAAApL,EAAArC,MACA0Q,EAAAjD,EAAAiD,KAAAo0G,WAEA,IAAA56F,EAEA,OADAzc,EAAAoc,SAAA,UACAnZ,EAAAzJ,MACA,IAAA,UACAwG,EAAAyG,KAAA,WAAA4hB,aAAA,cACA,MACA,KAAA,QACA,GAAA47I,GAAAjkK,EAAAsoB,OAAA,OAAA,WACA27I,IACAA,EAAAx9J,KAAA,WAAA4hB,aAAA,eACAroB,EAAAgN,QAAA,aACAvG,KAAA,oBACA6D,IAAAtK,EAAAsoB,OAAA,kBACAlM,SAAA,qBAGA,IAAApc,EAAAvM,OAAA,EAEA,OADAuM,EAAAqc,YAAA,UACApZ,EAAAzJ,MACA,IAAA,WACA,IAAA,OACAwG,EAAAuc,SAAA,aACAvc,EAAAsoB,OAAA,WAcAtiB,KAAA,SAAAygB,GACA,GAAAzgB,GAAAzT,KAAA+a,QAAA,YAAAmZ,GAAA,KAAA1iB,OACA,OAAAiC,GAAAvS,OAAAuS,EAAA,MAGA+G,KAAA,SAAA0Z,GACA,GAAA1Z,GAAAxa,KAAA2a,QAAA,YAAAuZ,GAAA,KAAA1iB,OACA,OAAAgJ,GAAAtZ,OAAAsZ,EAAA,MAGAm3J,eAAA,SAAAzkE,GACA,GAAAp3F,GAAA9V,KAAA6kB,WAAA/O,IACAoM,EAAAliB,KAAAya,QAAA,YACAjM,EAAA0T,EAAAkF,YACAwqJ,EAAA1vJ,EAAAnW,QAEA+J,GAAAtH,GACAsH,EAAA9V,KAAA+L,SAAAyC,EAAAojK,IAGA,OAAA1kE,IACAp3F,EAAAA,EAAA9V,KAAA+L,SAAA6lK,EAAA,IAGA5xK,KAAA+1B,OAAA,UAAA,GACA7T,EAAAkF,UAAAtR,KAGA7O,KAAA,SAAAA,GACA,GAAAyJ,GAAA1Q,KAAA0Q,KAAAo0G,WAQA,OAPAp0G,GAAAzJ,MAAAA,IACAqzB,QAAArzB,KAAAA,GAAAvE,MAAA1C,MACA0Q,EAAAzJ,KAAAA,EACAjH,KAAA6pB,SAAA5iB,GACAjH,KAAAqpB,WAAA,QACArpB,KAAA+1B,OAAA,eAEA/1B,MAOA6xK,WAAA,WACA,MAAA7xK,MAAAgC,KAAA,WACA,GAAA6zB,GAAAxzB,EAAArC,KAEA,KAAA61B,EAAA9e,KAAA,QAAA,CACA,GAAArG,GAAAmlB,EAAAnlB,KAAAo0G,WACA,IAAAp0G,EAAAzJ,KAAA,CACA,GAAA22C,GAAA8vH,UAAAh9J,EAAAzJ,MAAA22C,OACAjoB,EAAAE,EAAApb,QAAA,YAEA,KAAAta,EAAA,GAAAA,IAAA,CACA,GAAAwc,GAAAihC,EAAAz9C,CACA,IAAA,GAAAw1B,EAAAzhB,KAAA,UAAAyI,EAAA,KAAAzb,OAAA,CACA20B,EAAA9e,KAAA,OAAA4F,EACA,cAWA9O,IAAA,WACA,GAAAyuC,GAAA90C,SAEA,OAAAxH,MAAAgC,KAAA,WACA,GAAA6zB,GAAAxzB,EAAArC,KACA,IAAA61B,EAAA7L,SAAA,YAAA,CACA,GAAAtZ,GAAAmlB,EAAAnlB,KAAAo0G,WAEA,OAAAxqF,SAAAzsB,IAAA6C,EAAAzJ,MAAAvE,MAAAmzB,EAAAymB,GAEA7/B,QAAAqe,IAAA,yBAAAjF,MAKAi8I,UAAA,WACA,MAAA9xK,MAAA+1B,OAAA,OAAAgyI,QAAA,KAGAl4I,OAAA,WACA,GAAAysB,GAAA90C,SAUA,OARAxH,MAAAgC,KAAA,WACA,GAAA6zB,GAAAxzB,EAAArC,MACA0Q,EAAAmlB,EAAAnlB,KAAAo0G,WAEAxqF,SAAAzK,OAAAnf,EAAAzJ,OACAqzB,QAAAzK,OAAAnf,EAAAzJ,MAAAvE,MAAAmzB,EAAAymB,KAGAt8C,KAAA+1B,OAAA,YAGAyG,MAAA,WAEA,MADAx8B,MAAAkU,KAAA,kBAAA+0G,aAAA,SACAjpH,KAAAiN,UAGA23B,QAAA,WAQA,MAPA5kC,MAAAgqB,SAAA,YACAhqB,KAAAkU,KAAA,+BACA6C,KAAA,QAAA/W,KAAAgqB,SAAA,cACA,wCACA,oCAGAhqB,MAGA6vK,YAAA,WACA,OACA9H,OAAA,QAAA/nK,KAAA0Q,KAAA,UACA7C,IAAA,UAAA7N,KAAA0Q,KAAA,OACAugC,MAAAvnB,SAAA1pB,KAAA0Q,KAAA,UAAA,KACAiM,KAAA3c,KAAA+W,KAAA,UAQA0hC,SAAA,WAIA,QAAAs5H,KACA/xK,KAAA6jB,OAAAxhB,EAAAy1B,GAAAkO,MACApc,MAAA,mBAEAoc,KAAAiJ,OAAAkB,aACAxzB,KAAA,SACA0pB,MAAA,gBACA9yB,MAAA4kD,EAAA4vG,OACA/sI,MAAA,kBAEAre,KAAA,MACA0pB,MAAA,mBACA9yB,MAAA4kD,EAAAtqD,IACAmtB,MAAA,iCAEAhd,IAAA,IACAgoB,KAAAiJ,OAAAgC,MAAAknB,EAAAlnB,OACAjL,KAAAiJ,OAAAtyB,KAAAw7C,EAAAx7C,MAAA,IACAqpB,KAAAiJ,OAAA1sB,SACA8jB,MAAA,QACApV,OAAA,EACAkgB,OAAA,SAAAlc,EAAA6sB,GACAA,EAAAimH,QAAA5vG,EAAA4vG,SACAjmH,EAAAimH,OACAt6J,EAAAiD,KAAA,SAAA,QAEAjD,EAAA4P,WAAA,WAEAykC,EAAAj0C,KAAAsqD,EAAAtqD,MACAi0C,EAAAj0C,IACAJ,EAAAiD,KAAA,MAAA,UAEAjD,EAAA4P,WAAA,QAEAykC,EAAA7Q,OAAAknB,EAAAlnB,QACA,GAAA6Q,EAAA7Q,MACAxjC,EAAAiD,KAAA,QAAA,GAAAoxC,EAAA7Q,OAEAxjC,EAAA4P,WAAA,SAEA,IAAAV,GAAAmlC,EAAAnlC,KAAAmlC,EAAAnlC,KAAA1K,OAAA,EACA0K,IAAAw7C,EAAAx7C,OACAA,EACAlP,EAAAsJ,KAAA,OAAA4F,GAEAlP,EAAAsJ,KAAA,OAAA,OAEAtJ,EAAAgN,QAAA,aAAAk/G,SAAA,sBAlDA,GAAAlsH,GAAAzN,KACAm4D,EAAAn4D,KAAA+1B,OAAA,cAsDAiQ,MAAA4I,YAAA5T,MAAA,wBACA/1B,KAAA8sK,KAOAC,WAAA,WAQA,MAPAhyK,MAAA+pB,YAAA,cACA/pB,KAAAkU,KAAA,WAAA4hB,aAAA,WACAy3I,iBAAAvtK,KAAA,aACAA,KAAAgqB,SAAA,cACA,gBACA,mBACAhqB,KAAAkU,KAAA,6BAAA2M,OACA7gB,MAMAmxE,WAAA,WAKA,MAJAnxE,MAAA+pB,YAAA,cACA/pB,KAAAkU,KAAA,6BAAA2M,OACA7gB,KAAAya,QAAA,aAAAk/G,SAAA,iBACA35H,KAAA+1B,OAAA,WACA/1B,MAWAiyK,cAAA,WACA,GACAC,IADAlyK,KAAA0Q,KAAAo0G,YACA9kH,KAAAya,QAAA,aACAvG,KAAA,+BAOA,OANAlU,MAAAgqB,SAAA,WACAhqB,KAAAgqB,SAAA,gBACAkoJ,EAAAA,EAAAvqK,IAAA3H,OAEAkyK,EAAAA,EAAAvqK,IAAA3H,KAAA+1B,OAAA,OAAA,aAEAm8I,GAGAA,SAAA,WAEA,MADAlyK,MAAA+1B,OAAA,iBACA7hB,KAAA,YAGAs6C,QAAA,WACA,MAAAl0B,SAAAk0B,QAAAxuD,KAAA0Q,KAAAo0G,YAAA79G,MAAAjG,KAAAhB,OAGAmyK,QAAA,WACA,MAAA73I,SAAA63I,QAAAnyK,KAAA0Q,KAAAo0G,YAAA79G,MAAAjG,KAAAhB,OAGAoyK,WAAA,SAAApqI,GACA,GAAAt3B,GAAA1Q,KAAA0Q,KAAAo0G,WASAp0G,GAAAzJ,KAPA,SAAA+gC,GACA,IAAA,GAAA5zB,KAAAs5J,WACA,GAAAA,UAAA38J,eAAAqD,IAAA4zB,EAAAhe,SAAA5V,GACA,MAAAA,IAIA4zB,GACA1N,QAAA83I,WAAA1hK,EAAAzJ,MAAAvE,MAAA1C,KAAAwH,WACAxH,KAAA6pB,SAAAnZ,EAAAzJ,OAMAixH,UAAA,WACA,GAAAjxH,GAAAjH,KAAA0Q,KAAAo0G,YAAA79G,IAEA,OAAAA,GACAqzB,QAAA49F,UAAAjxH,GAAAjG,KAAAhB,MAEA,GAGAO,KAAA,WACA,MAAA6wK,UAAApxK,OAQAs6B,SAAArzB,KAAAg7G,SAAA,SAAAj7F,GACA,GAAA2vC,GACA9gC,EAAA71B,IAEAgnB,GAAAA,MACAA,EAAAsvC,KAAA,WACAtvC,EAAAqnH,6BAAA,EAEA,SAAA1xH,OACAwX,IAAAnN,EAAArK,KACAkZ,EAAA9e,KAAA4F,EAAA,GAAAqK,EAAArK,UACAqK,GAAArK,KAGA,QAEA3c,KAAA+I,KAAA,IACA/I,KAAA6jB,OAAA8yC,EAAAt0D,EAAAy1B,GAAA2C,KAAA7Q,MAAA,YACAvnB,EAAAs0D,GAAA7gC,aAAA9O,GACAhnB,KAAA6pB,SAAA,aAGAyQ,QAAArzB,KAAA8B,KAAA,SAAAie,GACA,GAAA2vC,GACA9gC,EAAA71B,IAEAgnB,GAAAA,MACAA,EAAAsvC,KAAA,YAEA,SAAA35C,OACAwX,IAAAnN,EAAArK,KACAkZ,EAAA9e,KAAA4F,EAAA,GAAAqK,EAAArK,UACAqK,GAAArK,KAGA,QAEA3c,KAAA+I,KAAA,IACA/I,KAAA6jB,OAAA8yC,EAAAt0D,EAAAy1B,GAAA2C,KAAA7Q,MAAA,YACAvnB,EAAAs0D,GAAA7gC,aAAA9O,GACAhnB,KAAA6pB,SAAA,aAGAyQ,QAAArzB,KAAA+jJ,QAAA,SAAAhkI,GACA,GACA2vC,GADA9gC,EAAA71B,IAGAgnB,GAAAA,MACAA,EAAA++H,aAAA,EACA/+H,EAAAw/H,UAAA,WAEA,MADA3wH,GAAAE,OAAA,YACAD,aAAA,YAAA,UAAA,IAGA91B,KAAA+I,KAAA,GAEA,IAAAwZ,GAAAlgB,EAAAy1B,GAAA2C,KACA7Q,MAAA,4BAAA0d,KAAA,SACA09H,YAAA,kBAAA,aAAA,uBACA,UAAA,MACAsI,YAAA,aAAA,4BAAA,MACAttK,MAAA6jB,OAAAtB,EACAo0C,EAAAt0D,EAAAy1B,GAAA2C,KAAA7Q,MAAA,yBACA5C,EAAAmqD,YACAnxE,KAAA6pB,SAAA,cAEA7C,EAAAgrJ,YACAhyK,KAAA+1B,OAAA,cAEA1zB,EAAAs0D,GAAA7gC,aAAA9O,IAGAsT,QAAArzB,KAAA26C,MAAA,SAAA56B,GAUA,QAAA2tE,GAAAh4E,OACAwX,IAAAnN,EAAArK,KACAkZ,EAAAnlB,KAAAiM,EAAA,GAAAqK,EAAArK,UACAqK,GAAArK,IA+BA,QAAAmuI,GAAA3mJ,GACAnE,KAAAkU,KAAA,iBAAA4hB,aAAA,eAAAzzB,EAAA8B,GAAA5D,QA5CA,GAAAo2D,GACA9gC,EAAA71B,IAEAA,MAAA+I,KAAA,IAEAie,EAAAA,UACAmN,IAAAnN,EAAA+gJ,SACA/gJ,EAAA+gJ,OAAAl0I,YAAAU,OAAA,mBAcAogE,EAAA,UACAA,EAAA,SACAA,EAAA,OARA,SAAAh4E,OACAwX,IAAAnN,EAAArK,KACAkZ,EAAA9e,KAAA4F,EAAA,GAAAqK,EAAArK,UACAqK,GAAArK,KAMA,QAEAqK,EAAA3kB,EAAAiG,UAAA0e,GACAsgB,KAAA,QACA44F,SAAA,WACA,MAAArqG,GAAAE,OAAA,YAAAD,aAAA,gBAEAu8I,YAAA,SAAA59J,GACAohB,EAAAE,OAAA,SAIA,IAAAxT,GAAAlgB,EAAAy1B,GAAA2C,KACA7Q,MAAA,4BAAA0d,KAAA,SACA09H,YAAA,SAAA,WAAA,WACA,UAAA,MACAA,YAAA,OAAA,MAAA,YACA,UAAA,OAMA9yH,EAAAlM,KAAAsL,QAAAK,eACAtvC,EAAAy1B,GAAAoD,MAAAtR,MAAA,wCACAqoB,OAAApc,EACAgc,SAAA,gBACAE,SACAugI,wBAAAxnB,EACA2jB,KAAA,KACA8D,WAAAznB,EACA0nB,WAAA1nB,EACA2nB,SAAA3nB,EACA4nB,MAAA5nB,IAIA9qJ,MAAA6jB,OAAAtB,EACAlgB,EAAAy1B,GAAA2C,KAAA7Q,MAAA,sBACAsoB,EACA7vC,EAAAy1B,GAAAoD,MAAAtR,MAAA,iBAAA,MACA+sC,EAAAt0D,EAAAy1B,GAAA2C,KAAA7Q,MAAA,mBAEAvnB,EAAAs0D,GAAA7gC,aAAA9O,GACAhnB,KAAA6pB,SAAA,aAQAyQ,QAAAzsB,IAAAo0G,SAAA,SAAA0wD,GAKA,QAAAC,GAAA39I,GACA,GAAAY,GAAAxzB,EAAA4yB,EAAA9c,QAAAsC,QAAA,YACAla,EAAAs1B,EAAAnlB,KAAA,eACAmlB,GAAAxY,WAAA,gBACAid,QAAArzB,KAAAg7G,SAAAjhH,KAAA60B,GAAAtiB,MAAAhT,IACAs1B,EAAAtuB,IAAA,WAAAqrK,GACA/8I,EAAAtuB,IAAA,QAAAw+B,MAAA1P,YAIA,QAAAw8I,GAAAniK,GAEAmlB,EAAA9sB,KAAA2H,GACAmlB,EAAA/L,YAAA,YACA+L,EAAAnlB,KAAA,eAAAiiK,GACA98I,EAAArS,GAAA,WAAAovJ,GACA/8I,EAAArS,GAAA,QAAA,IAAAuiB,MAAA1P,WAGA,IAAAy8I,GAAAj9I,EAAApb,QAAA,aAAA/J,KAAA,WACA,IAAAoiK,GAAAA,EAAAC,uBACA,IAAA,GAAA5yK,GAAA,EAAAA,EAAA2yK,EAAAC,uBAAA7xK,OAAAf,IACA2yK,EAAAC,uBAAA5yK,GAAAa,KAAA60B,GA1BA,GAAAA,GAAA71B,IAEA2yK,GAAAA,GAAAvB,SAAApxK,MA6BA,IAAA2yK,EAAA1gK,OACA5P,EAAAirB,MAAArmB,KAAA,OACAolB,IAAAyG,OAAA0D,KAAAC,UAAAwrF,SACAvxG,KAAAiiK,EACAjmJ,YAAA,4BACA4B,QAAAukJ,IAGAA,EAAA,oFAMAv4I,QAAAzsB,IAAA9E,KAAA,SAAAiqK,SAAAhsJ,SAWA,QAAA4rJ,cAAA39I,GACA,IAAA5yB,EAAA4yB,EAAA9c,QAAAmC,GAAA,WACAjY,EAAA4yB,EAAA9c,QAAAmC,GAAA,YACA,CACA,GAAAub,GAAAxzB,EAAA4yB,EAAA9c,QAAAsC,QAAA,YACAla,EAAAs1B,EAAAnlB,KAAA,WACAmlB,GAAAxY,WAAA,YACAid,QAAArzB,KAAA8B,KAAA/H,KAAA60B,GAAAtiB,MAAAhT,IACAs1B,EAAAtuB,IAAA,WAAAqrK,cACA/8I,EAAAtuB,IAAA,QAAAw+B,MAAA1P,aAIA,QAAA4vI,cACA,GAAA,GAAAnzI,OAAAC,MAAA4mG,SAAAs5C,aACA,GAAAjsJ,QAAAisJ,YAAA,CACA,GAAA/M,WAQA,IANArwI,KAAA3hB,KAAA,UAAAlS,KAAA,WAEA,oBADAhC,KAAA+D,aAAA,SAAA,oBAEAmiK,QAAAt/J,KAAA5G,KAAA2G,eAGAu/J,QAAAhlK,OAAA,EAAA,CACA,GAAAovB,QAAA,uBAAA41I,QAAAl3J,KAAA,MAAA,KACA2mB,GAAA,GAAAg4I,WACA93I,KAAAA,KAAA,IAGA,KACAo2H,KAAA37H,QAAAqF,IACA,MAAAl2B,GACA8zB,MAAA9zB,MAMA,QAAAyzK,SAAAxiK,GACAmlB,KAAA,GAAAvvB,UAAAoK,EACAu1J,aAGA,QAAA4M,SAAAniK,GACAwiK,QAAAxiK,GACAmlB,KAAA/L,YAAA,YACA+L,KAAAnlB,KAAA,WAAAsiK,UACAn9I,KAAArS,GAAA,WAAAovJ,cACA/8I,KAAArS,GAAA,QAAA,IAAAuiB,MAAA1P,YA3DA,GAAAR,MAAA71B,IAGA,IADAgnB,QAAAA,YACA,GAAAA,QAAAje,KAEA,WADAk9J,aAIA+M,WAAAA,UAAA5B,SAAApxK,OAAAiS,OAuDA4gK,QADA,IAAAG,SACAA,SAEA,6EAMA14I,QAAAzsB,IAAAm9I,QAAA,WACAn2H,MAAAtB,MAAA,8CAeA+G,QAAAzsB,IAAA+zC,MAAA,SAAA56B,GACA,GAAAkrJ,GAAAlyK,KAAA+1B,OAAA,YACA0iB,EAAAz4C,KAAA+1B,OAAA,eACAx1B,EAAA6wK,SAAApxK,KAGA,IADAgnB,EAAAA,MACAA,EAAAiP,SAAA,CACA,GAAAk9I,GAAA,EACA,IAAA,gBAAAnsJ,GAAA,SACAmsJ,EAAAnsJ,EAAAiP,aAEA,KAAA,GAAA7hB,KAAA4S,GAAAiP,SACAjP,EAAAiP,SAAAllB,eAAAqD,KACA++J,IACAA,GAAA,MACAA,GAAA/+J,EAAA,MAAA22G,QAAA33F,UAAApM,EAAAiP,SAAA7hB,IAIA++J,KACA5yK,EAAA4yK,EAAA,MAAAt4I,OAAAgwF,aAAAtqH,GAAA,KAEA,GAAAqhD,IAAAlkC,OAAAw0J,EAAAp8I,aAAA,YACA,UAAA,GACA8rB,MAAArhD,EACAwnK,OAAAtvH,EAAAsvH,SAAA,EACA92H,MAAAwH,EAAAxH,MACAjW,OAAA,EACAquI,aAAArpK,KAAAkU,KAAA,wBAEAg+J,GAAA,KAAAtwH,EAAA+U,OAAAu7G,EAAA,IACAlrJ,EAAAsH,UAAAszB,EAAAtzB,QAAAtH,EAAAsH,SACAtH,EAAApY,WAAAgzC,EAAAhzC,SAAAoY,EAAApY,SAEA,IAAA42J,GAAAnjK,EAAAy1B,GAAA2C,KAAA7Q,MAAA,iBACA5pB,MAAAkU,KAAA,kBAAA+0G,aAAA,SACAjpH,KAAA6jB,OAAA2hJ,GACAnjK,EAAAmjK,GAAAv8C,aAAArnE,IASAtnB,QAAAzK,OAAA9mB,KAAA,WACA,MAAAuxB,SAAAzsB,IAAA9E,KAAA/H,KAAAhB,SACAm0B,IACAprB,MAAA,EAAAkqK,aAAA,KAUA34I,QAAA63I,QAAAlwD,SAAA,WACA,GAAA1hH,GAAAP,KAAA0Q,KAAA,iBAAA0gK,SAAApxK,MACAgoC,EAAA3lC,EAAAy1B,GAAA2C,KAAA7Q,MAAA,oBAAArpB,EAWA,OATA,UAAAoc,GACA,GAAApJ,IACAA,EAAAsiB,KAAA9e,KAAA4F,KAAApJ,GACAlR,EAAA2lC,GAAAjxB,KAAA4F,EAAApJ,IAIA,QAEAy0B,GAGA1N,QAAA63I,QAAAppK,KAAA,WACA,GAAAxI,GAAAP,KAAA0Q,KAAA,aAAA0gK,SAAApxK,MACAgoC,EAAA3lC,EAAAy1B,GAAA2C,KAAA7Q,MAAA,gBAaA,OAVAvnB,GAAA2lC,GAAAj/B,KAAAxI,GAEA,SAAAoc,GACA,GAAApJ,IACAA,EAAAsiB,KAAA9e,KAAA4F,KAAApJ,GACAlR,EAAA2lC,GAAAjxB,KAAA4F,EAAApJ,IAGA,QAEAy0B,GAGA1N,QAAA63I,QAAAnnB,QAAA,WAIA,QAAAooB,GAAAz2J,GACAkZ,EAAA7L,SAAArN,IACAta,EAAA2lC,GAAAjxB,KAAA,QAAA4F,GAAA,GALA,GAAAkZ,GAAA71B,KACAgoC,EAAA3lC,EAAAy1B,GAAA2C,KAAA7Q,MAAA,mBAAAwnJ,SAAApxK,MAkBA,OAJAozK,GAAA,cACAA,EAAA,cARA,SAAAz2J,GACA,GAAApJ,IACAA,EAAAsiB,EAAA9e,KAAA4F,KAAApJ,GACAlR,EAAA2lC,GAAAjxB,KAAA4F,EAAApJ,IAMA,QAEAy0B,GAGA1N,QAAA63I,QAAAvwH,MAAA,WAIA,QAAAyxH,GAAA12J,EAAApJ,GACA,QAAA,UAAAoJ,GAAApJ,GAAA,SAAAA,GAIA,QAAAgzI,GAAA5pI,GACA,GAAApJ,IACAA,EAAAsiB,EAAAnlB,KAAAiM,MAAA02J,EAAA12J,EAAApJ,IACAlR,EAAA2lC,GAAAjxB,KAAA,QAAA4F,EAAApJ,GAXA,GAAAsiB,GAAA71B,KACAgoC,EAAA3lC,EAAAy1B,GAAA2C,KAAA7Q,MAAA,iBAAAwnJ,SAAApxK,MAyBA,OALAumJ,GAAA,UACAA,EAAA,SACAA,EAAA,OATA,SAAA5pI,GACA,GAAApJ,IACAA,EAAAsiB,EAAA9e,KAAA4F,KAAApJ,GACAlR,EAAA2lC,GAAAjxB,KAAA4F,EAAApJ,IAOA,QAEAy0B,GAKA1N,QAAA83I,WAAAnwD,SAAA,SAAAj6E,GACA,GAAAnS,GAAA71B,KACAO,EAAAynC,EAAAznC,OAAA0R,MAEA4jB,GAAAnlB,KAAA,eAAAnQ,GAEA,SAAAoc,GACA,GAAApJ,IACAA,EAAAy0B,EAAAjxB,KAAA4F,KAAApJ,GACAsiB,EAAA9e,KAAA4F,EAAApJ,IAGA,QAEA+mB,QAAAzsB,IAAAo0G,SAAAjhH,KAAAhB,KAAAO,IAGA+5B,QAAA83I,WAAArpK,KAAA,SAAAi/B,GACA,GAAAnS,GAAA71B,MAEA,SAAA2c,GACA,GAAApJ,IACAA,EAAAy0B,EAAAjxB,KAAA4F,KAAApJ,GACAsiB,EAAA9e,KAAA4F,EAAApJ,IAGA,QAEA+mB,QAAAzsB,IAAA9E,KAAA/H,KAAAhB,KAAAgoC,EAAAj/B,QAAAkqK,aAAA,KAGA34I,QAAA83I,WAAApnB,QAAA,SAAAhjH,GAIA,QAAAsrI,GAAA32J,GACA,GAAApJ,IACAA,EAAAy0B,EAAAt3B,KAAAiM,MACA1O,EAAA0O,GAAApJ,GANA,GAAAsiB,GAAA71B,KACAiO,GAAAsF,MAAAy0B,EAAAznC,OAAA0R,OAeAqhK,GAAA,cACAA,EAAA,cARA,SAAA32J,GACA,GAAApJ,IACAA,EAAAy0B,EAAAjxB,KAAA4F,KAAApJ,GACAsiB,EAAA9e,KAAA4F,EAAApJ,IAMA,QAEA+mB,QAAArzB,KAAA+jJ,QAAAhqJ,KAAAhB,KAAAiO,IAGAqsB,QAAA83I,WAAAxwH,MAAA,SAAA5Z,GAGA,QAAAwsD,GAAA73E,GACA,GAAApJ,IACAA,EAAAy0B,EAAAt3B,KAAAiM,MACA,SAAAA,EACA1O,EAAAgjC,MAAAvnB,SAAAnW,GAEAtF,EAAA0O,GAAApJ,GARA,GAAAtF,IAAAsF,MAAAy0B,EAAAznC,OAAA0R,OAkBAuiF,GAAA,UACAA,EAAA,SACAA,EAAA,OATA,SAAA73E,GACA,GAAApJ,IACAA,EAAAy0B,EAAAjxB,KAAA4F,MACA1O,EAAA0O,GAAApJ,IAOA,YACA4gB,IAAAlmB,EAAA85J,SACA95J,EAAA85J,QAAA,GAEAztI,QAAArzB,KAAA26C,MAAA5gD,KAAAhB,KAAAiO,IAKAqsB,QAAA49F,UAAAjW,SAAA,WACA,GAAA1hH,GAAAP,KAAA0Q,KAAA,iBAAA0gK,SAAApxK,KAEA,OAAAotK,MAAA,IAAA7sK,EAAA0R,SAGAqoB,QAAA49F,UAAAnvH,KAAA,WACA,GAAAxI,GAAAP,KAAA0Q,KAAA,aAAA0gK,SAAApxK,KAEA,OAAAotK,MAAA,IAAA7sK,EAAA0R,SAGAqoB,QAAA49F,UAAA8yB,QAAA,WAIA,QAAAuoB,GAAA52J,EAAA0F,GACAwT,EAAA7L,SAAArN,KACApc,GAAA8hB,GALA,GAAA9hB,GAAA,IACAs1B,EAAA71B,IAWA,OAJAuzK,GAAA,aAAA,KACAA,EAAA,aAAA,KAEAhzK,GAAA,IAAA6wK,SAAApxK,MAAAiS,OACAm7J,KAAA7sK,IAGA+5B,QAAA49F,UAAAt2E,MAAA,WAIA,QAAA4xH,GAAA72J,EAAA0F,GACA,GAAA9O,IAEAA,EAAAsiB,EAAAnlB,KAAAiM,MACApc,GAAA8hB,EAAA9O,GAPA,GAAAhT,GAAA,IACAs1B,EAAA71B,IAqBA,OANAwzK,GAAA,SAAA,KACAA,EAAA,QAAA,KACAA,EAAA,MAAA,KATA,SAAA72J,EAAA0F,GACA,GAAA9O,IAEAA,EAAAsiB,EAAA9e,KAAA4F,MACApc,GAAA8hB,EAAA9O,IAMA,OAAA,KACAhT,GAAA,IAAA6wK,SAAApxK,MAAAiS,OAEAm7J,KAAA7sK,IAKA+5B,QAAAk0B,QAAAyzD,SAAA,WAGA,MAAA,KAFAjiH,KAAA0Q,KAAA,iBAAA0gK,SAAApxK,OAEAiS,QAGAqoB,QAAAk0B,QAAAzlD,KAAA,WAGA,MAAA,KAFA/I,KAAA0Q,KAAA,aAAA0gK,SAAApxK,OAEAiS,QAGAqoB,QAAAk0B,QAAAw8F,QAAA,WACA,MAAA,IAAAomB,SAAApxK,MAAAiS,QAGAqoB,QAAAk0B,QAAA5M,MAAA,WACA,MAAA,IAAAwvH,SAAApxK,MAAAiS,QA4EA5P,EAAA4O,GAAA8kB,OAAA,SAAAhI,GACA,MAAAuM,SAAAvM,GACAuM,QAAAvM,GACArrB,MAAA1C,KAAAmN,MAAAnC,UAAArI,MAAA3B,KAAAwG,UAAA,IACA,gBAAAumB,IAAAA,MAGA1rB,GAAAoO,MAAA,UAAAsd,EAAA,6BAAA+2F,YAFAxqF,QAAAC,MAAA73B,MAAA1C,KAAAwH,aAKAkrB,QAuEAi7I,SAAA3iK,UAAA+nB,MAAA,SAAA/L,GACA,GAAAysJ,GAAAzzK,KAAA61B,OAAAE,OAAA,YACArY,EAAA+1J,EAAA39I,aAAA,YAAA,UAAA,EAKA,OAHApY,KACAsJ,EAAA9d,IAAAwU,GAEArb,EAAA0wB,MAAA/L,IAQA2mJ,SAAA3iK,UAAA6qB,KAAA,SAAAlZ,GACA,MAAAA,GACA3c,KAAA25H,WAAAzlH,KAAA,kBAAAyI,EAAA,MAEAta,EAAArC,KAAA4tK,UAMAD,SAAA3iK,UAAA2uH,SAAA,WACA,MAAAt3H,GAAArC,KAAA4tK,SAAAnzJ,QAAA,cAQAkzJ,SAAA3iK,UAAA6C,IAAA,SAAAgoB,EAAAI,GACA,GAAAjP,KACAiP,KACAjP,EAAAiP,SAAAA,GAEAj2B,KAAA61B,KAAAA,GAAAE,OAAA,MAAA/O,IAaA2mJ,SAAA3iK,UAAA2O,OAAA,SAAA+5J,EAAA1sJ,GACA,GAAA2gB,GAAA3nC,KAAAqC,EAAAqxK,GACAhjK,EAAAs1B,KAAA4B,kBAAAD,EAEA3B,MAAA8B,UAAAH,EAAA,MACA3nC,KAAA+yB,OACA2zI,IAAA1/I,EAAA06F,UAAA,KAAAqJ,QAAA33F,UAAA1iB,GAAA,KACAof,QAAA,SAAApf,GAAAs1B,KAAA8B,UAAAH,EAAAj3B,IACA43J,UAAAthJ,EAAAshJ,aASAqF,SAAA3iK,UAAA2oK,UAAA,SAAA5qG,EAAAC,GACA,GACAv0D,GACAwnC,EAFA3gB,EAAAt7B,IAIA,mBAAA,QAAAm0B,IAAA60C,GACAv0D,EAAAzU,KAAA61B,OAAAE,OAAA,OAAA,UACAkmB,EAAA8sB,IAEAt0D,EAAAzU,KAAA61B,KAAAkzC,GACA9sB,EAAA+sB,GAGAv0D,EAAAvT,OAAA,EACAuT,EAAAP,KAAA,eAAA3M,IAAA,SAAAic,GAAA,QAAA,SAAAyR,GACA,GAAA2sB,IACA/zC,IAAA,SAAAooB,GACAxhB,EAAAshB,OAAA,OAAAE,SAAAA,KAMA,OAFAgmB,GAAAj7C,KAAAs6B,EAAAsmB,GACA3sB,EAAA/U,kBACA,IAGAqT,MAAA,mBAAAsC,KAAA,MASA83I,SAAA3iK,UAAA4oK,UAAA,SAAA/9I,EAAArS,GACA,GAAA/O,GAAAzU,KAAA61B,KAAAA,OACA1B,IAAA3Q,IACAA,GAAA,GAEA/O,EAAAvT,OAAA,EACA,GAAAsiB,GACA/O,EAAAP,KAAA,oBAAA0J,OACAnJ,EAAAP,KAAA,UAAA0J,SAEAnJ,EAAAP,KAAA,oBAAAyJ,OACAlJ,EAAAP,KAAA,UAAAyJ,QAGA4V,MAAA,mBAAAsC,EAAA,MAIA83I,SAAA3iK,UAAA3I,EAAA,SAAA2X,GACA,MAAAha,MAAA61B,OAAA3hB,KAAA8F,IAGA2zJ,SAAA3iK,UAAA+rB,QAAA,SAAA1K,GACA,MAAAwK,OAAAE,QAAA1K,IAQAshJ,SAAA3iK,UAAA+nK,uBAAA,SAAAltK,GACA,GAAA6K,GAAA1Q,KAAA25H,WAAAjpH,KAAA,WAEAA,SACAyjB,IAAAzjB,EAAAqiK,uBACAriK,EAAAqiK,uBAAAnsK,KAAAf,GAEA6K,EAAAqiK,wBAAAltK,OC3pEA0sB,OAAA,UAAA,SAAA,cAAA,OAAA,WACA,SAAAlwB,EAAAwxB,EAAAmS,IAEA,SAAA3jC,GA0HA,QAAAwxK,GAAAn1I,EAAA2H,EAAArf,GACA,QAAAwqB,GAAA70B,GACA,GAAAA,EACA,MAAAta,GAAAy1B,GAAAoD,MACAtR,MAAA,qCAAAjN,IAIA,OAAAwX,IAAAnN,OAEA,IAAA,MAAAA,EACA0X,EAAA7a,OAAAxhB,EAAAy1B,GAAAwJ,IAAA1X,MAAA,iBACA,IAAA,kBAAA,GAAA,CACA,GAAAzlB,GACAhE,CAEA,IAAA6mB,EAAAyqB,SACAttC,EAAA9B,EAAAy1B,GAAA3zB,EAAA6hC,EAAAsL,QAAAG,SAAAzqB,EAAAyqB,UACApL,OACA,IAAArf,EAAAwqB,MACArtC,EAAA9B,EAAAy1B,GAAA3zB,EAAAqtC,EAAAxqB,EAAAwqB,OAAAnL,OACA,KAAAlmC,EAAAkmC,EAAAx1B,QAAA,MAAA,EAAA,CACA,GAAAijK,GAAAztI,EAAArO,OAAA73B,EACAgE,GAAA9B,EAAAy1B,GAAA3zB,GAAAylB,MAAA,eACAyc,EAAArO,OAAA,EAAA73B,GAAA8R,OACA5P,EAAAy1B,GAAAoD,MAAAtR,MAAA,iBAAAkqJ,GACAzxK,EAAAy1B,GAAAoD,MAAAtR,MAAA,eAAAkqJ,QAEA3vK,GAAA9B,EAAAy1B,GAAA3zB,EAAAkiC,EAGAhkC,GAAA8B,GAAAuM,KAAA,gBAAAsW,GACAA,EAAArK,MACAta,EAAA8B,GAAA4S,KAAA,KAAAiQ,EAAArK;+BAEA+hB,EAAA7a,OAAAxhB,EAAAy1B,GAAAwJ,GAAAn9B,QAEA,IAAA,YAAA6iB,EAAA/f,KAAA,CACA,GAAAs0C,GAAAl5C,EAAAA,EAAAy1B,GAAA9e,OAAA/R,KAAA,kBAEAktB,KAAAnN,EAAA6gI,YACAtsG,EAAA1xB,SAAA,wBACAgK,EAAAU,OAAAvN,EAAA6gI,aACAtsG,EAAAx0B,KAAA,WAAA,GACAw0B,EAAA/3B,GAAA,QAAA,WACAqQ,EAAAO,OAAApN,EAAA6gI,WAAAxlJ,EAAArC,MAAA+mB,KAAA,cAEAw0B,EAAA/3B,GAAA,aAAA,SAAAmkG,GACAA,EAAAhrG,MAAAqK,EAAA6gI,YACAtsG,EAAAx0B,KAAA,UAAA4gG,EAAAp0G,WAGAyT,EAAAve,SACA8yC,EAAAx0B,KAAA,UAAAC,EAAAve,SAEA8yC,EAAA/3B,GAAA,QAAA,WACAwD,EAAAmqB,OAAA9uC,EAAArC,MAAA+mB,KAAA,eAGA2X,EAAA7a,OAAAxhB,EAAAy1B,GAAAwJ,IAAA1X,MAAA,YACA2xB,EAAA,GACAl5C,EAAAy1B,GAAAoD,KAAAmL,SACA,IAAA,WAAArf,EAAA/f,KAAA,CACA,GAAA8sK,GAAA1xK,EAAAy1B,GAAA+J,IAAAjY,MAAA,0BAQA,IANA8U,EAAA7a,OAAAxhB,EAAAy1B,GAAAwJ,GAAAj/B,EAAAy1B,GAAA3zB,GAAAylB,MAAA,uBACA4nB,EAAAxqB,EAAAwqB,OACAnL,GACA0tI,IACA/sJ,EAAAmqB,QACA9uC,EAAA0xK,GAAArjK,KAAA,gBAAAsW,EAAAmqB,QACAnqB,EAAAgtJ,MACA,IAAA,GAAA7zK,GAAA,EAAAA,EAAA6mB,EAAAgtJ,MAAA9yK,OAAAf,IACAkC,EAAA0xK,GAAAlwJ,OAAAxhB,EAAAy1B,GAAAwJ,GAAAj/B,EAAAy1B,GAAA3zB,EAAA6iB,EAAAgtJ,MAAA7zK,KAGA6mB,GAAA4T,QACAv4B,EAAA0xK,GAAAvwJ,GAAA,SAAA,SAAAyR,GACAjO,EAAA4T,OAAA55B,KAAAi0B,EAAA9c,cAIAob,OAAA,uBAKA,QAAA0gJ,GAAAt+I,EAAAhZ,GACA,MAAAgZ,GAAAzhB,KAAA,kBAAArS,OAAA,WACA,MAAAQ,GAAArC,MAAA+W,KAAA,SAAA4F,IAIA,QAAAw1B,GAAAhuC,EAAA8wB,GACA,IAAA5yB,EAAA8B,GAAA6lB,SAAA,WAEA,CACA,GAAAmnB,GAAA9uC,EAAA8B,GAAAuM,KAAA,kBACArO,EAAA8B,GAAA0W,QAAA,MAAAnK,KAAA,gBAWA,OATAwjK,GAAAlzK,KAAAmD,EAAA8wB,GAEAkc,GACAlc,EAAA/U,iBACAixB,EAAAnwC,KAAAmD,EAAA8wB,IACA5yB,EAAA8B,GAAA6lB,SAAA,YACAmqJ,EAAAnzK,KAAAmD,EAAA8wB,IAGA,EAdAk/I,EAAAnzK,KAAAmD,EAAA8wB,GAwBA,QAAAk/I,GAAAl/I,GACA,GAAAkjC,GAAA91D,EAAArC,MAAAyT,OACA2gK,EAAA/xK,EAAArC,MAAA8Y,SAAAA,UAEAzW,EAAArC,MAAAgqB,SAAA,eACA3nB,EAAArC,MAAAgqB,SAAA,iBACA3nB,EAAArC,MAAA+pB,YAAA,0BAEAqqJ,EAAAlgK,KAAA,eACA6D,IAAA/X,MACA+pB,YAAA,0BACAqqJ,EAAAlgK,KAAA,qBACA6D,IAAAogD,GAAAv6C,OAEAu6C,EAAAv3C,QAAA,UACAu3C,EAAAt6C,SACAoX,EAAA9U,kBAGA,QAAA+zJ,GAAAj/I,GACA,GAAA3c,GAAAjW,EAAArC,MAAAya,QAAA,YAEAnC,GAAApE,KAAA,eAAA6V,YAAA,0BACAzR,EAAApE,KAAA,qBAAA0J,OAvQA,GAGA0c,IAiBAC,MAAA,SAAAwX,GAEA,MAAA/xC,MAAAgC,KAAA,WACA,GAAAyL,GAAApL,EAAArC,KAGA,KAAA,GAAA+F,KAAAgsC,GACAA,EAAAhhC,eAAAhL,KACA0H,EAAA4mK,OAAA,iBAAAtuK,GACA0H,EAAA4mK,OAAA,mBAAAtuK,EAAAgsC,EAAAhsC,IAIA0H,GAAA+V,GAAA,QAAA,IAAA,SAAAyR,GAAAkd,EAAAnyC,KAAAi1B,QAOA4+I,eAAA,SAAAxtI,GACA,GAAAiuI,GAAAt0K,KAAA6H,SAAA,2BACA0sK,EAAAlyK,EAAAy1B,GAAA+J,IAAAllB,KAAA0pB,EAAAzc,MAAA,kBACA0X,EAAAj/B,EAAAy1B,GAAAwJ,IAAA1X,MAAA,YACAvnB,EAAAy1B,GAAA3zB,GAAAylB,MAAA,kBACAwnB,cAAA,YAEA/K,EACAhkC,EAAAy1B,GAAAhlB,GAAA8W,MAAA,WACA2qJ,EAIA,OAFAD,GAAAzwJ,OAAAyd,GAEAthC,MAUAw0K,iBAAA,SAAA73J,EAAAo1B,GACA,GAAA,kBAAA,GACAA,EAAA/xC,KAAA2c,OACA,CACA,GAAAklB,GAAAoyI,EAAAj0K,KAAA2c,EAEA,KAAA,GAAA5W,KAAAgsC,GACAA,EAAAhhC,eAAAhL,IACA8tK,EAAAhyI,EAAA97B,EAAAgsC,EAAAhsC,MASA0uK,cAAA,SAAA93J,GAIA,MAHAs3J,GAAAj0K,KAAA2c,GAEA5T,KAAA,IACA/I,MAWA00K,eAAA,SAAA/3J,EAAA0pB,EAAA+L,GAGAyhI,EAFAI,EAAAj0K,KAAA2c,GAEA0pB,EAAA+L,IA6LA/vC,GAAA4O,GAAAojK,OAAA,SAAAtmJ,GACA,MAAAuM,GAAAvM,GACAuM,EAAAvM,GACArrB,MAAA1C,KAAAmN,MAAAnC,UAAArI,MAAA3B,KAAAwG,UAAA,IACA,gBAAAumB,IAAAA,MAGA1rB,GAAAoO,MAAA,UAAAsd,EAAA,oCAFAuM,EAAAC,MAAA73B,MAAA1C,KAAAwH,aAKAkrB,UC5SAH,OAAA,SAAA,SAAA,SAAA,cAAA,oBAAA,QACA,QACA,UAAA,UAEA,SAAAlwB,EAAAywB,EAAAe,EAAA8jC,EAAA9iC,EAAAgC,IAEA,SAAAx0B,GAqYA,QAAAgB,GAAA2xB,GACA,MAAA3yB,GAAA2yB,GAAAva,QAAA,wBAGA,QAAAk6J,GAAAh5I,EAAA0K,EAAArf,GACA,GAAA2tJ,GAAAtyK,EAAAy1B,GAAA2C,KACA7Q,MAAA,oBACAvnB,EAAAy1B,GAAA7e,QACA2Q,MAAA,0CAAA+R,EACAyV,cAAA,YACA/K,EACAhkC,EAAAy1B,GAAAoD,MAAAtR,MAAA,WACAvnB,EAAAy1B,GAAA+J,IAAAjY,MAAA,iBAAA+R,IAWA,OATAt5B,GAAAsyK,GAAAnxJ,GAAA,QAAA,IAAA,WACAnhB,EAAArC,MAAAya,QAAA,MAEAuP,SAAA,eACA3mB,EAAArD,MAAAyiH,YAAA,cAEAp/G,EAAArD,MAAAyiH,YAAA,WAAApgH,EAAArC,MAAAO,UAGAo0K,EAGA,QAAAC,GAAA5tJ,GAIA,QAAA6tJ,GAAA5/I,GACA,GAAA7rB,GAAA/G,EAAA4yB,EAAA9c,QAAAsC,QAAA,wBACA/J,EAAAtH,EAAAsH,KAAAo0G,EAEA,IAAAp0G,GAAA,kBAAAA,GAAA,SAAA,CACA,GAAA8/B,GAAA9/B,EAAAokK,UAEAzyK,GAAA+K,QAAAojC,IACAntC,EAAAy0B,GAAA2qF,YAAA,cAAAjyE,GAAA,IAXA,GAAA1Y,GAAA68I,EAAA,WAAA,WAAA3tJ,GACA6a,EAAAx/B,EAAAy1B,GAAA5jB,KAAA,KAcA,IAAA,kBAAA8S,GAAA,SACA3kB,EAAAy1B,GAAAi9I,UAAA,SAAA9/I,GACA,GAAAA,EAAA9R,OACA0xJ,EAAA5/I,SAGA,IAAAjO,EAAA8tJ,SAGA,IAAA,GAFAtkI,GAAAxpB,EAAA8tJ,SAEA30K,EAAA,EAAAA,EAAAqwC,EAAAtvC,OAAAf,IACA0hC,EAAAhe,OAAAxhB,EAAAy1B,GAAAwJ,GAAAj/B,EAAAy1B,GAAA3zB,EAAAqsC,EAAArwC,KAIA,OAAA23B,GAGA,QAAAk9I,GAAAhuJ,GACA,GAAAkrB,GAAAyiI,EAAA,UAAA,UAAA3tJ,EAkBA,OAhBA3kB,GAAA6vC,GAAA1uB,GAAA,aAAA,KAAA,SAAAyR,GACA,GAAA9wB,GAAA9B,EAAA4yB,EAAA9c,QAAAsC,QAAA,MAAAvG,KAAA,IACA/P,GAAA4S,KAAA,QAAA8f,EAAAW,IAAArzB,EAAAuM,KAAA,YAKArO,EAAA6vC,GAAA2sE,QAAA,SAAA5pF,GACA3pB,WAAA,WACA,GAAAu2B,GAAAx/B,EAAA6vC,GAAAh+B,KAAA,cACAjO,EAAA47B,EAAA9a,KAAA,eACAtK,SAAAqe,IAAA70B,GACA47B,EAAA1Z,SAAAf,UAAAnhB,KACA,OAGAisC,EAGA,QAAA+iI,GAAAjuJ,GAwBA,IAAA,GAXA6a,GAXA2O,EAAAxpB,EAAAkuJ,aACA,wBACA,KACA,aACA,WACA,WACA,QACA,KACA,OACA,iBAIAP,EAAAtyK,EAAAy1B,GAAA2C,KACA7Q,MAAA,oBACAvnB,EAAAy1B,GAAA7e,QACA2Q,MAAA,mDACAwnB,cAAA,YACA,YACA/uC,EAAAy1B,GAAAoD,MAAAtR,MAAA,WACAiY,EAAAx/B,EAAAy1B,GAAA+J,IAAAjY,MAAA,6BAEAzpB,EAAA,EAAAA,EAAAqwC,EAAAtvC,OAAAf,IAAA,CACA,GAAA4uB,GAAAyhB,EAAArwC,EAEA,OAAA4uB,EACA1sB,EAAAw/B,GAAAhe,OAAAxhB,EAAAy1B,GAAAwJ,IAAA1X,MAAA,aAEAvnB,EAAAw/B,GAAAhe,OAAAxhB,EAAAy1B,GAAAwJ,GAAAj/B,EAAAy1B,GAAA3zB,EAAA4qB,KAOA,MAJA1sB,GAAAsyK,GAAAnxJ,GAAA,QAAA,IAAA,WACAngB,EAAArD,MAAAkU,KAAA,UAAA4hB,aAAA,eAAAzzB,EAAArC,MAAAO,UAGAo0K,EAGA,QAAAQ,GAAAnuJ,GACA,GAAA/N,GACA5W,EAAAy1B,GAAA7e,QACA2Q,MAAA,gBACAA,MAAA,sCAEA,OAMA,OAJAvnB,GAAA4W,GAAAuK,GAAA,QAAA,WACAngB,EAAArD,MAAAyiH,YAAA,UAAAtuF,GAAAihJ,EAAAp1K,SAGAiZ,EAGA,QAAAm8J,GAAApgJ,GACA,MAAA3yB,GAAA2yB,GAAAlc,SAAA5E,KAAA,SAAA6S,KAAA,WAGA,QAAAsuJ,GAAAruJ,GACA,GAAAve,GAAAorB,EAAAU,OAAA,kBACAxd,GAAA9P,KAAA,WAAA0V,KAAA,aAEAwX,KAAA1rB,IACAA,EAAAqqB,EAAAC,MAAAuiJ,gBAEA7sK,IACAsO,EAAAtO,QAAA,UAEA,IAAAuQ,GAAA3W,EAAAy1B,GAAA9e,MAAAjC,GACAwC,EAAAlX,EAAAy1B,GAAAoD,MAAAtR,MAAA,iBACA5Q,EAAA,iBAMA,OALA3W,GAAA2W,GAAAwK,GAAA,SAAA,SAAAyR,GACApB,EAAAO,OAAA,iBACA/xB,EAAA4yB,EAAA9c,QAAA4O,KAAA,cAGAxN,EAliBA,GAAAurG,GAAA,cAEAnxF,GACA4hJ,iBAAA,IAIAj7I,GAUAC,MAAA,SAAAvT,GACA,MAAAhnB,MAAAgC,KAAA,WAoBA,QAAAozK,KACA,MAAA/yK,GAAA0lK,GAAA7zJ,KAAA,SAAA6S,KAAA,WApBA,GAAAtZ,GAAApL,EAAArC,MACA0Q,EAAArO,EAAAiG,UAAAqrB,EAAA3M,GACAwuJ,EAAAnzK,EAAAy1B,GAAA2C,KAAA7Q,MAAA,UACAm+I,EAAAsN,EAAA3kK,EAEAjD,GAAAoc,SAAA,qEAGApc,EAAAoW,OAAA2xJ,EACAnzK,EAAAy1B,GAAA2C,KAAA7Q,MAAA,iBAAA,MACAvnB,EAAAy1B,GAAA2C,KAAA7Q,MAAA,iBACAvnB,EAAAy1B,GAAAoD,MAAAtR,MAAA,gBACAgrJ,EAAAlkK,GACAskK,EAAAtkK,GACAukK,EAAAvkK,IACArO,EAAAy1B,GAAAoD,MAAAtR,MAAA,iBACAm+I,EACAoN,EAAAzkK,MAMArO,EAAAmzK,GAAA3xJ,OAAApW,EAAA5F,SAAA,aACAiuB,cAAAwR,KAAA,QACA44F,SAAA,WACA,MAAAxvH,GAAAwvH,YAEAmyC,YAAA,SAAA59J,GACAhH,EAAAg1G,YAAA,MAAAhuG,EAAA2gK,QAIA3nK,EAAAiD,KAAAo0G,EAAAp0G,GAEArO,EAAAmzK,GAAA1/I,aAAA,YAAA,WACA,gBAAAplB,GAAA,SACAA,EAAAokK,SAAA,IACAzyK,EAAAmzK,GAAA1/I,aAAA,YAAAplB,EAAAokK,SAAA,IAEArnK,EAAAq3G,GAAA,mBAAAziH,EAAAqO,EAAAimD,SAAA,IAIAlpD,EAAA+V,GAAA,kBAAA,SAAAyR,EAAA0hC,GACAlpD,EAAAq3G,GAAA,mBAAAziH,EAAAs0D,MAEAlpD,EAAA+V,GAAA,iBAAA,SAAAyR,EAAAjO,GACA,GAAA46B,GAAA56B,EAAA46B,KAEA,IAAA,MAAAA,EAAA,CACA,OAAAztB,IAAAytB,GACAv/C,EAAAqO,EAAAimD,QAAAjmD,KAAA,iBACArO,EAAA2kB,EAAA2vC,QAAAjmD,KAAA,gBAAA,CACA,GAAAg5I,GAAAh5I,EAAAokK,UACAlzH,GAAA8nG,GAAAA,EAAA,GAAAA,EAAA,GAAA,GAGAj8I,EAAAg1G,YAAA,WAAA7gE,MAGAn0C,EAAA+V,GAAA,SAAA,SAAAyR,EAAA0iB,GACA,GAAAlqC,EAAAgN,QAAA,UAAAsY,MAAA,kBAAA,CACA,GAAAviB,GAAA/C,EAAAq3G,GAAA,WACAt0G,IACAyiB,aAAAC,QAAA,QAAAvvB,KAAAyvB,UAAA5iB,OAGA/C,EAAA+V,GAAA,UAAA,SAAAyR,EAAA0iB,GACA,GAAA,IAAAlqC,EAAAq3G,GAAA,YAAA,CACA,GAAAt0G,EAGA,KACA,GAAA6iB,GAAAJ,aAAAK,QAAA,QACAD,KACA7iB,EAAA7M,KAAAC,MAAAyvB,IACA,MAAAI,IAGAjjB,GAAA,gBAAA,IACA/C,EAAAq3G,GAAA,WAAAt0G,MAIA/C,EAAA+V,GAAA,aAAA,SAAAyR,EAAA0yF,GACA,kBAAAA,EAAAhrG,MACA,GAAAgrG,EAAAp0G,OACA0f,aAAAqrB,WAAA,cAUAm3H,iBAAA,SAAA9+G,EAAAjS,GACA,GAAAh0C,GAAA1Q,KAAA0Q,KAAAo0G,EAEA,IAAAp0G,EAAAimD,QAAAA,EAAA,KAAAjS,EACA,MAAA1kD,KAGA,IADA0Q,EAAAimD,OAAAA,EAAA,GACAjmD,EAAAimD,OAAA,CACAjmD,EAAAokK,SAAA,WACA,GAAAprB,GAAA/yF,EAAA7gC,aAAA,mBACAnX,EAAAg4C,EAAA97C,QAAA,UAAAkY,MAAA,YAAA,MAKA,OAHA1wB,GAAA+K,QAAAuR,IACA+qI,EAAAt9I,OAAAuS,GAEA+qI,GAEA/yF,EAAA7gC,aAAA,mBACAplB,EAAAgN,OAAA,WACA,GAAAxU,GAAAytD,EAAA7gC,aAAA,YAAA,UACA4/I,EAAArzK,EAAA,6BAAA9B,MAKA,OAHAm1K,KACAxsK,GAAA,oBAAAwsK,GAEAxsK,GAGAwH,EAAAgN,OAAA,GAEAhN,EAAAwvH,SAAA,WACA,MAAAvpE,GAAA7gC,aAAA,eAGA,IAAA4zH,GAAAh5I,EAAAokK,UACAprB,IAAAA,EAAA,IAAA1pJ,KAAAyiH,YAAA,WACAziH,KAAAyiH,YAAA,WAAAinC,EAAA,IAEA/yF,EAAA7gC,aAAA,wBAGAplB,GAAAokK,SAAA,IAOAa,iBAAA,WACA,GAAAjlK,GAAA1Q,KAAA0Q,KAAAo0G,EAEA,OAAAp0G,GAAAimD,OACAt0D,EAAAqO,EAAAimD,QAEAt0D,KASAuzK,YAAA,SAAAplI,EAAAzL,GACA,GAAAlD,GAAA7hC,KAAAkU,KAAA,cAKA,IAHAs8B,IAAAA,UACArc,KAAA4Q,IAAAA,GAAA,GAEAA,GAGA,SAAA8wI,GACA,GAAAC,EAEA,KAAAA,EAAAj0I,EAAAnxB,KAAA,cACAolK,EAAA50K,QAAA20K,EAAA30K,OAAA,CACA,IAAA,GAAAf,GAAA,EAAAA,EAAA21K,EAAA50K,OAAAf,IACA,GAAA21K,EAAA31K,IAAA01K,EAAA11K,GACA,OAAA,CAEA,QAAA,EAEA,OAAA,GAdAqwC,GACA,MAAAxwC,OAgBA,IAAA+kC,GACAlD,EAAA94B,KAAA,IACA84B,EAAA3tB,KAAA,8BAAAjH,QACA,KAAA,GAAA9M,GAAA,EAAAA,EAAAqwC,EAAAtvC,OAAAf,IACA0hC,EAAAhe,OAAAxhB,EAAAy1B,GAAAwJ,GAAAj/B,EAAAy1B,GAAA3zB,EAAAqsC,EAAArwC,KAOA,OALA0hC,GAAAnxB,KAAA,WAAA8/B,EAAA7tC,MAAA,IACAk/B,EAAAhe,OAAAxhB,EAAAy1B,GAAAwJ,IAAA1X,MAAA,aACAiY,EAAAhe,OAAAxhB,EAAAy1B,GAAAwJ,IAAA1X,MAAA,eACAvnB,EAAAy1B,GAAA3zB,EAAA,mCAEAnE,MAMA4pJ,WAAA,WAWA,MARA,IAFA5pJ,KAAAkU,KAAA,UAAA4hB,aAAA,aAEA7jB,OACA5P,EAAA,iCACAue,QAAA,aACA5gB,KAAAkU,KAAA,UAAA4hB,aAAA,cAEAjB,EAAAtB,MAAA,6BAGAvzB,MASA+1K,WAAA,SAAAn0H,GACA,GAAA/f,GAAA7hC,KAAAkU,KAAA,cACAxD,EAAA1Q,KAAA0Q,KAAA,cAQA,IAAAkxC,EAAA,CACA,GAAAtgB,GACAn9B,GAEAm9B,EAVA,WACA,MAAAO,GAAAh6B,WAAAhG,OAAA,WACA,MAAAQ,GAAArC,MAAAO,QAAAqhD,SASAtgB,EAAAr0B,SACA40B,EAAAh6B,WAAA3G,QAAAwP,EAAA6kK,kBACA1zI,EAAAh6B,WAAA2J,QAAAvE,SACA40B,EAAAhe,OAAAxhB,EAAAy1B,GAAAwJ,GAAAn9B,EAAA9B,EAAAy1B,GAAA3zB,EAAAy9C,KACAv/C,EAAA8B,GAAAuM,KAAA,QAAA,GAAA9E,OAAAwrB,UAAA,KAGA,MAAAp3B,OAOA0sG,WAAA,WACA,GAAA7qE,GAAA7hC,KAAAkU,KAAA,cACAjO,IAUA,OARA47B,GAAAh6B,WAAA7F,KAAA,WACA,GAAAmC,GAAA9B,EAAArC,MAAAkU,KAAA,IACAjO,GAAAW,MACAg7C,MAAAz9C,EAAA5D,OACAk3B,KAAAtzB,EAAAuM,KAAA,YAIAzK,GAGA+vK,eAAA,SAAA/vK,GACA,GAAA47B,GAAA7hC,KAAAkU,KAAA,aAEA2tB,GAAA94B,KAAA,GACA,KAAA,GAAA5I,GAAA,EAAAA,EAAA8F,EAAA/E,OAAAf,IAAA,CACA,GAAAgE,EACA09B,GAAAhe,OAAAxhB,EAAAy1B,GAAAwJ,GAAAn9B,EAAA9B,EAAAy1B,GAAA3zB,EAAA8B,EAAA9F,GAAAyhD,SACAv/C,EAAA8B,GAAAuM,KAAA,OAAAzK,EAAA9F,GAAAs3B,QAQAg0B,SAAA,SAAA7J,GASA,MARA5hD,MAAA0Q,KAAAo0G,GAEAmxD,SACAj2K,KAAAkU,KAAA,UACA4hB,aAAA,YAAA8rB,GACArpC,QACAud,aAAA,aAEA91B,MAGAwsG,QAAA,WACA,GAAA97F,GAAA1Q,KAAA0Q,KAAAo0G,EAEA,QAAA9kH,KAAAyiH,YAAA,aACA/xG,EAAAulK,UACAj2K,KAAAkU,KAAA,UAAA4hB,aAAA,UAAAplB,EAAAulK,WAQAzqH,SAAA,WACA,MAAAxrD,MAAAkU,KAAA,UAAA4hB,aAAA,YAAA,UAGA4P,SAAA,WACA,OACAkc,MAAA5hD,KAAA8kH,GAAA,YACAxyE,QAAAtyC,KAAA8kH,GAAA,gBAIAloF,SAAA,SAAApsB,GACAxQ,KAAA8kH,GAAA,iBAAAt0G,EAAA8hC,aACAtyC,KAAA8kH,GAAA,WAAAt0G,EAAAoxC,OAAA,KAYA/zC,IAAA,SAAA4G,EAAAszJ,GACA,GAAAr3J,GAAA1Q,KAAA0Q,KAAA,cAKA,QAHAyjB,KAAA1f,IAAAA,EAAAzU,KAAAyiH,YAAA,eACAhuG,EAAApS,EAAA4P,KAAAwC,IAIA,MADApS,GAAA,yBAAAue,QAAA,QAAApH,KAAA,eACAxZ,IAEAqC,GAAA,yBAAAue,QAAA,gBAEA,IAAAghC,IAAAA,MAAAntC,EACAkiD,OAAAjmD,EAAAimD,OACA0yG,aAAArpK,KAAAkU,KAAA,UAaA,OAVA,kBAAAxD,GAAA,OACAkxC,EAAAlkC,OAAAhN,EAAAgN,OAAAjJ,GACA,gBAAA/D,GAAA,SACAkxC,EAAAlkC,OAAAhN,EAAAgN,QACAqqJ,IACAnmH,EAAAmmH,QAAA,GAEA/nK,KAAAyiH,YAAA,aAAAhuG,GACA/D,EAAA80J,OAAAF,cAAA,MAAA1jH,GAEA5hD,MAwLAqC,GAAA4O,GAAAwxG,YAAA,SAAA10F,GACA,MAAAuM,GAAAvM,GACAuM,EAAAvM,GACArrB,MAAA1C,KAAAmN,MAAAnC,UAAArI,MAAA3B,KAAAwG,UAAA,IACA,gBAAAumB,IAAAA,MAGA1rB,GAAAoO,MAAA,UAAAsd,EAAA,6BAAA+2F,GAFAxqF,EAAAC,MAAA73B,MAAA1C,KAAAwH,aAKAkrB,UC5kBAH,OAAA,QAAA,UACA,WAEA,QAAA2jJ,KACA7zK,EAAArC,MAAAyT,OAAAsW,YAAA,QACA1nB,EAAArC,MAAAiN,SAGA5K,EAAAxC,UAAA2jB,GAAA,QAAA,yBAAA,WACA,GAAAzd,GAAA1D,EAAArC,MAAA8Y,QACAzW,GAAA0D,GAAAgkB,YAAA,QACA1nB,EAAA0D,GAAAie,OAAA,wCAAAxJ,OAAAsG,MAAAo1J,OCFA3jJ,OAAA,SAAA,SAAA,QAAA,SAAA,OAAA,WACA,SAAAlwB,EAAAwyB,EAAA/B,EAAAkT,GAEA,GAAAmwI,IAAA,eAAA,QAAA,WAEA,SAAA9zK,GA+NA,QAAA+zK,GAAA3wD,EAAA13F,EAAAsoJ,GAGA5wD,IAAAA,EAAA,gBACA,KACA,GAAA6wD,GAAA7oI,UAAAC,UAAAnsC,aAEA,KAAA,GAAA+0K,EAAAzlK,QAAA,QACAhR,SAAAy5G,YAAA,gCACA,KAAA,GAAAg9D,EAAAzlK,QAAA,WAAA,SAAAkd,EAAA,CACA,GAAAwoJ,GAAAC,EAAAH,EAEAE,KACAA,EAAA7mJ,KAAA,MAAA+1F,GAAA,GACA8wD,EAAA3oJ,iBAAA,gBAAA,gBACA2oJ,EAAA/nJ,YAEA,CACA,GAAA+nJ,GAAAC,EAAAH,EAEAE,KACAA,EAAA7mJ,KAAA,MAAA+1F,GAAA,EAAA,SAAA,UACA8wD,EAAA/nJ,KAAA,IACA+nJ,EAAAzoJ,UAGA,MAAAruB,GAEA,QAIA,QAAA+2K,GAAAH,GACA,GAAAE,EAEA,KACAx2K,OAAAqvB,eACAmnJ,EAAA,GAAAnnJ,gBACArvB,OAAA02K,gBACAF,EAAA,GAAAE,eAAA,sBAGAJ,IACAE,EAAAxgK,iBAAA,OAAAsgK,GACAE,EAAAxgK,iBAAA,QAAAsgK,GACAE,EAAAxgK,iBAAA,QAAAsgK,IAEA,MAAA52K,IAGA,MAAA82K,GASA,QAAAG,GAAAC,EAAAh6J,EAAAqK,EAAA4vJ,GACA,GAAA3uI,GAAAloC,OAAA2vB,KAAAinJ,EAAAh6J,EAAAqK,GACAxb,EAAAzL,OAAA+9B,YAAA,WACA,KACA,MAAAmK,GAAAA,EAAAgzG,UACAl7I,OAAA89B,cAAAryB,GACAorK,EAAA3uI,IAGA,MAAAxoC,MAEA,IAKA,OAHAM,QAAAwY,OACA0vB,EAAA1vB,QAEA0vB,EAzSA,GAGA3N,IACAC,MAAA,SAAAvT,GACA,MAAAhnB,MAAAgC,KAAA,WACA,GAAAyL,GAAApL,EAAArC,MACA0Q,IAEAA,GAAA2b,IAAA5e,EAAAsJ,KAAA,QACAtJ,EAAA4b,WAAA,QAEA5b,EAAA+V,GAAA,QAAA,SAAAyR,GACAxnB,EAAAuc,SAAA,UACAvc,EAAAioC,MAAA,QAAAzgB,KAGAxnB,EAAAiD,KAjBA,QAiBAA,GACAjD,EAAAioC,MAAA,SAAA,cAOA9a,OAAA,SAAA+/F,GACA,GAAAltH,GAAApL,EAAArC,KACAqC,GAAAgD,IAAAytB,EAAA0D,KAAAC,UAAAghB,WAAAjF,OAAAmoF,GACA,SAAApjG,GACA,GAAAA,EAAA,CACAzE,EAAAC,MAAA4jB,KAAApf,EACA9pB,EAAAqc,YAAA,SAAAD,SAAA,SAEA,IACA+nB,GADA1W,EAAAztB,EAAAyG,KAAA,yBAIA09B,GADAra,EAAAqc,OACAvxC,EAAAy1B,GAAAuJ,KAAAzX,MAAA,kBACA1gB,IAAAquB,EAAAqc,SAGAvxC,EAAAy1B,GAAAoD,MAAAtR,MAAA,6BAEAgoB,EAAAvvC,EAAAy1B,GAAAoD,KAAA0W,EAAAvvC,EAAAy1B,GAAAhlB,GAAA8W,MAAA,WACAsR,EAAAnyB,KAAA,IACAmyB,EAAArX,OAAAmiB,EAAAsL,QAAAK,eAAAC,GACAC,SAAA,4BACAC,QAAA,aACAG,OAAAxkC,EACAskC,SACA8kI,OAAAppK,EAAAuc,SAAA,iBAAAmK,GACA,WACAn0B,KAAA01C,MAAA,WAEAohI,QAAA,WACA92K,KAAA01C,MAAA,gBAKA,kBAAAilF,GACA9lG,EAAAtB,MAAA,gSAQAT,GAAAC,MAAA4jB,KACAlpC,EAAAqc,YAAA,UAAAD,SAAA,QAEAxnB,GAAA,eAAAue,QAAA,UAEA,SAMA80B,MAAA,SAAAzgB,GACA,GAAAxnB,GAAApL,EAAArC,MACA0Q,EAAA1Q,KAAA0Q,KAlFA,SAmFAyH,EAAA9V,EAAA4yB,EAAA9c,QACAkU,EAAA3b,EAAA2b,IACA6sG,EAAA/gH,EAAAsC,QAAA,iBAAA/J,KAAA,UACAs2H,EAAA7uH,EAAAsC,QAAA,gBAAA/J,KAAA,UAAA,QAEAwoH,KACA7sG,GAAA,WAAAhB,mBAAA6tG,IAEA,SAAA8N,EACA0vC,EAAArqJ,EAAA,SACA,iDACA,WACA5e,EAAAioC,MAAA,eAGA7gB,EAAAlX,MACAqd,MAAA,QACA/1B,KAAA,WACA,GAAAgU,GAAA5W,EAAAy1B,GAAA7e,QAAA0D,KAAA,KACAiN,MAAA,6BACAuc,eAAA,SAEA,WACAnmC,MAAA6jB,OAAAxhB,EAAAy1B,GAAAqQ,QAAAve,MAAA,QAAA1gB,IAAAmjB,IACApT,IAEAsuB,QAAA,WACA95B,EAAAioC,MAAA,iBASAqhI,UAAA,WACA/2K,KAAA01C,MAAA,SAAA,UAOAM,QAAA,WACA,GAAAN,GAAArzC,EAAArC,KAEA60B,GAAA2S,aACAxM,MAAA,eACA3O,IAAAyG,EAAAC,MAAA4jB,KAAAqgI,mBACAlkJ,EAAA0D,KAAAC,UAAAwgJ,aACApvI,QAAA,WAAA6N,EAAAA,MAAA,SAAA,eAWAwhI,YAAA,SAAAjoI,GAIA,QAAAkoI,GAAA90J,EAAA+0J,GACA,GAAAzuI,GAAAtmC,EAAA,QACA,IAAA,GAAAsmC,EAAAznC,OAAA,CACA,GAAAV,GAAAmoC,EAAAA,KAAA,QAAAyuI,GACA52K,GAAA42K,KAAAl9H,EAAA73B,GAAA7hB,EAAA42K,KAPA,GAAAl9H,MACA3iB,EAAAzE,EAAAC,MAAA4jB,QAUA1H,GAAAA,GAAAknI,CACA,KAAA,GAAAh2K,GAAA,EAAAA,EAAA8uC,EAAA/tC,OAAAf,IAAA,CACA,GAAAkiB,GAAA4sB,EAAA9uC,EAEAo3B,GAAAlV,GACA63B,EAAA73B,GAAAkV,EAAAlV,GACA,gBAAAA,EACAkV,EAAA5a,KACAu9B,EAAAkrE,aAAA7tF,EAAA5a,KACA4a,EAAA8/I,YAAA9/I,EAAA+/I,YACAp9H,EAAAkrE,aAAA7tF,EAAA8/I,WAAA,IAAA9/I,EAAA+/I,YACA//I,EAAA+/I,YACAp9H,EAAAkrE,aAAA7tF,EAAA+/I,YACA//I,EAAA8/I,WACAn9H,EAAAkrE,aAAA7tF,EAAA8/I,WACA9/I,EAAAggJ,UACAr9H,EAAAkrE,aAAA7tF,EAAAggJ,UAEAJ,EAAA,eAAA,QACA,YAAA90J,EACAkV,EAAAigJ,mBAAAjgJ,EAAAkgJ,oBACAv9H,EAAAzK,SAAAlY,EAAAkgJ,kBAAA,IAAAlgJ,EAAAigJ,mBACA,UAAAn1J,GACA80J,EAAA,SAAA,UAIA,MAAAj9H,IAMAw9H,OAAA,WACA,GAAA/gI,GAAA7jB,EAAAC,MAAA4jB,KACAlpC,EAAApL,EAAArC,KAEA22C,KACAA,EAAAghI,WACAt1K,EAAAirB,MAAAjB,IAAAsqB,EAAAghI,WACArpJ,QAAA,WACA7gB,EAAAioC,MAAA,SAAA,kBAEAjlC,MAAA,SAAAi3B,GACA7S,EAAAyT,UAAAZ,MAGA,SAAAiP,EAAAihI,aACA,UAAAjhI,EAAAihI,YACAxB,EAAAtjJ,EAAA0D,KAAAC,UAAAohJ,YACA/kJ,EAAAC,MAAA4jB,KAAAihI,YACA,WACAnqK,EAAAioC,MAAA,SAAA,oBAGAniB,MAAA,8BAoGAlxB,GAAA4O,GAAAykC,MAAA,SAAA3nB,GACA,MAAAuM,GAAAvM,GACAuM,EAAAvM,GACArrB,MAAA1C,KAAAmN,MAAAnC,UAAArI,MAAA3B,KAAAwG,UAAA,IACA,gBAAAumB,IAAAA,MAGA1rB,GAAAoO,MAAA,UAAAsd,EAAA,mCAFAuM,EAAAC,MAAA73B,MAAA1C,KAAAwH,aAKAkrB,UCnXA,SAAA/T,EAAA+7B,GACA,gBAAA96C,UAAA,mBAAAD,QAAA+6C,EAAA96C,SACA,kBAAA2yB,SAAAA,OAAAC,IAAAD,OAAA,MAAA,WAAAmoB,GACAA,EAAA/7B,EAAAm5J,GAAAn5J,EAAAm5J,SACA93K,KAAA,SAAAJ,GAAA,YAIA,SAAAm4K,GAAA5zK,EAAA2O,GACA,MAAA3O,GAAA2O,GAAA,EAAA3O,EAAA2O,EAAA,EAAA3O,GAAA2O,EAAA,EAAAm8E,IAGA,QAAA+oF,GAAA79E,GAEA,MADA,KAAAA,EAAAj5F,SAAAi5F,EAAA89E,EAAA99E,KAEAxzE,KAAA,SAAAxiB,EAAAtD,EAAAwyJ,EAAA6kB,GAGA,IAFA,MAAA7kB,IAAAA,EAAA,GACA,MAAA6kB,IAAAA,EAAA/zK,EAAAjD,QACAmyJ,EAAA6kB,GAAA,CACA,GAAA59G,GAAA+4F,EAAA6kB,IAAA,CACA/9E,GAAAh2F,EAAAm2D,GAAAz5D,GAAA,EAAAwyJ,EAAA/4F,EAAA,EACA49G,EAAA59G,EAEA,MAAA+4F,IAEAzuI,MAAA,SAAAzgB,EAAAtD,EAAAwyJ,EAAA6kB,GAGA,IAFA,MAAA7kB,IAAAA,EAAA,GACA,MAAA6kB,IAAAA,EAAA/zK,EAAAjD,QACAmyJ,EAAA6kB,GAAA,CACA,GAAA59G,GAAA+4F,EAAA6kB,IAAA,CACA/9E,GAAAh2F,EAAAm2D,GAAAz5D,GAAA,EAAAq3K,EAAA59G,EACA+4F,EAAA/4F,EAAA,EAEA,MAAA+4F,KAKA,QAAA4kB,GAAApyK,GACA,MAAA,UAAAG,EAAAnF,GACA,MAAAk3K,GAAAlyK,EAAAG,GAAAnF,IAQA,QAAAw3J,GAAA33G,EAAA76C,GACA,MAAAA,IAAAA,EAAAsyK,EAEA,KADA,GAAAh4K,GAAA,EAAAD,EAAAwgD,EAAAx/C,OAAA,EAAA6E,EAAA26C,EAAA,GAAA23G,EAAA,GAAAlrJ,OAAAjN,EAAA,EAAA,EAAAA,GACAC,EAAAD,GAAAm4J,EAAAl4J,GAAA0F,EAAAE,EAAAA,EAAA26C,IAAAvgD,GACA,OAAAk4J,GAGA,QAAA8f,GAAAh0K,EAAA2O,GACA,OAAA3O,EAAA2O,GAGA,QAAAslK,GAAAC,EAAAC,EAAAC,GACA,GAGAC,GACAnkD,EACAl0H,EACAs4K,EANAC,EAAAL,EAAAn3K,OACAy3K,EAAAL,EAAAp3K,OACA4gD,EAAA,GAAA30C,OAAAurK,EAAAC,EAQA,KAFA,MAAAJ,IAAAA,EAAAJ,GAEAK,EAAAr4K,EAAA,EAAAq4K,EAAAE,IAAAF,EACA,IAAAC,EAAAJ,EAAAG,GAAAnkD,EAAA,EAAAA,EAAAskD,IAAAtkD,IAAAl0H,EACA2hD,EAAA3hD,GAAAo4K,EAAAE,EAAAH,EAAAjkD,GAIA,OAAAvyE,GAGA,QAAA82H,GAAAz0K,EAAA2O,GACA,MAAAA,GAAA3O,GAAA,EAAA2O,EAAA3O,EAAA,EAAA2O,GAAA3O,EAAA,EAAA8qF,IAGA,QAAA4yC,GAAAhhI,GACA,MAAA,QAAAA,EAAAouF,KAAApuF,EAGA,QAAAg4K,GAAA/2H,EAAAg3H,GACA,GAIAvlK,GACA08C,EALA/vD,EAAA4hD,EAAA5gD,OACAjB,EAAA,EACAE,GAAA,EACA44K,EAAA,EAGA5jD,EAAA,CAEA,IAAA,MAAA2jD,EACA,OAAA34K,EAAAD,GACAoyB,MAAA/e,EAAAsuH,EAAA//E,EAAA3hD,OACA8vD,EAAA18C,EAAAwlK,EACAA,GAAA9oH,IAAAhwD,EACAk1H,GAAAllE,GAAA18C,EAAAwlK,QAMA,QAAA54K,EAAAD,GACAoyB,MAAA/e,EAAAsuH,EAAAi3C,EAAAh3H,EAAA3hD,GAAAA,EAAA2hD,OACAmO,EAAA18C,EAAAwlK,EACAA,GAAA9oH,IAAAhwD,EACAk1H,GAAAllE,GAAA18C,EAAAwlK,GAKA,IAAA94K,EAAA,EAAA,MAAAk1H,IAAAl1H,EAAA,GAGA,QAAA+4K,GAAAt4H,EAAA76C,GACA,GAAArF,GAAAq4K,EAAAn4H,EAAA76C,EACA,OAAArF,GAAA+J,KAAA87I,KAAA7lJ,GAAAA,EAGA,QAAAo7E,GAAA95B,EAAAg3H,GACA,GAEAvlK,GACAylD,EACAxuD,EAJAtK,EAAA4hD,EAAA5gD,OACAf,GAAA,CAKA,IAAA,MAAA24K,GACA,OAAA34K,EAAAD,GACA,GAAA,OAAAqT,EAAAuuC,EAAA3hD,KAAAoT,GAAAA,EAEA,IADAylD,EAAAxuD,EAAA+I,IACApT,EAAAD,GACA,OAAAqT,EAAAuuC,EAAA3hD,MACA64D,EAAAzlD,IAAAylD,EAAAzlD,GACA/I,EAAA+I,IAAA/I,EAAA+I,QAQA,QAAApT,EAAAD,GACA,GAAA,OAAAqT,EAAAulK,EAAAh3H,EAAA3hD,GAAAA,EAAA2hD,KAAAvuC,GAAAA,EAEA,IADAylD,EAAAxuD,EAAA+I,IACApT,EAAAD,GACA,OAAAqT,EAAAulK,EAAAh3H,EAAA3hD,GAAAA,EAAA2hD,MACAkX,EAAAzlD,IAAAylD,EAAAzlD,GACA/I,EAAA+I,IAAA/I,EAAA+I,GAOA,QAAAylD,EAAAxuD,GAQA,QAAAyuK,GAAAp4K,GACA,MAAA,YACA,MAAAA,IAIA,QAAA4uC,GAAA5uC,GACA,MAAAA,GAGA,QAAAq4K,GAAAt0K,EAAA4J,EAAA2Y,GACAviB,GAAAA,EAAA4J,GAAAA,EAAA2Y,GAAAjnB,EAAAsH,UAAAtG,QAAA,GAAAsN,EAAA5J,EAAAA,EAAA,EAAA,GAAA1E,EAAA,EAAA,GAAAinB,CAMA,KAJA,GAAAhnB,IAAA,EACAD,EAAA,EAAAqK,KAAAC,IAAA,EAAAD,KAAAI,MAAA6D,EAAA5J,GAAAuiB,IACAglC,EAAA,GAAAh/C,OAAAjN,KAEAC,EAAAD,GACAisD,EAAAhsD,GAAAyE,EAAAzE,EAAAgnB,CAGA,OAAAglC,GAOA,QAAAgtH,GAAAv0K,EAAA4J,EAAA4pC,GACA,GAAA/8B,GAEAnb,EACAi5K,EACAhyJ,EAHAhnB,GAAA,CAMA,IADAqO,GAAAA,EAAA5J,GAAAA,EAAAwzC,GAAAA,EACAxzC,IAAA4J,GAAA4pC,EAAA,EAAA,OAAAxzC,EAEA,KADAyW,EAAA7M,EAAA5J,KAAA1E,EAAA0E,EAAAA,EAAA4J,EAAAA,EAAAtO,GACA,KAAAinB,EAAAiyJ,EAAAx0K,EAAA4J,EAAA4pC,MAAA5xB,SAAAW,GAAA,QAEA,IAAAA,EAAA,EAIA,IAHAviB,EAAA2F,KAAAI,KAAA/F,EAAAuiB,GACA3Y,EAAAjE,KAAA8sB,MAAA7oB,EAAA2Y,GACAgyJ,EAAA,GAAAhsK,OAAAjN,EAAAqK,KAAAI,KAAA6D,EAAA5J,EAAA,MACAzE,EAAAD,GAAAi5K,EAAAh5K,IAAAyE,EAAAzE,GAAAgnB,MAKA,KAHAviB,EAAA2F,KAAA8sB,MAAAzyB,EAAAuiB,GACA3Y,EAAAjE,KAAAI,KAAA6D,EAAA2Y,GACAgyJ,EAAA,GAAAhsK,OAAAjN,EAAAqK,KAAAI,KAAA/F,EAAA4J,EAAA,MACArO,EAAAD,GAAAi5K,EAAAh5K,IAAAyE,EAAAzE,GAAAgnB,CAKA,OAFA9L,IAAA89J,EAAA99J,UAEA89J,EAGA,QAAAC,GAAAx0K,EAAA4J,EAAA4pC,GACA,GAAAjxB,IAAA3Y,EAAA5J,GAAA2F,KAAAC,IAAA,EAAA4tC,GACAihI,EAAA9uK,KAAA8sB,MAAA9sB,KAAAuwB,IAAA3T,GAAA5c,KAAA+uK,MACA7oK,EAAA0W,EAAA5c,KAAA+/J,IAAA,GAAA+O,EACA,OAAAA,IAAA,GACA5oK,GAAA8oK,GAAA,GAAA9oK,GAAA+oK,GAAA,EAAA/oK,GAAAorF,GAAA,EAAA,GAAAtxF,KAAA+/J,IAAA,GAAA+O,IACA9uK,KAAA+/J,IAAA,IAAA+O,IAAA5oK,GAAA8oK,GAAA,GAAA9oK,GAAA+oK,GAAA,EAAA/oK,GAAAorF,GAAA,EAAA,GAGA,QAAA49E,GAAA70K,EAAA4J,EAAA4pC,GACA,GAAAshI,GAAAnvK,KAAA+1B,IAAA9xB,EAAA5J,GAAA2F,KAAAC,IAAA,EAAA4tC,GACAuhI,EAAApvK,KAAA+/J,IAAA,GAAA//J,KAAA8sB,MAAA9sB,KAAAuwB,IAAA4+I,GAAAnvK,KAAA+uK,OACA7oK,EAAAipK,EAAAC,CAIA,OAHAlpK,IAAA8oK,GAAAI,GAAA,GACAlpK,GAAA+oK,GAAAG,GAAA,EACAlpK,GAAAorF,KAAA89E,GAAA,GACAnrK,EAAA5J,GAAA+0K,EAAAA,EAGA,QAAAC,GAAA93H,GACA,MAAAv3C,MAAAI,KAAAJ,KAAAuwB,IAAAgnB,EAAA5gD,QAAAqJ,KAAAsvK,KAAA,EAGA,QAAAC,KAKA,QAAAA,GAAAppK,GACA,GAAAvQ,GAEAU,EADAX,EAAAwQ,EAAAxP,OAEA4gD,EAAA,GAAA30C,OAAAjN,EAEA,KAAAC,EAAA,EAAAA,EAAAD,IAAAC,EACA2hD,EAAA3hD,GAAAoT,EAAA7C,EAAAvQ,GAAAA,EAAAuQ,EAGA,IAAAqpK,GAAAC,EAAAl4H,GACAm4H,EAAAF,EAAA,GACA5X,EAAA4X,EAAA,GACAG,EAAAC,EAAAr4H,EAAAm4H,EAAA9X,EAGAh1J,OAAAC,QAAA8sK,KACAA,EAAAT,EAAAQ,EAAA9X,EAAA+X,GACAA,EAAAhB,EAAA3uK,KAAAI,KAAAsvK,EAAAC,GAAAA,EAAA/X,EAAA+X,GAKA,KADA,GAAAj6K,GAAAi6K,EAAAh5K,OACAg5K,EAAA,IAAAD,GAAAC,EAAAnqK,UAAA9P,CACA,MAAAi6K,EAAAj6K,EAAA,GAAAkiK,GAAA+X,EAAA1lK,QAAAvU,CAEA,IACAm6K,GADAC,EAAA,GAAAltK,OAAAlN,EAAA,EAIA,KAAAE,EAAA,EAAAA,GAAAF,IAAAE,EACAi6K,EAAAC,EAAAl6K,MACAi6K,EAAAH,GAAA95K,EAAA,EAAA+5K,EAAA/5K,EAAA,GAAA85K,EACAG,EAAAjY,GAAAhiK,EAAAF,EAAAi6K,EAAA/5K,GAAAgiK,CAIA,KAAAhiK,EAAA,EAAAA,EAAAD,IAAAC,EACAU,EAAAihD,EAAA3hD,GACA85K,GAAAp5K,GAAAA,GAAAshK,GACAkY,EAAAC,GAAAJ,EAAAr5K,EAAA,EAAAZ,IAAA2G,KAAA8J,EAAAvQ,GAIA,OAAAk6K,GAhDA,GAAA9mK,GAAAk8B,EACAuqI,EAAAp+F,EACAu+F,EAAAP,CA6DA,OAZAE,GAAAvmK,MAAA,SAAA3Q,GACA,MAAA4E,WAAAtG,QAAAqS,EAAA,kBAAA3Q,GAAAA,EAAAq2K,EAAAr2K,GAAAk3K,GAAAvmK,GAGAumK,EAAAE,OAAA,SAAAp3K,GACA,MAAA4E,WAAAtG,QAAA84K,EAAA,kBAAAp3K,GAAAA,EAAAq2K,GAAAr2K,EAAA,GAAAA,EAAA,KAAAk3K,GAAAE,GAGAF,EAAAS,WAAA,SAAA33K,GACA,MAAA4E,WAAAtG,QAAAi5K,EAAA,kBAAAv3K,GAAAA,EAAAq2K,EAAA9rK,MAAAC,QAAAxK,GAAAD,GAAA3B,KAAA4B,GAAAA,GAAAk3K,GAAAK,GAGAL,EAGA,QAAAK,GAAAr4H,EAAA/7C,EAAA+yK,GAEA,GADA,MAAAA,IAAAA,EAAAj3C,GACA3hI,EAAA4hD,EAAA5gD,OAAA,CACA,IAAA6E,GAAAA,IAAA,GAAA7F,EAAA,EAAA,OAAA44K,EAAAh3H,EAAA,GAAA,EAAAA,EACA,IAAA/7C,GAAA,EAAA,OAAA+yK,EAAAh3H,EAAA5hD,EAAA,GAAAA,EAAA,EAAA4hD,EACA,IAAA5hD,GACAC,GAAAD,EAAA,GAAA6F,EACAyyK,EAAAjuK,KAAA8sB,MAAAl3B,GACAs4K,GAAAK,EAAAh3H,EAAA02H,GAAAA,EAAA12H,EAEA,OAAA22H,KADAK,EAAAh3H,EAAA02H,EAAA,GAAAA,EAAA,EAAA12H,GACA22H,IAAAt4K,EAAAq4K,IAGA,QAAAgC,GAAA14H,EAAAkX,EAAAxuD,GAEA,MADAs3C,GAAA94C,GAAAhI,KAAA8gD,EAAA+/E,GAAAnwH,KAAAqmK,GACAxtK,KAAAI,MAAAH,EAAAwuD,IAAA,GAAAmhH,EAAAr4H,EAAA,KAAAq4H,EAAAr4H,EAAA,MAAAv3C,KAAA+/J,IAAAxoH,EAAA5gD,QAAA,EAAA,KAGA,QAAAu5K,GAAA34H,EAAAkX,EAAAxuD,GACA,MAAAD,MAAAI,MAAAH,EAAAwuD,IAAA,IAAAggH,EAAAl3H,GAAAv3C,KAAA+/J,IAAAxoH,EAAA5gD,QAAA,EAAA,KAGA,QAAAsJ,GAAAs3C,EAAAg3H,GACA,GAEAvlK,GACA/I,EAHAtK,EAAA4hD,EAAA5gD,OACAf,GAAA,CAIA,IAAA,MAAA24K,GACA,OAAA34K,EAAAD,GACA,GAAA,OAAAqT,EAAAuuC,EAAA3hD,KAAAoT,GAAAA,EAEA,IADA/I,EAAA+I,IACApT,EAAAD,GACA,OAAAqT,EAAAuuC,EAAA3hD,KAAAoT,EAAA/I,IACAA,EAAA+I,OAQA,QAAApT,EAAAD,GACA,GAAA,OAAAqT,EAAAulK,EAAAh3H,EAAA3hD,GAAAA,EAAA2hD,KAAAvuC,GAAAA,EAEA,IADA/I,EAAA+I,IACApT,EAAAD,GACA,OAAAqT,EAAAulK,EAAAh3H,EAAA3hD,GAAAA,EAAA2hD,KAAAvuC,EAAA/I,IACAA,EAAA+I,EAOA,OAAA/I,GAGA,QAAAuuK,GAAAj3H,EAAAg3H,GACA,GAGAvlK,GAHArT,EAAA4hD,EAAA5gD,OACAjB,EAAAC,EACAC,GAAA,EAEAg1H,EAAA,CAEA,IAAA,MAAA2jD,EACA,OAAA34K,EAAAD,GACAoyB,MAAA/e,EAAAsuH,EAAA//E,EAAA3hD,OACAF,EADAk1H,GAAA5hH,MAMA,QAAApT,EAAAD,GACAoyB,MAAA/e,EAAAsuH,EAAAi3C,EAAAh3H,EAAA3hD,GAAAA,EAAA2hD,OACA7hD,EADAk1H,GAAA5hH,CAKA,IAAAtT,EAAA,MAAAk1H,GAAAl1H,EAGA,QAAAy6K,GAAA54H,EAAAg3H,GACA,GAEAvlK,GAFArT,EAAA4hD,EAAA5gD,OACAf,GAAA,EAEAw6K,IAEA,IAAA,MAAA7B,EACA,OAAA34K,EAAAD,GACAoyB,MAAA/e,EAAAsuH,EAAA//E,EAAA3hD,MACAw6K,EAAA/zK,KAAA2M,OAMA,QAAApT,EAAAD,GACAoyB,MAAA/e,EAAAsuH,EAAAi3C,EAAAh3H,EAAA3hD,GAAAA,EAAA2hD,MACA64H,EAAA/zK,KAAA2M,EAKA,OAAA4mK,GAAAQ,EAAAjpK,KAAAqmK,GAAA,IAGA,QAAAryK,GAAAk1K,GAQA,IAPA,GACA36K,GAGA8jE,EACArjB,EALAxgD,EAAA06K,EAAA15K,OAEAf,GAAA,EACAqB,EAAA,IAIArB,EAAAD,GAAAsB,GAAAo5K,EAAAz6K,GAAAe,MAGA,KAFA6iE,EAAA,GAAA52D,OAAA3L,KAEAtB,GAAA,GAGA,IAFAwgD,EAAAk6H,EAAA16K,GACAD,EAAAygD,EAAAx/C,SACAjB,GAAA,GACA8jE,IAAAviE,GAAAk/C,EAAAzgD,EAIA,OAAA8jE,GAGA,QAAA/K,GAAAlX,EAAAg3H,GACA,GAEAvlK,GACAylD,EAHA94D,EAAA4hD,EAAA5gD,OACAf,GAAA,CAIA,IAAA,MAAA24K,GACA,OAAA34K,EAAAD,GACA,GAAA,OAAAqT,EAAAuuC,EAAA3hD,KAAAoT,GAAAA,EAEA,IADAylD,EAAAzlD,IACApT,EAAAD,GACA,OAAAqT,EAAAuuC,EAAA3hD,KAAA64D,EAAAzlD,IACAylD,EAAAzlD,OAQA,QAAApT,EAAAD,GACA,GAAA,OAAAqT,EAAAulK,EAAAh3H,EAAA3hD,GAAAA,EAAA2hD,KAAAvuC,GAAAA,EAEA,IADAylD,EAAAzlD,IACApT,EAAAD,GACA,OAAAqT,EAAAulK,EAAAh3H,EAAA3hD,GAAAA,EAAA2hD,KAAAkX,EAAAzlD,IACAylD,EAAAzlD,EAOA,OAAAylD,GAGA,QAAA6hH,GAAAn6H,EAAAo6H,GAEA,IADA,GAAA36K,GAAA26K,EAAA55K,OAAA65K,EAAA,GAAA5tK,OAAAhN,GACAA,KAAA46K,EAAA56K,GAAAugD,EAAAo6H,EAAA36K,GACA,OAAA46K,GAGA,QAAA/3E,GAAAlhD,EAAAq4C,GACA,GAAAj6F,EAAA4hD,EAAA5gD,OAAA,CACA,GAAAhB,GAGA86K,EAFA76K,EAAA,EACAqB,EAAA,EAEAy5K,EAAAn5H,EAAAtgD,EAIA,KAFA,MAAA24F,IAAAA,EAAA49E,KAEA53K,EAAAD,IACAi6F,EAAA6gF,EAAAl5H,EAAA3hD,GAAA86K,GAAA,GAAA,IAAA9gF,EAAA8gF,EAAAA,MACAA,EAAAD,EAAAx5K,EAAArB,EAIA,OAAA,KAAAg6F,EAAA8gF,EAAAA,GAAAz5K,MAAA,IAGA,QAAA05K,GAAAx6H,EAAA83H,EAAAnkD,GAKA,IAJA,GACA30H,GACAS,EAFAF,GAAA,MAAAo0H,EAAA3zE,EAAAx/C,OAAAmzH,IAAAmkD,EAAA,MAAAA,EAAA,GAAAA,GAIAv4K,GACAE,EAAAoK,KAAAsH,SAAA5R,IAAA,EACAP,EAAAghD,EAAAzgD,EAAAu4K,GACA93H,EAAAzgD,EAAAu4K,GAAA93H,EAAAvgD,EAAAq4K,GACA93H,EAAAvgD,EAAAq4K,GAAA94K,CAGA,OAAAghD,GAGA,QAAAy0E,GAAArzE,EAAAg3H,GACA,GAEAvlK,GAFArT,EAAA4hD,EAAA5gD,OACAf,GAAA,EAEAg1H,EAAA,CAEA,IAAA,MAAA2jD,EACA,OAAA34K,EAAAD,IACAqT,GAAAuuC,EAAA3hD,MAAAg1H,GAAA5hH,OAKA,QAAApT,EAAAD,IACAqT,GAAAulK,EAAAh3H,EAAA3hD,GAAAA,EAAA2hD,MAAAqzE,GAAA5hH,EAIA,OAAA4hH,GAGA,QAAAgmD,GAAAC,GACA,KAAAl7K,EAAAk7K,EAAAl6K,QAAA,QACA,KAAA,GAAAf,IAAA,EAAAF,EAAA+4D,EAAAoiH,EAAAl6K,GAAAi6K,EAAA,GAAAhuK,OAAAlN,KAAAE,EAAAF,GACA,IAAA,GAAAC,GAAAsB,GAAA,EAAA2uH,EAAAgrD,EAAAh7K,GAAA,GAAAgN,OAAAjN,KAAAsB,EAAAtB,GACAiwH,EAAA3uH,GAAA45K,EAAA55K,GAAArB,EAGA,OAAAg7K,GAGA,QAAAj6K,GAAA8E,GACA,MAAAA,GAAA9E,OAGA,QAAAm6K,KACA,MAAAF,GAAA3zK,WAKA,QAAA8zK,GAAAz6K,GACA,MAAAA,GASA,QAAA06K,GAAA16K,GACA,MAAA,cAAAA,EAAA,IAAA,MAGA,QAAA26K,GAAAp6K,GACA,MAAA,gBAAAA,EAAA,IAAA,IAGA,QAAAq6K,GAAAC,GACA,MAAA,UAAA11K,GACA,OAAA01K,EAAA11K,IAIA,QAAA21K,GAAAD,GACA,GAAAzqJ,GAAA1mB,KAAAC,IAAA,EAAAkxK,EAAAE,YAAA,GAAA,CAEA,OADAF,GAAA32J,UAAAkM,EAAA1mB,KAAAwa,MAAAkM,IACA,SAAAjrB,GACA,OAAA01K,EAAA11K,GAAAirB,GAIA,QAAA4qJ,KACA,OAAA77K,KAAA87K,OAGA,QAAA55F,GAAA65F,EAAAL,GAWA,QAAAx5F,GAAAh1D,GACA,GAAA40B,GAAA,MAAAk6H,EAAAN,EAAAvC,MAAAuC,EAAAvC,MAAAz2K,MAAAg5K,EAAAO,GAAAP,EAAA1B,SAAAgC,EACAvrI,EAAA,MAAAyrI,EAAAR,EAAAQ,WAAAR,EAAAQ,WAAAx5K,MAAAg5K,EAAAO,GAAAX,EAAAY,EACAC,EAAA5xK,KAAAC,IAAA4xK,EAAA,GAAAC,EACAlwH,EAAAuvH,EAAAvvH,QACAmwH,GAAAnwH,EAAA,GAAA,GACAowH,GAAApwH,EAAAA,EAAAjrD,OAAA,GAAA,GACA2jB,GAAA62J,EAAAE,UAAAD,EAAAF,GAAAC,EAAAztF,QACA7hC,EAAAl/B,EAAAk/B,UAAAl/B,EAAAk/B,YAAAl/B,EACAyK,EAAAy0B,EAAA4jC,UAAA,WAAAt/E,MAAA,OACAjF,EAAA2gD,EAAA4jC,UAAA,SAAAt/E,KAAAoxC,EAAA45H,GAAAx1J,QACAs2J,EAAA/wK,EAAAohH,OACA4vD,EAAAhxK,EAAAi3B,QAAA7e,OAAA,KAAA9M,KAAA,QAAA,QACA6/C,EAAAnrD,EAAAwO,OAAA,QACA1Z,EAAAkL,EAAAwO,OAAA,OAEA0d,GAAAA,EAAAjyB,MAAAiyB,EAAA+K,QAAAioD,OAAA,OAAA,SACA5zE,KAAA,QAAA,UACAA,KAAA,SAAA,iBAEAtL,EAAAA,EAAA/F,MAAA+2K,GAEA7lH,EAAAA,EAAAlxD,MAAA+2K,EAAA54J,OAAA,QACA9M,KAAA,SAAA,gBACAA,KAAAlW,EAAA,IAAAuT,EAAAgoK,IAEA77K,EAAAA,EAAAmF,MAAA+2K,EAAA54J,OAAA,QACA9M,KAAA,OAAA,gBACAA,KAAAlW,EAAAuT,EAAA+nK,GACAplK,KAAA,KAAAglK,IAAAjmK,GAAA,MAAAimK,IAAA14I,GAAA,SAAA,WAEAnW,IAAAk/B,IACAz0B,EAAAA,EAAAwE,WAAAjP,GACAzhB,EAAAA,EAAA0wB,WAAAjP,GACA0pC,EAAAA,EAAAz6B,WAAAjP,GACA3sB,EAAAA,EAAA47B,WAAAjP,GAEAsvJ,EAAAA,EAAArgJ,WAAAjP,GACAnW,KAAA,UAAA2lK,IACA3lK,KAAA,YAAA,SAAA/Q,GAAA,MAAAwgB,UAAAxgB,EAAA6e,EAAA7e,IAAAi8C,EAAAj8C,GAAAhG,KAAA+D,aAAA,eAEA04K,EACA1lK,KAAA,UAAA2lK,IACA3lK,KAAA,YAAA,SAAA/Q,GAAA,GAAAD,GAAA/F,KAAAW,WAAAm7K,MAAA,OAAA75H,GAAAl8C,GAAAygB,SAAAzgB,EAAAA,EAAAC,IAAAD,EAAA8e,EAAA7e,OAGAw2K,EAAAvvK,SAEA0qB,EACA5gB,KAAA,IAAAglK,IAAAp1J,IAAAo1J,GAAAn3J,GACA+3J,EAAA,IAAAvoK,EAAAuoK,EAAA,IAAAL,EAAA,QAAAC,EAAA,IAAAnoK,EAAAuoK,EAAA,QAAAL,EAAA,IAAAC,EACAI,EAAA,IAAAL,EAAA,IAAAloK,EAAAuoK,EAAA,QAAAJ,EAAA,IAAAnoK,EAAAuoK,EAAA,IAAAL,EAAA,QAAAC,GAEA9wK,EACAsL,KAAA,UAAA,GACAA,KAAA,YAAA,SAAA/Q,GAAA,MAAAi8C,GAAAp9B,EAAA7e,MAEA4wD,EACA7/C,KAAAlW,EAAA,IAAAuT,EAAAgoK,GAEA77K,EACAwW,KAAAlW,EAAAuT,EAAA+nK,GACA57K,KAAAkwC,GAEA2b,EAAAvqD,OAAAg6K,GACA9kK,KAAA,OAAA,QACAA,KAAA,YAAA,IACAA,KAAA,cAAA,cACAA,KAAA,cAAAglK,IAAAn3J,GAAA,QAAAm3J,IAAAp1J,GAAA,MAAA,UAEAylC,EACApqD,KAAA,WAAAhC,KAAA87K,OAAAj3J,IAjFA,GAAAo3J,MACAD,EAAA,KACAE,EAAA,KACAE,EAAA,EACAO,EAAA,EACAN,EAAA,EACAjoK,EAAA2nK,IAAAjmK,IAAAimK,IAAAp1J,IAAA,EAAA,EACA9lB,EAAAk7K,IAAAp1J,IAAAo1J,IAAAn3J,GAAA,IAAA,IACAq9B,EAAA85H,IAAAjmK,IAAAimK,IAAA14I,GAAAk4I,EAAAC,CAgHA,OApCAt5F,GAAAw5F,MAAA,SAAA94K,GACA,MAAA4E,WAAAtG,QAAAw6K,EAAA94K,EAAAs/E,GAAAw5F,GAGAx5F,EAAAi3F,MAAA,WACA,MAAA8C,GAAAW,GAAA57K,KAAAwG,WAAA06E,GAGAA,EAAA+5F,cAAA,SAAAr5K,GACA,MAAA4E,WAAAtG,QAAA+6K,EAAA,MAAAr5K,KAAAg6K,GAAA57K,KAAA4B,GAAAs/E,GAAA+5F,EAAAt5K,SAGAu/E,EAAA85F,WAAA,SAAAp5K,GACA,MAAA4E,WAAAtG,QAAA86K,EAAA,MAAAp5K,EAAA,KAAAg6K,GAAA57K,KAAA4B,GAAAs/E,GAAA85F,GAAAA,EAAAr5K,SAGAu/E,EAAAg6F,WAAA,SAAAt5K,GACA,MAAA4E,WAAAtG,QAAAg7K,EAAAt5K,EAAAs/E,GAAAg6F,GAGAh6F,EAAA26F,SAAA,SAAAj6K,GACA,MAAA4E,WAAAtG,QAAAk7K,EAAAO,GAAA/5K,EAAAs/E,GAAAk6F,GAGAl6F,EAAAk6F,cAAA,SAAAx5K,GACA,MAAA4E,WAAAtG,QAAAk7K,GAAAx5K,EAAAs/E,GAAAk6F,GAGAl6F,EAAAy6F,cAAA,SAAA/5K,GACA,MAAA4E,WAAAtG,QAAAy7K,GAAA/5K,EAAAs/E,GAAAy6F,GAGAz6F,EAAAm6F,YAAA,SAAAz5K,GACA,MAAA4E,WAAAtG,QAAAm7K,GAAAz5K,EAAAs/E,GAAAm6F,GAGAn6F,EAGA,QAAA46F,GAAApB,GACA,MAAAx5F,GAAApsE,GAAA4lK,GAGA,QAAAqB,GAAArB,GACA,MAAAx5F,GAAAt9D,GAAA82J,GAGA,QAAAsB,GAAAtB,GACA,MAAAx5F,GAAA7+C,GAAAq4I,GAGA,QAAAuB,GAAAvB,GACA,MAAAx5F,GAAAv7D,GAAA+0J,GAKA,QAAA58J,KACA,IAAA,GAAApf,GAAAS,EAAA,EAAAD,EAAAsH,UAAAtG,OAAA0B,KAAAzC,EAAAD,IAAAC,EAAA,CACA,KAAAT,EAAA8H,UAAArH,GAAA,KAAAT,IAAAkD,GAAA,KAAA,IAAA9C,OAAA,iBAAAJ,EACAkD,GAAAlD,MAEA,MAAA,IAAAw9K,GAAAt6K,GAGA,QAAAs6K,GAAAt6K,GACA5C,KAAA4C,EAAAA,EAGA,QAAAu6K,GAAAC,EAAAv2H,GACA,MAAAu2H,GAAAnrK,OAAA1B,MAAA,SAAAvH,IAAA,SAAAtJ,GACA,GAAAid,GAAA,GAAAxc,EAAAT,EAAAmR,QAAA,IAEA,IADA1Q,GAAA,IAAAwc,EAAAjd,EAAAiD,MAAAxC,EAAA,GAAAT,EAAAA,EAAAiD,MAAA,EAAAxC,IACAT,IAAAmnD,EAAA91C,eAAArR,GAAA,KAAA,IAAAI,OAAA,iBAAAJ,EACA,QAAAuH,KAAAvH,EAAAid,KAAAA,KA6CA,QAAAtX,GAAA4B,EAAA0V,GACA,IAAA,GAAA5b,GAAAZ,EAAA,EAAAD,EAAA+G,EAAA/F,OAAAf,EAAAD,IAAAC,EACA,IAAAY,EAAAkG,EAAA9G,IAAAwc,OAAAA,EACA,MAAA5b,GAAAwS,MAKA,QAAAtP,GAAAgD,EAAA0V,EAAAmyG,GACA,IAAA,GAAA3uH,GAAA,EAAAD,EAAA+G,EAAA/F,OAAAf,EAAAD,IAAAC,EACA,GAAA8G,EAAA9G,GAAAwc,OAAAA,EAAA,CACA1V,EAAA9G,GAAA4R,GAAA9K,EAAAA,EAAAtE,MAAA,EAAAxC,GAAAiM,OAAAnF,EAAAtE,MAAAxC,EAAA,GACA,OAIA,MADA,OAAA2uH,GAAA7nH,EAAAL,MAAA+V,KAAAA,EAAApJ,MAAAu7G,IACA7nH,EAaA,QAAAkY,GAAAxC,GACA,GAAAihC,GAAAjhC,GAAA,GAAAxc,EAAAy9C,EAAA/sC,QAAA,IAEA,OADA1Q,IAAA,GAAA,WAAAy9C,EAAAjhC,EAAAha,MAAA,EAAAxC,MAAAwc,EAAAA,EAAAha,MAAAxC,EAAA,IACAi1J,GAAArkJ,eAAA6sC,IAAAw8B,MAAAg7E,GAAAx3G,GAAAkG,MAAAnnC,GAAAA,EAGA,QAAA0gK,GAAA1gK,GACA,MAAA,YACA,GAAA9c,GAAAG,KAAA+E,cACA4xK,EAAA32K,KAAAs9K,YACA,OAAA3G,KAAA4G,IAAA19K,EAAA8V,gBAAA2nK,eAAAC,GACA19K,EAAAS,cAAAqc,GACA9c,EAAA29K,gBAAA7G,EAAAh6J,IAIA,QAAA8gK,GAAAC,GACA,MAAA,YACA,MAAA19K,MAAA+E,cAAAy4K,gBAAAE,EAAAtjG,MAAAsjG,EAAA55H,QAIA,QAAA65H,IAAAhhK,GACA,GAAA+gK,GAAAv+J,EAAAxC,EACA,QAAA+gK,EAAA55H,MACA25H,EACAJ,GAAAK,GAGA,QAAAE,OAEA,QAAA5jK,IAAAA,GACA,MAAA,OAAAA,EAAA4jK,GAAA,WACA,MAAA59K,MAAA4tE,cAAA5zD,IAIA,QAAA6jK,IAAA5jK,GACA,kBAAAA,KAAAA,EAAAD,GAAAC,GAEA,KAAA,GAAAg7G,GAAAj1H,KAAA89K,QAAA79K,EAAAg1H,EAAA/zH,OAAA68K,EAAA,GAAA5wK,OAAAlN,GAAAuB,EAAA,EAAAA,EAAAvB,IAAAuB,EACA,IAAA,GAAA87C,GAAA0gI,EAAArvI,EAAAsmF,EAAAzzH,GAAAtB,EAAAyuC,EAAAztC,OAAA+8K,EAAAF,EAAAv8K,GAAA,GAAA2L,OAAAjN,GAAAC,EAAA,EAAAA,EAAAD,IAAAC,GACAm9C,EAAA3O,EAAAxuC,MAAA69K,EAAA/jK,EAAAjZ,KAAAs8C,EAAAA,EAAA4gI,SAAA/9K,EAAAwuC,MACA,YAAA2O,KAAA0gI,EAAAE,SAAA5gI,EAAA4gI,UACAD,EAAA99K,GAAA69K,EAKA,OAAA,IAAA50F,IAAA20F,EAAA/9K,KAAAm+K,UAGA,QAAA1xK,MACA,SAGA,QAAA2xK,IAAApkK,GACA,MAAA,OAAAA,EAAAvN,GAAA,WACA,MAAAzM,MAAAyF,iBAAAuU,IAIA,QAAAqkK,IAAApkK,GACA,kBAAAA,KAAAA,EAAAmkK,GAAAnkK,GAEA,KAAA,GAAAg7G,GAAAj1H,KAAA89K,QAAA79K,EAAAg1H,EAAA/zH,OAAA68K,KAAAljK,KAAArZ,EAAA,EAAAA,EAAAvB,IAAAuB,EACA,IAAA,GAAA87C,GAAA3O,EAAAsmF,EAAAzzH,GAAAtB,EAAAyuC,EAAAztC,OAAAf,EAAA,EAAAA,EAAAD,IAAAC,GACAm9C,EAAA3O,EAAAxuC,MACA49K,EAAAn3K,KAAAqT,EAAAjZ,KAAAs8C,EAAAA,EAAA4gI,SAAA/9K,EAAAwuC,IACA9zB,EAAAjU,KAAA02C,GAKA,OAAA,IAAA8rC,IAAA20F,EAAAljK,GAGA,QAAAyjK,IAAAtkK,GACA,MAAA,YACA,MAAAha,MAAAiU,QAAA+F,IAIA,QAAAukK,IAAAt8K,GACA,kBAAAA,KAAAA,EAAAq8K,GAAAr8K,GAEA,KAAA,GAAAgzH,GAAAj1H,KAAA89K,QAAA79K,EAAAg1H,EAAA/zH,OAAA68K,EAAA,GAAA5wK,OAAAlN,GAAAuB,EAAA,EAAAA,EAAAvB,IAAAuB,EACA,IAAA,GAAA87C,GAAA3O,EAAAsmF,EAAAzzH,GAAAtB,EAAAyuC,EAAAztC,OAAA+8K,EAAAF,EAAAv8K,MAAArB,EAAA,EAAAA,EAAAD,IAAAC,GACAm9C,EAAA3O,EAAAxuC,KAAA8B,EAAAjB,KAAAs8C,EAAAA,EAAA4gI,SAAA/9K,EAAAwuC,IACAsvI,EAAAr3K,KAAA02C,EAKA,OAAA,IAAA8rC,IAAA20F,EAAA/9K,KAAAm+K,UAGA,QAAAK,IAAA5jJ,GACA,MAAA,IAAAztB,OAAAytB,EAAA15B,QAGA,QAAAu9K,MACA,MAAA,IAAAr1F,IAAAppF,KAAA0+K,QAAA1+K,KAAA89K,QAAA90K,IAAAw1K,IAAAx+K,KAAAm+K,UAGA,QAAAQ,IAAA7lK,EAAA0oC,GACAxhD,KAAA+E,cAAA+T,EAAA/T,cACA/E,KAAAs9K,aAAAxkK,EAAAwkK,aACAt9K,KAAA4+K,MAAA,KACA5+K,KAAA6+K,QAAA/lK,EACA9Y,KAAAk+K,SAAA18H,EAWA,QAAAs9H,IAAAj+K,GACA,MAAA,YACA,MAAAA,IAMA,QAAAk+K,IAAAjmK,EAAA61B,EAAAjM,EAAA9H,EAAAiyF,EAAAn8G,GASA,IARA,GACA4sC,GADAn9C,EAAA,EAEA6+K,EAAArwI,EAAAztC,OACA+9K,EAAAvuK,EAAAxP,OAKAf,EAAA8+K,IAAA9+K,GACAm9C,EAAA3O,EAAAxuC,KACAm9C,EAAA4gI,SAAAxtK,EAAAvQ,GACAy6B,EAAAz6B,GAAAm9C,GAEA5a,EAAAviC,GAAA,GAAAw+K,IAAA7lK,EAAApI,EAAAvQ,GAKA,MAAAA,EAAA6+K,IAAA7+K,GACAm9C,EAAA3O,EAAAxuC,MACA0sH,EAAA1sH,GAAAm9C,GAKA,QAAA4hI,IAAApmK,EAAA61B,EAAAjM,EAAA9H,EAAAiyF,EAAAn8G,EAAA2R,GACA,GAAAliB,GACAm9C,EAKA6hI,EAJAC,KACAJ,EAAArwI,EAAAztC,OACA+9K,EAAAvuK,EAAAxP,OACAm+K,EAAA,GAAAlyK,OAAA6xK,EAKA,KAAA7+K,EAAA,EAAAA,EAAA6+K,IAAA7+K,GACAm9C,EAAA3O,EAAAxuC,MACAk/K,EAAAl/K,GAAAg/K,EAAAG,GAAAj9J,EAAArhB,KAAAs8C,EAAAA,EAAA4gI,SAAA/9K,EAAAwuC,GACAwwI,IAAAC,GACAvyD,EAAA1sH,GAAAm9C,EAEA8hI,EAAAD,GAAA7hI,EAQA,KAAAn9C,EAAA,EAAAA,EAAA8+K,IAAA9+K,EACAg/K,EAAAG,GAAAj9J,EAAArhB,KAAA8X,EAAApI,EAAAvQ,GAAAA,EAAAuQ,IACA4sC,EAAA8hI,EAAAD,KACAvkJ,EAAAz6B,GAAAm9C,EACAA,EAAA4gI,SAAAxtK,EAAAvQ,GACAi/K,EAAAD,GAAA,MAEAz8I,EAAAviC,GAAA,GAAAw+K,IAAA7lK,EAAApI,EAAAvQ,GAKA,KAAAA,EAAA,EAAAA,EAAA6+K,IAAA7+K,GACAm9C,EAAA3O,EAAAxuC,KAAAi/K,EAAAC,EAAAl/K,MAAAm9C,IACAuvE,EAAA1sH,GAAAm9C,GAKA,QAAAiiI,IAAAhsK,EAAA8O,GACA,IAAA9O,EAGA,MAFA7C,GAAA,GAAAvD,OAAAnN,KAAAw9C,QAAAh8C,GAAA,EACAxB,KAAAgC,KAAA,SAAAgE,GAAA0K,IAAAlP,GAAAwE,IACA0K,CAGA,IAAAhC,GAAA2T,EAAA68J,GAAAH,GACAlkK,EAAA7a,KAAAm+K,SACAlpD,EAAAj1H,KAAA89K,OAEA,mBAAAvqK,KAAAA,EAAAurK,GAAAvrK,GAEA,KAAA,GAAAtT,GAAAg1H,EAAA/zH,OAAA05B,EAAA,GAAAztB,OAAAlN,GAAAyiC,EAAA,GAAAv1B,OAAAlN,GAAA4sH,EAAA,GAAA1/G,OAAAlN,GAAAuB,EAAA,EAAAA,EAAAvB,IAAAuB,EAAA,CACA,GAAAsX,GAAA+B,EAAArZ,GACAmtC,EAAAsmF,EAAAzzH,GACAw9K,EAAArwI,EAAAztC,OACAwP,EAAA6C,EAAAvS,KAAA8X,EAAAA,GAAAA,EAAAolK,SAAA18K,EAAAqZ,GACAokK,EAAAvuK,EAAAxP,OACAs+K,EAAA98I,EAAAlhC,GAAA,GAAA2L,OAAA8xK,GACAQ,EAAA7kJ,EAAAp5B,GAAA,GAAA2L,OAAA8xK,EAGAvwK,GAAAoK,EAAA61B,EAAA6wI,EAAAC,EAFA5yD,EAAArrH,GAAA,GAAA2L,OAAA6xK,GAEAtuK,EAAA2R,EAKA,KAAA,GAAAm6B,GAAA/oC,EAAA+kK,EAAA,EAAAnkD,EAAA,EAAAmkD,EAAAyG,IAAAzG,EACA,GAAAh8H,EAAAgjI,EAAAhH,GAAA,CAEA,IADAA,GAAAnkD,IAAAA,EAAAmkD,EAAA,KACA/kK,EAAAgsK,EAAAprD,OAAAA,EAAA4qD,IACAziI,EAAAoiI,MAAAnrK,GAAA,MAQA,MAHAmnB,GAAA,GAAAwuD,IAAAxuD,EAAA/f,GACA+f,EAAA8jJ,OAAAh8I,EACA9H,EAAA8kJ,MAAA7yD,EACAjyF,EAGA,QAAA+kJ,MACA,MAAA,IAAAv2F,IAAAppF,KAAA0/K,OAAA1/K,KAAA89K,QAAA90K,IAAAw1K,IAAAx+K,KAAAm+K,UAGA,QAAAyB,IAAAC,EAAAC,EAAAC,GACA,GAAAr9I,GAAA1iC,KAAA0iC,QAAA9H,EAAA56B,KAAA6sH,EAAA7sH,KAAA6sH,MAIA,OAHAnqF,GAAA,kBAAAm9I,GAAAA,EAAAn9I,GAAAA,EAAA7e,OAAAg8J,EAAA,IACA,MAAAC,IAAAllJ,EAAAklJ,EAAAllJ,IACA,MAAAmlJ,EAAAlzD,EAAA5/G,SAAA8yK,EAAAlzD,GACAnqF,GAAA9H,EAAA8H,EAAAh9B,MAAAk1B,GAAA1U,QAAA0U,EAGA,QAAAolJ,IAAAC,GAEA,IAAA,GAAAC,GAAAlgL,KAAA89K,QAAAqC,EAAAF,EAAAnC,QAAAsC,EAAAF,EAAAh/K,OAAA+tH,EAAAkxD,EAAAj/K,OAAAjB,EAAAsK,KAAAyuD,IAAAonH,EAAAnxD,GAAAoxD,EAAA,GAAAlzK,OAAAizK,GAAA5+K,EAAA,EAAAA,EAAAvB,IAAAuB,EACA,IAAA,GAAA87C,GAAAgjI,EAAAJ,EAAA1+K,GAAA++K,EAAAJ,EAAA3+K,GAAAtB,EAAAogL,EAAAp/K,OAAAwE,EAAA26K,EAAA7+K,GAAA,GAAA2L,OAAAjN,GAAAC,EAAA,EAAAA,EAAAD,IAAAC,GACAm9C,EAAAgjI,EAAAngL,IAAAogL,EAAApgL,MACAuF,EAAAvF,GAAAm9C,EAKA,MAAA97C,EAAA4+K,IAAA5+K,EACA6+K,EAAA7+K,GAAA0+K,EAAA1+K,EAGA,OAAA,IAAA4nF,IAAAi3F,EAAArgL,KAAAm+K,UAGA,QAAAqC,MAEA,IAAA,GAAAvrD,GAAAj1H,KAAA89K,QAAAt8K,GAAA,EAAAvB,EAAAg1H,EAAA/zH,SAAAM,EAAAvB,GACA,IAAA,GAAAq9C,GAAA3O,EAAAsmF,EAAAzzH,GAAArB,EAAAwuC,EAAAztC,OAAA,EAAAuS,EAAAk7B,EAAAxuC,KAAAA,GAAA,IACAm9C,EAAA3O,EAAAxuC,MACAsT,GAAA,EAAA6pC,EAAAzmC,wBAAApD,IAAAA,EAAA9S,WAAAojB,aAAAu5B,EAAA7pC,GACAA,EAAA6pC,EAKA,OAAAt9C,MAGA,QAAAygL,IAAAtmF,GAGA,QAAAumF,GAAAv8K,EAAA2O,GACA,MAAA3O,IAAA2O,EAAAqnF,EAAAh2F,EAAA+5K,SAAAprK,EAAAorK,WAAA/5K,GAAA2O,EAHAqnF,IAAAA,EAAAwmF,GAMA,KAAA,GAAA1rD,GAAAj1H,KAAA89K,QAAA79K,EAAAg1H,EAAA/zH,OAAA0/K,EAAA,GAAAzzK,OAAAlN,GAAAuB,EAAA,EAAAA,EAAAvB,IAAAuB,EAAA,CACA,IAAA,GAAA87C,GAAA3O,EAAAsmF,EAAAzzH,GAAAtB,EAAAyuC,EAAAztC,OAAA2/K,EAAAD,EAAAp/K,GAAA,GAAA2L,OAAAjN,GAAAC,EAAA,EAAAA,EAAAD,IAAAC,GACAm9C,EAAA3O,EAAAxuC,MACA0gL,EAAA1gL,GAAAm9C,EAGAujI,GAAAnvK,KAAAgvK,GAGA,MAAA,IAAAt3F,IAAAw3F,EAAA5gL,KAAAm+K,UAAAj4J,QAGA,QAAAy6J,IAAAx8K,EAAA2O,GACA,MAAA3O,GAAA2O,GAAA,EAAA3O,EAAA2O,EAAA,EAAA3O,GAAA2O,EAAA,EAAAm8E,IAGA,QAAA6xF,MACA,GAAAhyD,GAAAtnH,UAAA,EAGA,OAFAA,WAAA,GAAAxH,KACA8uH,EAAApsH,MAAA,KAAA8E,WACAxH,KAGA,QAAA+gL,MACA,GAAAC,GAAA,GAAA7zK,OAAAnN,KAAAw9C,QAAAr9C,GAAA,CAEA,OADAH,MAAAgC,KAAA,WAAAg/K,IAAA7gL,GAAAH,OACAghL,EAGA,QAAAC,MAEA,IAAA,GAAAhsD,GAAAj1H,KAAA89K,QAAAt8K,EAAA,EAAAvB,EAAAg1H,EAAA/zH,OAAAM,EAAAvB,IAAAuB,EACA,IAAA,GAAAmtC,GAAAsmF,EAAAzzH,GAAArB,EAAA,EAAAD,EAAAyuC,EAAAztC,OAAAf,EAAAD,IAAAC,EAAA,CACA,GAAAm9C,GAAA3O,EAAAxuC,EACA,IAAAm9C,EAAA,MAAAA,GAIA,MAAA,MAGA,QAAA4jI,MACA,GAAA1jI,GAAA,CAEA,OADAx9C,MAAAgC,KAAA,aAAAw7C,IACAA,EAGA,QAAA2jI,MACA,OAAAnhL,KAAAs9C,OAGA,QAAA8jI,IAAAtyD,GAEA,IAAA,GAAAmG,GAAAj1H,KAAA89K,QAAAt8K,EAAA,EAAAvB,EAAAg1H,EAAA/zH,OAAAM,EAAAvB,IAAAuB,EACA,IAAA,GAAA87C,GAAA3O,EAAAsmF,EAAAzzH,GAAArB,EAAA,EAAAD,EAAAyuC,EAAAztC,OAAAf,EAAAD,IAAAC,GACAm9C,EAAA3O,EAAAxuC,KAAA2uH,EAAA9tH,KAAAs8C,EAAAA,EAAA4gI,SAAA/9K,EAAAwuC,EAIA,OAAA3uC,MAGA,QAAAqhL,IAAA1kK,GACA,MAAA,YACA3c,KAAAgI,gBAAA2U,IAIA,QAAA2kK,IAAA5D,GACA,MAAA,YACA19K,KAAAuhL,kBAAA7D,EAAAtjG,MAAAsjG,EAAA55H,QAIA,QAAA09H,IAAA7kK,EAAApJ,GACA,MAAA,YACAvT,KAAA6S,aAAA8J,EAAApJ,IAIA,QAAAkuK,IAAA/D,EAAAnqK,GACA,MAAA,YACAvT,KAAA0hL,eAAAhE,EAAAtjG,MAAAsjG,EAAA55H,MAAAvwC,IAIA,QAAAouK,IAAAhlK,EAAApJ,GACA,MAAA,YACA,GAAA/S,GAAA+S,EAAA7Q,MAAA1C,KAAAwH,UACA,OAAAhH,EAAAR,KAAAgI,gBAAA2U,GACA3c,KAAA6S,aAAA8J,EAAAnc,IAIA,QAAAohL,IAAAlE,EAAAnqK,GACA,MAAA,YACA,GAAA/S,GAAA+S,EAAA7Q,MAAA1C,KAAAwH,UACA,OAAAhH,EAAAR,KAAAuhL,kBAAA7D,EAAAtjG,MAAAsjG,EAAA55H,OACA9jD,KAAA0hL,eAAAhE,EAAAtjG,MAAAsjG,EAAA55H,MAAAtjD,IAIA,QAAAqhL,IAAAllK,EAAApJ,GACA,GAAAmqK,GAAAv+J,EAAAxC,EAEA,IAAAnV,UAAAtG,OAAA,EAAA,CACA,GAAAo8C,GAAAt9C,KAAAs9C,MACA,OAAAogI,GAAA55H,MACAxG,EAAAwkI,eAAApE,EAAAtjG,MAAAsjG,EAAA55H,OACAxG,EAAAv5C,aAAA25K,GAGA,MAAA19K,MAAAgC,MAAA,MAAAuR,EACAmqK,EAAA55H,MAAAw9H,GAAAD,GAAA,kBAAA9tK,GACAmqK,EAAA55H,MAAA89H,GAAAD,GACAjE,EAAA55H,MAAA29H,GAAAD,IAAA9D,EAAAnqK,IAGA,QAAAsC,IAAAynC,GACA,MAAAA,GAAAv4C,eAAAu4C,EAAAv4C,cAAA8Q,aACAynC,EAAAz9C,UAAAy9C,GACAA,EAAAznC,YAGA,QAAAksK,IAAAplK,GACA,MAAA,YACA3c,KAAA0E,MAAAs9K,eAAArlK,IAIA,QAAAslK,IAAAtlK,EAAApJ,EAAAgmD,GACA,MAAA,YACAv5D,KAAA0E,MAAA6hB,YAAA5J,EAAApJ,EAAAgmD,IAIA,QAAA2oH,IAAAvlK,EAAApJ,EAAAgmD,GACA,MAAA,YACA,GAAA/4D,GAAA+S,EAAA7Q,MAAA1C,KAAAwH,UACA,OAAAhH,EAAAR,KAAA0E,MAAAs9K,eAAArlK,GACA3c,KAAA0E,MAAA6hB,YAAA5J,EAAAnc,EAAA+4D,IAIA,QAAA4oH,IAAAxlK,EAAApJ,EAAAgmD,GACA,MAAA/xD,WAAAtG,OAAA,EACAlB,KAAAgC,MAAA,MAAAuR,EACAwuK,GAAA,kBAAAxuK,GACA2uK,GACAD,IAAAtlK,EAAApJ,EAAA,MAAAgmD,EAAA,GAAAA,IACA6oH,GAAApiL,KAAAs9C,OAAA3gC,GAGA,QAAAylK,IAAA9kI,EAAA3gC,GACA,MAAA2gC,GAAA54C,MAAA+E,iBAAAkT,IACA9G,GAAAynC,GAAA74B,iBAAA64B,EAAA,MAAA7zC,iBAAAkT,GAGA,QAAA0lK,IAAA1lK,GACA,MAAA,kBACA3c,MAAA2c,IAIA,QAAA2lK,IAAA3lK,EAAApJ,GACA,MAAA,YACAvT,KAAA2c,GAAApJ,GAIA,QAAAgvK,IAAA5lK,EAAApJ,GACA,MAAA,YACA,GAAA/S,GAAA+S,EAAA7Q,MAAA1C,KAAAwH,UACA,OAAAhH,QAAAR,MAAA2c,GACA3c,KAAA2c,GAAAnc,GAIA,QAAAgiL,IAAA7lK,EAAApJ,GACA,MAAA/L,WAAAtG,OAAA,EACAlB,KAAAgC,MAAA,MAAAuR,EACA8uK,GAAA,kBAAA9uK,GACAgvK,GACAD,IAAA3lK,EAAApJ,IACAvT,KAAAs9C,OAAA3gC,GAGA,QAAA8lK,IAAA/qH,GACA,MAAAA,GAAAzlD,OAAA1B,MAAA,SAGA,QAAAmyK,IAAAplI,GACA,MAAAA,GAAAolI,WAAA,GAAAC,IAAArlI,GAGA,QAAAqlI,IAAArlI,GACAt9C,KAAA4iL,MAAAtlI,EACAt9C,KAAA6iL,OAAAJ,GAAAnlI,EAAAv5C,aAAA,UAAA,IAuBA,QAAA++K,IAAAxlI,EAAAotH,GAEA,IADA,GAAAl6H,GAAAkyI,GAAAplI,GAAAn9C,GAAA,EAAAD,EAAAwqK,EAAAxpK,SACAf,EAAAD,GAAAswC,EAAA7oC,IAAA+iK,EAAAvqK,IAGA,QAAA4iL,IAAAzlI,EAAAotH,GAEA,IADA,GAAAl6H,GAAAkyI,GAAAplI,GAAAn9C,GAAA,EAAAD,EAAAwqK,EAAAxpK,SACAf,EAAAD,GAAAswC,EAAAvjC,OAAAy9J,EAAAvqK,IAGA,QAAA6iL,IAAAtY,GACA,MAAA,YACAoY,GAAA9iL,KAAA0qK,IAIA,QAAAuY,IAAAvY,GACA,MAAA,YACAqY,GAAA/iL,KAAA0qK,IAIA,QAAAwY,IAAAxY,EAAAn3J,GACA,MAAA,aACAA,EAAA7Q,MAAA1C,KAAAwH,WAAAs7K,GAAAC,IAAA/iL,KAAA0qK,IAIA,QAAAyY,IAAAxmK,EAAApJ,GACA,GAAAm3J,GAAA+X,GAAA9lK,EAAA,GAEA,IAAAnV,UAAAtG,OAAA,EAAA,CAEA,IADA,GAAAsvC,GAAAkyI,GAAA1iL,KAAAs9C,QAAAn9C,GAAA,EAAAD,EAAAwqK,EAAAxpK,SACAf,EAAAD,GAAA,IAAAswC,EAAAzpC,SAAA2jK,EAAAvqK,IAAA,OAAA,CACA,QAAA,EAGA,MAAAH,MAAAgC,MAAA,kBAAAuR,GACA2vK,GAAA3vK,EACAyvK,GACAC,IAAAvY,EAAAn3J,IAGA,QAAA6vK,MACApjL,KAAA2G,YAAA,GAGA,QAAA08K,IAAA9vK,GACA,MAAA,YACAvT,KAAA2G,YAAA4M,GAIA,QAAA+vK,IAAA/vK,GACA,MAAA,YACA,GAAA/S,GAAA+S,EAAA7Q,MAAA1C,KAAAwH,UACAxH,MAAA2G,YAAA,MAAAnG,EAAA,GAAAA,GAIA,QAAA+iL,IAAAhwK,GACA,MAAA/L,WAAAtG,OACAlB,KAAAgC,KAAA,MAAAuR,EACA6vK,IAAA,kBAAA7vK,GACA+vK,GACAD,IAAA9vK,IACAvT,KAAAs9C,OAAA32C,YAGA,QAAA68K,MACAxjL,KAAAsG,UAAA,GAGA,QAAAm9K,IAAAlwK,GACA,MAAA,YACAvT,KAAAsG,UAAAiN,GAIA,QAAAmwK,IAAAnwK,GACA,MAAA,YACA,GAAA/S,GAAA+S,EAAA7Q,MAAA1C,KAAAwH,UACAxH,MAAAsG,UAAA,MAAA9F,EAAA,GAAAA,GAIA,QAAAmjL,IAAApwK,GACA,MAAA/L,WAAAtG,OACAlB,KAAAgC,KAAA,MAAAuR,EACAiwK,IAAA,kBAAAjwK,GACAmwK,GACAD,IAAAlwK,IACAvT,KAAAs9C,OAAAh3C,UAGA,QAAAs9K,MACA5jL,KAAAoT,aAAApT,KAAAW,WAAAD,YAAAV,MAGA,QAAA6jL,MACA,MAAA7jL,MAAAgC,KAAA4hL,IAGA,QAAAE,MACA9jL,KAAAkkG,iBAAAlkG,KAAAW,WAAAojB,aAAA/jB,KAAAA,KAAAW,WAAA+F,YAGA,QAAAq9K,MACA,MAAA/jL,MAAAgC,KAAA8hL,IAGA,QAAAE,IAAArnK,GACA,GAAAi9C,GAAA,kBAAAj9C,GAAAA,EAAAghK,GAAAhhK,EACA,OAAA3c,MAAAia,OAAA,WACA,MAAAja,MAAAU,YAAAk5D,EAAAl3D,MAAA1C,KAAAwH,cAIA,QAAAy8K,MACA,MAAA,MAGA,QAAAC,IAAAvnK,EAAAqH,GACA,GAAA41C,GAAA,kBAAAj9C,GAAAA,EAAAghK,GAAAhhK,GACA1C,EAAA,MAAA+J,EAAAigK,GAAA,kBAAAjgK,GAAAA,EAAAhK,GAAAgK,EACA,OAAAhkB,MAAAia,OAAA,WACA,MAAAja,MAAA+jB,aAAA61C,EAAAl3D,MAAA1C,KAAAwH,WAAAyS,EAAAvX,MAAA1C,KAAAwH,YAAA,QAIA,QAAAyF,MACA,GAAA6L,GAAA9Y,KAAAW,UACAmY,IAAAA,EAAAlY,YAAAZ,MAGA,QAAAmkL,MACA,MAAAnkL,MAAAgC,KAAAiL,IAGA,QAAAm3K,MACA,MAAApkL,MAAAW,WAAAojB,aAAA/jB,KAAAye,WAAA,GAAAze,KAAAoT,aAGA,QAAAixK,MACA,MAAArkL,MAAAW,WAAAojB,aAAA/jB,KAAAye,WAAA,GAAAze,KAAAoT,aAGA,QAAAkxK,IAAAC,GACA,MAAAvkL,MAAAia,OAAAsqK,EAAAF,GAAAD,IAGA,QAAAI,IAAAjxK,GACA,MAAA/L,WAAAtG,OACAlB,KAAAykL,SAAA,WAAAlxK,GACAvT,KAAAs9C,OAAA4gI,SAcA,QAAAwG,IAAAC,EAAAjqK,EAAAi0B,GAEA,MADAg2I,GAAAC,GAAAD,EAAAjqK,EAAAi0B,GACA,SAAAjnC,GACA,GAAAm9K,GAAAn9K,EAAAyZ,aACA0jK,KAAAA,IAAA7kL,MAAA,EAAA6kL,EAAAhuK,wBAAA7W,QACA2kL,EAAA3jL,KAAAhB,KAAA0H,IAKA,QAAAk9K,IAAAD,EAAAjqK,EAAAi0B,GACA,MAAA,UAAAm2I,GACA,GAAAC,GAAAnlL,EAAA8H,KACA9H,GAAA8H,MAAAo9K,CACA,KACAH,EAAA3jL,KAAAhB,KAAAA,KAAAk+K,SAAAxjK,EAAAi0B,GACA,QACA/uC,EAAA8H,MAAAq9K,IAKA,QAAAC,IAAA5H,GACA,MAAAA,GAAAnrK,OAAA1B,MAAA,SAAAvH,IAAA,SAAAtJ,GACA,GAAAid,GAAA,GAAAxc,EAAAT,EAAAmR,QAAA,IAEA,OADA1Q,IAAA,IAAAwc,EAAAjd,EAAAiD,MAAAxC,EAAA,GAAAT,EAAAA,EAAAiD,MAAA,EAAAxC,KACA8G,KAAAvH,EAAAid,KAAAA,KAIA,QAAAsoK,IAAAC,GACA,MAAA,YACA,GAAA1hK,GAAAxjB,KAAAmlL,IACA,IAAA3hK,EAAA,CACA,IAAA,GAAApjB,GAAAoB,EAAA,EAAArB,GAAA,EAAAF,EAAAujB,EAAAtiB,OAAAM,EAAAvB,IAAAuB,EACApB,EAAAojB,EAAAhiB,GAAA0jL,EAAAj+K,MAAA7G,EAAA6G,OAAAi+K,EAAAj+K,MAAA7G,EAAAuc,OAAAuoK,EAAAvoK,KAGA6G,IAAArjB,GAAAC,EAFAJ,KAAA6C,oBAAAzC,EAAA6G,KAAA7G,EAAAukL,SAAAvkL,EAAAglL,WAKAjlL,EAAAqjB,EAAAtiB,OAAAf,QACAH,MAAAmlL,OAIA,QAAAE,IAAAH,EAAA3xK,EAAA6xK,GACA,GAAAr2J,GAAAu2J,GAAAv0K,eAAAm0K,EAAAj+K,MAAAy9K,GAAAE;qCACA,OAAA,UAAA5+K,EAAA7F,EAAAwuC,GACA,GAAAvuC,GAAAojB,EAAAxjB,KAAAmlL,KAAAR,EAAA51J,EAAAxb,EAAApT,EAAAwuC,EACA,IAAAnrB,EAAA,IAAA,GAAAhiB,GAAA,EAAAvB,EAAAujB,EAAAtiB,OAAAM,EAAAvB,IAAAuB,EACA,IAAApB,EAAAojB,EAAAhiB,IAAAyF,OAAAi+K,EAAAj+K,MAAA7G,EAAAuc,OAAAuoK,EAAAvoK,KAIA,MAHA3c,MAAA6C,oBAAAzC,EAAA6G,KAAA7G,EAAAukL,SAAAvkL,EAAAglL,SACAplL,KAAA+V,iBAAA3V,EAAA6G,KAAA7G,EAAAukL,SAAAA,EAAAvkL,EAAAglL,QAAAA,QACAhlL,EAAAmT,MAAAA,EAIAvT,MAAA+V,iBAAAmvK,EAAAj+K,KAAA09K,EAAAS,GACAhlL,GAAA6G,KAAAi+K,EAAAj+K,KAAA0V,KAAAuoK,EAAAvoK,KAAApJ,MAAAA,EAAAoxK,SAAAA,EAAAS,QAAAA,GACA5hK,EACAA,EAAA5c,KAAAxG,GADAJ,KAAAmlL,MAAA/kL,IAKA,QAAAmlL,IAAAL,EAAA3xK,EAAA6xK,GACA,GAAAjlL,GAAAT,EAAA09K,EAAA4H,GAAAE,EAAA,IAAAhlL,EAAAk9K,EAAAl8K,MAEA,EAAA,KAAAsG,UAAAtG,OAAA,GAAA,CAcA,IAFAsiB,EAAAjQ,EAAA8xK,GAAAJ,GACA,MAAAG,IAAAA,GAAA,GACAjlL,EAAA,EAAAA,EAAAD,IAAAC,EAAAH,KAAAgC,KAAAwhB,EAAA45J,EAAAj9K,GAAAoT,EAAA6xK,GACA,OAAAplL,MAdA,GAAAwjB,GAAAxjB,KAAAs9C,OAAA6nI,IACA,IAAA3hK,EAAA,IAAA,GAAApjB,GAAAoB,EAAA,EAAAvB,EAAAujB,EAAAtiB,OAAAM,EAAAvB,IAAAuB,EACA,IAAArB,EAAA,EAAAC,EAAAojB,EAAAhiB,GAAArB,EAAAD,IAAAC,EACA,IAAAT,EAAA09K,EAAAj9K,IAAA8G,OAAA7G,EAAA6G,MAAAvH,EAAAid,OAAAvc,EAAAuc,KACA,MAAAvc,GAAAmT,OAaA,QAAAiyK,IAAAV,EAAAH,EAAArpJ,EAAAghB,GACA,GAAAyoI,GAAAnlL,EAAA8H,KACAo9K,GAAAW,YAAA7lL,EAAA8H,MACA9H,EAAA8H,MAAAo9K,CACA,KACA,MAAAH,GAAAjiL,MAAA44B,EAAAghB,GACA,QACA18C,EAAA8H,MAAAq9K,GAIA,QAAAznE,IAAAhgE,EAAAr2C,EAAAs0B,GACA,GAAAx7B,GAAA8V,GAAAynC,GACA51C,EAAA3H,EAAA2lL,WAEA,mBAAAh+K,GACAA,EAAA,GAAAA,GAAAT,EAAAs0B,IAEA7zB,EAAA3H,EAAAF,SAAA8lL,YAAA,SACApqJ,GAAA7zB,EAAAk+K,UAAA3+K,EAAAs0B,EAAA/Z,QAAA+Z,EAAA9Z,YAAA/Z,EAAAka,OAAA2Z,EAAA3Z,QACAla,EAAAk+K,UAAA3+K,GAAA,GAAA,IAGAq2C,EAAAggE,cAAA51G,GAGA,QAAAm+K,IAAA5+K,EAAAs0B,GACA,MAAA,YACA,MAAA+hF,IAAAt9G,KAAAiH,EAAAs0B,IAIA,QAAAuqJ,IAAA7+K,EAAAs0B,GACA,MAAA,YACA,MAAA+hF,IAAAt9G,KAAAiH,EAAAs0B,EAAA74B,MAAA1C,KAAAwH,aAIA,QAAAu+K,IAAA9+K,EAAAs0B,GACA,MAAAv7B,MAAAgC,MAAA,kBAAAu5B,GACAuqJ,GACAD,IAAA5+K,EAAAs0B,IAKA,QAAA6tD,IAAA6rC,EAAAp6G,GACA7a,KAAA89K,QAAA7oD,EACAj1H,KAAAm+K,SAAAtjK,EAGA,QAAAuxC,MACA,MAAA,IAAAg9B,MAAAvpF,SAAA8V,kBAAA2C,IAsCA,QAAA2B,IAAAD,GACA,MAAA,gBAAAA,GACA,GAAAovE,MAAAvpF,SAAA+tE,cAAA5zD,MAAAna,SAAA8V,kBACA,GAAAyzE,MAAApvE,IAAA1B,IAGA,QAAAshD,IAAAj9C,GACA,MAAA1C,IAAA0jK,GAAAhhK,GAAA3b,KAAAnB,SAAA8V,kBAKA,QAAAmuC,MACA,MAAA,IAAAkiI,IAGA,QAAAA,MACAhmL,KAAA4C,EAAA,OAAAqjL,IAAAn1K,SAAA,IAqBA,QAAA20K,MAEA,IADA,GAAA/nK,GAAAy6C,EAAAv4D,EAAA8H,MACAgW,EAAAy6C,EAAAstH,aAAAttH,EAAAz6C,CACA,OAAAy6C,GAGA,QAAAk/E,IAAA/5F,EAAA51C,GACA,GAAAolJ,GAAAxvG,EAAA4oI,iBAAA5oI,CAEA,IAAAwvG,EAAAq5B,eAAA,CACA,GAAA9uC,GAAAyV,EAAAq5B,gBAGA,OAFA9uC,GAAAx2I,EAAA6G,EAAA8a,QAAA60H,EAAAj2I,EAAAsG,EAAA+a,QACA40H,EAAAA,EAAA+uC,gBAAA9oI,EAAA+oI,eAAAC,YACAjvC,EAAAx2I,EAAAw2I,EAAAj2I,GAGA,GAAAsyE,GAAAp2B,EAAA52B,uBACA,QAAAhf,EAAA8a,QAAAkxD,EAAA/sD,KAAA22B,EAAAo8B,WAAAhyE,EAAA+a,QAAAixD,EAAA59D,IAAAwnC,EAAAipI,WAGA,QAAAC,IAAAlpI,GACA,GAAA51C,GAAA+9K,IAEA,OADA/9K,GAAAga,iBAAAha,EAAAA,EAAAga,eAAA,IACA21H,GAAA/5F,EAAA51C,GAGA,QAAAsoF,IAAAh2E,GACA,MAAA,gBAAAA,GACA,GAAAovE,KAAAvpF,SAAA4F,iBAAAuU,KAAAna,SAAA8V,kBACA,GAAAyzE,KAAA,MAAApvE,KAAAA,GAAA1B,IAGA,QAAA6mF,IAAA7hD,EAAAp6B,EAAAkgH,GACA57H,UAAAtG,OAAA,IAAAkiI,EAAAlgH,EAAAA,EAAAuiK,KAAA/jK,eAEA,KAAA,GAAAy9E,GAAAh/F,EAAA,EAAAD,EAAAgjB,EAAAA,EAAAhiB,OAAA,EAAAf,EAAAD,IAAAC,EACA,IAAAg/F,EAAAj8E,EAAA/iB,IAAAijI,aAAAA,EACA,MAAAiU,IAAA/5F,EAAA6hD,EAIA,OAAA,MAGA,QAAAj8E,IAAAo6B,EAAAp6B,GACA,MAAAA,IAAAA,EAAAuiK,KAAAviK,QAEA,KAAA,GAAA/iB,GAAA,EAAAD,EAAAgjB,EAAAA,EAAAhiB,OAAA,EAAAulL,EAAA,GAAAt5K,OAAAjN,GAAAC,EAAAD,IAAAC,EACAsmL,EAAAtmL,GAAAk3I,GAAA/5F,EAAAp6B,EAAA/iB,GAGA,OAAAsmL,GAGA,QAAAC,MACA9mL,EAAA8H,MAAA4Z,2BAGA,QAAAqlK,MACA/mL,EAAA8H,MAAAwY,iBACAtgB,EAAA8H,MAAA4Z,2BAGA,QAAAslK,IAAA1kK,GACA,GAAA5J,GAAA4J,EAAAriB,SAAA8V,gBACAsqK,EAAAhmK,GAAAiI,GAAAsB,GAAA,iBAAAmjK,IAAA,EACA,kBAAAruK,GACA2nK,EAAAz8J,GAAA,mBAAAmjK,IAAA,IAEAruK,EAAAuuK,WAAAvuK,EAAA5T,MAAAoiL,cACAxuK,EAAA5T,MAAAoiL,cAAA,QAIA,QAAAC,IAAA7kK,EAAA8kK,GACA,GAAA1uK,GAAA4J,EAAAriB,SAAA8V,gBACAsqK,EAAAhmK,GAAAiI,GAAAsB,GAAA,iBAAA,KACAwjK,KACA/G,EAAAz8J,GAAA,aAAAmjK,IAAA,GACAr7K,WAAA,WAAA20K,EAAAz8J,GAAA,aAAA,OAAA,IAEA,iBAAAlL,GACA2nK,EAAAz8J,GAAA,mBAAA,OAEAlL,EAAA5T,MAAAoiL,cAAAxuK,EAAAuuK,iBACAvuK,GAAAuuK,YAIA,QAAAI,IAAApmL,GACA,MAAA,YACA,MAAAA,IAIA,QAAAqmL,IAAA/uK,EAAAlR,EAAAkgL,EAAA30K,EAAA0Z,EAAArrB,EAAAO,EAAAwmF,EAAAE,EAAAhpE,GACA9e,KAAAmY,OAAAA,EACAnY,KAAAiH,KAAAA,EACAjH,KAAAmnL,QAAAA,EACAnnL,KAAAojI,WAAA5wH,EACAxS,KAAAksB,OAAAA,EACAlsB,KAAAa,EAAAA,EACAb,KAAAoB,EAAAA,EACApB,KAAA4nF,GAAAA,EACA5nF,KAAA8nF,GAAAA,EACA9nF,KAAA4C,EAAAkc,EASA,QAAAsoK,MACA,OAAAxnL,EAAA8H,MAAAuR,OAGA,QAAAouK,MACA,MAAArnL,MAAAW,WAGA,QAAA2mL,IAAAthL,GACA,MAAA,OAAAA,GAAAnF,EAAAjB,EAAA8H,MAAA7G,EAAAO,EAAAxB,EAAA8H,MAAAtG,GAAA4E,EAGA,QAAAuhL,MACA,MAAA,gBAAAvnL,MAGA,QAAAwnL,MAcA,QAAAA,GAAAvH,GACAA,EACAz8J,GAAA,iBAAAikK,GACA5lL,OAAA6lL,GACAlkK,GAAA,kBAAAmkK,GACAnkK,GAAA,iBAAAokK,GACApkK,GAAA,iCAAAqkK,GACAnjL,MAAA,eAAA,QACAA,MAAA,8BAAA,iBAGA,QAAA+iL,KACA,IAAAK,GAAAjmL,EAAAa,MAAA1C,KAAAwH,WAAA,CACA,GAAAugL,GAAAC,EAAA,QAAA7lJ,EAAAz/B,MAAA1C,KAAAwH,WAAAg/K,GAAAxmL,KAAAwH,UACAugL,KACA9tK,GAAAra,EAAA8H,MAAAwa,MAAAsB,GAAA,iBAAAykK,GAAA,GAAAzkK,GAAA,eAAA0kK,GAAA,GACAtB,GAAAhnL,EAAA8H,MAAAwa,MACAwkK,KACAyB,GAAA,EACAC,EAAAxoL,EAAA8H,MAAA8a,QACA6lK,EAAAzoL,EAAA8H,MAAA+a,QACAslK,EAAA,WAGA,QAAAE,KAEA,GADAtB,MACAwB,EAAA,CACA,GAAAvgG,GAAAhoF,EAAA8H,MAAA8a,QAAA4lK,EAAAtgG,EAAAloF,EAAA8H,MAAA+a,QAAA4lK,CACAF,GAAAvgG,EAAAA,EAAAE,EAAAA,EAAAwgG,EAEAC,EAAA/B,MAAA,QAGA,QAAA0B,KACAjuK,GAAAra,EAAA8H,MAAAwa,MAAAsB,GAAA,8BAAA,MACAujK,GAAAnnL,EAAA8H,MAAAwa,KAAAimK,GACAxB,KACA4B,EAAA/B,MAAA,OAGA,QAAAmB,KACA,GAAA9lL,EAAAa,MAAA1C,KAAAwH,WAAA,CACA,GAEArH,GAAA4nL,EAFAS,EAAA5oL,EAAA8H,MAAAga,eACA3gB,EAAAohC,EAAAz/B,MAAA1C,KAAAwH,WACAtH,EAAAsoL,EAAAtnL,MAEA,KAAAf,EAAA,EAAAA,EAAAD,IAAAC,GACA4nL,EAAAC,EAAAQ,EAAAroL,GAAAijI,WAAAriI,EAAAo+F,GAAAn/F,KAAAwH,cACAk/K,KACAqB,EAAA,WAKA,QAAAH,KACA,GACAznL,GAAA4nL,EADAS,EAAA5oL,EAAA8H,MAAAga,eACAxhB,EAAAsoL,EAAAtnL,MAEA,KAAAf,EAAA,EAAAA,EAAAD,IAAAC,GACA4nL,EAAAQ,EAAAC,EAAAroL,GAAAijI,eACAujD,KACAoB,EAAA,SAKA,QAAAF,KACA,GACA1nL,GAAA4nL,EADAS,EAAA5oL,EAAA8H,MAAAga,eACAxhB,EAAAsoL,EAAAtnL,MAIA,KAFA4mL,GAAA/+J,aAAA++J,GACAA,EAAAx8K,WAAA,WAAAw8K,EAAA,MAAA,KACA3nL,EAAA,EAAAA,EAAAD,IAAAC,GACA4nL,EAAAQ,EAAAC,EAAAroL,GAAAijI,eACAsjD,KACAqB,EAAA,QAKA,QAAAC,GAAAx1K,EAAA2vB,EAAAsmJ,EAAAntJ,EAAAghB,GACA,GAAAl4C,GAAAwjF,EAAAE,EAAA/hF,EAAA0iL,EAAAtmJ,EAAA3vB,GACAk2K,EAAAC,EAAA16F,MAEA,IAAAu3F,GAAA,GAAA0B,IAAAM,EAAA,cAAApjL,EAAAoO,EAAA0Z,EAAAnmB,EAAA,GAAAA,EAAA,GAAA,EAAA,EAAA2iL,GAAA,WACA,MAAA,QAAA9oL,EAAA8H,MAAAy/K,QAAA/iL,EAAA+iL,EAAAzkL,MAAA44B,EAAAghB,MACAsrC,EAAAxjF,EAAAvD,EAAAkF,EAAA,IAAA,EACA+hF,EAAA1jF,EAAAhD,EAAA2E,EAAA,IAAA,GACA,KAGA,MAAA,SAAAgiL,GAAA9gL,GACA,GAAA/G,GAAA0oL,EAAA7iL,CACA,QAAAkB,GACA,IAAA,QAAAshL,EAAA/1K,GAAAu1K,EAAA7nL,EAAAgsB,GAAA,MACA,KAAA,YAAAq8J,GAAA/1K,KAAA0Z,CACA,KAAA,OAAAnmB,EAAA0iL,EAAAtmJ,EAAA3vB,GAAAtS,EAAAgsB,EAEAs5J,GAAA,GAAA0B,IAAAM,EAAAvgL,EAAA7C,EAAAoO,EAAAtS,EAAA6F,EAAA,GAAA6hF,EAAA7hF,EAAA,GAAA+hF,EAAA/hF,EAAA,GAAA6iL,EAAA,GAAA7iL,EAAA,GAAA6iL,EAAA,GAAAF,GAAAA,EAAAhmL,MAAAgmL,GAAAzhL,EAAAq0B,EAAAghB,KA/GA,GAOA8rI,GACAC,EACAF,EACAL,EAVAjmL,EAAAulL,GACAjlJ,EAAAklJ,GACAF,EAAAG,GACAI,EAAAH,GACAgB,KACAI,EAAA7pK,EAAA,QAAA,OAAA,OACAoN,EAAA,EAKAo8J,EAAA,CAiIA,OAzBAd,GAAA3lL,OAAA,SAAAe,GACA,MAAA4E,WAAAtG,QAAAW,EAAA,kBAAAe,GAAAA,EAAAqkL,KAAArkL,GAAA4kL,GAAA3lL,GAGA2lL,EAAArlJ,UAAA,SAAAv/B,GACA,MAAA4E,WAAAtG,QAAAihC,EAAA,kBAAAv/B,GAAAA,EAAAqkL,GAAArkL,GAAA4kL,GAAArlJ,GAGAqlJ,EAAAL,QAAA,SAAAvkL,GACA,MAAA4E,WAAAtG,QAAAimL,EAAA,kBAAAvkL,GAAAA,EAAAqkL,GAAArkL,GAAA4kL,GAAAL,GAGAK,EAAAE,UAAA,SAAA9kL,GACA,MAAA4E,WAAAtG,QAAAwmL,EAAA,kBAAA9kL,GAAAA,EAAAqkL,KAAArkL,GAAA4kL,GAAAE,GAGAF,EAAAhkK,GAAA,WACA,GAAAjQ,GAAAo1K,EAAAnlK,GAAA9gB,MAAAimL,EAAAnhL,UACA,OAAA+L,KAAAo1K,EAAAnB,EAAAj0K,GAGAi0K,EAAAqB,cAAA,SAAAjmL,GACA,MAAA4E,WAAAtG,QAAAonL,GAAA1lL,GAAAA,GAAAA,EAAA4kL,GAAAj9K,KAAA87I,KAAAiiC,IAGAd,EAGA,QAAAj1J,IAAAnhB,EAAAspC,EAAA1vC,GACAoG,EAAApG,UAAA0vC,EAAA1vC,UAAAA,EACAA,EAAAoG,YAAAA,EAGA,QAAA9I,IAAAwQ,EAAAgwK,GACA,GAAA99K,GAAA2F,OAAAipD,OAAA9gD,EAAA9N,UACA,KAAA,GAAAqX,KAAAymK,GAAA99K,EAAAqX,GAAAymK,EAAAzmK,EACA,OAAArX,GAGA,QAAA+9K,OAoLA,QAAAp1I,IAAAlD,GACA,GAAAxwC,EAEA,OADAwwC,IAAAA,EAAA,IAAAx+B,OAAA1Q,eACAtB,EAAA+oL,GAAAvkL,KAAAgsC,KAAAxwC,EAAAypB,SAAAzpB,EAAA,GAAA,IAAA,GAAAgpL,IAAAhpL,GAAA,EAAA,GAAAA,GAAA,EAAA,IAAAA,GAAA,EAAA,GAAA,IAAAA,GAAA,GAAAA,IAAA,EAAA,GAAAA,EAAA,KACAA,EAAAipL,GAAAzkL,KAAAgsC,IAAA04I,GAAAz/J,SAAAzpB,EAAA,GAAA,MACAA,EAAAmpL,GAAA3kL,KAAAgsC,IAAA,GAAAw4I,IAAAhpL,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAA,IACAA,EAAAopL,GAAA5kL,KAAAgsC,IAAA,GAAAw4I,IAAA,IAAAhpL,EAAA,GAAA,IAAA,IAAAA,EAAA,GAAA,IAAA,IAAAA,EAAA,GAAA,IAAA,IACAA,EAAAqpL,GAAA7kL,KAAAgsC,IAAA84I,GAAAtpL,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,KACAA,EAAAupL,GAAA/kL,KAAAgsC,IAAA84I,GAAA,IAAAtpL,EAAA,GAAA,IAAA,IAAAA,EAAA,GAAA,IAAA,IAAAA,EAAA,GAAA,IAAAA,EAAA,KACAA,EAAAwpL,GAAAhlL,KAAAgsC,IAAAi5I,GAAAzpL,EAAA,GAAAA,EAAA,GAAA,IAAAA,EAAA,GAAA,IAAA,IACAA,EAAA0pL,GAAAllL,KAAAgsC,IAAAi5I,GAAAzpL,EAAA,GAAAA,EAAA,GAAA,IAAAA,EAAA,GAAA,IAAAA,EAAA,IACA2pL,GAAA74K,eAAA0/B,GAAA04I,GAAAS,GAAAn5I,IACA,gBAAAA,EAAA,GAAAw4I,IAAAh6F,IAAAA,IAAAA,IAAA,GACA,KAGA,QAAAk6F,IAAAjpL,GACA,MAAA,IAAA+oL,IAAA/oL,GAAA,GAAA,IAAAA,GAAA,EAAA,IAAA,IAAAA,EAAA,GAGA,QAAAqpL,IAAAlpL,EAAAc,EAAA2R,EAAA3O,GAEA,MADAA,IAAA,IAAA9D,EAAAc,EAAA2R,EAAAm8E,KACA,GAAAg6F,IAAA5oL,EAAAc,EAAA2R,EAAA3O,GAGA,QAAA0lL,IAAAzpL,GAEA,MADAA,aAAA2oL,MAAA3oL,EAAAuzC,GAAAvzC,IACAA,GACAA,EAAAA,EAAA0pL,MACA,GAAAb,IAAA7oL,EAAAC,EAAAD,EAAAe,EAAAf,EAAA0S,EAAA1S,EAAA4L,UAFA,GAAAi9K,IAKA,QAAAa,IAAAzpL,EAAAc,EAAA2R,EAAA9G,GACA,MAAA,KAAAxE,UAAAtG,OAAA2oL,GAAAxpL,GAAA,GAAA4oL,IAAA5oL,EAAAc,EAAA2R,EAAA,MAAA9G,EAAA,EAAAA,GAGA,QAAAi9K,IAAA5oL,EAAAc,EAAA2R,EAAA9G,GACAhM,KAAAK,GAAAA,EACAL,KAAAmB,GAAAA,EACAnB,KAAA8S,GAAAA,EACA9S,KAAAgM,SAAAA,EAkCA,QAAA8gK,IAAAv5J,GAEA,MADAA,GAAAhJ,KAAAC,IAAA,EAAAD,KAAAyuD,IAAA,IAAAzuD,KAAAwa,MAAAxR,IAAA,KACAA,EAAA,GAAA,IAAA,IAAAA,EAAAzC,SAAA,IAGA,QAAA44K,IAAAzjL,EAAA7B,EAAAtD,EAAAqD,GAIA,MAHAA,IAAA,EAAA8B,EAAA7B,EAAAtD,EAAAmuF,IACAnuF,GAAA,GAAAA,GAAA,EAAAmF,EAAA7B,EAAA6qF,IACA7qF,GAAA,IAAA6B,EAAAgpF,KACA,GAAA86F,IAAA9jL,EAAA7B,EAAAtD,EAAAqD,GAGA,QAAA6lL,IAAA5pL,GACA,GAAAA,YAAA2pL,IAAA,MAAA,IAAAA,IAAA3pL,EAAA6F,EAAA7F,EAAAgE,EAAAhE,EAAAU,EAAAV,EAAA4L,QAEA,IADA5L,YAAA2oL,MAAA3oL,EAAAuzC,GAAAvzC,KACAA,EAAA,MAAA,IAAA2pL,GACA,IAAA3pL,YAAA2pL,IAAA,MAAA3pL,EACAA,GAAAA,EAAA0pL,KACA,IAAAzpL,GAAAD,EAAAC,EAAA,IACAc,EAAAf,EAAAe,EAAA,IACA2R,EAAA1S,EAAA0S,EAAA,IACAkmD,EAAAzuD,KAAAyuD,IAAA34D,EAAAc,EAAA2R,GACAtI,EAAAD,KAAAC,IAAAnK,EAAAc,EAAA2R,GACA7M,EAAAgpF,IACA7qF,EAAAoG,EAAAwuD,EACAl4D,GAAA0J,EAAAwuD,GAAA,CAUA,OATA50D,IACA6B,EAAA5F,IAAAmK,GAAArJ,EAAA2R,GAAA1O,EAAA,GAAAjD,EAAA2R,GACA3R,IAAAqJ,GAAAsI,EAAAzS,GAAA+D,EAAA,GACA/D,EAAAc,GAAAiD,EAAA,EACAA,GAAAtD,EAAA,GAAA0J,EAAAwuD,EAAA,EAAAxuD,EAAAwuD,EACA/yD,GAAA,IAEA7B,EAAAtD,EAAA,GAAAA,EAAA,EAAA,EAAAmF,EAEA,GAAA8jL,IAAA9jL,EAAA7B,EAAAtD,EAAAV,EAAA4L,SAGA,QAAAi+K,IAAAhkL,EAAA7B,EAAAtD,EAAAkL,GACA,MAAA,KAAAxE,UAAAtG,OAAA8oL,GAAA/jL,GAAA,GAAA8jL,IAAA9jL,EAAA7B,EAAAtD,EAAA,MAAAkL,EAAA,EAAAA,GAGA,QAAA+9K,IAAA9jL,EAAA7B,EAAAtD,EAAAkL,GACAhM,KAAAiG,GAAAA,EACAjG,KAAAoE,GAAAA,EACApE,KAAAc,GAAAA,EACAd,KAAAgM,SAAAA,EAiCA,QAAAk+K,IAAAjkL,EAAAgpH,EAAAC,GACA,MAGA,MAHAjpH,EAAA,GAAAgpH,GAAAC,EAAAD,GAAAhpH,EAAA,GACAA,EAAA,IAAAipH,EACAjpH,EAAA,IAAAgpH,GAAAC,EAAAD,IAAA,IAAAhpH,GAAA,GACAgpH,GAgBA,QAAAk7D,IAAA/pL,GACA,GAAAA,YAAAgqL,IAAA,MAAA,IAAAA,IAAAhqL,EAAAU,EAAAV,EAAA+D,EAAA/D,EAAA0S,EAAA1S,EAAA4L,QACA,IAAA5L,YAAAiqL,IAAA,CACA,GAAA/3J,MAAAlyB,EAAA6F,GAAA,MAAA,IAAAmkL,IAAAhqL,EAAAU,EAAA,EAAA,EAAAV,EAAA4L,QACA,IAAA/F,GAAA7F,EAAA6F,EAAAqkL,EACA,OAAA,IAAAF,IAAAhqL,EAAAU,EAAAyJ,KAAAid,IAAAvhB,GAAA7F,EAAAW,EAAAwJ,KAAAq6J,IAAA3+J,GAAA7F,EAAAW,EAAAX,EAAA4L,SAEA5L,YAAA6oL,MAAA7oL,EAAAypL,GAAAzpL,GACA,IAGAS,GAAAgU,EAHAxU,EAAAkqL,GAAAnqL,EAAAC,GACAc,EAAAopL,GAAAnqL,EAAAe,GACA2R,EAAAy3K,GAAAnqL,EAAA0S,GACA1R,EAAAopL,IAAA,SAAAnqL,EAAA,SAAAc,EAAA,SAAA2R,GAAA23K,GAKA,OAJApqL,KAAAc,GAAAA,IAAA2R,EAAAjS,EAAAgU,EAAAzT,GACAP,EAAA2pL,IAAA,SAAAnqL,EAAA,SAAAc,EAAA,SAAA2R,GAAA43K,IACA71K,EAAA21K,IAAA,SAAAnqL,EAAA,SAAAc,EAAA,SAAA2R,GAAA63K,KAEA,GAAAP,IAAA,IAAAhpL,EAAA,GAAA,KAAAP,EAAAO,GAAA,KAAAA,EAAAyT,GAAAzU,EAAA4L,SAGA,QAAA4+K,IAAA9pL,EAAAkL,GACA,MAAA,IAAAo+K,IAAAtpL,EAAA,EAAA,EAAA,MAAAkL,EAAA,EAAAA,GAGA,QAAA6+K,IAAA/pL,EAAAqD,EAAA2O,EAAA9G,GACA,MAAA,KAAAxE,UAAAtG,OAAAipL,GAAArpL,GAAA,GAAAspL,IAAAtpL,EAAAqD,EAAA2O,EAAA,MAAA9G,EAAA,EAAAA,GAGA,QAAAo+K,IAAAtpL,EAAAqD,EAAA2O,EAAA9G,GACAhM,KAAAc,GAAAA,EACAd,KAAAmE,GAAAA,EACAnE,KAAA8S,GAAAA,EACA9S,KAAAgM,SAAAA,EA0BA,QAAAw+K,IAAA9qL,GACA,MAAAA,GAAAorL,GAAAvgL,KAAA+/J,IAAA5qK,EAAA,EAAA,GAAAA,EAAA6vH,GAAAwxC,GAGA,QAAAgqB,IAAArrL,GACA,MAAAA,GAAA4vH,GAAA5vH,EAAAA,EAAAA,EAAA6vH,IAAA7vH,EAAAqhK,IAGA,QAAAiqB,IAAAnqL,GACA,MAAA,MAAAA,GAAA,SAAA,MAAAA,EAAA,MAAA0J,KAAA+/J,IAAAzpK,EAAA,EAAA,KAAA,MAGA,QAAA0pL,IAAA1pL,GACA,OAAAA,GAAA,MAAA,OAAAA,EAAA,MAAA0J,KAAA+/J,KAAAzpK,EAAA,MAAA,MAAA,KAGA,QAAAoqL,IAAA7qL,GACA,GAAAA,YAAAiqL,IAAA,MAAA,IAAAA,IAAAjqL,EAAA6F,EAAA7F,EAAAW,EAAAX,EAAAU,EAAAV,EAAA4L,QAEA,IADA5L,YAAAgqL,MAAAhqL,EAAA+pL,GAAA/pL,IACA,IAAAA,EAAA+D,GAAA,IAAA/D,EAAA0S,EAAA,MAAA,IAAAu3K,IAAAp7F,IAAA,EAAA7uF,EAAAU,EAAAV,EAAA4L,QACA,IAAA/F,GAAAsE,KAAA2gL,MAAA9qL,EAAA0S,EAAA1S,EAAA+D,GAAAgnL,EACA,OAAA,IAAAd,IAAApkL,EAAA,EAAAA,EAAA,IAAAA,EAAAsE,KAAA87I,KAAAjmJ,EAAA+D,EAAA/D,EAAA+D,EAAA/D,EAAA0S,EAAA1S,EAAA0S,GAAA1S,EAAAU,EAAAV,EAAA4L,SAGA,QAAAo/K,IAAAtqL,EAAAC,EAAAkF,EAAA+F,GACA,MAAA,KAAAxE,UAAAtG,OAAA+pL,GAAAnqL,GAAA,GAAAupL,IAAApkL,EAAAlF,EAAAD,EAAA,MAAAkL,EAAA,EAAAA,GAGA,QAAAq/K,IAAAplL,EAAAlF,EAAAD,EAAAkL,GACA,MAAA,KAAAxE,UAAAtG,OAAA+pL,GAAAhlL,GAAA,GAAAokL,IAAApkL,EAAAlF,EAAAD,EAAA,MAAAkL,EAAA,EAAAA,GAGA,QAAAq+K,IAAApkL,EAAAlF,EAAAD,EAAAkL,GACAhM,KAAAiG,GAAAA,EACAjG,KAAAe,GAAAA,EACAf,KAAAc,GAAAA,EACAd,KAAAgM,SAAAA,EAwBA,QAAAs/K,IAAAlrL,GACA,GAAAA,YAAAmrL,IAAA,MAAA,IAAAA,IAAAnrL,EAAA6F,EAAA7F,EAAAgE,EAAAhE,EAAAU,EAAAV,EAAA4L,QACA5L,aAAA6oL,MAAA7oL,EAAAypL,GAAAzpL,GACA,IAAAC,GAAAD,EAAAC,EAAA,IACAc,EAAAf,EAAAe,EAAA,IACA2R,EAAA1S,EAAA0S,EAAA,IACAhS,GAAA0qL,GAAA14K,EAAA24K,GAAAprL,EAAAqrL,GAAAvqL,IAAAqqL,GAAAC,GAAAC,IACAC,EAAA74K,EAAAhS,EACAsT,GAAA9B,IAAAnR,EAAAL,GAAAG,GAAA0qL,GAAAr3K,GACAlQ,EAAAmG,KAAA87I,KAAAjyI,EAAAA,EAAAu3K,EAAAA,IAAAr5K,GAAAxR,GAAA,EAAAA,IACAmF,EAAA7B,EAAAmG,KAAA2gL,MAAA92K,EAAAu3K,GAAAR,GAAA,IAAAl8F,GACA,OAAA,IAAAs8F,IAAAtlL,EAAA,EAAAA,EAAA,IAAAA,EAAA7B,EAAAtD,EAAAV,EAAA4L,SAGA,QAAA4/K,IAAA3lL,EAAA7B,EAAAtD,EAAAkL,GACA,MAAA,KAAAxE,UAAAtG,OAAAoqL,GAAArlL,GAAA,GAAAslL,IAAAtlL,EAAA7B,EAAAtD,EAAA,MAAAkL,EAAA,EAAAA,GAGA,QAAAu/K,IAAAtlL,EAAA7B,EAAAtD,EAAAkL,GACAhM,KAAAiG,GAAAA,EACAjG,KAAAoE,GAAAA,EACApE,KAAAc,GAAAA,EACAd,KAAAgM,SAAAA,EA2BA,QAAA6/K,IAAAv8D,EAAAw8D,EAAAC,EAAAC,EAAAC,GACA,GAAA18D,GAAAD,EAAAA,EAAAw7D,EAAAv7D,EAAAD,CACA,SAAA,EAAA,EAAAA,EAAA,EAAAC,EAAAu7D,GAAAgB,GACA,EAAA,EAAAv8D,EAAA,EAAAu7D,GAAAiB,GACA,EAAA,EAAAz8D,EAAA,EAAAC,EAAA,EAAAu7D,GAAAkB,EACAlB,EAAAmB,GAAA,EAGA,QAAAC,IAAApqI,GACA,GAAA5hD,GAAA4hD,EAAA5gD,OAAA,CACA,OAAA,UAAAxB,GACA,GAAAS,GAAAT,GAAA,EAAAA,EAAA,EAAAA,GAAA,GAAAA,EAAA,EAAAQ,EAAA,GAAAqK,KAAA8sB,MAAA33B,EAAAQ,GACA6rL,EAAAjqI,EAAA3hD,GACA6rL,EAAAlqI,EAAA3hD,EAAA,GACA2rL,EAAA3rL,EAAA,EAAA2hD,EAAA3hD,EAAA,GAAA,EAAA4rL,EAAAC,EACAC,EAAA9rL,EAAAD,EAAA,EAAA4hD,EAAA3hD,EAAA,GAAA,EAAA6rL,EAAAD,CACA,OAAAF,KAAAnsL,EAAAS,EAAAD,GAAAA,EAAA4rL,EAAAC,EAAAC,EAAAC,IAIA,QAAAE,IAAArqI,GACA,GAAA5hD,GAAA4hD,EAAA5gD,MACA,OAAA,UAAAxB,GACA,GAAAS,GAAAoK,KAAA8sB,QAAA33B,GAAA,GAAA,IAAAA,EAAAA,GAAAQ,GACA4rL,EAAAhqI,GAAA3hD,EAAAD,EAAA,GAAAA,GACA6rL,EAAAjqI,EAAA3hD,EAAAD,GACA8rL,EAAAlqI,GAAA3hD,EAAA,GAAAD,GACA+rL,EAAAnqI,GAAA3hD,EAAA,GAAAD,EACA,OAAA2rL,KAAAnsL,EAAAS,EAAAD,GAAAA,EAAA4rL,EAAAC,EAAAC,EAAAC,IAIA,QAAAG,IAAAvrL,GACA,MAAA,YACA,MAAAA,IAIA,QAAAymB,IAAAnjB,EAAA6B,GACA,MAAA,UAAAtG,GACA,MAAAyE,GAAAzE,EAAAsG,GAIA,QAAAqmL,IAAAloL,EAAA2O,EAAA1R,GACA,MAAA+C,GAAAoG,KAAA+/J,IAAAnmK,EAAA/C,GAAA0R,EAAAvI,KAAA+/J,IAAAx3J,EAAA1R,GAAA+C,EAAA/C,EAAA,EAAAA,EAAA,SAAA1B,GACA,MAAA6K,MAAA+/J,IAAAnmK,EAAAzE,EAAAoT,EAAA1R,IAIA,QAAAkrL,IAAAnoL,EAAA2O,GACA,GAAA9M,GAAA8M,EAAA3O,CACA,OAAA6B,GAAAshB,GAAAnjB,EAAA6B,EAAA,KAAAA,GAAA,IAAAA,EAAA,IAAAuE,KAAAwa,MAAA/e,EAAA,KAAAA,GAAAomL,GAAA95J,MAAAnuB,GAAA2O,EAAA3O,GAGA,QAAAooL,IAAAnrL,GACA,MAAA,KAAAA,GAAAA,GAAAorL,GAAA,SAAAroL,EAAA2O,GACA,MAAAA,GAAA3O,EAAAkoL,GAAAloL,EAAA2O,EAAA1R,GAAAgrL,GAAA95J,MAAAnuB,GAAA2O,EAAA3O,IAIA,QAAAqoL,IAAAroL,EAAA2O,GACA,GAAA9M,GAAA8M,EAAA3O,CACA,OAAA6B,GAAAshB,GAAAnjB,EAAA6B,GAAAomL,GAAA95J,MAAAnuB,GAAA2O,EAAA3O,GAyBA,QAAAsoL,IAAAC,GACA,MAAA,UAAAjiB,GACA,GAIAtqK,GAAAwsL,EAJAzsL,EAAAuqK,EAAAvpK,OACAb,EAAA,GAAA8M,OAAAjN,GACAiB,EAAA,GAAAgM,OAAAjN,GACA4S,EAAA,GAAA3F,OAAAjN,EAEA,KAAAC,EAAA,EAAAA,EAAAD,IAAAC,EACAwsL,EAAA7C,GAAArf,EAAAtqK,IACAE,EAAAF,GAAAwsL,EAAAtsL,GAAA,EACAc,EAAAhB,GAAAwsL,EAAAxrL,GAAA,EACA2R,EAAA3S,GAAAwsL,EAAA75K,GAAA,CAMA,OAJAzS,GAAAqsL,EAAArsL,GACAc,EAAAurL,EAAAvrL,GACA2R,EAAA45K,EAAA55K,GACA65K,EAAA3gL,QAAA,EACA,SAAAtM,GAIA,MAHAitL,GAAAtsL,EAAAA,EAAAX,GACAitL,EAAAxrL,EAAAA,EAAAzB,GACAitL,EAAA75K,EAAAA,EAAApT,GACAitL,EAAA,KAQA,QAAAC,IAAAzoL,EAAA2O,GACA,GAIA3S,GAJAw1B,EAAA7iB,EAAAA,EAAA5R,OAAA,EACA2rL,EAAA1oL,EAAAoG,KAAAyuD,IAAArjC,EAAAxxB,EAAAjD,QAAA,EACAL,EAAA,GAAAsM,OAAA0/K,GACA9rL,EAAA,GAAAoM,OAAAwoB,EAGA,KAAAx1B,EAAA,EAAAA,EAAA0sL,IAAA1sL,EAAAU,EAAAV,GAAA2sL,GAAA3oL,EAAAhE,GAAA2S,EAAA3S,GACA,MAAAA,EAAAw1B,IAAAx1B,EAAAY,EAAAZ,GAAA2S,EAAA3S,EAEA,OAAA,UAAAT,GACA,IAAAS,EAAA,EAAAA,EAAA0sL,IAAA1sL,EAAAY,EAAAZ,GAAAU,EAAAV,GAAAT,EACA,OAAAqB,IAIA,QAAAi7B,IAAA73B,EAAA2O,GACA,GAAA9M,GAAA,GAAA4F,KACA,OAAAzH,IAAAA,EAAA2O,GAAA3O,EAAA,SAAAzE,GACA,MAAAsG,GAAA+mL,QAAA5oL,EAAA2O,EAAApT,GAAAsG,GAIA,QAAAgnL,IAAA7oL,EAAA2O,GACA,MAAA3O,IAAAA,EAAA2O,GAAA3O,EAAA,SAAAzE,GACA,MAAAyE,GAAA2O,EAAApT,GAIA,QAAAutL,IAAA9oL,EAAA2O,GACA,GAEAsB,GAFAjU,KACAY,IAGA,QAAAoD,GAAA,gBAAAA,KAAAA,MACA,OAAA2O,GAAA,gBAAAA,KAAAA,KAEA,KAAAsB,IAAAtB,GACAsB,IAAAjQ,GACAhE,EAAAiU,GAAA04K,GAAA3oL,EAAAiQ,GAAAtB,EAAAsB,IAEArT,EAAAqT,GAAAtB,EAAAsB,EAIA,OAAA,UAAA1U,GACA,IAAA0U,IAAAjU,GAAAY,EAAAqT,GAAAjU,EAAAiU,GAAA1U,EACA,OAAAqB,IAOA,QAAAmsL,IAAAp6K,GACA,MAAA,YACA,MAAAA,IAIA,QAAA2Q,IAAA3Q,GACA,MAAA,UAAApT,GACA,MAAAoT,GAAApT,GAAA,IAIA,QAAAytL,IAAAhpL,EAAA2O,GACA,GACAs6K,GACAC,EACAC,EAHArsI,EAAAssI,GAAAp/G,UAAAq/G,GAAAr/G,UAAA,EAIAhuE,GAAA,EACAiE,KACAqQ,IAMA,KAHAtQ,GAAA,GAAA2O,GAAA,IAGAs6K,EAAAG,GAAA9oL,KAAAN,MACAkpL,EAAAG,GAAA/oL,KAAAqO,MACAw6K,EAAAD,EAAA3yK,OAAAumC,IACAqsI,EAAAx6K,EAAAnQ,MAAAs+C,EAAAqsI,GACAlpL,EAAAjE,GAAAiE,EAAAjE,IAAAmtL,EACAlpL,IAAAjE,GAAAmtL,IAEAF,EAAAA,EAAA,OAAAC,EAAAA,EAAA,IACAjpL,EAAAjE,GAAAiE,EAAAjE,IAAAktL,EACAjpL,IAAAjE,GAAAktL,GAEAjpL,IAAAjE,GAAA,KACAsU,EAAA7N,MAAAzG,EAAAA,EAAAU,EAAAmsL,GAAAI,EAAAC,MAEApsI,EAAAusI,GAAAr/G,SAYA,OARAltB,GAAAnuC,EAAA5R,SACAosL,EAAAx6K,EAAAnQ,MAAAs+C,GACA78C,EAAAjE,GAAAiE,EAAAjE,IAAAmtL,EACAlpL,IAAAjE,GAAAmtL,GAKAlpL,EAAAlD,OAAA,EAAAuT,EAAA,GACAgP,GAAAhP,EAAA,GAAA5T,GACAqsL,GAAAp6K,IACAA,EAAA2B,EAAAvT,OAAA,SAAAxB,GACA,IAAA,GAAAU,GAAAD,EAAA,EAAAA,EAAA2S,IAAA3S,EAAAiE,GAAAhE,EAAAqU,EAAAtU,IAAAA,GAAAC,EAAAS,EAAAnB,EACA,OAAA0E,GAAA4K,KAAA,MAIA,QAAA89K,IAAA3oL,EAAA2O,GACA,GAAA/R,GAAArB,QAAAoT,EACA,OAAA,OAAAA,GAAA,YAAApT,EAAA0sL,GAAAt5K,IACA,WAAApT,EAAAstL,GACA,WAAAttL,GAAAqB,EAAA4yC,GAAA7gC,KAAAA,EAAA/R,EAAA0sL,IAAAN,GACAr6K,YAAA6gC,IAAA85I,GACA36K,YAAAlH,MAAAowB,GACA7uB,MAAAC,QAAA0F,GAAA85K,GACA,kBAAA95K,GAAA46K,SAAA,kBAAA56K,GAAAhC,UAAAwhB,MAAAxf,GAAAm6K,GACAD,IAAA7oL,EAAA2O,GAGA,QAAAq7I,IAAAhiG,GACA,GAAAjsD,GAAAisD,EAAAjrD,MACA,OAAA,UAAAxB,GACA,MAAAysD,GAAA5hD,KAAAC,IAAA,EAAAD,KAAAyuD,IAAA94D,EAAA,EAAAqK,KAAA8sB,MAAA33B,EAAAQ,OAIA,QAAAytL,IAAAxpL,EAAA2O,GACA,GAAA3S,GAAAmsL,IAAAnoL,GAAA2O,EACA,OAAA,UAAApT,GACA,GAAAmB,GAAAV,EAAAT,EACA,OAAAmB,GAAA,IAAA0J,KAAA8sB,MAAAx2B,EAAA,MAIA,QAAA+sL,IAAAzpL,EAAA2O,GACA,MAAA3O,IAAAA,EAAA2O,GAAA3O,EAAA,SAAAzE,GACA,MAAA6K,MAAAwa,MAAA5gB,EAAA2O,EAAApT,IAeA,QAAAmuL,IAAA1pL,EAAA2O,EAAA/R,EAAAiF,EAAAvG,EAAAoG,GACA,GAAAowE,GAAAC,EAAA43G,CAKA,QAJA73G,EAAA1rE,KAAA87I,KAAAliJ,EAAAA,EAAA2O,EAAAA,MAAA3O,GAAA8xE,EAAAnjE,GAAAmjE,IACA63G,EAAA3pL,EAAApD,EAAA+R,EAAA9M,KAAAjF,GAAAoD,EAAA2pL,EAAA9nL,GAAA8M,EAAAg7K,IACA53G,EAAA3rE,KAAA87I,KAAAtlJ,EAAAA,EAAAiF,EAAAA,MAAAjF,GAAAm1E,EAAAlwE,GAAAkwE,EAAA43G,GAAA53G,GACA/xE,EAAA6B,EAAA8M,EAAA/R,IAAAoD,GAAAA,EAAA2O,GAAAA,EAAAg7K,GAAAA,EAAA73G,GAAAA,IAEAslG,WAAA97K,EACA+7K,WAAA31K,EACAkoL,OAAAxjL,KAAA2gL,MAAAp4K,EAAA3O,GAAA6pL,GACAF,MAAAvjL,KAAA0jL,KAAAH,GAAAE,GACA/3G,OAAAA,EACAC,OAAAA,GASA,QAAAg4G,IAAA36K,GACA,MAAA,SAAAA,EAAA46K,IACAC,KAAAA,GAAAvuL,SAAAS,cAAA,OAAA+tL,GAAAxuL,SAAA8V,gBAAA24K,GAAAzuL,SAAAgW,aACAu4K,GAAA1pL,MAAAu9C,UAAA1uC,EACAA,EAAA+6K,GAAA7pK,iBAAA4pK,GAAA3tL,YAAA0tL,IAAA,MAAA3kL,iBAAA,aACA4kL,GAAAztL,YAAAwtL,IACA76K,EAAAA,EAAA5Q,MAAA,GAAA,GAAA4N,MAAA,KACAs9K,IAAAt6K,EAAA,IAAAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,KAGA,QAAAg7K,IAAAh7K,GACA,MAAA,OAAAA,EAAA46K,IACAK,KAAAA,GAAA3uL,SAAA29K,gBAAA,6BAAA,MACAgR,GAAA37K,aAAA,YAAAU,IACAA,EAAAi7K,GAAAvsI,UAAAwsI,QAAAC,gBACAn7K,EAAAA,EAAA6nK,OACAyS,GAAAt6K,EAAApP,EAAAoP,EAAAT,EAAAS,EAAAxS,EAAAwS,EAAAvN,EAAAuN,EAAA9T,EAAA8T,EAAA1N,IAFAsoL,IAKA,QAAAQ,IAAA/qL,EAAAgrL,EAAAC,EAAAC,GAEA,QAAAt6K,GAAApQ,GACA,MAAAA,GAAAlD,OAAAkD,EAAAoQ,MAAA,IAAA,GAGA,QAAAu6K,GAAAC,EAAAC,EAAAC,EAAAC,EAAA/qL,EAAAqQ,GACA,GAAAu6K,IAAAE,GAAAD,IAAAE,EAAA,CACA,GAAAhvL,GAAAiE,EAAAwC,KAAA,aAAA,KAAAgoL,EAAA,KAAAC,EACAp6K,GAAA7N,MAAAzG,EAAAA,EAAA,EAAAU,EAAAmsL,GAAAgC,EAAAE,KAAA/uL,EAAAA,EAAA,EAAAU,EAAAmsL,GAAAiC,EAAAE,UACAD,GAAAC,IACA/qL,EAAAwC,KAAA,aAAAsoL,EAAAN,EAAAO,EAAAN,GAIA,QAAAd,GAAA5pL,EAAA2O,EAAA1O,EAAAqQ,GACAtQ,IAAA2O,GACA3O,EAAA2O,EAAA,IAAAA,GAAA,IAAAA,EAAA3O,EAAA,MAAAA,GAAA,KACAsQ,EAAA7N,MAAAzG,EAAAiE,EAAAwC,KAAA4N,EAAApQ,GAAA,UAAA,KAAA0qL,GAAA,EAAAjuL,EAAAmsL,GAAA7oL,EAAA2O,MACAA,GACA1O,EAAAwC,KAAA4N,EAAApQ,GAAA,UAAA0O,EAAAg8K,GAIA,QAAAhB,GAAA3pL,EAAA2O,EAAA1O,EAAAqQ,GACAtQ,IAAA2O,EACA2B,EAAA7N,MAAAzG,EAAAiE,EAAAwC,KAAA4N,EAAApQ,GAAA,SAAA,KAAA0qL,GAAA,EAAAjuL,EAAAmsL,GAAA7oL,EAAA2O,KACAA,GACA1O,EAAAwC,KAAA4N,EAAApQ,GAAA,SAAA0O,EAAAg8K,GAIA,QAAApT,GAAAsT,EAAAC,EAAAC,EAAAC,EAAA/qL,EAAAqQ,GACA,GAAAu6K,IAAAE,GAAAD,IAAAE,EAAA,CACA,GAAAhvL,GAAAiE,EAAAwC,KAAA4N,EAAApQ,GAAA,SAAA,KAAA,IAAA,KAAA,IACAqQ,GAAA7N,MAAAzG,EAAAA,EAAA,EAAAU,EAAAmsL,GAAAgC,EAAAE,KAAA/uL,EAAAA,EAAA,EAAAU,EAAAmsL,GAAAiC,EAAAE,SACA,KAAAD,GAAA,IAAAC,GACA/qL,EAAAwC,KAAA4N,EAAApQ,GAAA,SAAA8qL,EAAA,IAAAC,EAAA,KAIA,MAAA,UAAAhrL,EAAA2O,GACA,GAAA1O,MACAqQ,IAOA,OANAtQ,GAAAP,EAAAO,GAAA2O,EAAAlP,EAAAkP,GACAi8K,EAAA5qL,EAAAo3K,WAAAp3K,EAAAq3K,WAAA1oK,EAAAyoK,WAAAzoK,EAAA0oK,WAAAp3K,EAAAqQ,GACAs5K,EAAA5pL,EAAA4pL,OAAAj7K,EAAAi7K,OAAA3pL,EAAAqQ,GACAq5K,EAAA3pL,EAAA2pL,MAAAh7K,EAAAg7K,MAAA1pL,EAAAqQ,GACAinK,EAAAv3K,EAAA8xE,OAAA9xE,EAAA+xE,OAAApjE,EAAAmjE,OAAAnjE,EAAAojE,OAAA9xE,EAAAqQ,GACAtQ,EAAA2O,EAAA,KACA,SAAApT,GAEA,IADA,GAAAU,GAAAD,GAAA,EAAAD,EAAAuU,EAAAvT,SACAf,EAAAD,GAAAkE,GAAAhE,EAAAqU,EAAAtU,IAAAA,GAAAC,EAAAS,EAAAnB,EACA,OAAA0E,GAAA4K,KAAA,MAaA,QAAAogL,IAAAvuL,GACA,QAAAA,EAAA0J,KAAA8kL,IAAAxuL,IAAA,EAAAA,GAAA,EAGA,QAAAyuL,IAAAzuL,GACA,QAAAA,EAAA0J,KAAA8kL,IAAAxuL,IAAA,EAAAA,GAAA,EAGA,QAAA0uL,IAAA1uL,GACA,QAAAA,EAAA0J,KAAA8kL,IAAA,EAAAxuL,IAAA,IAAAA,EAAA,GAKA,QAAA2uL,IAAA5G,EAAA57D,GACA,GAKA7sH,GACAyS,EANA68K,EAAA7G,EAAA,GAAA8G,EAAA9G,EAAA,GAAA+G,EAAA/G,EAAA,GACAgH,EAAA5iE,EAAA,GAAA6iE,EAAA7iE,EAAA,GAAA8iE,EAAA9iE,EAAA,GACAplC,EAAAgoG,EAAAH,EACA3nG,EAAA+nG,EAAAH,EACA38I,EAAA60C,EAAAA,EAAAE,EAAAA,CAKA,IAAA/0C,EAAAg9I,GACAn9K,EAAArI,KAAAuwB,IAAAg1J,EAAAH,GAAAK,GACA7vL,EAAA,SAAAT,GACA,OACA+vL,EAAA/vL,EAAAkoF,EACA8nG,EAAAhwL,EAAAooF,EACA6nG,EAAAplL,KAAA8kL,IAAAW,GAAAtwL,EAAAkT,SAMA,CACA,GAAAkgC,GAAAvoC,KAAA87I,KAAAtzG,GACAk9I,GAAAH,EAAAA,EAAAH,EAAAA,EAAAO,GAAAn9I,IAAA,EAAA48I,EAAAQ,GAAAr9I,GACAs9I,GAAAN,EAAAA,EAAAH,EAAAA,EAAAO,GAAAn9I,IAAA,EAAA+8I,EAAAK,GAAAr9I,GACAq0B,EAAA58D,KAAAuwB,IAAAvwB,KAAA87I,KAAA4pC,EAAAA,EAAA,GAAAA,GACA7oH,EAAA78D,KAAAuwB,IAAAvwB,KAAA87I,KAAA+pC,EAAAA,EAAA,GAAAA,EACAx9K,IAAAw0D,EAAAD,GAAA6oH,GACA7vL,EAAA,SAAAT,GACA,GAAA0E,GAAA1E,EAAAkT,EACAy9K,EAAAjB,GAAAjoH,GACAvlE,EAAA+tL,GAAAQ,GAAAr9I,IAAAu9I,EAAAd,GAAAS,GAAA5rL,EAAA+iE,GAAAmoH,GAAAnoH,GACA,QACAsoH,EAAA7tL,EAAAgmF,EACA8nG,EAAA9tL,EAAAkmF,EACA6nG,EAAAU,EAAAjB,GAAAY,GAAA5rL,EAAA+iE,KAOA,MAFAhnE,GAAAwN,SAAA,IAAAiF,EAEAzS,EAGA,QAAAmwL,IAAAC,GACA,MAAA,UAAA3rL,EAAAC,GACA,GAAAoB,GAAAsqL,GAAA3rL,EAAAqlL,GAAArlL,IAAAqB,GAAApB,EAAAolL,GAAAplL,IAAAoB,GACA7B,EAAAooL,GAAA5nL,EAAAR,EAAAS,EAAAT,GACAtD,EAAA0rL,GAAA5nL,EAAA9D,EAAA+D,EAAA/D,GACAkL,EAAAwgL,GAAA5nL,EAAAoH,QAAAnH,EAAAmH,QACA,OAAA,UAAAtM,GAKA,MAJAkF,GAAAqB,EAAAA,EAAAvG,GACAkF,EAAAR,EAAAA,EAAA1E,GACAkF,EAAA9D,EAAAA,EAAApB,GACAkF,EAAAoH,QAAAA,EAAAtM,GACAkF,EAAA,KAQA,QAAA4rL,IAAA5rL,EAAAC,GACA,GAAA/D,GAAA0rL,IAAA5nL,EAAAimL,GAAAjmL,IAAA9D,GAAA+D,EAAAgmL,GAAAhmL,IAAA/D,GACAqD,EAAAqoL,GAAA5nL,EAAAT,EAAAU,EAAAV,GACA2O,EAAA05K,GAAA5nL,EAAAkO,EAAAjO,EAAAiO,GACA9G,EAAAwgL,GAAA5nL,EAAAoH,QAAAnH,EAAAmH,QACA,OAAA,UAAAtM,GAKA,MAJAkF,GAAA9D,EAAAA,EAAApB,GACAkF,EAAAT,EAAAA,EAAAzE,GACAkF,EAAAkO,EAAAA,EAAApT,GACAkF,EAAAoH,QAAAA,EAAAtM,GACAkF,EAAA,IAIA,QAAA6rL,IAAAF,GACA,MAAA,UAAA3rL,EAAAC,GACA,GAAAoB,GAAAsqL,GAAA3rL,EAAAymL,GAAAzmL,IAAAqB,GAAApB,EAAAwmL,GAAAxmL,IAAAoB,GACAlF,EAAAyrL,GAAA5nL,EAAA7D,EAAA8D,EAAA9D,GACAD,EAAA0rL,GAAA5nL,EAAA9D,EAAA+D,EAAA/D,GACAkL,EAAAwgL,GAAA5nL,EAAAoH,QAAAnH,EAAAmH,QACA,OAAA,UAAAtM,GAKA,MAJAkF,GAAAqB,EAAAA,EAAAvG,GACAkF,EAAA7D,EAAAA,EAAArB,GACAkF,EAAA9D,EAAAA,EAAApB,GACAkF,EAAAoH,QAAAA,EAAAtM,GACAkF,EAAA,KAQA,QAAA8rL,IAAAH,GACA,MAAA,SAAAI,GAAAvvL,GAGA,QAAAwvL,GAAAhsL,EAAAC,GACA,GAAAoB,GAAAsqL,GAAA3rL,EAAAgnL,GAAAhnL,IAAAqB,GAAApB,EAAA+mL,GAAA/mL,IAAAoB,GACA7B,EAAAooL,GAAA5nL,EAAAR,EAAAS,EAAAT,GACAtD,EAAA0rL,GAAA5nL,EAAA9D,EAAA+D,EAAA/D,GACAkL,EAAAwgL,GAAA5nL,EAAAoH,QAAAnH,EAAAmH,QACA,OAAA,UAAAtM,GAKA,MAJAkF,GAAAqB,EAAAA,EAAAvG,GACAkF,EAAAR,EAAAA,EAAA1E,GACAkF,EAAA9D,EAAAA,EAAAyJ,KAAA+/J,IAAA5qK,EAAA0B,IACAwD,EAAAoH,QAAAA,EAAAtM,GACAkF,EAAA,IAMA,MAlBAxD,IAAAA,EAgBAwvL,EAAArE,MAAAoE,EAEAC,GACA,GAMA,QAAAC,IAAAC,EAAAhvI,GAEA,IADA,GAAA3hD,GAAA,EAAAD,EAAA4hD,EAAA5gD,OAAA,EAAAV,EAAAshD,EAAA,GAAA3/C,EAAA,GAAAgL,OAAAjN,EAAA,EAAA,EAAAA,GACAC,EAAAD,GAAAiC,EAAAhC,GAAA2wL,EAAAtwL,EAAAA,EAAAshD,IAAA3hD,GACA,OAAA,UAAAT,GACA,GAAAS,GAAAoK,KAAAC,IAAA,EAAAD,KAAAyuD,IAAA94D,EAAA,EAAAqK,KAAA8sB,MAAA33B,GAAAQ,IACA,OAAAiC,GAAAhC,GAAAT,EAAAS,IAIA,QAAA4wL,IAAAC,EAAA9wL,GAEA,IAAA,GADA+wL,GAAA,GAAA9jL,OAAAjN,GACAC,EAAA,EAAAA,EAAAD,IAAAC,EAAA8wL,EAAA9wL,GAAA6wL,EAAA7wL,GAAAD,EAAA,GACA,OAAA+wL,GAeA,QAAAplL,MACA,MAAAqlL,MAAAC,GAAAC,IAAAF,GAAAG,GAAAxlL,MAAAylL,IAGA,QAAAF,MACAF,GAAA,EAGA,QAAAK,MACAvxL,KAAAwxL,MACAxxL,KAAAyxL,MACAzxL,KAAA4+K,MAAA,KA0BA,QAAA/vK,IAAAigH,EAAAhmG,EAAA2O,GACA,GAAA/3B,GAAA,GAAA6xL,GAEA,OADA7xL,GAAAgyL,QAAA5iE,EAAAhmG,EAAA2O,GACA/3B,EAGA,QAAAiyL,MACA9lL,OACAm7H,EAEA,KADA,GAAAvnI,GAAAC,EAAAkyL,GACAlyL,IACAD,EAAAyxL,GAAAxxL,EAAA+xL,QAAA,GAAA/xL,EAAA8xL,MAAAxwL,KAAA,KAAAvB,GACAC,EAAAA,EAAAk/K,QAEA53C,GAGA,QAAA6qD,MACAX,IAAAY,GAAAT,GAAAxlL,OAAAylL,GACAtqD,GAAAz4G,GAAA,CACA,KACAojK,KACA,QACA3qD,GAAA,EACA+qD,KACAb,GAAA,GAIA,QAAAc,MACA,GAAAnmL,GAAAwlL,GAAAxlL,MAAAid,EAAAjd,EAAAimL,EACAhpK,GAAAmpK,KAAAX,IAAAxoK,EAAAgpK,GAAAjmL,GAGA,QAAAkmL,MAEA,IADA,GAAAhxB,GAAAxxC,EAAAD,EAAAsiE,GAAAn6J,EAAAmU,EAAAA,EACA0jF,GACAA,EAAAkiE,OACA/5J,EAAA63F,EAAAmiE,QAAAh6J,EAAA63F,EAAAmiE,OACA1wB,EAAAzxC,EAAAA,EAAAA,EAAAsvD,QAEArvD,EAAAD,EAAAsvD,MAAAtvD,EAAAsvD,MAAA,KACAtvD,EAAAyxC,EAAAA,EAAA6d,MAAArvD,EAAAqiE,GAAAriE,EAGA2iE,IAAAnxB,EACAoxB,GAAA16J,GAGA,QAAA06J,IAAA16J,GACA,IAAAuvG,GAAA,CACAz4G,KAAAA,GAAAxF,aAAAwF,IACAkJ,GAAAy5J,GACA,IACAz5J,EAAAmU,EAAAA,IAAArd,GAAAjjB,WAAAumL,GAAAp6J,EAAA45J,GAAAxlL,MAAAylL,KACA9lL,KAAAA,GAAAqyB,cAAAryB,OAEAA,KAAAsmL,GAAAT,GAAAxlL,MAAAL,GAAAsyB,YAAAk0J,GAAAC,KACAjrD,GAAA,EAAAmqD,GAAAU,MAIA,QAAAO,IAAAtjE,EAAAhmG,EAAA2O,GACA,GAAA/3B,GAAA,GAAA6xL,GAMA,OALAzoK,GAAA,MAAAA,EAAA,GAAAA,EACAppB,EAAAgyL,QAAA,SAAAW,GACA3yL,EAAA8O,OACAsgH,EAAAujE,EAAAvpK,IACAA,EAAA2O,GACA/3B,EAGA,QAAA4yL,IAAAxjE,EAAAhmG,EAAA2O,GACA,GAAA/3B,GAAA,GAAA6xL,IAAAltE,EAAAv7F,CACA,OAAA,OAAAA,GAAAppB,EAAAgyL,QAAA5iE,EAAAhmG,EAAA2O,GAAA/3B,IACAopB,GAAAA,EAAA2O,EAAA,MAAAA,EAAA5rB,MAAA4rB,EACA/3B,EAAAgyL,QAAA,QAAAjmL,GAAA4mL,GACAA,GAAAhuE,EACA3kH,EAAAgyL,QAAAjmL,EAAA44G,GAAAv7F,EAAA2O,GACAq3F,EAAAujE,IACAvpK,EAAA2O,GACA/3B,GAcA,QAAA6yL,IAAAj1I,EAAA3gC,EAAAnK,EAAAkI,EAAAi0B,EAAA6jJ,GACA,GAAAC,GAAAn1I,EAAAo1I,YACA,IAAAD,GACA,GAAAjgL,IAAAigL,GAAA,WADAn1I,GAAAo1I,eAEAC,IAAAr1I,EAAA9qC,GACAmK,KAAAA,EACAjC,MAAAA,EACAi0B,MAAAA,EACAnrB,GAAAovK,GACAC,MAAAC,GACAr7J,KAAA+6J,EAAA/6J,KACA3O,MAAA0pK,EAAA1pK,MACAnb,SAAA6kL,EAAA7kL,SACAolL,KAAAP,EAAAO,KACAlkL,MAAA,KACA2B,MAAAwiL,KAIA,QAAA/nL,IAAAqyC,EAAA9qC,GACA,GAAA+/K,GAAAU,GAAA31I,EAAA9qC,EACA,IAAA+/K,EAAA/hL,MAAAwiL,GAAA,KAAA,IAAAlzL,OAAA,8BACA,OAAAyyL,GAGA,QAAAW,IAAA51I,EAAA9qC,GACA,GAAA+/K,GAAAU,GAAA31I,EAAA9qC,EACA,IAAA+/K,EAAA/hL,MAAA2iL,GAAA,KAAA,IAAArzL,OAAA,4BACA,OAAAyyL,GAGA,QAAAU,IAAA31I,EAAA9qC,GACA,GAAA+/K,GAAAj1I,EAAAo1I,YACA,KAAAH,KAAAA,EAAAA,EAAA//K,IAAA,KAAA,IAAA1S,OAAA,uBACA,OAAAyyL,GAGA,QAAAI,IAAAr1I,EAAA9qC,EAAAolC,GASA,QAAA26I,GAAAF,GACAz6I,EAAApnC,MAAA4iL,GACAx7I,EAAA/oC,MAAA6iL,QAAA9sL,EAAAgzC,EAAA9uB,MAAA8uB,EAAAngB,MAGAmgB,EAAA9uB,OAAAupK,GAAAztL,EAAAytL,EAAAz6I,EAAA9uB,OAGA,QAAAlkB,GAAAytL,GACA,GAAAlyL,GAAAqB,EAAAtB,EAAAE,CAGA,IAAAw3C,EAAApnC,QAAA4iL,GAAA,MAAA5kL,IAEA,KAAArO,IAAAsyL,GAEA,GADAryL,EAAAqyL,EAAAtyL,GACAC,EAAAuc,OAAAi7B,EAAAj7B,KAAA,CAKA,GAAAvc,EAAAoQ,QAAA2iL,GAAA,MAAAf,IAAAxtL,EAGAxE,GAAAoQ,QAAA6iL,IACAjzL,EAAAoQ,MAAA8iL,GACAlzL,EAAAyO,MAAAL,OACApO,EAAAojB,GAAAxiB,KAAA,YAAAs8C,EAAAA,EAAA4gI,SAAA99K,EAAAsa,MAAAta,EAAAuuC,aACA8jJ,GAAAtyL,KAIAA,EAAAqS,IACApS,EAAAoQ,MAAA8iL,GACAlzL,EAAAyO,MAAAL,OACApO,EAAAojB,GAAAxiB,KAAA,SAAAs8C,EAAAA,EAAA4gI,SAAA99K,EAAAsa,MAAAta,EAAAuuC,aACA8jJ,GAAAtyL,IAoBA,GAZAiyL,GAAA,WACAx6I,EAAApnC,QAAA2iL,KACAv7I,EAAApnC,MAAA6iL,GACAz7I,EAAA/oC,MAAA6iL,QAAAjmL,EAAAmsC,EAAA9uB,MAAA8uB,EAAAngB,MACAhsB,EAAA4mL,MAMAz6I,EAAApnC,MAAA+iL,GACA37I,EAAAp0B,GAAAxiB,KAAA,QAAAs8C,EAAAA,EAAA4gI,SAAAtmI,EAAAl9B,MAAAk9B,EAAAjJ,OACAiJ,EAAApnC,QAAA+iL,GAAA,CAKA,IAJA37I,EAAApnC,MAAA2iL,GAGAN,EAAA,GAAA1lL,OAAAjN,EAAA03C,EAAAi7I,MAAA3xL,QACAf,EAAA,EAAAqB,GAAA,EAAArB,EAAAD,IAAAC,GACAC,EAAAw3C,EAAAi7I,MAAA1yL,GAAAoT,MAAAvS,KAAAs8C,EAAAA,EAAA4gI,SAAAtmI,EAAAl9B,MAAAk9B,EAAAjJ,UACAkkJ,IAAArxL,GAAApB,EAGAyyL,GAAA3xL,OAAAM,EAAA,GAGA,QAAAiK,GAAA4mL,GAKA,IAJA,GAAA3yL,GAAA2yL,EAAAz6I,EAAAjqC,SAAAiqC,EAAAm7I,KAAA/xL,KAAA,KAAAqxL,EAAAz6I,EAAAjqC,WAAAiqC,EAAA/oC,MAAA6iL,QAAAljL,GAAAopC,EAAApnC,MAAAgjL,GAAA,GACArzL,GAAA,EACAD,EAAA2yL,EAAA3xL,SAEAf,EAAAD,GACA2yL,EAAA1yL,GAAAa,KAAAs8C,EAAA59C,EAIAk4C,GAAApnC,QAAAgjL,KACA57I,EAAAp0B,GAAAxiB,KAAA,MAAAs8C,EAAAA,EAAA4gI,SAAAtmI,EAAAl9B,MAAAk9B,EAAAjJ,OACAngC,KAIA,QAAAA,KACAopC,EAAApnC,MAAA8iL,GACA17I,EAAA/oC,MAAAL,aACAikL,GAAAjgL,EACA,KAAA,GAAArS,KAAAsyL,GAAA,aACAn1I,GAAAo1I,aAlGA,GACAG,GADAJ,EAAAn1I,EAAAo1I,YAKAD,GAAAjgL,GAAAolC,EACAA,EAAA/oC,MAAAA,GAAA0jL,EAAA,EAAA36I,EAAAngB,MAgGA,QAAAg8J,IAAAn2I,EAAA3gC,GACA,GACA+2K,GACAxnK,EAEA/rB,EAJAsyL,EAAAn1I,EAAAo1I,aAGAjmL,GAAA,CAGA,IAAAgmL,EAAA,CAEA91K,EAAA,MAAAA,EAAA,KAAAA,EAAA,EAEA,KAAAxc,IAAAsyL,IACAiB,EAAAjB,EAAAtyL,IAAAwc,OAAAA,GACAuP,EAAAwnK,EAAAljL,MAAA+iL,IAAAG,EAAAljL,MAAAgjL,GACAE,EAAAljL,MAAA8iL,GACAI,EAAA7kL,MAAAL,OACAklL,EAAAlwK,GAAAxiB,KAAAkrB,EAAA,YAAA,SAAAoxB,EAAAA,EAAA4gI,SAAAwV,EAAAh5K,MAAAg5K,EAAA/kJ,aACA8jJ,GAAAtyL,IALAsM,GAAA,CAQAA,UAAA6wC,GAAAo1I,cAGA,QAAAiB,IAAAh3K,GACA,MAAA3c,MAAAgC,KAAA,WACAyxL,GAAAzzL,KAAA2c,KAIA,QAAAi3K,IAAAphL,EAAAmK,GACA,GAAAk3K,GAAAC,CACA,OAAA,YACA,GAAAJ,GAAAR,GAAAlzL,KAAAwS,GACAqgL,EAAAa,EAAAb,KAKA,IAAAA,IAAAgB,EAAA,CACAC,EAAAD,EAAAhB,CACA,KAAA,GAAA1yL,GAAA,EAAAD,EAAA4zL,EAAA5yL,OAAAf,EAAAD,IAAAC,EACA,GAAA2zL,EAAA3zL,GAAAwc,OAAAA,EAAA,CACAm3K,EAAAA,EAAAnxL,QACAmxL,EAAAniL,OAAAxR,EAAA,EACA,QAKAuzL,EAAAb,MAAAiB,GAIA,QAAAC,IAAAvhL,EAAAmK,EAAApJ,GACA,GAAAsgL,GAAAC,CACA,IAAA,kBAAAvgL,GAAA,KAAA,IAAAzT,MACA,OAAA,YACA,GAAA4zL,GAAAR,GAAAlzL,KAAAwS,GACAqgL,EAAAa,EAAAb,KAKA,IAAAA,IAAAgB,EAAA,CACAC,GAAAD,EAAAhB,GAAAlwL,OACA,KAAA,GAAAjD,IAAAid,KAAAA,EAAApJ,MAAAA,GAAApT,EAAA,EAAAD,EAAA4zL,EAAA5yL,OAAAf,EAAAD,IAAAC,EACA,GAAA2zL,EAAA3zL,GAAAwc,OAAAA,EAAA,CACAm3K,EAAA3zL,GAAAT,CACA,OAGAS,IAAAD,GAAA4zL,EAAAltL,KAAAlH,GAGAg0L,EAAAb,MAAAiB,GAIA,QAAAE,IAAAr3K,EAAApJ,GACA,GAAAf,GAAAxS,KAAAi0L,GAIA,IAFAt3K,GAAA,GAEAnV,UAAAtG,OAAA,EAAA,CAEA,IAAA,GAAAxB,GADAmzL,EAAAI,GAAAjzL,KAAAs9C,OAAA9qC,GAAAqgL,MACA1yL,EAAA,EAAAD,EAAA2yL,EAAA3xL,OAAAf,EAAAD,IAAAC,EACA,IAAAT,EAAAmzL,EAAA1yL,IAAAwc,OAAAA,EACA,MAAAjd,GAAA6T,KAGA,OAAA,MAGA,MAAAvT,MAAAgC,MAAA,MAAAuR,EAAAqgL,GAAAG,IAAAvhL,EAAAmK,EAAApJ,IAGA,QAAA2gL,IAAA/3J,EAAAxf,EAAApJ,GACA,GAAAf,GAAA2pB,EAAA83J,GAOA,OALA93J,GAAAn6B,KAAA,WACA,GAAA0xL,GAAAR,GAAAlzL,KAAAwS,IACAkhL,EAAAngL,QAAAmgL,EAAAngL,WAAAoJ,GAAApJ,EAAA7Q,MAAA1C,KAAAwH,aAGA,SAAA81C,GACA,MAAA21I,IAAA31I,EAAA9qC,GAAAe,MAAAoJ,IAIA,QAAAm0K,IAAA3sL,EAAA2O,GACA,GAAA/R,EACA,QAAA,gBAAA+R,GAAAk6K,GACAl6K,YAAA6gC,IAAA85I,IACA1sL,EAAA4yC,GAAA7gC,KAAAA,EAAA/R,EAAA0sL,IACAN,IAAAhpL,EAAA2O,GAGA,QAAAqhL,IAAAx3K,GACA,MAAA,YACA3c,KAAAgI,gBAAA2U,IAIA,QAAAy3K,IAAA1W,GACA,MAAA,YACA19K,KAAAuhL,kBAAA7D,EAAAtjG,MAAAsjG,EAAA55H,QAIA,QAAAuwI,IAAA13K,EAAA23K,EAAAC,GACA,GAAAC,GAEAC,EADAC,EAAAH,EAAA,EAEA,OAAA,YACA,GAAAI,GAAA30L,KAAA+D,aAAA4Y,EACA,OAAAg4K,KAAAD,EAAA,KACAC,IAAAH,EAAAC,EACAA,EAAAH,EAAAE,EAAAG,EAAAJ,IAIA,QAAAK,IAAAlX,EAAA4W,EAAAC,GACA,GAAAC,GAEAC,EADAC,EAAAH,EAAA,EAEA,OAAA,YACA,GAAAI,GAAA30L,KAAA8hL,eAAApE,EAAAtjG,MAAAsjG,EAAA55H,MACA,OAAA6wI,KAAAD,EAAA,KACAC,IAAAH,EAAAC,EACAA,EAAAH,EAAAE,EAAAG,EAAAJ,IAIA,QAAAM,IAAAl4K,EAAA23K,EAAA/gL,GACA,GAAAihL,GACAM,EACAL,CACA,OAAA,YACA,GAAAE,GAAAD,EAAAH,EAAAhhL,EAAAvT,KACA,OAAA,OAAAu0L,MAAAv0L,MAAAgI,gBAAA2U,IACAg4K,EAAA30L,KAAA+D,aAAA4Y,GACA+3K,EAAAH,EAAA,GACAI,IAAAD,EAAA,KACAC,IAAAH,GAAAE,IAAAI,EAAAL,GACAK,EAAAJ,EAAAD,EAAAH,EAAAE,EAAAG,EAAAJ,MAIA,QAAAQ,IAAArX,EAAA4W,EAAA/gL,GACA,GAAAihL,GACAM,EACAL,CACA,OAAA,YACA,GAAAE,GAAAD,EAAAH,EAAAhhL,EAAAvT,KACA,OAAA,OAAAu0L,MAAAv0L,MAAAuhL,kBAAA7D,EAAAtjG,MAAAsjG,EAAA55H,QACA6wI,EAAA30L,KAAA8hL,eAAApE,EAAAtjG,MAAAsjG,EAAA55H,OACA4wI,EAAAH,EAAA,GACAI,IAAAD,EAAA,KACAC,IAAAH,GAAAE,IAAAI,EAAAL,GACAK,EAAAJ,EAAAD,EAAAH,EAAAE,EAAAG,EAAAJ,MAIA,QAAAS,IAAAr4K,EAAApJ,GACA,GAAAmqK,GAAAv+J,EAAAxC,GAAAxc,EAAA,cAAAu9K,EAAAuX,GAAAnE,EACA,OAAA9wL,MAAAk1L,UAAAv4K,EAAA,kBAAApJ,IACAmqK,EAAA55H,MAAAixI,GAAAF,IAAAnX,EAAAv9K,EAAA+zL,GAAAl0L,KAAA,QAAA2c,EAAApJ,IACA,MAAAA,GAAAmqK,EAAA55H,MAAAswI,GAAAD,IAAAzW,IACAA,EAAA55H,MAAA8wI,GAAAP,IAAA3W,EAAAv9K,EAAAoT,IAGA,QAAA4hL,IAAAx4K,EAAAxc,GACA,MAAA,UAAAT,GACAM,KAAA6S,aAAA8J,EAAAxc,EAAAT,KAIA,QAAA01L,IAAA1X,EAAAv9K,GACA,MAAA,UAAAT,GACAM,KAAA0hL,eAAAhE,EAAAtjG,MAAAsjG,EAAA55H,MAAA3jD,EAAAT,KAIA,QAAA21L,IAAA3X,EAAAnqK,GAEA,QAAAs/K,KACA,GAAA1yL,GAAAoT,EAAA7Q,MAAA1C,KAAAwH,UAEA,OADArH,KAAAq4K,IAAAzX,GAAAyX,EAAAr4K,IAAAi1L,GAAA1X,EAAAv9K,IACA4gK,EAJA,GAAAA,GAAAyX,CAOA,OADAqa,GAAAyC,OAAA/hL,EACAs/K,EAGA,QAAAqC,IAAAv4K,EAAApJ,GAEA,QAAAs/K,KACA,GAAA1yL,GAAAoT,EAAA7Q,MAAA1C,KAAAwH,UAEA,OADArH,KAAAq4K,IAAAzX,GAAAyX,EAAAr4K,IAAAg1L,GAAAx4K,EAAAxc,IACA4gK,EAJA,GAAAA,GAAAyX,CAOA,OADAqa,GAAAyC,OAAA/hL,EACAs/K,EAGA,QAAA0C,IAAA54K,EAAApJ,GACA,GAAA8O,GAAA,QAAA1F,CACA,IAAAnV,UAAAtG,OAAA,EAAA,OAAAmhB,EAAAriB,KAAA6yL,MAAAxwK,KAAAA,EAAAizK,MACA,IAAA,MAAA/hL,EAAA,MAAAvT,MAAA6yL,MAAAxwK,EAAA,KACA,IAAA,kBAAA9O,GAAA,KAAA,IAAAzT,MACA,IAAA49K,GAAAv+J,EAAAxC,EACA,OAAA3c,MAAA6yL,MAAAxwK,GAAAq7J,EAAA55H,MAAAuxI,GAAAH,IAAAxX,EAAAnqK,IAGA,QAAAiiL,IAAAhjL,EAAAe,GACA,MAAA,YACAtI,GAAAjL,KAAAwS,GAAAsW,OAAAvV,EAAA7Q,MAAA1C,KAAAwH,YAIA,QAAAiuL,IAAAjjL,EAAAe,GACA,MAAAA,IAAAA,EAAA,WACAtI,GAAAjL,KAAAwS,GAAAsW,MAAAvV,GAIA,QAAAmiL,IAAAniL,GACA,GAAAf,GAAAxS,KAAAi0L,GAEA,OAAAzsL,WAAAtG,OACAlB,KAAAgC,MAAA,kBAAAuR,GACAiiL,GACAC,IAAAjjL,EAAAe,IACA0/K,GAAAjzL,KAAAs9C,OAAA9qC,GAAAsW,MAGA,QAAA6sK,IAAAnjL,EAAAe,GACA,MAAA,YACA2/K,GAAAlzL,KAAAwS,GAAA7E,UAAA4F,EAAA7Q,MAAA1C,KAAAwH,YAIA,QAAAouL,IAAApjL,EAAAe,GACA,MAAAA,IAAAA,EAAA,WACA2/K,GAAAlzL,KAAAwS,GAAA7E,SAAA4F,GAIA,QAAAsiL,IAAAtiL,GACA,GAAAf,GAAAxS,KAAAi0L,GAEA,OAAAzsL,WAAAtG,OACAlB,KAAAgC,MAAA,kBAAAuR,GACAoiL,GACAC,IAAApjL,EAAAe,IACA0/K,GAAAjzL,KAAAs9C,OAAA9qC,GAAA7E,SAGA,QAAAmoL,IAAAtjL,EAAAe,GACA,GAAA,kBAAAA,GAAA,KAAA,IAAAzT,MACA,OAAA,YACAozL,GAAAlzL,KAAAwS,GAAAugL,KAAAx/K,GAIA,QAAAwiL,IAAAxiL,GACA,GAAAf,GAAAxS,KAAAi0L,GAEA,OAAAzsL,WAAAtG,OACAlB,KAAAgC,KAAA8zL,GAAAtjL,EAAAe,IACA0/K,GAAAjzL,KAAAs9C,OAAA9qC,GAAAugL,KAGA,QAAAiD,IAAA/zL,GACA,kBAAAA,KAAAA,EAAAq8K,GAAAr8K,GAEA,KAAA,GAAAgzH,GAAAj1H,KAAA89K,QAAA79K,EAAAg1H,EAAA/zH,OAAA68K,EAAA,GAAA5wK,OAAAlN,GAAAuB,EAAA,EAAAA,EAAAvB,IAAAuB,EACA,IAAA,GAAA87C,GAAA3O,EAAAsmF,EAAAzzH,GAAAtB,EAAAyuC,EAAAztC,OAAA+8K,EAAAF,EAAAv8K,MAAArB,EAAA,EAAAA,EAAAD,IAAAC,GACAm9C,EAAA3O,EAAAxuC,KAAA8B,EAAAjB,KAAAs8C,EAAAA,EAAA4gI,SAAA/9K,EAAAwuC,IACAsvI,EAAAr3K,KAAA02C,EAKA,OAAA,IAAA24I,IAAAlY,EAAA/9K,KAAAm+K,SAAAn+K,KAAAk2L,MAAAl2L,KAAAi0L,KAGA,QAAAkC,IAAAC,GACA,GAAAA,EAAAnC,MAAAj0L,KAAAi0L,IAAA,KAAA,IAAAn0L,MAEA,KAAA,GAAAogL,GAAAlgL,KAAA89K,QAAAqC,EAAAiW,EAAAtY,QAAAsC,EAAAF,EAAAh/K,OAAA+tH,EAAAkxD,EAAAj/K,OAAAjB,EAAAsK,KAAAyuD,IAAAonH,EAAAnxD,GAAAoxD,EAAA,GAAAlzK,OAAAizK,GAAA5+K,EAAA,EAAAA,EAAAvB,IAAAuB,EACA,IAAA,GAAA87C,GAAAgjI,EAAAJ,EAAA1+K,GAAA++K,EAAAJ,EAAA3+K,GAAAtB,EAAAogL,EAAAp/K,OAAAwE,EAAA26K,EAAA7+K,GAAA,GAAA2L,OAAAjN,GAAAC,EAAA,EAAAA,EAAAD,IAAAC,GACAm9C,EAAAgjI,EAAAngL,IAAAogL,EAAApgL,MACAuF,EAAAvF,GAAAm9C,EAKA,MAAA97C,EAAA4+K,IAAA5+K,EACA6+K,EAAA7+K,GAAA0+K,EAAA1+K,EAGA,OAAA,IAAAy0L,IAAA5V,EAAArgL,KAAAm+K,SAAAn+K,KAAAk2L,MAAAl2L,KAAAi0L,KAGA,QAAArvL,IAAA+X,GACA,OAAAA,EAAA,IAAA1K,OAAA1B,MAAA,SAAAkrC,MAAA,SAAA/7C,GACA,GAAAS,GAAAT,EAAAmR,QAAA,IAEA,OADA1Q,IAAA,IAAAT,EAAAA,EAAAiD,MAAA,EAAAxC,KACAT,GAAA,UAAAA,IAIA,QAAA22L,IAAA7jL,EAAAmK,EAAAgoK,GACA,GAAA2R,GAAAC,EAAAC,EAAA5xL,GAAA+X,GAAA1R,GAAAioL,EACA,OAAA,YACA,GAAAQ,GAAA8C,EAAAx2L,KAAAwS,GACAgR,EAAAkwK,EAAAlwK,EAKAA,KAAA8yK,IAAAC,GAAAD,EAAA9yK,GAAAyqE,QAAAzqE,GAAA7G,EAAAgoK,GAEA+O,EAAAlwK,GAAA+yK,GAIA,QAAAE,IAAA95K,EAAAgoK,GACA,GAAAnyK,GAAAxS,KAAAi0L,GAEA,OAAAzsL,WAAAtG,OAAA,EACA+xL,GAAAjzL,KAAAs9C,OAAA9qC,GAAAgR,GAAAA,GAAA7G,GACA3c,KAAAgC,KAAAq0L,GAAA7jL,EAAAmK,EAAAgoK,IAGA,QAAA+R,IAAAlkL,GACA,MAAA,YACA,GAAAsG,GAAA9Y,KAAAW,UACA,KAAA,GAAAR,KAAAH,MAAA0yL,aAAA,IAAAvyL,IAAAqS,EAAA,MACAsG,IAAAA,EAAAlY,YAAAZ,OAIA,QAAA22L,MACA,MAAA32L,MAAAwjB,GAAA,aAAAkzK,GAAA12L,KAAAi0L,MAGA,QAAA2C,IAAAC,GACA,GAAAl6K,GAAA3c,KAAAk2L,MACA1jL,EAAAxS,KAAAi0L,GAEA,mBAAA4C,KAAAA,EAAA78K,GAAA68K,GAEA,KAAA,GAAA5hE,GAAAj1H,KAAA89K,QAAA79K,EAAAg1H,EAAA/zH,OAAA68K,EAAA,GAAA5wK,OAAAlN,GAAAuB,EAAA,EAAAA,EAAAvB,IAAAuB,EACA,IAAA,GAAA87C,GAAA0gI,EAAArvI,EAAAsmF,EAAAzzH,GAAAtB,EAAAyuC,EAAAztC,OAAA+8K,EAAAF,EAAAv8K,GAAA,GAAA2L,OAAAjN,GAAAC,EAAA,EAAAA,EAAAD,IAAAC,GACAm9C,EAAA3O,EAAAxuC,MAAA69K,EAAA6Y,EAAA71L,KAAAs8C,EAAAA,EAAA4gI,SAAA/9K,EAAAwuC,MACA,YAAA2O,KAAA0gI,EAAAE,SAAA5gI,EAAA4gI,UACAD,EAAA99K,GAAA69K,EACAuU,GAAAtU,EAAA99K,GAAAwc,EAAAnK,EAAArS,EAAA89K,EAAAgV,GAAA31I,EAAA9qC,IAKA,OAAA,IAAAyjL,IAAAlY,EAAA/9K,KAAAm+K,SAAAxhK,EAAAnK,GAGA,QAAAskL,IAAAD,GACA,GAAAl6K,GAAA3c,KAAAk2L,MACA1jL,EAAAxS,KAAAi0L,GAEA,mBAAA4C,KAAAA,EAAAzY,GAAAyY,GAEA,KAAA,GAAA5hE,GAAAj1H,KAAA89K,QAAA79K,EAAAg1H,EAAA/zH,OAAA68K,KAAAljK,KAAArZ,EAAA,EAAAA,EAAAvB,IAAAuB,EACA,IAAA,GAAA87C,GAAA3O,EAAAsmF,EAAAzzH,GAAAtB,EAAAyuC,EAAAztC,OAAAf,EAAA,EAAAA,EAAAD,IAAAC,EACA,GAAAm9C,EAAA3O,EAAAxuC,GAAA,CACA,IAAA,GAAAk4B,GAAAxwB,EAAAgvL,EAAA71L,KAAAs8C,EAAAA,EAAA4gI,SAAA/9K,EAAAwuC,GAAAooJ,EAAA9D,GAAA31I,EAAA9qC,GAAA4B,EAAA,EAAAtT,EAAA+G,EAAA3G,OAAAkT,EAAAtT,IAAAsT,GACAikB,EAAAxwB,EAAAuM,KACAm+K,GAAAl6J,EAAA1b,EAAAnK,EAAA4B,EAAAvM,EAAAkvL,EAGAhZ,GAAAn3K,KAAAiB,GACAgT,EAAAjU,KAAA02C,GAKA,MAAA,IAAA24I,IAAAlY,EAAAljK,EAAA8B,EAAAnK,GAKA,QAAAwkL,MACA,MAAA,IAAAC,IAAAj3L,KAAA89K,QAAA99K,KAAAm+K,UAGA,QAAA+Y,IAAAv6K,EAAA23K,GACA,GAAAE,GACAM,EACAL,CACA,OAAA,YACA,GAAAE,GAAAvS,GAAApiL,KAAA2c,GACA+3K,GAAA10L,KAAA0E,MAAAs9K,eAAArlK,GAAAylK,GAAApiL,KAAA2c,GACA,OAAAg4K,KAAAD,EAAA,KACAC,IAAAH,GAAAE,IAAAI,EAAAL,EACAA,EAAAH,EAAAE,EAAAG,EAAAG,EAAAJ,IAIA,QAAAyC,IAAAx6K,GACA,MAAA,YACA3c,KAAA0E,MAAAs9K,eAAArlK,IAIA,QAAAy6K,IAAAz6K,EAAA23K,EAAAC,GACA,GAAAC,GAEAC,EADAC,EAAAH,EAAA,EAEA,OAAA,YACA,GAAAI,GAAAvS,GAAApiL,KAAA2c,EACA,OAAAg4K,KAAAD,EAAA,KACAC,IAAAH,EAAAC,EACAA,EAAAH,EAAAE,EAAAG,EAAAJ,IAIA,QAAA8C,IAAA16K,EAAA23K,EAAA/gL,GACA,GAAAihL,GACAM,EACAL,CACA,OAAA,YACA,GAAAE,GAAAvS,GAAApiL,KAAA2c,GACA43K,EAAAhhL,EAAAvT,MACA00L,EAAAH,EAAA,EAEA,OADA,OAAAA,IAAAv0L,KAAA0E,MAAAs9K,eAAArlK,GAAA+3K,EAAAH,EAAAnS,GAAApiL,KAAA2c,IACAg4K,IAAAD,EAAA,KACAC,IAAAH,GAAAE,IAAAI,EAAAL,GACAK,EAAAJ,EAAAD,EAAAH,EAAAE,EAAAG,EAAAJ,KAIA,QAAA+C,IAAA9kL,EAAAmK,GACA,GAAA25K,GAAAC,EAAAgB,EAAAtqL,EAAAoV,EAAA,SAAA1F,EAAAjV,EAAA,OAAA2a,CACA,OAAA,YACA,GAAAqxK,GAAAR,GAAAlzL,KAAAwS,GACAgR,EAAAkwK,EAAAlwK,GACAmhK,EAAA,MAAA+O,EAAAngL,MAAA8O,GAAApV,IAAAA,EAAAkqL,GAAAx6K,QAAAwX,EAKA3Q,KAAA8yK,GAAAiB,IAAA5S,IAAA4R,GAAAD,EAAA9yK,GAAAyqE,QAAAzqE,GAAA9b,EAAA6vL,EAAA5S,GAEA+O,EAAAlwK,GAAA+yK,GAIA,QAAAiB,IAAA76K,EAAApJ,EAAAgmD,GACA,GAAAp5D,GAAA,cAAAwc,GAAA,IAAA86K,GAAA3G,EACA,OAAA,OAAAv9K,EAAAvT,KACA03L,WAAA/6K,EAAAu6K,GAAAv6K,EAAAxc,IACAqjB,GAAA,aAAA7G,EAAAw6K,GAAAx6K,IACA,kBAAApJ,GAAAvT,KACA03L,WAAA/6K,EAAA06K,GAAA16K,EAAAxc,EAAA+zL,GAAAl0L,KAAA,SAAA2c,EAAApJ,KACAvR,KAAAs1L,GAAAt3L,KAAAi0L,IAAAt3K,IACA3c,KACA03L,WAAA/6K,EAAAy6K,GAAAz6K,EAAAxc,EAAAoT,GAAAgmD,GACA/1C,GAAA,aAAA7G,EAAA,MAGA,QAAAg7K,IAAAh7K,EAAAxc,EAAAo5D,GACA,MAAA,UAAA75D,GACAM,KAAA0E,MAAA6hB,YAAA5J,EAAAxc,EAAAT,GAAA65D,IAIA,QAAAm+H,IAAA/6K,EAAApJ,EAAAgmD,GAEA,QAAAs5H,KACA,GAAA1yL,GAAAoT,EAAA7Q,MAAA1C,KAAAwH,UAEA,OADArH,KAAAq4K,IAAA94K,GAAA84K,EAAAr4K,IAAAw3L,GAAAh7K,EAAAxc,EAAAo5D,IACA75D,EAJA,GAAAA,GAAA84K,CAOA,OADAqa,GAAAyC,OAAA/hL,EACAs/K,EAGA,QAAA+E,IAAAj7K,EAAApJ,EAAAgmD,GACA,GAAAl3C,GAAA,UAAA1F,GAAA,GACA,IAAAnV,UAAAtG,OAAA,EAAA,OAAAmhB,EAAAriB,KAAA6yL,MAAAxwK,KAAAA,EAAAizK,MACA,IAAA,MAAA/hL,EAAA,MAAAvT,MAAA6yL,MAAAxwK,EAAA,KACA,IAAA,kBAAA9O,GAAA,KAAA,IAAAzT,MACA,OAAAE,MAAA6yL,MAAAxwK,EAAAq1K,GAAA/6K,EAAApJ,EAAA,MAAAgmD,EAAA,GAAAA,IAGA,QAAAs+H,IAAAtkL,GACA,MAAA,YACAvT,KAAA2G,YAAA4M,GAIA,QAAAukL,IAAAvkL,GACA,MAAA,YACA,GAAAghL,GAAAhhL,EAAAvT,KACAA,MAAA2G,YAAA,MAAA4tL,EAAA,GAAAA,GAIA,QAAAwD,IAAAxkL,GACA,MAAAvT,MAAA6yL,MAAA,OAAA,kBAAAt/K,GACAukL,GAAA5D,GAAAl0L,KAAA,OAAAuT,IACAskL,GAAA,MAAAtkL,EAAA,GAAAA,EAAA,KAGA,QAAAykL,MAKA,IAAA,GAJAr7K,GAAA3c,KAAAk2L,MACA+B,EAAAj4L,KAAAi0L,IACAiE,EAAAC,KAEAljE,EAAAj1H,KAAA89K,QAAA79K,EAAAg1H,EAAA/zH,OAAAM,EAAA,EAAAA,EAAAvB,IAAAuB,EACA,IAAA,GAAA87C,GAAA3O,EAAAsmF,EAAAzzH,GAAAtB,EAAAyuC,EAAAztC,OAAAf,EAAA,EAAAA,EAAAD,IAAAC,EACA,GAAAm9C,EAAA3O,EAAAxuC,GAAA,CACA,GAAA42L,GAAA9D,GAAA31I,EAAA26I,EACA1F,IAAAj1I,EAAA3gC,EAAAu7K,EAAA/3L,EAAAwuC,GACAlX,KAAAs/J,EAAAt/J,KAAAs/J,EAAAjuK,MAAAiuK,EAAAppL,SACAmb,MAAA,EACAnb,SAAAopL,EAAAppL,SACAolL,KAAAgE,EAAAhE,OAMA,MAAA,IAAAkD,IAAAhhE,EAAAj1H,KAAAm+K,SAAAxhK,EAAAu7K,GAGA,QAAAE,MACA,GAAA9B,GAAAC,EAAAj7J,EAAAt7B,KAAAwS,EAAA8oB,EAAA24J,IAAAz2I,EAAAliB,EAAAkiB,MACA,OAAA,IAAA66I,SAAA,SAAAn8K,EAAAC,GACA,GAAA6jC,IAAAzsC,MAAA4I,GACAtX,GAAA0O,MAAA,WAAA,KAAAiqC,GAAAthC,KAEAof,GAAAt5B,KAAA,WACA,GAAA0xL,GAAAR,GAAAlzL,KAAAwS,GACAgR,EAAAkwK,EAAAlwK,EAKAA,KAAA8yK,IACAC,GAAAD,EAAA9yK,GAAAyqE,OACAsoG,EAAA3zL,EAAAo9C,OAAAp5C,KAAAo5C,GACAu2I,EAAA3zL,EAAA6wL,UAAA7sL,KAAAo5C,GACAu2I,EAAA3zL,EAAAiC,IAAA+B,KAAA/B,IAGA6uL,EAAAlwK,GAAA+yK,MAOA,QAAAN,IAAAhhE,EAAAp6G,EAAA8B,EAAAnK,GACAxS,KAAA89K,QAAA7oD,EACAj1H,KAAAm+K,SAAAtjK,EACA7a,KAAAk2L,MAAAv5K,EACA3c,KAAAi0L,IAAAzhL,EAGA,QAAA2pB,IAAAxf,GACA,MAAAyvC,MAAAjwB,WAAAxf,GAGA,QAAAw7K,MACA,QAAA3lL,GAiCA,QAAA8lL,IAAA54L,GACA,OAAAA,EAGA,QAAA64L,IAAA74L,GACA,MAAAA,GAAAA,EAGA,QAAA84L,IAAA94L,GACA,MAAAA,IAAA,EAAAA,GAGA,QAAA+4L,IAAA/4L,GACA,QAAAA,GAAA,IAAA,EAAAA,EAAAA,IAAAA,GAAA,EAAAA,GAAA,GAAA,EAGA,QAAAg5L,IAAAh5L,GACA,MAAAA,GAAAA,EAAAA,EAGA,QAAAi5L,IAAAj5L,GACA,QAAAA,EAAAA,EAAAA,EAAA,EAGA,QAAAk5L,IAAAl5L,GACA,QAAAA,GAAA,IAAA,EAAAA,EAAAA,EAAAA,GAAAA,GAAA,GAAAA,EAAAA,EAAA,GAAA,EA4CA,QAAAm5L,IAAAn5L,GACA,MAAA,GAAA6K,KAAAid,IAAA9nB,EAAAo5L,IAGA,QAAAC,IAAAr5L,GACA,MAAA6K,MAAAq6J,IAAAllK,EAAAo5L,IAGA,QAAAE,IAAAt5L,GACA,OAAA,EAAA6K,KAAAid,IAAAyxK,GAAAv5L,IAAA,EAGA,QAAAw5L,IAAAx5L,GACA,MAAA6K,MAAA+/J,IAAA,EAAA,GAAA5qK,EAAA,IAGA,QAAAy5L,IAAAz5L,GACA,MAAA,GAAA6K,KAAA+/J,IAAA,GAAA,GAAA5qK,GAGA,QAAA05L,IAAA15L,GACA,QAAAA,GAAA,IAAA,EAAA6K,KAAA+/J,IAAA,EAAA,GAAA5qK,EAAA,IAAA,EAAA6K,KAAA+/J,IAAA,EAAA,GAAA,GAAA5qK,IAAA,EAGA,QAAA25L,IAAA35L,GACA,MAAA,GAAA6K,KAAA87I,KAAA,EAAA3mJ,EAAAA,GAGA,QAAA45L,IAAA55L,GACA,MAAA6K,MAAA87I,KAAA,KAAA3mJ,EAAAA,GAGA,QAAA65L,IAAA75L,GACA,QAAAA,GAAA,IAAA,EAAA,EAAA6K,KAAA87I,KAAA,EAAA3mJ,EAAAA,GAAA6K,KAAA87I,KAAA,GAAA3mJ,GAAA,GAAAA,GAAA,GAAA,EAcA,QAAA85L,IAAA95L,GACA,MAAA,GAAA+5L,GAAA,EAAA/5L,GAGA,QAAA+5L,IAAA/5L,GACA,OAAAA,GAAAA,GAAA0wL,GAAAH,GAAAvwL,EAAAA,EAAAA,EAAAg6L,GAAAzJ,IAAAvwL,GAAAi6L,IAAAj6L,EAAAk6L,GAAAl6L,EAAAm6L,GAAA5J,IAAAvwL,GAAAo6L,IAAAp6L,EAAAq6L,GAAA9J,IAAAvwL,GAAAs6L,IAAAt6L,EAAAu6L,GAGA,QAAAC,IAAAx6L,GACA,QAAAA,GAAA,IAAA,EAAA,EAAA+5L,GAAA,EAAA/5L,GAAA+5L,GAAA/5L,EAAA,GAAA,GAAA,EA6FA,QAAAq3L,IAAAz5I,EAAA9qC,GAEA,IADA,GAAAggL,KACAA,EAAAl1I,EAAAo1I,iBAAAF,EAAAA,EAAAhgL,KACA,KAAA8qC,EAAAA,EAAA38C,YACA,MAAAw5L,IAAA1iK,KAAA5rB,KAAAsuL,EAGA,OAAA3H,GAGA,QAAA4H,IAAAz9K,GACA,GAAAnK,GACAggL,CAEA71K,aAAAs5K,KACAzjL,EAAAmK,EAAAs3K,IAAAt3K,EAAAA,EAAAu5K,QAEA1jL,EAAA2lL,MAAA3F,EAAA2H,IAAA1iK,KAAA5rB,KAAA8Q,EAAA,MAAAA,EAAA,KAAAA,EAAA,GAGA,KAAA,GAAAs4G,GAAAj1H,KAAA89K,QAAA79K,EAAAg1H,EAAA/zH,OAAAM,EAAA,EAAAA,EAAAvB,IAAAuB,EACA,IAAA,GAAA87C,GAAA3O,EAAAsmF,EAAAzzH,GAAAtB,EAAAyuC,EAAAztC,OAAAf,EAAA,EAAAA,EAAAD,IAAAC,GACAm9C,EAAA3O,EAAAxuC,KACAoyL,GAAAj1I,EAAA3gC,EAAAnK,EAAArS,EAAAwuC,EAAA6jJ,GAAAuE,GAAAz5I,EAAA9qC,GAKA,OAAA,IAAAyjL,IAAAhhE,EAAAj1H,KAAAm+K,SAAAxhK,EAAAnK,GAQA,QAAA0Z,IAAAoxB,EAAA3gC,GACA,GACA+2K,GACAvzL,EAFAsyL,EAAAn1I,EAAAo1I,YAIA,IAAAD,EAAA,CACA91K,EAAA,MAAAA,EAAA,KAAAA,EAAA,EACA,KAAAxc,IAAAsyL,GACA,IAAAiB,EAAAjB,EAAAtyL,IAAAqQ,MAAA4iL,IAAAM,EAAA/2K,OAAAA,EACA,MAAA,IAAAs5K,MAAA34I,IAAA+8I,GAAA19K,GAAAxc,GAKA,MAAA,MAGA,QAAAm6L,IAAAz5L,GACA,MAAA,YACA,MAAAA,IAIA,QAAA05L,IAAApiL,EAAAlR,EAAAmlD,GACApsD,KAAAmY,OAAAA,EACAnY,KAAAiH,KAAAA,EACAjH,KAAAosD,UAAAA,EAGA,QAAAouI,MACA56L,EAAA8H,MAAA4Z,2BAGA,QAAAm5K,MACA76L,EAAA8H,MAAAwY,iBACAtgB,EAAA8H,MAAA4Z,2BAsFA,QAAAra,IAAAvH,GACA,OAAAuH,KAAAvH,GAIA,QAAAg7L,MACA,OAAA96L,EAAA8H,MAAAuR,OAGA,QAAA0hL,MACA,GAAA7tC,GAAA9sJ,KAAAkmL,iBAAAlmL,IACA,SAAA,EAAA,IAAA8sJ,EAAAjjJ,MAAA4kL,QAAAl7K,MAAAu5I,EAAA/gJ,OAAA0iL,QAAAl7K,QAIA,QAAAqnL,IAAAt9I,GACA,MAAAA,EAAAu9I,SAAA,KAAAv9I,EAAAA,EAAA38C,YAAA,MACA,OAAA28C,GAAAu9I,QAGA,QAAAC,IAAAl/G,GACA,MAAAA,GAAA,GAAA,KAAAA,EAAA,GAAA,IACAA,EAAA,GAAA,KAAAA,EAAA,GAAA,GAGA,QAAAm/G,IAAAz9I,GACA,GAAA9sC,GAAA8sC,EAAAu9I,OACA,OAAArqL,GAAAA,EAAAwqL,IAAAtxJ,OAAAl5B,EAAA47C,WAAA,KAGA,QAAA6uI,MACA,MAAAC,IAAA/3L,IAGA,QAAAg4L,MACA,MAAAD,IAAA7lL,IAGA,QAAA+lL,MACA,MAAAF,IAAAG,IAGA,QAAAH,IAAAF,GAOA,QAAAI,GAAAzsJ,GACA,GAAA66B,GAAA76B,EACA81I,SAAA,UAAA7gI,GACAosC,UAAA,YACAt/E,MAAAzJ,GAAA,YAEAuiE,GAAA9mC,QAAA7e,OAAA,QACA9M,KAAA,QAAA,WACAA,KAAA,iBAAA,OACAA,KAAA,SAAA4jE,GAAAnR,SACA9jE,MAAA8jE,GACAxnE,KAAA,WACA,GAAA45E,GAAAg/G,GAAA56L,MAAA47E,MACA3hE,IAAAja,MACA+W,KAAA,IAAA6kE,EAAA,GAAA,IACA7kE,KAAA,IAAA6kE,EAAA,GAAA,IACA7kE,KAAA,QAAA6kE,EAAA,GAAA,GAAAA,EAAA,GAAA,IACA7kE,KAAA,SAAA6kE,EAAA,GAAA,GAAAA,EAAA,GAAA,MAGAjtC,EAAAqhD,UAAA,cACAt/E,MAAAzJ,GAAA,eACAy7B,QAAA7e,OAAA,QACA9M,KAAA,QAAA,aACAA,KAAA,SAAA4jE,GAAAvuB,WACAr1C,KAAA,OAAA,QACAA,KAAA,eAAA,IACAA,KAAA,SAAA,QACAA,KAAA,kBAAA,aAEA,IAAA1O,GAAAsmC,EAAAqhD,UAAA,WACAt/E,KAAAsqL,EAAAM,QAAA,SAAAt1L,GAAA,MAAAA,GAAAiB,MAEAoB,GAAAwkH,OAAA5/G,SAEA5E,EAAAq6B,QAAA7e,OAAA,QACA9M,KAAA,QAAA,SAAA/Q,GAAA,MAAA,kBAAAA,EAAAiB,OACA8P,KAAA,SAAA,SAAA/Q,GAAA,MAAA20E,IAAA30E,EAAAiB,QAEA0nC,EACA3sC,KAAAu5L,GACAxkL,KAAA,OAAA,QACAA,KAAA,iBAAA,OACArS,MAAA,8BAAA,iBACA8e,GAAA,mCAAAg4K,GAyCA,QAAAD,KACA,GAAA5sJ,GAAA10B,GAAAja,MACAigL,EAAA2a,GAAA56L,MAAAosD,SAEA6zH,IACAtxI,EAAAqhD,UAAA,cACAtrF,MAAA,UAAA,MACAqS,KAAA,IAAAkpK,EAAA,GAAA,IACAlpK,KAAA,IAAAkpK,EAAA,GAAA,IACAlpK,KAAA,QAAAkpK,EAAA,GAAA,GAAAA,EAAA,GAAA,IACAlpK,KAAA,SAAAkpK,EAAA,GAAA,GAAAA,EAAA,GAAA,IAEAtxI,EAAAqhD,UAAA,WACAtrF,MAAA,UAAA,MACAqS,KAAA,IAAA,SAAA/Q,GAAA,MAAA,MAAAA,EAAAiB,KAAAjB,EAAAiB,KAAA/F,OAAA,GAAA++K,EAAA,GAAA,GAAAwb,EAAA,EAAAxb,EAAA,GAAA,GAAAwb,EAAA,IACA1kL,KAAA,IAAA,SAAA/Q,GAAA,MAAA,MAAAA,EAAAiB,KAAA,GAAAg5K,EAAA,GAAA,GAAAwb,EAAA,EAAAxb,EAAA,GAAA,GAAAwb,EAAA,IACA1kL,KAAA,QAAA,SAAA/Q,GAAA,MAAA,MAAAA,EAAAiB,MAAA,MAAAjB,EAAAiB,KAAAg5K,EAAA,GAAA,GAAAA,EAAA,GAAA,GAAAwb,EAAAA,IACA1kL,KAAA,SAAA,SAAA/Q,GAAA,MAAA,MAAAA,EAAAiB,MAAA,MAAAjB,EAAAiB,KAAAg5K,EAAA,GAAA,GAAAA,EAAA,GAAA,GAAAwb,EAAAA,KAIA9sJ,EAAAqhD,UAAA,sBACAtrF,MAAA,UAAA,QACAqS,KAAA,IAAA,MACAA,KAAA,IAAA,MACAA,KAAA,QAAA,MACAA,KAAA,SAAA,MAIA,QAAAwuD,GAAAjqC,EAAAghB,GACA,MAAAhhB,GAAAu/J,QAAAt1H,SAAA,GAAAm2H,GAAApgK,EAAAghB,GAGA,QAAAo/I,GAAApgK,EAAAghB,GACAt8C,KAAAs7B,KAAAA,EACAt7B,KAAAs8C,KAAAA,EACAt8C,KAAAwQ,MAAA8qB,EAAAu/J,QACA76L,KAAAksB,OAAA,EAyBA,QAAAsvK,KAqEA,QAAA//F,KACA,GAAAkgG,GAAAnV,GAAAlrJ,IACAsgK,GAAAC,GAAAC,IACAvxL,KAAA+1B,IAAAq7J,EAAA,GAAAlT,EAAA,IAAAl+K,KAAA+1B,IAAAq7J,EAAA,GAAAlT,EAAA,IAAAqT,GAAA,EACAD,GAAA,GAEApT,EAAAkT,EACAI,GAAA,EACAtB,KACA39F,IAGA,QAAAA,KACA,GAAAp9F,EAKA,QAHAkoF,EAAA6gG,EAAA,GAAAuT,EAAA,GACAl0G,EAAA2gG,EAAA,GAAAuT,EAAA,GAEA1lI,GACA,IAAA2lI,IACA,IAAAC,IACAC,IAAAv0G,EAAAr9E,KAAAC,IAAApI,EAAAutL,EAAAplL,KAAAyuD,IAAA1mD,EAAA8pL,EAAAx0G,IAAAkoG,EAAAH,EAAA/nG,EAAAy0G,EAAAD,EAAAx0G,GACA00G,IAAAx0G,EAAAv9E,KAAAC,IAAAnJ,EAAAq3K,EAAAnuK,KAAAyuD,IAAApmD,EAAA2pL,EAAAz0G,IAAA6wF,EAAAD,EAAA5wF,EAAA00G,EAAAD,EAAAz0G,EACA,MAEA,KAAA20G,IACAN,EAAA,GAAAv0G,EAAAr9E,KAAAC,IAAApI,EAAAutL,EAAAplL,KAAAyuD,IAAA1mD,EAAAq9K,EAAA/nG,IAAAkoG,EAAAH,EAAA/nG,EAAAy0G,EAAAD,GACAD,EAAA,IAAAv0G,EAAAr9E,KAAAC,IAAApI,EAAAg6L,EAAA7xL,KAAAyuD,IAAA1mD,EAAA8pL,EAAAx0G,IAAAkoG,EAAAH,EAAA0M,EAAAD,EAAAx0G,GACA00G,EAAA,GAAAx0G,EAAAv9E,KAAAC,IAAAnJ,EAAAq3K,EAAAnuK,KAAAyuD,IAAApmD,EAAA8lK,EAAA5wF,IAAA6wF,EAAAD,EAAA5wF,EAAA00G,EAAAD,GACAD,EAAA,IAAAx0G,EAAAv9E,KAAAC,IAAAnJ,EAAAk7L,EAAAhyL,KAAAyuD,IAAApmD,EAAA2pL,EAAAz0G,IAAA6wF,EAAAD,EAAA8jB,EAAAD,EAAAz0G,EACA,MAEA,KAAA40G,IACAP,IAAArM,EAAAvlL,KAAAC,IAAApI,EAAAmI,KAAAyuD,IAAA1mD,EAAAq9K,EAAA/nG,EAAAu0G,IAAAE,EAAA9xL,KAAAC,IAAApI,EAAAmI,KAAAyuD,IAAA1mD,EAAA8pL,EAAAx0G,EAAAu0G,KACAG,IAAA3jB,EAAApuK,KAAAC,IAAAnJ,EAAAkJ,KAAAyuD,IAAApmD,EAAA8lK,EAAA5wF,EAAAw0G,IAAAE,EAAAjyL,KAAAC,IAAAnJ,EAAAkJ,KAAAyuD,IAAApmD,EAAA2pL,EAAAz0G,EAAAw0G,KAKAD,EAAAvM,IACAqM,IAAA,EACAz8L,EAAAiwL,EAAAA,EAAAyM,EAAAA,EAAA18L,EACAA,EAAAowL,EAAAA,EAAAuM,EAAAA,EAAA38L,EACAuH,IAAA01L,KAAAnzH,EAAAzyD,KAAA,SAAA4jE,GAAA1zE,EAAA01L,GAAA11L,MAGAu1L,EAAA7jB,IACA2jB,IAAA,EACA58L,EAAAg5K,EAAAA,EAAA6jB,EAAAA,EAAA78L,EACAA,EAAAi5K,EAAAA,EAAA6jB,EAAAA,EAAA98L,EACAuH,IAAA21L,KAAApzH,EAAAzyD,KAAA,SAAA4jE,GAAA1zE,EAAA21L,GAAA31L,MAGAuJ,EAAA47C,YAAA6zH,EAAAzvK,EAAA47C,WACAyvI,IAAA/L,EAAA7P,EAAA,GAAA,GAAAoc,EAAApc,EAAA,GAAA,IACA6b,IAAAnjB,EAAAsH,EAAA,GAAA,GAAAuc,EAAAvc,EAAA,GAAA,IAEAA,EAAA,GAAA,KAAA6P,GACA7P,EAAA,GAAA,KAAAtH,GACAsH,EAAA,GAAA,KAAAoc,GACApc,EAAA,GAAA,KAAAuc,IACAhsL,EAAA47C,YAAA0jI,EAAAnX,IAAA0jB,EAAAG,IACAjB,EAAAv6L,KAAAs6B,GACAuhK,EAAAzB,SAIA,QAAA0B,KAEA,GADAtC,KACA56L,EAAA8H,MAAAwb,QAAA,CACA,GAAAtjB,EAAA8H,MAAAwb,QAAAhiB,OAAA,MACA4mL,IAAA/+J,aAAA++J,GACAA,EAAAx8K,WAAA,WAAAw8K,EAAA,MAAA,KACAn5I,EAAAnrB,GAAA,mDAAA,UAEAujK,IAAAnnL,EAAA8H,MAAAwa,KAAA65K,GACA75K,EAAAsB,GAAA,0DAAA,KAEAmrB,GAAA53B,KAAA,iBAAA,OACAyyD,EAAAzyD,KAAA,SAAA4jE,GAAAnR,SACAh5D,EAAA47C,YAAA6zH,EAAAzvK,EAAA47C,WACA0uI,GAAA7a,KAAAzvK,EAAA47C,UAAA,KAAAmvI,EAAAv6L,KAAAs6B,IACAuhK,EAAAh4L,MAGA,QAAAk4L,KACA,OAAAn9L,EAAA8H,MAAA4a,SACA,IAAA,IACAs5K,EAAAO,GAAAG,CACA,MAEA,KAAA,IACAhmI,IAAAmmI,KACAN,IAAAC,EAAAC,EAAAz0G,EAAAu0G,EAAAxM,EAAAG,EAAAloG,EAAAu0G,GACAG,IAAAC,EAAAC,EAAA10G,EAAAw0G,EAAA5jB,EAAAC,EAAA7wF,EAAAw0G,GACAhmI,EAAAomI,GACA5/F,IAEA,MAEA,KAAA,IACAxmC,IAAAmmI,IAAAnmI,IAAAomI,KACAP,EAAA,EAAAC,EAAAC,EAAAz0G,EAAAu0G,EAAA,IAAAxM,EAAAG,EAAAloG,GACA00G,EAAA,EAAAC,EAAAC,EAAA10G,EAAAw0G,EAAA,IAAA5jB,EAAAC,EAAA7wF,GACAxxB,EAAA2lI,GACAzyH,EAAAzyD,KAAA,SAAA4jE,GAAAvuB,WACA0wC,IAEA,MAEA,SAAA,OAEA29F,KAGA,QAAAuC,KACA,OAAAp9L,EAAA8H,MAAA4a,SACA,IAAA,IACAs5K,IACAC,EAAAC,EAAAF,GAAA,EACA9+F,IAEA,MAEA,KAAA,IACAxmC,IAAAomI,KACAP,EAAA,EAAAC,EAAAC,EAAAF,EAAA,IAAAxM,EAAAG,GACAwM,EAAA,EAAAC,EAAAC,EAAAF,EAAA,IAAA5jB,EAAAC,GACAriH,EAAAmmI,GACA3/F,IAEA,MAEA,KAAA,IACAxmC,IAAA2lI,KACAr8L,EAAA8H,MAAA6Z,QACA46K,IAAAC,EAAAC,EAAAz0G,EAAAu0G,EAAAxM,EAAAG,EAAAloG,EAAAu0G,GACAG,IAAAC,EAAAC,EAAA10G,EAAAw0G,EAAA5jB,EAAAC,EAAA7wF,EAAAw0G,GACAhmI,EAAAomI,KAEAP,EAAA,EAAAC,EAAAC,EAAAF,EAAA,IAAAxM,EAAAG,GACAwM,EAAA,EAAAC,EAAAC,EAAAF,EAAA,IAAA5jB,EAAAC,GACAriH,EAAAmmI,IAEAjzH,EAAAzyD,KAAA,SAAA4jE,GAAA1zE,IACA61F,IAEA,MAEA,SAAA,OAEA29F,KA3NA,GAAA76L,EAAA8H,MAAAwb,SAAA,GAAAtjB,EAAA8H,MAAAga,eAAAxgB,OAAAtB,EAAA8H,MAAAwb,QAAAhiB,OAAA,MAAAu5L,UACA,IAAA3S,EAAA,MACA,IAAAjmL,EAAAa,MAAA1C,KAAAwH,WAAA,CAEA,GAQAmoL,GAAAG,EACApX,EAAAC,EACAyjB,EAAAC,EACAE,EAAAC,EACA50G,EACAE,EACAi0G,EAEAF,EACAC,EAjBAxgK,EAAAt7B,KACAiH,EAAArH,EAAA8H,MAAAyQ,OAAA+lK,SAAAj3K,KACAqvD,EAAA,eAAA12D,EAAA8H,MAAAoa,QAAA7a,EAAA,UAAAA,GAAAi1L,GAAAt8L,EAAA8H,MAAA6Z,OAAAm7K,GAAAD,GACAN,EAAAnB,IAAA3lL,GAAA,KAAA4nL,GAAAh2L,GACAq1L,EAAAtB,IAAA73L,GAAA,KAAA+5L,GAAAj2L,GACAuJ,EAAAoqL,GAAAt/J,GACAsgD,EAAAprE,EAAAorE,OACAqkG,EAAAzvK,EAAA47C,UACAhqD,EAAAw5E,EAAA,GAAA,GACAv6E,EAAAu6E,EAAA,GAAA,GACAtpE,EAAAspE,EAAA,GAAA,GACAhpE,EAAAgpE,EAAA,GAAA,GAIAggH,EAAAO,GAAAG,GAAA18L,EAAA8H,MAAAua,SAGA+5K,EAAAxV,GAAAlrJ,GACAmtJ,EAAAuT,EACAa,EAAAt3H,EAAAjqC,EAAA9zB,WAAAwgL;gUAEA,aAAA/gL,EACAuJ,EAAA47C,UAAA6zH,IACA0P,EAAAqL,IAAA3lL,GAAAjT,EAAA45L,EAAA,GAAAtjB,EAAAsiB,IAAA73L,GAAA9B,EAAA26L,EAAA,KACAI,EAAApB,IAAA3lL,GAAA/C,EAAAq9K,EAAA4M,EAAAvB,IAAA73L,GAAAyP,EAAA8lK,KAGAiX,EAAA1P,EAAA,GAAA,GACAvH,EAAAuH,EAAA,GAAA,GACAmc,EAAAnc,EAAA,GAAA,GACAsc,EAAAtc,EAAA,GAAA,IAGA6P,EAAAH,EACAhX,EAAAD,EACA2jB,EAAAD,EACAI,EAAAD,CAEA,IAAA5tJ,GAAA10B,GAAAqhB,GACAvkB,KAAA,iBAAA,QAEAyyD,EAAA76B,EAAAqhD,UAAA,YACAj5E,KAAA,SAAA4jE,GAAA1zE,GAEA,IAAArH,EAAA8H,MAAAwb,QACAyrB,EACAnrB,GAAA,kBAAAi4E,GAAA,GACAj4E,GAAA,mCAAAs5K,GAAA,OACA,CACA,GAAA56K,GAAAjI,GAAAra,EAAA8H,MAAAwa,MACAsB,GAAA,gBAAAu5K,GAAA,GACAv5K,GAAA,cAAAw5K,GAAA,GACAx5K,GAAA,kBAAAi4E,GAAA,GACAj4E,GAAA,gBAAAs5K,GAAA,EAEAlW,IAAAhnL,EAAA8H,MAAAwa,MAGAs4K,KACA/G,GAAAn4J,GACAigK,EAAAv6L,KAAAs6B,GACAuhK,EAAAj4L,SA6JA,QAAAg/C,KACA,GAAApzC,GAAAxQ,KAAA66L,UAAAzuI,UAAA,KAGA,OAFA57C,GAAAorE,OAAAA,EAAAl5E,MAAA1C,KAAAwH,WACAgJ,EAAAwqL,IAAAA,EACAxqL,EA9XA,GAIAs3K,GAJAlsG,EAAA++G,GACA94L,EAAA64L,GACA/R,EAAA7pK,EAAAs8K,EAAA,QAAA,QAAA,OACAK,EAAA,CA+YA,OA7VAL,GAAAt+F,KAAA,SAAAnuD,EAAAsxI,GACAtxI,EAAAyd,UACAzd,EACAnrB,GAAA,cAAA,WAAA+hD,EAAAvlE,KAAAwH,WAAAwgL,cAAApjL,UACA4e,GAAA,4BAAA,WAAA+hD,EAAAvlE,KAAAwH,WAAA3C,QACAguL,MAAA,QAAA,WAQA,QAAAA,GAAAnzL,GACA8Q,EAAA47C,UAAA,IAAA1sD,GAAAo7L,GAAAqC,GAAA,KAAAh9L,EAAAT,GACA67L,EAAAv6L,KAAAs6B,GACAuhK,EAAAzB,QAVA,GAAA9/J,GAAAt7B,KACAwQ,EAAA8qB,EAAAu/J,QACAgC,EAAAt3H,EAAAjqC,EAAA9zB,WACA41L,EAAA5sL,EAAA47C,UACA+wI,EAAAnC,EAAAhiL,MAAA,kBAAAinK,GAAAA,EAAAv9K,MAAA1C,KAAAwH,WAAAy4K,EAAAzvK,EAAAorE,QACAz7E,EAAA2sL,GAAAsQ,EAAAD,EAQA,OAAAC,IAAAD,EAAAtK,EAAAA,EAAA,KAGAlkJ,EACA3sC,KAAA,WACA,GAAAs5B,GAAAt7B,KACAs8C,EAAA90C,UACAgJ,EAAA8qB,EAAAu/J,QACAsC,EAAAnC,EAAAhiL,MAAA,kBAAAinK,GAAAA,EAAAv9K,MAAA44B,EAAAghB,GAAA2jI,EAAAzvK,EAAAorE,QACAihH,EAAAt3H,EAAAjqC,EAAAghB,GAAA0rI,aAEAyL,IAAAn4J,GACA9qB,EAAA47C,UAAA,MAAA+wI,GAAArC,GAAAqC,GAAA,KAAAA,EACA5B,EAAAv6L,KAAAs6B,GACAuhK,EAAAj4L,QAAAw2L,QAAAv2L,SA8CA62L,EAAA1wL,WACAg9K,YAAA,WAEA,MADA,MAAAhoL,KAAAksB,SAAAlsB,KAAAwQ,MAAA+0D,QAAAvlE,KAAAA,KAAAq9L,UAAA,GACAr9L,MAEA4E,MAAA,WAEA,MADA5E,MAAAq9L,WAAAr9L,KAAAq9L,UAAA,EAAAr9L,KAAA68L,KAAA,UACA78L,MAEAo7L,MAAA,WAEA,MADAp7L,MAAA68L,KAAA,SACA78L,MAEA6E,IAAA,WAEA,MADA,MAAA7E,KAAAksB,eAAAlsB,MAAAwQ,MAAA+0D,QAAAvlE,KAAA68L,KAAA,QACA78L,MAEA68L,KAAA,SAAA51L,GACAu+K,GAAA,GAAA+U,IAAAa,EAAAn0L,EAAA+zL,EAAAtxJ,OAAA1pC,KAAAwQ,MAAA47C,YAAAu8H,EAAAjmL,MAAAimL,GAAA1hL,EAAAjH,KAAAs7B,KAAAt7B,KAAAs8C,SA2OA8+I,EAAAx/G,OAAA,SAAAh5E,GACA,MAAA4E,WAAAtG,QAAA06E,EAAA,kBAAAh5E,GAAAA,EAAA03L,MAAA13L,EAAA,GAAA,IAAAA,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAA,EAAA,GAAA,MAAAw4L,GAAAx/G,GAGAw/G,EAAAv5L,OAAA,SAAAe,GACA,MAAA4E,WAAAtG,QAAAW,EAAA,kBAAAe,GAAAA,EAAA03L,KAAA13L,GAAAw4L,GAAAv5L,GAGAu5L,EAAAK,WAAA,SAAA74L,GACA,MAAA4E,WAAAtG,QAAAu6L,GAAA74L,EAAAw4L,GAAAK,GAGAL,EAAA53K,GAAA,WACA,GAAAjQ,GAAAo1K,EAAAnlK,GAAA9gB,MAAAimL,EAAAnhL,UACA,OAAA+L,KAAAo1K,EAAAyS,EAAA7nL,GAGA6nL,EAUA,QAAAkC,IAAAnjG,GACA,MAAA,UAAAh2F,EAAA2O,GACA,MAAAqnF,GACAh2F,EAAAuZ,OAAAnK,MAAApP,EAAAgU,OAAA5E,MACAT,EAAA4K,OAAAnK,MAAAT,EAAAqF,OAAA5E,QAKA,QAAAgqL,MAMA,QAAAA,GAAAniB,GACA,GAOAhnK,GACAvT,EACAo5K,EACAryF,EACAznF,EACAqB,EAZAtB,EAAAk7K,EAAAl6K,OACAs8L,KACAC,EAAAvkB,EAAAh5K,GACAw9L,KACAC,KACA1oE,EAAA0oE,EAAA1oE,OAAA,GAAA9nH,OAAAjN,GACA69K,EAAA,GAAA5wK,OAAAjN,EAAAA,EASA,KAAAkU,EAAA,EAAAjU,GAAA,IAAAA,EAAAD,GAAA,CACA,IAAAW,EAAA,EAAAW,GAAA,IAAAA,EAAAtB,GACAW,GAAAu6K,EAAAj7K,GAAAqB,EAEAg8L,GAAA52L,KAAA/F,GACA68L,EAAA92L,KAAAsyK,EAAAh5K,IACAkU,GAAAvT,EAuBA,IAnBA+8L,GAAAH,EAAA/rL,KAAA,SAAAvN,EAAA2O,GACA,MAAA8qL,GAAAJ,EAAAr5L,GAAAq5L,EAAA1qL,MAIA+qL,GAAAH,EAAA73E,QAAA,SAAA7/G,EAAA7F,GACA6F,EAAA0L,KAAA,SAAAvN,EAAA2O,GACA,MAAA+qL,GAAAziB,EAAAj7K,GAAAgE,GAAAi3K,EAAAj7K,GAAA2S,QAOAsB,EAAA0pL,GAAA,EAAAC,GAAAC,EAAA99L,GAAAkU,EACAwzE,EAAAxzE,EAAA4pL,EAAAD,GAAA79L,EAIAW,EAAA,EAAAV,GAAA,IAAAA,EAAAD,GAAA,CACA,IAAA+5K,EAAAp5K,EAAAW,GAAA,IAAAA,EAAAtB,GAAA,CACA,GAAA+9L,GAAAR,EAAAt9L,GACA+9L,EAAAR,EAAAO,GAAAz8L,GACAhB,EAAA46K,EAAA6iB,GAAAC,GACAvjJ,EAAA95C,EACAkoE,EAAAloE,GAAAL,EAAA4T,CACA2pK,GAAAmgB,EAAAh+L,EAAA+9L,IACAvjL,MAAAujL,EACAE,SAAAD,EACA17B,WAAA7nH,EACA8nH,SAAA15F,EACAx1D,MAAA/S,GAGAy0H,EAAAgpE,IACAvjL,MAAAujL,EACAz7B,WAAAyX,EACAxX,SAAA5hK,EACA0S,MAAAiqL,EAAAS,IAEAp9L,GAAA+mF,EAIA,IAAAznF,GAAA,IAAAA,EAAAD,GACA,IAAAsB,EAAArB,EAAA,IAAAqB,EAAAtB,GAAA,CACA,GAAAwd,GAAAqgK,EAAAv8K,EAAAtB,EAAAC,GACAgY,EAAA4lK,EAAA59K,EAAAD,EAAAsB,IACAkc,EAAAnK,OAAA4E,EAAA5E,QACAoqL,EAAA/2L,KAAA8W,EAAAnK,MAAA4E,EAAA5E,OACAmK,OAAAvF,EAAAA,OAAAuF,IACAA,OAAAA,EAAAvF,OAAAA,IAKA,MAAAimL,GAAAT,EAAAjsL,KAAA0sL,GAAAT,EAvFA,GAAAK,GAAA,EACAJ,EAAA,KACAC,EAAA,KACAO,EAAA,IAuGA,OAhBAb,GAAAS,SAAA,SAAAp7L,GACA,MAAA4E,WAAAtG,QAAA88L,EAAAF,GAAA,EAAAl7L,GAAA26L,GAAAS,GAGAT,EAAAK,WAAA,SAAAh7L,GACA,MAAA4E,WAAAtG,QAAA08L,EAAAh7L,EAAA26L,GAAAK,GAGAL,EAAAM,cAAA,SAAAj7L,GACA,MAAA4E,WAAAtG,QAAA28L,EAAAj7L,EAAA26L,GAAAM,GAGAN,EAAAa,WAAA,SAAAx7L,GACA,MAAA4E,WAAAtG,QAAA,MAAA0B,EAAAw7L,EAAA,MAAAA,EAAAd,GAAA16L,IAAAA,EAAAA,EAAA26L,GAAAa,GAAAA,EAAAx7L,GAGA26L,EAKA,QAAAc,IAAAx9L,GACA,MAAA,YACA,MAAAA,IASA,QAAAy9L,MACAt+L,KAAAu+L,IAAAv+L,KAAAw+L,IACAx+L,KAAAy+L,IAAAz+L,KAAA0+L,IAAA,KACA1+L,KAAA4C,EAAA,GAGA,QAAA+0B,MACA,MAAA,IAAA2mK,IAqHA,QAAAK,IAAA34L,GACA,MAAAA,GAAA0X,OAGA,QAAAkhL,IAAA54L,GACA,MAAAA,GAAAmS,OAGA,QAAA0mL,IAAA74L,GACA,MAAAA,GAAAg7J,OAGA,QAAA89B,IAAA94L,GACA,MAAAA,GAAAw8J,WAGA,QAAAu8B,IAAA/4L,GACA,MAAAA,GAAAy8J,SAGA,QAAAu8B,MAQA,QAAAA,KACA,GAAAhyB,GACAiyB,EAAAC,GAAAl+L,KAAAwG,WACApD,EAAAsZ,EAAAhb,MAAA1C,KAAAi/L,GACAv/L,EAAAyY,EAAAzV,MAAA1C,KAAAi/L,GACAx2C,GAAAuY,EAAAt+J,MAAA1C,MAAAi/L,EAAA,GAAA76L,EAAA66L,IACAE,EAAA38B,EAAA9/J,MAAA1C,KAAAi/L,GAAAG,GACAC,EAAA58B,EAAA//J,MAAA1C,KAAAi/L,GAAAG,GACAE,EAAA72C,EAAAjhI,GAAA23K,GACAI,EAAA92C,EAAAmc,GAAAu6B,GACAlhL,GAAA+iJ,EAAAt+J,MAAA1C,MAAAi/L,EAAA,GAAAv/L,EAAAu/L,IACAO,EAAAh9B,EAAA9/J,MAAA1C,KAAAi/L,GAAAG,GACAK,EAAAh9B,EAAA//J,MAAA1C,KAAAi/L,GAAAG,EAaA,IAXAlyK,IAAAA,EAAA8/I,EAAAr1I,MAEAzK,EAAAq2I,OAAA+7B,EAAAC,GACAryK,EAAA42I,IAAA,EAAA,EAAArb,EAAA02C,EAAAE,GACAF,IAAAK,GAAAH,IAAAI,IACAvyK,EAAAwyK,iBAAA,EAAA,EAAAzhL,EAAAuJ,GAAAg4K,GAAAvhL,EAAA2mJ,GAAA46B,IACAtyK,EAAA42I,IAAA,EAAA,EAAA7lJ,EAAAuhL,EAAAC,IAEAvyK,EAAAwyK,iBAAA,EAAA,EAAAJ,EAAAC,GACAryK,EAAA82I,YAEAgJ,EAAA,MAAA9/I,GAAA,KAAA8/I,EAAA,IAAA,KAhCA,GAAAtvJ,GAAAihL,GACAxmL,EAAAymL,GACA59B,EAAA69B,GACAr8B,EAAAs8B,GACAr8B,EAAAs8B,GACA7xK,EAAA,IAsDA,OAxBA8xK,GAAAh+B,OAAA,SAAAp+J,GACA,MAAA4E,WAAAtG,QAAA8/J,EAAA,kBAAAp+J,GAAAA,EAAAy7L,IAAAz7L,GAAAo8L,GAAAh+B,GAGAg+B,EAAAx8B,WAAA,SAAA5/J,GACA,MAAA4E,WAAAtG,QAAAshK,EAAA,kBAAA5/J,GAAAA,EAAAy7L,IAAAz7L,GAAAo8L,GAAAx8B,GAGAw8B,EAAAv8B,SAAA,SAAA7/J,GACA,MAAA4E,WAAAtG,QAAAuhK,EAAA,kBAAA7/J,GAAAA,EAAAy7L,IAAAz7L,GAAAo8L,GAAAv8B,GAGAu8B,EAAAthL,OAAA,SAAA9a,GACA,MAAA4E,WAAAtG,QAAAwc,EAAA9a,EAAAo8L,GAAAthL,GAGAshL,EAAA7mL,OAAA,SAAAvV,GACA,MAAA4E,WAAAtG,QAAAiX,EAAAvV,EAAAo8L,GAAA7mL,GAGA6mL,EAAA9xK,QAAA,SAAAtqB,GACA,MAAA4E,WAAAtG,QAAAgsB,EAAA,MAAAtqB,EAAA,KAAAA,EAAAo8L,GAAA9xK,GAGA8xK,EAKA,QAAAW,OAkDA,QAAAC,IAAA3S,EAAApnL,GACA,GAAAmD,GAAA,GAAA22L,GAGA,IAAA1S,YAAA0S,IAAA1S,EAAAjrL,KAAA,SAAAuR,EAAA8O,GAAArZ,EAAA/E,IAAAoe,EAAA9O,SAGA,IAAApG,MAAAC,QAAA6/K,GAAA,CACA,GAEA7sL,GAFAD,GAAA,EACAD,EAAA+sL,EAAA/rL,MAGA,IAAA,MAAA2E,EAAA,OAAA1F,EAAAD,GAAA8I,EAAA/E,IAAA9D,EAAA8sL,EAAA9sL,QACA,QAAAA,EAAAD,GAAA8I,EAAA/E,IAAA4B,EAAAzF,EAAA6sL,EAAA9sL,GAAAA,EAAA8sL,GAAA7sL,OAIA,IAAA6sL,EAAA,IAAA,GAAA5qK,KAAA4qK,GAAAjkL,EAAA/E,IAAAoe,EAAA4qK,EAAA5qK,GAEA,OAAArZ,GAGA,QAAAuzH,MAOA,QAAA75H,GAAAg+C,EAAAsvE,EAAA6vE,EAAAC,GACA,GAAA9vE,GAAAjzE,EAAA77C,OAEA,MADA,OAAA6+L,GAAAr/I,EAAAhvC,KAAAquL,GACA,MAAAC,EAAAA,EAAAt/I,GAAAA,CAYA,KATA,GAGAy+H,GACA5rK,EAEAuuC,EANA3hD,GAAA,EACAD,EAAAwgD,EAAAx/C,OACAmhB,EAAA06B,EAAAizE,KAGAiwE,EAAAL,KAEA3/K,EAAA4/K,MAEA1/L,EAAAD,IACA4hD,EAAAm+I,EAAA56L,IAAA85K,EAAA98J,EAAA9O,EAAAmtC,EAAAvgD,IAAA,KACA2hD,EAAAl7C,KAAA2M,GAEA0sL,EAAAh8L,IAAAk7K,GAAA5rK,GAQA,OAJA0sL,GAAAj+L,KAAA,SAAA8/C,EAAAz/B,GACAy9K,EAAA7/K,EAAAoC,EAAA3f,EAAAo/C,EAAAkuE,EAAA6vE,EAAAC,MAGA7/K,EAGA,QAAA65I,GAAA9wJ,EAAAgnH,GACA,KAAAA,EAAAjzE,EAAA77C,OAAA,MAAA8H,EACA,IAAA03C,GAAAw/I,EAAAC,EAAAnwE,EAAA,EAGA,OAFA,OAAAgwE,GAAAhwE,GAAAjzE,EAAA77C,OAAAw/C,EAAA13C,EAAA8wJ,WACAp5G,KAAA13C,EAAAhH,KAAA,SAAAxB,EAAA4T,GAAAssC,EAAA95C,MAAAyb,IAAAjO,EAAA0tC,OAAAg4G,EAAAt5J,EAAAwvH,QACA,MAAAkwE,EAAAx/I,EAAAhvC,KAAA,SAAAvN,EAAA2O,GAAA,MAAAotL,GAAA/7L,EAAAke,IAAAvP,EAAAuP,OAAAq+B,EAzCA,GAEAq/I,GACAC,EACAzjE,EAJAx/E,KACAojJ,IA2CA,OAAA5jE,IACA0wD,OAAA,SAAAvsI,GAAA,MAAAh+C,GAAAg+C,EAAA,EAAA0/I,GAAAC,KACAr3L,IAAA,SAAA03C,GAAA,MAAAh+C,GAAAg+C,EAAA,EAAA4/I,GAAAC,KACAzmC,QAAA,SAAAp5G,GAAA,MAAAo5G,GAAAp3J,EAAAg+C,EAAA,EAAA4/I,GAAAC,IAAA,IACAl+K,IAAA,SAAArc,GAAA,MAAA+2C,GAAAn2C,KAAAZ,GAAAu2H,GACA4jE,SAAA,SAAAj6K,GAAA,MAAAi6K,GAAApjJ,EAAA77C,OAAA,GAAAglB,EAAAq2G,GACAwjE,WAAA,SAAA75K,GAAA,MAAA65K,GAAA75K,EAAAq2G,GACAyjE,OAAA,SAAAn6L,GAAA,MAAAm6L,GAAAn6L,EAAA02H,IAIA,QAAA6jE,MACA,SAGA,QAAAC,IAAApT,EAAA5qK,EAAA9O,GACA05K,EAAA5qK,GAAA9O,EAGA,QAAA+sL,MACA,MAAAV,MAGA,QAAAW,IAAAv3L,EAAAqZ,EAAA9O,GACAvK,EAAA/E,IAAAoe,EAAA9O,GAGA,QAAAitL,OAoBA,QAAAC,IAAAxT,EAAApnL,GACA,GAAA5B,GAAA,GAAAu8L,GAGA,IAAAvT,YAAAuT,IAAAvT,EAAAjrL,KAAA,SAAAuR,GAAAtP,EAAA0D,IAAA4L,SAGA,IAAA05K,EAAA,CACA,GAAA9sL,IAAA,EAAAD,EAAA+sL,EAAA/rL,MACA,IAAA,MAAA2E,EAAA,OAAA1F,EAAAD,GAAA+D,EAAA0D,IAAAslL,EAAA9sL,QACA,QAAAA,EAAAD,GAAA+D,EAAA0D,IAAA9B,EAAAonL,EAAA9sL,GAAAA,EAAA8sL,IAGA,MAAAhpL,GAGA,QAAA84C,IAAA/zC,GACA,GAAA+zC,KACA,KAAA,GAAA16B,KAAArZ,GAAA+zC,EAAAn2C,KAAAyb,EACA,OAAA06B,GAGA,QAAA+E,IAAA94C,GACA,GAAA84C,KACA,KAAA,GAAAz/B,KAAArZ,GAAA84C,EAAAl7C,KAAAoC,EAAAqZ,GACA,OAAAy/B,GAGA,QAAAg4G,IAAA9wJ,GACA,GAAA8wJ,KACA,KAAA,GAAAz3I,KAAArZ,GAAA8wJ,EAAAlzJ,MAAAyb,IAAAA,EAAA9O,MAAAvK,EAAAqZ,IACA,OAAAy3I,GAOA,QAAA4mC,IAAAv8L,EAAA2O,GACA,MAAA3O,GAAA2O,EAGA,QAAA4tB,IAAA6/G,GAEA,IADA,GAAApgJ,GAAA,EAAAD,EAAAqgJ,EAAAr/I,OAAAw/B,EAAA6/G,EAAArgJ,EAAA,GAAA,GAAAqgJ,EAAA,GAAA,GAAAA,EAAArgJ,EAAA,GAAA,GAAAqgJ,EAAA,GAAA,KACApgJ,EAAAD,GAAAwgC,GAAA6/G,EAAApgJ,EAAA,GAAA,GAAAogJ,EAAApgJ,GAAA,GAAAogJ,EAAApgJ,EAAA,GAAA,GAAAogJ,EAAApgJ,GAAA,EACA,OAAAugC,GAGA,QAAAigK,IAAA9/L,GACA,MAAA,YACA,MAAAA,IAIA,QAAAkG,IAAAw5I,EAAAqgD,GAEA,IADA,GAAA7/L,GAAAZ,GAAA,EAAAD,EAAA0gM,EAAA1/L,SACAf,EAAAD,GAAA,GAAAa,EAAA8/L,GAAAtgD,EAAAqgD,EAAAzgM,IAAA,MAAAY,EACA,OAAA,GAGA,QAAA8/L,IAAAtgD,EAAAlJ,GAEA,IAAA,GADAx2I,GAAAw2I,EAAA,GAAAj2I,EAAAi2I,EAAA,GAAAtwI,GAAA,EACA5G,EAAA,EAAAD,EAAAqgJ,EAAAr/I,OAAAM,EAAAtB,EAAA,EAAAC,EAAAD,EAAAsB,EAAArB,IAAA,CACA,GAAA84L,GAAA14C,EAAApgJ,GAAA66K,EAAAie,EAAA,GAAA6H,EAAA7H,EAAA,GAAA8H,EAAAxgD,EAAA/+I,GAAAy5K,EAAA8lB,EAAA,GAAAC,EAAAD,EAAA,EACA,IAAAE,GAAAhI,EAAA8H,EAAA1pD,GAAA,MAAA,EACAypD,GAAA1/L,GAAA4/L,EAAA5/L,GAAAP,GAAAo6K,EAAAD,IAAA55K,EAAA0/L,IAAAE,EAAAF,GAAA9lB,IAAAj0K,GAAAA,GAEA,MAAAA,GAGA,QAAAk6L,IAAA98L,EAAA2O,EAAA/R,GACA,GAAAZ,EAAA,OAAA+gM,IAAA/8L,EAAA2O,EAAA/R,IAAAogM,GAAAh9L,EAAAhE,IAAAgE,EAAA,KAAA2O,EAAA,KAAA/R,EAAAZ,GAAA2S,EAAA3S,IAGA,QAAA+gM,IAAA/8L,EAAA2O,EAAA/R,GACA,OAAA+R,EAAA,GAAA3O,EAAA,KAAApD,EAAA,GAAAoD,EAAA,MAAApD,EAAA,GAAAoD,EAAA,KAAA2O,EAAA,GAAA3O,EAAA,IAGA,QAAAg9L,IAAAp7L,EAAA0O,EAAApU,GACA,MAAA0F,IAAA0O,GAAAA,GAAApU,GAAAA,GAAAoU,GAAAA,GAAA1O,EAGA,QAAAq7L,OAqBA,QAAAC,MAMA,QAAAA,GAAAv/I,GACA,GAAAo4H,GAAAonB,EAAAx/I,EAGA,IAAA30C,MAAAC,QAAA8sK,GAKAA,EAAAA,EAAAv3K,QAAA+O,KAAAgvL,QALA,CACA,GAAA1mB,GAAAp+F,EAAA95B,GAAAl9C,EAAAo1K,EAAA,GAAAxrK,EAAAwrK,EAAA,EACAE,GAAAT,EAAA70K,EAAA4J,EAAA0rK,GACAA,EAAAhB,EAAA3uK,KAAA8sB,MAAAzyB,EAAAs1K,GAAAA,EAAA3vK,KAAA8sB,MAAA7oB,EAAA0rK,GAAAA,EAAAA,GAKA,MAAAA,GAAAlxK,IAAA,SAAAuK,GACA,MAAAguL,GAAAz/I,EAAAvuC,KAMA,QAAAguL,GAAAz/I,EAAAvuC,GACA,GAAAiuL,MACAC,IAiBA,OAfAC,GAAA5/I,EAAAvuC,EAAA,SAAAgtI,GACAohD,EAAAphD,EAAAz+F,EAAAvuC,GACAmtB,GAAA6/G,GAAA,EAAAihD,EAAA56L,MAAA25I,IACAkhD,EAAA76L,KAAA25I,KAGAkhD,EAAA57E,QAAA,SAAA+6E,GACA,IAAA,GAAAgB,GAAAzhM,EAAA,EAAAD,EAAAshM,EAAAtgM,OAAAf,EAAAD,IAAAC,EACA,IAAA,IAAA4G,IAAA66L,EAAAJ,EAAArhM,IAAA,GAAAygM,GAEA,WADAgB,GAAAh7L,KAAAg6L,MAOA35L,KAAA,eACAsM,MAAAA,EACAsuL,YAAAL,GAMA,QAAAE,GAAA5/I,EAAAvuC,EAAAu7G,GAuCA,QAAAgzE,GAAAlrI,GACA,GAIA/wD,GAAA1E,EAJAyD,GAAAgyD,EAAA,GAAA,GAAA/1D,EAAA+1D,EAAA,GAAA,GAAAx1D,GACAyD,GAAA+xD,EAAA,GAAA,GAAA/1D,EAAA+1D,EAAA,GAAA,GAAAx1D,GACAs3D,EAAAh+C,EAAA9V,GACAm9L,EAAArnL,EAAA7V,IAEAgB,EAAAm8L,EAAAtpI,KACAv3D,EAAA8gM,EAAAF,WACAC,GAAAn8L,EAAAhB,WACAo9L,GAAA9gM,EAAAyD,OACAiB,IAAA1E,GACA0E,EAAA06I,KAAA35I,KAAA/B,GACAiqH,EAAAjpH,EAAA06I,OAEA0hD,EAAAp8L,EAAAjB,OAAAo9L,EAAA7gM,EAAA0D,MAAAD,MAAAiB,EAAAjB,MAAAC,IAAA1D,EAAA0D,IAAA07I,KAAA16I,EAAA06I,KAAAn0I,OAAAjL,EAAAo/I,eAGAyhD,GAAAn8L,EAAAhB,KACAgB,EAAA06I,KAAA35I,KAAA/B,GACAm9L,EAAAn8L,EAAAhB,IAAAk9L,GAAAl8L,IAEAA,EAAAo8L,EAAAF,KACA5gM,EAAA6gM,EAAAtpI,WACAupI,GAAAp8L,EAAAjB,aACAo9L,GAAA7gM,EAAA0D,KACAgB,IAAA1E,GACA0E,EAAA06I,KAAA35I,KAAA/B,GACAiqH,EAAAjpH,EAAA06I,OAEA0hD,EAAA9gM,EAAAyD,OAAAo9L,EAAAn8L,EAAAhB,MAAAD,MAAAzD,EAAAyD,MAAAC,IAAAgB,EAAAhB,IAAA07I,KAAAp/I,EAAAo/I,KAAAn0I,OAAAvG,EAAA06I,eAGA0hD,GAAAp8L,EAAAjB,OACAiB,EAAA06I,KAAAjxI,QAAA1K,GACAq9L,EAAAp8L,EAAAjB,MAAA8zD,GAAA7yD,GAGAo8L,EAAAvpI,GAAAspI,EAAAD,IAAAn9L,MAAA8zD,EAAA7zD,IAAAk9L,EAAAxhD,MAAA37I,EAAAC,IA3EA,GAEAhE,GAAAO,EAAA2/J,EAAAzxC,EAAAC,EAAAu7D,EAFAmX,EAAA,GAAA90L,OACA60L,EAAA,GAAA70L,MAOA,KAHAtM,EAAAO,GAAA,EACAkuH,EAAAxtE,EAAA,IAAAvuC,EACA2uL,GAAA5yE,GAAA,GAAAzJ,QAAAi8E,KACAjhM,EAAA+mF,EAAA,GACAm5E,EAAAzxC,EAAAA,EAAAxtE,EAAAjhD,EAAA,IAAA0S,EACA2uL,GAAAnhC,EAAAzxC,GAAA,GAAAzJ,QAAAi8E,EAKA,KAHAI,GAAA5yE,GAAA,GAAAzJ,QAAAi8E,KAGA1gM,EAAA0mF,EAAA,GAAA,CAKA,IAJAjnF,GAAA,EACAyuH,EAAAxtE,EAAA1gD,EAAAwmF,EAAAA,IAAAr0E,EACAg8G,EAAAztE,EAAA1gD,EAAAwmF,IAAAr0E,EACA2uL,GAAA5yE,GAAA,EAAAC,GAAA,GAAA1J,QAAAi8E,KACAjhM,EAAA+mF,EAAA,GACAm5E,EAAAzxC,EAAAA,EAAAxtE,EAAA1gD,EAAAwmF,EAAAA,EAAA/mF,EAAA,IAAA0S,EACAu3K,EAAAv7D,EAAAA,EAAAztE,EAAA1gD,EAAAwmF,EAAA/mF,EAAA,IAAA0S,EACA2uL,GAAAnhC,EAAAzxC,GAAA,EAAAC,GAAA,EAAAu7D,GAAA,GAAAjlE,QAAAi8E,EAEAI,IAAA5yE,EAAAC,GAAA,GAAA1J,QAAAi8E,GAOA,IAHAjhM,GAAA,EACA0uH,EAAAztE,EAAA1gD,EAAAwmF,IAAAr0E,EACA2uL,GAAA3yE,GAAA,GAAA1J,QAAAi8E,KACAjhM,EAAA+mF,EAAA,GACAkjG,EAAAv7D,EAAAA,EAAAztE,EAAA1gD,EAAAwmF,EAAA/mF,EAAA,IAAA0S,EACA2uL,GAAA3yE,GAAA,EAAAu7D,GAAA,GAAAjlE,QAAAi8E,EAEAI,IAAA3yE,GAAA,GAAA1J,QAAAi8E,GA4CA,QAAApnL,GAAA28H,GACA,MAAA,GAAAA,EAAA,GAAAA,EAAA,IAAAzvD,EAAA,GAAA,EAGA,QAAAu6G,GAAA5hD,EAAAz+F,EAAAvuC,GACAgtI,EAAA16B,QAAA,SAAAwxB,GACA,GAIAy0C,GAJAjrL,EAAAw2I,EAAA,GACAj2I,EAAAi2I,EAAA,GACAnoI,EAAA,EAAArO,EACA0oB,EAAA,EAAAnoB,EAEA2qL,EAAAjqI,EAAAv4B,EAAAq+D,EAAA14E,EACArO,GAAA,GAAAA,EAAA+mF,GAAA14E,IAAArO,IACAirL,EAAAhqI,EAAAv4B,EAAAq+D,EAAA14E,EAAA,GACAmoI,EAAA,GAAAx2I,GAAA0S,EAAAu4K,IAAAC,EAAAD,GAAA,IAEA1qL,EAAA,GAAAA,EAAA0mF,GAAAv+D,IAAAnoB,IACA0qL,EAAAhqI,GAAAv4B,EAAA,GAAAq+D,EAAA14E,GACAmoI,EAAA,GAAAj2I,GAAAmS,EAAAu4K,IAAAC,EAAAD,GAAA,MAvJA,GAAAlkG,GAAA,EACAE,EAAA,EACAw5G,EAAA1nB,EACA+nB,EAAAQ,CA0KA,OAjBAd,GAAAE,QAAAA,EAEAF,EAAA7jJ,KAAA,SAAA56C,GACA,IAAA4E,UAAAtG,OAAA,OAAA0mF,EAAAE,EACA,IAAAs6G,GAAA73L,KAAAI,KAAA/H,EAAA,IAAAy/L,EAAA93L,KAAAI,KAAA/H,EAAA,GACA,MAAAw/L,EAAA,GAAAC,EAAA,GAAA,KAAA,IAAAviM,OAAA,eACA,OAAA8nF,GAAAw6G,EAAAt6G,EAAAu6G,EAAAhB,GAGAA,EAAA9mB,WAAA,SAAA33K,GACA,MAAA4E,WAAAtG,QAAAogM,EAAA,kBAAA1+L,GAAAA,EAAA+9L,GAAAxzL,MAAAC,QAAAxK,GAAA0/L,GAAAthM,KAAA4B,GAAAA,GAAAy+L,GAAAC,GAGAD,EAAAM,OAAA,SAAA/+L,GACA,MAAA4E,WAAAtG,QAAAygM,EAAA/+L,EAAAu/L,EAAAf,GAAAC,GAAAM,IAAAQ,GAGAd,EAMA,QAAAkB,IAAA7kL,EAAAvF,EAAA9X,GAIA,IAAA,GAHAH,GAAAwd,EAAA7T,MACA5J,EAAAyd,EAAA3R,OACAtK,EAAA,GAAApB,GAAA,GACAmB,EAAA,EAAAA,EAAAvB,IAAAuB,EACA,IAAA,GAAArB,GAAA,EAAAsoJ,EAAA,EAAAtoJ,EAAAD,EAAAG,IAAAF,EACAA,EAAAD,IACAuoJ,GAAA/qI,EAAAhN,KAAAvQ,EAAAqB,EAAAtB,IAEAC,GAAAE,IACAF,GAAAsB,IACAgnJ,GAAA/qI,EAAAhN,KAAAvQ,EAAAsB,EAAAD,EAAAtB,IAEAiY,EAAAzH,KAAAvQ,EAAAE,EAAAmB,EAAAtB,GAAAuoJ,EAAAl+I,KAAAyuD,IAAA74D,EAAA,EAAAD,EAAA,EAAAuB,EAAAtB,EAAAsB,IASA,QAAA+gM,IAAA9kL,EAAAvF,EAAA9X,GAIA,IAAA,GAHAH,GAAAwd,EAAA7T,MACA5J,EAAAyd,EAAA3R,OACAtK,EAAA,GAAApB,GAAA,GACAF,EAAA,EAAAA,EAAAD,IAAAC,EACA,IAAA,GAAAqB,GAAA,EAAAinJ,EAAA,EAAAjnJ,EAAAvB,EAAAI,IAAAmB,EACAA,EAAAvB,IACAwoJ,GAAA/qI,EAAAhN,KAAAvQ,EAAAqB,EAAAtB,IAEAsB,GAAAnB,IACAmB,GAAAC,IACAgnJ,GAAA/qI,EAAAhN,KAAAvQ,GAAAqB,EAAAC,GAAAvB,IAEAiY,EAAAzH,KAAAvQ,GAAAqB,EAAAnB,GAAAH,GAAAuoJ,EAAAl+I,KAAAyuD,IAAAx3D,EAAA,EAAAvB,EAAA,EAAAwB,EAAAD,EAAAC,IAMA,QAAAghM,IAAAz8L,GACA,MAAAA,GAAA,GAGA,QAAA08L,IAAA18L,GACA,MAAAA,GAAA,GAGA,QAAA28L,MACA,MAAA,GAGA,QAAAC,MAaA,QAAAA,GAAAlyL,GACA,GAAA2nK,GAAA,GAAAwqB,cAAA3iM,EAAAD,GACAq4K,EAAA,GAAAuqB,cAAA3iM,EAAAD,EAEAyQ,GAAAm1G,QAAA,SAAA7/G,EAAA7F,EAAAuQ,GACA,GAAAsqK,IAAAn6K,EAAAmF,EAAA7F,EAAAuQ,GAAAtQ,GAAAgU,EACA0sL,GAAA1/L,EAAA4E,EAAA7F,EAAAuQ,GAAAtQ,GAAAgU,EACA0uL,GAAAC,EAAA/8L,EAAA7F,EAAAuQ,EACAsqK,IAAA,GAAAA,EAAA96K,GAAA4gM,GAAA,GAAAA,EAAA7gM,IACAo4K,EAAA2C,EAAA8lB,EAAA5gM,IAAA4iM,KAKAP,IAAA14L,MAAA3J,EAAA6L,OAAA9L,EAAAyQ,KAAA2nK,IAAAxuK,MAAA3J,EAAA6L,OAAA9L,EAAAyQ,KAAA4nK,GAAAj4K,GAAA+T,GACAouL,IAAA34L,MAAA3J,EAAA6L,OAAA9L,EAAAyQ,KAAA4nK,IAAAzuK,MAAA3J,EAAA6L,OAAA9L,EAAAyQ,KAAA2nK,GAAAh4K,GAAA+T,GACAmuL,IAAA14L,MAAA3J,EAAA6L,OAAA9L,EAAAyQ,KAAA2nK,IAAAxuK,MAAA3J,EAAA6L,OAAA9L,EAAAyQ,KAAA4nK,GAAAj4K,GAAA+T,GACAouL,IAAA34L,MAAA3J,EAAA6L,OAAA9L,EAAAyQ,KAAA4nK,IAAAzuK,MAAA3J,EAAA6L,OAAA9L,EAAAyQ,KAAA2nK,GAAAh4K,GAAA+T,GACAmuL,IAAA14L,MAAA3J,EAAA6L,OAAA9L,EAAAyQ,KAAA2nK,IAAAxuK,MAAA3J,EAAA6L,OAAA9L,EAAAyQ,KAAA4nK,GAAAj4K,GAAA+T,GACAouL,IAAA34L,MAAA3J,EAAA6L,OAAA9L,EAAAyQ,KAAA4nK,IAAAzuK,MAAA3J,EAAA6L,OAAA9L,EAAAyQ,KAAA2nK,GAAAh4K,GAAA+T,EAEA,IAAA8lK,GAAAonB,EAAAjpB,EAGA,KAAAlrK,MAAAC,QAAA8sK,GAAA,CACA,GAAA1rK,GAAAhE,EAAA6tK,EACA6B,GAAAT,EAAA,EAAAjrK,EAAA0rK,GACAA,EAAAhB,EAAA,EAAA3uK,KAAA8sB,MAAA7oB,EAAA0rK,GAAAA,EAAAA,GACAA,EAAAnqK,QAGA,MAAAsxL,MACA9mB,WAAAL,GACA18H,MAAAt9C,EAAAD,IACAo4K,GACArvK,IAAAi5C,GAGA,QAAAA,GAAA+gJ,GAGA,MAFAA,GAAAzvL,OAAAhJ,KAAA+/J,IAAA,GAAA,EAAAl2J,GACA4uL,EAAAnB,YAAAh8E,QAAAo9E,GACAD,EAGA,QAAAC,GAAApB,GACAA,EAAAh8E,QAAAq9E,GAGA,QAAAA,GAAArB,GACAA,EAAAh8E,QAAAs9E,GAIA,QAAAA,GAAAtB,GACAA,EAAA,GAAAA,EAAA,GAAAt3L,KAAA+/J,IAAA,EAAAl2J,GAAAhU,EACAyhM,EAAA,GAAAA,EAAA,GAAAt3L,KAAA+/J,IAAA,EAAAl2J,GAAAhU,EAGA,QAAAo/B,KAIA,MAHAp/B,GAAA,EAAAC,EACAH,EAAA0nF,EAAA,EAAAxnF,GAAAgU,EACAnU,EAAA6nF,EAAA,EAAA1nF,GAAAgU,EACAwuL,EA1EA,GAAA/hM,GAAA4hM,GACArhM,EAAAshM,GACAK,EAAAJ,GACA/6G,EAAA,IACAE,EAAA,IACAznF,EAAA,GACA+T,EAAA,EACAhU,EAAA,EAAAC,EACAH,EAAA0nF,EAAA,EAAAxnF,GAAAgU,EACAnU,EAAA6nF,EAAA,EAAA1nF,GAAAgU,EACAktL,EAAAX,GAAA,GAsGA,OAnCAiC,GAAA/hM,EAAA,SAAA+B,GACA,MAAA4E,WAAAtG,QAAAL,EAAA,kBAAA+B,GAAAA,EAAA+9L,IAAA/9L,GAAAggM,GAAA/hM,GAGA+hM,EAAAxhM,EAAA,SAAAwB,GACA,MAAA4E,WAAAtG,QAAAE,EAAA,kBAAAwB,GAAAA,EAAA+9L,IAAA/9L,GAAAggM,GAAAxhM,GAGAwhM,EAAAG,OAAA,SAAAngM,GACA,MAAA4E,WAAAtG,QAAA6hM,EAAA,kBAAAngM,GAAAA,EAAA+9L,IAAA/9L,GAAAggM,GAAAG,GAGAH,EAAAplJ,KAAA,SAAA56C,GACA,IAAA4E,UAAAtG,OAAA,OAAA0mF,EAAAE,EACA,IAAAs6G,GAAA73L,KAAAI,KAAA/H,EAAA,IAAAy/L,EAAA93L,KAAAI,KAAA/H,EAAA,GACA,MAAAw/L,GAAA,GAAAA,GAAA,GAAA,KAAA,IAAAtiM,OAAA,eACA,OAAA8nF,GAAAw6G,EAAAt6G,EAAAu6G,EAAA7iK,KAGAojK,EAAAQ,SAAA,SAAAxgM,GACA,IAAA4E,UAAAtG,OAAA,MAAA,IAAAkT,CACA,OAAAxR,GAAAA,IAAA,GAAA,KAAA,IAAA9C,OAAA,oBACA,OAAAsU,GAAA7J,KAAA8sB,MAAA9sB,KAAAuwB,IAAAl4B,GAAA2H,KAAAsvK,KAAAr6I,KAGAojK,EAAAroB,WAAA,SAAA33K,GACA,MAAA4E,WAAAtG,QAAAogM,EAAA,kBAAA1+L,GAAAA,EAAA+9L,GAAAxzL,MAAAC,QAAAxK,GAAA0/L,GAAAthM,KAAA4B,GAAAA,GAAAggM,GAAAtB,GAGAsB,EAAAhnB,UAAA,SAAAh5K,GACA,IAAA4E,UAAAtG,OAAA,MAAAqJ,MAAA87I,KAAAhmJ,GAAAA,EAAA,GACA,OAAAuC,GAAAA,IAAA,GAAA,KAAA,IAAA9C,OAAA,oBACA,OAAAO,GAAAkK,KAAAwa,OAAAxa,KAAA87I,KAAA,EAAAzjJ,EAAAA,EAAA,GAAA,GAAA,GAAA48B,KAGAojK,EASA,QAAAS,IAAAC,GACA,MAAA,IAAA9kD,UAAA,IAAA,WAAA8kD,EAAAt6L,IAAA,SAAA2T,EAAAxc,GACA,MAAAwD,MAAAyvB,UAAAzW,GAAA,OAAAxc,EAAA,MACA6O,KAAA,KAAA,KAGA,QAAAu0L,IAAAD,EAAAz9L,GACA,GAAAonL,GAAAoW,GAAAC,EACA,OAAA,UAAAnzE,EAAAhwH,GACA,MAAA0F,GAAAonL,EAAA98D,GAAAhwH,EAAAmjM,IAKA,QAAAE,IAAAzsE,GACA,GAAA0sE,GAAA9yL,OAAAipD,OAAA,MACA0pI,IAUA,OARAvsE,GAAAlR,QAAA,SAAAsK,GACA,IAAA,GAAA9nB,KAAA8nB,GACA9nB,IAAAo7F,IACAH,EAAA18L,KAAA68L,EAAAp7F,GAAAA,KAKAi7F,EAGA,QAAA5vD,IAAAngI,EAAA1J,GACA,GAAAzF,GAAAmP,EAAA,GAAArS,EAAAkD,EAAAlD,MACA,OAAAA,GAAA2I,EAAA,GAAAsD,OAAAtD,EAAA3I,EAAA,GAAA8N,KAAA,GAAA5K,EAAAA,EAGA,QAAAs/L,IAAAC,GACA,MAAAA,GAAA,EAAA,IAAAjwD,IAAAiwD,EAAA,GACAA,EAAA,KAAA,IAAAjwD,GAAAiwD,EAAA,GACAjwD,GAAAiwD,EAAA,GAGA,QAAAC,IAAA5nK,GACA,GAAA6nK,GAAA7nK,EAAA8nK,cACAC,EAAA/nK,EAAAgoK,gBACAC,EAAAjoK,EAAAkoK,gBACAC,EAAAnoK,EAAAooK,oBACA,OAAA9xK,OAAA0J,GAAA,eACA0nK,GAAA1nK,EAAAqoK,iBAAA,GAAA,IAAA3wD,GAAA13G,EAAAsoK,cAAA,EAAA,GAAA,IAAA5wD,GAAA13G,EAAAuoK,aAAA,IACAJ,EAAA,IAAAzwD,GAAAmwD,EAAA,GAAA,IAAAnwD,GAAAqwD,EAAA,GAAA,IAAArwD,GAAAuwD,EAAA,GAAA,IAAAvwD,GAAAywD,EAAA,GAAA,IACAF,EAAA,IAAAvwD,GAAAmwD,EAAA,GAAA,IAAAnwD,GAAAqwD,EAAA,GAAA,IAAArwD,GAAAuwD,EAAA,GAAA,IACAF,GAAAF,EAAA,IAAAnwD,GAAAmwD,EAAA,GAAA,IAAAnwD,GAAAqwD,EAAA,GAAA,IACA,IAGA,QAAAS,IAAAnhE,GAIA,QAAAz/H,GAAArD,EAAAsF,GACA,GAAA4+L,GAAAnB,EAAAvsE,EAAA2tE,EAAAnkM,EAAA,SAAA4vH,EAAAhwH,GACA,GAAAskM,EAAA,MAAAA,GAAAt0E,EAAAhwH,EAAA,EACAmjM,GAAAnzE,EAAAs0E,EAAA5+L,EAAA09L,GAAApzE,EAAAtqH,GAAAw9L,GAAAlzE,IAGA,OADA4G,GAAAusE,QAAAA,MACAvsE,EAGA,QAAA2tE,GAAAnkM,EAAAsF,GAaA,QAAAy6C,KACA,GAAAqkJ,EAAA,MAAAC,GACA,IAAAz5H,EAAA,MAAAA,IAAA,EAAA05H,EAGA,IAAA1kM,GAAAY,EAAAS,EAAAW,CACA,IAAA5B,EAAAiV,WAAAhU,KAAAsjM,GAAA,CACA,KAAA3iM,IAAAd,GAAAd,EAAAiV,WAAArT,KAAA2iM,IAAAvkM,EAAAiV,aAAArT,KAAA2iM,KAIA,OAHA3kM,EAAAgC,IAAAd,EAAAsjM,GAAA,GACA5jM,EAAAR,EAAAiV,WAAArT,QAAA4iM,GAAA55H,GAAA,EACApqE,IAAAikM,KAAA75H,GAAA,EAAA5qE,EAAAiV,WAAArT,KAAA4iM,MAAA5iM,GACA5B,EAAAoC,MAAAnB,EAAA,EAAArB,EAAA,GAAA+C,QAAA,MAAA,KAIA,KAAAf,EAAAd,GAAA,CACA,IAAAN,EAAAR,EAAAiV,WAAArV,EAAAgC,QAAA4iM,GAAA55H,GAAA,MACA,IAAApqE,IAAAikM,GAAA75H,GAAA,EAAA5qE,EAAAiV,WAAArT,KAAA4iM,MAAA5iM,MACA,IAAApB,IAAAkkM,EAAA,QACA,OAAA1kM,GAAAoC,MAAAnB,EAAArB,GAIA,MAAAwkM,IAAA,EAAApkM,EAAAoC,MAAAnB,EAAAH,GAnCA,GAIA3B,GAJAq3H,KACA11H,EAAAd,EAAAW,OACAiB,EAAA,EACAjC,EAAA,EAEAykM,EAAAtjM,GAAA,EACA8pE,GAAA,CAgCA,KA7BA5qE,EAAAiV,WAAAnU,EAAA,KAAA0jM,MAAA1jM,EACAd,EAAAiV,WAAAnU,EAAA,KAAA2jM,MAAA3jM,GA4BA3B,EAAA4gD,OAAAskJ,IAAA,CAEA,IADA,GAAAz0E,MACAzwH,IAAAmlM,IAAAnlM,IAAAklM,IAAAz0E,EAAAvpH,KAAAlH,GAAAA,EAAA4gD,GACAz6C,IAAA,OAAAsqH,EAAAtqH,EAAAsqH,EAAAjwH,OACA62H,EAAAnwH,KAAAupH,GAGA,MAAA4G,GAGA,QAAAmuE,GAAAnuE,EAAAusE,GACA,MAAAvsE,GAAA/tH,IAAA,SAAAmnH,GACA,MAAAmzE,GAAAt6L,IAAA,SAAAq/F,GACA,MAAA88F,GAAAh1E,EAAA9nB,MACAr5F,KAAAq0H,KAIA,QAAA5yF,GAAAsmF,EAAAusE,GAEA,MADA,OAAAA,IAAAA,EAAAE,GAAAzsE,KACAusE,EAAAt6L,IAAAm8L,GAAAn2L,KAAAq0H,IAAAj3H,OAAA84L,EAAAnuE,EAAAusE,IAAAt0L,KAAA,MAGA,QAAAo2L,GAAAruE,EAAAusE,GAEA,MADA,OAAAA,IAAAA,EAAAE,GAAAzsE,IACAmuE,EAAAnuE,EAAAusE,GAAAt0L,KAAA,MAGA,QAAAq2L,GAAAtuE,GACA,MAAAA,GAAA/tH,IAAAs8L,GAAAt2L,KAAA,MAGA,QAAAs2L,GAAAn1E,GACA,MAAAA,GAAAnnH,IAAAm8L,GAAAn2L,KAAAq0H,GAGA,QAAA8hE,GAAA5xL,GACA,MAAA,OAAAA,EAAA,GACAA,YAAA3H,MAAAg4L,GAAArwL,GACAgyL,EAAA7hM,KAAA6P,GAAA,IAAA,IAAAA,EAAArQ,QAAA,KAAA,MAAA,IACAqQ,EA3FA,GAAAgyL,GAAA,GAAA5wL,QAAA,KAAA0uH,EAAA,SACA4hE,EAAA5hE,EAAA7tH,WAAA,EA6FA,QACA5R,MAAAA,EACA8gM,UAAAA,EACAj0J,OAAAA,EACA20J,WAAAA,EACAC,WAAAA,GAoBA,QAAAG,IAAAvY,GACA,IAAA,GAAA5qK,KAAA4qK,GAAA,CACA,GAAAprD,GAAAtuH,EAAA05K,EAAA5qK,GAAApQ,MACA,IAAAsB,EACA,GAAA,SAAAA,EAAAA,GAAA,MACA,IAAA,UAAAA,EAAAA,GAAA,MACA,IAAA,QAAAA,EAAAA,EAAA07E,QACA,IAAA38D,MAAAuvG,GAAAtuH,GACA,CAAA,IAAA,8FAAA7P,KAAA6P,GACA,QADAA,GAAA,GAAA3H,MAAA2H,OADAA,GAAAsuH,MAJAtuH,GAAA,IAOA05K,GAAA5qK,GAAA9O,EAEA,MAAA05K,GAGA,QAAAwY,IAAAp1K,GACA,IAAAA,EAAAuhE,GAAA,KAAA,IAAA9xF,OAAAuwB,EAAA7C,OAAA,IAAA6C,EAAA5C,WACA,OAAA4C,GAAA08H,OAGA,QAAAA,IAAA/zI,EAAA/N,GACA,MAAAy6L,OAAA1sL,EAAA/N,GAAAxI,KAAAgjM,IAGA,QAAAE,IAAAt1K,GACA,IAAAA,EAAAuhE,GAAA,KAAA,IAAA9xF,OAAAuwB,EAAA7C,OAAA,IAAA6C,EAAA5C,WACA,OAAA4C,GAAA08I,cAGA,QAAAC,IAAAh0J,EAAA/N,GACA,MAAAy6L,OAAA1sL,EAAA/N,GAAAxI,KAAAkjM,IAGA,QAAAx1K,IAAAE,GACA,IAAAA,EAAAuhE,GAAA,KAAA,IAAA9xF,OAAAuwB,EAAA7C,OAAA,IAAA6C,EAAA5C,WACA,OAAA4C,GAAA9vB,OAGA,QAAAA,IAAAyY,EAAA/N,GACA,MAAAy6L,OAAA1sL,EAAA/N,GAAAxI,KAAA0tB,IAGA,QAAAy1K,IAAAhiM,GACA,MAAA,UAAAoV,EAAA/N,EAAAklH,GAEA,MADA,KAAA3oH,UAAAtG,QAAA,kBAAA+J,KAAAklH,EAAAllH,EAAAA,MAAAkpB,IACA5zB,GAAAyY,EAAA/N,GAAAxI,KAAA,SAAA4tB,GACA,MAAAzsB,GAAAysB,EAAA8/F,MAKA,QAAA01E,IAAAxiE,EAAArqH,EAAA/N,EAAAklH,GACA,IAAA3oH,UAAAtG,QAAA,kBAAA+J,KAAAklH,EAAAllH,EAAAA,MAAAkpB,GACA,IAAAsc,GAAA+zJ,GAAAnhE,EACA,OAAA9iI,IAAAyY,EAAA/N,GAAAxI,KAAA,SAAA4tB,GACA,MAAAogB,GAAA7sC,MAAAysB,EAAA8/F,KAOA,QAAAz2G,IAAAV,EAAA/N,GACA,MAAA,IAAAotL,SAAA,SAAAn8K,EAAAC,GACA,GAAAzC,GAAA,GAAAosL,MACA,KAAA,GAAAzjL,KAAApX,GAAAyO,EAAA2I,GAAApX,EAAAoX,EACA3I,GAAAoW,QAAA3T,EACAzC,EAAAmW,OAAA,WAAA3T,EAAAxC,IACAA,EAAAxQ,IAAA8P,IAIA,QAAA+sL,IAAA11K,GACA,IAAAA,EAAAuhE,GAAA,KAAA,IAAA9xF,OAAAuwB,EAAA7C,OAAA,IAAA6C,EAAA5C,WACA,OAAA4C,GAAAxD,OAGA,QAAAA,IAAA7T,EAAA/N,GACA,MAAAy6L,OAAA1sL,EAAA/N,GAAAxI,KAAAsjM,IAGA,QAAAr9D,IAAAzhI,GACA,MAAA,UAAA+R,EAAA/N,GACA,MAAA1K,IAAAyY,EAAA/N,GAAAxI,KAAA,SAAAujM,GACA,OAAA,GAAAj7K,YAAAC,gBAAAg7K,EAAA/+L,MAWA,QAAAg/L,IAAAplM,EAAAO,GAMA,QAAAsjD,KACA,GAAAvkD,GAEAm9C,EADAp9C,EAAA8gL,EAAA9/K,OAEAglM,EAAA,EACAC,EAAA,CAEA,KAAAhmM,EAAA,EAAAA,EAAAD,IAAAC,EACAm9C,EAAA0jI,EAAA7gL,GAAA+lM,GAAA5oJ,EAAAz8C,EAAAslM,GAAA7oJ,EAAAl8C,CAGA,KAAA8kM,EAAAA,EAAAhmM,EAAAW,EAAAslM,EAAAA,EAAAjmM,EAAAkB,EAAAjB,EAAA,EAAAA,EAAAD,IAAAC,EACAm9C,EAAA0jI,EAAA7gL,GAAAm9C,EAAAz8C,GAAAqlM,EAAA5oJ,EAAAl8C,GAAA+kM,EAjBA,GAAAnlB,EAiCA,OA/BA,OAAAngL,IAAAA,EAAA,GACA,MAAAO,IAAAA,EAAA,GAkBAsjD,EAAAd,WAAA,SAAAhhD,GACAo+K,EAAAp+K,GAGA8hD,EAAA7jD,EAAA,SAAA+B,GACA,MAAA4E,WAAAtG,QAAAL,GAAA+B,EAAA8hD,GAAA7jD,GAGA6jD,EAAAtjD,EAAA,SAAAwB,GACA,MAAA4E,WAAAtG,QAAAE,GAAAwB,EAAA8hD,GAAAtjD,GAGAsjD,EAGA,QAAA0hJ,IAAAvlM,GACA,MAAA,YACA,MAAAA,IAIA,QAAAwlM,MACA,MAAA,OAAA97L,KAAAsH,SAAA,IAGA,QAAAy0L,IAAAtgM,GACA,GAAAnF,IAAAb,KAAAumM,GAAAvlM,KAAA,KAAAgF,GACA5E,GAAApB,KAAAwmM,GAAAxlM,KAAA,KAAAgF,EACA,OAAA2B,IAAA3H,KAAAymM,MAAA5lM,EAAAO,GAAAP,EAAAO,EAAA4E,GAGA,QAAA2B,IAAA++L,EAAA7lM,EAAAO,EAAA4E,GACA,GAAAssB,MAAAzxB,IAAAyxB,MAAAlxB,GAAA,MAAAslM,EAEA,IAAA5tL,GAOA6tL,EACAC,EACAC,EACAC,EACAliL,EACAye,EACAljC,EACAqB,EAbA87C,EAAAopJ,EAAAK,MACAx8F,GAAA75F,KAAA1K,GACAi0K,EAAAysB,EAAAnI,IACAyI,EAAAN,EAAAlI,IACAr8B,EAAAukC,EAAAjI,IACAr8B,EAAAskC,EAAAhI,GAWA,KAAAphJ,EAAA,MAAAopJ,GAAAK,MAAAx8F,EAAAm8F,CAGA,MAAAppJ,EAAAp8C,QAGA,IAFA0jB,EAAA/jB,IAAA8lM,GAAA1sB,EAAA9X,GAAA,IAAA8X,EAAA0sB,EAAAxkC,EAAAwkC,GACAtjK,EAAAjiC,IAAAwlM,GAAAI,EAAA5kC,GAAA,IAAA4kC,EAAAJ,EAAAxkC,EAAAwkC,EACA9tL,EAAAwkC,IAAAA,EAAAA,EAAAn9C,EAAAkjC,GAAA,EAAAze,IAAA,MAAA9L,GAAA3Y,GAAAoqG,EAAAm8F,CAMA,IAFAG,GAAAH,EAAAH,GAAAvlM,KAAA,KAAAs8C,EAAA5sC,MACAo2L,GAAAJ,EAAAF,GAAAxlM,KAAA,KAAAs8C,EAAA5sC,MACA7P,IAAAgmM,GAAAzlM,IAAA0lM,EAAA,MAAAv8F,GAAA92F,KAAA6pC,EAAAxkC,EAAAA,EAAA3Y,GAAAoqG,EAAAm8F,EAAAK,MAAAx8F,EAAAm8F,CAGA,IACA5tL,EAAAA,EAAAA,EAAA3Y,GAAA,GAAAgN,OAAA,GAAAu5L,EAAAK,MAAA,GAAA55L,OAAA,IACAyX,EAAA/jB,IAAA8lM,GAAA1sB,EAAA9X,GAAA,IAAA8X,EAAA0sB,EAAAxkC,EAAAwkC,GACAtjK,EAAAjiC,IAAAwlM,GAAAI,EAAA5kC,GAAA,IAAA4kC,EAAAJ,EAAAxkC,EAAAwkC,SACAzmM,EAAAkjC,GAAA,EAAAze,KAAApjB,GAAAslM,GAAAF,IAAA,EAAAC,GAAAF,GACA,OAAA7tL,GAAAtX,GAAA87C,EAAAxkC,EAAA3Y,GAAAoqG,EAAAm8F,EAGA,QAAAO,IAAAv2L,GACA,GAAA1K,GAAA7F,EACAU,EACAO,EAFAlB,EAAAwQ,EAAAxP,OAGA64K,EAAA,GAAA5sK,OAAAjN,GACAgnM,EAAA,GAAA/5L,OAAAjN,GACA+5K,EAAAruI,EAAAA,EACAo7J,EAAAp7J,EAAAA,EACAu2H,GAAAv2H,EAAAA,EACAw2H,GAAAx2H,EAAAA,CAGA,KAAAzrC,EAAA,EAAAA,EAAAD,IAAAC,EACAmyB,MAAAzxB,GAAAb,KAAAumM,GAAAvlM,KAAA,KAAAgF,EAAA0K,EAAAvQ,MAAAmyB,MAAAlxB,GAAApB,KAAAwmM,GAAAxlM,KAAA,KAAAgF,MACA+zK,EAAA55K,GAAAU,EACAqmM,EAAA/mM,GAAAiB,EACAP,EAAAo5K,IAAAA,EAAAp5K,GACAA,EAAAshK,IAAAA,EAAAthK,GACAO,EAAA4lM,IAAAA,EAAA5lM,GACAA,EAAAghK,IAAAA,EAAAhhK,GAIA,IAAA64K,EAAA9X,GAAA6kC,EAAA5kC,EAAA,MAAApiK,KAMA,KAHAA,KAAAymM,MAAAxsB,EAAA+sB,GAAAP,MAAAtkC,EAAAC,GAGAjiK,EAAA,EAAAA,EAAAD,IAAAC,EACAwH,GAAA3H,KAAA+5K,EAAA55K,GAAA+mM,EAAA/mM,GAAAuQ,EAAAvQ,GAGA,OAAAH,MAGA,QAAAmnM,IAAAtmM,EAAAO,GACA,GAAAkxB,MAAAzxB,GAAAA,IAAAyxB,MAAAlxB,GAAAA,GAAA,MAAApB,KAEA,IAAAi6K,GAAAj6K,KAAAu+L,IACAyI,EAAAhnM,KAAAw+L,IACAr8B,EAAAniK,KAAAy+L,IACAr8B,EAAApiK,KAAA0+L,GAKA,IAAApsK,MAAA2nJ,GACA9X,GAAA8X,EAAA1vK,KAAA8sB,MAAAx2B,IAAA,EACAuhK,GAAA4kC,EAAAz8L,KAAA8sB,MAAAj2B,IAAA,MAIA,CAMA,IALA,GAEA0X,GACA3Y,EAHA0U,EAAAstJ,EAAA8X,EACA38H,EAAAt9C,KAAA+mM,MAIA9sB,EAAAp5K,GAAAA,GAAAshK,GAAA6kC,EAAA5lM,GAAAA,GAAAghK,GAGA,OAFAjiK,GAAAiB,EAAA4lM,IAAA,EAAAnmM,EAAAo5K,EACAnhK,EAAA,GAAA3L,OAAA,GAAA2L,EAAA3Y,GAAAm9C,EAAAA,EAAAxkC,EAAAjE,GAAA,EACA1U,GACA,IAAA,GAAAgiK,EAAA8X,EAAAplK,EAAAutJ,EAAA4kC,EAAAnyL,CAAA,MACA,KAAA,GAAAolK,EAAA9X,EAAAttJ,EAAAutJ,EAAA4kC,EAAAnyL,CAAA,MACA,KAAA,GAAAstJ,EAAA8X,EAAAplK,EAAAmyL,EAAA5kC,EAAAvtJ,CAAA,MACA,KAAA,GAAAolK,EAAA9X,EAAAttJ,EAAAmyL,EAAA5kC,EAAAvtJ,EAIA7U,KAAA+mM,OAAA/mM,KAAA+mM,MAAA7lM,SAAAlB,KAAA+mM,MAAAzpJ,GAOA,MAJAt9C,MAAAu+L,IAAAtkB,EACAj6K,KAAAw+L,IAAAwI,EACAhnM,KAAAy+L,IAAAt8B,EACAniK,KAAA0+L,IAAAt8B,EACApiK,KAGA,QAAAonM,MACA,GAAA12L,KAIA,OAHA1Q,MAAAqnM,MAAA,SAAA/pJ,GACA,IAAAA,EAAAp8C,OAAA,GAAAwP,EAAA9J,KAAA02C,EAAA5sC,YAAA4sC,EAAAA,EAAA7pC,QAEA/C,EAGA,QAAA42L,IAAA1kM,GACA,MAAA4E,WAAAtG,OACAlB,KAAAymM,OAAA7jM,EAAA,GAAA,IAAAA,EAAA,GAAA,IAAA6jM,OAAA7jM,EAAA,GAAA,IAAAA,EAAA,GAAA,IACA0vB,MAAAtyB,KAAAu+L,SAAApqK,KAAAn0B,KAAAu+L,IAAAv+L,KAAAw+L,MAAAx+L,KAAAy+L,IAAAz+L,KAAA0+L,MAGA,QAAA6I,IAAAjqJ,EAAA28H,EAAA+sB,EAAA7kC,EAAAC,GACApiK,KAAAs9C,KAAAA,EACAt9C,KAAAi6K,GAAAA,EACAj6K,KAAAgnM,GAAAA,EACAhnM,KAAAmiK,GAAAA,EACAniK,KAAAoiK,GAAAA,EAGA,QAAAolC,IAAA3mM,EAAAO,EAAA4/J,GACA,GAAAtwJ,GAGAyxJ,EACAC,EACAC,EACAC,EAKA7tJ,EACAtU,EAXA85K,EAAAj6K,KAAAu+L,IACAyI,EAAAhnM,KAAAw+L,IAKAiJ,EAAAznM,KAAAy+L,IACAiJ,EAAA1nM,KAAA0+L,IACAiJ,KACArqJ,EAAAt9C,KAAA+mM,KAYA,KARAzpJ,GAAAqqJ,EAAA/gM,KAAA,GAAA2gM,IAAAjqJ,EAAA28H,EAAA+sB,EAAAS,EAAAC,IACA,MAAA1mC,EAAAA,EAAAp1H,EAAAA,GAEAquI,EAAAp5K,EAAAmgK,EAAAgmC,EAAA5lM,EAAA4/J,EACAymC,EAAA5mM,EAAAmgK,EAAA0mC,EAAAtmM,EAAA4/J,EACAA,GAAAA,GAGAvsJ,EAAAkzL,EAAAnzL,OAGA,OAAA8oC,EAAA7oC,EAAA6oC,QACA6kH,EAAA1tJ,EAAAwlK,IAAAwtB,IACArlC,EAAA3tJ,EAAAuyL,IAAAU,IACArlC,EAAA5tJ,EAAA0tJ,IAAA8X,IACA3X,EAAA7tJ,EAAA2tJ,IAAA4kC,GAGA,GAAA1pJ,EAAAp8C,OAAA,CACA,GAAAylM,IAAAxkC,EAAAE,GAAA,EACAukC,GAAAxkC,EAAAE,GAAA,CAEAqlC,GAAA/gM,KACA,GAAA2gM,IAAAjqJ,EAAA,GAAAqpJ,EAAAC,EAAAvkC,EAAAC,GACA,GAAAilC,IAAAjqJ,EAAA,GAAA6kH,EAAAykC,EAAAD,EAAArkC,GACA,GAAAilC,IAAAjqJ,EAAA,GAAAqpJ,EAAAvkC,EAAAC,EAAAukC,GACA,GAAAW,IAAAjqJ,EAAA,GAAA6kH,EAAAC,EAAAukC,EAAAC,KAIAzmM,GAAAiB,GAAAwlM,IAAA,EAAA/lM,GAAA8lM,KACAlyL,EAAAkzL,EAAAA,EAAAzmM,OAAA,GACAymM,EAAAA,EAAAzmM,OAAA,GAAAymM,EAAAA,EAAAzmM,OAAA,EAAAf,GACAwnM,EAAAA,EAAAzmM,OAAA,EAAAf,GAAAsU,OAKA,CACA,GAAAmzE,GAAA/mF,GAAAb,KAAAumM,GAAAvlM,KAAA,KAAAs8C,EAAA5sC,MACAo3E,EAAA1mF,GAAApB,KAAAwmM,GAAAxlM,KAAA,KAAAs8C,EAAA5sC,MACAqiC,EAAA60C,EAAAA,EAAAE,EAAAA,CACA,IAAA/0C,EAAAiuH,EAAA,CACA,GAAAh7J,GAAAuE,KAAA87I,KAAA2a,EAAAjuH,EACAknI,GAAAp5K,EAAAmF,EAAAghM,EAAA5lM,EAAA4E,EACAyhM,EAAA5mM,EAAAmF,EAAA0hM,EAAAtmM,EAAA4E,EACA0K,EAAA4sC,EAAA5sC,MAKA,MAAAA,GAGA,QAAAk3L,IAAA5hM,GACA,GAAAssB,MAAAzxB,GAAAb,KAAAumM,GAAAvlM,KAAA,KAAAgF,KAAAssB,MAAAlxB,GAAApB,KAAAwmM,GAAAxlM,KAAA,KAAAgF,IAAA,MAAAhG,KAEA,IAAA8Y,GAEA+uL,EACArrJ,EACA/oC,EAKA5S,EACAO,EACAulM,EACAC,EACAhiL,EACAye,EACAljC,EACAqB,EAfA87C,EAAAt9C,KAAA+mM,MAIA9sB,EAAAj6K,KAAAu+L,IACAyI,EAAAhnM,KAAAw+L,IACAr8B,EAAAniK,KAAAy+L,IACAr8B,EAAApiK,KAAA0+L,GAWA,KAAAphJ,EAAA,MAAAt9C,KAIA,IAAAs9C,EAAAp8C,OAAA,OAAA,CAGA,IAFA0jB,EAAA/jB,IAAA8lM,GAAA1sB,EAAA9X,GAAA,IAAA8X,EAAA0sB,EAAAxkC,EAAAwkC,GACAtjK,EAAAjiC,IAAAwlM,GAAAI,EAAA5kC,GAAA,IAAA4kC,EAAAJ,EAAAxkC,EAAAwkC,EACA9tL,EAAAwkC,IAAAA,EAAAA,EAAAn9C,EAAAkjC,GAAA,EAAAze,IAAA,MAAA5kB,KACA,KAAAs9C,EAAAp8C,OAAA,OACA4X,EAAA3Y,EAAA,EAAA,IAAA2Y,EAAA3Y,EAAA,EAAA,IAAA2Y,EAAA3Y,EAAA,EAAA,MAAA0nM,EAAA/uL,EAAAtX,EAAArB,GAIA,KAAAm9C,EAAA5sC,OAAA1K,GAAA,GAAAw2C,EAAAc,IAAAA,EAAAA,EAAA7pC,MAAA,MAAAzT,KAIA,QAHAyT,EAAA6pC,EAAA7pC,aAAA6pC,GAAA7pC,KAGA+oC,GAAA/oC,EAAA+oC,EAAA/oC,KAAAA,QAAA+oC,GAAA/oC,KAAAzT,MAGA8Y,GAGArF,EAAAqF,EAAA3Y,GAAAsT,QAAAqF,GAAA3Y,IAGAm9C,EAAAxkC,EAAA,IAAAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,KACAwkC,KAAAxkC,EAAA,IAAAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,MACAwkC,EAAAp8C,SACA2mM,EAAAA,EAAArmM,GAAA87C,EACAt9C,KAAA+mM,MAAAzpJ,GAGAt9C,OAbAA,KAAA+mM,MAAAtzL,EAAAzT,MAgBA,QAAA8nM,IAAAp3L,GACA,IAAA,GAAAvQ,GAAA,EAAAD,EAAAwQ,EAAAxP,OAAAf,EAAAD,IAAAC,EAAAH,KAAAiN,OAAAyD,EAAAvQ,GACA,OAAAH,MAGA,QAAA+nM,MACA,MAAA/nM,MAAA+mM,MAGA,QAAAiB,MACA,GAAAxqJ,GAAA,CAIA,OAHAx9C,MAAAqnM,MAAA,SAAA/pJ,GACA,IAAAA,EAAAp8C,OAAA,KAAAs8C,QAAAF,EAAAA,EAAA7pC,QAEA+pC,EAGA,QAAAyqJ,IAAAn5E,GACA,GAAAr6G,GAAA4jB,EAAA4hJ,EAAA+sB,EAAA7kC,EAAAC,EAAAulC,KAAArqJ,EAAAt9C,KAAA+mM,KAEA,KADAzpJ,GAAAqqJ,EAAA/gM,KAAA,GAAA2gM,IAAAjqJ,EAAAt9C,KAAAu+L,IAAAv+L,KAAAw+L,IAAAx+L,KAAAy+L,IAAAz+L,KAAA0+L,MACAjqL,EAAAkzL,EAAAnzL,OACA,IAAAs6G,EAAAxxE,EAAA7oC,EAAA6oC,KAAA28H,EAAAxlK,EAAAwlK,GAAA+sB,EAAAvyL,EAAAuyL,GAAA7kC,EAAA1tJ,EAAA0tJ,GAAAC,EAAA3tJ,EAAA2tJ,KAAA9kH,EAAAp8C,OAAA,CACA,GAAAylM,IAAA1sB,EAAA9X,GAAA,EAAAykC,GAAAI,EAAA5kC,GAAA,GACA/pI,EAAAilB,EAAA,KAAAqqJ,EAAA/gM,KAAA,GAAA2gM,IAAAlvK,EAAAsuK,EAAAC,EAAAzkC,EAAAC,KACA/pI,EAAAilB,EAAA,KAAAqqJ,EAAA/gM,KAAA,GAAA2gM,IAAAlvK,EAAA4hJ,EAAA2sB,EAAAD,EAAAvkC,KACA/pI,EAAAilB,EAAA,KAAAqqJ,EAAA/gM,KAAA,GAAA2gM,IAAAlvK,EAAAsuK,EAAAK,EAAA7kC,EAAAykC,KACAvuK,EAAAilB,EAAA,KAAAqqJ,EAAA/gM,KAAA,GAAA2gM,IAAAlvK,EAAA4hJ,EAAA+sB,EAAAL,EAAAC,IAGA,MAAA5mM,MAGA,QAAAkoM,IAAAp5E,GACA,GAAAr6G,GAAAkzL,KAAAl0L,IAEA,KADAzT,KAAA+mM,OAAAY,EAAA/gM,KAAA,GAAA2gM,IAAAvnM,KAAA+mM,MAAA/mM,KAAAu+L,IAAAv+L,KAAAw+L,IAAAx+L,KAAAy+L,IAAAz+L,KAAA0+L,MACAjqL,EAAAkzL,EAAAnzL,OAAA,CACA,GAAA8oC,GAAA7oC,EAAA6oC,IACA,IAAAA,EAAAp8C,OAAA,CACA,GAAAm3B,GAAA4hJ,EAAAxlK,EAAAwlK,GAAA+sB,EAAAvyL,EAAAuyL,GAAA7kC,EAAA1tJ,EAAA0tJ,GAAAC,EAAA3tJ,EAAA2tJ,GAAAukC,GAAA1sB,EAAA9X,GAAA,EAAAykC,GAAAI,EAAA5kC,GAAA,GACA/pI,EAAAilB,EAAA,KAAAqqJ,EAAA/gM,KAAA,GAAA2gM,IAAAlvK,EAAA4hJ,EAAA+sB,EAAAL,EAAAC,KACAvuK,EAAAilB,EAAA,KAAAqqJ,EAAA/gM,KAAA,GAAA2gM,IAAAlvK,EAAAsuK,EAAAK,EAAA7kC,EAAAykC,KACAvuK,EAAAilB,EAAA,KAAAqqJ,EAAA/gM,KAAA,GAAA2gM,IAAAlvK,EAAA4hJ,EAAA2sB,EAAAD,EAAAvkC,KACA/pI,EAAAilB,EAAA,KAAAqqJ,EAAA/gM,KAAA,GAAA2gM,IAAAlvK,EAAAsuK,EAAAC,EAAAzkC,EAAAC,IAEA3uJ,EAAA7M,KAAA6N,GAEA,KAAAA,EAAAhB,EAAAe,OACAs6G,EAAAr6G,EAAA6oC,KAAA7oC,EAAAwlK,GAAAxlK,EAAAuyL,GAAAvyL,EAAA0tJ,GAAA1tJ,EAAA2tJ,GAEA,OAAApiK,MAGA,QAAAmoM,IAAAniM,GACA,MAAAA,GAAA,GAGA,QAAAoiM,IAAAxlM,GACA,MAAA4E,WAAAtG,QAAAlB,KAAAumM,GAAA3jM,EAAA5C,MAAAA,KAAAumM,GAGA,QAAA8B,IAAAriM,GACA,MAAAA,GAAA,GAGA,QAAAsiM,IAAA1lM,GACA,MAAA4E,WAAAtG,QAAAlB,KAAAwmM,GAAA5jM,EAAA5C,MAAAA,KAAAwmM,GAGA,QAAA+B,IAAAvnB,EAAAngL,EAAAO,GACA,GAAAslM,GAAA,GAAA8B,IAAA,MAAA3nM,EAAAsnM,GAAAtnM,EAAA,MAAAO,EAAAinM,GAAAjnM,EAAA6tF,IAAAA,IAAAA,IAAAA,IACA,OAAA,OAAA+xF,EAAA0lB,EAAAA,EAAAO,OAAAjmB,GAGA,QAAAwnB,IAAA3nM,EAAAO,EAAA64K,EAAA+sB,EAAA7kC,EAAAC,GACApiK,KAAAumM,GAAA1lM,EACAb,KAAAwmM,GAAAplM,EACApB,KAAAu+L,IAAAtkB,EACAj6K,KAAAw+L,IAAAwI,EACAhnM,KAAAy+L,IAAAt8B,EACAniK,KAAA0+L,IAAAt8B,EACApiK,KAAA+mM,UAAA5yK,GAGA,QAAAs0K,IAAAl+F,GAEA,IADA,GAAAtc,IAAAv9E,KAAA65F,EAAA75F,MAAA+C,EAAAw6E,EACAsc,EAAAA,EAAA92F,MAAAA,EAAAA,EAAAA,MAAA/C,KAAA65F,EAAA75F,KACA,OAAAu9E,GA2CA,QAAAptF,IAAAmF,GACA,MAAAA,GAAAnF,EAAAmF,EAAA0iM,GAGA,QAAAtnM,IAAA4E,GACA,MAAAA,GAAA5E,EAAA4E,EAAA2iM,GAGA,QAAAC,IAAA5nC,GAQA,QAAAt8G,KAoBA,QAAAhiD,GAAAmmM,EAAA5uB,EAAA+sB,EAAA7kC,EAAAC,GACA,GAAA1xJ,GAAAm4L,EAAAn4L,KAAAo4L,EAAAD,EAAAxoM,EAAAA,EAAA0oM,EAAAD,CACA,EAAA,IAAAp4L,EAiBA,MAAAupK,GAAAe,EAAA36K,GAAA8hK,EAAA6Y,EAAA36K,GAAA2mM,EAAAlG,EAAAzgM,GAAA+hK,EAAA0+B,EAAAzgM,CAhBA,IAAAqQ,EAAAgK,MAAA4iC,EAAA5iC,MAAA,CACA,GAAA7Z,GAAAm6K,EAAAtqK,EAAA7P,EAAA6P,EAAAg4L,GACAtnM,EAAA0/L,EAAApwL,EAAAtP,EAAAsP,EAAAi4L,GACA7nM,EAAAD,EAAAA,EAAAO,EAAAA,CACAN,GAAAT,EAAAA,IACA,IAAAQ,IAAAA,EAAAwlM,KAAAvlM,GAAAD,EAAAA,GACA,IAAAO,IAAAA,EAAAilM,KAAAvlM,GAAAM,EAAAA,GACAN,GAAAT,GAAAS,EAAAyJ,KAAA87I,KAAAvlJ,KAAAA,EAAAkoM,EACA1rJ,EAAAorJ,KAAA7nM,GAAAC,IAAAT,GAAAyoM,GAAAA,IAAAG,EAAAH,IACAxrJ,EAAAqrJ,KAAAvnM,GAAAN,GAAAT,EACAqQ,EAAAg4L,IAAA7nM,GAAAR,EAAA,EAAAA,GACAqQ,EAAAi4L,IAAAvnM,EAAAf,KAzBA,IAAA,GARAF,GACAumM,EACAppJ,EACA09H,EACA8lB,EACAiI,EACAE,EANA/oM,EAAA8gL,EAAA9/K,OAQAkT,EAAA,EAAAA,EAAA80L,IAAA90L,EAEA,IADAsyL,EAAA6B,GAAAvnB,EAAAngL,GAAAO,IAAA+nM,WAAAnnJ,GACA7hD,EAAA,EAAAA,EAAAD,IAAAC,EACAm9C,EAAA0jI,EAAA7gL,GACA4oM,EAAAK,EAAA9rJ,EAAA5iC,OAAAuuL,EAAAF,EAAAA,EACA/tB,EAAA19H,EAAAz8C,EAAAy8C,EAAAorJ,GACA5H,EAAAxjJ,EAAAl8C,EAAAk8C,EAAAqrJ,GACAjC,EAAAW,MAAA3kM,GA2BA,QAAAs/C,GAAA6mJ,GACA,GAAAA,EAAAn4L,KAAA,MAAAm4L,GAAAxoM,EAAA+oM,EAAAP,EAAAn4L,KAAAgK,MACA,KAAA,GAAAva,GAAA0oM,EAAAxoM,EAAA,EAAAF,EAAA,IAAAA,EACA0oM,EAAA1oM,IAAA0oM,EAAA1oM,GAAAE,EAAAwoM,EAAAxoM,IACAwoM,EAAAxoM,EAAAwoM,EAAA1oM,GAAAE,GAKA,QAAAujD,KACA,GAAAo9H,EAAA,CACA,GAAA7gL,GAAAm9C,EAAAp9C,EAAA8gL,EAAA9/K,MAEA,KADAkoM,EAAA,GAAAj8L,OAAAjN,GACAC,EAAA,EAAAA,EAAAD,IAAAC,EAAAm9C,EAAA0jI,EAAA7gL,GAAAipM,EAAA9rJ,EAAA5iC,QAAAsmJ,EAAA1jH,EAAAn9C,EAAA6gL,IA/DA,GAAAA,GACAooB,EACAJ,EAAA,EACAE,EAAA,CAgFA,OA9EA,kBAAAloC,KAAAA,EAAAolC,GAAA,MAAAplC,EAAA,GAAAA,IA6DAt8G,EAAAd,WAAA,SAAAhhD,GACAo+K,EAAAp+K,EACAghD,KAGAc,EAAAwkJ,WAAA,SAAAtmM,GACA,MAAA4E,WAAAtG,QAAAgoM,GAAAtmM,EAAA8hD,GAAAwkJ,GAGAxkJ,EAAAskJ,SAAA,SAAApmM,GACA,MAAA4E,WAAAtG,QAAA8nM,GAAApmM,EAAA8hD,GAAAskJ,GAGAtkJ,EAAAs8G,OAAA,SAAAp+J,GACA,MAAA4E,WAAAtG,QAAA8/J,EAAA,kBAAAp+J,GAAAA,EAAAwjM,IAAAxjM,GAAAghD,IAAAc,GAAAs8G,GAGAt8G,EAGA,QAAAhqC,IAAA1U,GACA,MAAAA,GAAA0U,MAGA,QAAAxG,IAAAm1L,EAAAC,GACA,GAAAhsJ,GAAA+rJ,EAAAhkM,IAAAikM,EACA,KAAAhsJ,EAAA,KAAA,IAAAx9C,OAAA,YAAAwpM,EACA,OAAAhsJ,GAGA,QAAA5N,IAAA3J,GAaA,QAAAwjK,GAAA75J,GACA,MAAA,GAAAnlC,KAAAyuD,IAAA5gB,EAAA1I,EAAAhyB,OAAAhD,OAAA09B,EAAA1I,EAAAv3B,OAAAuC,QAGA,QAAAgqC,GAAA8kJ,GACA,IAAA,GAAAp1L,GAAA,EAAAlU,EAAA6lC,EAAA7kC,OAAAkT,EAAA80L,IAAA90L,EACA,IAAA,GAAAs7B,GAAAhyB,EAAAvF,EAAAtX,EAAAO,EAAAN,EAAAgS,EAAA3S,EAAA,EAAAA,EAAAD,IAAAC,EACAuvC,EAAA3J,EAAA5lC,GAAAud,EAAAgyB,EAAAhyB,OAAAvF,EAAAu3B,EAAAv3B,OACAtX,EAAAsX,EAAAtX,EAAAsX,EAAAuwL,GAAAhrL,EAAA7c,EAAA6c,EAAAgrL,IAAArC,KACAjlM,EAAA+W,EAAA/W,EAAA+W,EAAAwwL,GAAAjrL,EAAAtc,EAAAsc,EAAAirL,IAAAtC,KACAvlM,EAAAyJ,KAAA87I,KAAAxlJ,EAAAA,EAAAO,EAAAA,GACAN,GAAAA,EAAA2oM,EAAAtpM,IAAAW,EAAA0oM,EAAAE,EAAAvpM,GACAU,GAAAC,EAAAM,GAAAN,EACAqX,EAAAuwL,IAAA7nM,GAAAiS,EAAAqhE,EAAAh0E,IACAgY,EAAAwwL,IAAAvnM,EAAA0R,EACA4K,EAAAgrL,IAAA7nM,GAAAiS,EAAA,EAAAA,GACA4K,EAAAirL,IAAAvnM,EAAA0R,EAKA,QAAA8wC,KACA,GAAAo9H,EAAA,CAEA,GAAA7gL,GAIAuvC,EAHAxvC,EAAA8gL,EAAA9/K,OACAjB,EAAA8lC,EAAA7kC,OACAmoM,EAAAzJ,GAAA5e,EAAAxuK,EAGA,KAAArS,EAAA,EAAAi4C,EAAA,GAAAjrC,OAAAjN,GAAAC,EAAAF,IAAAE,EACAuvC,EAAA3J,EAAA5lC,GAAAuvC,EAAAh1B,MAAAva,EACA,gBAAAuvC,GAAAhyB,SAAAgyB,EAAAhyB,OAAAxJ,GAAAm1L,EAAA35J,EAAAhyB,SACA,gBAAAgyB,GAAAv3B,SAAAu3B,EAAAv3B,OAAAjE,GAAAm1L,EAAA35J,EAAAv3B,SACAigC,EAAA1I,EAAAhyB,OAAAhD,QAAA09B,EAAA1I,EAAAhyB,OAAAhD,QAAA,GAAA,EACA09B,EAAA1I,EAAAv3B,OAAAuC,QAAA09B,EAAA1I,EAAAv3B,OAAAuC,QAAA,GAAA,CAGA,KAAAva,EAAA,EAAAg0E,EAAA,GAAAhnE,OAAAlN,GAAAE,EAAAF,IAAAE,EACAuvC,EAAA3J,EAAA5lC,GAAAg0E,EAAAh0E,GAAAi4C,EAAA1I,EAAAhyB,OAAAhD,QAAA09B,EAAA1I,EAAAhyB,OAAAhD,OAAA09B,EAAA1I,EAAAv3B,OAAAuC,OAGAgvL,GAAA,GAAAv8L,OAAAlN,GAAA0pM,IACAF,EAAA,GAAAt8L,OAAAlN,GAAA2pM,KAGA,QAAAD,KACA,GAAA3oB,EAEA,IAAA,GAAA7gL,GAAA,EAAAD,EAAA6lC,EAAA7kC,OAAAf,EAAAD,IAAAC,EACAupM,EAAAvpM,IAAA6oM,EAAAjjK,EAAA5lC,GAAAA,EAAA4lC,GAIA,QAAA6jK,KACA,GAAA5oB,EAEA,IAAA,GAAA7gL,GAAA,EAAAD,EAAA6lC,EAAA7kC,OAAAf,EAAAD,IAAAC,EACAspM,EAAAtpM,IAAA6wF,EAAAjrD,EAAA5lC,GAAAA,EAAA4lC,GAtEA,GAEA2jK,GAEAD,EACAzoB,EACA5oI,EACA+7B,EAPA3hE,EAAAkI,GACAsuL,EAAAO,EAEAv4G,EAAAo1G,GAAA,IAKA8C,EAAA,CA2FA,OAzFA,OAAAnjK,IAAAA,MAgEA2e,EAAAd,WAAA,SAAAhhD,GACAo+K,EAAAp+K,EACAghD,KAGAc,EAAA3e,MAAA,SAAAnjC,GACA,MAAA4E,WAAAtG,QAAA6kC,EAAAnjC,EAAAghD,IAAAc,GAAA3e,GAGA2e,EAAAlyC,GAAA,SAAA5P,GACA,MAAA4E,WAAAtG,QAAAsR,EAAA5P,EAAA8hD,GAAAlyC,GAGAkyC,EAAAwkJ,WAAA,SAAAtmM,GACA,MAAA4E,WAAAtG,QAAAgoM,GAAAtmM,EAAA8hD,GAAAwkJ,GAGAxkJ,EAAAskJ,SAAA,SAAApmM,GACA,MAAA4E,WAAAtG,QAAA8nM,EAAA,kBAAApmM,GAAAA,EAAAwjM,IAAAxjM,GAAA+mM,IAAAjlJ,GAAAskJ,GAGAtkJ,EAAAssC,SAAA,SAAApuF,GACA,MAAA4E,WAAAtG,QAAA8vF,EAAA,kBAAApuF,GAAAA,EAAAwjM,IAAAxjM,GAAAgnM,IAAAllJ,GAAAssC,GAGAtsC,EAGA,QAAAmlJ,IAAA7jM,GACA,MAAAA,GAAAnF,EAGA,QAAAipM,IAAA9jM,GACA,MAAAA,GAAA5E,EAMA,QAAA2oM,IAAA/oB,GAaA,QAAA75J,KACA1b,IACA/D,EAAA1G,KAAA,OAAA+oM,GACAP,EAAAQ,IACAC,EAAAz7L,OACA9G,EAAA1G,KAAA,MAAA+oM,IAIA,QAAAt+L,GAAAy9L,GACA,GAAA/oM,GAAAm9C,EAAAp9C,EAAA8gL,EAAA9/K,WAEAizB,KAAA+0K,IAAAA,EAAA,EAEA,KAAA,GAAA90L,GAAA,EAAAA,EAAA80L,IAAA90L,EAOA,IANAo1L,IAAAU,EAAAV,GAAAW,EAEAC,EAAApoM,KAAA,SAAA0iD,GACAA,EAAA8kJ,KAGArpM,EAAA,EAAAA,EAAAD,IAAAC,EACAm9C,EAAA0jI,EAAA7gL,GACA,MAAAm9C,EAAA/xC,GAAA+xC,EAAAz8C,GAAAy8C,EAAAorJ,IAAA2B,GACA/sJ,EAAAz8C,EAAAy8C,EAAA/xC,GAAA+xC,EAAAorJ,GAAA,GACA,MAAAprJ,EAAAgtJ,GAAAhtJ,EAAAl8C,GAAAk8C,EAAAqrJ,IAAA0B,GACA/sJ,EAAAl8C,EAAAk8C,EAAAgtJ,GAAAhtJ,EAAAqrJ,GAAA,EAIA,OAAAoB,GAGA,QAAAQ,KACA,IAAA,GAAAjtJ,GAAAn9C,EAAA,EAAAD,EAAA8gL,EAAA9/K,OAAAf,EAAAD,IAAAC,EAAA,CAIA,GAHAm9C,EAAA0jI,EAAA7gL,GAAAm9C,EAAA5iC,MAAAva,EACAmyB,MAAAgrB,EAAA/xC,MAAA+xC,EAAAz8C,EAAAy8C,EAAA/xC,IACA+mB,MAAAgrB,EAAAgtJ,MAAAhtJ,EAAAl8C,EAAAk8C,EAAAgtJ,IACAh4K,MAAAgrB,EAAAz8C,IAAAyxB,MAAAgrB,EAAAl8C,GAAA,CACA,GAAA4/J,GAAAwpC,GAAAjgM,KAAA87I,KAAAlmJ,GAAAsqM,EAAAtqM,EAAAuqM,EACAptJ,GAAAz8C,EAAAmgK,EAAAz2J,KAAAid,IAAAijL,GACAntJ,EAAAl8C,EAAA4/J,EAAAz2J,KAAAq6J,IAAA6lC,IAEAn4K,MAAAgrB,EAAAorJ,KAAAp2K,MAAAgrB,EAAAqrJ,OACArrJ,EAAAorJ,GAAAprJ,EAAAqrJ,GAAA,IAKA,QAAAgC,GAAAjmJ,GAEA,MADAA,GAAAd,YAAAc,EAAAd,WAAAo9H,GACAt8H,EA/DA,GAAAqlJ,GACAP,EAAA,EACAQ,EAAA,KACAG,EAAA,EAAA5/L,KAAA+/J,IAAA0/B,EAAA,EAAA,KACAE,EAAA,EACAG,EAAA,GACAD,EAAAxK,KACAqK,EAAAp7L,GAAAsY,GACAzf,EAAAoX,EAAA,OAAA,MA4DA,OA1DA,OAAAkiK,IAAAA,MAwDAupB,IAEAR,GACAt+L,KAAAA,EAEAimL,QAAA,WACA,MAAAuY,GAAAvY,QAAAvqK,GAAA4iL,GAGAv7L,KAAA,WACA,MAAAy7L,GAAAz7L,OAAAu7L,GAGA/oB,MAAA,SAAAp+K,GACA,MAAA4E,WAAAtG,QAAA8/K,EAAAp+K,EAAA2nM,IAAAH,EAAApoM,KAAA2oM,GAAAZ,GAAA/oB,GAGAwoB,MAAA,SAAA5mM,GACA,MAAA4E,WAAAtG,QAAAsoM,GAAA5mM,EAAAmnM,GAAAP,GAGAQ,SAAA,SAAApnM,GACA,MAAA4E,WAAAtG,QAAA8oM,GAAApnM,EAAAmnM,GAAAC,GAGAG,WAAA,SAAAvnM,GACA,MAAA4E,WAAAtG,QAAAipM,GAAAvnM,EAAAmnM,IAAAI,GAGAD,YAAA,SAAAtnM,GACA,MAAA4E,WAAAtG,QAAAgpM,GAAAtnM,EAAAmnM,GAAAG,GAGAG,cAAA,SAAAznM,GACA,MAAA4E,WAAAtG,QAAAmpM,EAAA,EAAAznM,EAAAmnM,GAAA,EAAAM,GAGA3lJ,MAAA,SAAA/nC,EAAA/Z,GACA,MAAA4E,WAAAtG,OAAA,GAAA,MAAA0B,EAAAwnM,EAAAn9L,OAAA0P,GAAAytL,EAAAnmM,IAAA0Y,EAAAguL,EAAA/nM,IAAAmnM,GAAAK,EAAA/kM,IAAAsX,IAGAzI,KAAA,SAAArT,EAAAO,EAAA4/J,GACA,GAEAp5E,GACAE,EACA/0C,EACAuK,EACA7iC,EANAta,EAAA,EACAD,EAAA8gL,EAAA9/K,MAUA,KAHA,MAAA8/J,EAAAA,EAAAp1H,EAAAA,EACAo1H,GAAAA,EAEA7gK,EAAA,EAAAA,EAAAD,IAAAC,EACAm9C,EAAA0jI,EAAA7gL,GACAynF,EAAA/mF,EAAAy8C,EAAAz8C,EACAinF,EAAA1mF,EAAAk8C,EAAAl8C,GACA2xC,EAAA60C,EAAAA,EAAAE,EAAAA,GACAk5E,IAAAvmJ,EAAA6iC,EAAA0jH,EAAAjuH,EAGA,OAAAt4B,IAGA+I,GAAA,SAAA7G,EAAA/Z,GACA,MAAA4E,WAAAtG,OAAA,GAAAwG,EAAA8b,GAAA7G,EAAA/Z,GAAAmnM,GAAAriM,EAAA8b,GAAA7G,KAKA,QAAAiuL,MAUA,QAAAlmJ,GAAA9hD,GACA,GAAAzC,GAAAD,EAAA8gL,EAAA9/K,OAAAwlM,EAAA6B,GAAAvnB,EAAA6oB,GAAAC,IAAAX,WAAA0B,EACA,KAAArB,EAAA5mM,EAAAzC,EAAA,EAAAA,EAAAD,IAAAC,EAAAm9C,EAAA0jI,EAAA7gL,GAAAumM,EAAAW,MAAA3kM,GAGA,QAAAkhD,KACA,GAAAo9H,EAAA,CACA,GAAA7gL,GAAAm9C,EAAAp9C,EAAA8gL,EAAA9/K,MAEA,KADAwoM,EAAA,GAAAv8L,OAAAjN,GACAC,EAAA,EAAAA,EAAAD,IAAAC,EAAAm9C,EAAA0jI,EAAA7gL,GAAAupM,EAAApsJ,EAAA5iC,QAAAsuL,EAAA1rJ,EAAAn9C,EAAA6gL,IAGA,QAAA6pB,GAAAhC,GACA,GAAAp0L,GAAA1T,EAAAF,EAAAO,EAAAjB,EAAA6oM,EAAA,EAAAjG,EAAA,CAGA,IAAA8F,EAAA3nM,OAAA,CACA,IAAAL,EAAAO,EAAAjB,EAAA,EAAAA,EAAA,IAAAA,GACAsU,EAAAo0L,EAAA1oM,MAAAY,EAAAwJ,KAAA+1B,IAAA7rB,EAAAlB,UACAy1L,GAAAv0L,EAAAlB,MAAAwvL,GAAAhiM,EAAAF,GAAAE,EAAA0T,EAAA5T,EAAAO,GAAAL,EAAA0T,EAAArT,EAGAynM,GAAAhoM,EAAAA,EAAAkiM,EACA8F,EAAAznM,EAAAA,EAAA2hM,MAIA,CACAtuL,EAAAo0L,EACAp0L,EAAA5T,EAAA4T,EAAA/D,KAAA7P,EACA4T,EAAArT,EAAAqT,EAAA/D,KAAAtP,CACA,IAAA4nM,GAAAU,EAAAj1L,EAAA/D,KAAAgK,aACAjG,EAAAA,EAAAhB,MAGAo1L,EAAAt1L,MAAAy1L,EAGA,QAAAtmM,GAAAmmM,EAAA1mC,EAAAv/J,EAAAy/J,GACA,IAAAwmC,EAAAt1L,MAAA,OAAA,CAEA,IAAA1S,GAAAgoM,EAAAhoM,EAAAy8C,EAAAz8C,EACAO,EAAAynM,EAAAznM,EAAAk8C,EAAAl8C,EACAK,EAAA4gK,EAAAF,EACArhK,EAAAD,EAAAA,EAAAO,EAAAA,CAIA,IAAAK,EAAAA,EAAAqpM,EAAAhqM,EAQA,MAPAA,GAAAiqM,IACA,IAAAlqM,IAAAA,EAAAwlM,KAAAvlM,GAAAD,EAAAA,GACA,IAAAO,IAAAA,EAAAilM,KAAAvlM,GAAAM,EAAAA,GACAN,EAAAkqM,IAAAlqM,EAAAyJ,KAAA87I,KAAA2kD,EAAAlqM,IACAw8C,EAAAorJ,IAAA7nM,EAAAgoM,EAAAt1L,MAAAi2L,EAAA1oM,EACAw8C,EAAAqrJ,IAAAvnM,EAAAynM,EAAAt1L,MAAAi2L,EAAA1oM,IAEA,CAIA,MAAA+nM,EAAA3nM,QAAAJ,GAAAiqM,GAAA,EAGAlC,EAAAn4L,OAAA4sC,GAAAurJ,EAAAp1L,QACA,IAAA5S,IAAAA,EAAAwlM,KAAAvlM,GAAAD,EAAAA,GACA,IAAAO,IAAAA,EAAAilM,KAAAvlM,GAAAM,EAAAA,GACAN,EAAAkqM,IAAAlqM,EAAAyJ,KAAA87I,KAAA2kD,EAAAlqM,IAGA,IAAA+nM,EAAAn4L,OAAA4sC,IACA77C,EAAAioM,EAAAb,EAAAn4L,KAAAgK,OAAA8uL,EAAA1oM,EACAw8C,EAAAorJ,IAAA7nM,EAAAY,EACA67C,EAAAqrJ,IAAAvnM,EAAAK,SACAonM,EAAAA,EAAAp1L,OAlFA,GAAAutK,GACA1jI,EACAksJ,EAEAE,EADAV,EAAA5C,IAAA,IAEA4E,EAAA,EACAD,EAAAn/J,EAAAA,EACAk/J,EAAA,GAmGA,OArBApmJ,GAAAd,WAAA,SAAAhhD,GACAo+K,EAAAp+K,EACAghD,KAGAc,EAAAskJ,SAAA,SAAApmM,GACA,MAAA4E,WAAAtG,QAAA8nM,EAAA,kBAAApmM,GAAAA,EAAAwjM,IAAAxjM,GAAAghD,IAAAc,GAAAskJ,GAGAtkJ,EAAAumJ,YAAA,SAAAroM,GACA,MAAA4E,WAAAtG,QAAA8pM,EAAApoM,EAAAA,EAAA8hD,GAAAn6C,KAAA87I,KAAA2kD,IAGAtmJ,EAAAwmJ,YAAA,SAAAtoM,GACA,MAAA4E,WAAAtG,QAAA6pM,EAAAnoM,EAAAA,EAAA8hD,GAAAn6C,KAAA87I,KAAA0kD,IAGArmJ,EAAAymJ,MAAA,SAAAvoM,GACA,MAAA4E,WAAAtG,QAAA4pM,EAAAloM,EAAAA,EAAA8hD,GAAAn6C,KAAA87I,KAAAykD,IAGApmJ,EAGA,QAAA0mJ,IAAApqC,EAAAngK,EAAAO,GAUA,QAAAsjD,GAAA8kJ,GACA,IAAA,GAAArpM,GAAA,EAAAD,EAAA8gL,EAAA9/K,OAAAf,EAAAD,IAAAC,EAAA,CACA,GAAAm9C,GAAA0jI,EAAA7gL,GACAynF,EAAAtqC,EAAAz8C,EAAAA,GAAA,KACAinF,EAAAxqC,EAAAl8C,EAAAA,GAAA,KACAf,EAAAkK,KAAA87I,KAAAz+D,EAAAA,EAAAE,EAAAA,GACA1zE,GAAAi3L,EAAAlrM,GAAAE,GAAAqpM,EAAAvpM,GAAAqpM,EAAAnpM,CACAi9C,GAAAorJ,IAAA9gH,EAAAxzE,EACAkpC,EAAAqrJ,IAAA7gH,EAAA1zE,GAIA,QAAAwvC,KACA,GAAAo9H,EAAA,CACA,GAAA7gL,GAAAD,EAAA8gL,EAAA9/K,MAGA,KAFAwoM,EAAA,GAAAv8L,OAAAjN,GACAmrM,EAAA,GAAAl+L,OAAAjN,GACAC,EAAA,EAAAA,EAAAD,IAAAC,EACAkrM,EAAAlrM,IAAA6gK,EAAAggB,EAAA7gL,GAAAA,EAAA6gL,GACA0oB,EAAAvpM,GAAAmyB,MAAA+4K,EAAAlrM,IAAA,GAAA6oM,EAAAhoB,EAAA7gL,GAAAA,EAAA6gL,IA5BA,GAAAA,GAEA0oB,EACA2B,EAFArC,EAAA5C,GAAA,GAmDA,OA/CA,kBAAAplC,KAAAA,EAAAolC,IAAAplC,IACA,MAAAngK,IAAAA,EAAA,GACA,MAAAO,IAAAA,EAAA,GAyBAsjD,EAAAd,WAAA,SAAAhhD,GACAo+K,EAAAp+K,EAAAghD,KAGAc,EAAAskJ,SAAA,SAAApmM,GACA,MAAA4E,WAAAtG,QAAA8nM,EAAA,kBAAApmM,GAAAA,EAAAwjM,IAAAxjM,GAAAghD,IAAAc,GAAAskJ,GAGAtkJ,EAAAs8G,OAAA,SAAAp+J,GACA,MAAA4E,WAAAtG,QAAA8/J,EAAA,kBAAAp+J,GAAAA,EAAAwjM,IAAAxjM,GAAAghD,IAAAc,GAAAs8G,GAGAt8G,EAAA7jD,EAAA,SAAA+B,GACA,MAAA4E,WAAAtG,QAAAL,GAAA+B,EAAA8hD,GAAA7jD,GAGA6jD,EAAAtjD,EAAA,SAAAwB,GACA,MAAA4E,WAAAtG,QAAAE,GAAAwB,EAAA8hD,GAAAtjD,GAGAsjD,EAGA,QAAA4mJ,IAAAzqM,GAQA,QAAA6jD,GAAA8kJ,GACA,IAAA,GAAAlsJ,GAAAn9C,EAAA,EAAAD,EAAA8gL,EAAA9/K,OAAAf,EAAAD,IAAAC,EACAm9C,EAAA0jI,EAAA7gL,GAAAm9C,EAAAorJ,KAAA3uB,EAAA55K,GAAAm9C,EAAAz8C,GAAA6oM,EAAAvpM,GAAAqpM,EAIA,QAAA5lJ,KACA,GAAAo9H,EAAA,CACA,GAAA7gL,GAAAD,EAAA8gL,EAAA9/K,MAGA,KAFAwoM,EAAA,GAAAv8L,OAAAjN,GACA65K,EAAA,GAAA5sK,OAAAjN,GACAC,EAAA,EAAAA,EAAAD,IAAAC,EACAupM,EAAAvpM,GAAAmyB,MAAAynJ,EAAA55K,IAAAU,EAAAmgL,EAAA7gL,GAAAA,EAAA6gL,IAAA,GAAAgoB,EAAAhoB,EAAA7gL,GAAAA,EAAA6gL,IAnBA,GACAA,GACA0oB,EACA3vB,EAHAivB,EAAA5C,GAAA,GAoCA,OA/BA,kBAAAvlM,KAAAA,EAAAulM,GAAA,MAAAvlM,EAAA,GAAAA,IAkBA6jD,EAAAd,WAAA,SAAAhhD,GACAo+K,EAAAp+K,EACAghD,KAGAc,EAAAskJ,SAAA,SAAApmM,GACA,MAAA4E,WAAAtG,QAAA8nM,EAAA,kBAAApmM,GAAAA,EAAAwjM,IAAAxjM,GAAAghD,IAAAc,GAAAskJ,GAGAtkJ,EAAA7jD,EAAA,SAAA+B,GACA,MAAA4E,WAAAtG,QAAAL,EAAA,kBAAA+B,GAAAA,EAAAwjM,IAAAxjM,GAAAghD,IAAAc,GAAA7jD,GAGA6jD,EAGA,QAAA6mJ,IAAAnqM,GAQA,QAAAsjD,GAAA8kJ,GACA,IAAA,GAAAlsJ,GAAAn9C,EAAA,EAAAD,EAAA8gL,EAAA9/K,OAAAf,EAAAD,IAAAC,EACAm9C,EAAA0jI,EAAA7gL,GAAAm9C,EAAAqrJ,KAAAzB,EAAA/mM,GAAAm9C,EAAAl8C,GAAAsoM,EAAAvpM,GAAAqpM,EAIA,QAAA5lJ,KACA,GAAAo9H,EAAA,CACA,GAAA7gL,GAAAD,EAAA8gL,EAAA9/K,MAGA,KAFAwoM,EAAA,GAAAv8L,OAAAjN,GACAgnM,EAAA,GAAA/5L,OAAAjN,GACAC,EAAA,EAAAA,EAAAD,IAAAC,EACAupM,EAAAvpM,GAAAmyB,MAAA40K,EAAA/mM,IAAAiB,EAAA4/K,EAAA7gL,GAAAA,EAAA6gL,IAAA,GAAAgoB,EAAAhoB,EAAA7gL,GAAAA,EAAA6gL,IAnBA,GACAA,GACA0oB,EACAxC,EAHA8B,EAAA5C,GAAA,GAoCA,OA/BA,kBAAAhlM,KAAAA,EAAAglM,GAAA,MAAAhlM,EAAA,GAAAA,IAkBAsjD,EAAAd,WAAA,SAAAhhD,GACAo+K,EAAAp+K,EACAghD,KAGAc,EAAAskJ,SAAA,SAAApmM,GACA,MAAA4E,WAAAtG,QAAA8nM,EAAA,kBAAApmM,GAAAA,EAAAwjM,IAAAxjM,GAAAghD,IAAAc,GAAAskJ,GAGAtkJ,EAAAtjD,EAAA,SAAAwB,GACA,MAAA4E,WAAAtG,QAAAE,EAAA,kBAAAwB,GAAAA,EAAAwjM,IAAAxjM,GAAAghD,IAAAc,GAAAtjD,GAGAsjD,EAMA,QAAA8mJ,IAAA3qM,EAAAkF,GACA,IAAA5F,GAAAU,EAAAkF,EAAAlF,EAAAo3B,cAAAlyB,EAAA,GAAAlF,EAAAo3B,iBAAApnB,QAAA,MAAA,EAAA,MAAA,KACA,IAAA1Q,GAAAsrM,EAAA5qM,EAAA8B,MAAA,EAAAxC,EAIA,QACAsrM,EAAAvqM,OAAA,EAAAuqM,EAAA,GAAAA,EAAA9oM,MAAA,GAAA8oM,GACA5qM,EAAA8B,MAAAxC,EAAA,IAIA,QAAAurM,IAAA7qM,GACA,MAAAA,GAAA2qM,GAAAjhM,KAAA+1B,IAAAz/B,IAAAA,EAAAA,EAAA,GAAAouF,IAGA,QAAA08G,IAAAC,EAAAC,GACA,MAAA,UAAAt4L,EAAA1J,GAOA,IANA,GAAA1J,GAAAoT,EAAArS,OACAxB,KACA8B,EAAA,EACAL,EAAAyqM,EAAA,GACA1qM,EAAA,EAEAf,EAAA,GAAAgB,EAAA,IACAD,EAAAC,EAAA,EAAA0I,IAAA1I,EAAAoJ,KAAAC,IAAA,EAAAX,EAAA3I,IACAxB,EAAAkH,KAAA2M,EAAA4hB,UAAAh1B,GAAAgB,EAAAhB,EAAAgB,OACAD,GAAAC,EAAA,GAAA0I,KACA1I,EAAAyqM,EAAApqM,GAAAA,EAAA,GAAAoqM,EAAA1qM,OAGA,OAAAxB,GAAA2b,UAAArM,KAAA68L,IAIA,QAAAC,IAAAC,GACA,MAAA,UAAAx4L,GACA,MAAAA,GAAArQ,QAAA,SAAA,SAAA/C,GACA,MAAA4rM,IAAA5rM,MAQA,QAAA6rM,IAAAC,GACA,MAAA,IAAAC,IAAAD,GAKA,QAAAC,IAAAD,GACA,KAAAhqM,EAAAwT,GAAAhR,KAAAwnM,IAAA,KAAA,IAAAnsM,OAAA,mBAAAmsM,EACA,IAAAhqM,EACAjC,MAAA0lH,KAAAzjH,EAAA,IAAA,IACAjC,KAAAq+E,MAAAp8E,EAAA,IAAA,IACAjC,KAAAmsM,KAAAlqM,EAAA,IAAA,IACAjC,KAAA0uH,OAAAzsH,EAAA,IAAA,GACAjC,KAAAktL,OAAAjrL,EAAA,GACAjC,KAAA6J,MAAA5H,EAAA,KAAAA,EAAA,GACAjC,KAAAosM,QAAAnqM,EAAA,GACAjC,KAAAqsM,UAAApqM,EAAA,KAAAA,EAAA,GAAAU,MAAA,GACA3C,KAAAiS,OAAAhQ,EAAA,GACAjC,KAAAiH,KAAAhF,EAAA,KAAA,GAiBA,QAAAqqM,IAAAloM,GACAg1D,EAAA,IAAA,GAAAi7D,GAAAn0H,EAAAkE,EAAAlD,OAAAf,EAAA,EAAAq4K,GAAA,EAAAr4K,EAAAD,IAAAC,EACA,OAAAiE,EAAAjE,IACA,IAAA,IAAAq4K,EAAAnkD,EAAAl0H,CAAA,MACA,KAAA,IAAA,IAAAq4K,IAAAA,EAAAr4K,GAAAk0H,EAAAl0H,CAAA,MACA,SAAA,GAAAq4K,EAAA,EAAA,CAAA,KAAAp0K,EAAAjE,GAAA,KAAAi5D,EAAAo/G,GAAA,GAGA,MAAAA,GAAA,EAAAp0K,EAAAzB,MAAA,EAAA61K,GAAAp0K,EAAAzB,MAAA0xH,EAAA,GAAAjwH,EAKA,QAAAmoM,IAAA1rM,EAAAkF,GACA,GAAAC,GAAAwlM,GAAA3qM,EAAAkF,EACA,KAAAC,EAAA,MAAAnF,GAAA,EACA,IAAA4qM,GAAAzlM,EAAA,GACAwmM,EAAAxmM,EAAA,GACA7F,EAAAqsM,GAAAC,GAAA,EAAAliM,KAAAC,KAAA,EAAAD,KAAAyuD,IAAA,EAAAzuD,KAAA8sB,MAAAm1K,EAAA,MAAA,EACAtsM,EAAAurM,EAAAvqM,MACA,OAAAf,KAAAD,EAAAurM,EACAtrM,EAAAD,EAAAurM,EAAA,GAAAt+L,OAAAhN,EAAAD,EAAA,GAAA8O,KAAA,KACA7O,EAAA,EAAAsrM,EAAA9oM,MAAA,EAAAxC,GAAA,IAAAsrM,EAAA9oM,MAAAxC,GACA,KAAA,GAAAgN,OAAA,EAAAhN,GAAA6O,KAAA,KAAAw8L,GAAA3qM,EAAA0J,KAAAC,IAAA,EAAAzE,EAAA5F,EAAA,IAAA,GAGA,QAAAusM,IAAA7rM,EAAAkF,GACA,GAAAC,GAAAwlM,GAAA3qM,EAAAkF,EACA,KAAAC,EAAA,MAAAnF,GAAA,EACA,IAAA4qM,GAAAzlM,EAAA,GACAwmM,EAAAxmM,EAAA,EACA,OAAAwmM,GAAA,EAAA,KAAA,GAAAr/L,QAAAq/L,GAAAx9L,KAAA,KAAAy8L,EACAA,EAAAvqM,OAAAsrM,EAAA,EAAAf,EAAA9oM,MAAA,EAAA6pM,EAAA,GAAA,IAAAf,EAAA9oM,MAAA6pM,EAAA,GACAf,EAAA,GAAAt+L,OAAAq/L,EAAAf,EAAAvqM,OAAA,GAAA8N,KAAA,KAmBA,QAAA29L,IAAA9rM,GACA,MAAAA,GAKA,QAAA+rM,IAAAC,GAOA,QAAAC,GAAAb,GA0CA,QAAAx7J,GAAAl9B,GACA,GAEApT,GAAAD,EAAAa,EAFAgsM,EAAAnvJ,EACAovJ,EAAA/yC,CAGA,IAAA,MAAAhzJ,EACA+lM,EAAAC,EAAA15L,GAAAy5L,EACAz5L,EAAA,OACA,CACAA,GAAAA,CAGA,IAAA25L,GAAA35L,EAAA,CAeA,IAdAA,EAAA05L,EAAA1iM,KAAA+1B,IAAA/sB,GAAA84L,GAGAp6L,IAAAsB,EAAA+4L,GAAA/4L,IAGA25L,GAAA,IAAA35L,IAAA25L,GAAA,GAGAH,GAAAG,EAAA,MAAAf,EAAAA,EAAA,IAAA,MAAAA,GAAA,MAAAA,EAAA,GAAAA,GAAAY,EACAC,GAAA,MAAA/lM,EAAAkmM,GAAA,EAAAV,GAAA,GAAA,IAAAO,GAAAE,GAAA,MAAAf,EAAA,IAAA,IAIAiB,EAEA,IADAjtM,GAAA,EAAAD,EAAAqT,EAAArS,SACAf,EAAAD,GACA,GAAA,IAAAa,EAAAwS,EAAAiC,WAAArV,KAAAY,EAAA,GAAA,CACAisM,GAAA,KAAAjsM,EAAAssM,EAAA95L,EAAA5Q,MAAAxC,EAAA,GAAAoT,EAAA5Q,MAAAxC,IAAA6sM,EACAz5L,EAAAA,EAAA5Q,MAAA,EAAAxC,EACA,QAOAisM,IAAAlf,IAAA35K,EAAAo7B,EAAAp7B,EAAAq4B,EAAAA,GAGA,IAAA1qC,GAAA6rM,EAAA7rM,OAAAqS,EAAArS,OAAA8rM,EAAA9rM,OACA2lB,EAAA3lB,EAAA2I,EAAA,GAAAsD,OAAAtD,EAAA3I,EAAA,GAAA8N,KAAA02G,GAAA,EAMA,QAHA0mF,GAAAlf,IAAA35K,EAAAo7B,EAAA9nB,EAAAtT,EAAAsT,EAAA3lB,OAAA2I,EAAAmjM,EAAA9rM,OAAA0qC,EAAAA,GAAA/kB,EAAA,IAGAw3D,GACA,IAAA,IAAA9qE,EAAAw5L,EAAAx5L,EAAAy5L,EAAAnmL,CAAA,MACA,KAAA,IAAAtT,EAAAw5L,EAAAlmL,EAAAtT,EAAAy5L,CAAA,MACA,KAAA,IAAAz5L,EAAAsT,EAAAlkB,MAAA,EAAAzB,EAAA2lB,EAAA3lB,QAAA,GAAA6rM,EAAAx5L,EAAAy5L,EAAAnmL,EAAAlkB,MAAAzB,EAAA,MACA,SAAAqS,EAAAsT,EAAAkmL,EAAAx5L,EAAAy5L,EAGA,MAAAjB,GAAAx4L,GAlGA04L,EAAAD,GAAAC,EAEA,IAAAvmF,GAAAumF,EAAAvmF,KACArnC,EAAA4tH,EAAA5tH,MACA8tH,EAAAF,EAAAE,KACAz9E,EAAAu9E,EAAAv9E,OACAw+D,EAAA+e,EAAA/e,KACArjL,EAAAoiM,EAAApiM,MACAuiM,EAAAH,EAAAG,MACAC,EAAAJ,EAAAI,UACAp6L,EAAAg6L,EAAAh6L,KACAhL,EAAAglM,EAAAhlM,IAGA,OAAAA,GAAAmlM,GAAA,EAAAnlM,EAAA,KAGAqmM,GAAArmM,KAAA,MAAAolM,IAAAA,EAAA,IAAAp6L,GAAA,EAAAhL,EAAA,MAGAimL,GAAA,MAAAxnE,GAAA,MAAArnC,KAAA6uG,GAAA,EAAAxnE,EAAA,IAAArnC,EAAA,IAIA,IAAAzgC,GAAA,MAAA8wE,EAAA6+E,EAAA,GAAA,MAAA7+E,GAAA,SAAAhrH,KAAAuD,GAAA,IAAAA,EAAA1F,cAAA,GACA04J,EAAA,MAAAvrC,EAAA6+E,EAAA,GAAA,OAAA7pM,KAAAuD,GAAAmzC,EAAA,GAKA6yJ,EAAAK,GAAArmM,GACAmmM,EAAA,aAAA1pM,KAAAuD,EA0EA,OApEAolM,GAAA,MAAAA,EAAA,EACA,SAAA3oM,KAAAuD,GAAAsD,KAAAC,IAAA,EAAAD,KAAAyuD,IAAA,GAAAqzI,IACA9hM,KAAAC,IAAA,EAAAD,KAAAyuD,IAAA,GAAAqzI,IA8DA57J,EAAA3/B,SAAA,WACA,MAAAm7L,GAAA,IAGAx7J,EAGA,QAAA+8J,GAAAvB,EAAA14L,GACA,GAAA1N,GAAAinM,GAAAb,EAAAD,GAAAC,GAAAA,EAAAhlM,KAAA,IAAAglM,IACAxsM,EAAA,EAAA8K,KAAAC,KAAA,EAAAD,KAAAyuD,IAAA,EAAAzuD,KAAA8sB,MAAAq0K,GAAAn4L,GAAA,KACAa,EAAA7J,KAAA+/J,IAAA,IAAA7qK,GACAm+C,EAAAuvJ,GAAA,EAAA1tM,EAAA,EACA,OAAA,UAAA8T,GACA,MAAA1N,GAAAuO,EAAAb,GAAAqqC,GAzHA,GAAAjP,GAAAk+J,EAAAjB,UAAAiB,EAAAhB,UAAAF,GAAAkB,EAAAjB,SAAAiB,EAAAhB,WAAAc,GACAY,EAAAV,EAAAU,SACAF,EAAAR,EAAAQ,QACAtB,EAAAc,EAAAd,SAAAD,GAAAe,EAAAd,UAAAY,GACAvyJ,EAAAyyJ,EAAAzyJ,SAAA,GAyHA,QACA3J,OAAAq8J,EACAU,aAAAA,GAaA,QAAAC,IAAA3kB,GAIA,MAHA+jB,IAAAD,GAAA9jB,GACAlpL,EAAA6wC,OAAAo8J,GAAAp8J,OACA7wC,EAAA4tM,aAAAX,GAAAW,aACAX,GAGA,QAAAa,IAAAvmL,GACA,MAAA5c,MAAAC,IAAA,GAAAkhM,GAAAnhM,KAAA+1B,IAAAnZ,KAGA,QAAAwmL,IAAAxmL,EAAA5T,GACA,MAAAhJ,MAAAC,IAAA,EAAA,EAAAD,KAAAC,KAAA,EAAAD,KAAAyuD,IAAA,EAAAzuD,KAAA8sB,MAAAq0K,GAAAn4L,GAAA,KAAAm4L,GAAAnhM,KAAA+1B,IAAAnZ,KAGA,QAAAymL,IAAAzmL,EAAA3c,GAEA,MADA2c,GAAA5c,KAAA+1B,IAAAnZ,GAAA3c,EAAAD,KAAA+1B,IAAA91B,GAAA2c,EACA5c,KAAAC,IAAA,EAAAkhM,GAAAlhM,GAAAkhM,GAAAvkL,IAAA,EAUA,QAAA0mL,MACA,MAAA,IAAAC,IAGA,QAAAA,MACA9tM,KAAA4Z,QAsBA,QAAAm0L,IAAAF,EAAA1pM,EAAA2O,GACA,GAAAjS,GAAAgtM,EAAAzpM,EAAAD,EAAA2O,EACAk7L,EAAAntM,EAAAsD,EACA8pM,EAAAptM,EAAAmtM,CACAH,GAAAnuM,EAAAyE,EAAA8pM,GAAAn7L,EAAAk7L,GA0BA,QAAAE,IAAArtM,GACA,MAAAA,GAAA,EAAA,EAAAA,GAAA,EAAAstM,GAAA5jM,KAAA2jM,KAAArtM,GAGA,QAAAutM,IAAAvtM,GACA,MAAAA,GAAA,EAAAwtM,GAAAxtM,GAAA,GAAAwtM,GAAA9jM,KAAA6jM,KAAAvtM,GAGA,QAAAytM,IAAAztM,GACA,OAAAA,EAAA0tM,GAAA1tM,EAAA,IAAAA,EAGA,QAAA2tM,OAEA,QAAAC,IAAAzL,EAAAh4H,GACAg4H,GAAA0L,GAAA39L,eAAAiyL,EAAA/7L,OACAynM,GAAA1L,EAAA/7L,MAAA+7L,EAAAh4H,GA8CA,QAAA2jI,IAAA9M,EAAA72H,EAAAiwE,GACA,GAAA2zD,GAAAzuM,GAAA,EAAAD,EAAA2hM,EAAA3gM,OAAA+5I,CAEA,KADAjwE,EAAAktB,cACA/3F,EAAAD,GAAA0uM,EAAA/M,EAAA1hM,GAAA6qE,EAAAqsE,MAAAu3D,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACA5jI,GAAAotB,UAGA,QAAAy2G,IAAAhN,EAAA72H,GACA,GAAA7qE,IAAA,EAAAD,EAAA2hM,EAAA3gM,MAEA,KADA8pE,EAAA8jI,iBACA3uM,EAAAD,GAAAyuM,GAAA9M,EAAA1hM,GAAA6qE,EAAA,EACAA,GAAA+jI,aAGA,QAAAC,IAAA/hB,EAAAjiH,GACAiiH,GAAAgiB,GAAAl+L,eAAAk8K,EAAAhmL,MACAgoM,GAAAhiB,EAAAhmL,MAAAgmL,EAAAjiH,GAEAyjI,GAAAxhB,EAAAjiH,GAgCA,QAAAkkI,MACAC,GAAA93D,MAAA+3D,GAGA,QAAAC,MACAC,GAAAC,GAAAC,IAGA,QAAAJ,IAAAK,EAAAC,GACAP,GAAA93D,MAAAi4D,GACAC,GAAAE,EAAAD,GAAAE,EACAD,GAAAE,GAAAD,GAAAC,GACAC,GAAAH,EAAAI,GAAAC,GAAAJ,EAAAA,EAAA,EAAAK,IAAAC,GAAAzB,GAAAmB,GAGA,QAAAJ,IAAAG,EAAAC,GACAD,GAAAE,GAAAD,GAAAC,GACAD,EAAAA,EAAA,EAAAK,EAKA,IAAAE,GAAAR,EAAAG,GACAM,EAAAD,GAAA,EAAA,GAAA,EACAE,EAAAD,EAAAD,EACAG,EAAAN,GAAAJ,GACAW,EAAA9B,GAAAmB,GACAt7L,EAAA47L,GAAAK,EACAzuM,EAAAiuM,GAAAO,EAAAh8L,EAAA07L,GAAAK,GACA3vM,EAAA4T,EAAA87L,EAAA3B,GAAA4B,EACAG,IAAA3oM,IAAAujL,GAAA1qL,EAAAoB,IAGAguM,GAAAH,EAAAI,GAAAO,EAAAJ,GAAAK,EAGA,QAAAE,IAAAtjB,GAGA,MAFAujB,IAAA52L,QACAo1L,GAAA/hB,EAAAkiB,IACA,EAAAqB,GAGA,QAAAC,IAAAC,GACA,OAAAxlB,GAAAwlB,EAAA,GAAAA,EAAA,IAAAtC,GAAAsC,EAAA,KAGA,QAAAA,IAAAD,GACA,GAAAhB,GAAAgB,EAAA,GAAAf,EAAAe,EAAA,GAAAL,EAAAN,GAAAJ,EACA,QAAAU,EAAAN,GAAAL,GAAAW,EAAA7B,GAAAkB,GAAAlB,GAAAmB,IAGA,QAAAiB,IAAAxsM,EAAA2O,GACA,MAAA3O,GAAA,GAAA2O,EAAA,GAAA3O,EAAA,GAAA2O,EAAA,GAAA3O,EAAA,GAAA2O,EAAA,GAGA,QAAA89L,IAAAzsM,EAAA2O,GACA,OAAA3O,EAAA,GAAA2O,EAAA,GAAA3O,EAAA,GAAA2O,EAAA,GAAA3O,EAAA,GAAA2O,EAAA,GAAA3O,EAAA,GAAA2O,EAAA,GAAA3O,EAAA,GAAA2O,EAAA,GAAA3O,EAAA,GAAA2O,EAAA,IAIA,QAAA+9L,IAAA1sM,EAAA2O,GACA3O,EAAA,IAAA2O,EAAA,GAAA3O,EAAA,IAAA2O,EAAA,GAAA3O,EAAA,IAAA2O,EAAA,GAGA,QAAAg+L,IAAAC,EAAA38L,GACA,OAAA28L,EAAA,GAAA38L,EAAA28L,EAAA,GAAA38L,EAAA28L,EAAA,GAAA38L,GAIA,QAAA48L,IAAAhrM,GACA,GAAAlF,GAAAulJ,GAAArgJ,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACAA,GAAA,IAAAlF,EAAAkF,EAAA,IAAAlF,EAAAkF,EAAA,IAAAlF,EAkCA,QAAAmwM,IAAAxB,EAAAC,GACA70H,GAAAj0E,KAAAulD,IAAA+kJ,GAAAzB,EAAA0B,GAAA1B,IACAC,EAAA0B,KAAAA,GAAA1B,GACAA,EAAA2B,KAAAA,GAAA3B,GAGA,QAAA4B,IAAA7B,EAAAC,GACA,GAAA3pM,GAAA2qM,IAAAjB,EAAAE,GAAAD,EAAAC,IACA,IAAA/mB,GAAA,CACA,GAAArhH,GAAAqpI,GAAAhoB,GAAA7iL,GACAwrM,GAAAhqI,EAAA,IAAAA,EAAA,GAAA,GACAiqI,EAAAZ,GAAAW,EAAAhqI,EACAypI,IAAAQ,GACAA,EAAAf,GAAAe,EACA,IAGAC,GAHAxhJ,EAAAw/I,EAAAiC,GACAC,EAAA1hJ,EAAA,EAAA,GAAA,EACA2hJ,EAAAJ,EAAA,GAAAK,GAAAF,EAEAG,EAAAxxK,GAAA2vB,GAAA,GACA6hJ,IAAAH,EAAAD,GAAAE,GAAAA,EAAAD,EAAAlC,IACAgC,EAAAD,EAAA,GAAAK,IACAR,KAAAA,GAAAI,IACAG,GAAAA,EAAA,KAAA,IAAA,IAAAE,GAAAH,EAAAD,GAAAE,GAAAA,EAAAD,EAAAlC,IACAgC,GAAAD,EAAA,GAAAK,IACAT,KAAAA,GAAAK,IAEA/B,EAAA0B,KAAAA,GAAA1B,GACAA,EAAA2B,KAAAA,GAAA3B,KAEAoC,EACArC,EAAAiC,GACAjH,GAAAyG,GAAAzB,GAAAhF,GAAAyG,GAAAC,MAAAA,GAAA1B,GAEAhF,GAAAgF,EAAA0B,IAAA1G,GAAAyG,GAAAC,MAAAD,GAAAzB,GAGA0B,IAAAD,IACAzB,EAAAyB,KAAAA,GAAAzB,GACAA,EAAA0B,KAAAA,GAAA1B,IAEAA,EAAAiC,GACAjH,GAAAyG,GAAAzB,GAAAhF,GAAAyG,GAAAC,MAAAA,GAAA1B,GAEAhF,GAAAgF,EAAA0B,IAAA1G,GAAAyG,GAAAC,MAAAD,GAAAzB,OAKA50H,IAAAj0E,KAAAulD,IAAA+kJ,GAAAzB,EAAA0B,GAAA1B,GAEAC,GAAA0B,KAAAA,GAAA1B,GACAA,EAAA2B,KAAAA,GAAA3B,GACA9mB,GAAA7iL,EAAA2rM,GAAAjC,EAGA,QAAAsC,MACAC,GAAA36D,MAAAi6D;YAGA,QAAAW,MACA9lJ,GAAA,GAAA+kJ,GAAA/kJ,GAAA,GAAAglJ,GACAa,GAAA36D,MAAA45D,GACAroB,GAAA,KAGA,QAAAspB,IAAAzC,EAAAC,GACA,GAAA9mB,GAAA,CACA,GAAA34H,GAAAw/I,EAAAiC,EACAS,IAAAxqM,IAAA24B,GAAA2vB,GAAA,IAAAA,GAAAA,EAAA,EAAA,KAAA,KAAAA,OAEAmiJ,IAAA3C,EAAA4C,GAAA3C,CAEAP,IAAA93D,MAAAo4D,EAAAC,GACA4B,GAAA7B,EAAAC,GAGA,QAAA4C,MACAnD,GAAAj3G,YAGA,QAAAq6G,MACAL,GAAAE,GAAAC,IACAlD,GAAA/2G,UACA93D,GAAA6xK,IAAAK,KAAAtB,KAAAC,GAAA,MACAhlJ,GAAA,GAAA+kJ,GAAA/kJ,GAAA,GAAAglJ,GACAvoB,GAAA,KAMA,QAAA6hB,IAAAmF,EAAAuB,GACA,OAAAA,GAAAvB,GAAA,EAAAuB,EAAA,IAAAA,EAGA,QAAAsB,IAAAtuM,EAAA2O,GACA,MAAA3O,GAAA,GAAA2O,EAAA,GAGA,QAAA4/L,IAAAvmJ,EAAAtrD,GACA,MAAAsrD,GAAA,IAAAA,EAAA,GAAAA,EAAA,IAAAtrD,GAAAA,GAAAsrD,EAAA,GAAAtrD,EAAAsrD,EAAA,IAAAA,EAAA,GAAAtrD,EAGA,QAAA8xM,IAAAC,GACA,GAAAzyM,GAAAD,EAAAiE,EAAA2O,EAAAixD,EAAA8uI,EAAA5iJ,CAOA,IALAohJ,GAAAF,KAAAD,GAAAE,GAAAxlK,EAAAA,GACAivC,MACAm0H,GAAA4D,EAAAZ,IAGA9xM,EAAA26E,GAAA35E,OAAA,CAIA,IAHA25E,GAAAnpE,KAAA+gM,IAGAtyM,EAAA,EAAAgE,EAAA02E,GAAA,GAAA9W,GAAA5/D,GAAAhE,EAAAD,IAAAC,EACA2S,EAAA+nE,GAAA16E,GACAuyM,GAAAvuM,EAAA2O,EAAA,KAAA4/L,GAAAvuM,EAAA2O,EAAA,KACA23L,GAAAtmM,EAAA,GAAA2O,EAAA,IAAA23L,GAAAtmM,EAAA,GAAAA,EAAA,MAAAA,EAAA,GAAA2O,EAAA,IACA23L,GAAA33L,EAAA,GAAA3O,EAAA,IAAAsmM,GAAAtmM,EAAA,GAAAA,EAAA,MAAAA,EAAA,GAAA2O,EAAA,KAEAixD,EAAAn9D,KAAAzC,EAAA2O,EAMA,KAAA+/L,GAAAjnK,EAAAA,EAAA1rC,EAAA6jE,EAAA7iE,OAAA,EAAAf,EAAA,EAAAgE,EAAA4/D,EAAA7jE,GAAAC,GAAAD,EAAAiE,EAAA2O,IAAA3S,EACA2S,EAAAixD,EAAA5jE,IACA8vD,EAAAw6I,GAAAtmM,EAAA,GAAA2O,EAAA,KAAA+/L,IAAAA,EAAA5iJ,EAAAihJ,GAAAp+L,EAAA,GAAAq+L,GAAAhtM,EAAA,IAMA,MAFA02E,IAAA1uB,GAAA,KAEA+kJ,KAAAtlK,EAAAA,GAAAwlK,KAAAxlK,EAAAA,IACAqjD,IAAAA,MAAAA,IAAAA,QACAiiH,GAAAE,KAAAD,GAAAE,KA0BA,QAAAyB,IAAArD,EAAAC,GACAD,GAAAE,GAAAD,GAAAC,EACA,IAAAS,GAAAN,GAAAJ,EACAqD,IAAA3C,EAAAN,GAAAL,GAAAW,EAAA7B,GAAAkB,GAAAlB,GAAAmB,IAGA,QAAAqD,IAAAlyM,EAAAO,EAAAyT,KACAm+L,GACAC,KAAApyM,EAAAoyM,IAAAD,GACAE,KAAA9xM,EAAA8xM,IAAAF,GACAG,KAAAt+L,EAAAs+L,IAAAH,GAGA,QAAAI,MACAC,GAAAh8D,MAAAi8D,GAGA,QAAAA,IAAA7D,EAAAC,GACAD,GAAAE,GAAAD,GAAAC,EACA,IAAAS,GAAAN,GAAAJ,EACAz1B,IAAAm2B,EAAAN,GAAAL,GACAzI,GAAAoJ,EAAA7B,GAAAkB,GACA8D,GAAAhF,GAAAmB,GACA2D,GAAAh8D,MAAAm8D,GACAT,GAAA94B,GAAA+sB,GAAAuM,IAGA,QAAAC,IAAA/D,EAAAC,GACAD,GAAAE,GAAAD,GAAAC,EACA,IAAAS,GAAAN,GAAAJ,GACA7uM,EAAAuvM,EAAAN,GAAAL,GACAruM,EAAAgvM,EAAA7B,GAAAkB,GACA56L,EAAA05L,GAAAmB,GACAjuM,EAAAypL,GAAA7kC,IAAA5kJ,EAAAulM,GAAAnyL,EAAA0+L,GAAAnyM,GAAAK,GAAAA,EAAA8xM,GAAA1yM,EAAAo5K,GAAAplK,GAAApT,GAAAA,EAAAw4K,GAAA74K,EAAA4lM,GAAAnmM,GAAAY,GAAAw4K,GAAAp5K,EAAAmmM,GAAA5lM,EAAAmyM,GAAA1+L,EACA4+L,KAAAhyM,EACAiyM,IAAAjyM,GAAAw4K,IAAAA,GAAAp5K,IACA8yM,IAAAlyM,GAAAulM,IAAAA,GAAA5lM,IACAwyM,IAAAnyM,GAAA8xM,IAAAA,GAAA1+L,IACAk+L,GAAA94B,GAAA+sB,GAAAuM,IAGA,QAAAM,MACAR,GAAAh8D,MAAAy7D,GAKA,QAAAgB,MACAT,GAAAh8D,MAAA08D,GAGA,QAAAC,MACAC,GAAAC,GAAAC,IACAd,GAAAh8D,MAAAy7D,GAGA,QAAAiB,IAAAtE,EAAAC,GACAwE,GAAAzE,EAAA0E,GAAAzE,EACAD,GAAAE,GAAAD,GAAAC,GACA0D,GAAAh8D,MAAA48D,EACA,IAAA7D,GAAAN,GAAAJ,EACAz1B,IAAAm2B,EAAAN,GAAAL,GACAzI,GAAAoJ,EAAA7B,GAAAkB,GACA8D,GAAAhF,GAAAmB,GACAqD,GAAA94B,GAAA+sB,GAAAuM,IAGA,QAAAU,IAAAxE,EAAAC,GACAD,GAAAE,GAAAD,GAAAC,EACA,IAAAS,GAAAN,GAAAJ,GACA7uM,EAAAuvM,EAAAN,GAAAL,GACAruM,EAAAgvM,EAAA7B,GAAAkB,GACA56L,EAAA05L,GAAAmB,GACA0E,EAAApN,GAAAnyL,EAAA0+L,GAAAnyM,EACAizM,EAAAd,GAAA1yM,EAAAo5K,GAAAplK,EACAy/L,EAAAr6B,GAAA74K,EAAA4lM,GAAAnmM,EACAZ,EAAAomJ,GAAA+tD,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,GACA7yM,EAAA2sM,GAAAnuM,GACAO,EAAAP,IAAAwB,EAAAxB,CACAs0M,KAAA/zM,EAAA4zM,EACAI,IAAAh0M,EAAA6zM,EACAI,IAAAj0M,EAAA8zM,EACAb,IAAAhyM,EACAiyM,IAAAjyM,GAAAw4K,IAAAA,GAAAp5K,IACA8yM,IAAAlyM,GAAAulM,IAAAA,GAAA5lM,IACAwyM,IAAAnyM,GAAA8xM,IAAAA,GAAA1+L,IACAk+L,GAAA94B,GAAA+sB,GAAAuM,IAGA,QAAAmB,IAAAznB,GACA+lB,GAAAS,GACAR,GAAAC,GAAAC,GACAO,GAAAC,GAAAC,GACAW,GAAAC,GAAAC,GAAA,EACAzF,GAAA/hB,EAAAomB,GAEA,IAAAxyM,GAAA0zM,GACAnzM,EAAAozM,GACA3/L,EAAA4/L,GACAx0M,EAAAY,EAAAA,EAAAO,EAAAA,EAAAyT,EAAAA,CAGA,OAAA5U,GAAA00M,KACA9zM,EAAA6yM,GAAAtyM,EAAAuyM,GAAA9+L,EAAA++L,GAEAH,GAAAjB,KAAA3xM,EAAAoyM,GAAA7xM,EAAA8xM,GAAAr+L,EAAAs+L,KACAlzM,EAAAY,EAAAA,EAAAO,EAAAA,EAAAyT,EAAAA,GAEA8/L,KAAA1lH,IAAAA,MAGAi8F,GAAA9pL,EAAAP,GAAAgxM,GAAAzD,GAAAv5L,EAAAwxI,GAAApmJ,IAAA4xM,IAGA,QAAA+C,IAAA/zM,GACA,MAAA,YACA,MAAAA,IAIA,QAAAg0M,IAAA1wM,EAAA2O,GAEA,QAAA+hM,GAAAh0M,EAAAO,GACA,MAAAP,GAAAsD,EAAAtD,EAAAO,GAAA0R,EAAAjS,EAAA,GAAAA,EAAA,IAOA,MAJAsD,GAAA0zE,QAAA/kE,EAAA+kE,SAAAg9H,EAAAh9H,OAAA,SAAAh3E,EAAAO,GACA,OAAAP,EAAAiS,EAAA+kE,OAAAh3E,EAAAO,KAAA+C,EAAA0zE,OAAAh3E,EAAA,GAAAA,EAAA,MAGAg0M,EAGA,QAAAC,IAAArF,EAAAC,GACA,OAAApvK,GAAAmvK,GAAAtB,GAAAsB,EAAAllM,KAAAwa,OAAA0qL,EAAAsF,IAAAA,GAAAtF,EAAAC,GAKA,QAAAsF,IAAAC,EAAAC,EAAAC,GACA,OAAAF,GAAAF,IAAAG,GAAAC,EAAAN,GAAAO,GAAAH,GAAAI,GAAAH,EAAAC,IACAC,GAAAH,GACAC,GAAAC,EAAAE,GAAAH,EAAAC,GACAL,GAGA,QAAAQ,IAAAL,GACA,MAAA,UAAAxF,EAAAC,GACA,MAAAD,IAAAwF,GAAAxF,EAAAtB,GAAAsB,EAAAsF,GAAAtF,GAAAtB,GAAAsB,EAAAsF,GAAAtF,EAAAC,IAIA,QAAA0F,IAAAH,GACA,GAAAM,GAAAD,GAAAL,EAEA,OADAM,GAAA19H,OAAAy9H,IAAAL,GACAM,EAGA,QAAAF,IAAAH,EAAAC,GAMA,QAAAI,GAAA9F,EAAAC,GACA,GAAAU,GAAAN,GAAAJ,GACA7uM,EAAAivM,GAAAL,GAAAW,EACAhvM,EAAAmtM,GAAAkB,GAAAW,EACAv7L,EAAA05L,GAAAmB,GACAt7L,EAAAS,EAAA2gM,EAAA30M,EAAA40M,CACA,QACAvqB,GAAA9pL,EAAAs0M,EAAAthM,EAAAuhM,EAAA90M,EAAA20M,EAAA3gM,EAAA4gM,GACArH,GAAAh6L,EAAAshM,EAAAt0M,EAAAu0M,IAbA,GAAAH,GAAA1F,GAAAoF,GACAO,EAAAlH,GAAA2G,GACAQ,EAAA5F,GAAAqF,GACAQ,EAAApH,GAAA4G,EA0BA,OAZAI,GAAA19H,OAAA,SAAA43H,EAAAC,GACA,GAAAU,GAAAN,GAAAJ,GACA7uM,EAAAivM,GAAAL,GAAAW,EACAhvM,EAAAmtM,GAAAkB,GAAAW,EACAv7L,EAAA05L,GAAAmB,GACAt7L,EAAAS,EAAA6gM,EAAAt0M,EAAAu0M,CACA,QACAzqB,GAAA9pL,EAAAs0M,EAAA7gM,EAAA8gM,EAAA90M,EAAA20M,EAAAphM,EAAAqhM,GACArH,GAAAh6L,EAAAohM,EAAA30M,EAAA40M,KAIAF,EAGA,QAAAA,IAAAxnB,GAGA,QAAAt8C,GAAAowD,GAEA,MADAA,GAAA9T,EAAA8T,EAAA,GAAA8N,GAAA9N,EAAA,GAAA8N,IACA9N,EAAA,IAAAgQ,GAAAhQ,EAAA,IAAAgQ,GAAAhQ,EAQA,MAZA9T,GAAAinB,GAAAjnB,EAAA,GAAA4hB,GAAA5hB,EAAA,GAAA4hB,GAAA5hB,EAAA7sL,OAAA,EAAA6sL,EAAA,GAAA4hB,GAAA,GAOAl+D,EAAA55D,OAAA,SAAAgqH,GAEA,MADAA,GAAA9T,EAAAl2G,OAAAgqH,EAAA,GAAA8N,GAAA9N,EAAA,GAAA8N,IACA9N,EAAA,IAAAgQ,GAAAhQ,EAAA,IAAAgQ,GAAAhQ,GAGApwD,EAIA,QAAAmkE,IAAA5qI,EAAAg2F,EAAA/wG,EAAAhyB,EAAA8iI,EAAAzxC,GACA,GAAAr/D,EAAA,CACA,GAAA4lJ,GAAA/F,GAAA9uC,GACA80C,EAAAvH,GAAAvtC,GACA75I,EAAA8W,EAAAgyB,CACA,OAAA8wG,GACAA,EAAAC,EAAA/iI,EAAA82K,GACAzlF,EAAA0xC,EAAA75I,EAAA,IAEA45I,EAAAg1C,GAAAF,EAAA90C,GACAzxC,EAAAymF,GAAAF,EAAAvmF,IACArxF,EAAA,EAAA8iI,EAAAzxC,EAAAyxC,EAAAzxC,KAAAyxC,GAAA9iI,EAAA82K,IAEA,KAAA,GAAA19D,GAAA33I,EAAAqhK,EAAA9iI,EAAA,EAAAv+B,EAAA4vH,EAAA5vH,EAAA4vH,EAAA5vH,GAAAynB,EACAkwH,EAAAo5D,IAAAoF,GAAAC,EAAAhG,GAAApwM,IAAAo2M,EAAAvH,GAAA7uM,KACAsrE,EAAAqsE,MAAAA,EAAA,GAAAA,EAAA,KAKA,QAAA0+D,IAAAF,EAAAx+D,GACAA,EAAAq5D,GAAAr5D,GAAAA,EAAA,IAAAw+D,EACA7E,GAAA35D,EACA,IAAA2pB,GAAAktC,IAAA72D,EAAA,GACA,UAAAA,EAAA,GAAA,GAAA2pB,EAAAA,GAAA+zC,GAAAvC,IAAAuC,GAGA,QAAA5zC,MAQA,QAAA9pB,GAAAx2I,EAAAO,GACAm/I,EAAA35I,KAAA/F,EAAAktL,EAAAltL,EAAAO,IACAP,EAAA,IAAAgxM,GAAAhxM,EAAA,IAAAgxM,GAGA,QAAA1wC,KACA,GAAApgK,GAAA46K,EAAAj5K,MAAA1C,KAAAwH,WACAnH,EAAA2gK,EAAAt+J,MAAA1C,KAAAwH,WAAAmoM,GACA5pM,EAAAsmM,EAAA3pM,MAAA1C,KAAAwH,WAAAmoM,EAMA,OALApvD,MACAwtC,EAAAinB,IAAAj0M,EAAA,GAAA4uM,IAAA5uM,EAAA,GAAA4uM,GAAA,GAAA93H,OACA+9H,GAAA5qI,EAAA3qE,EAAA0F,EAAA,GACAhF,GAAAkG,KAAA,UAAA46L,aAAAthD,IACAA,EAAAwtC,EAAA,KACAhtL,EArBA,GAGAw/I,GACAwtC,EAJApS,EAAAi5B,IAAA,EAAA,IACA5zC,EAAA4zC,GAAA,IACAvI,EAAAuI,GAAA,GAGA5pI,GAAAqsE,MAAAA,EA+BA,OAZA8pB,GAAAwa,OAAA,SAAA/4K,GACA,MAAA4E,WAAAtG,QAAAy6K,EAAA,kBAAA/4K,GAAAA,EAAAgyM,KAAAhyM,EAAA,IAAAA,EAAA,KAAAu+J,GAAAwa,GAGAxa,EAAAH,OAAA,SAAAp+J,GACA,MAAA4E,WAAAtG,QAAA8/J,EAAA,kBAAAp+J,GAAAA,EAAAgyM,IAAAhyM,GAAAu+J,GAAAH,GAGAG,EAAAkrC,UAAA,SAAAzpM,GACA,MAAA4E,WAAAtG,QAAAmrM,EAAA,kBAAAzpM,GAAAA,EAAAgyM,IAAAhyM,GAAAu+J,GAAAkrC,GAGAlrC,EAGA,QAAA60C,MACA,GACAp/I,GADAqE,IAEA,QACAo8E,MAAA,SAAAx2I,EAAAO,GACAw1D,EAAAhwD,MAAA/F,EAAAO,KAEA82F,UAAA,WACAj9B,EAAAr0D,KAAAgwD,OAEAwhC,QAAAo2G,GACAyH,OAAA,WACAh7I,EAAA/5D,OAAA,GAAA+5D,EAAAr0D,KAAAq0D,EAAAzmD,MAAApI,OAAA6uD,EAAAlrD,WAEAkQ,OAAA,WACA,GAAAA,GAAAg7C,CAGA,OAFAA,MACArE,EAAA,KACA32C,IAKA,QAAAi2L,IAAA/xM,EAAA2O,GACA,MAAAwtB,IAAAn8B,EAAA,GAAA2O,EAAA,IAAA0/L,IAAAlyK,GAAAn8B,EAAA,GAAA2O,EAAA,IAAA0/L,GAGA,QAAA2D,IAAA9+D,EAAAovC,EAAA3uG,EAAA2sC,GACAzkH,KAAAa,EAAAw2I,EACAr3I,KAAA6U,EAAA4xK,EACAzmL,KAAAI,EAAA03E,EACA93E,KAAAP,EAAAglH,EACAzkH,KAAAQ,GAAA,EACAR,KAAAE,EAAAF,KAAA+F,EAAA,KAMA,QAAAqwM,IAAAC,EAAAC,EAAAC,EAAAzlB,EAAA9lH,GACA,GAEA7qE,GACAD,EAHAinL,KACAqvB,IAwBA,IApBAH,EAAAxwF,QAAA,SAAA4wF,GACA,MAAAv2M,EAAAu2M,EAAAv1M,OAAA,IAAA,GAAA,CACA,GAAAhB,GAAAW,EAAA+nL,EAAA6tB,EAAA,GAAAzpF,EAAAypF,EAAAv2M,EAKA,IAAAg2M,GAAAttB,EAAA57D,GAAA,CAEA,IADAhiD,EAAAktB,YACA/3F,EAAA,EAAAA,EAAAD,IAAAC,EAAA6qE,EAAAqsE,OAAAuxC,EAAA6tB,EAAAt2M,IAAA,GAAAyoL,EAAA,GAEA,YADA59G,GAAAotB,UAIA+uF,EAAAvgL,KAAA/F,EAAA,GAAAs1M,IAAAvtB,EAAA6tB,EAAA,MAAA,IACAD,EAAA5vM,KAAA/F,EAAAT,EAAA,GAAA+1M,IAAAvtB,EAAA,KAAA/nL,GAAA,IACAsmL,EAAAvgL,KAAA/F,EAAA,GAAAs1M,IAAAnpF,EAAAypF,EAAA,MAAA,IACAD,EAAA5vM,KAAA/F,EAAAT,EAAA,GAAA+1M,IAAAnpF,EAAA,KAAAnsH,GAAA,OAGAsmL,EAAAjmL,OAAA,CAMA,IAJAs1M,EAAA9kM,KAAA4kM,GACAI,GAAAvvB,GACAuvB,GAAAF,GAEAr2M,EAAA,EAAAD,EAAAs2M,EAAAt1M,OAAAf,EAAAD,IAAAC,EACAq2M,EAAAr2M,GAAAV,EAAA82M,GAAAA,CAOA,KAJA,GACA9vB,GACApvC,EAFAzyI,EAAAuiL,EAAA,KAIA,CAIA,IAFA,GAAAhvH,GAAAvzD,EACA+xM,GAAA,EACAx+I,EAAA33D,GAAA,IAAA23D,EAAAA,EAAAj4D,KAAA0E,EAAA,MACA6hL,GAAAtuH,EAAAtjD,EACAm2D,EAAAktB,WACA,GAAA,CAEA,GADA//B,EAAA33D,EAAA23D,EAAA/3D,EAAAI,GAAA,EACA23D,EAAA14D,EAAA,CACA,GAAAk3M,EACA,IAAAx2M,EAAA,EAAAD,EAAAumL,EAAAvlL,OAAAf,EAAAD,IAAAC,EAAA6qE,EAAAqsE,OAAAA,EAAAovC,EAAAtmL,IAAA,GAAAk3I,EAAA,QAEAy5C,GAAA34H,EAAAt3D,EAAAs3D,EAAAj4D,EAAAW,EAAA,EAAAmqE,EAEA7S,GAAAA,EAAAj4D,MACA,CACA,GAAAy2M,EAEA,IADAlwB,EAAAtuH,EAAApyD,EAAA8O,EACA1U,EAAAsmL,EAAAvlL,OAAA,EAAAf,GAAA,IAAAA,EAAA6qE,EAAAqsE,OAAAA,EAAAovC,EAAAtmL,IAAA,GAAAk3I,EAAA,QAEAy5C,GAAA34H,EAAAt3D,EAAAs3D,EAAApyD,EAAAlF,GAAA,EAAAmqE,EAEA7S,GAAAA,EAAApyD,EAEAoyD,EAAAA,EAAA/3D,EACAqmL,EAAAtuH,EAAAtjD,EACA8hM,GAAAA,SACAx+I,EAAA33D,EACAwqE,GAAAotB,YAIA,QAAAs+G,IAAAh2J,GACA,GAAAxgD,EAAAwgD,EAAAx/C,OAAA,CAKA,IAJA,GAAAhB,GAGA4S,EAFA3S,EAAA,EACAgE,EAAAu8C,EAAA,KAEAvgD,EAAAD,GACAiE,EAAAjE,EAAA4S,EAAA4tC,EAAAvgD,GACA2S,EAAA/M,EAAA5B,EACAA,EAAA2O,CAEA3O,GAAAjE,EAAA4S,EAAA4tC,EAAA,GACA5tC,EAAA/M,EAAA5B,GAKA,QAAAyyM,IAAAhV,EAAAvqD,GACA,GAAAo4D,GAAAp4D,EAAA,GACAq4D,EAAAr4D,EAAA,GACAg5D,EAAA9B,GAAAmB,GACAnoI,GAAAgnI,GAAAkB,IAAAK,GAAAL,GAAA,GACAhF,EAAA,EACAoM,EAAA,CAEAC,IAAAl9L,QAEA,IAAAy2L,EAAAX,EAAArB,GAAAmE,IACA,IAAAnC,IAAAX,GAAArB,GAAAmE,GAEA,KAAA,GAAAryM,GAAA,EAAAD,EAAA0hM,EAAA1gM,OAAAf,EAAAD,IAAAC,EACA,GAAAF,GAAAsgJ,EAAAqhD,EAAAzhM,IAAAe,OASA,IAAA,GARAq/I,GACAtgJ,EACA+7L,EAAAz7C,EAAAtgJ,EAAA,GACA2vM,EAAA5T,EAAA,GACAoV,EAAApV,EAAA,GAAA,EAAA+T,GACAC,EAAAzB,GAAA6C,GACAvB,EAAAC,GAAAsB,GAEA5vM,EAAA,EAAAA,EAAAvB,IAAAuB,EAAAouM,EAAAuB,EAAAnB,EAAA+G,EAAAlH,EAAAmH,EAAAhb,EAAAL,EAAA,CACA,GAAAA,GAAAp7C,EAAA/+I,GACA2vM,EAAAxV,EAAA,GACA0V,EAAA1V,EAAA,GAAA,EAAAoU,GACAgH,EAAAxI,GAAA8C,GACA2F,EAAAlH,GAAAuB,GACAphJ,EAAAkhJ,EAAAvB,EACA+B,EAAA1hJ,GAAA,EAAA,GAAA,EACAgnJ,EAAAtF,EAAA1hJ,EACA6hJ,EAAAmF,EAAA9I,GACA/5L,EAAA47L,EAAA+G,CAOA,IALAD,GAAAnvM,IAAAujL,GAAA92K,EAAAu9L,EAAApD,GAAA0I,GAAApH,EAAAmH,EAAA5iM,EAAA07L,GAAAmH,KACAxM,GAAAqH,EAAA7hJ,EAAA0hJ,EAAAoD,GAAA9kJ,EAIA6hJ,EAAAlC,GAAAH,EAAA0B,GAAA1B,EAAA,CACA,GAAA3rC,GAAA8sC,GAAAF,GAAA1U,GAAA0U,GAAA/U,GACAqV,IAAAltC,EACA,IAAA5iH,GAAA0vJ,GAAArpI,EAAAu8F,EACAktC,IAAA9vJ,EACA,IAAAg2J,IAAApF,EAAA7hJ,GAAA,GAAA,EAAA,GAAAm+I,GAAAltJ,EAAA,KACAwuJ,EAAAwH,GAAAxH,IAAAwH,IAAApzC,EAAA,IAAAA,EAAA,OACA+yC,GAAA/E,EAAA7hJ,GAAA,EAAA,GAAA,IAiBA,OAAAw6I,GAAA+H,IAAA/H,EAAA+H,IAAAsE,IAAAtE,IAAA,EAAAqE,EAGA,QAAAL,IAAAW,EAAA73I,EAAAwxH,EAAAlsL,GACA,MAAA,UAAAwyM,GA+CA,QAAA//D,GAAAo4D,EAAAC,GACAyH,EAAA1H,EAAAC,IAAA0H,EAAA//D,MAAAo4D,EAAAC,GAGA,QAAA2H,GAAA5H,EAAAC,GACA94I,EAAAygF,MAAAo4D,EAAAC,GAGA,QAAAx3G,KACAs+G,EAAAn/D,MAAAggE,EACAzgJ,EAAAshC,YAGA,QAAAE,KACAo+G,EAAAn/D,MAAAA,EACAzgF,EAAAwhC,UAGA,QAAAk/G,GAAA7H,EAAAC,GACAnvD,EAAA35I,MAAA6oM,EAAAC,IACA6H,EAAAlgE,MAAAo4D,EAAAC,GAGA,QAAA8H,KACAD,EAAAr/G,YACAqoD,KAGA,QAAAk3D,KACAH,EAAA/2D,EAAA,GAAA,GAAAA,EAAA,GAAA,IACAg3D,EAAAn/G,SAEA,IAEAj4F,GAAAF,EACAw2M,EACAp/D,EAJA3vB,EAAA6vF,EAAA7vF,QACAgwF,EAAAC,EAAA13L,SACA/f,EAAAw3M,EAAAx2M,MAQA,IAJAq/I,EAAA/rI,MACAotL,EAAAh7L,KAAA25I,GACAA,EAAA,KAEArgJ,EAGA,GAAA,EAAAwnH,GAEA,GADA+uF,EAAAiB,EAAA,IACAz3M,EAAAw2M,EAAAv1M,OAAA,GAAA,EAAA,CAGA,IAFA02M,IAAAR,EAAAtI,eAAA8I,GAAA,GACAR,EAAAl/G,YACA/3F,EAAA,EAAAA,EAAAF,IAAAE,EAAAi3M,EAAA//D,OAAAA,EAAAo/D,EAAAt2M,IAAA,GAAAk3I,EAAA,GACA+/D,GAAAh/G,eAOAl4F,GAAA,GAAA,EAAAwnH,GAAAgwF,EAAA9wM,KAAA8wM,EAAAljM,MAAApI,OAAAsrM,EAAA3nM,UAEAsmM,EAAAzvM,KAAA8wM,EAAA71M,OAAAg2M,KA1GA,GAIAjW,GACAyU,EACA91D,EANA3pF,EAAA0I,EAAA83I,GACAO,EAAA3B,KACAuB,EAAAj4I,EAAAq4I,GACAC,GAAA,EAKApB,GACAn/D,MAAAA,EACAn/C,UAAAA,EACAE,QAAAA,EACA02G,aAAA,WACA0H,EAAAn/D,MAAAigE,EACAd,EAAAt+G,UAAAs/G,EACAhB,EAAAp+G,QAAAq/G,EACApB,KACAzU,MAEAmN,WAAA,WACAyH,EAAAn/D,MAAAA,EACAm/D,EAAAt+G,UAAAA,EACAs+G,EAAAp+G,QAAAA,EACAi+G,EAAA3wM,EAAA2wM,EACA,IAAAE,GAAAK,GAAAhV,EAAAh9L,EACAyxM,GAAAn1M,QACA02M,IAAAR,EAAAtI,eAAA8I,GAAA,GACAxB,GAAAC,EAAAC,GAAAC,EAAAzlB,EAAAsmB,IACAb,IACAqB,IAAAR,EAAAtI,eAAA8I,GAAA,GACAR,EAAAl/G,YACA44F,EAAA,KAAA,KAAA,EAAAsmB,GACAA,EAAAh/G,WAEAw/G,IAAAR,EAAArI,aAAA6I,GAAA,GACAvB,EAAAzU,EAAA,MAEAkW,OAAA,WACAV,EAAAtI,eACAsI,EAAAl/G,YACA44F,EAAA,KAAA,KAAA,EAAAsmB,GACAA,EAAAh/G,UACAg/G,EAAArI,cAmEA,OAAAyH,IAIA,QAAAqB,IAAApB,GACA,MAAAA,GAAAv1M,OAAA,EAKA,QAAAo1M,IAAAnyM,EAAA2O,GACA,QAAA3O,EAAAA,EAAAtD,GAAA,GAAA,EAAAsD,EAAA,GAAAkqM,GAAAmE,GAAAnE,GAAAlqM,EAAA,MACA2O,EAAAA,EAAAjS,GAAA,GAAA,EAAAiS,EAAA,GAAAu7L,GAAAmE,GAAAnE,GAAAv7L,EAAA,IAaA,QAAAilM,IAAA/sI,GACA,GAGA08C,GAHAkoF,EAAA3gH,IACAmiH,EAAAniH,IACA+oH,EAAA/oH,GAGA,QACAiJ,UAAA,WACAltB,EAAAktB,YACAwvB,EAAA,GAEA2vB,MAAA,SAAA85D,EAAAE,GACA,GAAA4G,GAAA9G,EAAA,EAAAhD,IAAAA,GACAl+I,EAAA3vB,GAAA6wK,EAAAvB,EACAtvK,IAAA2vB,EAAAk+I,IAAAqE,IACAxnI,EAAAqsE,MAAAu4D,EAAAwB,GAAAA,EAAAC,GAAA,EAAA,EAAAhD,IAAAA,IACArjI,EAAAqsE,MAAA2gE,EAAA5G,GACApmI,EAAAotB,UACAptB,EAAAktB,YACAltB,EAAAqsE,MAAA4gE,EAAA7G,GACApmI,EAAAqsE,MAAA85D,EAAAC,GACA1pF,EAAA,GACAswF,IAAAC,GAAAhoJ,GAAAk+I,KACA7tK,GAAAsvK,EAAAoI,GAAAxF,KAAA5C,GAAAoI,EAAAxF,IACAlyK,GAAA6wK,EAAA8G,GAAAzF,KAAArB,GAAA8G,EAAAzF,IACApB,EAAA8G,GAAAtI,EAAAwB,EAAAD,EAAAE,GACArmI,EAAAqsE,MAAA2gE,EAAA5G,GACApmI,EAAAotB,UACAptB,EAAAktB,YACAltB,EAAAqsE,MAAA4gE,EAAA7G,GACA1pF,EAAA,GAEA18C,EAAAqsE,MAAAu4D,EAAAuB,EAAAC,EAAAC,GACA2G,EAAAC,GAEA7/G,QAAA,WACAptB,EAAAotB,UACAw3G,EAAAwB,EAAAniH,KAEAy4B,MAAA,WACA,MAAA,GAAAA,IAKA,QAAAwwF,IAAAtI,EAAAwB,EAAAD,EAAAE,GACA,GAAAxB,GACAmH,EACAmB,EAAA5J,GAAAqB,EAAAuB,EACA,OAAA7wK,IAAA63K,GAAA3F,GACAvkB,IAAAsgB,GAAA6C,IAAA4F,EAAAlH,GAAAuB,IAAA9C,GAAA4C,GACA5C,GAAA8C,IAAAxB,EAAAC,GAAAsB,IAAA7C,GAAAqB,KACAC,EAAAmH,EAAAmB,KACA/G,EAAAC,GAAA,EAGA,QAAA+G,IAAApjL,EAAAmI,EAAAc,EAAA+sC,GACA,GAAA0kI,EACA,IAAA,MAAA16K,EACA06K,EAAAzxK,EAAAowK,GACArjI,EAAAqsE,OAAA82D,GAAAuB,GACA1kI,EAAAqsE,MAAA,EAAAq4D,GACA1kI,EAAAqsE,MAAA82D,GAAAuB,GACA1kI,EAAAqsE,MAAA82D,GAAA,GACAnjI,EAAAqsE,MAAA82D,IAAAuB,GACA1kI,EAAAqsE,MAAA,GAAAq4D,GACA1kI,EAAAqsE,OAAA82D,IAAAuB,GACA1kI,EAAAqsE,OAAA82D,GAAA,GACAnjI,EAAAqsE,OAAA82D,GAAAuB,OACA,IAAApvK,GAAAtL,EAAA,GAAAmI,EAAA,IAAAq1K,GAAA,CACA,GAAA/C,GAAAz6K,EAAA,GAAAmI,EAAA,GAAAgxK,IAAAA,EACAuB,GAAAzxK,EAAAwxK,EAAA,EACAzkI,EAAAqsE,OAAAo4D,EAAAC,GACA1kI,EAAAqsE,MAAA,EAAAq4D,GACA1kI,EAAAqsE,MAAAo4D,EAAAC,OAEA1kI,GAAAqsE,MAAAl6G,EAAA,GAAAA,EAAA,IAIA,QAAAk7K,IAAAr3C,GAMA,QAAA8vB,GAAA97J,EAAAmI,EAAAc,EAAA+sC,GACA4qI,GAAA5qI,EAAAg2F,EAAA/wG,EAAAhyB,EAAAjJ,EAAAmI,GAGA,QAAAlO,GAAAwgL,EAAAC,GACA,MAAAI,IAAAL,GAAAK,GAAAJ,GAAAv1E,EAOA,QAAA76D,GAAA0L,GACA,GAAAgxH,GACAsc,EACAxsB,EACAysB,EACA7wF,CACA,QACAxvB,UAAA,WACAqgH,EAAAzsB,GAAA,EACApkE,EAAA,GAEA2vB,MAAA,SAAAo4D,EAAAC,GACA,GACA8I,GADA7c,GAAA8T,EAAAC,GAEAlvM,EAAAyuB,EAAAwgL,EAAAC,GACA3uM,EAAA03M,EACAj4M,EAAA,EAAAogC,EAAA6uK,EAAAC,GACAlvM,EAAAogC,EAAA6uK,GAAAA,EAAA,EAAAtB,IAAAA,IAAAuB,GAAA,CAYA,KAXA1T,IAAAuc,EAAAzsB,EAAAtrL,IAAAwqE,EAAAktB,YAGA13F,IAAAsrL,MACA0sB,EAAAE,EAAA1c,EAAAL,KACAua,GAAAla,EAAAwc,IAAAtC,GAAAva,EAAA6c,MACA7c,EAAA,IAAA6W,GACA7W,EAAA,IAAA6W,GACAhyM,EAAAyuB,EAAA0sK,EAAA,GAAAA,EAAA,KAGAn7L,IAAAsrL,EACApkE,EAAA,EACAlnH,GAEAwqE,EAAAktB,YACAsgH,EAAAE,EAAA/c,EAAAK,GACAhxH,EAAAqsE,MAAAmhE,EAAA,GAAAA,EAAA,MAGAA,EAAAE,EAAA1c,EAAAL,GACA3wH,EAAAqsE,MAAAmhE,EAAA,GAAAA,EAAA,IACAxtI,EAAAotB,WAEA4jG,EAAAwc,MACA,IAAAG,GAAA3c,GAAAyc,EAAAj4M,EAAA,CACA,GAAAd,EAGAqB,GAAAu3M,KAAA54M,EAAAg5M,EAAA/c,EAAAK,GAAA,MACAt0E,EAAA,EACA+wF,GACAztI,EAAAktB,YACAltB,EAAAqsE,MAAA33I,EAAA,GAAA,GAAAA,EAAA,GAAA,IACAsrE,EAAAqsE,MAAA33I,EAAA,GAAA,GAAAA,EAAA,GAAA,IACAsrE,EAAAotB,YAEAptB,EAAAqsE,MAAA33I,EAAA,GAAA,GAAAA,EAAA,GAAA,IACAsrE,EAAAotB,UACAptB,EAAAktB,YACAltB,EAAAqsE,MAAA33I,EAAA,GAAA,GAAAA,EAAA,GAAA,OAIAc,GAAAw7L,GAAAka,GAAAla,EAAAL,IACA3wH,EAAAqsE,MAAAskD,EAAA,GAAAA,EAAA,IAEAK,EAAAL,EAAA7P,EAAAtrL,EAAA83M,EAAAv3M,GAEAq3F,QAAA,WACA0zF,GAAA9gH,EAAAotB,UACA4jG,EAAA,MAIAt0E,MAAA,WACA,MAAAA,IAAA6wF,GAAAzsB,IAAA,IAMA,QAAA4sB,GAAAv0M,EAAA2O,EAAA8lM,GACA,GAAAC,GAAAnI,GAAAvsM,GACA20M,EAAApI,GAAA59L,GAIA6lK,GAAA,EAAA,EAAA,GACAogC,EAAAnI,GAAAiI,EAAAC,GACAE,EAAArI,GAAAoI,EAAAA,GACAE,EAAAF,EAAA,GACAG,EAAAF,EAAAC,EAAAA,CAGA,KAAAC,EAAA,OAAAN,GAAAz0M,CAEA,IAAAg1M,GAAAh/E,EAAA6+E,EAAAE,EACAE,GAAAj/E,EAAA8+E,EAAAC,EACAG,EAAAzI,GAAAj4B,EAAAogC,GACAxkM,EAAAu8L,GAAAn4B,EAAAwgC,EAEAtI,IAAAt8L,EADAu8L,GAAAiI,EAAAK,GAIA,IAAAx3M,GAAAy3M,EACA53M,EAAAkvM,GAAAp8L,EAAA3S,GACA03M,EAAA3I,GAAA/uM,EAAAA,GACA2tH,EAAA9tH,EAAAA,EAAA63M,GAAA3I,GAAAp8L,EAAAA,GAAA,EAEA,MAAAg7G,EAAA,GAAA,CAEA,GAAA7vH,GAAA2mJ,GAAA92B,GACA96G,EAAAq8L,GAAAlvM,IAAAH,EAAA/B,GAAA45M,EAIA,IAHAzI,GAAAp8L,EAAAF,GACAE,EAAAg8L,GAAAh8L,IAEAmkM,EAAA,MAAAnkM,EAGA,IAIAI,GAJA+6L,EAAAzrM,EAAA,GACAgtM,EAAAr+L,EAAA,GACAs+L,EAAAjtM,EAAA,GACAktM,EAAAv+L,EAAA,EAGAq+L,GAAAvB,IAAA/6L,EAAA+6L,EAAAA,EAAAuB,EAAAA,EAAAt8L,EAEA,IAAAo7C,GAAAkhJ,EAAAvB,EACA2J,EAAAj5K,GAAA2vB,EAAAk+I,IAAAqE,GACAgH,EAAAD,GAAAtpJ,EAAAuiJ,EAKA,KAHA+G,GAAAlI,EAAAD,IAAAv8L,EAAAu8L,EAAAA,EAAAC,EAAAA,EAAAx8L,GAGA2kM,EACAD,EACAnI,EAAAC,EAAA,EAAA58L,EAAA,IAAA6rB,GAAA7rB,EAAA,GAAAm7L,GAAA4C,GAAApB,EAAAC,GACAD,GAAA38L,EAAA,IAAAA,EAAA,IAAA48L,EACAphJ,EAAAk+I,IAAAyB,GAAAn7L,EAAA,IAAAA,EAAA,IAAA08L,GAAA,CACA,GAAAxvC,GAAAmvC,GAAAlvM,IAAAH,EAAA/B,GAAA45M,EAEA,OADAzI,IAAAlvC,EAAAptJ,IACAE,EAAAg8L,GAAA9uC,MAMA,QAAA/gI,GAAA6uK,EAAAC,GACA,GAAArvM,GAAAo4M,EAAAz3C,EAAAmtC,GAAAntC,EACApgI,EAAA,CAKA,OAJA6uK,IAAApvM,EAAAugC,GAAA,EACA6uK,EAAApvM,IAAAugC,GAAA,GACA8uK,GAAArvM,EAAAugC,GAAA,EACA8uK,EAAArvM,IAAAugC,GAAA,GACAA,EA1KA,GAAAu5F,GAAA21E,GAAA9uC,GACA/wG,EAAA,EAAA0/I,GACA8I,EAAAt+E,EAAA,EACAw+E,EAAAr4K,GAAA65F,GAAAq4E,EA0KA,OAAAgE,IAAAvnL,EAAAqwC,EAAAwxH,EAAA2nB,GAAA,GAAAz3C,KAAAmtC,GAAAntC,EAAAmtC,KAGA,QAAA7uI,IAAAn7D,EAAA2O,EAAAmnK,EAAA+sB,EAAA7kC,EAAAC,GACA,GAQA/hK,GARAo5M,EAAAt1M,EAAA,GACAu1M,EAAAv1M,EAAA,GACAw1M,EAAA7mM,EAAA,GACA4uI,EAAA5uI,EAAA,GACAiuJ,EAAA,EACAzxC,EAAA,EACA1nC,EAAA+xH,EAAAF,EACA3xH,EAAA45D,EAAAg4D,CAIA,IADAr5M,EAAA45K,EAAAw/B,EACA7xH,KAAAvnF,EAAA,GAAA,CAEA,GADAA,GAAAunF,EACAA,EAAA,EAAA,CACA,GAAAvnF,EAAA0gK,EAAA,MACA1gK,GAAAivH,IAAAA,EAAAjvH,OACA,IAAAunF,EAAA,EAAA,CACA,GAAAvnF,EAAAivH,EAAA,MACAjvH,GAAA0gK,IAAAA,EAAA1gK,GAIA,GADAA,EAAA8hK,EAAAs3C,EACA7xH,KAAAvnF,EAAA,GAAA,CAEA,GADAA,GAAAunF,EACAA,EAAA,EAAA,CACA,GAAAvnF,EAAAivH,EAAA,MACAjvH,GAAA0gK,IAAAA,EAAA1gK,OACA,IAAAunF,EAAA,EAAA,CACA,GAAAvnF,EAAA0gK,EAAA,MACA1gK,GAAAivH,IAAAA,EAAAjvH,GAIA,GADAA,EAAA2mM,EAAA0S,EACA5xH,KAAAznF,EAAA,GAAA,CAEA,GADAA,GAAAynF,EACAA,EAAA,EAAA,CACA,GAAAznF,EAAA0gK,EAAA,MACA1gK,GAAAivH,IAAAA,EAAAjvH,OACA,IAAAynF,EAAA,EAAA,CACA,GAAAznF,EAAAivH,EAAA,MACAjvH,GAAA0gK,IAAAA,EAAA1gK,GAIA,GADAA,EAAA+hK,EAAAs3C,EACA5xH,KAAAznF,EAAA,GAAA,CAEA,GADAA,GAAAynF,EACAA,EAAA,EAAA,CACA,GAAAznF,EAAAivH,EAAA,MACAjvH,GAAA0gK,IAAAA,EAAA1gK,OACA,IAAAynF,EAAA,EAAA,CACA,GAAAznF,EAAA0gK,EAAA,MACA1gK,GAAAivH,IAAAA,EAAAjvH,GAKA,MAFA0gK,GAAA,IAAA58J,EAAA,GAAAs1M,EAAA14C,EAAAn5E,EAAAzjF,EAAA,GAAAu1M,EAAA34C,EAAAj5E,GACAwnC,EAAA,IAAAx8G,EAAA,GAAA2mM,EAAAnqF,EAAA1nC,EAAA90E,EAAA,GAAA4mM,EAAApqF,EAAAxnC,IACA,MAQA,QAAA8xH,IAAA3/B,EAAA+sB,EAAA7kC,EAAAC,GAEA,QAAAnzI,GAAApuB,EAAAO,GACA,MAAA64K,IAAAp5K,GAAAA,GAAAshK,GAAA6kC,GAAA5lM,GAAAA,GAAAghK,EAGA,QAAA0uB,GAAA97J,EAAAmI,EAAAc,EAAA+sC,GACA,GAAA7mE,GAAA,EAAA4kE,EAAA,CACA,IAAA,MAAA/zC,IACA7wB,EAAA01M,EAAA7kL,EAAAiJ,OAAA8qC,EAAA8wI,EAAA18K,EAAAc,KACA67K,EAAA9kL,EAAAmI,GAAA,EAAAc,EAAA,EACA,GAAA+sC,EAAAqsE,MAAA,IAAAlzI,GAAA,IAAAA,EAAA81K,EAAA9X,EAAAh+J,EAAA,EAAAi+J,EAAA4kC,UACA7iM,GAAAA,EAAA85B,EAAA,GAAA,KAAA8qC,OAEAiC,GAAAqsE,MAAAl6G,EAAA,GAAAA,EAAA,IAIA,QAAA08K,GAAA9zM,EAAAk4B,GACA,MAAAqC,IAAAv6B,EAAA,GAAAk0K,GAAAu4B,GAAAv0K,EAAA,EAAA,EAAA,EACAqC,GAAAv6B,EAAA,GAAAo8J,GAAAqwC,GAAAv0K,EAAA,EAAA,EAAA,EACAqC,GAAAv6B,EAAA,GAAAihM,GAAAwL,GAAAv0K,EAAA,EAAA,EAAA,EACAA,EAAA,EAAA,EAAA,EAGA,QAAAq4K,GAAAnyM,EAAA2O,GACA,MAAAgnM,GAAA31M,EAAAtD,EAAAiS,EAAAjS,GAGA,QAAAi5M,GAAA31M,EAAA2O,GACA,GAAAinM,GAAAF,EAAA11M,EAAA,GACAo3C,EAAAs+J,EAAA/mM,EAAA,EACA,OAAAinM,KAAAx+J,EAAAw+J,EAAAx+J,EACA,IAAAw+J,EAAAjnM,EAAA,GAAA3O,EAAA,GACA,IAAA41M,EAAA51M,EAAA,GAAA2O,EAAA,GACA,IAAAinM,EAAA51M,EAAA,GAAA2O,EAAA,GACAA,EAAA,GAAA3O,EAAA,GAGA,MAAA,UAAA6mE,GAmBA,QAAAqsE,GAAAx2I,EAAAO,GACA6tB,EAAApuB,EAAAO,IAAA44M,EAAA3iE,MAAAx2I,EAAAO,GAGA,QAAA64M,KAGA,IAAA,GAFApD,GAAA,EAEA12M,EAAA,EAAAD,EAAA0hM,EAAA1gM,OAAAf,EAAAD,IAAAC,EACA,IAAA,GAAAw6C,GAAAouB,EAAAw3E,EAAAqhD,EAAAzhM,GAAAqB,EAAA,EAAAvB,EAAAsgJ,EAAAr/I,OAAAm2I,EAAAkJ,EAAA,GAAA0vC,EAAA54C,EAAA,GAAA+4C,EAAA/4C,EAAA,GAAA71I,EAAAvB,IAAAuB,EACAm5C,EAAAs1I,EAAAlnH,EAAAqnH,EAAA/4C,EAAAkJ,EAAA/+I,GAAAyuL,EAAA54C,EAAA,GAAA+4C,EAAA/4C,EAAA,GACAtuE,GAAAq5F,EAAAguB,EAAAhuB,IAAA6tB,EAAAt1I,IAAAynH,EAAAr5F,IAAAqnH,EAAArnH,IAAAkxG,EAAAt/H,MAAAk8J,EACAzmB,GAAAhuB,IAAA6tB,EAAAt1I,IAAAynH,EAAAr5F,IAAAqnH,EAAArnH,IAAAkxG,EAAAt/H,MAAAk8J,CAIA,OAAAA,GAIA,QAAA/H,KACAkL,EAAAE,EAAA7D,KAAAzU,KAAAl6E,GAAA,EAGA,QAAAqnF,KACA,GAAAwH,GAAA0D,IACAE,EAAAzyF,GAAA6uF,EACAtnL,GAAAonL,EAAA3wM,EAAA2wM,IAAAn1M,QACAi5M,GAAAlrL,KACA+7C,EAAA8jI,eACAqL,IACAnvI,EAAAktB,YACA44F,EAAA,KAAA,KAAA,EAAA9lH,GACAA,EAAAotB,WAEAnpE,GACAmnL,GAAAC,EAAAC,EAAAC,EAAAzlB,EAAA9lH,GAEAA,EAAA+jI,cAEAiL,EAAAhvI,EAAAqrI,EAAAzU,EAAArhD,EAAA,KAGA,QAAAroD,KACAkiH,EAAA/iE,MAAAi6D,EACA1P,GAAAA,EAAAh7L,KAAA25I,MACA/uI,GAAA,EACA6oM,GAAA,EACAC,EAAAC,EAAAtrH,IAMA,QAAAmJ,KACAi+G,IACA/E,EAAAkJ,EAAAC,GACAC,GAAAL,GAAAH,EAAAjE,SACAI,EAAAzvM,KAAAszM,EAAAj6L,WAEAm6L,EAAA/iE,MAAAA,EACAgjE,GAAAL,EAAA5hH,UAGA,QAAAk5G,GAAAzwM,EAAAO,GACA,GAAAZ,GAAAyuB,EAAApuB,EAAAO,EAEA,IADAwgM,GAAArhD,EAAA35I,MAAA/F,EAAAO,IACAoQ,EACAgpM,EAAA35M,EAAA45M,EAAAr5M,EAAAs5M,EAAAl6M,EACAgR,GAAA,EACAhR,IACAw5M,EAAA9hH,YACA8hH,EAAA3iE,MAAAx2I,EAAAO,QAGA,IAAAZ,GAAA65M,EAAAL,EAAA3iE,MAAAx2I,EAAAO,OACA,CACA,GAAA+C,IAAAm2M,EAAA/vM,KAAAC,IAAA2zJ,GAAA5zJ,KAAAyuD,IAAAolG,GAAAk8C,IAAAC,EAAAhwM,KAAAC,IAAA2zJ,GAAA5zJ,KAAAyuD,IAAAolG,GAAAm8C,KACAznM,GAAAjS,EAAA0J,KAAAC,IAAA2zJ,GAAA5zJ,KAAAyuD,IAAAolG,GAAAv9J,IAAAO,EAAAmJ,KAAAC,IAAA2zJ,GAAA5zJ,KAAAyuD,IAAAolG,GAAAh9J,IACAk+D,IAAAn7D,EAAA2O,EAAAmnK,EAAA+sB,EAAA7kC,EAAAC,IACAi4C,IACAL,EAAA9hH,YACA8hH,EAAA3iE,MAAAlzI,EAAA,GAAAA,EAAA,KAEA61M,EAAA3iE,MAAAvkI,EAAA,GAAAA,EAAA,IACAtS,GAAAw5M,EAAA5hH,UACAsvB,GAAA,GACAlnH,IACAw5M,EAAA9hH,YACA8hH,EAAA3iE,MAAAx2I,EAAAO,GACAsmH,GAAA,GAIA4yF,EAAAz5M,EAAA05M,EAAAn5M,EAAAi5M,EAAA75M,EA/GA,GAEA61M,GACAzU,EACArhD,EACAi6D,EAAAC,EAAAC,EACAJ,EAAAC,EAAAF,EACA7oM,EACAk2G,EARAsyF,EAAAhvI,EACAkvI,EAAAlE,KASAoE,GACA/iE,MAAAA,EACAn/C,UAAAA,EACAE,QAAAA,EACA02G,aAAAA,EACAC,WAAAA,EAmGA,OAAAqL,IAIA,QAAAO,MACA,GAIAz9L,GACA09L,EACApE,EANAv8B,EAAA,EACA+sB,EAAA,EACA7kC,EAAA,IACAC,EAAA,GAKA,OAAAo0C,IACAxrI,OAAA,SAAAA,GACA,MAAA9tD,IAAA09L,IAAA5vI,EAAA9tD,EAAAA,EAAA08L,GAAA3/B,EAAA+sB,EAAA7kC,EAAAC,GAAAw4C,EAAA5vI,IAEA4Q,OAAA,SAAAh5E,GACA,MAAA4E,WAAAtG,QAAA+4K,GAAAr3K,EAAA,GAAA,GAAAokM,GAAApkM,EAAA,GAAA,GAAAu/J,GAAAv/J,EAAA,GAAA,GAAAw/J,GAAAx/J,EAAA,GAAA,GAAAsa,EAAA09L,EAAA,KAAApE,KAAAv8B,EAAA+sB,IAAA7kC,EAAAC,MAmBA,QAAAy4C,MACAC,GAAAzjE,MAAA0jE,GACAD,GAAA1iH,QAAA4iH,GAGA,QAAAA,MACAF,GAAAzjE,MAAAyjE,GAAA1iH,QAAAo2G,GAGA,QAAAuM,IAAAtL,EAAAC,GACAD,GAAAE,GAAAD,GAAAC,GACAsL,GAAAxL,EAAAyL,GAAA3M,GAAAmB,GAAAyL,GAAArL,GAAAJ,GACAoL,GAAAzjE,MAAA+jE,GAGA,QAAAA,IAAA3L,EAAAC,GACAD,GAAAE,GAAAD,GAAAC,EACA,IAAAU,GAAA9B,GAAAmB,GACAU,EAAAN,GAAAJ,GACAz/I,EAAA3vB,GAAAmvK,EAAAwL,IACAI,EAAAvL,GAAA7/I,GACAqrJ,EAAA/M,GAAAt+I,GACApvD,EAAAuvM,EAAAkL,EACAl6M,EAAA+5M,GAAA9K,EAAA6K,GAAA9K,EAAAiL,EACAxmM,EAAAqmM,GAAA7K,EAAA8K,GAAA/K,EAAAiL,CACAE,IAAA5zM,IAAAujL,GAAA7kC,GAAAxlJ,EAAAA,EAAAO,EAAAA,GAAAyT,IACAomM,GAAAxL,EAAAyL,GAAA7K,EAAA8K,GAAA/K,EAGA,QAAAoL,IAAAvuB,GAGA,MAFAsuB,IAAA3hM,QACAo1L,GAAA/hB,EAAA6tB,KACAS,GAMA,QAAAvqH,IAAA7sF,EAAA2O,GAGA,MAFA+uL,IAAA,GAAA19L,EACA09L,GAAA,GAAA/uL,EACA0oM,GAAAC,IAiDA,QAAAC,IAAA1Y,EAAA3rD,GACA,SAAA2rD,IAAA2Y,GAAA5qM,eAAAiyL,EAAA/7L,QACA00M,GAAA3Y,EAAA/7L,MAAA+7L,EAAA3rD,GAIA,QAAAukE,IAAA/Z,EAAAxqD,GACA,MAAA,KAAArmD,GAAA6wG,EAAAxqD,GAGA,QAAAwkE,IAAAha,EAAAxqD,GACA,GAAAykE,GAAA9qH,GAAA6wG,EAAA,GAAAA,EAAA,GAGA,OAFA7wG,IAAA6wG,EAAA,GAAAxqD,GACArmD,GAAAqmD,EAAAwqD,EAAA,KACAia,EAAAtJ,GAGA,QAAAuJ,IAAAla,EAAAxqD,GACA,QAAAu/D,GAAA/U,EAAA74L,IAAAgzM,IAAAC,GAAA5kE,IAGA,QAAA2kE,IAAAz7D,GACA,MAAAA,GAAAA,EAAAv3I,IAAAizM,IAAA17D,EAAA/rI,MAAA+rI,EAGA,QAAA07D,IAAA5kE,GACA,OAAAA,EAAA,GAAAs4D,GAAAt4D,EAAA,GAAAs4D,IAGA,QAAAuM,IAAAjvB,EAAA51C,GACA,OAAA41C,GAAAkvB,GAAAprM,eAAAk8K,EAAAhmL,MACAk1M,GAAAlvB,EAAAhmL,MACAy0M,IAAAzuB,EAAA51C,GAGA,QAAA+kE,IAAApV,EAAA5kC,EAAAt6E,GACA,GAAA1mF,GAAA83K,EAAA8tB,EAAA5kC,EAAAowC,GAAA1qH,GAAA17E,OAAAg2J,EACA,OAAA,UAAAvhK,GAAA,MAAAO,GAAA4H,IAAA,SAAA5H,GAAA,OAAAP,EAAAO,MAGA,QAAAi7M,IAAApiC,EAAA9X,EAAAv6E,GACA,GAAA/mF,GAAAq4K,EAAAe,EAAA9X,EAAAqwC,GAAA5qH,GAAAx7E,OAAA+1J,EACA,OAAA,UAAA/gK,GAAA,MAAAP,GAAAmI,IAAA,SAAAnI,GAAA,OAAAA,EAAAO,MAGA,QAAAk7M,MAOA,QAAAA,KACA,OAAAr1M,KAAA,kBAAA46L,YAAA5mI,KAGA,QAAAA,KACA,MAAAi+G,GAAAvuK,GAAAsoM,EAAAsJ,GAAAA,EAAA7I,EAAA6I,GAAAvzM,IAAA7F,GACAiJ,OAAA8sK,EAAAvuK,GAAAuoM,EAAAsJ,GAAAA,EAAA7I,EAAA6I,GAAAxzM,IAAAqM,IACAjJ,OAAA8sK,EAAAvuK,GAAAsvK,EAAAryF,GAAAA,EAAAu6E,EAAAv6E,GAAA/lF,OAAA,SAAAhB,GAAA,MAAAy/B,IAAAz/B,EAAA07M,GAAA/J,KAAAxpM,IAAAnI,IACAuL,OAAA8sK,EAAAvuK,GAAAq8L,EAAAl/G,GAAAA,EAAAs6E,EAAAt6E,GAAAjmF,OAAA,SAAAT,GAAA,MAAAk/B,IAAAl/B,EAAAo7M,GAAAhK,KAAAxpM,IAAA5H,IAdA,GAAA+gK,GAAA8X,EAAAy5B,EAAAT,EACA7wC,EAAA4kC,EAAA2M,EAAAT,EAEAryM,EAAAO,EAAA+B,EAAAkS,EADAuyE,EAAA,GAAAE,EAAAF,EAAA20H,EAAA,GAAAC,EAAA,IAEAnQ,EAAA,GA+EA,OAlEAiQ,GAAArhJ,MAAA,WACA,MAAAA,KAAAjyD,IAAA,SAAA64L,GAAA,OAAA56L,KAAA,aAAA46L,YAAAA,MAGAya,EAAAG,QAAA,WACA,OACAx1M,KAAA,UACA46L,aACA1+L,EAAA8vM,GAAA7mM,OACAiJ,EAAAs+L,GAAAhxM,MAAA,GACAQ,EAAAuwM,GAAAr4L,UAAA1Y,MAAA,GACA0S,EAAA69L,GAAA73L,UAAA1Y,MAAA,OAKA25M,EAAA1gI,OAAA,SAAAh5E,GACA,MAAA4E,WAAAtG,OACAo7M,EAAAI,YAAA95M,GAAA+5M,YAAA/5M,GADA05M,EAAAK,eAIAL,EAAAI,YAAA,SAAA95M,GACA,MAAA4E,WAAAtG,QACA+xM,GAAArwM,EAAA,GAAA,GAAA8wM,GAAA9wM,EAAA,GAAA,GACAswM,GAAAtwM,EAAA,GAAA,GAAA+wM,GAAA/wM,EAAA,GAAA,GACAqwM,EAAAS,IAAA9wM,EAAAqwM,EAAAA,EAAAS,EAAAA,EAAA9wM,GACAswM,EAAAS,IAAA/wM,EAAAswM,EAAAA,EAAAS,EAAAA,EAAA/wM,GACA05M,EAAAjQ,UAAAA,MALA4G,EAAAC,IAAAQ,EAAAC,KAQA2I,EAAAK,YAAA,SAAA/5M,GACA,MAAA4E,WAAAtG,QACA+4K,GAAAr3K,EAAA,GAAA,GAAAu/J,GAAAv/J,EAAA,GAAA,GACAokM,GAAApkM,EAAA,GAAA,GAAAw/J,GAAAx/J,EAAA,GAAA,GACAq3K,EAAA9X,IAAAv/J,EAAAq3K,EAAAA,EAAA9X,EAAAA,EAAAv/J,GACAokM,EAAA5kC,IAAAx/J,EAAAokM,EAAAA,EAAA5kC,EAAAA,EAAAx/J,GACA05M,EAAAjQ,UAAAA,MALApyB,EAAA+sB,IAAA7kC,EAAAC,KAQAk6C,EAAAn1L,KAAA,SAAAvkB,GACA,MAAA4E,WAAAtG,OACAo7M,EAAAM,UAAAh6M,GAAAi6M,UAAAj6M,GADA05M,EAAAO,aAIAP,EAAAM,UAAA,SAAAh6M,GACA,MAAA4E,WAAAtG,QACAq7M,GAAA35M,EAAA,GAAA45M,GAAA55M,EAAA,GACA05M,IAFAC,EAAAC,IAKAF,EAAAO,UAAA,SAAAj6M,GACA,MAAA4E,WAAAtG,QACA0mF,GAAAhlF,EAAA,GAAAklF,GAAAllF,EAAA,GACA05M,IAFA10H,EAAAE,IAKAw0H,EAAAjQ,UAAA,SAAAzpM,GACA,MAAA4E,WAAAtG,QACAmrM,GAAAzpM,EACA/B,EAAAu7M,GAAApV,EAAA5kC,EAAA,IACAhhK,EAAAi7M,GAAApiC,EAAA9X,EAAAkqC,GACAlpM,EAAAi5M,GAAAlJ,EAAAS,EAAA,IACAt+L,EAAAgnM,GAAApJ,EAAAS,EAAArH,GACAiQ,GANAjQ,GASAiQ,EACAI,eAAA,KAAA,GAAAlK,KAAA,IAAA,GAAAA,MACAmK,eAAA,KAAA,GAAAnK,KAAA,IAAA,GAAAA,MAGA,QAAAsK,MACA,MAAAR,QAGA,QAAAS,IAAA54M,EAAA2O,GACA,GAAAmnK,GAAA91K,EAAA,GAAAwrM,GACA3I,EAAA7iM,EAAA,GAAAwrM,GACAxtC,EAAArvJ,EAAA,GAAA68L,GACAvtC,EAAAtvJ,EAAA,GAAA68L,GACAqN,EAAAlN,GAAA9I,GACAzH,EAAAgP,GAAAvH,GACAiW,EAAAnN,GAAA1tC,GACA86C,EAAA3O,GAAAnsC,GACA+6C,EAAAH,EAAAlN,GAAA71B,GACAmjC,EAAAJ,EAAAzO,GAAAt0B,GACAojC,EAAAJ,EAAAnN,GAAA3tC,GACAm7C,EAAAL,EAAA1O,GAAApsC,GACAn8J,EAAA,EAAAooM,GAAA/nD,GAAAioD,GAAAlsC,EAAA4kC,GAAAgW,EAAAC,EAAA3O,GAAAnsC,EAAA8X,KACA7lK,EAAAm6L,GAAAvoM,GAEA8qL,EAAA9qL,EAAA,SAAAtG,GACA,GAAAqT,GAAAw7L,GAAA7uM,GAAAsG,GAAAoO,EACAG,EAAAg6L,GAAAvoM,EAAAtG,GAAA0U,EACAvT,EAAA0T,EAAA4oM,EAAApqM,EAAAsqM,EACAj8M,EAAAmT,EAAA6oM,EAAArqM,EAAAuqM,EACAzoM,EAAAN,EAAAgrL,EAAAxsL,EAAAmqM,CACA,QACAhyB,GAAA9pL,EAAAP,GAAAgxM,GACA3mB,GAAAr2K,EAAAwxI,GAAAxlJ,EAAAA,EAAAO,EAAAA,IAAAywM,KAEA,WACA,OAAA53B,EAAA43B,GAAA7K,EAAA6K,IAKA,OAFA/gB,GAAA9/F,SAAAhrF,EAEA8qL,EAGA,QAAAysB,IAAA18M,GACA,MAAAA,GA8BA,QAAA28M,MACAC,GAAApmE,MAAAqmE,GAGA,QAAAA,IAAA78M,EAAAO,GACAq8M,GAAApmE,MAAAsmE,GACAC,GAAAC,GAAAh9M,EAAAi9M,GAAAC,GAAA38M,EAGA,QAAAu8M,IAAA98M,EAAAO,GACA48M,GAAAr2M,IAAAo2M,GAAAl9M,EAAAg9M,GAAAz8M,GACAy8M,GAAAh9M,EAAAk9M,GAAA38M,EAGA,QAAA68M,MACAN,GAAAC,GAAAE,IAqBA,QAAAI,IAAAr9M,EAAAO,GACAP,EAAAs9M,KAAAA,GAAAt9M,GACAA,EAAAshK,KAAAA,GAAAthK,GACAO,EAAAg9M,KAAAA,GAAAh9M,GACAA,EAAAghK,KAAAA,GAAAhhK,GA4CA,QAAAi9M,IAAAx9M,EAAAO,GACAk9M,IAAAz9M,EACA09M,IAAAn9M,IACAo9M,GAGA,QAAAC,MACAC,GAAArnE,MAAAsnE,GAGA,QAAAA,IAAA99M,EAAAO,GACAs9M,GAAArnE,MAAAunE,GACAP,GAAAQ,GAAAh+M,EAAAi+M,GAAA19M,GAGA,QAAAw9M,IAAA/9M,EAAAO,GACA,GAAAwmF,GAAA/mF,EAAAg+M,GAAA/2H,EAAA1mF,EAAA09M,GAAAjqM,EAAAwxI,GAAAz+D,EAAAA,EAAAE,EAAAA,EACAi3H,KAAAlqM,GAAAgqM,GAAAh+M,GAAA,EACAm+M,IAAAnqM,GAAAiqM,GAAA19M,GAAA,EACA69M,IAAApqM,EACAwpM,GAAAQ,GAAAh+M,EAAAi+M,GAAA19M,GAGA,QAAA89M,MACAR,GAAArnE,MAAAgnE,GAGA,QAAAc,MACAT,GAAArnE,MAAA+nE,GAGA,QAAAC,MACAC,GAAAC,GAAAC,IAGA,QAAAJ,IAAAv+M,EAAAO,GACAs9M,GAAArnE,MAAAioE,GACAjB,GAAAkB,GAAAV,GAAAh+M,EAAA2+M,GAAAV,GAAA19M,GAGA,QAAAk+M,IAAAz+M,EAAAO,GACA,GAAAwmF,GAAA/mF,EAAAg+M,GACA/2H,EAAA1mF,EAAA09M,GACAjqM,EAAAwxI,GAAAz+D,EAAAA,EAAAE,EAAAA,EAEAi3H,KAAAlqM,GAAAgqM,GAAAh+M,GAAA,EACAm+M,IAAAnqM,GAAAiqM,GAAA19M,GAAA,EACA69M,IAAApqM,EAEAA,EAAAiqM,GAAAj+M,EAAAg+M,GAAAz9M,EACAq+M,IAAA5qM,GAAAgqM,GAAAh+M,GACA6+M,IAAA7qM,GAAAiqM,GAAA19M,GACAu+M,IAAA,EAAA9qM,EACAwpM,GAAAQ,GAAAh+M,EAAAi+M,GAAA19M,GAGA,QAAAw+M,IAAA1yL,GACAltB,KAAA6/M,SAAA3yL,EAuEA,QAAA4yL,IAAAj/M,EAAAO,GACA2+M,GAAA1oE,MAAA2oE,GACAC,GAAAC,GAAAr/M,EAAAs/M,GAAAC,GAAAh/M,EAGA,QAAA4+M,IAAAn/M,EAAAO,GACA8+M,IAAAr/M,EAAAu/M,IAAAh/M,EACAi/M,GAAA14M,IAAA0+I,GAAA65D,GAAAA,GAAAE,GAAAA,KACAF,GAAAr/M,EAAAu/M,GAAAh/M,EAGA,QAAAk/M,MACAtgN,KAAAugN,WAoDA,QAAAC,IAAAx/C,GACA,MAAA,MAAAA,EACA,IAAAA,EAAA,IAAAA,EAAA,aAAA,EAAAA,EACA,IAAAA,EAAA,IAAAA,EAAA,YAAA,EAAAA,EACA,IAGA,QAAAy/C,IAAAnwK,EAAApjB,GAKA,QAAAyK,GAAAs1J,GAKA,MAJAA,KACA,kBAAAyzB,IAAAC,EAAAD,aAAAA,EAAAh+M,MAAA1C,KAAAwH,YACAwnM,GAAA/hB,EAAA2zB,EAAAD,KAEAA,EAAA1gM,SATA,GACA2gM,GACAD,EAFAD,EAAA,GAiDA,OArCA/oL,GAAA+I,KAAA,SAAAusJ,GAEA,MADA+hB,IAAA/hB,EAAA2zB,EAAAnD,KACAA,GAAAx9L,UAGA0X,EAAAmjC,QAAA,SAAAmyH,GAEA,MADA+hB,IAAA/hB,EAAA2zB,EAAAb,KACAA,GAAA9/L,UAGA0X,EAAAg7K,OAAA,SAAA1lB,GAEA,MADA+hB,IAAA/hB,EAAA2zB,EAAAC,KACAA,GAAA5gM,UAGA0X,EAAA+8K,SAAA,SAAAznB,GAEA,MADA+hB,IAAA/hB,EAAA2zB,EAAAlC,KACAA,GAAAz+L,UAGA0X,EAAA2Y,WAAA,SAAA1tC,GACA,MAAA4E,WAAAtG,QAAA0/M,EAAA,MAAAh+M,GAAA0tC,EAAA,KAAAitK,KAAAjtK,EAAA1tC,GAAAooE,OAAArzC,GAAA2Y,GAGA3Y,EAAAzK,QAAA,SAAAtqB,GACA,MAAA4E,WAAAtG,QACAy/M,EAAA,MAAA/9M,GAAAsqB,EAAA,KAAA,GAAAozL,KAAA,GAAAV,IAAA1yL,EAAAtqB,GACA,kBAAA89M,IAAAC,EAAAD,YAAAA,GACA/oL,GAHAzK,GAMAyK,EAAA+oL,YAAA,SAAA99M,GACA,MAAA4E,WAAAtG,QACAw/M,EAAA,kBAAA99M,GAAAA,GAAA+9M,EAAAD,aAAA99M,IAAAA,GACA+0B,GAFA+oL,GAKA/oL,EAAA2Y,WAAAA,GAAApjB,QAAAA,GAGA,QAAA+0B,IAAA3nB,GACA,OACA0wC,OAAA81I,GAAAxmL,IAIA,QAAAwmL,IAAAxmL,GACA,MAAA,UAAA0wC,GACA,GAAA5mE,GAAA,GAAA28M,GACA,KAAA,GAAA1+L,KAAAiY,GAAAl2B,EAAAie,GAAAiY,EAAAjY,EAEA,OADAje,GAAA4mE,OAAAA,EACA5mE,GAIA,QAAA28M,OAYA,QAAAC,IAAA1wK,EAAA2wK,EAAAh0B,GACA,GAAAupB,GAAAlmK,EAAA4wK,YAAA5wK,EAAA4wK,YAMA,OALA5wK,GAAAorI,MAAA,KAAAqT,WAAA,EAAA,IACA,MAAAynB,GAAAlmK,EAAA4wK,WAAA,MACAlS,GAAA/hB,EAAA38I,EAAA06B,OAAA61I,KACAI,EAAAJ,GAAA5gM,UACA,MAAAu2L,GAAAlmK,EAAA4wK,WAAA1K,GACAlmK,EAGA,QAAA6wK,IAAA7wK,EAAAsrC,EAAAqxG,GACA,MAAA+zB,IAAA1wK,EAAA,SAAAx9B,GACA,GAAArR,GAAAm6E,EAAA,GAAA,GAAAA,EAAA,GAAA,GACA31E,EAAA21E,EAAA,GAAA,GAAAA,EAAA,GAAA,GACAxnE,EAAA7J,KAAAyuD,IAAAv3D,GAAAqR,EAAA,GAAA,GAAAA,EAAA,GAAA,IAAA7M,GAAA6M,EAAA,GAAA,GAAAA,EAAA,GAAA,KACAjS,GAAA+6E,EAAA,GAAA,IAAAn6E,EAAA2S,GAAAtB,EAAA,GAAA,GAAAA,EAAA,GAAA,KAAA,EACA1R,GAAAw6E,EAAA,GAAA,IAAA31E,EAAAmO,GAAAtB,EAAA,GAAA,GAAAA,EAAA,GAAA,KAAA,CACAw9B,GAAAorI,MAAA,IAAAtnK,GAAA26K,WAAAluL,EAAAO,KACA6rL,GAGA,QAAAm0B,IAAA9wK,EAAAkN,EAAAyvI,GACA,MAAAk0B,IAAA7wK,IAAA,EAAA,GAAAkN,GAAAyvI,GAGA,QAAAo0B,IAAA/wK,EAAAzmC,EAAAojL,GACA,MAAA+zB,IAAA1wK,EAAA,SAAAx9B,GACA,GAAArR,IAAAoI,EACAuK,EAAA3S,GAAAqR,EAAA,GAAA,GAAAA,EAAA,GAAA,IACAjS,GAAAY,EAAA2S,GAAAtB,EAAA,GAAA,GAAAA,EAAA,GAAA,KAAA,EACA1R,GAAAgT,EAAAtB,EAAA,GAAA,EACAw9B,GAAAorI,MAAA,IAAAtnK,GAAA26K,WAAAluL,EAAAO,KACA6rL,GAGA,QAAAq0B,IAAAhxK,EAAAvkC,EAAAkhL,GACA,MAAA+zB,IAAA1wK,EAAA,SAAAx9B,GACA,GAAA7M,IAAA8F,EACAqI,EAAAnO,GAAA6M,EAAA,GAAA,GAAAA,EAAA,GAAA,IACAjS,GAAAuT,EAAAtB,EAAA,GAAA,GACA1R,GAAA6E,EAAAmO,GAAAtB,EAAA,GAAA,GAAAA,EAAA,GAAA,KAAA,CACAw9B,GAAAorI,MAAA,IAAAtnK,GAAA26K,WAAAluL,EAAAO,KACA6rL,GAMA,QAAAs0B,IAAAC,EAAAC,GACA,OAAAA,EAAAC,GAAAF,EAAAC,GAAAE,GAAAH,GAGA,QAAAG,IAAAH,GACA,MAAAV,KACAzpE,MAAA,SAAAx2I,EAAAO,GACAP,EAAA2gN,EAAA3gN,EAAAO,GACApB,KAAAgrE,OAAAqsE,MAAAx2I,EAAA,GAAAA,EAAA,OAKA,QAAA6gN,IAAAF,EAAAC,GAEA,QAAAG,GAAA3nC,EAAA+sB,EAAA4I,EAAAj1J,EAAAs1I,EAAAqoB,EAAAn2C,EAAAC,EAAA+uC,EAAApoI,EAAAqnH,EAAA+oB,EAAAnpF,EAAAhlD,GACA,GAAA4c,GAAAu6E,EAAA8X,EACAnyF,EAAAs6E,EAAA4kC,EACAj0J,EAAA60C,EAAAA,EAAAE,EAAAA,CACA,IAAA/0C,EAAA,EAAA0uK,GAAAzxF,IAAA,CACA,GAAA7rH,GAAAw2C,EAAAouB,EACAj2D,EAAAm9K,EAAAG,EACArvL,EAAAu3M,EAAAa,EACAl5M,EAAAomJ,GAAAliJ,EAAAA,EAAA2O,EAAAA,EAAA/R,EAAAA,GACA8gN,EAAAzT,GAAArtM,GAAAd,GACAyxM,EAAApxK,GAAAA,GAAAv/B,GAAA,GAAAyxM,IAAAlyK,GAAAsvK,EAAAuB,GAAAqB,IAAA5C,EAAAuB,GAAA,EAAAjmB,GAAAp4K,EAAA3O,GACA4B,EAAAy7M,EAAA9P,EAAAmQ,GACAx/C,EAAAt8J,EAAA,GACAu8J,EAAAv8J,EAAA,GACA+7M,EAAAz/C,EAAA4X,EACA8nC,EAAAz/C,EAAA0kC,EACAgb,EAAAl6H,EAAAg6H,EAAAl6H,EAAAm6H,GACAC,EAAAA,EAAAjvK,EAAA0uK,GACAnhL,IAAAsnD,EAAAk6H,EAAAh6H,EAAAi6H,GAAAhvK,EAAA,IAAA,IACA4H,EAAAouB,EAAAknH,EAAAG,EAAAkoB,EAAAa,EAAA8I,MACAL,EAAA3nC,EAAA+sB,EAAA4I,EAAAj1J,EAAAs1I,EAAAqoB,EAAAj2C,EAAAC,EAAAovC,EAAAvtM,GAAAlE,EAAA6S,GAAA7S,EAAAc,EAAAivH,EAAAhlD,GACAA,EAAAqsE,MAAAgrB,EAAAC,GACAs/C,EAAAv/C,EAAAC,EAAAovC,EAAAvtM,EAAA2O,EAAA/R,EAAAohK,EAAAC,EAAA+uC,EAAApoI,EAAAqnH,EAAA+oB,EAAAnpF,EAAAhlD,KAIA,MAAA,UAAAA,GAYA,QAAAqsE,GAAAx2I,EAAAO,GACAP,EAAA2gN,EAAA3gN,EAAAO,GACA4pE,EAAAqsE,MAAAx2I,EAAA,GAAAA,EAAA,IAGA,QAAAq3F,KACA+hF,EAAAhrF,IACAizH,EAAA7qE,MAAAi6D,EACAtmI,EAAAktB,YAGA,QAAAo5G,GAAA7B,EAAAC,GACA,GAAA3uM,GAAA2vM,IAAAjB,EAAAC,IAAA3pM,EAAAy7M,EAAA/R,EAAAC,EACAkS,GAAA3nC,EAAA+sB,EAAA4I,EAAAj1J,EAAAs1I,EAAAqoB,EAAAr+B,EAAAl0K,EAAA,GAAAihM,EAAAjhM,EAAA,GAAA6pM,EAAAH,EAAA90J,EAAA55C,EAAA,GAAAkvL,EAAAlvL,EAAA,GAAAu3M,EAAAv3M,EAAA,GAAAohN,GAAAn3I,GACAA,EAAAqsE,MAAA4iC,EAAA+sB,GAGA,QAAA5uG,KACA8pH,EAAA7qE,MAAAA,EACArsE,EAAAotB,UAGA,QAAAo/G,KACAt/G,IACAgqH,EAAA7qE,MAAA+qE,EACAF,EAAA9pH,QAAAq/G,EAGA,QAAA2K,GAAA3S,EAAAC,GACA4B,EAAA/B,EAAAE,EAAAC,GAAAkO,EAAA3jC,EAAA6jC,EAAA9W,EAAAqb,EAAA1nK,EAAA2nK,EAAAryB,EAAAsyB,EAAAjK,EACA4J,EAAA7qE,MAAAi6D,EAGA,QAAAmG,KACAmK,EAAA3nC,EAAA+sB,EAAA4I,EAAAj1J,EAAAs1I,EAAAqoB,EAAAsF,EAAAE,EAAAvO,EAAA8S,EAAAC,EAAAC,EAAAJ,GAAAn3I,GACAk3I,EAAA9pH,QAAAA,EACAA,IA/CA,GAAAm3G,GAAAqO,EAAAE,EAAAuE,EAAAC,EAAAC,EACA3S,EAAA31B,EAAA+sB,EAAArsJ,EAAAs1I,EAAAqoB,EAEA4J,GACA7qE,MAAAA,EACAn/C,UAAAA,EACAE,QAAAA,EACA02G,aAAA,WAAA9jI,EAAA8jI,eAAAoT,EAAAhqH,UAAAs/G,GACAzI,WAAA,WAAA/jI,EAAA+jI,aAAAmT,EAAAhqH,UAAAA,GA0CA,OAAAgqH,IAUA,QAAAM,IAAAz0B,GACA,MAAA+yB,KACAzpE,MAAA,SAAAx2I,EAAAO,GACA,GAAAf,GAAA0tL,EAAAltL,EAAAO,EACA,OAAApB,MAAAgrE,OAAAqsE,MAAAh3I,EAAA,GAAAA,EAAA,OAKA,QAAAoiN,IAAAruM,EAAAwzE,EAAAE,GACA,QAAA46H,GAAA7hN,EAAAO,GACA,OAAAwmF,EAAAxzE,EAAAvT,EAAAinF,EAAA1zE,EAAAhT,GAKA,MAHAshN,GAAA7qI,OAAA,SAAAh3E,EAAAO,GACA,QAAAP,EAAA+mF,GAAAxzE,GAAA0zE,EAAA1mF,GAAAgT,IAEAsuM,EAGA,QAAAC,IAAAvuM,EAAAwzE,EAAAE,EAAA0hH,GASA,QAAAkZ,GAAA7hN,EAAAO,GACA,OAAA+C,EAAAtD,EAAAiS,EAAA1R,EAAAwmF,EAAAE,EAAAh1E,EAAAjS,EAAAsD,EAAA/C,GATA,GAAAwhN,GAAA9S,GAAAtG,GACAqZ,EAAAtU,GAAA/E,GACArlM,EAAAy+M,EAAAxuM,EACAtB,EAAA+vM,EAAAzuM,EACA4sC,EAAA4hK,EAAAxuM,EACA6sC,EAAA4hK,EAAAzuM,EACA0uM,GAAAD,EAAA/6H,EAAA86H,EAAAh7H,GAAAxzE,EACA2uM,GAAAF,EAAAj7H,EAAAg7H,EAAA96H,GAAA1zE,CAOA,OAHAsuM,GAAA7qI,OAAA,SAAAh3E,EAAAO,GACA,OAAA4/C,EAAAngD,EAAAogD,EAAA7/C,EAAA0hN,EAAAC,EAAA9hK,EAAApgD,EAAAmgD,EAAA5/C,IAEAshN,EAGA,QAAApyK,IAAAkxK,GACA,MAAAwB,IAAA,WAAA,MAAAxB,OAGA,QAAAwB,IAAAC,GAgBA,QAAA3yK,GAAA+mG,GACA,MAAA6rE,GAAA7rE,EAAA,GAAAs4D,GAAAt4D,EAAA,GAAAs4D,IAGA,QAAA93H,GAAAw/D,GAEA,OADAA,EAAA6rE,EAAArrI,OAAAw/D,EAAA,GAAAA,EAAA,OACAA,EAAA,GAAAw6D,GAAAx6D,EAAA,GAAAw6D,IA+DA,QAAAsR,KACA,GAAAxnC,GAAAgnC,GAAAvuM,EAAA,EAAA,EAAAo1L,GAAA9mM,MAAA,KAAA8+M,EAAA/R,EAAAC,IACAgT,GAAAlZ,EAAAmZ,GAAAF,IAAAruM,EAAAvT,EAAA86K,EAAA,GAAAv6K,EAAAu6K,EAAA,GAAA6tB,EAKA,OAJAzb,GAAAinB,GAAAC,EAAAC,EAAAC,GACAiO,EAAAvO,GAAA2M,EAAAkB,GACAQ,EAAArO,GAAA9mB,EAAAq1B,GACAC,EAAA9B,GAAA6B,EAAA3B,GACA7nM,IAGA,QAAAA,KAEA,MADAsD,GAAA09L,EAAA,KACAtqK,EAhGA,GAAAkxK,GAIAzzB,EAGAiZ,EAAA7kC,EAAAC,EAEAihD,EACAD,EACAF,EACAhmM,EACA09L,EAZAxmM,EAAA,IACAvT,EAAA,IAAAO,EAAA,IACAquM,EAAA,EAAAC,EAAA,EACAuF,EAAA,EAAAC,EAAA,EAAAC,EAAA,EACA3L,EAAA,EACA2B,EAAA,KAAAmY,EAAAC,GACAtpC,EAAA,KAAAupC,EAAAjG,GACAkE,EAAA,EA2FA,OA3EAnxK,GAAA06B,OAAA,SAAAA,GACA,MAAA9tD,IAAA09L,IAAA5vI,EAAA9tD,EAAAA,EAAAumM,GAAAjB,GAAAz0B,GAAAu1B,EAAAD,EAAAG,EAAA5I,EAAA5vI,QAGA16B,EAAAgzK,QAAA,SAAA1gN,GACA,MAAA4E,WAAAtG,QAAAoiN,EAAA1gN,EAAAuoM,MAAAh3K,GAAAva,KAAA0pM,GAGAhzK,EAAAkzK,SAAA,SAAA5gN,GACA,MAAA4E,WAAAtG,QAAAsiN,EAAA5gN,EAAAq3K,EAAA+sB,EAAA7kC,EAAAC,EAAA,KAAAxoJ,KAAA4pM,GAGAlzK,EAAAozK,UAAA,SAAA9gN,GACA,MAAA4E,WAAAtG,QAAAoiN,GAAA1gN,EAAAy1M,GAAAlN,EAAAvoM,EAAA+sM,KAAAxE,EAAA,KAAAoY,IAAA3pM,KAAAuxL,EAAA0G,IAGAvhK,EAAA4wK,WAAA,SAAAt+M,GACA,MAAA4E,WAAAtG,QAAAsiN,EAAA,MAAA5gN,GAAAq3K,EAAA+sB,EAAA7kC,EAAAC,EAAA,KAAAm7C,IAAA3D,GAAA3/B,GAAAr3K,EAAA,GAAA,GAAAokM,GAAApkM,EAAA,GAAA,GAAAu/J,GAAAv/J,EAAA,GAAA,GAAAw/J,GAAAx/J,EAAA,GAAA,IAAAgX,KAAA,MAAAqgK,EAAA,OAAAA,EAAA+sB,IAAA7kC,EAAAC,KAGA9xH,EAAAorI,MAAA,SAAA94K,GACA,MAAA4E,WAAAtG,QAAAkT,GAAAxR,EAAAugN,KAAA/uM,GAGAk8B,EAAAy+I,UAAA,SAAAnsL,GACA,MAAA4E,WAAAtG,QAAAL,GAAA+B,EAAA,GAAAxB,GAAAwB,EAAA,GAAAugN,MAAAtiN,EAAAO,IAGAkvC,EAAAqrI,OAAA,SAAA/4K,GACA,MAAA4E,WAAAtG,QAAAuuM,EAAA7sM,EAAA,GAAA,IAAA+sM,GAAAD,EAAA9sM,EAAA,GAAA,IAAA+sM,GAAAwT,MAAA1T,EAAAoC,GAAAnC,EAAAmC,KAGAvhK,EAAAy9I,OAAA,SAAAnrL,GACA,MAAA4E,WAAAtG,QAAA+zM,EAAAryM,EAAA,GAAA,IAAA+sM,GAAAuF,EAAAtyM,EAAA,GAAA,IAAA+sM,GAAAwF,EAAAvyM,EAAA1B,OAAA,EAAA0B,EAAA,GAAA,IAAA+sM,GAAA,EAAAwT,MAAAlO,EAAApD,GAAAqD,EAAArD,GAAAsD,EAAAtD,KAGAvhK,EAAAm6J,MAAA,SAAA7nM,GACA,MAAA4E,WAAAtG,QAAAsoM,EAAA5mM,EAAA,IAAA+sM,GAAAwT,KAAA3Z,EAAAqI,IAGAvhK,EAAA+7J,UAAA,SAAAzpM,GACA,MAAA4E,WAAAtG,QAAAmiN,EAAA9B,GAAA6B,EAAA3B,EAAA7+M,EAAAA,GAAAgX,KAAAysI,GAAAo7D,IAGAnxK,EAAA6wK,UAAA,SAAAvlI,EAAAqxG,GACA,MAAAk0B,IAAA7wK,EAAAsrC,EAAAqxG,IAGA38I,EAAA8wK,QAAA,SAAA5jK,EAAAyvI,GACA,MAAAm0B,IAAA9wK,EAAAkN,EAAAyvI,IAGA38I,EAAA+wK,SAAA,SAAAx3M,EAAAojL,GACA,MAAAo0B,IAAA/wK,EAAAzmC,EAAAojL,IAGA38I,EAAAgxK,UAAA,SAAAv1M,EAAAkhL,GACA,MAAAq0B,IAAAhxK,EAAAvkC,EAAAkhL,IAkBA,WAGA,MAFAu0B,GAAAyB,EAAAvgN,MAAA1C,KAAAwH,WACA8oC,EAAAunC,OAAA2pI,EAAA3pI,QAAAA,EACAsrI,KAIA,QAAAQ,IAAAV,GACA,GAAA7R,GAAA,EACAC,EAAAlD,GAAA,EACAluM,EAAA+iN,GAAAC,GACAl9M,EAAA9F,EAAAmxM,EAAAC,EAMA,OAJAtrM,GAAA69M,UAAA,SAAAhhN,GACA,MAAA4E,WAAAtG,OAAAjB,EAAAmxM,EAAAxuM,EAAA,GAAA+sM,GAAA0B,EAAAzuM,EAAA,GAAA+sM,KAAAyB,EAAAS,GAAAR,EAAAQ,KAGA9rM,EAGA,QAAA89M,IAAAzS,GAGA,QAAA3/D,GAAAg+D,EAAAC,GACA,OAAAD,EAAAI,EAAAtB,GAAAmB,GAAAG,GAHA,GAAAA,GAAAC,GAAAsB,EAUA,OAJA3/D,GAAA55D,OAAA,SAAAh3E,EAAAO,GACA,OAAAP,EAAAgvM,EAAAzB,GAAAhtM,EAAAyuM,KAGAp+D,EAGA,QAAAqyE,IAAA9c,EAAA5kC,GAQA,QAAAo/C,GAAA3gN,EAAAO,GACA,GAAAf,GAAAgmJ,GAAAtlJ,EAAA,EAAAb,EAAAquM,GAAAntM,IAAAlB,CACA,QAAAG,EAAAkuM,GAAA1tM,GAAAX,GAAAinE,EAAA9mE,EAAAyvM,GAAAjvM,IATA,GAAA0+L,GAAAgP,GAAAvH,GAAA9mM,GAAAq/L,EAAAgP,GAAAnsC,IAAA,CAGA,IAAA9hI,GAAApgC,GAAAsyM,GAAA,MAAAqR,IAAA7c,EAEA,IAAAjmM,GAAA,EAAAw+L,GAAA,EAAAr/L,EAAAq/L,GAAAp4H,EAAAk/E,GAAAtlJ,GAAAb,CAYA,OALAshN,GAAA3pI,OAAA,SAAAh3E,EAAAO,GACA,GAAA2iN,GAAA58I,EAAA/lE,CACA,QAAA8pL,GAAArqL,EAAAy/B,GAAAyjL,IAAA7jN,EAAAisM,GAAA4X,GAAA3V,IAAArtM,GAAAF,EAAAA,EAAAkjN,EAAAA,GAAA7jN,EAAAA,IAAA,EAAAA,MAGAshN,EAGA,QAAAwC,MACA,MAAAL,IAAAG,IACApoC,MAAA,SACAC,QAAA,EAAA,UAGA,QAAAsoC,MACA,MAAAD,MACAJ,WAAA,KAAA,OACAloC,MAAA,MACAqT,WAAA,IAAA,MACAhB,QAAA,GAAA,IACApS,SAAA,GAAA,OAKA,QAAAuoC,IAAAC,GACA,GAAAjkN,GAAAikN,EAAAjjN,MACA,QACAm2I,MAAA,SAAAx2I,EAAAO,GAAA,IAAA,GAAAjB,IAAA,IAAAA,EAAAD,GAAAikN,EAAAhkN,GAAAk3I,MAAAx2I,EAAAO,IACA02M,OAAA,WAAA,IAAA,GAAA33M,IAAA,IAAAA,EAAAD,GAAAikN,EAAAhkN,GAAA23M,UACA5/G,UAAA,WAAA,IAAA,GAAA/3F,IAAA,IAAAA,EAAAD,GAAAikN,EAAAhkN,GAAA+3F,aACAE,QAAA,WAAA,IAAA,GAAAj4F,IAAA,IAAAA,EAAAD,GAAAikN,EAAAhkN,GAAAi4F,WACA02G,aAAA,WAAA,IAAA,GAAA3uM,IAAA,IAAAA,EAAAD,GAAAikN,EAAAhkN,GAAA2uM,gBACAC,WAAA,WAAA,IAAA,GAAA5uM,IAAA,IAAAA,EAAAD,GAAAikN,EAAAhkN,GAAA4uM,eASA,QAAAqV,MAQA,QAAAA,GAAAviB,GACA,GAAAhhM,GAAAghM,EAAA,GAAAzgM,EAAAygM,EAAA,EACA,OAAAxqD,GAAA,KACAgtE,EAAAhtE,MAAAx2I,EAAAO,GAAAi2I,IACAitE,EAAAjtE,MAAAx2I,EAAAO,GAAAi2I,KACAktE,EAAAltE,MAAAx2I,EAAAO,GAAAi2I,GAmEA,QAAAz9H,KAEA,MADAsD,GAAA09L,EAAA,KACAwJ,EAjFA,GAAAlnM,GACA09L,EACAyJ,EACAC,EACAC,EACAltE,EAHAmtE,EAAAP,KACAQ,EAAAT,KAAAj2B,QAAA,IAAA,IAAApS,SAAA,EAAA,OAAAioC,WAAA,GAAA,KACAc,EAAAV,KAAAj2B,QAAA,IAAA,IAAApS,SAAA,EAAA,OAAAioC,WAAA,EAAA,KACAe,GAAAttE,MAAA,SAAAx2I,EAAAO,GAAAi2I,GAAAx2I,EAAAO,IA+EA,OArEAgjN,GAAAvsI,OAAA,SAAAgqH,GACA,GAAAztL,GAAAowM,EAAA9oC,QACAh8K,EAAA8kN,EAAAz1B,YACAluL,GAAAghM,EAAA,GAAAniM,EAAA,IAAA0U,EACAhT,GAAAygM,EAAA,GAAAniM,EAAA,IAAA0U,CACA,QAAAhT,GAAA,KAAAA,EAAA,MAAAP,IAAA,MAAAA,GAAA,KAAA4jN,EACArjN,GAAA,MAAAA,EAAA,MAAAP,IAAA,MAAAA,GAAA,KAAA6jN,EACAF,GAAA3sI,OAAAgqH,IAGAuiB,EAAAp5I,OAAA,SAAAA,GACA,MAAA9tD,IAAA09L,IAAA5vI,EAAA9tD,EAAAA,EAAAgnM,IAAAM,EAAAx5I,OAAA4vI,EAAA5vI,GAAAy5I,EAAAz5I,OAAAA,GAAA05I,EAAA15I,OAAAA,MAGAo5I,EAAA/X,UAAA,SAAAzpM,GACA,MAAA4E,WAAAtG,QACAsjN,EAAAnY,UAAAzpM,GAAA6hN,EAAApY,UAAAzpM,GAAA8hN,EAAArY,UAAAzpM,GACAgX,KAFA4qM,EAAAnY,aAKA+X,EAAA1oC,MAAA,SAAA94K,GACA,MAAA4E,WAAAtG,QACAsjN,EAAA9oC,MAAA94K,GAAA6hN,EAAA/oC,MAAA,IAAA94K,GAAA8hN,EAAAhpC,MAAA94K,GACAwhN,EAAAr1B,UAAAy1B,EAAAz1B,cAFAy1B,EAAA9oC,SAKA0oC,EAAAr1B,UAAA,SAAAnsL,GACA,IAAA4E,UAAAtG,OAAA,MAAAsjN,GAAAz1B,WACA,IAAA36K,GAAAowM,EAAA9oC,QAAA76K,GAAA+B,EAAA,GAAAxB,GAAAwB,EAAA,EAiBA,OAfAyhN,GAAAG,EACAz1B,UAAAnsL,GACAs+M,aAAArgN,EAAA,KAAAuT,EAAAhT,EAAA,KAAAgT,IAAAvT,EAAA,KAAAuT,EAAAhT,EAAA,KAAAgT,KACA42D,OAAA25I,GAEAL,EAAAG,EACA11B,WAAAluL,EAAA,KAAAuT,EAAAhT,EAAA,KAAAgT,IACA8sM,aAAArgN,EAAA,KAAAuT,EAAAo+L,GAAApxM,EAAA,IAAAgT,EAAAo+L,KAAA3xM,EAAA,KAAAuT,EAAAo+L,GAAApxM,EAAA,KAAAgT,EAAAo+L,MACAxnI,OAAA25I,GAEAJ,EAAAG,EACA31B,WAAAluL,EAAA,KAAAuT,EAAAhT,EAAA,KAAAgT,IACA8sM,aAAArgN,EAAA,KAAAuT,EAAAo+L,GAAApxM,EAAA,KAAAgT,EAAAo+L,KAAA3xM,EAAA,KAAAuT,EAAAo+L,GAAApxM,EAAA,KAAAgT,EAAAo+L,MACAxnI,OAAA25I,GAEA/qM,KAGAwqM,EAAAjD,UAAA,SAAAvlI,EAAAqxG,GACA,MAAAk0B,IAAAiD,EAAAxoI,EAAAqxG,IAGAm3B,EAAAhD,QAAA,SAAA5jK,EAAAyvI,GACA,MAAAm0B,IAAAgD,EAAA5mK,EAAAyvI,IAGAm3B,EAAA/C,SAAA,SAAAx3M,EAAAojL,GACA,MAAAo0B,IAAA+C,EAAAv6M,EAAAojL,IAGAm3B,EAAA9C,UAAA,SAAAv1M,EAAAkhL,GACA,MAAAq0B,IAAA8C,EAAAr4M,EAAAkhL,IAQAm3B,EAAA1oC,MAAA,MAGA,QAAAkpC,IAAAlpC,GACA,MAAA,UAAA76K,EAAAO,GACA,GAAAgzM,GAAAtE,GAAAjvM,GACAwzM,EAAAvE,GAAA1uM,GACAgT,EAAAsnK,EAAA04B,EAAAC,EACA,QACAjgM,EAAAigM,EAAA9F,GAAA1tM,GACAuT,EAAAm6L,GAAAntM,KAKA,QAAAyjN,IAAApa,GACA,MAAA,UAAA5pM,EAAAO,GACA,GAAAyT,GAAAwxI,GAAAxlJ,EAAAA,EAAAO,EAAAA,GACAL,EAAA0pM,EAAA51L,GACAiwM,EAAAvW,GAAAxtM,GACAgkN,EAAAjV,GAAA/uM,EACA,QACAmqL,GAAArqL,EAAAikN,EAAAjwM,EAAAkwM,GACA3W,GAAAv5L,GAAAzT,EAAA0jN,EAAAjwM,KAaA,QAAAmwM,MACA,MAAA10K,IAAA20K,IACAvpC,MAAA,QACAgoC,UAAA,SAWA,QAAAwB,MACA,MAAA50K,IAAA60K,IACAzpC,MAAA,SACAgoC,UAAA,SAGA,QAAA0B,IAAA3V,EAAAC,GACA,OAAAD,EAAA30K,GAAAuqL,IAAAhX,GAAAqB,GAAA,KAOA,QAAA4V,MACA,MAAAC,IAAAH,IACA1pC,MAAA,IAAAq5B,IAGA,QAAAwQ,IAAA/D,GAwBA,QAAAgE,KACA,GAAApxM,GAAA+5L,GAAAzyB,IACAh8K,EAAAO,EAAAs1M,GAAAt1M,EAAA8tL,UAAAl2G,QAAA,EAAA,IACA,OAAAqpI,GAAA,MAAAjnC,IACAv6K,EAAA,GAAA0U,EAAA1U,EAAA,GAAA0U,IAAA1U,EAAA,GAAA0U,EAAA1U,EAAA,GAAA0U,IAAAotM,IAAA4D,KACA76M,KAAAC,IAAA9K,EAAA,GAAA0U,EAAA6lK,GAAA+sB,IAAAz8L,KAAAyuD,IAAAt5D,EAAA,GAAA0U,EAAA+tJ,GAAAC,MACA6X,EAAA1vK,KAAAC,IAAA9K,EAAA,GAAA0U,EAAA4yL,KAAA7kC,EAAA53J,KAAAyuD,IAAAt5D,EAAA,GAAA0U,EAAAguJ,MA7BA,GAKA4kC,GAAA7kC,EAAAC,EALAniK,EAAAqwC,GAAAkxK,GACA7lC,EAAA17K,EAAA07K,OACAD,EAAAz7K,EAAAy7K,MACAqT,EAAA9uL,EAAA8uL,UACAmyB,EAAAjhN,EAAAihN,WACAjnC,EAAA,IA2BA,OAzBAh6K,GAAAy7K,MAAA,SAAA94K,GACA,MAAA4E,WAAAtG,QAAAw6K,EAAA94K,GAAA4iN,KAAA9pC,KAGAz7K,EAAA8uL,UAAA,SAAAnsL,GACA,MAAA4E,WAAAtG,QAAA6tL,EAAAnsL,GAAA4iN,KAAAz2B,KAGA9uL,EAAA07K,OAAA,SAAA/4K,GACA,MAAA4E,WAAAtG,QAAAy6K,EAAA/4K,GAAA4iN,KAAA7pC,KAGA17K,EAAAihN,WAAA,SAAAt+M,GACA,MAAA4E,WAAAtG,QAAA,MAAA0B,EAAAq3K,EAAA+sB,EAAA7kC,EAAAC,EAAA,MAAA6X,GAAAr3K,EAAA,GAAA,GAAAokM,GAAApkM,EAAA,GAAA,GAAAu/J,GAAAv/J,EAAA,GAAA,GAAAw/J,GAAAx/J,EAAA,GAAA,IAAA4iN,KAAA,MAAAvrC,EAAA,OAAAA,EAAA+sB,IAAA7kC,EAAAC,KAYAojD,IAGA,QAAAC,IAAArkN,GACA,MAAAikN,KAAAhX,GAAAjtM,GAAA,GAGA,QAAAskN,IAAA1e,EAAA5kC,GAOA,QAAAo/C,GAAA3gN,EAAAO,GACAyE,EAAA,EAAAzE,GAAAitM,GAAAmE,KAAApxM,GAAAitM,GAAAmE,IACApxM,EAAAitM,GAAAmE,KAAApxM,EAAAitM,GAAAmE,GACA,IAAAnyM,GAAAwF,EAAAykK,GAAAm7C,GAAArkN,GAAAlB,EACA,QAAAG,EAAAkuM,GAAAruM,EAAAW,GAAAgF,EAAAxF,EAAAyvM,GAAA5vM,EAAAW,IAVA,GAAAm8M,GAAAlN,GAAA9I,GACA9mM,EAAA8mM,IAAA5kC,EAAAmsC,GAAAvH,GAAAlsK,GAAAkiL,EAAAlN,GAAA1tC,IAAAtnI,GAAA2qL,GAAArjD,GAAAqjD,GAAAze,IACAnhM,EAAAm3M,EAAA1yC,GAAAm7C,GAAAze,GAAA9mM,GAAAA,CAEA,OAAAA,IASAshN,EAAA3pI,OAAA,SAAAh3E,EAAAO,GACA,GAAAkpM,GAAAzkM,EAAAzE,EAAAf,EAAA8rM,GAAAjsM,GAAAmmJ,GAAAxlJ,EAAAA,EAAAypM,EAAAA,EACA,QAAApf,GAAArqL,EAAAy/B,GAAAgqK,IAAApqM,EAAAisM,GAAA7B,GAAA,EAAArc,GAAA3jB,GAAAzkK,EAAAxF,EAAA,EAAAH,IAAAmuM,KAGAmT,GAdA4D,GAiBA,QAAAO,MACA,MAAAhC,IAAA+B,IACAhqC,MAAA,OACAkoC,WAAA,GAAA,KAGA,QAAAgC,IAAAnW,EAAAC,GACA,OAAAD,EAAAC,GAKA,QAAAmW,MACA,MAAAv1K,IAAAs1K,IACAlqC,MAAA,QAGA,QAAAoqC,IAAA9e,EAAA5kC,GAOA,QAAAo/C,GAAA3gN,EAAAO,GACA,GAAA2kN,GAAA5kN,EAAAC,EAAA4kN,EAAA9lN,EAAAW,CACA,QAAAklN,EAAAxX,GAAAyX,GAAA7kN,EAAA4kN,EAAAjW,GAAAkW,IARA,GAAAhJ,GAAAlN,GAAA9I,GACA9mM,EAAA8mM,IAAA5kC,EAAAmsC,GAAAvH,IAAAgW,EAAAlN,GAAA1tC,KAAAA,EAAA4kC,GACA7lM,EAAA67M,EAAA98M,EAAA8mM,CAEA,OAAA1mK,IAAApgC,GAAAsyM,GAAAoT,IAOApE,EAAA3pI,OAAA,SAAAh3E,EAAAO,GACA,GAAA2kN,GAAA5kN,EAAAC,CACA,QAAA8pL,GAAArqL,EAAAy/B,GAAAylL,IAAA7lN,EAAAisM,GAAA4Z,GAAA5kN,EAAAgrM,GAAAjsM,GAAAmmJ,GAAAxlJ,EAAAA,EAAAklN,EAAAA,KAGAvE,GAGA,QAAAyE,MACA,MAAAtC,IAAAmC,IACApqC,MAAA,SACAC,QAAA,EAAA,UAUA,QAAAuqC,IAAAzW,EAAAC,GACA,GAAA5uM,GAAAstM,GAAAlsM,GAAAqsM,GAAAmB,IAAA/mD,EAAA7nJ,EAAAA,EAAAqlN,EAAAx9D,EAAAA,EAAAA,CACA,QACA8mD,EAAAK,GAAAhvM,IAAAoB,IAAAkkN,GAAA,EAAAC,GAAA19D,EAAAw9D,GAAA,EAAAG,GAAA,EAAAC,GAAA59D,KACA7nJ,GAAAslN,GAAAC,GAAA19D,EAAAw9D,GAAAG,GAAAC,GAAA59D,KAkBA,QAAA69D,MACA,MAAAl2K,IAAA41K,IACAxqC,MAAA,SAGA,QAAA+qC,IAAA5lN,EAAAO,GACA,GAAAizM,GAAAvE,GAAA1uM,GAAAgT,EAAA07L,GAAAjvM,GAAAwzM,CACA,QAAAA,EAAA9F,GAAA1tM,GAAAuT,EAAAm6L,GAAAntM,GAAAgT,GAKA,QAAAsyM,MACA,MAAAp2K,IAAAm2K,IACA/qC,MAAA,SACAgoC,UAAA,IAGA,QAAAiD,IAAAC,EAAAC,EAAAC,EAAAC,GACA,MAAA,KAAAH,GAAA,IAAAC,GAAA,IAAAC,GAAA,IAAAC,EAAAxJ,GAAAuD,IACAzpE,MAAA,SAAAx2I,EAAAO,GACApB,KAAAgrE,OAAAqsE,MAAAx2I,EAAA+lN,EAAAE,EAAA1lN,EAAAylN,EAAAE,MAKA,QAAAC,MAQA,QAAAptM,KAEA,MADAsD,GAAA09L,EAAA,KACAtqK,EATA,GACA02J,GAAA7kC,EAAAC,EAEAllJ,EACA09L,EACAtqK,EALAl8B,EAAA,EAAA0yM,EAAA,EAAAC,EAAA,EAAA7gB,EAAA,EAAAC,EAAA,EAAAuc,EAAAnF,GACAtjC,EAAA,KACAupC,EAAAjG,EAUA,OAAAjtK,IACA06B,OAAA,SAAAA,GACA,MAAA9tD,IAAA09L,IAAA5vI,EAAA9tD,EAAAA,EAAAwlM,EAAAc,EAAA5I,EAAA5vI,KAEAw4I,SAAA,SAAA5gN,GACA,MAAA4E,WAAAtG,QAAAsiN,EAAA5gN,EAAAq3K,EAAA+sB,EAAA7kC,EAAAC,EAAA,KAAAxoJ,KAAA4pM,GAEAtC,WAAA,SAAAt+M,GACA,MAAA4E,WAAAtG,QAAAsiN,EAAA,MAAA5gN,GAAAq3K,EAAA+sB,EAAA7kC,EAAAC,EAAA,KAAAm7C,IAAA3D,GAAA3/B,GAAAr3K,EAAA,GAAA,GAAAokM,GAAApkM,EAAA,GAAA,GAAAu/J,GAAAv/J,EAAA,GAAA,GAAAw/J,GAAAx/J,EAAA,GAAA,IAAAgX,KAAA,MAAAqgK,EAAA,OAAAA,EAAA+sB,IAAA7kC,EAAAC,KAEAsZ,MAAA,SAAA94K,GACA,MAAA4E,WAAAtG,QAAAwhN,EAAAiE,IAAAvyM,GAAAxR,GAAAsjM,EAAA9xL,EAAA+xL,EAAA2gB,EAAAC,GAAAntM,KAAAxF,GAEA26K,UAAA,SAAAnsL,GACA,MAAA4E,WAAAtG,QAAAwhN,EAAAiE,GAAAvyM,EAAA8xL,EAAA9xL,EAAA+xL,EAAA2gB,GAAAlkN,EAAA,GAAAmkN,GAAAnkN,EAAA,IAAAgX,MAAAktM,EAAAC,IAEAE,SAAA,SAAArkN,GACA,MAAA4E,WAAAtG,QAAAwhN,EAAAiE,GAAAvyM,GAAA8xL,EAAAtjM,GAAA,EAAA,GAAAwR,EAAA+xL,EAAA2gB,EAAAC,GAAAntM,KAAAssL,EAAA,GAEAghB,SAAA,SAAAtkN,GACA,MAAA4E,WAAAtG,QAAAwhN,EAAAiE,GAAAvyM,EAAA8xL,EAAA9xL,GAAA+xL,EAAAvjM,GAAA,EAAA,GAAAkkN,EAAAC,GAAAntM,KAAAusL,EAAA,GAEAgb,UAAA,SAAAvlI,EAAAqxG,GACA,MAAAk0B,IAAA7wK,EAAAsrC,EAAAqxG,IAEAm0B,QAAA,SAAA5jK,EAAAyvI,GACA,MAAAm0B,IAAA9wK,EAAAkN,EAAAyvI,IAEAo0B,SAAA,SAAAx3M,EAAAojL,GACA,MAAAo0B,IAAA/wK,EAAAzmC,EAAAojL,IAEAq0B,UAAA,SAAAv1M,EAAAkhL,GACA,MAAAq0B,IAAAhxK,EAAAvkC,EAAAkhL,KAKA,QAAAk6B,IAAA1X,EAAAC,GACA,GAAAmS,GAAAnS,EAAAA,EAAA0X,EAAAvF,EAAAA,CACA,QACApS,GAAA,MAAA,QAAAoS,EAAAuF,GAAAA,GAAA,QAAAvF,EAAA,QAAAuF,GAAA,UACA1X,GAAA,SAAAmS,GAAA,QAAAuF,GAAA,QAAAvF,EAAA,QAAA,QAAAuF,MAiBA,QAAAC,MACA,MAAA/2K,IAAA62K,IACAzrC,MAAA,SAGA,QAAA4rC,IAAAzmN,EAAAO,GACA,OAAA0uM,GAAA1uM,GAAAmtM,GAAA1tM,GAAA0tM,GAAAntM,IAKA,QAAAmmN,MACA,MAAAj3K,IAAAg3K,IACA5rC,MAAA,OACAgoC,UAAA,GAAAlR,IAGA,QAAAgV,IAAA3mN,EAAAO,GACA,GAAAizM,GAAAvE,GAAA1uM,GAAAgT,EAAA,EAAA07L,GAAAjvM,GAAAwzM,CACA,QAAAA,EAAA9F,GAAA1tM,GAAAuT,EAAAm6L,GAAAntM,GAAAgT,GAOA,QAAAqzM,MACA,MAAAn3K,IAAAk3K,IACA9rC,MAAA,KACAgoC,UAAA,KAGA,QAAAgE,IAAAjY,EAAAC,GACA,OAAA50K,GAAAuqL,IAAAhX,GAAAqB,GAAA,KAAAD,GAOA,QAAAkY,MACA,GAAA1nN,GAAAslN,GAAAmC,IACA/rC,EAAA17K,EAAA07K,OACAoS,EAAA9tL,EAAA8tL,MAUA,OARA9tL,GAAA07K,OAAA,SAAA/4K,GACA,MAAA4E,WAAAtG,OAAAy6K,IAAA/4K,EAAA,GAAAA,EAAA,MAAAA,EAAA+4K,KAAA/4K,EAAA,IAAAA,EAAA,MAGA3C,EAAA8tL,OAAA,SAAAnrL,GACA,MAAA4E,WAAAtG,OAAA6sL,GAAAnrL,EAAA,GAAAA,EAAA,GAAAA,EAAA1B,OAAA,EAAA0B,EAAA,GAAA,GAAA,MAAAA,EAAAmrL,KAAAnrL,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAA,MAGAmrL,GAAA,EAAA,EAAA,KACArS,MAAA,SAGA,QAAAksC,IAAAzjN,EAAA2O,GACA,MAAA3O,GAAA2U,SAAAhG,EAAAgG,OAAA,EAAA,EAGA,QAAA+uM,IAAAhgN,GACA,MAAAA,GAAA0wK,OAAAuvC,GAAA,GAAAjgN,EAAA3G,OAGA,QAAA4mN,IAAAjnN,EAAAE,GACA,MAAAF,GAAAE,EAAAF,EAGA,QAAAknN,IAAAlgN,GACA,MAAA,GAAAA,EAAA0wK,OAAAyvC,GAAA,GAGA,QAAAA,IAAA5mN,EAAAL,GACA,MAAAwJ,MAAAC,IAAApJ,EAAAL,EAAAK,GAGA,QAAA6mN,IAAA3qK,GAEA,IADA,GAAAz1C,GACAA,EAAAy1C,EAAAz1C,UAAAy1C,EAAAz1C,EAAA,EACA,OAAAy1C,GAGA,QAAA4qK,IAAA5qK,GAEA,IADA,GAAAz1C,GACAA,EAAAy1C,EAAAz1C,UAAAy1C,EAAAz1C,EAAAA,EAAA3G,OAAA,EACA,OAAAo8C,GAGA,QAAA6qK,MAMA,QAAAA,GAAA7vM,GACA,GAAA8vM,GACAvnN,EAAA,CAGAyX,GAAA+vM,UAAA,SAAA/qK,GACA,GAAAz1C,GAAAy1C,EAAAz1C,QACAA,IACAy1C,EAAAz8C,EAAAgnN,GAAAhgN,GACAy1C,EAAAl8C,EAAA2mN,GAAAlgN,KAEAy1C,EAAAz8C,EAAAunN,EAAAvnN,GAAAynN,EAAAhrK,EAAA8qK,GAAA,EACA9qK,EAAAl8C,EAAA,EACAgnN,EAAA9qK,IAIA,IAAA32B,GAAAshM,GAAA3vM,GACAsM,EAAAsjM,GAAA5vM,GACA2hK,EAAAtzJ,EAAA9lB,EAAAynN,EAAA3hM,EAAA/B,GAAA,EACAu9I,EAAAv9I,EAAA/jB,EAAAynN,EAAA1jM,EAAA+B,GAAA,CAGA,OAAArO,GAAA+vM,UAAAE,EAAA,SAAAjrK,GACAA,EAAAz8C,GAAAy8C,EAAAz8C,EAAAyX,EAAAzX,GAAA+mF,EACAtqC,EAAAl8C,GAAAkX,EAAAlX,EAAAk8C,EAAAl8C,GAAA0mF,GACA,SAAAxqC,GACAA,EAAAz8C,GAAAy8C,EAAAz8C,EAAAo5K,IAAA9X,EAAA8X,GAAAryF,EACAtqC,EAAAl8C,GAAA,GAAAkX,EAAAlX,EAAAk8C,EAAAl8C,EAAAkX,EAAAlX,EAAA,IAAA0mF,IAjCA,GAAAwgI,GAAAV,GACAhgI,EAAA,EACAE,EAAA,EACAygI,GAAA,CA8CA,OAZAJ,GAAAG,WAAA,SAAAznN,GACA,MAAA2G,WAAAtG,QAAAonN,EAAAznN,EAAAsnN,GAAAG,GAGAH,EAAA3qK,KAAA,SAAA38C,GACA,MAAA2G,WAAAtG,QAAAqnN,GAAA,EAAA3gI,GAAA/mF,EAAA,GAAAinF,GAAAjnF,EAAA,GAAAsnN,GAAAI,EAAA,MAAA3gI,EAAAE,IAGAqgI,EAAAI,SAAA,SAAA1nN,GACA,MAAA2G,WAAAtG,QAAAqnN,GAAA,EAAA3gI,GAAA/mF,EAAA,GAAAinF,GAAAjnF,EAAA,GAAAsnN,GAAAI,GAAA3gI,EAAAE,GAAA,MAGAqgI,EAGA,QAAA/vK,IAAAkF,GACA,GAAA63E,GAAA,EACAttH,EAAAy1C,EAAAz1C,SACA1H,EAAA0H,GAAAA,EAAA3G,MACA,IAAAf,EACA,OAAAA,GAAA,GAAAg1H,GAAAttH,EAAA1H,GAAAoT,UADA4hH,GAAA,CAEA73E,GAAA/pC,MAAA4hH,EAGA,QAAAqzF,MACA,MAAAxoN,MAAAqoN,UAAAjwK,IAGA,QAAAqwK,IAAA35F,GACA,GAAA32D,GAAAtwD,EAAA1H,EAAAD,EAAAo9C,EAAAt9C,KAAAyT,GAAA6pC,EACA,IAEA,IADA6a,EAAA1kD,EAAA4H,UAAA5H,KACA6pC,EAAA6a,EAAA3jD,OAEA,GADAs6G,EAAAxxE,GAAAz1C,EAAAy1C,EAAAz1C,SACA,IAAA1H,EAAA,EAAAD,EAAA2H,EAAA3G,OAAAf,EAAAD,IAAAC,EACAsT,EAAA7M,KAAAiB,EAAA1H,UAGAsT,EAAAvS,OACA,OAAAlB,MAGA,QAAA0oN,IAAA55F,GAEA,IADA,GAAAjnH,GAAA1H,EAAAm9C,EAAAt9C,KAAAghL,GAAA1jI,GACAA,EAAA0jI,EAAAxsK,OAEA,GADAs6G,EAAAxxE,GAAAz1C,EAAAy1C,EAAAz1C,SACA,IAAA1H,EAAA0H,EAAA3G,OAAA,EAAAf,GAAA,IAAAA,EACA6gL,EAAAp6K,KAAAiB,EAAA1H,GAGA,OAAAH,MAGA,QAAA2oN,IAAA75F,GAEA,IADA,GAAAjnH,GAAA1H,EAAAD,EAAAo9C,EAAAt9C,KAAAghL,GAAA1jI,GAAA7pC,KACA6pC,EAAA0jI,EAAAxsK,OAEA,GADAf,EAAA7M,KAAA02C,GAAAz1C,EAAAy1C,EAAAz1C,SACA,IAAA1H,EAAA,EAAAD,EAAA2H,EAAA3G,OAAAf,EAAAD,IAAAC,EACA6gL,EAAAp6K,KAAAiB,EAAA1H,GAGA,MAAAm9C,EAAA7pC,EAAAe,OACAs6G,EAAAxxE,EAEA,OAAAt9C,MAGA,QAAA4oN,IAAAr1M,GACA,MAAAvT,MAAAqoN,UAAA,SAAA/qK,GAIA,IAHA,GAAA63E,IAAA5hH,EAAA+pC,EAAA5sC,OAAA,EACA7I,EAAAy1C,EAAAz1C,SACA1H,EAAA0H,GAAAA,EAAA3G,SACAf,GAAA,GAAAg1H,GAAAttH,EAAA1H,GAAAoT,KACA+pC,GAAA/pC,MAAA4hH,IAIA,QAAA0zF,IAAA1uH,GACA,MAAAn6F,MAAA8oN,WAAA,SAAAxrK,GACAA,EAAAz1C,UACAy1C,EAAAz1C,SAAA6J,KAAAyoF,KAKA,QAAA4uH,IAAAlkN,GAIA,IAHA,GAAAD,GAAA5E,KACAgpN,EAAAC,GAAArkN,EAAAC,GACAm8K,GAAAp8K,GACAA,IAAAokN,GACApkN,EAAAA,EAAAkU,OACAkoK,EAAAp6K,KAAAhC,EAGA,KADA,GAAAwP,GAAA4sK,EAAA9/K,OACA2D,IAAAmkN,GACAhoC,EAAArvK,OAAAyC,EAAA,EAAAvP,GACAA,EAAAA,EAAAiU,MAEA,OAAAkoK,GAGA,QAAAioC,IAAA9kN,EAAA2O,GACA,GAAA3O,IAAA2O,EAAA,MAAA3O,EACA,IAAA+kN,GAAA/kN,EAAAglN,YACAC,EAAAt2M,EAAAq2M,YACApoN,EAAA,IAGA,KAFAoD,EAAA+kN,EAAA10M,MACA1B,EAAAs2M,EAAA50M,MACArQ,IAAA2O,GACA/R,EAAAoD,EACAA,EAAA+kN,EAAA10M,MACA1B,EAAAs2M,EAAA50M,KAEA,OAAAzT,GAGA,QAAAsoN,MAEA,IADA,GAAA/rK,GAAAt9C,KAAAghL,GAAA1jI,GACAA,EAAAA,EAAAxkC,QACAkoK,EAAAp6K,KAAA02C,EAEA,OAAA0jI,GAGA,QAAAsoC,MACA,GAAAtoC,KAIA,OAHAhhL,MAAAgC,KAAA,SAAAs7C,GACA0jI,EAAAp6K,KAAA02C,KAEA0jI,EAGA,QAAAuoC,MACA,GAAAC,KAMA,OALAxpN,MAAA8oN,WAAA,SAAAxrK,GACAA,EAAAz1C,UACA2hN,EAAA5iN,KAAA02C,KAGAksK,EAGA,QAAAC,MACA,GAAAnxM,GAAAtY,KAAA+lC,IAMA,OALAztB,GAAAtW,KAAA,SAAAs7C,GACAA,IAAAhlC,GACAytB,EAAAn/B,MAAA8W,OAAA4/B,EAAAxkC,OAAAX,OAAAmlC,MAGAvX,EAGA,QAAA2jL,IAAAh5M,EAAA7I,GACA,GAEAy1C,GAEAjlB,EACAsxL,EACAxpN,EACAD,EAPAoY,EAAA,GAAA+kC,IAAA3sC,GACAk5M,GAAAl5M,EAAA6C,QAAA+E,EAAA/E,MAAA7C,EAAA6C,OAEAytK,GAAA1oK,EAQA,KAFA,MAAAzQ,IAAAA,EAAAgiN,IAEAvsK,EAAA0jI,EAAAxsK,OAEA,GADAo1M,IAAAtsK,EAAA/pC,OAAA+pC,EAAA5sC,KAAA6C,QACAo2M,EAAA9hN,EAAAy1C,EAAA5sC,SAAAxQ,EAAAypN,EAAAzoN,QAEA,IADAo8C,EAAAz1C,SAAA,GAAAsF,OAAAjN,GACAC,EAAAD,EAAA,EAAAC,GAAA,IAAAA,EACA6gL,EAAAp6K,KAAAyxB,EAAAilB,EAAAz1C,SAAA1H,GAAA,GAAAk9C,IAAAssK,EAAAxpN,KACAk4B,EAAAvf,OAAAwkC,EACAjlB,EAAA23F,MAAA1yE,EAAA0yE,MAAA,CAKA,OAAA13G,GAAAwwM,WAAAgB,IAGA,QAAAC,MACA,MAAAL,IAAA1pN,MAAA8oN,WAAAviE,IAGA,QAAAsjE,IAAA7jN,GACA,MAAAA,GAAA6B,SAGA,QAAA0+I,IAAAjpG,GACAA,EAAA5sC,KAAA4sC,EAAA5sC,KAAAA,KAGA,QAAAo5M,IAAAxsK,GACA,GAAAvxC,GAAA,CACA,IAAAuxC,EAAAvxC,OAAAA,SACAuxC,EAAAA,EAAAxkC,SAAAwkC,EAAAvxC,SAAAA,GAGA,QAAAsxC,IAAA3sC,GACA1Q,KAAA0Q,KAAAA,EACA1Q,KAAAgwH,MACAhwH,KAAA+L,OAAA,EACA/L,KAAA8Y,OAAA,KAqBA,QAAAkxM,IAAAtpK,GAKA,IAJA,GACAhhD,GACAS,EAFAF,EAAAygD,EAAAx/C,OAIAjB,GACAE,EAAAoK,KAAAsH,SAAA5R,IAAA,EACAP,EAAAghD,EAAAzgD,GACAygD,EAAAzgD,GAAAygD,EAAAvgD,GACAugD,EAAAvgD,GAAAT,CAGA,OAAAghD,GAGA,QAAAupK,IAAAC,GAGA,IAFA,GAAAnkN,GAAAtG,EAAAU,EAAA,EAAAD,GAAAgqN,EAAAF,GAAAG,GAAAnpN,KAAAkpN,KAAAhpN,OAAA6R,KAEA5S,EAAAD,GACA6F,EAAAmkN,EAAA/pN,GACAV,GAAA2qN,GAAA3qN,EAAAsG,KAAA5F,GACAV,EAAA4qN,GAAAt3M,EAAAu3M,GAAAv3M,EAAAhN,IAAA5F,EAAA,EAGA,OAAAV,GAGA,QAAA6qN,IAAAv3M,EAAAhN,GACA,GAAA5F,GAAAqB,CAEA,IAAA+oN,GAAAxkN,EAAAgN,GAAA,OAAAhN,EAGA,KAAA5F,EAAA,EAAAA,EAAA4S,EAAA7R,SAAAf,EACA,GAAAqqN,GAAAzkN,EAAAgN,EAAA5S,KACAoqN,GAAAE,GAAA13M,EAAA5S,GAAA4F,GAAAgN,GACA,OAAAA,EAAA5S,GAAA4F,EAKA,KAAA5F,EAAA,EAAAA,EAAA4S,EAAA7R,OAAA,IAAAf,EACA,IAAAqB,EAAArB,EAAA,EAAAqB,EAAAuR,EAAA7R,SAAAM,EACA,GAAAgpN,GAAAC,GAAA13M,EAAA5S,GAAA4S,EAAAvR,IAAAuE,IACAykN,GAAAC,GAAA13M,EAAA5S,GAAA4F,GAAAgN,EAAAvR,KACAgpN,GAAAC,GAAA13M,EAAAvR,GAAAuE,GAAAgN,EAAA5S,KACAoqN,GAAAG,GAAA33M,EAAA5S,GAAA4S,EAAAvR,GAAAuE,GAAAgN,GACA,OAAAA,EAAA5S,GAAA4S,EAAAvR,GAAAuE,EAMA,MAAA,IAAAjG,OAGA,QAAA0qN,IAAArmN,EAAA2O,GACA,GAAA63M,GAAAxmN,EAAA9D,EAAAyS,EAAAzS,EAAAunF,EAAA90E,EAAAjS,EAAAsD,EAAAtD,EAAAinF,EAAAh1E,EAAA1R,EAAA+C,EAAA/C,CACA,OAAAupN,GAAA,GAAAA,EAAAA,EAAA/iI,EAAAA,EAAAE,EAAAA,EAGA,QAAAsiI,IAAAjmN,EAAA2O,GACA,GAAA63M,GAAAxmN,EAAA9D,EAAAyS,EAAAzS,EAAA,KAAAunF,EAAA90E,EAAAjS,EAAAsD,EAAAtD,EAAAinF,EAAAh1E,EAAA1R,EAAA+C,EAAA/C,CACA,OAAAupN,GAAA,GAAAA,EAAAA,EAAA/iI,EAAAA,EAAAE,EAAAA,EAGA,QAAAyiI,IAAApmN,EAAA4O,GACA,IAAA,GAAA5S,GAAA,EAAAA,EAAA4S,EAAA7R,SAAAf,EACA,IAAAiqN,GAAAjmN,EAAA4O,EAAA5S,IACA,OAAA,CAGA,QAAA,EAGA,QAAAkqN,IAAAt3M,GACA,OAAAA,EAAA7R,QACA,IAAA,GAAA,MAAA0pN,IAAA73M,EAAA,GACA,KAAA,GAAA,MAAA03M,IAAA13M,EAAA,GAAAA,EAAA,GACA,KAAA,GAAA,MAAA23M,IAAA33M,EAAA,GAAAA,EAAA,GAAAA,EAAA,KAIA,QAAA63M,IAAAzmN,GACA,OACAtD,EAAAsD,EAAAtD,EACAO,EAAA+C,EAAA/C,EACAf,EAAA8D,EAAA9D,GAIA,QAAAoqN,IAAAtmN,EAAA2O,GACA,GAAAqvJ,GAAAh+J,EAAAtD,EAAAuhK,EAAAj+J,EAAA/C,EAAAgmE,EAAAjjE,EAAA9D,EACAgiK,EAAAvvJ,EAAAjS,EAAAyhK,EAAAxvJ,EAAA1R,EAAAypN,EAAA/3M,EAAAzS,EACAyqN,EAAAzoD,EAAAF,EAAA4oD,EAAAzoD,EAAAF,EAAA4oD,EAAAH,EAAAzjJ,EACAtmE,EAAAyJ,KAAA87I,KAAAykE,EAAAA,EAAAC,EAAAA,EACA,QACAlqN,GAAAshK,EAAAE,EAAAyoD,EAAAhqN,EAAAkqN,GAAA,EACA5pN,GAAAghK,EAAAE,EAAAyoD,EAAAjqN,EAAAkqN,GAAA,EACA3qN,GAAAS,EAAAsmE,EAAAyjJ,GAAA,GAIA,QAAAH,IAAAvmN,EAAA2O,EAAA/R,GACA,GAAAohK,GAAAh+J,EAAAtD,EAAAuhK,EAAAj+J,EAAA/C,EAAAgmE,EAAAjjE,EAAA9D,EACAgiK,EAAAvvJ,EAAAjS,EAAAyhK,EAAAxvJ,EAAA1R,EAAAypN,EAAA/3M,EAAAzS,EACAonM,EAAA1mM,EAAAF,EAAA6mM,EAAA3mM,EAAAK,EAAA6pN,EAAAlqN,EAAAV,EACA2oE,EAAAm5F,EAAAE,EACA6oD,EAAA/oD,EAAAslC,EACA9N,EAAAv3B,EAAAE,EACAo3B,EAAAt3B,EAAAslC,EACA0R,EAAAyR,EAAAzjJ,EACA+jJ,EAAAF,EAAA7jJ,EACAt0B,EAAAqvH,EAAAA,EAAAC,EAAAA,EAAAh7F,EAAAA,EACAr0B,EAAAD,EAAAuvH,EAAAA,EAAAC,EAAAA,EAAAuoD,EAAAA,EACA/yC,EAAAhlI,EAAA20J,EAAAA,EAAAC,EAAAA,EAAAujB,EAAAA,EACAnP,EAAAoP,EAAAvxB,EAAA3wH,EAAA0wH,EACA1K,GAAA2K,EAAA7hB,EAAA4hB,EAAA3mJ,IAAA,EAAA+oK,GAAA35C,EACA+sB,GAAAwK,EAAA0f,EAAAzf,EAAAwxB,GAAArP,EACA7sB,GAAAi8B,EAAAn4K,EAAAi2B,EAAA8uG,IAAA,EAAAgkC,GAAA15C,EACA+sB,GAAAnmH,EAAAmiJ,EAAAD,EAAA9R,GAAA0C,EACAvnM,EAAA26K,EAAAA,EAAAC,EAAAA,EAAA,EACAp8K,EAAA,GAAAq0D,EAAA4nH,EAAAE,EAAAD,EAAAE,GACAluL,EAAA+tL,EAAAA,EAAAC,EAAAA,EAAA7nH,EAAAA,EACA/mE,IAAAkU,GAAAxB,EAAAxI,KAAA87I,KAAAtzI,EAAAA,EAAA,EAAAwB,EAAAtT,KAAA,EAAAsT,GAAAtT,EAAA8R,EACA,QACAlS,EAAAshK,EAAA6sB,EAAAE,EAAA7uL,EACAe,EAAAghK,EAAA6sB,EAAAE,EAAA9uL,EACAA,EAAAA,GAIA,QAAAm6D,IAAA1nD,EAAA3O,EAAApD,GACA,GAAAF,GAAAmoE,EACA5nE,EAAAu4L,EADA/xG,EAAA90E,EAAAjS,EAAAsD,EAAAtD,EACAinF,EAAAh1E,EAAA1R,EAAA+C,EAAA/C,EACA2xC,EAAA60C,EAAAA,EAAAE,EAAAA,CACA/0C,IACAi2B,EAAA7kE,EAAA9D,EAAAU,EAAAV,EAAA2oE,GAAAA,EACA2wH,EAAA7mL,EAAAzS,EAAAU,EAAAV,EAAAs5L,GAAAA,EACA3wH,EAAA2wH,GACA94L,GAAAkyC,EAAA4mJ,EAAA3wH,IAAA,EAAAj2B,GACA3xC,EAAAmJ,KAAA87I,KAAA97I,KAAAC,IAAA,EAAAmvL,EAAA5mJ,EAAAlyC,EAAAA,IACAE,EAAAF,EAAAiS,EAAAjS,EAAAA,EAAA+mF,EAAAxmF,EAAA0mF,EACA/mF,EAAAK,EAAA0R,EAAA1R,EAAAP,EAAAinF,EAAA1mF,EAAAwmF,IAEA/mF,GAAAkyC,EAAAi2B,EAAA2wH,IAAA,EAAA5mJ,GACA3xC,EAAAmJ,KAAA87I,KAAA97I,KAAAC,IAAA,EAAAw+D,EAAAj2B,EAAAlyC,EAAAA,IACAE,EAAAF,EAAAsD,EAAAtD,EAAAA,EAAA+mF,EAAAxmF,EAAA0mF,EACA/mF,EAAAK,EAAA+C,EAAA/C,EAAAP,EAAAinF,EAAA1mF,EAAAwmF,KAGA7mF,EAAAF,EAAAsD,EAAAtD,EAAAE,EAAAV,EACAU,EAAAK,EAAA+C,EAAA/C,GAIA,QAAAgqN,IAAAjnN,EAAA2O,GACA,GAAA63M,GAAAxmN,EAAA9D,EAAAyS,EAAAzS,EAAA,KAAAunF,EAAA90E,EAAAjS,EAAAsD,EAAAtD,EAAAinF,EAAAh1E,EAAA1R,EAAA+C,EAAA/C,CACA,OAAAupN,GAAA,GAAAA,EAAAA,EAAA/iI,EAAAA,EAAAE,EAAAA,EAGA,QAAAxuB,IAAAhc,GACA,GAAAn5C,GAAAm5C,EAAA16C,EACAkQ,EAAAwqC,EAAA7pC,KAAA7Q,EACAk5M,EAAA33M,EAAA9D,EAAAyS,EAAAzS,EACAunF,GAAAzjF,EAAAtD,EAAAiS,EAAAzS,EAAAyS,EAAAjS,EAAAsD,EAAA9D,GAAAy7M,EACAh0H,GAAA3jF,EAAA/C,EAAA0R,EAAAzS,EAAAyS,EAAA1R,EAAA+C,EAAA9D,GAAAy7M,CACA,OAAAl0H,GAAAA,EAAAE,EAAAA,EAGA,QAAAujI,IAAAlqD,GACAnhK,KAAA4C,EAAAu+J,EACAnhK,KAAAyT,KAAA,KACAzT,KAAAw8C,SAAA,KAGA,QAAA8uK,IAAApB,GACA,KAAAhqN,EAAAgqN,EAAAhpN,QAAA,MAAA,EAEA,IAAAiD,GAAA2O,EAAA/R,EAAAb,EAAAqrN,EAAAxR,EAAA55M,EAAAqB,EAAA4S,EAAAo3M,EAAAC,CAIA,IADAtnN,EAAA+lN,EAAA,GAAA/lN,EAAAtD,EAAA,EAAAsD,EAAA/C,EAAA,IACAlB,EAAA,GAAA,MAAAiE,GAAA9D,CAIA,IADAyS,EAAAo3M,EAAA,GAAA/lN,EAAAtD,GAAAiS,EAAAzS,EAAAyS,EAAAjS,EAAAsD,EAAA9D,EAAAyS,EAAA1R,EAAA,IACAlB,EAAA,GAAA,MAAAiE,GAAA9D,EAAAyS,EAAAzS,CAGAm6D,IAAA1nD,EAAA3O,EAAApD,EAAAmpN,EAAA,IAGA/lN,EAAA,GAAAknN,IAAAlnN,GAAA2O,EAAA,GAAAu4M,IAAAv4M,GAAA/R,EAAA,GAAAsqN,IAAAtqN,GACAoD,EAAAsP,KAAA1S,EAAAy7C,SAAA1pC,EACAA,EAAAW,KAAAtP,EAAAq4C,SAAAz7C,EACAA,EAAA0S,KAAAX,EAAA0pC,SAAAr4C,CAGAunN,GAAA,IAAAvrN,EAAA,EAAAA,EAAAD,IAAAC,EAAA,CACAq6D,GAAAr2D,EAAAvB,EAAAkQ,EAAAlQ,EAAA7B,EAAAmpN,EAAA/pN,IAAAY,EAAA,GAAAsqN,IAAAtqN,GAKAS,EAAAsR,EAAAW,KAAAW,EAAAjQ,EAAAq4C,SAAAgvK,EAAA14M,EAAAlQ,EAAAvC,EAAAorN,EAAAtnN,EAAAvB,EAAAvC,CACA,IACA,GAAAmrN,GAAAC,EAAA,CACA,GAAAL,GAAA5pN,EAAAoB,EAAA7B,EAAA6B,GAAA,CACAkQ,EAAAtR,EAAA2C,EAAAsP,KAAAX,EAAAA,EAAA0pC,SAAAr4C,IAAAhE,CACA,SAAAurN,GAEAF,GAAAhqN,EAAAoB,EAAAvC,EAAAmB,EAAAA,EAAAiS,SACA,CACA,GAAA23M,GAAAh3M,EAAAxR,EAAA7B,EAAA6B,GAAA,CACAuB,EAAAiQ,EAAAjQ,EAAAsP,KAAAX,EAAAA,EAAA0pC,SAAAr4C,IAAAhE,CACA,SAAAurN,GAEAD,GAAAr3M,EAAAxR,EAAAvC,EAAA+T,EAAAA,EAAAooC,gBAEAh7C,IAAA4S,EAAAX,KAOA,KAJA1S,EAAAy7C,SAAAr4C,EAAApD,EAAA0S,KAAAX,EAAA3O,EAAAsP,KAAAX,EAAA0pC,SAAA1pC,EAAA/R,EAGAwqN,EAAAjyJ,GAAAn1D,IACApD,EAAAA,EAAA0S,QAAAX,IACAinM,EAAAzgJ,GAAAv4D,IAAAwqN,IACApnN,EAAApD,EAAAwqN,EAAAxR,EAGAjnM,GAAA3O,EAAAsP,KAIA,IAAAtP,GAAA2O,EAAAlQ,GAAA7B,EAAA+R,GAAA/R,EAAAA,EAAA0S,QAAAX,GAAA3O,EAAAyC,KAAA7F,EAAA6B,EAGA,KAHA7B,EAAAkpN,GAAA9lN,GAGAhE,EAAA,EAAAA,EAAAD,IAAAC,EAAAgE,EAAA+lN,EAAA/pN,GAAAgE,EAAAtD,GAAAE,EAAAF,EAAAsD,EAAA/C,GAAAL,EAAAK,CAEA,OAAAL,GAAAV,EAGA,QAAA6a,IAAAgvM,GAEA,MADAoB,IAAApB,GACAA,EAGA,QAAAyB,IAAA9lN,GACA,MAAA,OAAAA,EAAA,KAAA+lN,GAAA/lN,GAGA,QAAA+lN,IAAA/lN,GACA,GAAA,kBAAAA,GAAA,KAAA,IAAA/F;uCACA,OAAA+F,GAGA,QAAAgmN,MACA,MAAA,GAGA,QAAAC,IAAAjrN,GACA,MAAA,YACA,MAAAA,IAIA,QAAAkrN,IAAA/lN,GACA,MAAAuE,MAAA87I,KAAArgJ,EAAAuN,OAGA,QAAAy4M,MAMA,QAAAN,GAAApzM,GAYA,MAXAA,GAAAzX,EAAA+mF,EAAA,EAAAtvE,EAAAlX,EAAA0mF,EAAA,EACAk5E,EACA1oJ,EAAAwwM,WAAAmD,GAAAjrD,IACAqnD,UAAA6D,GAAArlM,EAAA,KACAiiM,WAAAqD,GAAA,IAEA7zM,EAAAwwM,WAAAmD,GAAAF,KACA1D,UAAA6D,GAAAL,GAAA,IACAxD,UAAA6D,GAAArlM,EAAAvO,EAAAjY,EAAAkK,KAAAyuD,IAAA4uB,EAAAE,KACAghI,WAAAqD,GAAA5hN,KAAAyuD,IAAA4uB,EAAAE,IAAA,EAAAxvE,EAAAjY,KAEAiY,EAjBA,GAAA0oJ,GAAA,KACAp5E,EAAA,EACAE,EAAA,EACAjhE,EAAAglM,EA6BA,OAZAH,GAAA1qD,OAAA,SAAAngK,GACA,MAAA2G,WAAAtG,QAAA8/J,EAAA2qD,GAAA9qN,GAAA6qN,GAAA1qD,GAGA0qD,EAAAluK,KAAA,SAAA38C,GACA,MAAA2G,WAAAtG,QAAA0mF,GAAA/mF,EAAA,GAAAinF,GAAAjnF,EAAA,GAAA6qN,IAAA9jI,EAAAE,IAGA4jI,EAAA7kM,QAAA,SAAAhmB,GACA,MAAA2G,WAAAtG,QAAA2lB,EAAA,kBAAAhmB,GAAAA,EAAAirN,IAAAjrN,GAAA6qN,GAAA7kM,GAGA6kM,EAGA,QAAAO,IAAAjrD,GACA,MAAA,UAAA1jH,GACAA,EAAAz1C,WACAy1C,EAAAj9C,EAAAkK,KAAAC,IAAA,GAAAw2J,EAAA1jH,IAAA,KAKA,QAAA4uK,IAAArlM,EAAAzS,GACA,MAAA,UAAAkpC,GACA,GAAAz1C,EAAAy1C,EAAAz1C,SAAA,CACA,GAAAA,GACA1H,EAGAV,EAFAS,EAAA2H,EAAA3G,OACAb,EAAAwmB,EAAAy2B,GAAAlpC,GAAA,CAGA,IAAA/T,EAAA,IAAAF,EAAA,EAAAA,EAAAD,IAAAC,EAAA0H,EAAA1H,GAAAE,GAAAA,CAEA,IADAZ,EAAA6rN,GAAAzjN,GACAxH,EAAA,IAAAF,EAAA,EAAAA,EAAAD,IAAAC,EAAA0H,EAAA1H,GAAAE,GAAAA,CACAi9C,GAAAj9C,EAAAZ,EAAAY,IAKA,QAAA8rN,IAAA/3M,GACA,MAAA,UAAAkpC,GACA,GAAAxkC,GAAAwkC,EAAAxkC,MACAwkC,GAAAj9C,GAAA+T,EACA0E,IACAwkC,EAAAz8C,EAAAiY,EAAAjY,EAAAuT,EAAAkpC,EAAAz8C,EACAy8C,EAAAl8C,EAAA0X,EAAA1X,EAAAgT,EAAAkpC,EAAAl8C,IAKA,QAAAgrN,IAAA9uK,GACAA,EAAA28H,GAAA1vK,KAAAwa,MAAAu4B,EAAA28H,IACA38H,EAAA0pJ,GAAAz8L,KAAAwa,MAAAu4B,EAAA0pJ,IACA1pJ,EAAA6kH,GAAA53J,KAAAwa,MAAAu4B,EAAA6kH,IACA7kH,EAAA8kH,GAAA73J,KAAAwa,MAAAu4B,EAAA8kH,IAGA,QAAAiqD,IAAAvzM,EAAAmhK,EAAA+sB,EAAA7kC,EAAAC,GAOA,IANA,GACA9kH,GADA0jI,EAAAloK,EAAAjR,SAEA1H,GAAA,EACAD,EAAA8gL,EAAA9/K,OACAkT,EAAA0E,EAAAvF,QAAA4uJ,EAAA8X,GAAAnhK,EAAAvF,QAEApT,EAAAD,GACAo9C,EAAA0jI,EAAA7gL,GAAAm9C,EAAA0pJ,GAAAA,EAAA1pJ,EAAA8kH,GAAAA,EACA9kH,EAAA28H,GAAAA,EAAA38H,EAAA6kH,GAAA8X,GAAA38H,EAAA/pC,MAAAa,EAIA,QAAAk4M,MAMA,QAAAA,GAAAh0M,GACA,GAAApY,GAAAoY,EAAAvM,OAAA,CAOA,OANAuM,GAAA2hK,GACA3hK,EAAA0uL,GAAAngL,EACAvO,EAAA6pJ,GAAAv6E,EACAtvE,EAAA8pJ,GAAAt6E,EAAA5nF,EACAoY,EAAAwwM,WAAAyD,EAAAzkI,EAAA5nF,IACA6kB,GAAAzM,EAAAwwM,WAAAsD,IACA9zM,EAGA,QAAAi0M,GAAAzkI,EAAA5nF,GACA,MAAA,UAAAo9C,GACAA,EAAAz1C,UACAwkN,GAAA/uK,EAAAA,EAAA28H,GAAAnyF,GAAAxqC,EAAA0yE,MAAA,GAAA9vH,EAAAo9C,EAAA6kH,GAAAr6E,GAAAxqC,EAAA0yE,MAAA,GAAA9vH,EAEA,IAAA+5K,GAAA38H,EAAA28H,GACA+sB,EAAA1pJ,EAAA0pJ,GACA7kC,EAAA7kH,EAAA6kH,GAAAt7I,EACAu7I,EAAA9kH,EAAA8kH,GAAAv7I,CACAs7I,GAAA8X,IAAAA,EAAA9X,GAAA8X,EAAA9X,GAAA,GACAC,EAAA4kC,IAAAA,EAAA5kC,GAAA4kC,EAAA5kC,GAAA,GACA9kH,EAAA28H,GAAAA,EACA38H,EAAA0pJ,GAAAA,EACA1pJ,EAAA6kH,GAAAA,EACA7kH,EAAA8kH,GAAAA,GA9BA,GAAAx6E,GAAA,EACAE,EAAA,EACAjhE,EAAA,EACA9B,GAAA,CA2CA,OAZAunM,GAAAvnM,MAAA,SAAAlkB,GACA,MAAA2G,WAAAtG,QAAA6jB,IAAAlkB,EAAAyrN,GAAAvnM,GAGAunM,EAAA9uK,KAAA,SAAA38C,GACA,MAAA2G,WAAAtG,QAAA0mF,GAAA/mF,EAAA,GAAAinF,GAAAjnF,EAAA,GAAAyrN,IAAA1kI,EAAAE,IAGAwkI,EAAAzlM,QAAA,SAAAhmB,GACA,MAAA2G,WAAAtG,QAAA2lB,GAAAhmB,EAAAyrN,GAAAzlM,GAGAylM,EAOA,QAAAE,IAAAxmN,GACA,MAAAA,GAAAwM,GAGA,QAAAi6M,IAAAzmN,GACA,MAAAA,GAAA0mN,SAGA,QAAAC,MAIA,QAAAA,GAAAj8M,GACA,GAAA1K,GACA7F,EAEAmY,EACAQ,EACAwkC,EAEAgsJ,EACAsjB,EANA1sN,EAAAwQ,EAAAxP,OAIA8/K,EAAA,GAAA7zK,OAAAjN,GAGA2sN,IAEA,KAAA1sN,EAAA,EAAAA,EAAAD,IAAAC,EACA6F,EAAA0K,EAAAvQ,GAAAm9C,EAAA0jI,EAAA7gL,GAAA,GAAAk9C,IAAAr3C,GACA,OAAAsjM,EAAA92L,EAAAxM,EAAA7F,EAAAuQ,MAAA44L,GAAA,MACAsjB,EAAAE,IAAAxvK,EAAA9qC,GAAA82L,GACAujB,EAAAD,GAAAA,IAAAC,GAAAE,GAAAzvK,EAIA,KAAAn9C,EAAA,EAAAA,EAAAD,IAAAC,EAEA,GADAm9C,EAAA0jI,EAAA7gL,GACA,OADAmpM,EAAAojB,EAAAh8M,EAAAvQ,GAAAA,EAAAuQ,MACA44L,GAAA,IAGA,CAEA,KADAxwL,EAAA+zM,EAAAC,GAAAxjB,IACA,KAAA,IAAAxpM,OAAA,YAAAwpM,EACA,IAAAxwL,IAAAi0M,GAAA,KAAA,IAAAjtN,OAAA,cAAAwpM,EACAxwL,GAAAjR,SAAAiR,EAAAjR,SAAAjB,KAAA02C,GACAxkC,EAAAjR,UAAAy1C,GACAA,EAAAxkC,OAAAA,MATA,CACA,GAAAR,EAAA,KAAA,IAAAxY,OAAA,iBACAwY,GAAAglC,EAWA,IAAAhlC,EAAA,KAAA,IAAAxY,OAAA,UAIA,IAHAwY,EAAAQ,OAAAk0M,GACA10M,EAAAwwM,WAAA,SAAAxrK,GAAAA,EAAA0yE,MAAA1yE,EAAAxkC,OAAAk3G,MAAA,IAAA9vH,IAAA4oN,WAAAgB,IACAxxM,EAAAQ,OAAA,KACA5Y,EAAA,EAAA,KAAA,IAAAJ,OAAA,QAEA,OAAAwY,GA5CA,GAAA9F,GAAAg6M,GACAE,EAAAD,EAsDA,OARAE,GAAAn6M,GAAA,SAAA3R,GACA,MAAA2G,WAAAtG,QAAAsR,EAAAo5M,GAAA/qN,GAAA8rN,GAAAn6M,GAGAm6M,EAAAD,SAAA,SAAA7rN,GACA,MAAA2G,WAAAtG,QAAAwrN,EAAAd,GAAA/qN,GAAA8rN,GAAAD,GAGAC,EAGA,QAAAM,IAAA9oN,EAAA2O,GACA,MAAA3O,GAAA2U,SAAAhG,EAAAgG,OAAA,EAAA,EAWA,QAAAo0M,IAAA1sN,GACA,GAAAqH,GAAArH,EAAAqH,QACA,OAAAA,GAAAA,EAAA,GAAArH,EAAAd,EAIA,QAAAytN,IAAA3sN,GACA,GAAAqH,GAAArH,EAAAqH,QACA,OAAAA,GAAAA,EAAAA,EAAA3G,OAAA,GAAAV,EAAAd,EAKA,QAAA0tN,IAAAC,EAAAC,EAAAv9M,GACA,GAAA28B,GAAA38B,GAAAu9M,EAAAntN,EAAAktN,EAAAltN,EACAmtN,GAAAvsN,GAAA2rC,EACA4gL,EAAAlpN,GAAA2L,EACAs9M,EAAAtsN,GAAA2rC,EACA4gL,EAAAz4M,GAAA9E,EACAu9M,EAAArtN,GAAA8P,EAMA,QAAAw9M,IAAA/sN,GAMA,IALA,GAIAiB,GAJAsO,EAAA,EACA28B,EAAA,EACA7kC,EAAArH,EAAAqH,SACA1H,EAAA0H,EAAA3G,SAEAf,GAAA,GACAsB,EAAAoG,EAAA1H,GACAsB,EAAAoT,GAAA9E,EACAtO,EAAAxB,GAAA8P,EACAA,GAAAtO,EAAA2C,GAAAsoC,GAAAjrC,EAAAV,GAMA,QAAAysN,IAAAC,EAAAjtN,EAAAwoN,GACA,MAAAyE,GAAAtpN,EAAA2U,SAAAtY,EAAAsY,OAAA20M,EAAAtpN,EAAA6kN,EAGA,QAAA0E,IAAApwK,EAAAn9C,GACAH,KAAA4C,EAAA06C,EACAt9C,KAAA8Y,OAAA,KACA9Y,KAAA6H,SAAA,KACA7H,KAAAuU,EAAA,KACAvU,KAAAmE,EAAAnE,KACAA,KAAA6U,EAAA,EACA7U,KAAAC,EAAA,EACAD,KAAAe,EAAA,EACAf,KAAAoE,EAAA,EACApE,KAAAN,EAAA,KACAM,KAAAG,EAAAA,EAKA,QAAAwtN,IAAAr1M,GASA,IARA,GACAglC,GAEAjlB,EACAxwB,EACA1H,EACAD,EANAwmM,EAAA,GAAAgnB,IAAAp1M,EAAA,GAEA0oK,GAAA0lB,GAMAppJ,EAAA0jI,EAAAxsK,OACA,GAAA3M,EAAAy1C,EAAA16C,EAAAiF,SAEA,IADAy1C,EAAAz1C,SAAA,GAAAsF,OAAAjN,EAAA2H,EAAA3G,QACAf,EAAAD,EAAA,EAAAC,GAAA,IAAAA,EACA6gL,EAAAp6K,KAAAyxB,EAAAilB,EAAAz1C,SAAA1H,GAAA,GAAAutN,IAAA7lN,EAAA1H,GAAAA,IACAk4B,EAAAvf,OAAAwkC,CAMA,QADAopJ,EAAA5tL,OAAA,GAAA40M,IAAA,KAAA,IAAA7lN,UAAA6+L,GACAA,EAIA,QAAAA,MAMA,QAAAA,GAAApuL,GACA,GAAA5Y,GAAAiuN,GAAAr1M,EAOA,IAJA5Y,EAAA2oN,UAAAuF,GAAAluN,EAAAoZ,OAAA7Y,GAAAP,EAAAmV,EACAnV,EAAAopN,WAAA+E,GAGAtF,EAAAjwM,EAAAwwM,WAAAgF,OAIA,CACA,GAAAnnM,GAAArO,EACAsM,EAAAtM,EACA+qB,EAAA/qB,CACAA,GAAAwwM,WAAA,SAAAxrK,GACAA,EAAAz8C,EAAA8lB,EAAA9lB,IAAA8lB,EAAA22B,GACAA,EAAAz8C,EAAA+jB,EAAA/jB,IAAA+jB,EAAA04B,GACAA,EAAA0yE,MAAA3sF,EAAA2sF,QAAA3sF,EAAAia,IAEA,IAAAl5C,GAAAuiB,IAAA/B,EAAA,EAAA0jM,EAAA3hM,EAAA/B,GAAA,EACAkiM,EAAA1iN,EAAAuiB,EAAA9lB,EACA+lN,EAAAh/H,GAAAhjE,EAAA/jB,EAAAuD,EAAA0iN,GACAD,EAAA/+H,GAAAzkD,EAAA2sF,OAAA,EACA13G,GAAAwwM,WAAA,SAAAxrK,GACAA,EAAAz8C,GAAAy8C,EAAAz8C,EAAAimN,GAAAF,EACAtpK,EAAAl8C,EAAAk8C,EAAA0yE,MAAA62F,IAIA,MAAAvuM,GAOA,QAAAs1M,GAAAptN,GACA,GAAAqH,GAAArH,EAAAqH,SACAqT,EAAA1a,EAAAsY,OAAAjR,SACApG,EAAAjB,EAAAL,EAAA+a,EAAA1a,EAAAL,EAAA,GAAA,IACA,IAAA0H,EAAA,CACA0lN,GAAA/sN,EACA,IAAAutN,IAAAlmN,EAAA,GAAAgN,EAAAhN,EAAAA,EAAA3G,OAAA,GAAA2T,GAAA,CACApT,IACAjB,EAAAqU,EAAApT,EAAAoT,EAAAyzM,EAAA9nN,EAAAoC,EAAAnB,EAAAmB,GACApC,EAAAP,EAAAO,EAAAqU,EAAAk5M,GAEAvtN,EAAAqU,EAAAk5M,MAEAtsN,KACAjB,EAAAqU,EAAApT,EAAAoT,EAAAyzM,EAAA9nN,EAAAoC,EAAAnB,EAAAmB,GAEApC,GAAAsY,OAAAvE,EAAAy5M,EAAAxtN,EAAAiB,EAAAjB,EAAAsY,OAAAvE,GAAA2G,EAAA,IAIA,QAAA2yM,GAAArtN,GACAA,EAAAoC,EAAA/B,EAAAL,EAAAqU,EAAArU,EAAAsY,OAAA7Y,EACAO,EAAAP,GAAAO,EAAAsY,OAAA7Y,EAcA,QAAA+tN,GAAAxtN,EAAAiB,EAAAunN,GACA,GAAAvnN,EAAA,CAUA,IATA,GAQAsO,GARAk+M,EAAAztN,EACA0tN,EAAA1tN,EACAitN,EAAAhsN,EACA0sN,EAAAF,EAAAn1M,OAAAjR,SAAA,GACAumN,EAAAH,EAAAhuN,EACAouN,EAAAH,EAAAjuN,EACAquN,EAAAb,EAAAxtN,EACAsuN,EAAAJ,EAAAluN,EAEAwtN,EAAAN,GAAAM,GAAAQ,EAAAf,GAAAe,GAAAR,GAAAQ,GACAE,EAAAjB,GAAAiB,GACAD,EAAAf,GAAAe,GACAA,EAAA/pN,EAAA3D,EACAuP,EAAA09M,EAAA54M,EAAAy5M,EAAAL,EAAAp5M,EAAAu5M,EAAA9F,EAAAmF,EAAA7qN,EAAAqrN,EAAArrN,GACAmN,EAAA,IACAq9M,GAAAI,GAAAC,EAAAjtN,EAAAwoN,GAAAxoN,EAAAuP,GACAq+M,GAAAr+M,EACAs+M,GAAAt+M,GAEAu+M,GAAAb,EAAAxtN,EACAmuN,GAAAH,EAAAhuN,EACAsuN,GAAAJ,EAAAluN,EACAouN,GAAAH,EAAAjuN,CAEAwtN,KAAAN,GAAAe,KACAA,EAAAxuN,EAAA+tN,EACAS,EAAAjuN,GAAAquN,EAAAD,GAEAJ,IAAAf,GAAAiB,KACAA,EAAAzuN,EAAAuuN,EACAE,EAAAluN,GAAAmuN,EAAAG,EACAvF,EAAAxoN,GAGA,MAAAwoN,GAGA,QAAA8E,GAAAxwK,GACAA,EAAAz8C,GAAA+mF,EACAtqC,EAAAl8C,EAAAk8C,EAAA0yE,MAAAloC,EAxHA,GAAAwgI,GAAA2E,GACArlI,EAAA,EACAE,EAAA,EACAygI,EAAA,IAoIA,OAZA7hB,GAAA4hB,WAAA,SAAAznN,GACA,MAAA2G,WAAAtG,QAAAonN,EAAAznN,EAAA6lM,GAAA4hB,GAGA5hB,EAAAlpJ,KAAA,SAAA38C,GACA,MAAA2G,WAAAtG,QAAAqnN,GAAA,EAAA3gI,GAAA/mF,EAAA,GAAAinF,GAAAjnF,EAAA,GAAA6lM,GAAA6hB,EAAA,MAAA3gI,EAAAE,IAGA4+G,EAAA6hB,SAAA,SAAA1nN,GACA,MAAA2G,WAAAtG,QAAAqnN,GAAA,EAAA3gI,GAAA/mF,EAAA,GAAAinF,GAAAjnF,EAAA,GAAA6lM,GAAA6hB,GAAA3gI,EAAAE,GAAA,MAGA4+G,EAGA,QAAA8nB,IAAA11M,EAAAmhK,EAAA+sB,EAAA7kC,EAAAC,GAOA,IANA,GACA9kH,GADA0jI,EAAAloK,EAAAjR,SAEA1H,GAAA,EACAD,EAAA8gL,EAAA9/K,OACAkT,EAAA0E,EAAAvF,QAAA6uJ,EAAA4kC,GAAAluL,EAAAvF,QAEApT,EAAAD,GACAo9C,EAAA0jI,EAAA7gL,GAAAm9C,EAAA28H,GAAAA,EAAA38H,EAAA6kH,GAAAA,EACA7kH,EAAA0pJ,GAAAA,EAAA1pJ,EAAA8kH,GAAA4kC,GAAA1pJ,EAAA/pC,MAAAa,EAMA,QAAAq6M,IAAAv5F,EAAAp8G,EAAAmhK,EAAA+sB,EAAA7kC,EAAAC,GAkBA,IAjBA,GAEAjyC,GACA94G,EAIAuwE,EAAAE,EAEA4mI,EACA3sD,EACAC,EACA2sD,EACAC,EACAplB,EACAqlB,EAfA93F,KACAiqD,EAAAloK,EAAAjR,SAGA2wK,EAAA,EACAnkD,EAAA,EACAn0H,EAAA8gL,EAAA9/K,OAEAqS,EAAAuF,EAAAvF,MASAilK,EAAAt4K,GAAA,CACA0nF,EAAAu6E,EAAA8X,EAAAnyF,EAAAs6E,EAAA4kC,CAGA,IAAA0nB,EAAA1tC,EAAA3sD,KAAA9gH,aAAAm7M,GAAAr6F,EAAAn0H,EAOA,KANA6hK,EAAAC,EAAA0sD,EACAllB,EAAAj/L,KAAAC,IAAAs9E,EAAAF,EAAAA,EAAAE,IAAAv0E,EAAA2hH,GACA25F,EAAAH,EAAAA,EAAAllB,EACAolB,EAAArkN,KAAAC,IAAAw3J,EAAA6sD,EAAAA,EAAA9sD,GAGA1tC,EAAAn0H,IAAAm0H,EAAA,CAMA,GALAq6F,GAAAr3M,EAAA2pK,EAAA3sD,GAAA9gH,MACA8D,EAAA0qJ,IAAAA,EAAA1qJ,GACAA,EAAA2qJ,IAAAA,EAAA3qJ,GACAw3M,EAAAH,EAAAA,EAAAllB,GACAmlB,EAAApkN,KAAAC,IAAAw3J,EAAA6sD,EAAAA,EAAA9sD,IACA6sD,EAAA,CAAAF,GAAAr3M,CAAA,OACAu3M,EAAAD,EAIA53F,EAAAnwH,KAAAupH,GAAA58G,MAAAm7M,EAAAI,KAAAlnI,EAAAE,EAAAjgF,SAAAm5K,EAAAr+K,MAAA61K,EAAAnkD,KACAlE,EAAA2+F,KAAAzC,GAAAl8F,EAAA8pD,EAAA+sB,EAAA7kC,EAAA5uJ,EAAAyzL,GAAAl/G,EAAA4mI,EAAAn7M,EAAA6uJ,GACAosD,GAAAr+F,EAAA8pD,EAAA+sB,EAAAzzL,EAAA0mK,GAAAryF,EAAA8mI,EAAAn7M,EAAA4uJ,EAAAC,GACA7uJ,GAAAm7M,EAAAl2C,EAAAnkD,EAGA,MAAA0C,GAgBA,QAAAg4F,MAYA,QAAAC,GAAA12M,GAQA,MAPAA,GAAA2hK,GACA3hK,EAAA0uL,GAAA,EACA1uL,EAAA6pJ,GAAAv6E,EACAtvE,EAAA8pJ,GAAAt6E,EACAxvE,EAAAwwM,WAAAyD,GACA0C,GAAA,GACAlqM,GAAAzM,EAAAwwM,WAAAsD,IACA9zM,EAGA,QAAAi0M,GAAAjvK,GACA,GAAAv3C,GAAAkpN,EAAA3xK,EAAA0yE,OACAiqD,EAAA38H,EAAA28H,GAAAl0K,EACAihM,EAAA1pJ,EAAA0pJ,GAAAjhM,EACAo8J,EAAA7kH,EAAA6kH,GAAAp8J,EACAq8J,EAAA9kH,EAAA8kH,GAAAr8J,CACAo8J,GAAA8X,IAAAA,EAAA9X,GAAA8X,EAAA9X,GAAA,GACAC,EAAA4kC,IAAAA,EAAA5kC,GAAA4kC,EAAA5kC,GAAA,GACA9kH,EAAA28H,GAAAA,EACA38H,EAAA0pJ,GAAAA,EACA1pJ,EAAA6kH,GAAAA,EACA7kH,EAAA8kH,GAAAA,EACA9kH,EAAAz1C,WACA9B,EAAAkpN,EAAA3xK,EAAA0yE,MAAA,GAAAk/F,EAAA5xK,GAAA,EACA28H,GAAA/5I,EAAAod,GAAAv3C,EACAihM,GAAA9zH,EAAA51B,GAAAv3C,EACAo8J,GAAA/hI,EAAAkd,GAAAv3C,EACAq8J,GAAAxgF,EAAAtkC,GAAAv3C,EACAo8J,EAAA8X,IAAAA,EAAA9X,GAAA8X,EAAA9X,GAAA,GACAC,EAAA4kC,IAAAA,EAAA5kC,GAAA4kC,EAAA5kC,GAAA,GACApoH,EAAAsD,EAAA28H,EAAA+sB,EAAA7kC,EAAAC,IA1CA,GAAApoH,GAAAm1K,GACApqM,GAAA,EACA6iE,EAAA,EACAE,EAAA,EACAmnI,GAAA,GACAC,EAAArD,GACA34I,EAAA24I,GACAzrL,EAAAyrL,GACAjqI,EAAAiqI,GACA3rL,EAAA2rL,EA6EA,OAxCAmD,GAAAjqM,MAAA,SAAAlkB,GACA,MAAA2G,WAAAtG,QAAA6jB,IAAAlkB,EAAAmuN,GAAAjqM,GAGAiqM,EAAAxxK,KAAA,SAAA38C,GACA,MAAA2G,WAAAtG,QAAA0mF,GAAA/mF,EAAA,GAAAinF,GAAAjnF,EAAA,GAAAmuN,IAAApnI,EAAAE,IAGAknI,EAAAh1K,KAAA,SAAAn5C,GACA,MAAA2G,WAAAtG,QAAA84C,EAAA4xK,GAAA/qN,GAAAmuN,GAAAh1K,GAGAg1K,EAAAnoM,QAAA,SAAAhmB,GACA,MAAA2G,WAAAtG,OAAA8tN,EAAAE,aAAAruN,GAAAuuN,aAAAvuN,GAAAmuN,EAAAE,gBAGAF,EAAAE,aAAA,SAAAruN,GACA,MAAA2G,WAAAtG,QAAAguN,EAAA,kBAAAruN,GAAAA,EAAAirN,IAAAjrN,GAAAmuN,GAAAE,GAGAF,EAAAI,aAAA,SAAAvuN,GACA,MAAA2G,WAAAtG,OAAA8tN,EAAA97I,WAAAryE,GAAAu/B,aAAAv/B,GAAA+gF,cAAA/gF,GAAAq/B,YAAAr/B,GAAAmuN,EAAA97I,cAGA87I,EAAA97I,WAAA,SAAAryE,GACA,MAAA2G,WAAAtG,QAAAgyE,EAAA,kBAAAryE,GAAAA,EAAAirN,IAAAjrN,GAAAmuN,GAAA97I,GAGA87I,EAAA5uL,aAAA,SAAAv/B,GACA,MAAA2G,WAAAtG,QAAAk/B,EAAA,kBAAAv/B,GAAAA,EAAAirN,IAAAjrN,GAAAmuN,GAAA5uL,GAGA4uL,EAAAptI,cAAA,SAAA/gF,GACA,MAAA2G,WAAAtG,QAAA0gF,EAAA,kBAAA/gF,GAAAA,EAAAirN,IAAAjrN,GAAAmuN,GAAAptI,GAGAotI,EAAA9uL,YAAA,SAAAr/B,GACA,MAAA2G,WAAAtG,QAAAg/B,EAAA,kBAAAr/B,GAAAA,EAAAirN,IAAAjrN,GAAAmuN,GAAA9uL,GAGA8uL,EAGA,QAAA5+L,IAAAtX,EAAAmhK,EAAA+sB,EAAA7kC,EAAAC,GAWA,QAAAkqD,GAAAnsN,EAAAqB,EAAA+R,EAAA0mK,EAAA+sB,EAAA7kC,EAAAC,GACA,GAAAjiK,GAAAqB,EAAA,EAAA,CACA,GAAA87C,GAAA0jI,EAAA7gL,EAGA,OAFAm9C,GAAA28H,GAAAA,EAAA38H,EAAA0pJ,GAAAA,EACA1pJ,EAAA6kH,GAAAA,EAAA7kH,EAAA8kH,GAAAA,MACA,GAQA,IALA,GAAAitD,GAAAC,EAAAnvN,GACAovN,EAAAh8M,EAAA,EAAA87M,EACAj7M,EAAAjU,EAAA,EACA+3K,EAAA12K,EAAA,EAEA4S,EAAA8jK,GAAA,CACA,GAAA59G,GAAAlmD,EAAA8jK,IAAA,CACAo3C,GAAAh1J,GAAAi1J,EAAAn7M,EAAAkmD,EAAA,EACA49G,EAAA59G,EAGAi1J,EAAAD,EAAAl7M,EAAA,GAAAk7M,EAAAl7M,GAAAm7M,GAAApvN,EAAA,EAAAiU,KAAAA,CAEA,IAAAo7M,GAAAF,EAAAl7M,GAAAi7M,EACAI,EAAAl8M,EAAAi8M,CAEA,IAAArtD,EAAA8X,EAAA7X,EAAA4kC,EAAA,CACA,GAAA0oB,IAAAz1C,EAAAw1C,EAAAttD,EAAAqtD,GAAAj8M,CACA+4M,GAAAnsN,EAAAiU,EAAAo7M,EAAAv1C,EAAA+sB,EAAA0oB,EAAAttD,GACAkqD,EAAAl4M,EAAA5S,EAAAiuN,EAAAC,EAAA1oB,EAAA7kC,EAAAC,OACA,CACA,GAAAutD,IAAA3oB,EAAAyoB,EAAArtD,EAAAotD,GAAAj8M,CACA+4M,GAAAnsN,EAAAiU,EAAAo7M,EAAAv1C,EAAA+sB,EAAA7kC,EAAAwtD,GACArD,EAAAl4M,EAAA5S,EAAAiuN,EAAAx1C,EAAA01C,EAAAxtD,EAAAC,IAzCA,GACAjiK,GACAg1H,EAFA6rD,EAAAloK,EAAAjR,SACA3H,EAAA8gL,EAAA9/K,OACAouN,EAAA,GAAAniN,OAAAjN,EAAA,EAEA,KAAAovN,EAAA,GAAAn6F,EAAAh1H,EAAA,EAAAA,EAAAD,IAAAC,EACAmvN,EAAAnvN,EAAA,GAAAg1H,GAAA6rD,EAAA7gL,GAAAoT,KAGA+4M,GAAA,EAAApsN,EAAA4Y,EAAAvF,MAAA0mK,EAAA+sB,EAAA7kC,EAAAC,GAsCA,QAAAwtD,IAAA92M,EAAAmhK,EAAA+sB,EAAA7kC,EAAAC,IACA,EAAAtpJ,EAAAk3G,MAAAw+F,GAAAnC,IAAAvzM,EAAAmhK,EAAA+sB,EAAA7kC,EAAAC,GAoCA,QAAAytD,IAAAjuB,GAOA,IANA,GAEAz9L,GAFAhE,GAAA,EACAD,EAAA0hM,EAAA1gM,OAEA4R,EAAA8uL,EAAA1hM,EAAA,GACAwgC,EAAA,IAEAvgC,EAAAD,GACAiE,EAAA2O,EACAA,EAAA8uL,EAAAzhM,GACAugC,GAAAv8B,EAAA,GAAA2O,EAAA,GAAA3O,EAAA,GAAA2O,EAAA,EAGA,OAAA4tB,GAAA,EAGA,QAAAovL,IAAAluB,GAUA,IATA,GAIAz9L,GAEApD,EANAZ,GAAA,EACAD,EAAA0hM,EAAA1gM,OACAL,EAAA,EACAO,EAAA,EAEA0R,EAAA8uL,EAAA1hM,EAAA,GAEAkU,EAAA,IAEAjU,EAAAD,GACAiE,EAAA2O,EACAA,EAAA8uL,EAAAzhM,GACAiU,GAAArT,EAAAoD,EAAA,GAAA2O,EAAA,GAAAA,EAAA,GAAA3O,EAAA,GACAtD,IAAAsD,EAAA,GAAA2O,EAAA,IAAA/R,EACAK,IAAA+C,EAAA,GAAA2O,EAAA,IAAA/R,CAGA,OAAAqT,IAAA,GAAAvT,EAAAuT,EAAAhT,EAAAgT,GAOA,QAAA27M,IAAA5rN,EAAA2O,EAAA/R,GACA,OAAA+R,EAAA,GAAA3O,EAAA,KAAApD,EAAA,GAAAoD,EAAA,KAAA2O,EAAA,GAAA3O,EAAA,KAAApD,EAAA,GAAAoD,EAAA,IAGA,QAAA6rN,IAAA7rN,EAAA2O,GACA,MAAA3O,GAAA,GAAA2O,EAAA,IAAA3O,EAAA,GAAA2O,EAAA,GAMA,QAAAm9M,IAAAxpC,GAKA,IAAA,GAJAvmL,GAAAumL,EAAAvlL,OACA45K,GAAA,EAAA,GACAt9H,EAAA,EAEAr9C,EAAA,EAAAA,EAAAD,IAAAC,EAAA,CACA,KAAAq9C,EAAA,GAAAuyK,GAAAtpC,EAAA3L,EAAAt9H,EAAA,IAAAipI,EAAA3L,EAAAt9H,EAAA,IAAAipI,EAAAtmL,KAAA,KAAAq9C,CACAs9H,GAAAt9H,KAAAr9C,EAGA,MAAA26K,GAAAn4K,MAAA,EAAA66C,GAGA,QAAA0yK,IAAAzpC,GACA,IAAAvmL,EAAAumL,EAAAvlL,QAAA,EAAA,MAAA,KAEA,IAAAf,GACAD,EACAiwN,EAAA,GAAAhjN,OAAAjN,GACAkwN,EAAA,GAAAjjN,OAAAjN,EAEA,KAAAC,EAAA,EAAAA,EAAAD,IAAAC,EAAAgwN,EAAAhwN,KAAAsmL,EAAAtmL,GAAA,IAAAsmL,EAAAtmL,GAAA,GAAAA,EAEA,KADAgwN,EAAAz+M,KAAAs+M,IACA7vN,EAAA,EAAAA,EAAAD,IAAAC,EAAAiwN,EAAAjwN,IAAAgwN,EAAAhwN,GAAA,IAAAgwN,EAAAhwN,GAAA,GAEA,IAAAkwN,GAAAJ,GAAAE,GACAG,EAAAL,GAAAG,GAGAG,EAAAD,EAAA,KAAAD,EAAA,GACAG,EAAAF,EAAAA,EAAApvN,OAAA,KAAAmvN,EAAAA,EAAAnvN,OAAA,GACAgvN,IAIA,KAAA/vN,EAAAkwN,EAAAnvN,OAAA,EAAAf,GAAA,IAAAA,EAAA+vN,EAAAtpN,KAAA6/K,EAAA0pC,EAAAE,EAAAlwN,IAAA,IACA,KAAAA,GAAAowN,EAAApwN,EAAAmwN,EAAApvN,OAAAsvN,IAAArwN,EAAA+vN,EAAAtpN,KAAA6/K,EAAA0pC,EAAAG,EAAAnwN,IAAA,IAEA,OAAA+vN,GAGA,QAAAO,IAAA7uB,EAAAvqD,GAQA,IAAA,GAHA8qB,GAAAC,EAJAliK,EAAA0hM,EAAA1gM,OACA6E,EAAA67L,EAAA1hM,EAAA,GACAW,EAAAw2I,EAAA,GAAAj2I,EAAAi2I,EAAA,GACA4iC,EAAAl0K,EAAA,GAAAihM,EAAAjhM,EAAA,GAEAwzI,GAAA,EAEAp5I,EAAA,EAAAA,EAAAD,IAAAC,EACA4F,EAAA67L,EAAAzhM,GAAAgiK,EAAAp8J,EAAA,GAAAq8J,EAAAr8J,EAAA,GACAq8J,EAAAhhK,GAAA4lM,EAAA5lM,GAAAP,GAAAo5K,EAAA9X,IAAA/gK,EAAAghK,IAAA4kC,EAAA5kC,GAAAD,IAAA5oB,GAAAA,GACA0gC,EAAA9X,EAAA6kC,EAAA5kC,CAGA,OAAA7oB,GAGA,QAAAm3E,IAAA9uB,GAUA,IATA,GAGA5S,GACAC,EAJA9uL,GAAA,EACAD,EAAA0hM,EAAA1gM,OACA4R,EAAA8uL,EAAA1hM,EAAA,GAGAgvL,EAAAp8K,EAAA,GACAq8K,EAAAr8K,EAAA,GACA69M,EAAA,IAEAxwN,EAAAD,GACA8uL,EAAAE,EACAD,EAAAE,EACAr8K,EAAA8uL,EAAAzhM,GACA+uL,EAAAp8K,EAAA,GACAq8K,EAAAr8K,EAAA,GACAk8K,GAAAE,EACAD,GAAAE,EACAwhC,GAAApmN,KAAA87I,KAAA2oC,EAAAA,EAAAC,EAAAA,EAGA,OAAA0hC,GAGA,QAAAC,MACA,MAAArmN,MAAAsH,SAiGA,QAAAg/M,IAAA72C,EAAA7tH,GACA,OAAA3kD,UAAAtG,QACA,IAAA,GAAA,KACA,KAAA,GAAAlB,KAAAmsD,MAAA6tH,EAAA,MACA,SAAAh6K,KAAAmsD,MAAAA,GAAA6tH,OAAAA,GAEA,MAAAh6K,MAGA,QAAA8wN,IAAA92C,EAAAgX,GACA,OAAAxpL,UAAAtG,QACA,IAAA,GAAA,KACA,KAAA,GAAAlB,KAAAgxL,aAAAhX,EAAA,MACA,SAAAh6K,KAAAgxL,aAAAA,GAAAhX,OAAAA,GAEA,MAAAh6K,MAUA,QAAA+wN,MAMA,QAAAr1C,GAAA11K,GACA,GAAAqc,GAAArc,EAAA,GAAA7F,EAAAua,EAAArV,IAAAgd,EACA,KAAAliB,EAAA,CACA,GAAA6wN,IAAAC,GAAA,MAAAD,EACAt2M,GAAAzW,IAAAoe,EAAAliB,EAAA65K,EAAApzK,KAAAZ,IAEA,MAAAmmD,IAAAhsD,EAAA,GAAAgsD,EAAAjrD,QAXA,GAAAwZ,GAAAklL,KACA5lB,KACA7tH,KACA6kK,EAAAC,EAiCA,OAtBAv1C,GAAA1B,OAAA,SAAAp3K,GACA,IAAA4E,UAAAtG,OAAA,MAAA84K,GAAAr3K,OACAq3K,MAAAt/J,EAAAklL,IAEA,KADA,GAAA55L,GAAAqc,EAAAliB,GAAA,EAAAD,EAAA0C,EAAA1B,SACAf,EAAAD,GAAAwa,EAAA1C,IAAAqK,GAAArc,EAAApD,EAAAzC,IAAA,KAAAua,EAAAzW,IAAAoe,EAAA23J,EAAApzK,KAAAZ,GACA,OAAA01K,IAGAA,EAAAvvH,MAAA,SAAAvpD,GACA,MAAA4E,WAAAtG,QAAAirD,EAAA+kK,GAAAlwN,KAAA4B,GAAA84K,GAAAvvH,EAAAxpD,SAGA+4K,EAAAs1C,QAAA,SAAApuN,GACA,MAAA4E,WAAAtG,QAAA8vN,EAAApuN,EAAA84K,GAAAs1C,GAGAt1C,EAAAztF,KAAA,WACA,MAAA8iI,IAAA/2C,EAAA7tH,GAAA6kK,QAAAA,IAGAH,GAAAnuN,MAAAg5K,EAAAl0K,WAEAk0K,EAGA,QAAAy1C,MAcA,QAAAC,KACA,GAAAlxN,GAAA85K,IAAA94K,OACAma,EAAA0/D,EAAA,GAAAA,EAAA,GACAn2E,EAAAm2E,EAAA1/D,EAAA,GACA7M,EAAAusE,EAAA,EAAA1/D,EACA8L,IAAA3Y,EAAA5J,GAAA2F,KAAAC,IAAA,EAAAtK,EAAAgvN,EAAA,EAAAE,GACArqM,IAAAoC,EAAA5c,KAAA8sB,MAAAlQ,IACAviB,IAAA4J,EAAA5J,EAAAuiB,GAAAjnB,EAAAgvN,IAAA7wI,EACAu9F,EAAAz0J,GAAA,EAAA+nM,GACAnqM,IAAAngB,EAAA2F,KAAAwa,MAAAngB,GAAAg3K,EAAArxK,KAAAwa,MAAA62J,GACA,IAAA95H,GAAAo3H,EAAAh5K,GAAA8I,IAAA,SAAA7I,GAAA,MAAAyE,GAAAuiB,EAAAhnB,GACA,OAAAkxN,GAAAh2M,EAAAymC,EAAAzmC,UAAAymC,GAxBA,GAIA36B,GACAy0J,EALAF,EAAAq1C,KAAAC,YAAA78L,IACA6lJ,EAAA0B,EAAA1B,OACAq3C,EAAA31C,EAAAvvH,MACA4uB,GAAA,EAAA,GAGAh2D,GAAA,EACAmqM,EAAA,EACAE,EAAA,EACA/wI,EAAA,EAkEA,cAhEAq9F,GAAAs1C,QAgBAt1C,EAAA1B,OAAA,SAAAp3K,GACA,MAAA4E,WAAAtG,QAAA84K,EAAAp3K,GAAAwuN,KAAAp3C,KAGA0B,EAAAvvH,MAAA,SAAAvpD,GACA,MAAA4E,WAAAtG,QAAA65E,IAAAn4E,EAAA,IAAAA,EAAA,IAAAwuN,KAAAr2I,EAAAp4E,SAGA+4K,EAAA41C,WAAA,SAAA1uN,GACA,MAAAm4E,KAAAn4E,EAAA,IAAAA,EAAA,IAAAmiB,GAAA,EAAAqsM,KAGA11C,EAAAE,UAAA,WACA,MAAAA,IAGAF,EAAAv0J,KAAA,WACA,MAAAA,IAGAu0J,EAAA32J,MAAA,SAAAniB,GACA,MAAA4E,WAAAtG,QAAA6jB,IAAAniB,EAAAwuN,KAAArsM,GAGA22J,EAAA70J,QAAA,SAAAjkB,GACA,MAAA4E,WAAAtG,QAAAguN,EAAA3kN,KAAAyuD,IAAA,EAAAo2J,GAAAxsN,GAAAwuN,KAAAlC,GAGAxzC,EAAAwzC,aAAA,SAAAtsN,GACA,MAAA4E,WAAAtG,QAAAguN,EAAA3kN,KAAAyuD,IAAA,EAAAp2D,GAAAwuN,KAAAlC,GAGAxzC,EAAA0zC,aAAA,SAAAxsN,GACA,MAAA4E,WAAAtG,QAAAkuN,GAAAxsN,EAAAwuN,KAAAhC,GAGA1zC,EAAAr9F,MAAA,SAAAz7E,GACA,MAAA4E,WAAAtG,QAAAm9E,EAAA9zE,KAAAC,IAAA,EAAAD,KAAAyuD,IAAA,EAAAp2D,IAAAwuN,KAAA/yI,GAGAq9F,EAAAztF,KAAA,WACA,MAAAkjI,IAAAn3C,IAAAj/F,GACAh2D,MAAAA,GACAmqM,aAAAA,GACAE,aAAAA,GACA/wI,MAAAA,IAGAwyI,GAAAnuN,MAAA0uN,IAAA5pN,WAGA,QAAA+pN,IAAA71C,GACA,GAAAztF,GAAAytF,EAAAztF,IAUA,OARAytF,GAAA70J,QAAA60J,EAAA0zC,mBACA1zC,GAAAwzC,mBACAxzC,GAAA0zC,aAEA1zC,EAAAztF,KAAA,WACA,MAAAsjI,IAAAtjI,MAGAytF,EAGA,QAAA81C,MACA,MAAAD,IAAAJ,GAAAzuN,MAAA,KAAA8E,WAAA0nN,aAAA,IAGA,QAAAuC,IAAA5wN,GACA,MAAA,YACA,MAAAA,IAIA,QAAA6wN,IAAA7wN,GACA,OAAAA,EAKA,QAAA8wN,IAAA9wN,GACA,MAAAA,GAGA,QAAA45I,IAAAt2I,EAAA2O,GACA,OAAAA,GAAA3O,GAAAA,GACA,SAAAtD,GAAA,OAAAA,EAAAsD,GAAA2O,GACA2+M,GAAAn/L,MAAAxf,GAAAm8E,IAAA,IAGA,QAAA2iI,IAAA53C,GACA,GAAAt6K,GAAAyE,EAAA61K,EAAA,GAAAlnK,EAAAknK,EAAAA,EAAA94K,OAAA,EAEA,OADAiD,GAAA2O,IAAApT,EAAAyE,EAAAA,EAAA2O,EAAAA,EAAApT,GACA,SAAAmB,GAAA,MAAA0J,MAAAC,IAAArG,EAAAoG,KAAAyuD,IAAAlmD,EAAAjS,KAKA,QAAAgxN,IAAA73C,EAAA7tH,EAAAmoI,GACA,GAAAw9B,GAAA93C,EAAA,GAAAlnI,EAAAknI,EAAA,GAAA7yG,EAAAhb,EAAA,GAAAib,EAAAjb,EAAA,EAGA,OAFArZ,GAAAg/K,GAAAA,EAAAr3E,GAAA3nG,EAAAg/K,GAAA3qJ,EAAAmtH,EAAAltH,EAAAD,KACA2qJ,EAAAr3E,GAAAq3E,EAAAh/K,GAAAq0B,EAAAmtH,EAAAntH,EAAAC,IACA,SAAAvmE,GAAA,MAAAsmE,GAAA2qJ,EAAAjxN,KAGA,QAAAkxN,IAAA/3C,EAAA7tH,EAAAmoI,GACA,GAAA9yL,GAAA+I,KAAAyuD,IAAAghH,EAAA94K,OAAAirD,EAAAjrD,QAAA,EACA8E,EAAA,GAAAmH,OAAA3L,GACAnB,EAAA,GAAA8M,OAAA3L,GACArB,GAAA,CAQA,KALA65K,EAAAx4K,GAAAw4K,EAAA,KACAA,EAAAA,EAAAr3K,QAAA0Y,UACA8wC,EAAAA,EAAAxpD,QAAA0Y,aAGAlb,EAAAqB,GACAwE,EAAA7F,GAAAs6I,GAAAu/B,EAAA75K,GAAA65K,EAAA75K,EAAA,IACAE,EAAAF,GAAAm0L,EAAAnoI,EAAAhsD,GAAAgsD,EAAAhsD,EAAA,GAGA,OAAA,UAAAU,GACA,GAAAV,GAAAm6K,GAAAN,EAAAn5K,EAAA,EAAAW,GAAA,CACA,OAAAnB,GAAAF,GAAA6F,EAAA7F,GAAAU,KAIA,QAAAotF,IAAAvwE,EAAAvF,GACA,MAAAA,GACA6hK,OAAAt8J,EAAAs8J,UACA7tH,MAAAzuC,EAAAyuC,SACA2kI,YAAApzK,EAAAozK,eACAkhC,MAAAt0M,EAAAs0M,SACAhB,QAAAtzM,EAAAszM,WAGA,QAAAiB,MAYA,QAAAb,KAGA,MAFAc,GAAA3nN,KAAAyuD,IAAAghH,EAAA94K,OAAAirD,EAAAjrD,QAAA,EAAA6wN,GAAAF,GACAnoL,EAAA1wB,EAAA,KACA0iK,EAGA,QAAAA,GAAA76K,GACA,MAAAyxB,OAAAzxB,GAAAA,GAAAmwN,GAAAtnL,IAAAA,EAAAwoL,EAAAl4C,EAAAhxK,IAAAi5C,GAAAkK,EAAAmoI,KAAAryI,EAAA+vK,EAAAnxN,KAlBA,GAGAohD,GACAkwK,EACAnB,EAEAkB,EACAxoL,EACA1wB,EATAghK,EAAAr1K,GACAwnD,EAAAxnD,GACA2vL,EAAAxH,GAIAklC,EAAAL,EA2CA,OA5BAj2C,GAAA7jG,OAAA,SAAAz2E,GACA,MAAA4wN,GAAAG,GAAAn5M,IAAAA,EAAAk5M,EAAA/lK,EAAA6tH,EAAAhxK,IAAAi5C,GAAA+qI,MAAA5rL,MAGAs6K,EAAA1B,OAAA,SAAAp3K,GACA,MAAA4E,WAAAtG,QAAA84K,EAAAo4C,GAAApxN,KAAA4B,EAAA8uN,IAAAM,IAAAL,KAAAK,EAAAJ,GAAA53C,IAAAo3C,KAAAp3C,EAAAr3K,SAGA+4K,EAAAvvH,MAAA,SAAAvpD,GACA,MAAA4E,WAAAtG,QAAAirD,EAAA+kK,GAAAlwN,KAAA4B,GAAAwuN,KAAAjlK,EAAAxpD,SAGA+4K,EAAA41C,WAAA,SAAA1uN,GACA,MAAAupD,GAAA+kK,GAAAlwN,KAAA4B,GAAA0xL,EAAA1G,GAAAwjC,KAGA11C,EAAAs2C,MAAA,SAAApvN,GACA,MAAA4E,WAAAtG,QAAA8wN,EAAApvN,EAAAgvN,GAAA53C,GAAA23C,GAAAj2C,GAAAs2C,IAAAL,IAGAj2C,EAAAoV,YAAA,SAAAluL,GACA,MAAA4E,WAAAtG,QAAAozL,EAAA1xL,EAAAwuN,KAAA98B,GAGA5Y,EAAAs1C,QAAA,SAAApuN,GACA,MAAA4E,WAAAtG,QAAA8vN,EAAApuN,EAAA84K,GAAAs1C,GAGA,SAAAtxN,EAAAkC,GAEA,MADAqgD,GAAAviD,EAAAyyN,EAAAvwN,EACAwvN,KAIA,QAAAiB,IAAApwK,EAAAkwK,GACA,MAAAF,MAAAhwK,EAAAkwK,GAGA,QAAAj2C,IAAAt3K,EAAA4J,EAAA4pC,EAAA6zJ,GACA,GACAI,GADAllL,EAAAsyJ,EAAA70K,EAAA4J,EAAA4pC,EAGA,QADA6zJ,EAAAD,GAAA,MAAAC,EAAA,KAAAA,GACAA,EAAAhlM,MACA,IAAA,IACA,GAAAsM,GAAAhJ,KAAAC,IAAAD,KAAA+1B,IAAA17B,GAAA2F,KAAA+1B,IAAA9xB,GAEA,OADA,OAAAy9L,EAAAI,WAAA/5K,MAAA+5K,EAAAsB,GAAAxmL,EAAA5T,MAAA04L,EAAAI,UAAAA,GACAzsM,EAAA4tM,aAAAvB,EAAA14L,EAEA,KAAA,GACA,IAAA,IACA,IAAA,IACA,IAAA,IACA,IAAA,IACA,MAAA04L,EAAAI,WAAA/5K,MAAA+5K,EAAAuB,GAAAzmL,EAAA5c,KAAAC,IAAAD,KAAA+1B,IAAA17B,GAAA2F,KAAA+1B,IAAA9xB,QAAAy9L,EAAAI,UAAAA,GAAA,MAAAJ,EAAAhlM,MACA,MAEA,KAAA,IACA,IAAA,IACA,MAAAglM,EAAAI,WAAA/5K,MAAA+5K,EAAAqB,GAAAvmL,MAAA8kL,EAAAI,UAAAA,EAAA,GAAA,MAAAJ,EAAAhlM,OAIA,MAAArH,GAAA6wC,OAAAw7J,GAGA,QAAAqmB,IAAA52C,GACA,GAAA1B,GAAA0B,EAAA1B,MAoDA,OAlDA0B,GAAAvC,MAAA,SAAA/gI,GACA,GAAApyC,GAAAg0K,GACA,OAAAb,GAAAnzK,EAAA,GAAAA,EAAAA,EAAA9E,OAAA,GAAA,MAAAk3C,EAAA,GAAAA,IAGAsjI,EAAAQ,WAAA,SAAA9jI,EAAA6zJ,GACA,GAAAjmM,GAAAg0K,GACA,OAAAkC,IAAAl2K,EAAA,GAAAA,EAAAA,EAAA9E,OAAA,GAAA,MAAAk3C,EAAA,GAAAA,EAAA6zJ,IAGAvwB,EAAA62C,KAAA,SAAAn6K,GACA,MAAAA,IAAAA,EAAA,GAEA,IAKAjxB,GALAnhB,EAAAg0K,IACAxB,EAAA,EACAnkD,EAAAruH,EAAA9E,OAAA,EACA0D,EAAAoB,EAAAwyK,GACAhqK,EAAAxI,EAAAquH,EA8BA,OA3BA7lH,GAAA5J,IACAuiB,EAAAviB,EAAAA,EAAA4J,EAAAA,EAAA2Y,EACAA,EAAAqxJ,EAAAA,EAAAnkD,EAAAA,EAAAltG,GAGAA,EAAAiyJ,EAAAx0K,EAAA4J,EAAA4pC,GAEAjxB,EAAA,GACAviB,EAAA2F,KAAA8sB,MAAAzyB,EAAAuiB,GAAAA,EACA3Y,EAAAjE,KAAAI,KAAA6D,EAAA2Y,GAAAA,EACAA,EAAAiyJ,EAAAx0K,EAAA4J,EAAA4pC,IACAjxB,EAAA,IACAviB,EAAA2F,KAAAI,KAAA/F,EAAAuiB,GAAAA,EACA3Y,EAAAjE,KAAA8sB,MAAA7oB,EAAA2Y,GAAAA,EACAA,EAAAiyJ,EAAAx0K,EAAA4J,EAAA4pC,IAGAjxB,EAAA,GACAnhB,EAAAwyK,GAAAjuK,KAAA8sB,MAAAzyB,EAAAuiB,GAAAA,EACAnhB,EAAAquH,GAAA9pH,KAAAI,KAAA6D,EAAA2Y,GAAAA,EACA6yJ,EAAAh0K,IACAmhB,EAAA,IACAnhB,EAAAwyK,GAAAjuK,KAAAI,KAAA/F,EAAAuiB,GAAAA,EACAnhB,EAAAquH,GAAA9pH,KAAA8sB,MAAA7oB,EAAA2Y,GAAAA,EACA6yJ,EAAAh0K,IAGA01K,GAGAA,EAGA,QAAA82C,MACA,GAAA92C,GAAA22C,GAAAV,GAAAA,GAQA,OANAj2C,GAAAztF,KAAA,WACA,MAAAA,IAAAytF,EAAA82C,OAGA3B,GAAAnuN,MAAAg5K,EAAAl0K,WAEA8qN,GAAA52C,GAGA,QAAA+2C,IAAAz4C,GAGA,QAAA0B,GAAA76K,GACA,MAAAyxB,OAAAzxB,GAAAA,GAAAmwN,EAAAnwN,EAHA,GAAAmwN,EAsBA,OAhBAt1C,GAAA7jG,OAAA6jG,EAEAA,EAAA1B,OAAA0B,EAAAvvH,MAAA,SAAAvpD,GACA,MAAA4E,WAAAtG,QAAA84K,EAAAo4C,GAAApxN,KAAA4B,EAAA8uN,IAAAh2C,GAAA1B,EAAAr3K,SAGA+4K,EAAAs1C,QAAA,SAAApuN,GACA,MAAA4E,WAAAtG,QAAA8vN,EAAApuN,EAAA84K,GAAAs1C,GAGAt1C,EAAAztF,KAAA,WACA,MAAAwkI,IAAAz4C,GAAAg3C,QAAAA,IAGAh3C,EAAAxyK,UAAAtG,OAAAkxN,GAAApxN,KAAAg5K,EAAA03C,KAAA,EAAA,GAEAY,GAAA52C,GAGA,QAAA62C,IAAAv4C,EAAAxuK,GACAwuK,EAAAA,EAAAr3K,OAEA,IAIAjD,GAJA84K,EAAA,EACAnkD,EAAA2lD,EAAA94K,OAAA,EACA+4K,EAAAD,EAAAxB,GACArW,EAAA6X,EAAA3lD,EAUA,OAPA8tC,GAAA8X,IACAv6K,EAAA84K,EAAAA,EAAAnkD,EAAAA,EAAA30H,EACAA,EAAAu6K,EAAAA,EAAA9X,EAAAA,EAAAziK,GAGAs6K,EAAAxB,GAAAhtK,EAAA6rB,MAAA4iJ,GACAD,EAAA3lD,GAAA7oH,EAAAb,KAAAw3J,GACA6X,EAGA,QAAA04C,IAAA7xN,GACA,MAAA0J,MAAAuwB,IAAAj6B,GAGA,QAAA8xN,IAAA9xN,GACA,MAAA0J,MAAA8kL,IAAAxuL,GAGA,QAAA+xN,IAAA/xN,GACA,OAAA0J,KAAAuwB,KAAAj6B,GAGA,QAAAgyN,IAAAhyN,GACA,OAAA0J,KAAA8kL,KAAAxuL,GAGA,QAAAiyN,IAAAjyN,GACA,MAAA2lB,UAAA3lB,KAAA,KAAAA,GAAAA,EAAA,EAAA,EAAAA,EAGA,QAAAkyN,IAAAr5J,GACA,MAAA,MAAAA,EAAAo5J,GACAp5J,IAAAnvD,KAAA+H,EAAA/H,KAAA8kL,IACA,SAAAxuL,GAAA,MAAA0J,MAAA+/J,IAAA5wG,EAAA74D,IAGA,QAAAmyN,IAAAt5J,GACA,MAAAA,KAAAnvD,KAAA+H,EAAA/H,KAAAuwB,IACA,KAAA4+B,GAAAnvD,KAAAsgK,OACA,IAAAnxG,GAAAnvD,KAAA0oN,OACAv5J,EAAAnvD,KAAAuwB,IAAA4+B,GAAA,SAAA74D,GAAA,MAAA0J,MAAAuwB,IAAAj6B,GAAA64D,IAGA,QAAAw5J,IAAArtN,GACA,MAAA,UAAAhF,GACA,OAAAgF,GAAAhF,IAIA,QAAAsyN,IAAAlxK,GAOA,QAAAmvK,KAQA,MAPAgC,GAAAJ,GAAAt5J,GAAA25J,EAAAN,GAAAr5J,GACAsgH,IAAA,GAAA,GACAo5C,EAAAF,GAAAE,GAAAC,EAAAH,GAAAG,GACApxK,EAAA2wK,GAAAC,KAEA5wK,EAAAywK,GAAAC,IAEAj3C,EAdA,GAGA03C,GACAC,EAJA33C,EAAAz5H,EAAAywK,GAAAC,IACA34C,EAAA0B,EAAA1B,OACAtgH,EAAA,EAmFA,OApEAgiH,GAAAhiH,KAAA,SAAA92D,GACA,MAAA4E,WAAAtG,QAAAw4D,GAAA92D,EAAAwuN,KAAA13J,GAGAgiH,EAAA1B,OAAA,SAAAp3K,GACA,MAAA4E,WAAAtG,QAAA84K,EAAAp3K,GAAAwuN,KAAAp3C,KAGA0B,EAAAvC,MAAA,SAAA/gI,GACA,GAGA/3C,GAHA2F,EAAAg0K,IACAp4K,EAAAoE,EAAA,GACAxF,EAAAwF,EAAAA,EAAA9E,OAAA,IAGAb,EAAAG,EAAAoB,KAAAzB,EAAAyB,EAAAA,EAAApB,EAAAA,EAAAL,EAEA,IAEA4F,GACAqO,EACA1U,EAJAS,EAAAizN,EAAAxxN,GACAJ,EAAA4xN,EAAA5yN,GAIAN,EAAA,MAAAk4C,EAAA,IAAAA,EACAvjC,IAEA,MAAA6kD,EAAA,IAAAl4D,EAAArB,EAAAD,GAEA,GADAC,EAAAoK,KAAAwa,MAAA5kB,GAAA,EAAAqB,EAAA+I,KAAAwa,MAAAvjB,GAAA,EACAI,EAAA,GAAA,KAAAzB,EAAAqB,IAAArB,EACA,IAAAiU,EAAA,EAAArO,EAAAstN,EAAAlzN,GAAAiU,EAAAslD,IAAAtlD,EAEA,MADA1U,EAAAqG,EAAAqO,GACAxS,GAAA,CACA,GAAAlC,EAAAc,EAAA,KACAqU,GAAAjO,KAAAlH,QAEA,MAAAS,EAAAqB,IAAArB,EACA,IAAAiU,EAAAslD,EAAA,EAAA3zD,EAAAstN,EAAAlzN,GAAAiU,GAAA,IAAAA,EAEA,MADA1U,EAAAqG,EAAAqO,GACAxS,GAAA,CACA,GAAAlC,EAAAc,EAAA,KACAqU,GAAAjO,KAAAlH,QAIAmV,GAAAskK,EAAAh5K,EAAAqB,EAAA+I,KAAAyuD,IAAAx3D,EAAArB,EAAAD,IAAA8I,IAAAqqN,EAGA,OAAAhzN,GAAAwU,EAAAwG,UAAAxG,GAGA6mK,EAAAQ,WAAA,SAAA9jI,EAAA6zJ,GAGA,GAFA,MAAAA,IAAAA,EAAA,KAAAvyI,EAAA,MAAA,KACA,kBAAAuyI,KAAAA,EAAArsM,EAAA6wC,OAAAw7J,IACA7zJ,IAAAxM,EAAAA,EAAA,MAAAqgK,EACA,OAAA7zJ,IAAAA,EAAA,GACA,IAAAhkC,GAAA7J,KAAAC,IAAA,EAAAkvD,EAAAthB,EAAAsjI,EAAAvC,QAAAj4K,OACA,OAAA,UAAA8E,GACA,GAAA7F,GAAA6F,EAAAqtN,EAAA9oN,KAAAwa,MAAAquM,EAAAptN,IAEA,OADA7F,GAAAu5D,EAAAA,EAAA,KAAAv5D,GAAAu5D,GACAv5D,GAAAiU,EAAA63L,EAAAjmM,GAAA,KAIA01K,EAAA62C,KAAA,WACA,MAAAv4C,GAAAu4C,GAAAv4C,KACA3iJ,MAAA,SAAAx2B,GAAA,MAAAwyN,GAAA9oN,KAAA8sB,MAAA+7L,EAAAvyN,MACA8J,KAAA,SAAA9J,GAAA,MAAAwyN,GAAA9oN,KAAAI,KAAAyoN,EAAAvyN,UAIA66K,EAGA,QAAA43C,MACA,GAAA53C,GAAAy3C,GAAAlB,MAAAj4C,QAAA,EAAA,IAQA,OANA0B,GAAAztF,KAAA,WACA,MAAAA,IAAAytF,EAAA43C,MAAA55J,KAAAgiH,EAAAhiH,SAGAm3J,GAAAnuN,MAAAg5K,EAAAl0K,WAEAk0K,EAGA,QAAA63C,IAAAxyN,GACA,MAAA,UAAAF,GACA,MAAA0J,MAAA4hM,KAAAtrM,GAAA0J,KAAAipN,MAAAjpN,KAAA+1B,IAAAz/B,EAAAE,KAIA,QAAA0yN,IAAA1yN,GACA,MAAA,UAAAF,GACA,MAAA0J,MAAA4hM,KAAAtrM,GAAA0J,KAAAmpN,MAAAnpN,KAAA+1B,IAAAz/B,IAAAE,GAIA,QAAA4yN,IAAA1xK,GACA,GAAAlhD,GAAA,EAAA26K,EAAAz5H,EAAAsxK,GAAAxyN,GAAA0yN,GAAA1yN,GAMA,OAJA26K,GAAAzC,SAAA,SAAAr2K,GACA,MAAA4E,WAAAtG,OAAA+gD,EAAAsxK,GAAAxyN,GAAA6B,GAAA6wN,GAAA1yN,IAAAA,GAGAuxN,GAAA52C,GAGA,QAAAk4C,MACA,GAAAl4C,GAAAi4C,GAAA1B,KAMA,OAJAv2C,GAAAztF,KAAA,WACA,MAAAA,IAAAytF,EAAAk4C,MAAA36C,SAAAyC,EAAAzC,aAGA43C,GAAAnuN,MAAAg5K,EAAAl0K,WAGA,QAAAqsN,IAAArnB,GACA,MAAA,UAAA3rM,GACA,MAAAA,GAAA,GAAA0J,KAAA+/J,KAAAzpK,EAAA2rM,GAAAjiM,KAAA+/J,IAAAzpK,EAAA2rM,IAIA,QAAAsnB,IAAAjzN,GACA,MAAAA,GAAA,GAAA0J,KAAA87I,MAAAxlJ,GAAA0J,KAAA87I,KAAAxlJ,GAGA,QAAAkzN,IAAAlzN,GACA,MAAAA,GAAA,GAAAA,EAAAA,EAAAA,EAAAA,EAGA,QAAAmzN,IAAA/xK,GAIA,QAAAmvK,KACA,MAAA,KAAA5kB,EAAAvqJ,EAAA0vK,GAAAA,IACA,KAAAnlB,EAAAvqJ,EAAA6xK,GAAAC,IACA9xK,EAAA4xK,GAAArnB,GAAAqnB,GAAA,EAAArnB,IANA,GAAA9wB,GAAAz5H,EAAA0vK,GAAAA,IACAnlB,EAAA,CAYA,OAJA9wB,GAAA8wB,SAAA,SAAA5pM,GACA,MAAA4E,WAAAtG,QAAAsrM,GAAA5pM,EAAAwuN,KAAA5kB,GAGA8lB,GAAA52C,GAGA,QAAAu4C,MACA,GAAAv4C,GAAAs4C,GAAA/B,KAQA,OANAv2C,GAAAztF,KAAA,WACA,MAAAA,IAAAytF,EAAAu4C,MAAAznB,SAAA9wB,EAAA8wB,aAGAqkB,GAAAnuN,MAAAg5K,EAAAl0K,WAEAk0K,EAGA,QAAAw4C,MACA,MAAAD,IAAAvxN,MAAA,KAAA8E,WAAAglM,SAAA,IAGA,QAAA2nB,MAMA,QAAA/C,KACA,GAAAjxN,GAAA,EAAAD,EAAAqK,KAAAC,IAAA,EAAA2hD,EAAAjrD,OAEA,KADAq5K,EAAA,GAAAptK,OAAAjN,EAAA,KACAC,EAAAD,GAAAq6K,EAAAp6K,EAAA,GAAAg6K,EAAAH,EAAA75K,EAAAD,EACA,OAAAw7K,GAGA,QAAAA,GAAA76K,GACA,MAAAyxB,OAAAzxB,GAAAA,GAAAmwN,EAAA7kK,EAAAmuH,GAAAC,EAAA15K,IAbA,GAGAmwN,GAHAh3C,KACA7tH,KACAouH,IAiDA,OAnCAmB,GAAA04C,aAAA,SAAAhzN,GACA,GAAAjB,GAAAgsD,EAAAt7C,QAAAzP,EACA,OAAAjB,GAAA,GAAA8uF,IAAAA,MACA9uF,EAAA,EAAAo6K,EAAAp6K,EAAA,GAAA65K,EAAA,GACA75K,EAAAo6K,EAAAr5K,OAAAq5K,EAAAp6K,GAAA65K,EAAAA,EAAA94K,OAAA,KAIAw6K,EAAA1B,OAAA,SAAAp3K,GACA,IAAA4E,UAAAtG,OAAA,MAAA84K,GAAAr3K,OACAq3K,KACA,KAAA,GAAAh0K,GAAA7F,EAAA,EAAAD,EAAA0C,EAAA1B,OAAAf,EAAAD,IAAAC,EAAA,OAAA6F,EAAApD,EAAAzC,KAAAmyB,MAAAtsB,GAAAA,IAAAg0K,EAAApzK,KAAAZ,EAEA,OADAg0K,GAAAtoK,KAAAqmK,GACAq5C,KAGA11C,EAAAvvH,MAAA,SAAAvpD,GACA,MAAA4E,WAAAtG,QAAAirD,EAAA+kK,GAAAlwN,KAAA4B,GAAAwuN,KAAAjlK,EAAAxpD,SAGA+4K,EAAAs1C,QAAA,SAAApuN,GACA,MAAA4E,WAAAtG,QAAA8vN,EAAApuN,EAAA84K,GAAAs1C,GAGAt1C,EAAA24C,UAAA,WACA,MAAA95C,GAAA53K,SAGA+4K,EAAAztF,KAAA,WACA,MAAAkmI,MACAn6C,OAAAA,GACA7tH,MAAAA,GACA6kK,QAAAA,IAGAH,GAAAnuN,MAAAg5K,EAAAl0K,WAGA,QAAA8sN,MAQA,QAAA54C,GAAA76K,GACA,MAAAA,IAAAA,EAAAsrD,EAAAmuH,GAAAN,EAAAn5K,EAAA,EAAAX,IAAA8wN,EAGA,QAAAI,KACA,GAAAjxN,IAAA,CAEA,KADA65K,EAAA,GAAA7sK,OAAAjN,KACAC,EAAAD,GAAA85K,EAAA75K,KAAAA,EAAA,GAAAgiK,GAAAhiK,EAAAD,GAAA+5K,IAAA/5K,EAAA,EACA,OAAAw7K,GAfA,GAKAs1C,GALA/2C,EAAA,EACA9X,EAAA,EACAjiK,EAAA,EACA85K,GAAA,IACA7tH,GAAA,EAAA,EA6CA,OA/BAuvH,GAAA1B,OAAA,SAAAp3K,GACA,MAAA4E,WAAAtG,QAAA+4K,GAAAr3K,EAAA,GAAAu/J,GAAAv/J,EAAA,GAAAwuN,MAAAn3C,EAAA9X,IAGAuZ,EAAAvvH,MAAA,SAAAvpD,GACA,MAAA4E,WAAAtG,QAAAhB,GAAAisD,EAAA+kK,GAAAlwN,KAAA4B,IAAA1B,OAAA,EAAAkwN,KAAAjlK,EAAAxpD,SAGA+4K,EAAA04C,aAAA,SAAAhzN,GACA,GAAAjB,GAAAgsD,EAAAt7C,QAAAzP,EACA,OAAAjB,GAAA,GAAA8uF,IAAAA,KACA9uF,EAAA,GAAA85K,EAAAD,EAAA,IACA75K,GAAAD,GAAA85K,EAAA95K,EAAA,GAAAiiK,IACA6X,EAAA75K,EAAA,GAAA65K,EAAA75K,KAGAu7K,EAAAs1C,QAAA,SAAApuN,GACA,MAAA4E,WAAAtG,QAAA8vN,EAAApuN,EAAA84K,GAAAA,GAGAA,EAAAnB,WAAA,WACA,MAAAP,GAAAr3K,SAGA+4K,EAAAztF,KAAA,WACA,MAAAqmI,MACAt6C,QAAAC,EAAA9X,IACAh2G,MAAAA,GACA6kK,QAAAA,IAGAH,GAAAnuN,MAAA4vN,GAAA52C,GAAAl0K,WAGA,QAAA+sN,MAMA,QAAA74C,GAAA76K,GACA,MAAAA,IAAAA,EAAAsrD,EAAAmuH,GAAAN,EAAAn5K,EAAA,EAAAX,IAAA8wN,EANA,GAEAA,GAFAh3C,GAAA,IACA7tH,GAAA,EAAA,GAEAjsD,EAAA,CA8BA,OAxBAw7K,GAAA1B,OAAA,SAAAp3K,GACA,MAAA4E,WAAAtG,QAAA84K,EAAAk3C,GAAAlwN,KAAA4B,GAAA1C,EAAAqK,KAAAyuD,IAAAghH,EAAA94K,OAAAirD,EAAAjrD,OAAA,GAAAw6K,GAAA1B,EAAAr3K,SAGA+4K,EAAAvvH,MAAA,SAAAvpD,GACA,MAAA4E,WAAAtG,QAAAirD,EAAA+kK,GAAAlwN,KAAA4B,GAAA1C,EAAAqK,KAAAyuD,IAAAghH,EAAA94K,OAAAirD,EAAAjrD,OAAA,GAAAw6K,GAAAvvH,EAAAxpD,SAGA+4K,EAAA04C,aAAA,SAAAhzN,GACA,GAAAjB,GAAAgsD,EAAAt7C,QAAAzP,EACA,QAAA44K,EAAA75K,EAAA,GAAA65K,EAAA75K,KAGAu7K,EAAAs1C,QAAA,SAAApuN,GACA,MAAA4E,WAAAtG,QAAA8vN,EAAApuN,EAAA84K,GAAAs1C,GAGAt1C,EAAAztF,KAAA,WACA,MAAAsmI,MACAv6C,OAAAA,GACA7tH,MAAAA,GACA6kK,QAAAA,IAGAH,GAAAnuN,MAAAg5K,EAAAl0K,WAMA,QAAAgtN,IAAAC,EAAAC,EAAAt8K,EAAA3J,GAEA,QAAAjjC,GAAAwwB,GACA,MAAAy4L,GAAAz4L,EAAA,GAAApwB,OAAAowB,IAAAA,EA4DA,MAzDAxwB,GAAA6rB,MAAA7rB,EAEAA,EAAAb,KAAA,SAAAqxB,GACA,MAAAy4L,GAAAz4L,EAAA,GAAApwB,MAAAowB,EAAA,IAAA04L,EAAA14L,EAAA,GAAAy4L,EAAAz4L,GAAAA,GAGAxwB,EAAAuZ,MAAA,SAAAiX,GACA,GAAA81L,GAAAtmN,EAAAwwB,GACA8W,EAAAtnC,EAAAb,KAAAqxB,EACA,OAAAA,GAAA81L,EAAAh/K,EAAA9W,EAAA81L,EAAAh/K,GAGAtnC,EAAAylB,OAAA,SAAA+K,EAAA7U,GACA,MAAAutM,GAAA14L,EAAA,GAAApwB,OAAAowB,GAAA,MAAA7U,EAAA,EAAA5c,KAAA8sB,MAAAlQ,IAAA6U,GAGAxwB,EAAA2gD,MAAA,SAAAvnD,EAAA4J,EAAA2Y,GACA,GAAAq1B,GAAA2P,IAGA,IAFAvnD,EAAA4G,EAAAb,KAAA/F,GACAuiB,EAAA,MAAAA,EAAA,EAAA5c,KAAA8sB,MAAAlQ,KACAviB,EAAA4J,GAAA2Y,EAAA,GAAA,MAAAglC,EACA,IAAAA,EAAAvlD,KAAA41C,EAAA,GAAA5wC,OAAAhH,IAAA8vN,EAAA9vN,EAAAuiB,GAAAstM,EAAA7vN,SACA43C,EAAA53C,GAAAA,EAAA4J,EACA,OAAA29C,IAGA3gD,EAAA3J,OAAA,SAAA6B,GACA,MAAA8wN,IAAA,SAAAx4L,GACA,GAAAA,GAAAA,EAAA,KAAAy4L,EAAAz4L,IAAAt4B,EAAAs4B,IAAAA,EAAA+wJ,QAAA/wJ,EAAA,IACA,SAAAA,EAAA7U,GACA,GAAA6U,GAAAA,EACA,GAAA7U,EAAA,EAAA,OAAAA,GAAA,GACA,KAAAutM,EAAA14L,GAAA,IAAAt4B,EAAAs4B,SACA,QAAA7U,GAAA,GACA,KAAAutM,EAAA14L,EAAA,IAAAt4B,EAAAs4B,SAMAoc,IACA5sC,EAAA4sC,MAAA,SAAAxzC,EAAAC,GAGA,MAFA8vN,IAAA5nC,SAAAnoL,GAAAgwN,GAAA7nC,SAAAloL,GACA4vN,EAAAE,IAAAF,EAAAG,IACArqN,KAAA8sB,MAAA+gB,EAAAu8K,GAAAC,MAGAppN,EAAAiwC,MAAA,SAAAt0B,GAEA,MADAA,GAAA5c,KAAA8sB,MAAAlQ,GACAX,SAAAW,IAAAA,EAAA,EACAA,EAAA,EACA3b,EAAA3J,OAAA4sC,EACA,SAAAzoC,GAAA,MAAAyoC,GAAAzoC,GAAAmhB,GAAA,GACA,SAAAnhB,GAAA,MAAAwF,GAAA4sC,MAAA,EAAApyC,GAAAmhB,GAAA,IAHA3b,EADA,OAQAA,EA4EA,QAAAqpN,IAAA10N,GACA,MAAAq0N,IAAA,SAAAx4L,GACAA,EAAA84L,QAAA94L,EAAA+4L,WAAA/4L,EAAAg5L,SAAA,EAAA70N,GAAA,GACA67B,EAAAi5L,SAAA,EAAA,EAAA,EAAA,IACA,SAAAj5L,EAAA7U,GACA6U,EAAA84L,QAAA94L,EAAA+4L,UAAA,EAAA5tM,IACA,SAAAviB,EAAAC,GACA,OAAAA,EAAAD,GAAAC,EAAAqwN,oBAAAtwN,EAAAswN,qBAAAC,IAAAC,KAwFA,QAAAC,IAAAl1N,GACA,MAAAq0N,IAAA,SAAAx4L,GACAA,EAAAs5L,WAAAt5L,EAAAuoK,cAAAvoK,EAAAu5L,YAAA,EAAAp1N,GAAA,GACA67B,EAAAw5L,YAAA,EAAA,EAAA,EAAA,IACA,SAAAx5L,EAAA7U,GACA6U,EAAAs5L,WAAAt5L,EAAAuoK,aAAA,EAAAp9K,IACA,SAAAviB,EAAAC,GACA,OAAAA,EAAAD,GAAAwwN,KAuDA,QAAAK,IAAAzvN,GACA,GAAA,GAAAA,EAAA5E,GAAA4E,EAAA5E,EAAA,IAAA,CACA,GAAA46B,GAAA,GAAApwB,OAAA,EAAA5F,EAAA/F,EAAA+F,EAAAA,EAAAA,EAAA0O,EAAA1O,EAAA9D,EAAA8D,EAAA4M,EAAA5M,EAAAyM,EAEA,OADAupB,GAAA05L,YAAA1vN,EAAA5E,GACA46B,EAEA,MAAA,IAAApwB,MAAA5F,EAAA5E,EAAA4E,EAAA/F,EAAA+F,EAAAA,EAAAA,EAAA0O,EAAA1O,EAAA9D,EAAA8D,EAAA4M,EAAA5M,EAAAyM,GAGA,QAAAkjN,IAAA3vN,GACA,GAAA,GAAAA,EAAA5E,GAAA4E,EAAA5E,EAAA,IAAA,CACA,GAAA46B,GAAA,GAAApwB,MAAAA,KAAAgqN,KAAA,EAAA5vN,EAAA/F,EAAA+F,EAAAA,EAAAA,EAAA0O,EAAA1O,EAAA9D,EAAA8D,EAAA4M,EAAA5M,EAAAyM,GAEA,OADAupB,GAAA65L,eAAA7vN,EAAA5E,GACA46B,EAEA,MAAA,IAAApwB,MAAAA,KAAAgqN,IAAA5vN,EAAA5E,EAAA4E,EAAA/F,EAAA+F,EAAAA,EAAAA,EAAA0O,EAAA1O,EAAA9D,EAAA8D,EAAA4M,EAAA5M,EAAAyM,IAGA,QAAAqjN,IAAA10N,GACA,OAAAA,EAAAA,EAAAnB,EAAA,EAAA+F,EAAA,EAAA0O,EAAA,EAAAxS,EAAA,EAAA0Q,EAAA,EAAAH,EAAA,GAGA,QAAAsjN,IAAAlpB,GA6HA,QAAAC,GAAAb,EAAA3yC,GACA,MAAA,UAAAt9H,GACA,GAIAj7B,GACA2yI,EACAjjG,EANAinB,KACAv3D,GAAA,EACAqB,EAAA,EACAtB,EAAA+rM,EAAA/qM,MAOA,KAFA86B,YAAApwB,QAAAowB,EAAA,GAAApwB,OAAAowB,MAEA77B,EAAAD,GACA,KAAA+rM,EAAAz2L,WAAArV,KACAu3D,EAAA9wD,KAAAqlM,EAAAtpM,MAAAnB,EAAArB,IACA,OAAAuzI,EAAAsiF,GAAAj1N,EAAAkrM,EAAA72K,SAAAj1B,KAAAY,EAAAkrM,EAAA72K,SAAAj1B,GACAuzI,EAAA,MAAA3yI,EAAA,IAAA,KACA0vC,EAAA6oH,EAAAv4J,MAAAA,EAAA0vC,EAAAzU,EAAA03G,IACAh8E,EAAA9wD,KAAA7F,GACAS,EAAArB,EAAA,EAKA,OADAu3D,GAAA9wD,KAAAqlM,EAAAtpM,MAAAnB,EAAArB,IACAu3D,EAAA1oD,KAAA,KAIA,QAAAinN,GAAAhqB,EAAAiqB,GACA,MAAA,UAAAx+J,GACA,GAEAy+J,GAAAC,EAFApwN,EAAA8vN,GAAA,MACA31N,EAAAk2N,EAAArwN,EAAAimM,EAAAv0I,GAAA,GAAA,EAEA,IAAAv3D,GAAAu3D,EAAAx2D,OAAA,MAAA,KAGA,IAAA,KAAA8E,GAAA,MAAA,IAAA4F,MAAA5F,EAAA3C,EAMA,IAHA,KAAA2C,KAAAA,EAAA0O,EAAA1O,EAAA0O,EAAA,GAAA,GAAA1O,EAAAD,GAGA,KAAAC,GAAA,CACA,GAAAA,EAAAjD,EAAA,GAAAiD,EAAAjD,EAAA,GAAA,MAAA,KACA,MAAAiD,KAAAA,EAAAvE,EAAA,GACA,KAAAuE,IACAmwN,EAAAR,GAAAG,GAAA9vN,EAAA5E,IAAAg1N,EAAAD,EAAAZ,YACAY,EAAAC,EAAA,GAAA,IAAAA,EAAAE,GAAA3rN,KAAAwrN,GAAAG,GAAAH,GACAA,EAAAI,GAAAtlM,OAAAklM,EAAA,GAAAnwN,EAAAjD,EAAA,IACAiD,EAAA5E,EAAA+0N,EAAA9xB,iBACAr+L,EAAA/F,EAAAk2N,EAAA7xB,cACAt+L,EAAAA,EAAAmwN,EAAA5xB,cAAAv+L,EAAAvE,EAAA,GAAA,IAEA00N,EAAAD,EAAAJ,GAAA9vN,EAAA5E,IAAAg1N,EAAAD,EAAAnB,SACAmB,EAAAC,EAAA,GAAA,IAAAA,EAAAI,GAAA7rN,KAAAwrN,GAAAK,GAAAL,GACAA,EAAAM,GAAAxlM,OAAAklM,EAAA,GAAAnwN,EAAAjD,EAAA,IACAiD,EAAA5E,EAAA+0N,EAAAO,cACA1wN,EAAA/F,EAAAk2N,EAAAQ,WACA3wN,EAAAA,EAAAmwN,EAAApB,WAAA/uN,EAAAvE,EAAA,GAAA,QAEA,KAAAuE,IAAA,KAAAA,MACA,KAAAA,KAAAA,EAAAvE,EAAA,KAAAuE,GAAAA,EAAApE,EAAA,EAAA,KAAAoE,GAAA,EAAA,GACAowN,EAAA,KAAApwN,GAAA2vN,GAAAG,GAAA9vN,EAAA5E,IAAAm0N,YAAAW,EAAAJ,GAAA9vN,EAAA5E,IAAA4zN,SACAhvN,EAAA/F,EAAA,EACA+F,EAAAA,EAAA,KAAAA,IAAAA,EAAAvE,EAAA,GAAA,EAAA,EAAAuE,EAAA5D,GAAAg0N,EAAA,GAAA,EAAApwN,EAAAvE,EAAA,EAAAuE,EAAA5C,GAAAgzN,EAAA,GAAA,EAKA,OAAA,KAAApwN,IACAA,EAAA0O,GAAA1O,EAAAvC,EAAA,IAAA,EACAuC,EAAA9D,GAAA8D,EAAAvC,EAAA,IACAkyN,GAAA3vN,IAIAkwN,EAAAlwN,IAIA,QAAAqwN,GAAArwN,EAAAimM,EAAAv0I,EAAAl2D,GAOA,IANA,GAGAT,GACA6C,EAJAzD,EAAA,EACAD,EAAA+rM,EAAA/qM,OACAjB,EAAAy3D,EAAAx2D,OAIAf,EAAAD,GAAA,CACA,GAAAsB,GAAAvB,EAAA,OAAA,CAEA,IAAA,MADAc,EAAAkrM,EAAAz2L,WAAArV,OAIA,GAFAY,EAAAkrM,EAAA72K,OAAAj1B,OACAyD,EAAAgzN,EAAA71N,IAAAi1N,IAAA/pB,EAAA72K,OAAAj1B,KAAAY,MACAS,EAAAoC,EAAAoC,EAAA0xD,EAAAl2D,IAAA,EAAA,OAAA,MACA,IAAAT,GAAA22D,EAAAliD,WAAAhU,KACA,OAAA,EAIA,MAAAA,GAGA,QAAAq1N,GAAA7wN,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAA42N,EAAAryN,KAAAizD,EAAA/0D,MAAAxC,GACA,OAAAD,IAAA8F,EAAAD,EAAAgxN,EAAA72N,EAAA,GAAAqB,eAAApB,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAA81N,GAAAhxN,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAA+2N,EAAAxyN,KAAAizD,EAAA/0D,MAAAxC,GACA,OAAAD,IAAA8F,EAAAvE,EAAAy1N,EAAAh3N,EAAA,GAAAqB,eAAApB,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAi2N,GAAAnxN,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAk3N,EAAA3yN,KAAAizD,EAAA/0D,MAAAxC,GACA,OAAAD,IAAA8F,EAAAvE,EAAA41N,EAAAn3N,EAAA,GAAAqB,eAAApB,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAo2N,GAAAtxN,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAq3N,EAAA9yN,KAAAizD,EAAA/0D,MAAAxC,GACA,OAAAD,IAAA8F,EAAA/F,EAAAu3N,EAAAt3N,EAAA,GAAAqB,eAAApB,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAu2N,GAAAzxN,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAw3N,EAAAjzN,KAAAizD,EAAA/0D,MAAAxC,GACA,OAAAD,IAAA8F,EAAA/F,EAAA03N,EAAAz3N,EAAA,GAAAqB,eAAApB,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAA02N,GAAA5xN,EAAA0xD,EAAAv3D,GACA,MAAAk2N,GAAArwN,EAAA6xN,EAAAngK,EAAAv3D,GAGA,QAAA23N,GAAA9xN,EAAA0xD,EAAAv3D,GACA,MAAAk2N,GAAArwN,EAAA+xN,EAAArgK,EAAAv3D,GAGA,QAAA63N,GAAAhyN,EAAA0xD,EAAAv3D,GACA,MAAAk2N,GAAArwN,EAAAiyN,EAAAvgK,EAAAv3D,GAGA,QAAA+3N,GAAAlyN,GACA,MAAAmyN,GAAAnyN,EAAAgvN,UAGA,QAAAoD,GAAApyN,GACA,MAAAqyN,GAAAryN,EAAAgvN,UAGA,QAAAsD,GAAAtyN,GACA,MAAAuyN,GAAAvyN,EAAA2wN,YAGA,QAAA6B,GAAAxyN,GACA,MAAAyyN,GAAAzyN,EAAA2wN,YAGA,QAAA+B,GAAA1yN,GACA,MAAA2yN,KAAA3yN,EAAA4yN,YAAA,KAGA,QAAAC,GAAA7yN,GACA,MAAAmyN,GAAAnyN,EAAAuvN,aAGA,QAAAuD,GAAA9yN,GACA,MAAAqyN,GAAAryN,EAAAuvN,aAGA,QAAAwD,GAAA/yN,GACA,MAAAuyN,GAAAvyN,EAAAs+L,eAGA,QAAA00B,GAAAhzN,GACA,MAAAyyN,GAAAzyN,EAAAs+L,eAGA,QAAA20B,GAAAjzN,GACA,MAAA2yN,KAAA3yN,EAAA89L,eAAA,KA5SA,GAAA+zB,GAAAhrB,EAAAqsB,SACAnB,EAAAlrB,EAAA7wK,KACAi8L,EAAAprB,EAAAp1K,KACAkhM,EAAA9rB,EAAAssB,QACAd,EAAAxrB,EAAAusB,KACAjB,EAAAtrB,EAAAwsB,UACAZ,EAAA5rB,EAAAysB,OACAf,EAAA1rB,EAAA0sB,YAEAzC,EAAA0C,GAAAb,GACA5B,EAAA0C,GAAAd,GACAvB,EAAAoC,GAAAnB,GACAhB,EAAAoC,GAAApB,GACApB,EAAAuC,GAAArB,GACAjB,EAAAuC,GAAAtB,GACAT,EAAA8B,GAAAf,GACAd,EAAA8B,GAAAhB,GACAlB,EAAAiC,GAAAjB,GACAf,EAAAiC,GAAAlB,GAEAj/D,GACAn1J,EAAA+zN,EACA3jN,EAAA6jN,EACAtlN,EAAAwlN,EACAvlN,EAAAylN,EACAz3N,EAAA,KACAiF,EAAA0zN,GACAj6N,EAAAi6N,GACA7zN,EAAA8zN,GACAjlN,EAAAklN,GACAz3N,EAAA03N,GACAr4N,EAAAs4N,GACArnN,EAAAsnN,GACA95N,EAAA+5N,GACA93N,EAAA+3N,GACAl0N,EAAA2yN,EACAr1N,EAAA62N,GACA91N,EAAA+1N,GACAvnN,EAAAwnN,GACAx4N,EAAAy4N,GACAj3N,EAAAk3N,GACAv3N,EAAAw3N,GACA94N,EAAA+4N,GACAp4N,EAAAq4N,GACA55N,EAAA,KACAsC,EAAA,KACA/B,EAAAs5N,GACArlN,EAAAslN,GACAl3N,EAAAm3N,GACAC,IAAAC,IAGAC,GACA52N,EAAA00N,EACAtkN,EAAAukN,EACAhmN,EAAAimN,EACAhmN,EAAAimN,EACAj4N,EAAA,KACAiF,EAAAg1N,GACAv7N,EAAAu7N,GACAn1N,EAAAo1N,GACAvmN,EAAAwmN,GACA/4N,EAAAg5N,GACA35N,EAAA45N,GACA3oN,EAAA4oN,GACAp7N,EAAAq7N,GACAp5N,EAAAq5N,GACAx1N,EAAAkzN,EACA51N,EAAA62N,GACA91N,EAAA+1N,GACAvnN,EAAA4oN,GACA55N,EAAA65N,GACAr4N,EAAAs4N,GACA34N,EAAA44N,GACAl6N,EAAAm6N,GACAx5N,EAAAy5N,GACAh7N,EAAA,KACAsC,EAAA,KACA/B,EAAA06N,GACAzmN,EAAA0mN,GACAt4N,EAAAu4N,GACAnB,IAAAC,IAGAlE,GACAzyN,EAAA6yN,EACAziN,EAAA4iN,EACArkN,EAAAwkN,EACAvkN,EAAA0kN,EACA12N,EAAA62N,EACA5xN,EAAAi2N,GACAx8N,EAAAw8N,GACAp2N,EAAAq2N,GACAxnN,EAAAynN,GACAh6N,EAAAg6N,GACA36N,EAAA46N,GACA3pN,EAAA4pN,GACAp8N,EAAAq8N,GACAp6N,EAAAq6N,GACAx2N,EAAA8wN,EACAxzN,EAAAm5N,GACAp4N,EAAAq4N,GACA7pN,EAAA8pN,GACA96N,EAAA+6N,GACAv5N,EAAAw5N,GACA75N,EAAA85N,GACAp7N,EAAAq7N,GACA16N,EAAA26N,GACAl8N,EAAAi3N,EACA30N,EAAA60N,EACA52N,EAAA47N,GACA3nN,EAAA4nN,GACAx5N,EAAAy5N,GACArC,IAAAsC,GA8LA,OA1LA7jE,GAAAz4J,EAAAisM,EAAAirB,EAAAz+D,GACAA,EAAAn2J,EAAA2pM,EAAAmrB,EAAA3+D,GACAA,EAAAv4J,EAAA+rM,EAAA+qB,EAAAv+D,GACAyhE,EAAAl6N,EAAAisM,EAAAirB,EAAAgD,GACAA,EAAA53N,EAAA2pM,EAAAmrB,EAAA8C,GACAA,EAAAh6N,EAAA+rM,EAAA+qB,EAAAkD,IAsLAtqL,OAAA,SAAAw7J,GACA,GAAApmM,GAAAinM,EAAAb,GAAA,GAAA3yC,EAEA,OADAzzJ,GAAAiL,SAAA,WAAA,MAAAm7L,IACApmM,GAEAjC,MAAA,SAAAqoM,GACA,GAAAlmM,GAAAkwN,EAAAhqB,GAAA,GAAAwpB,GAEA,OADA1vN,GAAA+K,SAAA,WAAA,MAAAm7L,IACAlmM,GAEAq3N,UAAA,SAAAnxB,GACA,GAAApmM,GAAAinM,EAAAb,GAAA,GAAA8uB,EAEA,OADAl1N,GAAAiL,SAAA,WAAA,MAAAm7L,IACApmM,GAEAw3N,SAAA,SAAApxB,GACA,GAAAlmM,GAAAkwN,EAAAhqB,EAAA0pB,GAEA,OADA5vN,GAAA+K,SAAA,WAAA,MAAAm7L,IACAlmM,IAUA,QAAAu3N,IAAA/pN,EAAAmyG,EAAA77G,GACA,GAAAsiM,GAAA54L,EAAA,EAAA,IAAA,GACAmkD,GAAAy0I,GAAA54L,EAAAA,GAAA,GACArS,EAAAw2D,EAAAx2D,MACA,OAAAirM,IAAAjrM,EAAA2I,EAAA,GAAAsD,OAAAtD,EAAA3I,EAAA,GAAA8N,KAAA02G,GAAAhuD,EAAAA,GAGA,QAAA6lK,IAAAn5N,GACA,MAAAA,GAAAlB,QAAAs6N,GAAA,QAGA,QAAAhE,IAAA9uD,GACA,MAAA,IAAA/1J,QAAA,OAAA+1J,EAAA1hK,IAAAu0N,IAAAvuN,KAAA,KAAA,IAAA,KAGA,QAAAyqN,IAAA/uD,GAEA,IADA,GAAA1hK,MAAA7I,GAAA,EAAAD,EAAAwqK,EAAAxpK,SACAf,EAAAD,GAAA8I,EAAA0hK,EAAAvqK,GAAAoB,eAAApB,CACA,OAAA6I,GAGA,QAAA8zN,IAAA92N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAAvE,GAAAvB,EAAA,GAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAy7N,IAAA32N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAApE,GAAA1B,EAAA,GAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAA07N,IAAA52N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAA5C,GAAAlD,EAAA,GAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAA27N,IAAA72N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAAjD,GAAA7C,EAAA,GAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAA67N,IAAA/2N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAA5D,GAAAlC,EAAA,GAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAA+7N,IAAAj3N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAA5E,GAAAlB,EAAA,GAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAA87N,IAAAh3N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAA5E,GAAAlB,EAAA,KAAAA,EAAA,GAAA,GAAA,KAAA,KAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAg8N,IAAAl3N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAA,+BAAAuE,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAAvC,EAAAvD,EAAA,GAAA,IAAAA,EAAA,IAAAA,EAAA,IAAA,OAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAo7N,IAAAt2N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAA/F,EAAAC,EAAA,GAAA,EAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAA+6N,IAAAj2N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAAA,GAAA9F,EAAA,GAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAk7N,IAAAp2N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAA/F,EAAA,EAAA+F,EAAAA,GAAA9F,EAAA,GAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAi7N,IAAAn2N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAA0O,GAAAxU,EAAA,GAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAq7N,IAAAv2N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAA9D,GAAAhC,EAAA,GAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAw7N,IAAA12N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAA4M,GAAA1S,EAAA,GAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAm7N,IAAAr2N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAAyM,GAAAvS,EAAA,GAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAg7N,IAAAl2N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,IAAA8F,EAAAyM,EAAAlI,KAAA8sB,MAAAn3B,EAAA,GAAA,KAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAi8N,IAAAn3N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAw9N,GAAAj5N,KAAAizD,EAAA/0D,MAAAxC,EAAAA,EAAA,GACA,OAAAD,GAAAC,EAAAD,EAAA,GAAAgB,QAAA,EAGA,QAAAs7N,IAAAx2N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,GACA,OAAAD,IAAA8F,EAAA3C,GAAAnD,EAAA,GAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAu7N,IAAAz2N,EAAA0xD,EAAAv3D,GACA,GAAAD,GAAAu9N,GAAAh5N,KAAAizD,EAAA/0D,MAAAxC,GACA,OAAAD,IAAA8F,EAAA3C,EAAA,KAAAnD,EAAA,GAAAC,EAAAD,EAAA,GAAAgB,SAAA,EAGA,QAAAw4N,IAAA1zN,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAA+uN,UAAAhvN,EAAA,GAGA,QAAA6zN,IAAA5zN,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAA4yN,WAAA7yN,EAAA,GAGA,QAAA8zN,IAAA7zN,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAA4yN,WAAA,IAAA,GAAA7yN,EAAA,GAGA,QAAA+zN,IAAA9zN,EAAAD,GACA,MAAAu3N,IAAA,EAAA7G,GAAAr+K,MAAAurJ,GAAA39L,GAAAA,GAAAD,EAAA,GAGA,QAAAg0N,IAAA/zN,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAA23N,kBAAA53N,EAAA,GAGA,QAAA4zN,IAAA3zN,EAAAD,GACA,MAAAg0N,IAAA/zN,EAAAD,GAAA,MAGA,QAAAi0N,IAAAh0N,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAA2wN,WAAA,EAAA5wN,EAAA,GAGA,QAAAk0N,IAAAj0N,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAA43N,aAAA73N,EAAA,GAGA,QAAAq0N,IAAAp0N,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAA63N,aAAA93N,EAAA,GAGA,QAAAs0N,IAAAr0N,GACA,GAAAowN,GAAApwN,EAAAgvN,QACA,OAAA,KAAAoB,EAAA,EAAAA,EAGA,QAAAkE,IAAAt0N,EAAAD,GACA,MAAAu3N,IAAAQ,GAAA1lL,MAAAurJ,GAAA39L,GAAAA,GAAAD,EAAA,GAGA,QAAAw0N,IAAAv0N,EAAAD,GACA,GAAAqwN,GAAApwN,EAAAgvN,QAEA,OADAhvN,GAAAowN,GAAA,GAAA,IAAAA,EAAA2H,GAAA/3N,GAAA+3N,GAAApzN,KAAA3E,GACAs3N,GAAAS,GAAA3lL,MAAAurJ,GAAA39L,GAAAA,IAAA,IAAA29L,GAAA39L,GAAAgvN,UAAAjvN,EAAA,GAGA,QAAAy0N,IAAAx0N,GACA,MAAAA,GAAAgvN,SAGA,QAAAyF,IAAAz0N,EAAAD,GACA,MAAAu3N,IAAA9G,GAAAp+K,MAAAurJ,GAAA39L,GAAAA,GAAAD,EAAA,GAGA,QAAA20N,IAAA10N,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAA0wN,cAAA,IAAA3wN,EAAA,GAGA,QAAA40N,IAAA30N,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAA0wN,cAAA,IAAA3wN,EAAA,GAGA,QAAA60N,IAAA50N,GACA,GAAA6O,GAAA7O,EAAAkvN,mBACA,QAAArgN,EAAA,EAAA,KAAAA,IAAA,EAAA,MACAyoN,GAAAzoN,EAAA,GAAA,EAAA,IAAA,GACAyoN,GAAAzoN,EAAA,GAAA,IAAA,GAGA,QAAAmmN,IAAAh1N,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAAu+L,aAAAx+L,EAAA,GAGA,QAAAm1N,IAAAl1N,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAA89L,cAAA/9L,EAAA,GAGA,QAAAo1N,IAAAn1N,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAA89L,cAAA,IAAA,GAAA/9L,EAAA,GAGA,QAAAq1N,IAAAp1N,EAAAD,GACA,MAAAu3N,IAAA,EAAA/G,GAAAn+K,MAAA4lL,GAAAh4N,GAAAA,GAAAD,EAAA,GAGA,QAAAs1N,IAAAr1N,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAAo+L,qBAAAr+L,EAAA,GAGA,QAAAk1N,IAAAj1N,EAAAD,GACA,MAAAs1N,IAAAr1N,EAAAD,GAAA,MAGA,QAAAu1N,IAAAt1N,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAAs+L,cAAA,EAAAv+L,EAAA,GAGA,QAAAw1N,IAAAv1N,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAAg+L,gBAAAj+L,EAAA,GAGA,QAAAy1N,IAAAx1N,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAAk+L,gBAAAn+L,EAAA,GAGA,QAAA01N,IAAAz1N,GACA,GAAAi4N,GAAAj4N,EAAAuvN,WACA,OAAA,KAAA0I,EAAA,EAAAA,EAGA,QAAAvC,IAAA11N,EAAAD,GACA,MAAAu3N,IAAAY,GAAA9lL,MAAA4lL,GAAAh4N,GAAAA,GAAAD,EAAA,GAGA,QAAA41N,IAAA31N,EAAAD,GACA,GAAAqwN,GAAApwN,EAAAuvN,WAEA,OADAvvN,GAAAowN,GAAA,GAAA,IAAAA,EAAA+H,GAAAn4N,GAAAm4N,GAAAxzN,KAAA3E,GACAs3N,GAAAa,GAAA/lL,MAAA4lL,GAAAh4N,GAAAA,IAAA,IAAAg4N,GAAAh4N,GAAAuvN,aAAAxvN,EAAA,GAGA,QAAA61N,IAAA51N,GACA,MAAAA,GAAAuvN,YAGA,QAAAsG,IAAA71N,EAAAD,GACA,MAAAu3N,IAAAhH,GAAAl+K,MAAA4lL,GAAAh4N,GAAAA,GAAAD,EAAA,GAGA,QAAA+1N,IAAA91N,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAAq+L,iBAAA,IAAAt+L,EAAA,GAGA,QAAAg2N,IAAA/1N,EAAAD,GACA,MAAAu3N,IAAAt3N,EAAAq+L,iBAAA,IAAAt+L,EAAA,GAGA,QAAAi2N,MACA,MAAA,QAGA,QAAAlB,MACA,MAAA,IAGA,QAAAZ,IAAAl0N,GACA,OAAAA,EAGA,QAAAm0N,IAAAn0N,GACA,MAAAuE,MAAA8sB,OAAArxB,EAAA,KAgBA,QAAAo4N,IAAAt1C,GAMA,MALAu1C,IAAAtI,GAAAjtC,GACAlpL,EAAA0+N,WAAAD,GAAA5tL,OACA7wC,EAAA2+N,UAAAF,GAAAz6N,MACAhE,EAAAw9N,UAAAiB,GAAAjB,UACAx9N,EAAAy9N,SAAAgB,GAAAhB,SACAgB,GAKA,QAAAG,IAAAxiM,GACA,MAAAA,GAAA+pF,cAOA,QAAA04G,IAAA/mK,GACA,GAAA17B,GAAA,GAAApwB,MAAA8rD,EACA,OAAAplC,OAAA0J,GAAA,KAAAA,EAeA,QAAA0iM,IAAAh/N,GACA,MAAA,IAAAkM,MAAAlM,GAGA,QAAAi/N,IAAAj/N,GACA,MAAAA,aAAAkM,OAAAlM,GAAA,GAAAkM,OAAAlM,GAGA,QAAAk/N,IAAAC,EAAAC,EAAA3I,EAAAC,EAAA2I,EAAAC,EAAAC,EAAAC,EAAAzuL,GAmCA,QAAAyrI,GAAAlgJ,GACA,OAAAijM,EAAAjjM,GAAAA,EAAAmjM,EACAH,EAAAhjM,GAAAA,EAAAojM,EACAL,EAAA/iM,GAAAA,EAAAqjM,EACAjJ,EAAAp6L,GAAAA,EAAAsjM,EACAR,EAAA9iM,GAAAA,EAAAm6L,EAAAn6L,GAAAA,EAAAujM,EAAAC,EACAX,EAAA7iM,GAAAA,EAAAw8L,EACA90B,GAAA1nK,GAGA,QAAAyjM,GAAAj0N,EAAA5G,EAAA4J,EAAA2Y,GAMA,GALA,MAAA3b,IAAAA,EAAA,IAKA,gBAAAA,GAAA,CACA,GAAA2M,GAAA5N,KAAA+1B,IAAA9xB,EAAA5J,GAAA4G,EACArL,EAAA63K,EAAA,SAAA73K,GAAA,MAAAA,GAAA,KAAAykB,MAAA86M,EAAAvnN,EACAhY,KAAAu/N,EAAAx+N,QACAimB,EAAAsyJ,EAAA70K,EAAA+6N,GAAAnxN,EAAAmxN,GAAAn0N,GACAA,EAAAqzN,GACA1+N,GACAA,EAAAu/N,EAAAvnN,EAAAunN,EAAAv/N,EAAA,GAAA,GAAAu/N,EAAAv/N,GAAA,GAAAgY,EAAAhY,EAAA,EAAAA,GACAgnB,EAAAhnB,EAAA,GACAqL,EAAArL,EAAA,KAEAgnB,EAAA5c,KAAAC,IAAAivK,EAAA70K,EAAA4J,EAAAhD,GAAA,GACAA,EAAA0zN,GAIA,MAAA,OAAA/3M,EAAA3b,EAAAA,EAAAiwC,MAAAt0B,GAlEA,GAAAu0J,GAAA22C,GAAAV,GAAAA,IACA95I,EAAA6jG,EAAA7jG,OACAmiG,EAAA0B,EAAA1B,OAEAmlD,EAAA1uL,EAAA,OACA2uL,EAAA3uL,EAAA,OACA4uL,EAAA5uL,EAAA,SACA6uL,EAAA7uL,EAAA,SACA8uL,EAAA9uL,EAAA,SACA+uL,EAAA/uL,EAAA,SACA+nL,EAAA/nL,EAAA,MACAizJ,EAAAjzJ,EAAA,MAEAivL,IACAT,EAAA,EAAAW,KACAX,EAAA,EAAA,EAAAW,KACAX,EAAA,GAAA,GAAAW,KACAX,EAAA,GAAA,GAAAW,KACAZ,EAAA,EAAAa,KACAb,EAAA,EAAA,EAAAa,KACAb,EAAA,GAAA,GAAAa,KACAb,EAAA,GAAA,GAAAa,KACAd,EAAA,EAAAe,KACAf,EAAA,EAAA,EAAAe,KACAf,EAAA,EAAA,EAAAe,KACAf,EAAA,GAAA,GAAAe,KACA1J,EAAA,EAAA2J,KACA3J,EAAA,EAAA,EAAA2J,KACA5J,EAAA,EAAA6J,KACAlB,EAAA,EAAAmB,KACAnB,EAAA,EAAA,EAAAmB,KACApB,EAAA,EAAAc,IAyEA,OAnCAjkD,GAAA7jG,OAAA,SAAAz2E,GACA,MAAA,IAAAwK,MAAAisE,EAAAz2E,KAGAs6K,EAAA1B,OAAA,SAAAp3K,GACA,MAAA4E,WAAAtG,OAAA84K,EAAAo4C,GAAApxN,KAAA4B,EAAA+7N,KAAA3kD,IAAAhxK,IAAA01N,KAGAhjD,EAAAvC,MAAA,SAAA3tK,EAAA2b,GACA,GAIAznB,GAJAsG,EAAAg0K,IACAjZ,EAAA/6J,EAAA,GACAspH,EAAAtpH,EAAAA,EAAA9E,OAAA,GACAb,EAAAivH,EAAAyxC,CAKA,OAHA1gK,KAAAX,EAAAqhK,EAAAA,EAAAzxC,EAAAA,EAAA5vH,GACAA,EAAA+/N,EAAAj0N,EAAAu1J,EAAAzxC,EAAAnoG,GACAznB,EAAAA,EAAAA,EAAAysD,MAAA40G,EAAAzxC,EAAA,MACAjvH,EAAAX,EAAA2b,UAAA3b,GAGAg8K,EAAAQ,WAAA,SAAA9jI,EAAA6zJ,GACA,MAAA,OAAAA,EAAA/vB,EAAAzrI,EAAAw7J,IAGAvwB,EAAA62C,KAAA,SAAA/mN,EAAA2b,GACA,GAAAnhB,GAAAg0K,GACA,QAAAxuK,EAAAi0N,EAAAj0N,EAAAxF,EAAA,GAAAA,EAAAA,EAAA9E,OAAA,GAAAimB,IACA6yJ,EAAAu4C,GAAAvsN,EAAAwF,IACAkwK,GAGAA,EAAAztF,KAAA,WACA,MAAAA,IAAAytF,EAAAkjD,GAAAC,EAAAC,EAAA3I,EAAAC,EAAA2I,EAAAC,EAAAC,EAAAC,EAAAzuL,KAGAirI,EAGA,QAAAjkJ,MACA,MAAAo5L,IAAAnuN,MAAAk8N,GAAAj7B,GAAAu8B,GAAApC,GAAArH,GAAA0J,GAAAC,GAAAtmL,GAAAumL,GAAAzgO,EAAA0+N,YAAAtkD,QAAA,GAAApuK,MAAA,IAAA,EAAA,GAAA,GAAAA,MAAA,IAAA,EAAA,KAAApE,WAGA,QAAA84N,MACA,MAAAzP,IAAAnuN,MAAAk8N,GAAAZ,GAAAuC,GAAArC,GAAA3H,GAAAiK,GAAAC,GAAA3mL,GAAAumL,GAAAzgO,EAAAw9N,WAAApjD,QAAApuK,KAAAgqN,IAAA,IAAA,EAAA,GAAAhqN,KAAAgqN,IAAA,IAAA,EAAA,KAAApuN,WAGA,QAAAk5N,MAWA,QAAAhlD,GAAA76K,GACA,MAAAyxB,OAAAzxB,GAAAA,GAAAmwN,EAAAhgC,EAAA,IAAA2vC,EAAA,IAAA9/N,GAAAohD,EAAAphD,GAAAkgK,GAAA4/D,EAAA3O,EAAAznN,KAAAC,IAAA,EAAAD,KAAAyuD,IAAA,EAAAn4D,IAAAA,IAXA,GAEAkgK,GACAzxC,EACAqxG,EACA1+K,EAGA+uK,EARA/2C,EAAA,EACA9X,EAAA,EAKA6uB,EAAA2gC,GACAK,GAAA,CAuBA,OAhBAt2C,GAAA1B,OAAA,SAAAp3K,GACA,MAAA4E,WAAAtG,QAAA6/J,EAAA9+G,EAAAg4H,GAAAr3K,EAAA,IAAA0sH,EAAArtE,EAAAkgH,GAAAv/J,EAAA,IAAA+9N,EAAA5/D,IAAAzxC,EAAA,EAAA,GAAAA,EAAAyxC,GAAA2a,IAAAzB,EAAA9X,IAGAuZ,EAAAs2C,MAAA,SAAApvN,GACA,MAAA4E,WAAAtG,QAAA8wN,IAAApvN,EAAA84K,GAAAs2C,GAGAt2C,EAAAsV,aAAA,SAAApuL,GACA,MAAA4E,WAAAtG,QAAA8vL,EAAApuL,EAAA84K,GAAAsV,GAGAtV,EAAAs1C,QAAA,SAAApuN,GACA,MAAA4E,WAAAtG,QAAA8vN,EAAApuN,EAAA84K,GAAAs1C,GAGA,SAAAtxN,GAEA,MADAuiD,GAAAviD,EAAAqhK,EAAArhK,EAAAu6K,GAAA3qD,EAAA5vH,EAAAyiK,GAAAw+D,EAAA5/D,IAAAzxC,EAAA,EAAA,GAAAA,EAAAyxC,GACA2a,GAIA,QAAAklD,IAAAljN,EAAAvF,GACA,MAAAA,GACA6hK,OAAAt8J,EAAAs8J,UACAgX,aAAAtzK,EAAAszK,gBACAghC,MAAAt0M,EAAAs0M,SACAhB,QAAAtzM,EAAAszM,WAGA,QAAA6P,MACA,GAAAnlD,GAAA42C,GAAAoO,KAAA/O,IAMA,OAJAj2C,GAAAztF,KAAA,WACA,MAAA2yI,IAAAllD,EAAAmlD,OAGA/P,GAAApuN,MAAAg5K,EAAAl0K,WAGA,QAAAs5N,MACA,GAAAplD,GAAAy3C,GAAAuN,MAAA1mD,QAAA,EAAA,IAMA,OAJA0B,GAAAztF,KAAA,WACA,MAAA2yI,IAAAllD,EAAAolD,MAAApnK,KAAAgiH,EAAAhiH,SAGAo3J,GAAApuN,MAAAg5K,EAAAl0K,WAGA,QAAAu5N,MACA,GAAArlD,GAAAi4C,GAAA+M,KAMA,OAJAhlD,GAAAztF,KAAA,WACA,MAAA2yI,IAAAllD,EAAAqlD,MAAA9nD,SAAAyC,EAAAzC,aAGA63C,GAAApuN,MAAAg5K,EAAAl0K,WAGA,QAAAw5N,MACA,GAAAtlD,GAAAs4C,GAAA0M,KAMA,OAJAhlD,GAAAztF,KAAA,WACA,MAAA2yI,IAAAllD,EAAAslD,MAAAx0B,SAAA9wB,EAAA8wB,aAGAskB,GAAApuN,MAAAg5K,EAAAl0K,WAGA,QAAAy5N,MACA,MAAAD,IAAAt+N,MAAA,KAAA8E,WAAAglM,SAAA,IAGA,QAAA00B,MAIA,QAAAxlD,GAAA76K,GACA,IAAAyxB,MAAAzxB,GAAAA,GAAA,MAAAmwL,IAAA1W,GAAAN,EAAAn5K,GAAA,IAAAm5K,EAAA94K,OAAA,IAJA,GAAA84K,MACAgX,EAAA2gC,EAsBA,OAhBAj2C,GAAA1B,OAAA,SAAAp3K,GACA,IAAA4E,UAAAtG,OAAA,MAAA84K,GAAAr3K,OACAq3K,KACA,KAAA,GAAAh0K,GAAA7F,EAAA,EAAAD,EAAA0C,EAAA1B,OAAAf,EAAAD,IAAAC,EAAA,OAAA6F,EAAApD,EAAAzC,KAAAmyB,MAAAtsB,GAAAA,IAAAg0K,EAAApzK,KAAAZ,EAEA,OADAg0K,GAAAtoK,KAAAqmK,GACA2D,GAGAA,EAAAsV,aAAA,SAAApuL,GACA,MAAA4E,WAAAtG,QAAA8vL,EAAApuL,EAAA84K,GAAAsV,GAGAtV,EAAAztF,KAAA,WACA,MAAAizI,IAAAlwC,GAAAhX,OAAAA,IAGA82C,GAAApuN,MAAAg5K,EAAAl0K,WAGA,QAAA25N,MAcA,QAAAzlD,GAAA76K,GACA,MAAAyxB,OAAAzxB,GAAAA,GAAAmwN,GAAAnwN,EAAA,KAAAA,GAAAohD,EAAAphD,IAAAyuH,IAAAzuH,EAAAyuH,EAAAqxG,EAAAS,GAAApwC,EAAAghC,EAAAznN,KAAAC,IAAA,EAAAD,KAAAyuD,IAAA,EAAAn4D,IAAAA,IAdA,GAGAkgK,GACAzxC,EACAC,EACAoxG,EACAS,EAEAn/K,EAEA+uK,EAXA/2C,EAAA,EACA9X,EAAA,GACAE,EAAA,EAMA2uB,EAAA2gC,GAEAK,GAAA,CAuBA,OAhBAt2C,GAAA1B,OAAA,SAAAp3K,GACA,MAAA4E,WAAAtG,QAAA6/J,EAAA9+G,EAAAg4H,GAAAr3K,EAAA,IAAA0sH,EAAArtE,EAAAkgH,GAAAv/J,EAAA,IAAA2sH,EAAAttE,EAAAogH,GAAAz/J,EAAA,IAAA+9N,EAAA5/D,IAAAzxC,EAAA,EAAA,IAAAA,EAAAyxC,GAAAqgE,EAAA9xG,IAAAC,EAAA,EAAA,IAAAA,EAAAD,GAAAosD,IAAAzB,EAAA9X,EAAAE,IAGAqZ,EAAAs2C,MAAA,SAAApvN,GACA,MAAA4E,WAAAtG,QAAA8wN,IAAApvN,EAAA84K,GAAAs2C,GAGAt2C,EAAAsV,aAAA,SAAApuL,GACA,MAAA4E,WAAAtG,QAAA8vL,EAAApuL,EAAA84K,GAAAsV,GAGAtV,EAAAs1C,QAAA,SAAApuN,GACA,MAAA4E,WAAAtG,QAAA8vN,EAAApuN,EAAA84K,GAAAs1C,GAGA,SAAAtxN,GAEA,MADAuiD,GAAAviD,EAAAqhK,EAAArhK,EAAAu6K,GAAA3qD,EAAA5vH,EAAAyiK,GAAA5yC,EAAA7vH,EAAA2iK,GAAAs+D,EAAA5/D,IAAAzxC,EAAA,EAAA,IAAAA,EAAAyxC,GAAAqgE,EAAA9xG,IAAAC,EAAA,EAAA,IAAAA,EAAAD,GACAosD,GAIA,QAAA2lD,MACA,GAAA3lD,GAAA42C,GAAA6O,KAAAxP,IAMA,OAJAj2C,GAAAztF,KAAA,WACA,MAAA2yI,IAAAllD,EAAA2lD,OAGAvQ,GAAApuN,MAAAg5K,EAAAl0K,WAGA,QAAA85N,MACA,GAAA5lD,GAAAy3C,GAAAgO,MAAAnnD,QAAA,GAAA,EAAA,IAMA,OAJA0B,GAAAztF,KAAA,WACA,MAAA2yI,IAAAllD,EAAA4lD,MAAA5nK,KAAAgiH,EAAAhiH,SAGAo3J,GAAApuN,MAAAg5K,EAAAl0K,WAGA,QAAA+5N,MACA,GAAA7lD,GAAAi4C,GAAAwN,KAMA,OAJAzlD,GAAAztF,KAAA,WACA,MAAA2yI,IAAAllD,EAAA6lD,MAAAtoD,SAAAyC,EAAAzC,aAGA63C,GAAApuN,MAAAg5K,EAAAl0K,WAGA,QAAAg6N,MACA,GAAA9lD,GAAAs4C,GAAAmN,KAMA,OAJAzlD,GAAAztF,KAAA,WACA,MAAA2yI,IAAAllD,EAAA8lD,MAAAh1B,SAAA9wB,EAAA8wB,aAGAskB,GAAApuN,MAAAg5K,EAAAl0K,WAGA,QAAAi6N,MACA,MAAAD,IAAA9+N,MAAA,KAAA8E,WAAAglM,SAAA,IAGA,QAAA/hC,IAAAwhC,GAEA,IADA,GAAA/rM,GAAA+rM,EAAA/qM,OAAA,EAAA,EAAAupK,EAAA,GAAAt9J,OAAAjN,GAAAC,EAAA,EACAA,EAAAD,GAAAuqK,EAAAtqK,GAAA,IAAA8rM,EAAAtpM,MAAA,EAAAxC,EAAA,IAAAA,EACA,OAAAsqK,GAqBA,QAAAi3D,IAAAC,GACA,MAAAC,IAAAD,EAAAA,EAAAzgO,OAAA,IAiWA,QAAA2gO,IAAAniO,IACAA,EAAA,GAAAA,EAAA,KAAAA,GAAA6K,KAAA8sB,MAAA33B,GACA,IAAAoiO,GAAAv3N,KAAA+1B,IAAA5gC,EAAA,GAIA,OAHAqB,IAAAkF,EAAA,IAAAvG,EAAA,IACAqB,GAAAqD,EAAA,IAAA,IAAA09N,EACA/gO,GAAAD,EAAA,GAAA,GAAAghO,EACA/gO,GAAA,GAOA,QAAAghO,IAAAriO,GACA,GAAAmB,EAKA,OAJAnB,IAAA,GAAAA,GAAA6K,KAAAkd,GACAu6M,GAAA3hO,EAAA,KAAAQ,EAAA0J,KAAAq6J,IAAAllK,IAAAmB,EACAmhO,GAAA7gO,EAAA,KAAAN,EAAA0J,KAAAq6J,IAAAllK,EAAAuiO,KAAAphO,EACAmhO,GAAAlvN,EAAA,KAAAjS,EAAA0J,KAAAq6J,IAAAllK,EAAAwiO,KAAArhO,EACAmhO,GAAA,GAGA,QAAAG,IAAAh2K,GACA,GAAAjsD,GAAAisD,EAAAjrD,MACA,OAAA,UAAAxB,GACA,MAAAysD,GAAA5hD,KAAAC,IAAA,EAAAD,KAAAyuD,IAAA94D,EAAA,EAAAqK,KAAA8sB,MAAA33B,EAAAQ,OAYA,QAAAkiO,IAAAvhO,GACA,MAAA,YACA,MAAAA,IAiBA,QAAAwhO,IAAAxhO,GACA,MAAAA,GAAA,EAAA,EAAAA,GAAA,EAAAyhO,GAAA/3N,KAAA2jM,KAAArtM,GAGA,QAAA0hO,IAAA1hO,GACA,MAAAA,IAAA,EAAA2hO,GAAA3hO,IAAA,GAAA2hO,GAAAj4N,KAAA6jM,KAAAvtM,GAGA,QAAA4hO,IAAAz8N,GACA,MAAAA,GAAA08N,YAGA,QAAAC,IAAA38N,GACA,MAAAA,GAAA48N,YAGA,QAAAC,IAAA78N,GACA,MAAAA,GAAAw8J,WAGA,QAAAsgE,IAAA98N,GACA,MAAAA,GAAAy8J,SAGA,QAAAsgE,IAAA/8N,GACA,MAAAA,IAAAA,EAAAg4L,SAGA,QAAA0a,IAAAz+B,EAAA+sB,EAAA7kC,EAAAC,EAAAC,EAAAC,EAAAmlC,EAAAC,GACA,GAAAs7B,GAAA7gE,EAAA8X,EAAAgpD,EAAA7gE,EAAA4kC,EACAk8B,EAAAz7B,EAAAplC,EAAA8gE,EAAAz7B,EAAAplC,EACA5iK,EAAAyjO,EAAAH,EAAAE,EAAAD,CACA,MAAAvjO,EAAAA,EAAA0jO,IAEA,MADA1jO,IAAAwjO,GAAAl8B,EAAA1kC,GAAA6gE,GAAAlpD,EAAA5X,IAAA3iK,GACAu6K,EAAAv6K,EAAAsjO,EAAAh8B,EAAAtnM,EAAAujO,GAKA,QAAAI,IAAAppD,EAAA+sB,EAAA7kC,EAAAC,EAAAh7F,EAAAzvB,EAAAoxH,GACA,GAAAu6D,GAAArpD,EAAA9X,EACAohE,EAAAv8B,EAAA5kC,EACA/O,GAAA0V,EAAApxH,GAAAA,GAAA6rL,GAAAF,EAAAA,EAAAC,EAAAA,GACAE,EAAApwE,EAAAkwE,EACAG,GAAArwE,EAAAiwE,EACAK,EAAA1pD,EAAAwpD,EACAG,EAAA58B,EAAA08B,EACAV,EAAA7gE,EAAAshE,EACAR,EAAA7gE,EAAAshE,EACA9lB,GAAA+lB,EAAAX,GAAA,EACAllB,GAAA8lB,EAAAX,GAAA,EACAr7I,EAAAo7I,EAAAW,EACA77I,EAAAm7I,EAAAW,EACA7wL,EAAA60C,EAAAA,EAAAE,EAAAA,EACAznF,EAAA+mE,EAAAzvB,EACArjC,EAAAqvN,EAAAV,EAAAD,EAAAY,EACA59N,GAAA8hF,EAAA,GAAA,EAAA,GAAA07I,GAAAK,GAAA,EAAAxjO,EAAAA,EAAA0yC,EAAAz+B,EAAAA,IACAwvN,GAAAxvN,EAAAwzE,EAAAF,EAAA5hF,GAAA+sC,EACAiqK,IAAA1oM,EAAAszE,EAAAE,EAAA9hF,GAAA+sC,EACAgxL,GAAAzvN,EAAAwzE,EAAAF,EAAA5hF,GAAA+sC,EACAkqK,IAAA3oM,EAAAszE,EAAAE,EAAA9hF,GAAA+sC,EACAixL,EAAAF,EAAAlmB,EACAqmB,EAAAjnB,EAAAc,EACAomB,EAAAH,EAAAnmB,EACAumB,EAAAlnB,EAAAa;wPAMA,OAFAkmB,GAAAA,EAAAC,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,IAAAL,EAAAC,EAAA/mB,EAAAC,IAGA7I,GAAA0vB,EACAzvB,GAAA2I,EACAsmB,KAAAG,EACAF,KAAAG,EACAC,IAAAG,GAAA18J,EAAA/mE,EAAA,GACAujO,IAAA5mB,GAAA51I,EAAA/mE,EAAA,IAIA,QAAAyjK,MAUA,QAAAA,KACA,GAAAkJ,GACA3sK,EACA8mE,GAAAu7J,EAAAhgO,MAAA1C,KAAAwH,WACA4/D,GAAAw7J,EAAAlgO,MAAA1C,KAAAwH,WACAmzC,EAAA6nH,EAAA9/J,MAAA1C,KAAAwH,WAAAg7N,GACAz5J,EAAA05F,EAAA//J,MAAA1C,KAAAwH,WAAAg7N,GACA4B,EAAAC,GAAAt7J,EAAApuB,GACAouH,EAAAhgG,EAAApuB,CAQA,IANAztB,IAAAA,EAAA8/I,EAAAr1I,MAGAyvC,EAAAD,IAAA9mE,EAAA+mE,EAAAA,EAAAD,EAAAA,EAAA9mE,GAGA+mE,EAAAg8J,GAGA,GAAAgB,EAAAE,GAAAlB,GACAl2M,EAAAq2I,OAAAn8F,EAAAm9J,GAAA5pL,GAAAysB,EAAAo9J,GAAA7pL,IACAztB,EAAA42I,IAAA,EAAA,EAAA18F,EAAAzsB,EAAAouB,GAAAggG,GACA5hG,EAAAi8J,KACAl2M,EAAAq2I,OAAAp8F,EAAAo9J,GAAAx7J,GAAA5B,EAAAq9J,GAAAz7J,IACA77C,EAAA42I,IAAA,EAAA,EAAA38F,EAAA4B,EAAApuB,EAAAouH,QAKA,CACA,GAWAhI,GACAzxC,EAZAm1G,EAAA9pL,EACA+pL,EAAA37J,EACAs5I,EAAA1nK,EACAgqL,EAAA57J,EACA67J,EAAAR,EACAS,EAAAT,EACAU,EAAA9mC,EAAAt7L,MAAA1C,KAAAwH,WAAA,EACA+/H,EAAAu9F,EAAA1B,KAAA2B,GAAAA,EAAAriO,MAAA1C,KAAAwH,WAAAg8N,GAAAr8J,EAAAA,EAAAC,EAAAA,IACAzvB,EAAAqtL,GAAAX,GAAAj9J,EAAAD,GAAA,GAAA89J,EAAAviO,MAAA1C,KAAAwH,YACA09N,EAAAvtL,EACAwtL,EAAAxtL,CAKA,IAAA4vF,EAAA67F,GAAA,CACA,GAAAx6C,GAAA25C,GAAAh7F,EAAApgE,EAAAq9J,GAAAM,IACA93G,EAAAu1G,GAAAh7F,EAAAngE,EAAAo9J,GAAAM,KACAF,GAAA,EAAAh8C,GAAAw6C,IAAAx6C,GAAA7f,EAAA,GAAA,EAAAs5C,GAAAz5B,EAAA+7C,GAAA/7C,IACAg8C,EAAA,EAAAviB,EAAAsiB,GAAAhqL,EAAAouB,GAAA,IACA87J,GAAA,EAAA73G,GAAAo2G,IAAAp2G,GAAA+7C,EAAA,GAAA,EAAA07D,GAAAz3G,EAAA03G,GAAA13G,IACA63G,EAAA,EAAAJ,EAAAC,GAAA/pL,EAAAouB,GAAA,GAGA,GAAAu6J,GAAAl8J,EAAAm9J,GAAAE,GACAlB,EAAAn8J,EAAAo9J,GAAAC,GACAzB,EAAA77J,EAAAo9J,GAAAI,GACA1B,EAAA97J,EAAAq9J,GAAAG,EAGA,IAAAhtL,EAAAyrL,GAAA,CACA,GAIAgC,GAJAzB,EAAAv8J,EAAAm9J,GAAAG,GACAd,EAAAx8J,EAAAo9J,GAAAE,GACA9mB,EAAAz2I,EAAAo9J,GAAAliB,GACAvE,EAAA32I,EAAAq9J,GAAAniB,EAIA,IAAA+hB,EAAA9B,KAAA8C,EAAA1sB,GAAA4qB,EAAAC,EAAA3lB,EAAAE,EAAA6lB,EAAAC,EAAAZ,EAAAC,IAAA,CACA,GAAAxpB,GAAA6pB,EAAA8B,EAAA,GACA1rB,EAAA6pB,EAAA6B,EAAA,GACAzrB,EAAAgqB,EAAAyB,EAAA,GACA1jF,EAAAkiF,EAAAwB,EAAA,GACAC,EAAA,EAAAb,GAAAnC,IAAA5oB,EAAAE,EAAAD,EAAAh4D,IAAA8hF,GAAA/pB,EAAAA,EAAAC,EAAAA,GAAA8pB,GAAA7pB,EAAAA,EAAAj4D,EAAAA,KAAA,GACAyE,EAAAq9E,GAAA4B,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACAF,GAAAF,GAAArtL,GAAAwvB,EAAAg/E,IAAAk/E,EAAA,IACAF,EAAAH,GAAArtL,GAAAyvB,EAAA++E,IAAAk/E,EAAA,KAKAR,EAAAzB,GAGA+B,EAAA/B,IACAriE,EAAAsiE,GAAAzlB,EAAAE,EAAAwlB,EAAAC,EAAAn8J,EAAA+9J,EAAAp8D,GACAz5C,EAAA+zG,GAAAM,EAAAC,EAAAZ,EAAAC,EAAA77J,EAAA+9J,EAAAp8D,GAEA77I,EAAAq2I,OAAAxC,EAAAqzC,GAAArzC,EAAAuiE,IAAAviE,EAAAszC,GAAAtzC,EAAAwiE,KAGA4B,EAAAxtL,EAAAzqB,EAAA42I,IAAA/C,EAAAqzC,GAAArzC,EAAAszC,GAAA8wB,EAAAG,GAAAvkE,EAAAwiE,IAAAxiE,EAAAuiE,KAAAgC,GAAAh2G,EAAAi0G,IAAAj0G,EAAAg0G,MAAAv6D,IAIA77I,EAAA42I,IAAA/C,EAAAqzC,GAAArzC,EAAAszC,GAAA8wB,EAAAG,GAAAvkE,EAAAwiE,IAAAxiE,EAAAuiE,KAAAgC,GAAAvkE,EAAA6iE,IAAA7iE,EAAA4iE,MAAA56D,GACA77I,EAAA42I,IAAA,EAAA,EAAA18F,EAAAk+J,GAAAvkE,EAAAszC,GAAAtzC,EAAA6iE,IAAA7iE,EAAAqzC,GAAArzC,EAAA4iE,KAAA2B,GAAAh2G,EAAA+kF,GAAA/kF,EAAAs0G,IAAAt0G,EAAA8kF,GAAA9kF,EAAAq0G,MAAA56D,GACA77I,EAAA42I,IAAAx0C,EAAA8kF,GAAA9kF,EAAA+kF,GAAA8wB,EAAAG,GAAAh2G,EAAAs0G,IAAAt0G,EAAAq0G,KAAA2B,GAAAh2G,EAAAi0G,IAAAj0G,EAAAg0G,MAAAv6D,MAKA77I,EAAAq2I,OAAA+/D,EAAAC,GAAAr2M,EAAA42I,IAAA,EAAA,EAAA18F,EAAAq9J,EAAAC,GAAA37D,IArBA77I,EAAAq2I,OAAA+/D,EAAAC,GAyBAp8J,EAAAi8J,IAAAwB,EAAAxB,GAGA8B,EAAA9B,IACAriE,EAAAsiE,GAAAL,EAAAC,EAAAU,EAAAC,EAAAz8J,GAAA+9J,EAAAn8D,GACAz5C,EAAA+zG,GAAAC,EAAAC,EAAA3lB,EAAAE,EAAA32I,GAAA+9J,EAAAn8D,GAEA77I,EAAAs2I,OAAAzC,EAAAqzC,GAAArzC,EAAAuiE,IAAAviE,EAAAszC,GAAAtzC,EAAAwiE,KAGA2B,EAAAvtL,EAAAzqB,EAAA42I,IAAA/C,EAAAqzC,GAAArzC,EAAAszC,GAAA6wB,EAAAI,GAAAvkE,EAAAwiE,IAAAxiE,EAAAuiE,KAAAgC,GAAAh2G,EAAAi0G,IAAAj0G,EAAAg0G,MAAAv6D,IAIA77I,EAAA42I,IAAA/C,EAAAqzC,GAAArzC,EAAAszC,GAAA6wB,EAAAI,GAAAvkE,EAAAwiE,IAAAxiE,EAAAuiE,KAAAgC,GAAAvkE,EAAA6iE,IAAA7iE,EAAA4iE,MAAA56D,GACA77I,EAAA42I,IAAA,EAAA,EAAA38F,EAAAm+J,GAAAvkE,EAAAszC,GAAAtzC,EAAA6iE,IAAA7iE,EAAAqzC,GAAArzC,EAAA4iE,KAAA2B,GAAAh2G,EAAA+kF,GAAA/kF,EAAAs0G,IAAAt0G,EAAA8kF,GAAA9kF,EAAAq0G,KAAA56D,GACA77I,EAAA42I,IAAAx0C,EAAA8kF,GAAA9kF,EAAA+kF,GAAA6wB,EAAAI,GAAAh2G,EAAAs0G,IAAAt0G,EAAAq0G,KAAA2B,GAAAh2G,EAAAi0G,IAAAj0G,EAAAg0G,MAAAv6D,KAKA77I,EAAA42I,IAAA,EAAA,EAAA38F,EAAAw9J,EAAAtiB,EAAAt5C,GArBA77I,EAAAs2I,OAAAw/D,EAAAC,OA1FA/1M,GAAAq2I,OAAA,EAAA,EAoHA,IAFAr2I,EAAA82I,YAEAgJ,EAAA,MAAA9/I,GAAA,KAAA8/I,EAAA,IAAA,KA7IA,GAAA01D,GAAAD,GACAG,EAAAD,GACAsC,EAAA7C,GAAA,GACA2C,EAAA,KACAviE,EAAAqgE,GACApgE,EAAAqgE,GACA9kC,EAAA+kC,GACA71M,EAAA,IA+KA,OAtCA42I,GAAA4wC,SAAA,WACA,GAAAr0M,KAAAqiO,EAAAhgO,MAAA1C,KAAAwH,aAAAo7N,EAAAlgO,MAAA1C,KAAAwH,YAAA,EACArD,IAAAq+J,EAAA9/J,MAAA1C,KAAAwH,aAAAi7J,EAAA//J,MAAA1C,KAAAwH,YAAA,EAAA86N,GAAA,CACA,QAAAiC,GAAApgO,GAAA9D,EAAAmkO,GAAArgO,GAAA9D,IAGAyjK,EAAA4+D,YAAA,SAAA9/N,GACA,MAAA4E,WAAAtG,QAAAwhO,EAAA,kBAAA9/N,GAAAA,EAAAw/N,IAAAx/N,GAAAkhK,GAAA4+D,GAGA5+D,EAAA8+D,YAAA,SAAAhgO,GACA,MAAA4E,WAAAtG,QAAA0hO,EAAA,kBAAAhgO,GAAAA,EAAAw/N,IAAAx/N,GAAAkhK,GAAA8+D,GAGA9+D,EAAAmhE,aAAA,SAAAriO,GACA,MAAA4E,WAAAtG,QAAA+jO,EAAA,kBAAAriO,GAAAA,EAAAw/N,IAAAx/N,GAAAkhK,GAAAmhE,GAGAnhE,EAAAihE,UAAA,SAAAniO,GACA,MAAA4E,WAAAtG,QAAA6jO,EAAA,MAAAniO,EAAA,KAAA,kBAAAA,GAAAA,EAAAw/N,IAAAx/N,GAAAkhK,GAAAihE,GAGAjhE,EAAAtB,WAAA,SAAA5/J,GACA,MAAA4E,WAAAtG,QAAAshK,EAAA,kBAAA5/J,GAAAA,EAAAw/N,IAAAx/N,GAAAkhK,GAAAtB,GAGAsB,EAAArB,SAAA,SAAA7/J,GACA,MAAA4E,WAAAtG,QAAAuhK,EAAA,kBAAA7/J,GAAAA,EAAAw/N,IAAAx/N,GAAAkhK,GAAArB,GAGAqB,EAAAk6B,SAAA,SAAAp7L,GACA,MAAA4E,WAAAtG,QAAA88L,EAAA,kBAAAp7L,GAAAA,EAAAw/N,IAAAx/N,GAAAkhK,GAAAk6B,GAGAl6B,EAAA52I,QAAA,SAAAtqB,GACA,MAAA4E,WAAAtG,QAAAgsB,EAAA,MAAAtqB,EAAA,KAAAA,EAAAkhK,GAAA52I,GAGA42I,EAGA,QAAAyhE,IAAAr4M,GACAltB,KAAA6/M,SAAA3yL,EA2BA,QAAAs4M,IAAAt4M,GACA,MAAA,IAAAq4M,IAAAr4M,GAGA,QAAAu4M,IAAA1/N,GACA,MAAAA,GAAA,GAGA,QAAA2/N,IAAA3/N,GACA,MAAAA,GAAA,GAGA,QAAA6wD,MAQA,QAAAA,GAAAlmD,GACA,GAAAvQ,GAEA6F,EAEAgnK,EAHA9sK,EAAAwQ,EAAAxP,OAEAykO,GAAA,CAKA,KAFA,MAAAz4M,IAAAwc,EAAAk8L,EAAA54D,EAAAr1I,OAEAx3B,EAAA,EAAAA,GAAAD,IAAAC,IACAA,EAAAD,GAAA2lO,EAAA7/N,EAAA0K,EAAAvQ,GAAAA,EAAAuQ,MAAAi1N,KACAA,GAAAA,GAAAj8L,EAAAwuD,YACAxuD,EAAA0uD,WAEAutI,GAAAj8L,EAAA2tG,OAAAyuF,EAAA9/N,EAAA7F,EAAAuQ,IAAAq1N,EAAA//N,EAAA7F,EAAAuQ,GAGA,IAAAs8J,EAAA,MAAAtjI,GAAA,KAAAsjI,EAAA,IAAA,KAxBA,GAAA84D,GAAAL,GACAM,EAAAL,GACAG,EAAAzD,IAAA,GACAl1M,EAAA,KACA04M,EAAAJ,GACA97L,EAAA,IA0CA,OApBAktB,GAAA/1D,EAAA,SAAA+B,GACA,MAAA4E,WAAAtG,QAAA4kO,EAAA,kBAAAljO,GAAAA,EAAAw/N,IAAAx/N,GAAAg0D,GAAAkvK,GAGAlvK,EAAAx1D,EAAA,SAAAwB,GACA,MAAA4E,WAAAtG,QAAA6kO,EAAA,kBAAAnjO,GAAAA,EAAAw/N,IAAAx/N,GAAAg0D,GAAAmvK,GAGAnvK,EAAAivK,QAAA,SAAAjjO,GACA,MAAA4E,WAAAtG,QAAA2kO,EAAA,kBAAAjjO,GAAAA,EAAAw/N,KAAAx/N,GAAAg0D,GAAAivK,GAGAjvK,EAAAgvK,MAAA,SAAAhjO,GACA,MAAA4E,WAAAtG,QAAA0kO,EAAAhjO,EAAA,MAAAsqB,IAAAwc,EAAAk8L,EAAA14M,IAAA0pC,GAAAgvK,GAGAhvK,EAAA1pC,QAAA,SAAAtqB,GACA,MAAA4E,WAAAtG,QAAA,MAAA0B,EAAAsqB,EAAAwc,EAAA,KAAAA,EAAAk8L,EAAA14M,EAAAtqB,GAAAg0D,GAAA1pC,GAGA0pC,EAGA,QAAAovK,MAUA,QAAAtlM,GAAAhwB,GACA,GAAAvQ,GACAqB,EACA4S,EAEApO,EAEAgnK,EAHA9sK,EAAAwQ,EAAAxP,OAEAykO,GAAA,EAEAM,EAAA,GAAA94N,OAAAjN,GACAgmO,EAAA,GAAA/4N,OAAAjN,EAIA,KAFA,MAAAgtB,IAAAwc,EAAAk8L,EAAA54D,EAAAr1I,OAEAx3B,EAAA,EAAAA,GAAAD,IAAAC,EAAA,CACA,KAAAA,EAAAD,GAAA2lO,EAAA7/N,EAAA0K,EAAAvQ,GAAAA,EAAAuQ,MAAAi1N,EACA,GAAAA,GAAAA,EACAnkO,EAAArB,EACAupC,EAAAy8L,YACAz8L,EAAAwuD,gBACA,CAGA,IAFAxuD,EAAA0uD,UACA1uD,EAAAwuD,YACA9jF,EAAAjU,EAAA,EAAAiU,GAAA5S,IAAA4S,EACAs1B,EAAA2tG,MAAA4uF,EAAA7xN,GAAA8xN,EAAA9xN,GAEAs1B,GAAA0uD,UACA1uD,EAAA08L,UAGAT,IACAM,EAAA9lO,IAAA85K,EAAAj0K,EAAA7F,EAAAuQ,GAAAw1N,EAAA/lO,IAAA6mM,EAAAhhM,EAAA7F,EAAAuQ,GACAg5B,EAAA2tG,MAAA8qB,GAAAA,EAAAn8J,EAAA7F,EAAAuQ,GAAAu1N,EAAA9lO,GAAAiiK,GAAAA,EAAAp8J,EAAA7F,EAAAuQ,GAAAw1N,EAAA/lO,KAIA,GAAA6sK,EAAA,MAAAtjI,GAAA,KAAAsjI,EAAA,IAAA,KAGA,QAAAq5D,KACA,MAAAzvK,MAAAivK,QAAAA,GAAAD,MAAAA,GAAA14M,QAAAA,GAhDA,GAAA+sJ,GAAAwrD,GACAtjE,EAAA,KACA6kC,EAAAo7B,GAAA,GACAhgE,EAAAsjE,GACAG,EAAAzD,IAAA,GACAl1M,EAAA,KACA04M,EAAAJ,GACA97L,EAAA,IA6FA,OAjDAhJ,GAAA7/B,EAAA,SAAA+B,GACA,MAAA4E,WAAAtG,QAAA+4K,EAAA,kBAAAr3K,GAAAA,EAAAw/N,IAAAx/N,GAAAu/J,EAAA,KAAAzhI,GAAAu5I,GAGAv5I,EAAAu5I,GAAA,SAAAr3K,GACA,MAAA4E,WAAAtG,QAAA+4K,EAAA,kBAAAr3K,GAAAA,EAAAw/N,IAAAx/N,GAAA89B,GAAAu5I,GAGAv5I,EAAAyhI,GAAA,SAAAv/J,GACA,MAAA4E,WAAAtG,QAAAihK,EAAA,MAAAv/J,EAAA,KAAA,kBAAAA,GAAAA,EAAAw/N,IAAAx/N,GAAA89B,GAAAyhI,GAGAzhI,EAAAt/B,EAAA,SAAAwB,GACA,MAAA4E,WAAAtG,QAAA8lM,EAAA,kBAAApkM,GAAAA,EAAAw/N,IAAAx/N,GAAAw/J,EAAA,KAAA1hI,GAAAsmK,GAGAtmK,EAAAsmK,GAAA,SAAApkM,GACA,MAAA4E,WAAAtG,QAAA8lM,EAAA,kBAAApkM,GAAAA,EAAAw/N,IAAAx/N,GAAA89B,GAAAsmK,GAGAtmK,EAAA0hI,GAAA,SAAAx/J,GACA,MAAA4E,WAAAtG,QAAAkhK,EAAA,MAAAx/J,EAAA,KAAA,kBAAAA,GAAAA,EAAAw/N,IAAAx/N,GAAA89B,GAAA0hI,GAGA1hI,EAAA4lM,OACA5lM,EAAA6lM,OAAA,WACA,MAAAF,KAAAxlO,EAAAo5K,GAAA74K,EAAA4lM,IAGAtmK,EAAA8lM,OAAA,WACA,MAAAH,KAAAxlO,EAAAo5K,GAAA74K,EAAAghK,IAGA1hI,EAAA+lM,OAAA,WACA,MAAAJ,KAAAxlO,EAAAshK,GAAA/gK,EAAA4lM,IAGAtmK,EAAAmlM,QAAA,SAAAjjO,GACA,MAAA4E,WAAAtG,QAAA2kO,EAAA,kBAAAjjO,GAAAA,EAAAw/N,KAAAx/N,GAAA89B,GAAAmlM,GAGAnlM,EAAAklM,MAAA,SAAAhjO,GACA,MAAA4E,WAAAtG,QAAA0kO,EAAAhjO,EAAA,MAAAsqB,IAAAwc,EAAAk8L,EAAA14M,IAAAwT,GAAAklM,GAGAllM,EAAAxT,QAAA,SAAAtqB,GACA,MAAA4E,WAAAtG,QAAA,MAAA0B,EAAAsqB,EAAAwc,EAAA,KAAAA,EAAAk8L,EAAA14M,EAAAtqB,GAAA89B,GAAAxT,GAGAwT,EAGA,QAAAgmM,IAAAviO,EAAA2O,GACA,MAAAA,GAAA3O,GAAA,EAAA2O,EAAA3O,EAAA,EAAA2O,GAAA3O,EAAA,EAAA8qF,IAGA,QAAA03I,IAAA3gO,GACA,MAAAA,GAGA,QAAAqoJ,MAQA,QAAAA,GAAA39I,GACA,GAAAvQ,GAEAqB,EACA4S,EAMA20D,EAGAvoE,EAXAN,EAAAwQ,EAAAxP,OAGAi0H,EAAA,EACAz6G,EAAA,GAAAvN,OAAAjN,GACA0mO,EAAA,GAAAz5N,OAAAjN,GACAy6C,GAAA6nH,EAAA9/J,MAAA1C,KAAAwH,WACA48N,EAAA75N,KAAAyuD,IAAAsrK,GAAA/5N,KAAAC,KAAA85N,GAAA7hE,EAAA//J,MAAA1C,KAAAwH,WAAAmzC,IAEA50C,EAAAwE,KAAAyuD,IAAAzuD,KAAA+1B,IAAA8jM,GAAAlkO,EAAA89L,EAAAt7L,MAAA1C,KAAAwH,YACAqxM,EAAA9yM,GAAAq+N,EAAA,GAAA,EAAA,EAGA,KAAAjkO,EAAA,EAAAA,EAAAD,IAAAC,GACAK,EAAAomO,EAAAlsN,EAAAva,GAAAA,IAAAoT,EAAA7C,EAAAvQ,GAAAA,EAAAuQ,IAAA,IACAykH,GAAA30H,EASA,KAJA,MAAAu/L,EAAArlL,EAAAhJ,KAAA,SAAAvR,EAAAqB,GAAA,MAAAu+L,GAAA6mC,EAAAzmO,GAAAymO,EAAAplO,MACA,MAAAkQ,GAAAgJ,EAAAhJ,KAAA,SAAAvR,EAAAqB,GAAA,MAAAkQ,GAAAhB,EAAAvQ,GAAAuQ,EAAAlP,MAGArB,EAAA,EAAAiU,EAAA+gH,GAAAivG,EAAAlkO,EAAA24M,GAAA1jF,EAAA,EAAAh1H,EAAAD,IAAAC,EAAAw6C,EAAAouB,EACAvnE,EAAAkZ,EAAAva,GAAAK,EAAAomO,EAAAplO,GAAAunE,EAAApuB,GAAAn6C,EAAA,EAAAA,EAAA4T,EAAA,GAAAykM,EAAA+tB,EAAAplO,IACAkP,KAAAA,EAAAlP,GACAkZ,MAAAva,EACAoT,MAAA/S,EACAgiK,WAAA7nH,EACA8nH,SAAA15F,EACAi1H,SAAAj4L,EAIA,OAAA6gO,GA5CA,GAAArzN,GAAAozN,GACA5mC,EAAA2mC,GACAh1N,EAAA,KACA8wJ,EAAA4/D,GAAA,GACA3/D,EAAA2/D,GAAAkC,IACAtmC,EAAAokC,GAAA,EAkEA,OAxBA/zE,GAAA96I,MAAA,SAAA3Q,GACA,MAAA4E,WAAAtG,QAAAqS,EAAA,kBAAA3Q,GAAAA,EAAAw/N,IAAAx/N,GAAAyrJ,GAAA96I,GAGA86I,EAAA0xC,WAAA,SAAAn9L,GACA,MAAA4E,WAAAtG,QAAA6+L,EAAAn9L,EAAA8O,EAAA,KAAA28I,GAAA0xC,GAGA1xC,EAAA38I,KAAA,SAAA9O,GACA,MAAA4E,WAAAtG,QAAAwQ,EAAA9O,EAAAm9L,EAAA,KAAA1xC,GAAA38I,GAGA28I,EAAAmU,WAAA,SAAA5/J,GACA,MAAA4E,WAAAtG,QAAAshK,EAAA,kBAAA5/J,GAAAA,EAAAw/N,IAAAx/N,GAAAyrJ,GAAAmU,GAGAnU,EAAAoU,SAAA,SAAA7/J,GACA,MAAA4E,WAAAtG,QAAAuhK,EAAA,kBAAA7/J,GAAAA,EAAAw/N,IAAAx/N,GAAAyrJ,GAAAoU,GAGApU,EAAA2vC,SAAA,SAAAp7L,GACA,MAAA4E,WAAAtG,QAAA88L,EAAA,kBAAAp7L,GAAAA,EAAAw/N,IAAAx/N,GAAAyrJ,GAAA2vC,GAGA3vC,EAKA,QAAAw4E,IAAAjB,GACA5lO,KAAA8mO,OAAAlB,EAqBA,QAAAmB,IAAAnB,GAEA,QAAAx6B,GAAAl+K,GACA,MAAA,IAAA25M,IAAAjB,EAAA14M,IAKA,MAFAk+K,GAAA07B,OAAAlB,EAEAx6B,EAGA,QAAA47B,IAAAlmO,GACA,GAAAC,GAAAD,EAAA8kO,KASA,OAPA9kO,GAAA2pM,MAAA3pM,EAAAD,QAAAC,GAAAD,EACAC,EAAAkgK,OAAAlgK,EAAAM,QAAAN,GAAAM,EAEAN,EAAA8kO,MAAA,SAAAhjO,GACA,MAAA4E,WAAAtG,OAAAH,EAAAgmO,GAAAnkO,IAAA7B,IAAA+lO,QAGAhmO,EAGA,QAAAmmO,MACA,MAAAD,IAAApwK,KAAAgvK,MAAAsB,KAGA,QAAAC,MACA,GAAAhjO,GAAA6hO,KAAAJ,MAAAsB,IACAnmO,EAAAoD,EAAAyhO,MACA3rD,EAAA91K,EAAAmiO,OACAnkE,EAAAh+J,EAAAsiO,OACAz/B,EAAA7iM,EAAAoiO,OACAnkE,EAAAj+J,EAAAqiO,MAiBA,OAfAriO,GAAAsmM,MAAAtmM,EAAAtD,QAAAsD,GAAAtD,EACAsD,EAAAq+J,WAAAr+J,EAAA81K,SAAA91K,GAAA81K,GACA91K,EAAAs+J,SAAAt+J,EAAAg+J,SAAAh+J,GAAAg+J,GACAh+J,EAAA68J,OAAA78J,EAAA/C,QAAA+C,GAAA/C,EACA+C,EAAAu+N,YAAAv+N,EAAA6iM,SAAA7iM,GAAA6iM,GACA7iM,EAAAy+N,YAAAz+N,EAAAi+J,SAAAj+J,GAAAi+J,GACAj+J,EAAAijO,eAAA,WAAA,MAAAJ,IAAA/sD,YAAA91K,GAAAmiO,OACAniO,EAAAkjO,aAAA,WAAA,MAAAL,IAAA7kE,YAAAh+J,GAAAsiO,OACAtiO,EAAAmjO,gBAAA,WAAA,MAAAN,IAAAhgC,YAAA7iM,GAAAoiO,OACApiO,EAAAojO,gBAAA,WAAA,MAAAP,IAAA5kE,YAAAj+J,GAAAqiO,OAEAriO,EAAAyhO,MAAA,SAAAhjO,GACA,MAAA4E,WAAAtG,OAAAH,EAAAgmO,GAAAnkO,IAAA7B,IAAA+lO,QAGA3iO,EAGA,QAAAqjO,IAAA3mO,EAAAO,GACA,QAAAA,GAAAA,GAAAmJ,KAAAid,IAAA3mB,GAAA0J,KAAAkd,GAAA,GAAArmB,EAAAmJ,KAAAq6J,IAAA/jK,IAKA,QAAA4mO,IAAAzhO,GACA,MAAAA,GAAA0X,OAGA,QAAAgqN,IAAA1hO,GACA,MAAAA,GAAAmS,OAGA,QAAAwvN,IAAA/B,GAOA,QAAAl2L,KACA,GAAAs9H,GAAAiyB,EAAA2oC,GAAA5mO,KAAAwG,WAAApD,EAAAsZ,EAAAhb,MAAA1C,KAAAi/L,GAAAv/L,EAAAyY,EAAAzV,MAAA1C,KAAAi/L,EAGA,IAFA/xK,IAAAA,EAAA8/I,EAAAr1I,MACAiuM,EAAA14M,GAAA44M,EAAApjO,MAAA1C,MAAAi/L,EAAA,GAAA76L,EAAA66L,KAAA8mC,EAAArjO,MAAA1C,KAAAi/L,IAAA6mC,EAAApjO,MAAA1C,MAAAi/L,EAAA,GAAAv/L,EAAAu/L,KAAA8mC,EAAArjO,MAAA1C,KAAAi/L,IACAjyB,EAAA,MAAA9/I,GAAA,KAAA8/I,EAAA,IAAA,KAVA,GAAAtvJ,GAAA+pN,GACAtvN,EAAAuvN,GACA5B,EAAAL,GACAM,EAAAL,GACAx4M,EAAA,IA6BA,OApBAwiB,GAAAhyB,OAAA,SAAA9a,GACA,MAAA4E,WAAAtG,QAAAwc,EAAA9a,EAAA8sC,GAAAhyB,GAGAgyB,EAAAv3B,OAAA,SAAAvV,GACA,MAAA4E,WAAAtG,QAAAiX,EAAAvV,EAAA8sC,GAAAv3B,GAGAu3B,EAAA7uC,EAAA,SAAA+B,GACA,MAAA4E,WAAAtG,QAAA4kO,EAAA,kBAAAljO,GAAAA,EAAAw/N,IAAAx/N,GAAA8sC,GAAAo2L,GAGAp2L,EAAAtuC,EAAA,SAAAwB,GACA,MAAA4E,WAAAtG,QAAA6kO,EAAA,kBAAAnjO,GAAAA,EAAAw/N,IAAAx/N,GAAA8sC,GAAAq2L,GAGAr2L,EAAAxiB,QAAA,SAAAtqB,GACA,MAAA4E,WAAAtG,QAAAgsB,EAAA,MAAAtqB,EAAA,KAAAA,EAAA8sC,GAAAxiB,GAGAwiB,EAGA,QAAAm4L,IAAA36M,EAAA+sJ,EAAA+sB,EAAA7kC,EAAAC,GACAl1I,EAAAq2I,OAAA0W,EAAA+sB,GACA95K,EAAA46M,cAAA7tD,GAAAA,EAAA9X,GAAA,EAAA6kC,EAAA/sB,EAAA7X,EAAAD,EAAAC,GAGA,QAAA2lE,IAAA76M,EAAA+sJ,EAAA+sB,EAAA7kC,EAAAC,GACAl1I,EAAAq2I,OAAA0W,EAAA+sB,GACA95K,EAAA46M,cAAA7tD,EAAA+sB,GAAAA,EAAA5kC,GAAA,EAAAD,EAAA6kC,EAAA7kC,EAAAC,GAGA,QAAA4lE,IAAA96M,EAAA+sJ,EAAA+sB,EAAA7kC,EAAAC,GACA,GAAAwmB,GAAA4+C,GAAAvtD,EAAA+sB,GACAh6E,EAAAw6G,GAAAvtD,EAAA+sB,GAAAA,EAAA5kC,GAAA,GACAn1C,EAAAu6G,GAAArlE,EAAA6kC,GACAihC,EAAAT,GAAArlE,EAAAC,EACAl1I,GAAAq2I,OAAAqlB,EAAA,GAAAA,EAAA,IACA17J,EAAA46M,cAAA96G,EAAA,GAAAA,EAAA,GAAAC,EAAA,GAAAA,EAAA,GAAAg7G,EAAA,GAAAA,EAAA,IAGA,QAAAC,MACA,MAAAP,IAAAE,IAGA,QAAAM,MACA,MAAAR,IAAAI,IAGA,QAAAK,MACA,GAAAtnO,GAAA6mO,GAAAK,GAGA,OAFAlnO,GAAA2pM,MAAA3pM,EAAAD,QAAAC,GAAAD,EACAC,EAAAkgK,OAAAlgK,EAAAM,QAAAN,GAAAM,EACAN,EA6HA,QAAA4tH,MAKA,QAAAA,KACA,GAAAs+C,EAGA,IAFA9/I,IAAAA,EAAA8/I,EAAAr1I,MACA1wB,EAAAvE,MAAA1C,KAAAwH,WAAA6gO,KAAAn7M,GAAAswB,EAAA96C,MAAA1C,KAAAwH,YACAwlK,EAAA,MAAA9/I,GAAA,KAAA8/I,EAAA,IAAA,KARA,GAAA/lK,GAAAm7N,GAAAkG,IACA9qL,EAAA4kL,GAAA,IACAl1M,EAAA,IAqBA,OAZAwhG,GAAAznH,KAAA,SAAArE,GACA,MAAA4E,WAAAtG,QAAA+F,EAAA,kBAAArE,GAAAA,EAAAw/N,GAAAx/N,GAAA8rH,GAAAznH,GAGAynH,EAAAlxE,KAAA,SAAA56C,GACA,MAAA4E,WAAAtG,QAAAs8C,EAAA,kBAAA56C,GAAAA,EAAAw/N,IAAAx/N,GAAA8rH,GAAAlxE,GAGAkxE,EAAAxhG,QAAA,SAAAtqB,GACA,MAAA4E,WAAAtG,QAAAgsB,EAAA,MAAAtqB,EAAA,KAAAA,EAAA8rH,GAAAxhG,GAGAwhG,EAGA,QAAA65G,OAEA,QAAAC,IAAAltM,EAAAz6B,EAAAO,GACAk6B,EAAAukL,SAAAioB,eACA,EAAAxsM,EAAAijK,IAAAjjK,EAAAmjK,KAAA,GACA,EAAAnjK,EAAAkjK,IAAAljK,EAAAojK,KAAA,GACApjK,EAAAijK,IAAA,EAAAjjK,EAAAmjK,KAAA,GACAnjK,EAAAkjK,IAAA,EAAAljK,EAAAojK,KAAA,GACApjK,EAAAijK,IAAA,EAAAjjK,EAAAmjK,IAAA59L,GAAA,GACAy6B,EAAAkjK,IAAA,EAAAljK,EAAAojK,IAAAt9L,GAAA,GAIA,QAAAqnO,IAAAv7M,GACAltB,KAAA6/M,SAAA3yL,EAoCA,QAAAw7M,IAAAx7M,GACA,MAAA,IAAAu7M,IAAAv7M,GAGA,QAAAy7M,IAAAz7M,GACAltB,KAAA6/M,SAAA3yL,EA6CA,QAAA07M,IAAA17M,GACA,MAAA,IAAAy7M,IAAAz7M,GAGA,QAAA27M,IAAA37M,GACAltB,KAAA6/M,SAAA3yL,EAiCA,QAAA47M,IAAA57M,GACA,MAAA,IAAA27M,IAAA37M,GAGA,QAAA67M,IAAA77M,EAAA2hM,GACA7uN,KAAAgpO,OAAA,GAAAP,IAAAv7M,GACAltB,KAAAipO,MAAApa,EAqDA,QAAAqa,IAAA5tM,EAAAz6B,EAAAO,GACAk6B,EAAAukL,SAAAioB,cACAxsM,EAAAmjK,IAAAnjK,EAAA6tM,IAAA7tM,EAAA8tM,IAAA9tM,EAAAijK,KACAjjK,EAAAojK,IAAApjK,EAAA6tM,IAAA7tM,EAAA+tM,IAAA/tM,EAAAkjK,KACAljK,EAAA8tM,IAAA9tM,EAAA6tM,IAAA7tM,EAAAmjK,IAAA59L,GACAy6B,EAAA+tM,IAAA/tM,EAAA6tM,IAAA7tM,EAAAojK,IAAAt9L,GACAk6B,EAAA8tM,IACA9tM,EAAA+tM,KAIA,QAAAC,IAAAp8M,EAAAq8M,GACAvpO,KAAA6/M,SAAA3yL,EACAltB,KAAAmpO,IAAA,EAAAI,GAAA,EAiDA,QAAAC,IAAAt8M,EAAAq8M,GACAvpO,KAAA6/M,SAAA3yL,EACAltB,KAAAmpO,IAAA,EAAAI,GAAA,EAyDA,QAAAE,IAAAv8M,EAAAq8M,GACAvpO,KAAA6/M,SAAA3yL,EACAltB,KAAAmpO,IAAA,EAAAI,GAAA,EA8CA,QAAAG,IAAApuM,EAAAz6B,EAAAO,GACA,GAAA+gK,GAAA7mI,EAAAmjK,IACAr8B,EAAA9mI,EAAAojK,IACAr8B,EAAA/mI,EAAA8tM,IACA9mE,EAAAhnI,EAAA+tM,GAEA,IAAA/tM,EAAAquM,OAAAvG,GAAA,CACA,GAAAj/N,GAAA,EAAAm3B,EAAAsuM,QAAA,EAAAtuM,EAAAquM,OAAAruM,EAAAuuM,OAAAvuM,EAAAwuM,QACA5pO,EAAA,EAAAo7B,EAAAquM,QAAAruM,EAAAquM,OAAAruM,EAAAuuM,OACA1nE,IAAAA,EAAAh+J,EAAAm3B,EAAAijK,IAAAjjK,EAAAwuM,QAAAxuM,EAAA8tM,IAAA9tM,EAAAsuM,SAAA1pO,EACAkiK,GAAAA,EAAAj+J,EAAAm3B,EAAAkjK,IAAAljK,EAAAwuM,QAAAxuM,EAAA+tM,IAAA/tM,EAAAsuM,SAAA1pO,EAGA,GAAAo7B,EAAAyuM,OAAA3G,GAAA,CACA,GAAAtwN,GAAA,EAAAwoB,EAAA0uM,QAAA,EAAA1uM,EAAAyuM,OAAAzuM,EAAAuuM,OAAAvuM,EAAAwuM,QACA7pO,EAAA,EAAAq7B,EAAAyuM,QAAAzuM,EAAAyuM,OAAAzuM,EAAAuuM,OACAxnE,IAAAA,EAAAvvJ,EAAAwoB,EAAAmjK,IAAAnjK,EAAA0uM,QAAAnpO,EAAAy6B,EAAAwuM,SAAA7pO,EACAqiK,GAAAA,EAAAxvJ,EAAAwoB,EAAAojK,IAAApjK,EAAA0uM,QAAA5oO,EAAAk6B,EAAAwuM,SAAA7pO,EAGAq7B,EAAAukL,SAAAioB,cAAA3lE,EAAAC,EAAAC,EAAAC,EAAAhnI,EAAA8tM,IAAA9tM,EAAA+tM,KAGA,QAAAY,IAAA/8M,EAAAs8K,GACAxpM,KAAA6/M,SAAA3yL,EACAltB,KAAAkqO,OAAA1gC,EA6DA,QAAA2gC,IAAAj9M,EAAAs8K,GACAxpM,KAAA6/M,SAAA3yL,EACAltB,KAAAkqO,OAAA1gC,EAqEA,QAAA4gC,IAAAl9M,EAAAs8K,GACAxpM,KAAA6/M,SAAA3yL,EACAltB,KAAAkqO,OAAA1gC,EA0DA,QAAA6gC,IAAAn9M,GACAltB,KAAA6/M,SAAA3yL,EAmBA,QAAAo9M,IAAAp9M,GACA,MAAA,IAAAm9M,IAAAn9M,GAGA,QAAAq9M,IAAA1pO,GACA,MAAAA,GAAA,GAAA,EAAA,EAOA,QAAA2pO,IAAAlvM,EAAA+mI,EAAAC,GACA,GAAA6I,GAAA7vI,EAAAmjK,IAAAnjK,EAAAijK,IACAx9J,EAAAshI,EAAA/mI,EAAAmjK,IACAlC,GAAAjhK,EAAAojK,IAAApjK,EAAAkjK,MAAArzB,GAAApqI,EAAA,IAAA,GACAy7J,GAAAl6B,EAAAhnI,EAAAojK,MAAA39J,GAAAoqI,EAAA,IAAA,GACAplK,GAAAw2L,EAAAx7J,EAAAy7J,EAAArxB,IAAAA,EAAApqI,EACA,QAAAwpM,GAAAhuC,GAAAguC,GAAA/tC,IAAAjyL,KAAAyuD,IAAAzuD,KAAA+1B,IAAAi8J,GAAAhyL,KAAA+1B,IAAAk8J,GAAA,GAAAjyL,KAAA+1B,IAAAv6B,KAAA,EAIA,QAAA0kO,IAAAnvM,EAAA57B,GACA,GAAAuG,GAAAq1B,EAAAmjK,IAAAnjK,EAAAijK,GACA,OAAAt4L,IAAA,GAAAq1B,EAAAojK,IAAApjK,EAAAkjK,KAAAv4L,EAAAvG,GAAA,EAAAA,EAMA,QAAAgrO,IAAApvM,EAAAylI,EAAAzxC,GACA,GAAA2qD,GAAA3+I,EAAAijK,IACAyI,EAAA1rK,EAAAkjK,IACAr8B,EAAA7mI,EAAAmjK,IACAr8B,EAAA9mI,EAAAojK,IACA92G,GAAAu6E,EAAA8X,GAAA,CACA3+I,GAAAukL,SAAAioB,cAAA7tD,EAAAryF,EAAAo/G,EAAAp/G,EAAAm5E,EAAAoB,EAAAv6E,EAAAw6E,EAAAx6E,EAAA0nC,EAAA6yC,EAAAC,GAGA,QAAAuoE,IAAAz9M,GACAltB,KAAA6/M,SAAA3yL,EA0CA,QAAA09M,IAAA19M,GACAltB,KAAA6/M,SAAA,GAAAgrB,IAAA39M,GAOA,QAAA29M,IAAA39M,GACAltB,KAAA6/M,SAAA3yL,EAUA,QAAA49M,IAAA59M,GACA,MAAA,IAAAy9M,IAAAz9M,GAGA,QAAA69M,IAAA79M,GACA,MAAA,IAAA09M,IAAA19M,GAGA,QAAA89M,IAAA99M,GACAltB,KAAA6/M,SAAA3yL,EA2CA,QAAA+9M,IAAApqO,GACA,GAAAV,GAEAF,EADAC,EAAAW,EAAAK,OAAA,EAEAiD,EAAA,GAAAgJ,OAAAjN,GACA4S,EAAA,GAAA3F,OAAAjN,GACAG,EAAA,GAAA8M,OAAAjN,EAEA,KADAiE,EAAA,GAAA,EAAA2O,EAAA,GAAA,EAAAzS,EAAA,GAAAQ,EAAA,GAAA,EAAAA,EAAA,GACAV,EAAA,EAAAA,EAAAD,EAAA,IAAAC,EAAAgE,EAAAhE,GAAA,EAAA2S,EAAA3S,GAAA,EAAAE,EAAAF,GAAA,EAAAU,EAAAV,GAAA,EAAAU,EAAAV,EAAA,EAEA,KADAgE,EAAAjE,EAAA,GAAA,EAAA4S,EAAA5S,EAAA,GAAA,EAAAG,EAAAH,EAAA,GAAA,EAAAW,EAAAX,EAAA,GAAAW,EAAAX,GACAC,EAAA,EAAAA,EAAAD,IAAAC,EAAAF,EAAAkE,EAAAhE,GAAA2S,EAAA3S,EAAA,GAAA2S,EAAA3S,IAAAF,EAAAI,EAAAF,IAAAF,EAAAI,EAAAF,EAAA,EAEA,KADAgE,EAAAjE,EAAA,GAAAG,EAAAH,EAAA,GAAA4S,EAAA5S,EAAA,GACAC,EAAAD,EAAA,EAAAC,GAAA,IAAAA,EAAAgE,EAAAhE,IAAAE,EAAAF,GAAAgE,EAAAhE,EAAA,IAAA2S,EAAA3S,EAEA,KADA2S,EAAA5S,EAAA,IAAAW,EAAAX,GAAAiE,EAAAjE,EAAA,IAAA,EACAC,EAAA,EAAAA,EAAAD,EAAA,IAAAC,EAAA2S,EAAA3S,GAAA,EAAAU,EAAAV,EAAA,GAAAgE,EAAAhE,EAAA,EACA,QAAAgE,EAAA2O,GAGA,QAAAo4N,IAAAh+M,GACA,MAAA,IAAA89M,IAAA99M,GAGA,QAAAi+M,IAAAj+M,EAAAxtB,GACAM,KAAA6/M,SAAA3yL,EACAltB,KAAAuP,GAAA7P,EAwCA,QAAAynB,IAAA+F,GACA,MAAA,IAAAi+M,IAAAj+M,EAAA,IAGA,QAAAk+M,IAAAl+M,GACA,MAAA,IAAAi+M,IAAAj+M,EAAA,GAGA,QAAAm+M,IAAAn+M,GACA,MAAA,IAAAi+M,IAAAj+M,EAAA,GAGA,QAAAo+M,IAAAC,EAAArlN,GACA,IAAAhmB,EAAAqrO,EAAArqO,QAAA,EACA,IAAA,GAAAM,GAAA+6L,EAAAr8L,EAAAC,EAAA,EAAAq8L,EAAA+uC,EAAArlN,EAAA,IAAAjmB,EAAAu8L,EAAAt7L,OAAAf,EAAAD,IAAAC,EAEA,IADAo8L,EAAAC,EAAAA,EAAA+uC,EAAArlN,EAAA/lB,IACAqB,EAAA,EAAAA,EAAAvB,IAAAuB,EACAg7L,EAAAh7L,GAAA,IAAAg7L,EAAAh7L,GAAA,GAAA8wB,MAAAiqK,EAAA/6L,GAAA,IAAA+6L,EAAA/6L,GAAA,GAAA+6L,EAAA/6L,GAAA,GAKA,QAAAgqO,IAAAD,GAEA,IADA,GAAArrO,GAAAqrO,EAAArqO,OAAAd,EAAA,GAAA+M,OAAAjN,KACAA,GAAA,GAAAE,EAAAF,GAAAA,CACA,OAAAE,GAGA,QAAAqrO,IAAAzlO,EAAAqc,GACA,MAAArc,GAAAqc,GAGA,QAAAxF,MAMA,QAAAA,GAAAnM,GACA,GACAvQ,GAIAurO,EALAC,EAAA5uL,EAAAr6C,MAAA1C,KAAAwH,WAEAvH,EAAAyQ,EAAAxP,OACAhB,EAAAyrO,EAAAzqO,OACA48D,EAAA,GAAA3wD,OAAAjN,EAGA,KAAAC,EAAA,EAAAA,EAAAD,IAAAC,EAAA,CACA,IAAA,GAAAyrO,GAAAC,EAAAF,EAAAxrO,GAAA2rO,EAAAhuK,EAAA39D,GAAA,GAAAgN,OAAAlN,GAAAuB,EAAA,EAAAA,EAAAvB,IAAAuB,EACAsqO,EAAAtqO,GAAAoqO,GAAA,GAAAr4N,EAAA7C,EAAAlP,GAAAqqO,EAAArqO,EAAAkP,IACAk7N,EAAAl7N,KAAAA,EAAAlP,EAEAsqO,GAAAzpN,IAAAwpN,EAGA,IAAA1rO,EAAA,EAAAurO,EAAAxlN,EAAA43C,GAAA39D,EAAAD,IAAAC,EACA29D,EAAA4tK,EAAAvrO,IAAAua,MAAAva,CAIA,OADA8wB,GAAA6sC,EAAA4tK,GACA5tK,EA1BA,GAAA/gB,GAAAqlL,OACAl8M,EAAAslN,GACAv6M,EAAAq6M,GACA/3N,EAAAk4N,EA0CA,OAhBA5uN,GAAAkgC,KAAA,SAAAn6C,GACA,MAAA4E,WAAAtG,QAAA67C,EAAA,kBAAAn6C,GAAAA,EAAAw/N,GAAAwF,GAAA5mO,KAAA4B,IAAAia,GAAAkgC,GAGAlgC,EAAAtJ,MAAA,SAAA3Q,GACA,MAAA4E,WAAAtG,QAAAqS,EAAA,kBAAA3Q,GAAAA,EAAAw/N,IAAAx/N,GAAAia,GAAAtJ,GAGAsJ,EAAAqJ,MAAA,SAAAtjB,GACA,MAAA4E,WAAAtG,QAAAglB,EAAA,MAAAtjB,EAAA4oO,GAAA,kBAAA5oO,GAAAA,EAAAw/N,GAAAwF,GAAA5mO,KAAA4B,IAAAia,GAAAqJ,GAGArJ,EAAAoU,OAAA,SAAAruB,GACA,MAAA4E,WAAAtG,QAAA+vB,EAAA,MAAAruB,EAAA0oO,GAAA1oO,EAAAia,GAAAoU,GAGApU,EAGA,QAAAvP,IAAAi+N,EAAArlN,GACA,IAAAhmB,EAAAqrO,EAAArqO,QAAA,EAAA,CACA,IAAA,GAAAf,GAAAD,EAAAkB,EAAAI,EAAA,EAAAvB,EAAAsrO,EAAA,GAAArqO,OAAAM,EAAAvB,IAAAuB,EAAA,CACA,IAAAJ,EAAAjB,EAAA,EAAAA,EAAAD,IAAAC,EAAAiB,GAAAmqO,EAAAprO,GAAAqB,GAAA,IAAA,CACA,IAAAJ,EAAA,IAAAjB,EAAA,EAAAA,EAAAD,IAAAC,EAAAorO,EAAAprO,GAAAqB,GAAA,IAAAJ,EAEAkqO,GAAAC,EAAArlN,IAGA,QAAA6lN,IAAAR,EAAArlN,GACA,IAAAhmB,EAAAqrO,EAAArqO,QAAA,EACA,IAAA,GAAAf,GAAA6F,EAAA8hF,EAAAg/G,EAAAklC,EAAA9rO,EAAAsB,EAAA,EAAAvB,EAAAsrO,EAAArlN,EAAA,IAAAhlB,OAAAM,EAAAvB,IAAAuB,EACA,IAAAslM,EAAAklC,EAAA,EAAA7rO,EAAA,EAAAA,EAAAD,IAAAC,GACA2nF,GAAA9hF,EAAAulO,EAAArlN,EAAA/lB,IAAAqB,IAAA,GAAAwE,EAAA,KAAA,GACAA,EAAA,GAAA8gM,EAAA9gM,EAAA,GAAA8gM,GAAAh/G,GACAA,EAAA,GACA9hF,EAAA,GAAAgmO,EAAAhmO,EAAA,GAAAgmO,GAAAlkJ,GAEA9hF,EAAA,GAAA8gM,EAMA,QAAAmlC,IAAAV,EAAArlN,GACA,IAAAhmB,EAAAqrO,EAAArqO,QAAA,EAAA,CACA,IAAA,GAAAhB,GAAAsB,EAAA,EAAA+6L,EAAAgvC,EAAArlN,EAAA,IAAAjmB,EAAAs8L,EAAAr7L,OAAAM,EAAAvB,IAAAuB,EAAA,CACA,IAAA,GAAArB,GAAA,EAAAiB,EAAA,EAAAjB,EAAAD,IAAAC,EAAAiB,GAAAmqO,EAAAprO,GAAAqB,GAAA,IAAA,CACA+6L,GAAA/6L,GAAA,IAAA+6L,EAAA/6L,GAAA,IAAAJ,EAAA,EAEAkqO,GAAAC,EAAArlN,IAGA,QAAAgmN,IAAAX,EAAArlN,GACA,IAAAhmB,EAAAqrO,EAAArqO,QAAA,IAAAjB,GAAAs8L,EAAAgvC,EAAArlN,EAAA,KAAAhlB,QAAA,EAAA,CACA,IAAA,GAAAq7L,GAAAt8L,EAAAC,EAAAkB,EAAA,EAAAI,EAAA,EAAAA,EAAAvB,IAAAuB,EAAA,CACA,IAAA,GAAArB,GAAA,EAAAq8L,EAAA,EAAA2vC,EAAA,EAAAhsO,EAAAD,IAAAC,EAAA,CAKA,IAAA,GAJA2rO,GAAAP,EAAArlN,EAAA/lB,IACAisO,EAAAN,EAAAtqO,GAAA,IAAA,EACA6qO,EAAAP,EAAAtqO,EAAA,GAAA,IAAA,EACA8qO,GAAAF,EAAAC,GAAA,EACAj4N,EAAA,EAAAA,EAAAjU,IAAAiU,EAAA,CACA,GAAAq3M,GAAA8f,EAAArlN,EAAA9R,GAGAk4N,KAFA7gB,EAAAjqN,GAAA,IAAA,IACAiqN,EAAAjqN,EAAA,GAAA,IAAA,GAGAg7L,GAAA4vC,EAAAD,GAAAG,EAAAF,EAEA7vC,EAAA/6L,EAAA,GAAA,IAAA+6L,EAAA/6L,EAAA,GAAA,GAAAJ,EACAo7L,IAAAp7L,GAAA+qO,EAAA3vC,GAEAD,EAAA/6L,EAAA,GAAA,IAAA+6L,EAAA/6L,EAAA,GAAA,GAAAJ,EACAkqO,GAAAC,EAAArlN,IAGA,QAAAqmN,IAAAhB,GACA,GAAAiB,GAAAjB,EAAAviO,IAAAyjO,GACA,OAAAjB,IAAAD,GAAA75N,KAAA,SAAAvN,EAAA2O,GAAA,MAAA05N,GAAAroO,GAAAqoO,EAAA15N,KAGA,QAAA25N,IAAAlB,GAEA,IADA,GAAAmB,GAAAvsO,GAAA,EAAAqB,EAAA,EAAAtB,EAAAqrO,EAAArqO,OAAAyrO,GAAA/gM,EAAAA,IACAzrC,EAAAD,IAAAwsO,GAAAnB,EAAAprO,GAAA,IAAAwsO,IAAAA,EAAAD,EAAAlrO,EAAArB,EACA,OAAAqB,GAGA,QAAAorO,IAAArB,GACA,GAAAjc,GAAAic,EAAAviO,IAAA6jO,GACA,OAAArB,IAAAD,GAAA75N,KAAA,SAAAvN,EAAA2O,GAAA,MAAAw8M,GAAAnrN,GAAAmrN,EAAAx8M,KAGA,QAAA+5N,IAAAtB,GAEA,IADA,GAAA/qO,GAAA4D,EAAA,EAAAjE,GAAA,EAAAD,EAAAqrO,EAAArqO,SACAf,EAAAD,IAAAM,GAAA+qO,EAAAprO,GAAA,MAAAiE,GAAA5D,EACA,OAAA4D,GAGA,QAAA0oO,IAAAvB,GACA,MAAAqB,IAAArB,GAAAlwN,UAGA,QAAA0xN,IAAAxB,GACA,GACAprO,GACAqB,EAFAtB,EAAAqrO,EAAArqO,OAGAouN,EAAAic,EAAAviO,IAAA6jO,IACA3mN,EAAAqmN,GAAAhB,GACAz1N,EAAA,EACAutB,EAAA,EACA2pM,KACAC,IAEA,KAAA9sO,EAAA,EAAAA,EAAAD,IAAAC,EACAqB,EAAA0kB,EAAA/lB,GACA2V,EAAAutB,GACAvtB,GAAAw5M,EAAA9tN,GACAwrO,EAAApmO,KAAApF,KAEA6hC,GAAAisL,EAAA9tN,GACAyrO,EAAArmO,KAAApF,GAIA,OAAAyrO,GAAA5xN,UAAAjP,OAAA4gO,GAGA,QAAA3xN,IAAAkwN,GACA,MAAAC,IAAAD,GAAAlwN,UAGA,QAAA6xN,IAAArsO,GACA,MAAA,YACA,MAAAA,IAIA,QAAAssO,IAAAnnO,GACA,MAAAA,GAAA,GAGA,QAAAonO,IAAApnO,GACA,MAAAA,GAAA,GAGA,QAAAqnO,MACArtO,KAAA4C,EAAA,KAGA,QAAA0qO,IAAAhwL,GACAA,EAAAl6C,EACAk6C,EAAAr8C,EACAq8C,EAAA7qC,EACA6qC,EAAAv7C,EACAu7C,EAAAx7C,EACAw7C,EAAAj8C,EAAA,KAuLA,QAAAksO,IAAA7mC,EAAAppJ,GACA,GAAAv3C,GAAAu3C,EACA7oC,EAAA6oC,EAAAv7C,EACA+W,EAAA/S,EAAA3C,CAEA0V,GACAA,EAAArG,IAAA1M,EAAA+S,EAAArG,EAAAgC,EACAqE,EAAA/W,EAAA0S,EAEAiyL,EAAA9jM,EAAA6R,EAGAA,EAAArR,EAAA0V,EACA/S,EAAA3C,EAAAqR,EACA1O,EAAAhE,EAAA0S,EAAAhC,EACA1M,EAAAhE,IAAAgE,EAAAhE,EAAAqB,EAAA2C,GACA0O,EAAAhC,EAAA1M,EAGA,QAAAynO,IAAA9mC,EAAAppJ,GACA,GAAAv3C,GAAAu3C,EACA7oC,EAAA6oC,EAAA7qC,EACAqG,EAAA/S,EAAA3C,CAEA0V,GACAA,EAAArG,IAAA1M,EAAA+S,EAAArG,EAAAgC,EACAqE,EAAA/W,EAAA0S,EAEAiyL,EAAA9jM,EAAA6R,EAGAA,EAAArR,EAAA0V,EACA/S,EAAA3C,EAAAqR,EACA1O,EAAA0M,EAAAgC,EAAA1S,EACAgE,EAAA0M,IAAA1M,EAAA0M,EAAArP,EAAA2C,GACA0O,EAAA1S,EAAAgE,EAGA,QAAA0nO,IAAAnwL,GACA,KAAAA,EAAA7qC,GAAA6qC,EAAAA,EAAA7qC,CACA,OAAA6qC,GAGA,QAAAowL,IAAA/mN,EAAA/B,EAAAknK,EAAAC,GACA,GAAAhnF,IAAA,KAAA,MACArqF,EAAAizN,GAAA/mO,KAAAm+F,GAAA,CAOA,OANAA,GAAAp+E,KAAAA,EACAo+E,EAAAngF,MAAAA,EACAknK,GAAA8hD,GAAA7oI,EAAAp+E,EAAA/B,EAAAknK,GACAC,GAAA6hD,GAAA7oI,EAAAngF,EAAA+B,EAAAolK,GACA8hD,GAAAlnN,EAAAjM,OAAAozN,UAAAlnO,KAAA8T,GACAmzN,GAAAjpN,EAAAlK,OAAAozN,UAAAlnO,KAAA8T,GACAqqF,EAGA,QAAAgpI,IAAApnN,EAAAmlK,EAAAC,GACA,GAAAhnF,IAAA+mF,EAAAC,EAEA,OADAhnF,GAAAp+E,KAAAA,EACAo+E,EAGA,QAAA6oI,IAAA7oI,EAAAp+E,EAAA/B,EAAA22I,GACAx2D,EAAA,IAAAA,EAAA,GAIAA,EAAAp+E,OAAA/B,EACAmgF,EAAA,GAAAw2D,EAEAx2D,EAAA,GAAAw2D,GANAx2D,EAAA,GAAAw2D,EACAx2D,EAAAp+E,KAAAA,EACAo+E,EAAAngF,MAAAA,GASA,QAAAopN,IAAAjpI,EAAAk1E,EAAA+sB,EAAA7kC,EAAAC,GACA,GAUA/hK,GAVA8D,EAAA4gG,EAAA,GACAjyF,EAAAiyF,EAAA,GACA00G,EAAAt1M,EAAA,GACAu1M,EAAAv1M,EAAA,GACAw1M,EAAA7mM,EAAA,GACA4uI,EAAA5uI,EAAA,GACAiuJ,EAAA,EACAzxC,EAAA,EACA1nC,EAAA+xH,EAAAF,EACA3xH,EAAA45D,EAAAg4D,CAIA,IADAr5M,EAAA45K,EAAAw/B,EACA7xH,KAAAvnF,EAAA,GAAA,CAEA,GADAA,GAAAunF,EACAA,EAAA,EAAA,CACA,GAAAvnF,EAAA0gK,EAAA,MACA1gK,GAAAivH,IAAAA,EAAAjvH,OACA,IAAAunF,EAAA,EAAA,CACA,GAAAvnF,EAAAivH,EAAA,MACAjvH,GAAA0gK,IAAAA,EAAA1gK,GAIA,GADAA,EAAA8hK,EAAAs3C,EACA7xH,KAAAvnF,EAAA,GAAA,CAEA,GADAA,GAAAunF,EACAA,EAAA,EAAA,CACA,GAAAvnF,EAAAivH,EAAA,MACAjvH,GAAA0gK,IAAAA,EAAA1gK,OACA,IAAAunF,EAAA,EAAA,CACA,GAAAvnF,EAAA0gK,EAAA,MACA1gK,GAAAivH,IAAAA,EAAAjvH,GAIA,GADAA,EAAA2mM,EAAA0S,EACA5xH,KAAAznF,EAAA,GAAA,CAEA,GADAA,GAAAynF,EACAA,EAAA,EAAA,CACA,GAAAznF,EAAA0gK,EAAA,MACA1gK,GAAAivH,IAAAA,EAAAjvH,OACA,IAAAynF,EAAA,EAAA,CACA,GAAAznF,EAAAivH,EAAA,MACAjvH,GAAA0gK,IAAAA,EAAA1gK,GAIA,GADAA,EAAA+hK,EAAAs3C,EACA5xH,KAAAznF,EAAA,GAAA,CAEA,GADAA,GAAAynF,EACAA,EAAA,EAAA,CACA,GAAAznF,EAAAivH,EAAA,MACAjvH,GAAA0gK,IAAAA,EAAA1gK,OACA,IAAAynF,EAAA,EAAA,CACA,GAAAznF,EAAA0gK,EAAA,MACA1gK,GAAAivH,IAAAA,EAAAjvH,GAGA,QAAA0gK,EAAA,GAAAzxC,EAAA,KAEAyxC,EAAA,IAAAh8D,EAAA,IAAA00G,EAAA14C,EAAAn5E,EAAA8xH,EAAA34C,EAAAj5E,IACAwnC,EAAA,IAAAvqB,EAAA,IAAA00G,EAAAnqF,EAAA1nC,EAAA8xH,EAAApqF,EAAAxnC,KACA,OAGA,QAAAmmJ,IAAAlpI,EAAAk1E,EAAA+sB,EAAA7kC,EAAAC,GACA,GAAA2pB,GAAAhnF,EAAA,EACA,IAAAgnF,EAAA,OAAA,CAEA,IASAmiD,GACAC,EAVAriD,EAAA/mF,EAAA,GACAp+E,EAAAo+E,EAAAp+E,KACA/B,EAAAmgF,EAAAngF,MACAwpN,EAAAznN,EAAA,GACA0nN,EAAA1nN,EAAA,GACA2nN,EAAA1pN,EAAA,GACA2pN,EAAA3pN,EAAA,GACArZ,GAAA6iO,EAAAE,GAAA,EACAhkC,GAAA+jC,EAAAE,GAAA,CAIA,IAAAA,IAAAF,EAAA,CACA,GAAA9iO,EAAA0uK,GAAA1uK,GAAA42J,EAAA,MACA,IAAAisE,EAAAE,EAAA,CACA,GAAAxiD,GACA,GAAAA,EAAA,IAAA1pB,EAAA,WADA0pB,IAAAvgL,EAAAy7L,EAEAjb,IAAAxgL,EAAA62J,OACA,CACA,GAAA0pB,GACA,GAAAA,EAAA,GAAAkb,EAAA,WADAlb,IAAAvgL,EAAA62J,EAEA2pB,IAAAxgL,EAAAy7L,QAKA,IAFAknC,GAAAE,EAAAE,IAAAC,EAAAF,GACAF,EAAA7jC,EAAA4jC,EAAA3iO,EACA2iO,GAAA,GAAAA,EAAA,EACA,GAAAE,EAAAE,EAAA,CACA,GAAAxiD,GACA,GAAAA,EAAA,IAAA1pB,EAAA,WADA0pB,KAAAkb,EAAAmnC,GAAAD,EAAAlnC,EAEAjb,KAAA3pB,EAAA+rE,GAAAD,EAAA9rE,OACA,CACA,GAAA0pB,GACA,GAAAA,EAAA,GAAAkb,EAAA,WADAlb,KAAA1pB,EAAA+rE,GAAAD,EAAA9rE,EAEA2pB,KAAAib,EAAAmnC,GAAAD,EAAAlnC,OAGA,IAAAqnC,EAAAE,EAAA,CACA,GAAAziD,GACA,GAAAA,EAAA,IAAA3pB,EAAA,WADA2pB,IAAA7R,EAAAi0D,EAAAj0D,EAAAk0D,EAEApiD,IAAA5pB,EAAA+rE,EAAA/rE,EAAAgsE,OACA,CACA,GAAAriD,GACA,GAAAA,EAAA,GAAA7R,EAAA,WADA6R,IAAA3pB,EAAA+rE,EAAA/rE,EAAAgsE,EAEApiD,IAAA9R,EAAAi0D,EAAAj0D,EAAAk0D,GAOA,MAFAppI,GAAA,GAAA+mF,EACA/mF,EAAA,GAAAgnF,GACA,EAGA,QAAAyiD,IAAAv0D,EAAA+sB,EAAA7kC,EAAAC,GAIA,IAHA,GACAr9D,GADA5kG,EAAAwtO,GAAAzsO,OAGAf,KACA8tO,GAAAlpI,EAAA4oI,GAAAxtO,GAAA85K,EAAA+sB,EAAA7kC,EAAAC,IACA4rE,GAAAjpI,EAAAk1E,EAAA+sB,EAAA7kC,EAAAC,KACA73J,KAAA+1B,IAAAykE,EAAA,GAAA,GAAAA,EAAA,GAAA,IAAA0pI,IACAlkO,KAAA+1B,IAAAykE,EAAA,GAAA,GAAAA,EAAA,GAAA,IAAA0pI,WACAd,IAAAxtO,GAKA,QAAAuuO,IAAAC,GACA,MAAAd,IAAAc,EAAAj0N,QACAi0N,KAAAA,EACAb,cAIA,QAAAc,IAAA/4M,EAAAkvE,GACA,GAAA4pI,GAAA94M,EAAA84M,KACAE,EAAA9pI,EAAAp+E,KACAmoN,EAAA/pI,EAAAngF,KAEA,OADA+pN,KAAAG,IAAAA,EAAAD,EAAAA,EAAAF,GACAG,EAAAvkO,KAAA2gL,MAAA4jD,EAAA,GAAAD,EAAA,GAAAC,EAAA,GAAAD,EAAA,KACAF,IAAAE,GAAAA,EAAA9pI,EAAA,GAAA+pI,EAAA/pI,EAAA,KACA8pI,EAAA9pI,EAAA,GAAA+pI,EAAA/pI,EAAA,IACAx6F,KAAA2gL,MAAA2jD,EAAA,GAAAC,EAAA,GAAAA,EAAA,GAAAD,EAAA,KAGA,QAAAE,IAAAl5M,EAAAkvE,GACA,MAAAA,KAAAA,EAAAp+E,OAAAkP,EAAA84M,OAGA,QAAAK,IAAAn5M,EAAAkvE,GACA,MAAAA,KAAAA,EAAAp+E,OAAAkP,EAAA84M,OAGA,QAAAM,MACA,IAAA,GAAAp5M,GAAAi4M,EAAAtsO,EAAAvB,EAAAE,EAAA,EAAAD,EAAA2tO,GAAA3sO,OAAAf,EAAAD,IAAAC,EACA,IAAA01B,EAAAg4M,GAAA1tO,MAAAF,GAAA6tO,EAAAj4M,EAAAi4M,WAAA5sO,QAAA,CACA,GAAAwZ,GAAA,GAAAvN,OAAAlN,GACAygD,EAAA,GAAAvzC,OAAAlN,EACA,KAAAuB,EAAA,EAAAA,EAAAvB,IAAAuB,EAAAkZ,EAAAlZ,GAAAA,EAAAk/C,EAAAl/C,GAAAotO,GAAA/4M,EAAA83M,GAAAG,EAAAtsO,IAEA,KADAkZ,EAAAhJ,KAAA,SAAAvR,EAAAqB,GAAA,MAAAk/C,GAAAl/C,GAAAk/C,EAAAvgD,KACAqB,EAAA,EAAAA,EAAAvB,IAAAuB,EAAAk/C,EAAAl/C,GAAAssO,EAAApzN,EAAAlZ,GACA,KAAAA,EAAA,EAAAA,EAAAvB,IAAAuB,EAAAssO,EAAAtsO,GAAAk/C,EAAAl/C,IAKA,QAAA0tO,IAAAj1D,EAAA+sB,EAAA7kC,EAAAC,GACA,GACA+sE,GACAt5M,EACA84M,EACAS,EACAtB,EACAuB,EACAzqO,EACA0qO,EACAC,EACA1qO,EACAw0E,EACAm2J,EAZAC,EAAA5B,GAAA3sO,OAaAulM,GAAA,CAEA,KAAA0oC,EAAA,EAAAA,EAAAM,IAAAN,EACA,GAAAt5M,EAAAg4M,GAAAsB,GAAA,CAMA,IALAR,EAAA94M,EAAA84M,KACAb,EAAAj4M,EAAAi4M,UACAsB,EAAAtB,EAAA5sO,OAGAkuO,KACAzB,GAAAG,EAAAsB,KACAtB,EAAAn8N,OAAAy9N,EAAA,EAMA,KADAA,EAAA,EAAAC,EAAAvB,EAAA5sO,OACAkuO,EAAAC,GACAxqO,EAAAmqO,GAAAn5M,EAAA83M,GAAAG,EAAAsB,KAAA/1J,EAAAx0E,EAAA,GAAA2qO,EAAA3qO,EAAA,GACAD,EAAAmqO,GAAAl5M,EAAA83M,GAAAG,IAAAsB,EAAAC,KAAAC,EAAA1qO,EAAA,GAAA2qO,EAAA3qO,EAAA,IACA2F,KAAA+1B,IAAA+4C,EAAAi2J,GAAAb,IAAAlkO,KAAA+1B,IAAAkvM,EAAAD,GAAAd,MACAX,EAAAn8N,OAAAy9N,EAAA,EAAAzB,GAAA/mO,KAAAmnO,GAAAY,EAAA9pO,EACA0F,KAAA+1B,IAAA+4C,EAAA4gG,GAAAw0D,IAAArsE,EAAAotE,EAAAf,IAAAx0D,EAAA1vK,KAAA+1B,IAAAgvM,EAAAr1D,GAAAw0D,GAAAc,EAAAntE,GACA73J,KAAA+1B,IAAAkvM,EAAAptE,GAAAqsE,IAAAtsE,EAAA9oF,EAAAo1J,IAAAlkO,KAAA+1B,IAAAivM,EAAAntE,GAAAqsE,GAAAa,EAAAntE,EAAAC,GACA73J,KAAA+1B,IAAA+4C,EAAA8oF,GAAAssE,IAAAe,EAAAxoC,EAAAynC,IAAAtsE,EAAA53J,KAAA+1B,IAAAgvM,EAAAntE,GAAAssE,GAAAc,EAAAvoC,GACAz8L,KAAA+1B,IAAAkvM,EAAAxoC,GAAAynC,IAAAp1J,EAAA4gG,EAAAw0D,IAAAlkO,KAAA+1B,IAAAivM,EAAAvoC,GAAAynC,GAAAa,EAAAr1D,EAAA+sB,GACA,OAAA,KACAqoC,EAIAA,KAAA5oC,GAAA,GAMA,GAAAA,EAAA,CACA,GAAA7+G,GAAAE,EAAA/0C,EAAA28L,EAAA9jM,EAAAA,CAEA,KAAAujM,EAAA,EAAA1oC,EAAA,KAAA0oC,EAAAM,IAAAN,GACAt5M,EAAAg4M,GAAAsB,MACAR,EAAA94M,EAAA84M,KACA/mJ,EAAA+mJ,EAAA,GAAA10D,EACAnyF,EAAA6mJ,EAAA,GAAA3nC,GACAj0J,EAAA60C,EAAAA,EAAAE,EAAAA,GACA4nJ,IAAAA,EAAA38L,EAAA0zJ,EAAA5wK,GAIA,IAAA4wK,EAAA,CACA,GAAA8R,IAAAt+B,EAAA+sB,GAAA2oC,GAAA11D,EAAA7X,GAAAwtE,GAAAztE,EAAAC,GAAAytE,GAAA1tE,EAAA6kC,EACAP,GAAAqnC,UAAAlnO,KACA+mO,GAAA/mO,KAAAmnO,GAAAY,EAAAloC,EAAAkoC,KAAAp2B,EAAAo3B,IAAA,EACAhC,GAAA/mO,KAAAmnO,GAAAY,EAAAgB,EAAAC,IAAA,EACAjC,GAAA/mO,KAAAmnO,GAAAY,EAAAiB,EAAAC,IAAA,EACAlC,GAAA/mO,KAAAmnO,GAAAY,EAAAkB,EAAAt3B,IAAA,IAMA,IAAA42B,EAAA,EAAAA,EAAAM,IAAAN,GACAt5M,EAAAg4M,GAAAsB,MACAt5M,EAAAi4M,UAAA5sO,cACA2sO,IAAAsB,IAUA,QAAAW,MACAxC,GAAAttO,MACAA,KAAAa,EACAb,KAAAoB,EACApB,KAAA8jK,IACA9jK,KAAA2uO,KACA3uO,KAAAq0M,GAAA,KAGA,QAAA07B,IAAAjsE,GACA,GAAAksE,GAAAlsE,EAAAhiK,EACAmuO,EAAAnsE,EAAAziK,CAEA,IAAA2uO,GAAAC,EAAA,CAEA,GAAAC,GAAAF,EAAArB,KACAwB,EAAArsE,EAAA6qE,KACAyB,EAAAH,EAAAtB,IAEA,IAAAuB,IAAAE,EAAA,CAEA,GAAAz2B,GAAAw2B,EAAA,GACAzuF,EAAAyuF,EAAA,GACA12B,EAAAy2B,EAAA,GAAAv2B,EACAD,EAAAw2B,EAAA,GAAAxuF,EACA0yD,EAAAg8B,EAAA,GAAAz2B,EACAtF,EAAA+7B,EAAA,GAAA1uF,EAEA17I,EAAA,GAAAyzM,EAAApF,EAAAqF,EAAAtF,EACA,MAAApuM,IAAAqqO,IAAA,CAEA,GAAAC,GAAA72B,EAAAA,EAAAC,EAAAA,EACA62B,EAAAn8B,EAAAA,EAAAC,EAAAA,EACAxzM,GAAAwzM,EAAAi8B,EAAA52B,EAAA62B,GAAAvqO,EACA5E,GAAAq4M,EAAA82B,EAAAn8B,EAAAk8B,GAAAtqO,EAEAm7J,EAAAqvE,GAAAh8N,OAAA,GAAAs7N,GACA3uE,GAAA2C,IAAAA,EACA3C,EAAAwtE,KAAAwB,EACAhvE,EAAAtgK,EAAAA,EAAA84M,EACAx4C,EAAA//J,GAAA+/J,EAAAkzC,GAAAjzM,EAAAsgJ,GAAAn3I,KAAA87I,KAAAxlJ,EAAAA,EAAAO,EAAAA,GAEA0iK,EAAA3C,OAAAA,CAKA,KAHA,GAAAn9I,GAAA,KACAs5B,EAAA4sK,GAAAtnN,EAEA06C,GACA,GAAA6jH,EAAA//J,EAAAk8C,EAAAl8C,GAAA+/J,EAAA//J,IAAAk8C,EAAAl8C,GAAA+/J,EAAAtgK,GAAAy8C,EAAAz8C,EAAA,CACA,IAAAy8C,EAAA7qC,EACA,CAAAuR,EAAAs5B,EAAAx7C,CAAA,OADAw7C,EAAAA,EAAA7qC,MAEA,CACA,IAAA6qC,EAAAv7C,EACA,CAAAiiB,EAAAs5B,CAAA,OADAA,EAAAA,EAAAv7C,EAKAmoN,GAAAv/H,OAAA3mE,EAAAm9I,GACAn9I,IAAAysN,GAAAtvE,MAGA,QAAAuvE,IAAA5sE,GACA,GAAA3C,GAAA2C,EAAA3C,MACAA,KACAA,EAAAr/J,IAAA2uO,GAAAtvE,EAAA9/J,GACA6oN,GAAAj9M,OAAAk0J,GACAqvE,GAAA5pO,KAAAu6J,GACAmsE,GAAAnsE,GACA2C,EAAA3C,OAAA,MAMA,QAAAwvE,MACArD,GAAAttO,MACAA,KAAA+kG,KACA/kG,KAAA2uO,KACA3uO,KAAAmhK,OAAA,KAGA,QAAAyvE,IAAAjC,GACA,GAAAkC,GAAAC,GAAAt8N,OAAA,GAAAm8N,GAEA,OADAE,GAAAlC,KAAAA,EACAkC,EAGA,QAAAE,IAAAF,GACAH,GAAAG,GACAG,GAAA/jO,OAAA4jO,GACAC,GAAAlqO,KAAAiqO,GACAvD,GAAAuD,GAGA,QAAAI,IAAAJ,GACA,GAAA1vE,GAAA0vE,EAAA1vE,OACAtgK,EAAAsgK,EAAAtgK,EACAO,EAAA+/J,EAAAkzC,GACA94C,GAAA16J,EAAAO,GACAo7C,EAAAq0L,EAAA/uO,EACA2R,EAAAo9N,EAAAxvO,EACA6vO,GAAAL,EAEAE,IAAAF,EAGA,KADA,GAAAb,GAAAxzL,EACAwzL,EAAA7uE,QACA52J,KAAA+1B,IAAAz/B,EAAAmvO,EAAA7uE,OAAAtgK,GAAA4tO,IACAlkO,KAAA+1B,IAAAl/B,EAAA4uO,EAAA7uE,OAAAkzC,IAAAo6B,IACAjyL,EAAAwzL,EAAAluO,EACAovO,EAAA5hO,QAAA0gO,GACAe,GAAAf,GACAA,EAAAxzL,CAGA00L,GAAA5hO,QAAA0gO,GACAU,GAAAV,EAGA,KADA,GAAAC,GAAAx8N,EACAw8N,EAAA9uE,QACA52J,KAAA+1B,IAAAz/B,EAAAovO,EAAA9uE,OAAAtgK,GAAA4tO,IACAlkO,KAAA+1B,IAAAl/B,EAAA6uO,EAAA9uE,OAAAkzC,IAAAo6B,IACAh7N,EAAAw8N,EAAA5uO,EACA6vO,EAAAtqO,KAAAqpO,GACAc,GAAAd,GACAA,EAAAx8N,CAGAy9N,GAAAtqO,KAAAqpO,GACAS,GAAAT,EAEA,IACAkB,GADAC,EAAAF,EAAAhwO,MAEA,KAAAiwO,EAAA,EAAAA,EAAAC,IAAAD,EACAlB,EAAAiB,EAAAC,GACAnB,EAAAkB,EAAAC,EAAA,GACAvD,GAAAqC,EAAAlrI,KAAAirI,EAAArB,KAAAsB,EAAAtB,KAAApzE,EAGAy0E,GAAAkB,EAAA,GACAjB,EAAAiB,EAAAE,EAAA,GACAnB,EAAAlrI,KAAA2oI,GAAAsC,EAAArB,KAAAsB,EAAAtB,KAAA,KAAApzE,GAEAw0E,GAAAC,GACAD,GAAAE,GAGA,QAAAoB,IAAA1C,GASA,IARA,GAEAqB,GACAC,EACAqB,EACAC,EALA1wO,EAAA8tO,EAAA,GACA6C,EAAA7C,EAAA,GAKArxL,EAAA0zL,GAAApuO,EAEA06C,GAEA,IADAg0L,EAAAG,GAAAn0L,EAAAk0L,GAAA3wO,GACA4tO,GAAAnxL,EAAAA,EAAA7qC,MAAA,CAEA,MADA8+N,EAAA1wO,EAAA6wO,GAAAp0L,EAAAk0L,IACA/C,IAMA,CACA6C,GAAA7C,IACAuB,EAAA1yL,EAAAx7C,EACAmuO,EAAA3yL,GACAi0L,GAAA9C,IACAuB,EAAA1yL,EACA2yL,EAAA3yL,EAAAj8C,GAEA2uO,EAAAC,EAAA3yL,CAEA,OAfA,IAAAA,EAAAv7C,EAAA,CACAiuO,EAAA1yL,CACA,OAEAA,EAAAA,EAAAv7C,EAgBA2sO,GAAAC,EACA,IAAAgD,GAAAf,GAAAjC,EAGA,IAFAqC,GAAArmJ,OAAAqlJ,EAAA2B,GAEA3B,GAAAC,EAAA,CAEA,GAAAD,IAAAC,EAOA,MANAS,IAAAV,GACAC,EAAAW,GAAAZ,EAAArB,MACAqC,GAAArmJ,OAAAgnJ,EAAA1B,GACA0B,EAAA5sI,KAAAkrI,EAAAlrI,KAAA2oI,GAAAsC,EAAArB,KAAAgD,EAAAhD,MACAoB,GAAAC,OACAD,IAAAE,EAIA,KAAAA,EAEA,YADA0B,EAAA5sI,KAAA2oI,GAAAsC,EAAArB,KAAAgD,EAAAhD,MAKA+B,IAAAV,GACAU,GAAAT,EAEA,IAAAC,GAAAF,EAAArB,KACAl1B,EAAAy2B,EAAA,GACAx2B,EAAAw2B,EAAA,GACAv2B,EAAAg1B,EAAA,GAAAl1B,EACA/3D,EAAAitF,EAAA,GAAAj1B,EACA02B,EAAAH,EAAAtB,KACAv6B,EAAAg8B,EAAA,GAAA32B,EACApF,EAAA+7B,EAAA,GAAA12B,EACA1zM,EAAA,GAAA2zM,EAAAtF,EAAA3yD,EAAA0yD,GACAw9B,EAAAj4B,EAAAA,EAAAj4D,EAAAA,EACA6uF,EAAAn8B,EAAAA,EAAAC,EAAAA,EACA94C,IAAA84C,EAAAu9B,EAAAlwF,EAAA6uF,GAAAvqO,EAAAyzM,GAAAE,EAAA42B,EAAAn8B,EAAAw9B,GAAA5rO,EAAA0zM,EAEAk0B,IAAAqC,EAAAlrI,KAAAmrI,EAAAE,EAAA70E,GACAo2E,EAAA5sI,KAAA2oI,GAAAwC,EAAAvB,EAAA,KAAApzE,GACA00E,EAAAlrI,KAAA2oI,GAAAiB,EAAAyB,EAAA,KAAA70E,GACAw0E,GAAAC,GACAD,GAAAE,IAGA,QAAAwB,IAAA3tE,EAAA0tE,GACA,GAAA7C,GAAA7qE,EAAA6qE,KACAkD,EAAAlD,EAAA,GACAmD,EAAAnD,EAAA,GACAoD,EAAAD,EAAAN,CAEA,KAAAO,EAAA,MAAAF,EAEA,IAAA7B,GAAAlsE,EAAAhiK,CACA,KAAAkuO,EAAA,OAAApkM,EAAAA,CAEA+iM,GAAAqB,EAAArB,IACA,IAAAqD,GAAArD,EAAA,GACAsD,EAAAtD,EAAA,GACAuD,EAAAD,EAAAT,CAEA,KAAAU,EAAA,MAAAF,EAEA,IAAAG,GAAAH,EAAAH,EACAO,EAAA,EAAAL,EAAA,EAAAG,EACAp/N,EAAAq/N,EAAAD,CAEA,OAAAE,KAAAt/N,EAAAvI,KAAA87I,KAAAvzI,EAAAA,EAAA,EAAAs/N,GAAAD,EAAAA,IAAA,EAAAD,GAAAD,EAAAC,EAAA,EAAAJ,EAAAC,EAAA,KAAAK,EAAAP,GAEAA,EAAAG,GAAA,EAGA,QAAAN,IAAA5tE,EAAA0tE,GACA,GAAAvB,GAAAnsE,EAAAziK,CACA,IAAA4uO,EAAA,MAAAwB,IAAAxB,EAAAuB,EACA,IAAA7C,GAAA7qE,EAAA6qE,IACA,OAAAA,GAAA,KAAA6C,EAAA7C,EAAA,GAAA/iM,EAAAA,EAUA,QAAAymM,IAAAluO,EAAA2O,EAAA/R,GACA,OAAAoD,EAAA,GAAApD,EAAA,KAAA+R,EAAA,GAAA3O,EAAA,KAAAA,EAAA,GAAA2O,EAAA,KAAA/R,EAAA,GAAAoD,EAAA,IAGA,QAAAmuO,IAAAnuO,EAAA2O,GACA,MAAAA,GAAA,GAAA3O,EAAA,IACA2O,EAAA,GAAA3O,EAAA,GAGA,QAAAouO,IAAAC,EAAA52J,GACA,GACA/6E,GACAO,EACA+/J,EAHAwtE,EAAA6D,EAAA9gO,KAAA4gO,IAAA99N,KAUA,KALAm5N,MACAE,GAAA,GAAA1gO,OAAAqlO,EAAAtxO,QACA8vO,GAAA,GAAA3D,IACAnjB,GAAA,GAAAmjB,MAIA,GADAlsE,EAAAsvE,GACA9B,KAAAxtE,GAAAwtE,EAAA,GAAAxtE,EAAA//J,GAAAutO,EAAA,KAAAxtE,EAAA//J,GAAAutO,EAAA,GAAAxtE,EAAAtgK,GACA8tO,EAAA,KAAA9tO,GAAA8tO,EAAA,KAAAvtO,IACAiwO,GAAA1C,GACA9tO,EAAA8tO,EAAA,GAAAvtO,EAAAutO,EAAA,IAEAA,EAAA6D,EAAAh+N,UACA,CAAA,IAAA2sJ,EAGA,KAFA8vE,IAAA9vE,EAAA2C,KAQA,GAFAmrE,KAEArzJ,EAAA,CACA,GAAAq+F,IAAAr+F,EAAA,GAAA,GACAorH,GAAAprH,EAAA,GAAA,GACAumF,GAAAvmF,EAAA,GAAA,GACAwmF,GAAAxmF,EAAA,GAAA,EACA4yJ,IAAAv0D,EAAA+sB,EAAA7kC,EAAAC,GACA8sE,GAAAj1D,EAAA+sB,EAAA7kC,EAAAC,GAGApiK,KAAA2tO,MAAAA,GACA3tO,KAAA6tO,MAAAA,GAEAmD,GACA9mB,GACAyjB,GACAE,GAAA,KA8EA,QAAA4E,MAKA,QAAAA,GAAA/hO,GACA,MAAA,IAAA6hO,IAAA7hO,EAAA1H,IAAA,SAAAhD,EAAA7F,GACA,GAAAiE,IAAAmG,KAAAwa,MAAA+gN,EAAA9/N,EAAA7F,EAAAuQ,GAAA+9N,IAAAA,GAAAlkO,KAAAwa,MAAAghN,EAAA//N,EAAA7F,EAAAuQ,GAAA+9N,IAAAA,GAGA,OAFArqO,GAAAsW,MAAAva,EACAiE,EAAAsM,KAAA1K,EACA5B,IACAw3E,GAVA,GAAAkqJ,GAAAqH,GACApH,EAAAqH,GACAxxJ,EAAA,IAuCA,OA5BA62J,GAAAjxC,SAAA,SAAA9wL,GACA,MAAA+hO,GAAA/hO,GAAA8wL,YAGAixC,EAAA1sM,MAAA,SAAAr1B,GACA,MAAA+hO,GAAA/hO,GAAAq1B,SAGA0sM,EAAAC,UAAA,SAAAhiO,GACA,MAAA+hO,GAAA/hO,GAAAgiO,aAGAD,EAAA5xO,EAAA,SAAA+B,GACA,MAAA4E,WAAAtG,QAAA4kO,EAAA,kBAAAljO,GAAAA,EAAAsqO,IAAAtqO,GAAA6vO,GAAA3M,GAGA2M,EAAArxO,EAAA,SAAAwB,GACA,MAAA4E,WAAAtG,QAAA6kO,EAAA,kBAAAnjO,GAAAA,EAAAsqO,IAAAtqO,GAAA6vO,GAAA1M,GAGA0M,EAAA72J,OAAA,SAAAh5E,GACA,MAAA4E,WAAAtG,QAAA06E,EAAA,MAAAh5E,EAAA,QAAAA,EAAA,GAAA,IAAAA,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAA,EAAA,GAAA,KAAA6vO,GAAA72J,KAAAA,EAAA,GAAA,GAAAA,EAAA,GAAA,KAAAA,EAAA,GAAA,GAAAA,EAAA,GAAA,MAGA62J,EAAAj1L,KAAA,SAAA56C,GACA,MAAA4E,WAAAtG,QAAA06E,EAAA,MAAAh5E,EAAA,OAAA,EAAA,KAAAA,EAAA,IAAAA,EAAA,KAAA6vO,GAAA72J,IAAAA,EAAA,GAAA,GAAAA,EAAA,GAAA,GAAAA,EAAA,GAAA,GAAAA,EAAA,GAAA,KAGA62J,EAGA,QAAAE,IAAA9xO,GACA,MAAA,YACA,MAAAA,IAIA,QAAA+xO,IAAAz6N,EAAAlR,EAAAg7C,GACAjiD,KAAAmY,OAAAA,EACAnY,KAAAiH,KAAAA,EACAjH,KAAAiiD,UAAAA,EAGA,QAAA4wL,IAAAz+N,EAAAvT,EAAAO,GACApB,KAAAoU,EAAAA,EACApU,KAAAa,EAAAA,EACAb,KAAAoB,EAAAA,EA4CA,QAAA0xO,IAAAx1L,GACA,MAAAA,GAAAy1L,QAAAC,GAGA,QAAAC,MACArzO,EAAA8H,MAAA4Z,2BAGA,QAAA4xN,MACAtzO,EAAA8H,MAAAwY,iBACAtgB,EAAA8H,MAAA4Z,2BAIA,QAAA6xN,MACA,OAAAvzO,EAAA8H,MAAAuR,OAGA,QAAAm6N,MACA,GAAA3xO,GAAAwE,EAAAxG,EAAAO,IASA,OARAP,aAAAokC,aACApkC,EAAAA,EAAAymL,iBAAAzmL,EACAgC,EAAAhC,EAAAoK,MAAA4kL,QAAAl7K,MACAtN,EAAAxG,EAAAsM,OAAA0iL,QAAAl7K,QAEA9R,EAAAhC,EAAA8gC,YACAt6B,EAAAxG,EAAAwgC,gBAEA,EAAA,IAAAx+B,EAAAwE,IAGA,QAAAotO,MACA,MAAArzO,MAAA+yO,QAAAC,GAGA,QAAAM,MACA,OAAA1zO,EAAA8H,MAAA6rO,QAAA3zO,EAAA8H,MAAA8rO,UAAA,IAAA,GAAA,IAGA,QAAAC,MACA,MAAA,gBAAAzzO,MAGA,QAAA0zO,IAAAzxL,EAAA25B,EAAA+3J,GACA,GAAA3P,GAAA/hL,EAAA2xL,QAAAh4J,EAAA,GAAA,IAAA+3J,EAAA,GAAA,GACAzP,EAAAjiL,EAAA2xL,QAAAh4J,EAAA,GAAA,IAAA+3J,EAAA,GAAA,GACA1P,EAAAhiL,EAAA4xL,QAAAj4J,EAAA,GAAA,IAAA+3J,EAAA,GAAA,GACAxP,EAAAliL,EAAA4xL,QAAAj4J,EAAA,GAAA,IAAA+3J,EAAA,GAAA,EACA,OAAA1xL,GAAA8sI,UACAm1C,EAAAF,GAAAA,EAAAE,GAAA,EAAA35N,KAAAyuD,IAAA,EAAAgrK,IAAAz5N,KAAAC,IAAA,EAAA05N,GACAC,EAAAF,GAAAA,EAAAE,GAAA,EAAA55N,KAAAyuD,IAAA,EAAAirK,IAAA15N,KAAAC,IAAA,EAAA25N,IAIA,QAAA79M,MAkBA,QAAAA,GAAA25J,GACAA,EACAwE,SAAA,SAAA4uD,IACA7vN,GAAA,aAAAswN,GACAtwN,GAAA,iBAAAikK,GACAjkK,GAAA,gBAAAuwN,GACAlyO,OAAA6lL,GACAlkK,GAAA,kBAAAmkK,GACAnkK,GAAA,iBAAAokK,GACApkK,GAAA,iCAAAqkK,GACAnjL,MAAA,eAAA,QACAA,MAAA,8BAAA,iBA0DA,QAAAg3K,GAAAz5H,EAAA7tC,GAEA,MADAA,GAAA7J,KAAAC,IAAAwpO,EAAA,GAAAzpO,KAAAyuD,IAAAg7K,EAAA,GAAA5/N,IACAA,IAAA6tC,EAAA7tC,EAAA6tC,EAAA,GAAA4wL,IAAAz+N,EAAA6tC,EAAAphD,EAAAohD,EAAA7gD,GAGA,QAAA2tL,GAAA9sI,EAAA2mI,EAAA57D,GACA,GAAAnsH,GAAA+nL,EAAA,GAAA57D,EAAA,GAAA/qE,EAAA7tC,EAAAhT,EAAAwnL,EAAA,GAAA57D,EAAA,GAAA/qE,EAAA7tC,CACA,OAAAvT,KAAAohD,EAAAphD,GAAAO,IAAA6gD,EAAA7gD,EAAA6gD,EAAA,GAAA4wL,IAAA5wL,EAAA7tC,EAAAvT,EAAAO,GAGA,QAAAszM,GAAA94H,GACA,SAAAA,EAAA,GAAA,KAAAA,EAAA,GAAA,IAAA,IAAAA,EAAA,GAAA,KAAAA,EAAA,GAAA,IAAA,GAGA,QAAA22G,GAAA6D,EAAAn0I,EAAA05H,GACAya,EACA5yK,GAAA,aAAA,WAAAukK,EAAA/nL,KAAAwH,WAAA5C,UACA4e,GAAA,0BAAA,WAAAukK,EAAA/nL,KAAAwH,WAAA3C,QACAguL,MAAA,OAAA,WACA,GAAAv3J,GAAAt7B,KACAs8C,EAAA90C,UACArG,EAAA4mL,EAAAzsJ,EAAAghB,GACA78C,EAAAm8E,EAAAl5E,MAAA44B,EAAAghB,GACAv2C,EAAA41K,GAAA+4B,EAAAj1M,GACAgC,EAAA8I,KAAAC,IAAA/K,EAAA,GAAA,GAAAA,EAAA,GAAA,GAAAA,EAAA,GAAA,GAAAA,EAAA,GAAA,IACA0E,EAAAm3B,EAAAy3M,OACAjgO,EAAA,kBAAAmvC,GAAAA,EAAAv/C,MAAA44B,EAAAghB,GAAA2F,EACA9hD,EAAA2wL,EAAA3sL,EAAA0zE,OAAA9xE,GAAAqG,OAAA3K,EAAA0C,EAAAiQ,GAAAtB,EAAA+kE,OAAA9xE,GAAAqG,OAAA3K,EAAAqR,EAAAsB,GACA,OAAA,UAAA1U,GACA,GAAA,IAAAA,EAAAA,EAAAoT,MACA,CAAA,GAAAhS,GAAAX,EAAAT,GAAA0U,EAAA3S,EAAAX,EAAA,EAAApB,GAAA,GAAAmzO,IAAAz+N,EAAArO,EAAA,GAAAjF,EAAA,GAAAsT,EAAArO,EAAA,GAAAjF,EAAA,GAAAsT,GACAjT,EAAAmlB,KAAA,KAAA5mB,MAKA,QAAAqoL,GAAAzsJ,EAAAghB,GACA,IAAA,GAAAn7C,GAAAhB,EAAA,EAAAD,EAAAqoL,EAAArnL,OAAAf,EAAAD,IAAAC,EACA,IAAAgB,EAAAonL,EAAApoL,IAAAm7B,OAAAA,EACA,MAAAn6B,EAGA,OAAA,IAAA8yO,GAAA34M,EAAAghB,GAGA,QAAA23L,GAAA34M,EAAAghB,GACAt8C,KAAAs7B,KAAAA,EACAt7B,KAAAs8C,KAAAA,EACAt8C,KAAA0a,OAAA,EACA1a,KAAAksB,OAAA,EACAlsB,KAAA47E,OAAAA,EAAAl5E,MAAA44B,EAAAghB,GAgCA,QAAAw3L,KA8BA,QAAAI,KACA/yO,EAAAgzO,MAAA,KACAhzO,EAAA0D,MA/BA,GAAAhD,EAAAa,MAAA1C,KAAAwH,WAAA,CACA,GAAArG,GAAA4mL,EAAA/nL,KAAAwH,WACA9H,EAAAM,KAAA+yO,OACA3+N,EAAA7J,KAAAC,IAAAwpO,EAAA,GAAAzpO,KAAAyuD,IAAAg7K,EAAA,GAAAt0O,EAAA0U,EAAA7J,KAAA+/J,IAAA,EAAApiF,EAAAxlF,MAAA1C,KAAAwH,cACAzB,EAAAygL,GAAAxmL,KAIA,IAAAmB,EAAAgzO,MACAhzO,EAAAqlL,MAAA,GAAA,KAAAzgL,EAAA,IAAA5E,EAAAqlL,MAAA,GAAA,KAAAzgL,EAAA,KACA5E,EAAAqlL,MAAA,GAAA9mL,EAAAm4E,OAAA12E,EAAAqlL,MAAA,GAAAzgL,IAEAgjB,aAAA5nB,EAAAgzO,WAIA,CAAA,GAAAz0O,EAAA0U,IAAAA,EAAA,MAIAjT,GAAAqlL,OAAAzgL,EAAArG,EAAAm4E,OAAA9xE,IACA0tL,GAAAzzL,MACAmB,EAAAyD,QAGAsuO,KACA/xO,EAAAgzO,MAAA7oO,WAAA4oO,EAAAE,GACAjzO,EAAAmlB,KAAA,QAAA+tN,EAAAtlD,EAAArT,EAAAh8K,EAAA0U,GAAAjT,EAAAqlL,MAAA,GAAArlL,EAAAqlL,MAAA,IAAArlL,EAAAy6E,OAAA+3J,KAQA,QAAAlsD,KAcA,QAAAQ,KAEA,GADAirD,MACA/xO,EAAAs6F,MAAA,CACA,GAAA7T,GAAAhoF,EAAA8H,MAAA8a,QAAAy3J,EAAAnyF,EAAAloF,EAAA8H,MAAA+a,QAAAukL,CACA7lM,GAAAs6F,MAAA7T,EAAAA,EAAAE,EAAAA,EAAAwgG,EAEAnnL,EAAAmlB,KAAA,QAAA+tN,EAAAtlD,EAAA5tL,EAAAm6B,KAAAy3M,OAAA5xO,EAAAqlL,MAAA,GAAAA,GAAArlL,EAAAm6B,MAAAn6B,EAAAqlL,MAAA,IAAArlL,EAAAy6E,OAAA+3J,IAGA,QAAAzrD,KACA1nL,EAAAgjB,GAAA,8BAAA,MACAujK,GAAAnnL,EAAA8H,MAAAwa,KAAA/gB,EAAAs6F,OACAy3I,KACA/xO,EAAA0D,MA1BA,IAAAijL,GAAAjmL,EAAAa,MAAA1C,KAAAwH,WAAA,CACA,GAAArG,GAAA4mL,EAAA/nL,KAAAwH,WACAhH,EAAAyZ,GAAAra,EAAA8H,MAAAwa,MAAAsB,GAAA,iBAAAykK,GAAA,GAAAzkK,GAAA,eAAA0kK,GAAA,GACAniL,EAAAygL,GAAAxmL,MACAi6K,EAAAr6K,EAAA8H,MAAA8a,QACAwkL,EAAApnM,EAAA8H,MAAA+a,OAEAmkK,IAAAhnL,EAAA8H,MAAAwa,MACA+wN,KACA9xO,EAAAqlL,OAAAzgL,EAAA/F,KAAA+yO,OAAAl7J,OAAA9xE,IACA0tL,GAAAzzL,MACAmB,EAAAyD,SAmBA,QAAAmvO,KACA,GAAAlyO,EAAAa,MAAA1C,KAAAwH,WAAA,CACA,GAAAu5J,GAAA/gK,KAAA+yO,OACAnqD,EAAApC,GAAAxmL,MACAgtH,EAAA+zC,EAAAlpF,OAAA+wG,GACAr0D,EAAAwsC,EAAA3sJ,GAAAxU,EAAA8H,MAAAua,SAAA,GAAA,GACAqtG,EAAA+kH,EAAAtlD,EAAArT,EAAA3a,EAAAxsC,GAAAq0D,EAAA57D,GAAApxC,EAAAl5E,MAAA1C,KAAAwH,WAAAmsO,EAEAT,MACAvlO,EAAA,EAAAsM,GAAAja,MAAAm8B,aAAAxuB,SAAAA,GAAA3M,KAAAuxL,EAAAjjE,EAAAs5D,GACA3uK,GAAAja,MAAAgB,KAAAslB,EAAA27B,UAAAqtE,IAGA,QAAAq4D,KACA,GAAA9lL,EAAAa,MAAA1C,KAAAwH,WAAA,CACA,GAEAg0L,GACAr7L,EAAAT,EAAAqG,EAHA5E,EAAA4mL,EAAA/nL,KAAAwH,WACAghL,EAAA5oL,EAAA8H,MAAAga,eAEAxhB,EAAAsoL,EAAAtnL,MAGA,KADA+xO,KACA9yO,EAAA,EAAAA,EAAAD,IAAAC,EACAT,EAAA8oL,EAAAroL,GAAA4F,EAAAo5F,GAAAn/F,KAAAwoL,EAAA9oL,EAAA0jI,YACAr9H,GAAAA,EAAA/F,KAAA+yO,OAAAl7J,OAAA9xE,GAAArG,EAAA0jI,YACAjiI,EAAAmzO,OACAnzO,EAAAozO,SAAApzO,EAAAozO,OAAAxuO,IADA5E,EAAAmzO,OAAAvuO,EAAAy1L,GAAA,EAKA,IAAAg5C,IACAA,EAAAzrN,aAAAyrN,IACArzO,EAAAozO,QAIA,MAHApzO,GAAA0D,YACAkB,EAAAkU,GAAAja,MAAAwjB,GAAA,mBACAzd,EAAArD,MAAA1C,KAAAwH,WAKAg0L,KACAg5C,EAAAlpO,WAAA,WAAAkpO,EAAA,MAAAC,GACAhhD,GAAAzzL,MACAmB,EAAAyD,UAIA,QAAAgjL,KACA,GAEAznL,GAAAT,EAAAqG,EAAAjF,EAFAK,EAAA4mL,EAAA/nL,KAAAwH,WACAghL,EAAA5oL,EAAA8H,MAAAga,eACAxhB,EAAAsoL,EAAAtnL,MAIA,KAFAgyO,KACAsB,IAAAA,EAAAzrN,aAAAyrN,IACAr0O,EAAA,EAAAA,EAAAD,IAAAC,EACAT,EAAA8oL,EAAAroL,GAAA4F,EAAAo5F,GAAAn/F,KAAAwoL,EAAA9oL,EAAA0jI,YACAjiI,EAAAmzO,QAAAnzO,EAAAmzO,OAAA,KAAA50O,EAAA0jI,WAAAjiI,EAAAmzO,OAAA,GAAAvuO,EACA5E,EAAAozO,QAAApzO,EAAAozO,OAAA,KAAA70O,EAAA0jI,aAAAjiI,EAAAozO,OAAA,GAAAxuO,EAGA,IADArG,EAAAyB,EAAAm6B,KAAAy3M,OACA5xO,EAAAozO,OAAA,CACA,GAAA3rD,GAAAznL,EAAAmzO,OAAA,GAAArrF,EAAA9nJ,EAAAmzO,OAAA,GACAtnH,EAAA7rH,EAAAozO,OAAA,GAAA7rF,EAAAvnJ,EAAAozO,OAAA,GACAG,GAAAA,EAAA1nH,EAAA,GAAA47D,EAAA,IAAA8rD,GAAAA,EAAA1nH,EAAA,GAAA47D,EAAA,IAAA8rD,EACA7sG,GAAAA,EAAA6gB,EAAA,GAAAO,EAAA,IAAAphB,GAAAA,EAAA6gB,EAAA,GAAAO,EAAA,IAAAphB,CACAnoI,GAAAg8K,EAAAh8K,EAAA6K,KAAA87I,KAAAquF,EAAA7sG,IACA9hI,IAAA6iL,EAAA,GAAA57D,EAAA,IAAA,GAAA47D,EAAA,GAAA57D,EAAA,IAAA,GACAlsH,IAAAmoJ,EAAA,GAAAP,EAAA,IAAA,GAAAO,EAAA,GAAAP,EAAA,IAAA,OAEA,CAAA,IAAAvnJ,EAAAmzO,OACA,MADAvuO,GAAA5E,EAAAmzO,OAAA,GAAAxzO,EAAAK,EAAAmzO,OAAA,GAEAnzO,EAAAmlB,KAAA,QAAA+tN,EAAAtlD,EAAArvL,EAAAqG,EAAAjF,GAAAK,EAAAy6E,OAAA+3J,IAGA,QAAA9rD,KACA,GAEA1nL,GAAAT,EAFAyB,EAAA4mL,EAAA/nL,KAAAwH,WACAghL,EAAA5oL,EAAA8H,MAAAga,eACAxhB,EAAAsoL,EAAAtnL,MAKA,KAHA+xO,KACAnrD,GAAA/+J,aAAA++J,GACAA,EAAAx8K,WAAA,WAAAw8K,EAAA,MAAA2sD,GACAt0O,EAAA,EAAAA,EAAAD,IAAAC,EACAT,EAAA8oL,EAAAroL,GACAgB,EAAAmzO,QAAAnzO,EAAAmzO,OAAA,KAAA50O,EAAA0jI,iBAAAjiI,GAAAmzO,OACAnzO,EAAAozO,QAAApzO,EAAAozO,OAAA,KAAA70O,EAAA0jI,kBAAAjiI,GAAAozO,MAEApzO,GAAAozO,SAAApzO,EAAAmzO,SAAAnzO,EAAAmzO,OAAAnzO,EAAAozO,aAAApzO,GAAAozO,QACApzO,EAAAmzO,OAAAnzO,EAAAmzO,OAAA,GAAAt0O,KAAA+yO,OAAAl7J,OAAA12E,EAAAmzO,OAAA,IACAnzO,EAAA0D,MAnUA,GAWA2vO,GACA1sD,EAZAjmL,EAAAsxO,GACAv3J,EAAAw3J,GACAiB,EAAAX,GACAxrJ,EAAAorJ,GACA5rD,EAAA+rD,GACAO,GAAA,EAAApoM,EAAAA,GACA+nM,KAAA/nM,EAAAA,GAAAA,EAAAA,IAAAA,EAAAA,EAAAA,EAAAA,IACAj+B,EAAA,IACAmjL,EAAAtB,GACAjH,KACAI,EAAA7pK,EAAA,QAAA,OAAA,OAGA21N,EAAA,IACAL,EAAA,IACA9rD,EAAA,CAoWA,OApVAhiK,GAAA27B,UAAA,SAAA3G,EAAA2G,GACA,GAAAg+H,GAAA3kI,EAAA8Q,UAAA9Q,EAAA8Q,YAAA9Q,CACA2kI,GAAAwE,SAAA,SAAA4uD,IACA/3L,IAAA2kI,EACAsS,EAAAj3I,EAAA2G,GAEAg+H,EAAAwT,YAAAzxL,KAAA,WACA+lL,EAAA/nL,KAAAwH,WACA5C,QACA0hB,KAAA,KAAA,kBAAA27B,GAAAA,EAAAv/C,MAAA1C,KAAAwH,WAAAy6C,GACAp9C,SAKAyhB,EAAAquN,QAAA,SAAA10D,EAAA7rK,GACAkS,EAAAsuN,QAAA30D,EAAA,WAGA,MAFAjgL,MAAA+yO,OAAA3+N,GACA,kBAAAA,GAAAA,EAAA1R,MAAA1C,KAAAwH,WAAA4M,MAKAkS,EAAAsuN,QAAA,SAAA30D,EAAA7rK,GACAkS,EAAA27B,UAAAg+H,EAAA,WACA,GAAAxgL,GAAAm8E,EAAAl5E,MAAA1C,KAAAwH,WACAu5J,EAAA/gK,KAAA+yO,OACAnqD,EAAA8rB,EAAAj1M,GACAutH,EAAA+zC,EAAAlpF,OAAA+wG,GACAr0D,EAAA,kBAAAngH,GAAAA,EAAA1R,MAAA1C,KAAAwH,WAAA4M,CACA,OAAAigO,GAAAtlD,EAAArT,EAAA3a,EAAAxsC,GAAAq0D,EAAA57D,GAAAvtH,EAAAk0O,MAIArtN,EAAAuuN,YAAA,SAAA50D,EAAAp/K,EAAAO,GACAklB,EAAA27B,UAAAg+H,EAAA,WACA,MAAAo0D,GAAAr0O,KAAA+yO,OAAAhkD,UACA,kBAAAluL,GAAAA,EAAA6B,MAAA1C,KAAAwH,WAAA3G,EACA,kBAAAO,GAAAA,EAAAsB,MAAA1C,KAAAwH,WAAApG,GACAw6E,EAAAl5E,MAAA1C,KAAAwH,WAAAmsO,MAIArtN,EAAAwuN,YAAA,SAAA70D,EAAAp/K,EAAAO,GACAklB,EAAA27B,UAAAg+H,EAAA,WACA,GAAAxgL,GAAAm8E,EAAAl5E,MAAA1C,KAAAwH,WACA9H,EAAAM,KAAA+yO,OACAhtO,EAAA2uM,EAAAj1M,EACA,OAAA40O,GAAArB,GAAAjkD,UAAAhpL,EAAA,GAAAA,EAAA,IAAA21K,MAAAh8K,EAAA0U,GAAA26K,UACA,kBAAAluL,IAAAA,EAAA6B,MAAA1C,KAAAwH,YAAA3G,EACA,kBAAAO,IAAAA,EAAAsB,MAAA1C,KAAAwH,YAAApG,GACA3B,EAAAk0O,MAyDAM,EAAAjpO,WACApG,MAAA,WAKA,MAJA,MAAA5E,KAAAksB,SACAlsB,KAAA0a,MAAA6tK,EAAA3hL,KAAA5G,MAAA,EACAA,KAAA68L,KAAA,UAEA78L,MAEAsmB,KAAA,SAAAjE,EAAA4/B,GAMA,MALAjiD,MAAAwmL,OAAA,UAAAnkK,IAAAriB,KAAAwmL,MAAA,GAAAvkI,EAAA41B,OAAA73E,KAAAwmL,MAAA,KACAxmL,KAAAs0O,QAAA,UAAAjyN,IAAAriB,KAAAs0O,OAAA,GAAAryL,EAAA41B,OAAA73E,KAAAs0O,OAAA,KACAt0O,KAAAu0O,QAAA,UAAAlyN,IAAAriB,KAAAu0O,OAAA,GAAAtyL,EAAA41B,OAAA73E,KAAAu0O,OAAA,KACAv0O,KAAAs7B,KAAAy3M,OAAA9wL,EACAjiD,KAAA68L,KAAA,QACA78L,MAEA6E,IAAA,WAMA,MALA,MAAA7E,KAAAksB,SACAq8J,EAAA52K,OAAA3R,KAAA0a,MAAA,GACA1a,KAAA0a,OAAA,EACA1a,KAAA68L,KAAA,QAEA78L,MAEA68L,KAAA,SAAA51L,GACAu+K,GAAA,GAAAotD,IAAAtsN,EAAArf,EAAAjH,KAAAs7B,KAAAy3M,QAAApqD,EAAAjmL,MAAAimL,GAAA1hL,EAAAjH,KAAAs7B,KAAAt7B,KAAAs8C,SAkKAh2B,EAAA4hE,WAAA,SAAAtlF,GACA,MAAA4E,WAAAtG,QAAAgnF,EAAA,kBAAAtlF,GAAAA,EAAA+vO,IAAA/vO,GAAA0jB,GAAA4hE,GAGA5hE,EAAAzkB,OAAA,SAAAe,GACA,MAAA4E,WAAAtG,QAAAW,EAAA,kBAAAe,GAAAA,EAAA+vO,KAAA/vO,GAAA0jB,GAAAzkB,GAGAykB,EAAAohK,UAAA,SAAA9kL,GACA,MAAA4E,WAAAtG,QAAAwmL,EAAA,kBAAA9kL,GAAAA,EAAA+vO,KAAA/vO,GAAA0jB,GAAAohK,GAGAphK,EAAAs1D,OAAA,SAAAh5E,GACA,MAAA4E,WAAAtG,QAAA06E,EAAA,kBAAAh5E,GAAAA,EAAA+vO,MAAA/vO,EAAA,GAAA,IAAAA,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAA,EAAA,GAAA,MAAA0jB,GAAAs1D,GAGAt1D,EAAA0tN,YAAA,SAAApxO,GACA,MAAA4E,WAAAtG,QAAA8yO,EAAA,IAAApxO,EAAA,GAAAoxO,EAAA,IAAApxO,EAAA,GAAA0jB,IAAA0tN,EAAA,GAAAA,EAAA,KAGA1tN,EAAAqtN,gBAAA,SAAA/wO,GACA,MAAA4E,WAAAtG,QAAAyyO,EAAA,GAAA,IAAA/wO,EAAA,GAAA,GAAA+wO,EAAA,GAAA,IAAA/wO,EAAA,GAAA,GAAA+wO,EAAA,GAAA,IAAA/wO,EAAA,GAAA,GAAA+wO,EAAA,GAAA,IAAA/wO,EAAA,GAAA,GAAA0jB,KAAAqtN,EAAA,GAAA,GAAAA,EAAA,GAAA,KAAAA,EAAA,GAAA,GAAAA,EAAA,GAAA,MAGArtN,EAAA+tN,UAAA,SAAAzxO,GACA,MAAA4E,WAAAtG,QAAAmzO,EAAAzxO,EAAA0jB,GAAA+tN,GAGA/tN,EAAA3Y,SAAA,SAAA/K,GACA,MAAA4E,WAAAtG,QAAAyM,GAAA/K,EAAA0jB,GAAA3Y,GAGA2Y,EAAAwqK,YAAA,SAAAluL,GACA,MAAA4E,WAAAtG,QAAA4vL,EAAAluL,EAAA0jB,GAAAwqK,GAGAxqK,EAAA9C,GAAA,WACA,GAAAjQ,GAAAo1K,EAAAnlK,GAAA9gB,MAAAimL,EAAAnhL,UACA,OAAA+L,KAAAo1K,EAAAriK,EAAA/S,GAGA+S,EAAAuiK,cAAA,SAAAjmL,GACA,MAAA4E,WAAAtG,QAAAonL,GAAA1lL,GAAAA,GAAAA,EAAA0jB,GAAA/b,KAAA87I,KAAAiiC,IAGAhiK,EAn4iBA,GAsCAyuN,IAAA/8D,EAAAD,GACAuC,GAAAy6D,GAAAnwN,MACAowN,GAAAD,GAAApuN,KAoHA+5B,GAAAvzC,MAAAnC,UAEArI,GAAA+9C,GAAA/9C,MACAqG,GAAA03C,GAAA13C,IA0BAuwK,GAAAhvK,KAAA87I,KAAA,IACAmzB,GAAAjvK,KAAA87I,KAAA,IACAxqD,GAAAtxF,KAAA87I,KAAA,GA2WAu2B,GAAAzvK,MAAAnC,UAAArI,MAMAmT,GAAA,EACA8O,GAAA,EACAye,GAAA,EACA1c,GAAA,EACA+1J,GAAA,KAwKA3qK,IAAAwB,MAAA,aAuBA2pK,GAAAlyK,UAAA8T,EAAA9T,WACAoG,YAAA8rK,EACA15J,GAAA,SAAA0hK,EAAAp2D,GACA,GAEApvH,GAFAkD,EAAA5C,KAAA4C,EACAsO,EAAAisK,EAAA+H,EAAA,GAAAtiL,GAEAzC,GAAA,EACAD,EAAAgR,EAAAhQ,MAGA,EAAA,KAAAsG,UAAAtG,OAAA,GAAA,CAOA,GAAA,MAAA4tH,GAAA,kBAAAA,GAAA,KAAA,IAAAhvH,OAAA,qBAAAgvH,EACA,QAAA3uH,EAAAD,GACA,GAAAR,GAAAwlL,EAAAh0K,EAAA/Q,IAAA8G,KAAArE,EAAAlD,GAAAuE,EAAArB,EAAAlD,GAAAwlL,EAAAvoK,KAAAmyG,OACA,IAAA,MAAAA,EAAA,IAAApvH,IAAAkD,GAAAA,EAAAlD,GAAAuE,EAAArB,EAAAlD,GAAAwlL,EAAAvoK,KAAA,KAGA,OAAA3c,MAZA,OAAAG,EAAAD,GAAA,IAAAR,GAAAwlL,EAAAh0K,EAAA/Q,IAAA8G,QAAAvH,EAAA2F,EAAAzC,EAAAlD,GAAAwlL,EAAAvoK,OAAA,MAAAjd,KAcAuuF,KAAA,WACA,GAAAA,MAAArrF,EAAA5C,KAAA4C,CACA,KAAA,GAAAlD,KAAAkD,GAAAqrF,EAAAvuF,GAAAkD,EAAAlD,GAAAiD,OACA,OAAA,IAAAu6K,GAAAjvF,IAEAjtF,KAAA,SAAAiG,EAAAq0B,GACA,IAAAp7B,EAAAsH,UAAAtG,OAAA,GAAA,EAAA,IAAA,GAAAhB,GAAAR,EAAA48C,EAAA,GAAAnvC,OAAAjN,GAAAC,EAAA,EAAAA,EAAAD,IAAAC,EAAAm8C,EAAAn8C,GAAAqH,UAAArH,EAAA,EACA,KAAAH,KAAA4C,EAAAmO,eAAA9J,GAAA,KAAA,IAAAnH,OAAA,iBAAAmH,EACA,KAAAvH,EAAAM,KAAA4C,EAAAqE,GAAA9G,EAAA,EAAAD,EAAAR,EAAAwB,OAAAf,EAAAD,IAAAC,EAAAT,EAAAS,GAAAoT,MAAA7Q,MAAA44B,EAAAghB,IAEA55C,MAAA,SAAAuE,EAAAq0B,EAAAghB,GACA,IAAAt8C,KAAA4C,EAAAmO,eAAA9J,GAAA,KAAA,IAAAnH,OAAA,iBAAAmH,EACA,KAAA,GAAAvH,GAAAM,KAAA4C,EAAAqE,GAAA9G,EAAA,EAAAD,EAAAR,EAAAwB,OAAAf,EAAAD,IAAAC,EAAAT,EAAAS,GAAAoT,MAAA7Q,MAAA44B,EAAAghB,IAuBA,IAAAihI,IAAA,+BAEAnoB,IACAtI,IAAA,6BACAywB,MAAAA,GACA03D,MAAA,+BACAroN,IAAA,uCACAsoN,MAAA,gCAoHAv2D,IAAA3zK,WACAoG,YAAAutK,GACAj+K,YAAA,SAAA23B,GAAA,MAAAr4B,MAAA6+K,QAAA96J,aAAAsU,EAAAr4B,KAAA4+K,QACA76J,aAAA,SAAAsU,EAAA5kB,GAAA,MAAAzT,MAAA6+K,QAAA96J,aAAAsU,EAAA5kB,IACAm6D,cAAA,SAAA5zD,GAAA,MAAAha,MAAA6+K,QAAAjxG,cAAA5zD,IACAvU,iBAAA,SAAAuU,GAAA,MAAAha,MAAA6+K,QAAAp5K,iBAAAuU,IASA,IAAAslK,IAAA,GA6WAqD,IAAA33K,WACArD,IAAA,SAAAgV,GACA3c,KAAA6iL,OAAAhyK,QAAA8L,GACA,IACA3c,KAAA6iL,OAAAj8K,KAAA+V,GACA3c,KAAA4iL,MAAA/vK,aAAA,QAAA7S,KAAA6iL,OAAA7zK,KAAA,QAGA/B,OAAA,SAAA0P,GACA,GAAAxc,GAAAH,KAAA6iL,OAAAhyK,QAAA8L,EACAxc,IAAA,IACAH,KAAA6iL,OAAAlxK,OAAAxR,EAAA,GACAH,KAAA4iL,MAAA/vK,aAAA,QAAA7S,KAAA6iL,OAAA7zK,KAAA,QAGAjI,SAAA,SAAA4V,GACA,MAAA3c,MAAA6iL,OAAAhyK,QAAA8L,IAAA,GAiKA,IAAA2oK,MAIA,IAFA1lL,EAAA8H,MAAA,KAEA,mBAAA7H,UAAA,CAEA,gBADAA,UAAA8V,kBAEA2vK,IAAAliK,WAAA,YAAAC,WAAA,aAsIA,GAAA/K,KAAA,KAWA8wE,IAAAp+E,UAAAohD,GAAAphD,WACAoG,YAAAg4E,GACAnvE,OAAA4jK,GACA7tF,UAAAquF,GACAx8K,OAAA08K,GACA7tK,KAAA6uK,GACA78I,MAAA+7I,GACA5xD,KAAA8yD,GACA3wK,KAAA4wK,GACAl6K,MAAAs6K,GACA95J,MAAAs6J,GACA9uK,KAAA+uK,GACAz/K,KAAA8/K,GACAE,MAAAD,GACAzjI,KAAA2jI,GACAzjI,KAAA0jI,GACAz0K,MAAA00K,GACAn/K,KAAAo/K,GACArqK,KAAA8qK,GACAn9K,MAAAy9K,GACAsC,SAAAjC,GACA2yD,QAAAhyD,GACA5iL,KAAAgjL,GACAx6K,KAAA46K,GACAC,MAAAC,GACAC,MAAAC,GACAlgK,OAAAmgK,GACAr5F,OAAAu5F,GACAj3K,OAAAk3K,GACAl7K,MAAAq7K,GACA9iI,MAAAgjI,GACAhhK,GAAA+hK,GACAzmK,SAAAinK,GAaA,IAAAE,IAAA,CAUAD,IAAAh7K,UAAA84C,GAAA94C,WACAoG,YAAA40K,GACA3gL,IAAA,SAAAi4C,GAEA,IADA,GAAA9qC,GAAAxS,KAAA4C,IACA4P,IAAA8qC,KAAA,KAAAA,EAAAA,EAAA38C,YAAA,MACA,OAAA28C,GAAA9qC,IAEAvO,IAAA,SAAAq5C,EAAA/pC,GACA,MAAA+pC,GAAAt9C,KAAA4C,GAAA2Q,GAEAtG,OAAA,SAAAqwC,GACA,MAAAt9C,MAAA4C,IAAA06C,UAAAA,GAAAt9C,KAAA4C,IAEAkO,SAAA,WACA,MAAA9Q,MAAA4C,IAgHAskL,GAAAl8K,UAAAwY,GAAA,WACA,GAAAjQ,GAAAvT,KAAA4C,EAAA4gB,GAAA9gB,MAAA1C,KAAA4C,EAAA4E,UACA,OAAA+L,KAAAvT,KAAA4C,EAAA5C,KAAAuT,EAiLA,IAGA6hO,IAAA,sBACAC,GAAA,gDACAC,GAAA,iDACAtsD,GAAA,mBACAE,GAAA,mBACAE,GAAA,GAAAz0K,QAAA,WAAAygO,GAAAA,GAAAA,IAAA,QACA/rD,GAAA,GAAA10K,QAAA,WAAA2gO,GAAAA,GAAAA,IAAA,QACAhsD,GAAA,GAAA30K,QAAA,YAAAygO,GAAAA,GAAAA,GAAAC,IAAA,QACA7rD,GAAA,GAAA70K,QAAA,YAAA2gO,GAAAA,GAAAA,GAAAD,IAAA,QACA5rD,GAAA,GAAA90K,QAAA,WAAA0gO,GAAAC,GAAAA,IAAA,QACA3rD,GAAA,GAAAh1K,QAAA,YAAA0gO,GAAAC,GAAAA,GAAAD,IAAA,QAEAzrD,IACA2rD,UAAA,SACAC,aAAA,SACAC,KAAA,MACAC,WAAA,QACAC,MAAA,SACAC,MAAA,SACAC,OAAA,SACAC,MAAA,EACAC,eAAA,SACAC,KAAA,IACAC,WAAA,QACAC,MAAA,SACAC,UAAA,SACAC,UAAA,QACAC,WAAA,QACAC,UAAA,SACAC,MAAA,SACAC,eAAA,QACAC,SAAA,SACAC,QAAA,SACAC,KAAA,MACAC,SAAA,IACAC,SAAA,MACAC,cAAA,SACAC,SAAA,SACAC,UAAA,MACAC,SAAA,SACAC,UAAA,SACAC,YAAA,QACAC,eAAA,QACAC,WAAA,SACAC,WAAA,SACAC,QAAA,QACAC,WAAA,SACAC,aAAA,QACAC,cAAA,QACAC,cAAA,QACAC,cAAA,QACAC,cAAA,MACAC,WAAA,QACAC,SAAA,SACAC,YAAA,MACAC,QAAA,QACAC,QAAA,QACAC,WAAA,QACAC,UAAA,SACAC,YAAA,SACAC,YAAA,QACAC,QAAA,SACAC,UAAA,SACAC,WAAA,SACAC,KAAA;cACAC,UAAA,SACA/tD,KAAA,QACAguD,MAAA,MACAC,YAAA,SACAC,KAAA,QACAC,SAAA,SACAC,QAAA,SACAC,UAAA,SACAC,OAAA,QACAC,MAAA,SACAC,MAAA,SACAC,SAAA,SACAC,cAAA,SACAC,UAAA,QACAC,aAAA,SACAC,UAAA,SACAC,WAAA,SACAC,UAAA,SACAC,qBAAA,SACAC,UAAA,SACAC,WAAA,QACAC,UAAA,SACAC,UAAA,SACAC,YAAA,SACAC,cAAA,QACAC,aAAA,QACAC,eAAA,QACAC,eAAA,QACAC,eAAA,SACAC,YAAA,SACAC,KAAA,MACAC,UAAA,QACAC,MAAA,SACAC,QAAA,SACAC,OAAA,QACAC,iBAAA,QACAC,WAAA,IACAC,aAAA,SACAC,aAAA,QACAC,eAAA,QACAC,gBAAA,QACAC,kBAAA,MACAC,gBAAA,QACAC,gBAAA,SACAC,aAAA,QACAC,UAAA,SACAC,UAAA,SACAC,SAAA,SACAC,YAAA,SACAC,KAAA,IACAC,QAAA,SACAC,MAAA,QACAC,UAAA,QACAC,OAAA,SACAC,UAAA,SACAC,OAAA,SACAC,cAAA,SACAC,UAAA,SACAC,cAAA,SACAC,cAAA,SACAC,WAAA,SACAC,UAAA,SACAC,KAAA,SACAC,KAAA,SACAC,KAAA,SACAC,WAAA,SACAC,OAAA,QACAC,cAAA,QACAC,IAAA,SACAC,UAAA,SACAC,UAAA,QACAC,YAAA,QACAC,OAAA,SACAC,WAAA,SACAC,SAAA,QACAC,SAAA,SACAC,OAAA,SACAC,OAAA,SACAC,QAAA,QACAC,UAAA,QACAC,UAAA,QACAC,UAAA,QACAC,KAAA,SACAC,YAAA,MACAC,UAAA,QACAz4B,IAAA,SACA04B,KAAA,MACAC,QAAA,SACAC,OAAA,SACAC,UAAA,QACAC,OAAA,SACAC,MAAA,SACAC,MAAA,SACAC,WAAA,SACAC,OAAA,SACAC,YAAA,SAGAjsN,IAAAw2J,GAAAp1I,IACA8qM,YAAA,WACA,MAAAz+O,MAAA8pL,MAAA20D,eAEA3xE,IAAA,WACA,MAAA9sK,MAAA8pL,MAAAhd,OAEAh8J,SAAA,WACA,MAAA9Q,MAAA8pL,MAAA,MA+CAv3J,GAAA02J,GAAAa,GAAAxhL,GAAAygL,IACA21D,SAAA,SAAAtqO,GAEA,MADAA,GAAA,MAAAA,EA9NA,EADA,GA+NA7J,KAAA+/J,IA9NA,EADA,GA+NAl2J,GACA,GAAA60K,IAAAjpL,KAAAK,EAAA+T,EAAApU,KAAAmB,EAAAiT,EAAApU,KAAA8S,EAAAsB,EAAApU,KAAAgM,UAEA2yO,OAAA,SAAAvqO,GAEA,MADAA,GAAA,MAAAA,EAnOA,GAmOA7J,KAAA+/J,IAnOA,GAmOAl2J,GACA,GAAA60K,IAAAjpL,KAAAK,EAAA+T,EAAApU,KAAAmB,EAAAiT,EAAApU,KAAA8S,EAAAsB,EAAApU,KAAAgM,UAEA89K,IAAA,WACA,MAAA9pL,OAEAy+O,YAAA,WACA,MAAA,IAAAz+O,KAAAK,GAAAL,KAAAK,GAAA,KACA,GAAAL,KAAAmB,GAAAnB,KAAAmB,GAAA,KACA,GAAAnB,KAAA8S,GAAA9S,KAAA8S,GAAA,KACA,GAAA9S,KAAAgM,SAAAhM,KAAAgM,SAAA,GAEA8gK,IAAA,WACA,MAAA,IAAAA,GAAA9sK,KAAAK,GAAAysK,GAAA9sK,KAAAmB,GAAA2rK,GAAA9sK,KAAA8S,IAEAhC,SAAA,WACA,GAAA3M,GAAAnE,KAAAgM,OACA,OADA7H,GAAAmuB,MAAAnuB,GAAA,EAAAoG,KAAAC,IAAA,EAAAD,KAAAyuD,IAAA,EAAA70D,KACA,IAAAA,EAAA,OAAA,SACAoG,KAAAC,IAAA,EAAAD,KAAAyuD,IAAA,IAAAzuD,KAAAwa,MAAA/kB,KAAAK,IAAA,IAAA,KACAkK,KAAAC,IAAA,EAAAD,KAAAyuD,IAAA,IAAAzuD,KAAAwa,MAAA/kB,KAAAmB,IAAA,IAAA,KACAoJ,KAAAC,IAAA,EAAAD,KAAAyuD,IAAA,IAAAzuD,KAAAwa,MAAA/kB,KAAA8S,IAAA,KACA,IAAA3O,EAAA,IAAA,KAAAA,EAAA,SAqDAouB,GAAAw3J,GAAAE,GAAA3hL,GAAAygL,IACA21D,SAAA,SAAAtqO,GAEA,MADAA,GAAA,MAAAA,EA9SA,EADA,GA+SA7J,KAAA+/J,IA9SA,EADA,GA+SAl2J,GACA,GAAA21K,IAAA/pL,KAAAiG,EAAAjG,KAAAoE,EAAApE,KAAAc,EAAAsT,EAAApU,KAAAgM,UAEA2yO,OAAA,SAAAvqO,GAEA,MADAA,GAAA,MAAAA,EAnTA,GAmTA7J,KAAA+/J,IAnTA,GAmTAl2J,GACA,GAAA21K,IAAA/pL,KAAAiG,EAAAjG,KAAAoE,EAAApE,KAAAc,EAAAsT,EAAApU,KAAAgM,UAEA89K,IAAA,WACA,GAAA7jL,GAAAjG,KAAAiG,EAAA,IAAA,KAAAjG,KAAAiG,EAAA,GACA7B,EAAAkuB,MAAArsB,IAAAqsB,MAAAtyB,KAAAoE,GAAA,EAAApE,KAAAoE,EACAtD,EAAAd,KAAAc,EACAouH,EAAApuH,GAAAA,EAAA,GAAAA,EAAA,EAAAA,GAAAsD,EACA6qH,EAAA,EAAAnuH,EAAAouH,CACA,OAAA,IAAA+5D,IACAiB,GAAAjkL,GAAA,IAAAA,EAAA,IAAAA,EAAA,IAAAgpH,EAAAC,GACAg7D,GAAAjkL,EAAAgpH,EAAAC,GACAg7D,GAAAjkL,EAAA,IAAAA,EAAA,IAAAA,EAAA,IAAAgpH,EAAAC,GACAlvH,KAAAgM,UAGAyyO,YAAA,WACA,OAAA,GAAAz+O,KAAAoE,GAAApE,KAAAoE,GAAA,GAAAkuB,MAAAtyB,KAAAoE,KACA,GAAApE,KAAAc,GAAAd,KAAAc,GAAA,GACA,GAAAd,KAAAgM,SAAAhM,KAAAgM,SAAA,KAYA,IAAAs+K,IAAA//K,KAAAkd,GAAA,IACA0jK,GAAA,IAAA5gL,KAAAkd,GAIAijK,GAAA,OACAD,GAAA,EACAE,GAAA,OACA5pB,GAAA,EAAA,GACAzxC,GAAA,EAAA,GACAC,GAAA,EAAAD,GAAAA,GACAw7D,GAAAx7D,GAAAA,GAAAA,EAoCA/8F,IAAA63J,GAAAS,GAAAviL,GAAAygL,IACA21D,SAAA,SAAAtqO,GACA,MAAA,IAAAg2K,IAAApqL,KAAAc,EA7CA,IA6CA,MAAAsT,EAAA,EAAAA,GAAApU,KAAAmE,EAAAnE,KAAA8S,EAAA9S,KAAAgM,UAEA2yO,OAAA,SAAAvqO,GACA,MAAA,IAAAg2K,IAAApqL,KAAAc,EAhDA,IAgDA,MAAAsT,EAAA,EAAAA,GAAApU,KAAAmE,EAAAnE,KAAA8S,EAAA9S,KAAAgM,UAEA89K,IAAA,WACA,GAAA1oL,IAAApB,KAAAc,EAAA,IAAA,IACAD,EAAAyxB,MAAAtyB,KAAAmE,GAAA/C,EAAAA,EAAApB,KAAAmE,EAAA,IACA0Q,EAAAyd,MAAAtyB,KAAA8S,GAAA1R,EAAAA,EAAApB,KAAA8S,EAAA,GAIA,OAHAjS,GAAA6pL,GAAAK,GAAAlqL,GACAO,EAAAqpL,GAAAM,GAAA3pL,GACAyT,EAAA81K,GAAAI,GAAAl2K,GACA,GAAAo0K,IACA+B,GAAA,UAAAnqL,EAAA,UAAAO,EAAA,SAAAyT,GACAm2K,IAAA,SAAAnqL,EAAA,UAAAO,EAAA,QAAAyT,GACAm2K,GAAA,SAAAnqL,EAAA,SAAAO,EAAA,UAAAyT,GACA7U,KAAAgM,aA4CAumB,GAAA83J,GAAAgB,GAAA/iL,GAAAygL,IACA21D,SAAA,SAAAtqO,GACA,MAAA,IAAAi2K,IAAArqL,KAAAiG,EAAAjG,KAAAe,EAAAf,KAAAc,EA3GA,IA2GA,MAAAsT,EAAA,EAAAA,GAAApU,KAAAgM,UAEA2yO,OAAA,SAAAvqO,GACA,MAAA,IAAAi2K,IAAArqL,KAAAiG,EAAAjG,KAAAe,EAAAf,KAAAc,EA9GA,IA8GA,MAAAsT,EAAA,EAAAA,GAAApU,KAAAgM,UAEA89K,IAAA,WACA,MAAAK,IAAAnqL,MAAA8pL,SAIA,IAAAv1K,KAAA,OACAxB,GAAA,QACA9R,IAAA,OACAqT,IAAA,OACAhC,GAAA,QACAm5K,GAAAn5K,GAAAgC,GACAo3K,GAAAp5K,GAAAS,GACAy4K,GAAAz4K,GAAA9R,GAAAqT,GAAAC,EA2BAge,IAAAg5J,GAAAK,GAAAtjL,GAAAygL,IACA21D,SAAA,SAAAtqO,GAEA,MADAA,GAAA,MAAAA,EA9eA,EADA,GA+eA7J,KAAA+/J,IA9eA,EADA,GA+eAl2J,GACA,GAAAm3K,IAAAvrL,KAAAiG,EAAAjG,KAAAoE,EAAApE,KAAAc,EAAAsT,EAAApU,KAAAgM,UAEA2yO,OAAA,SAAAvqO,GAEA,MADAA,GAAA,MAAAA,EAnfA,GAmfA7J,KAAA+/J,IAnfA,GAmfAl2J,GACA,GAAAm3K,IAAAvrL,KAAAiG,EAAAjG,KAAAoE,EAAApE,KAAAc,EAAAsT,EAAApU,KAAAgM,UAEA89K,IAAA,WACA,GAAA7jL,GAAAqsB,MAAAtyB,KAAAiG,GAAA,GAAAjG,KAAAiG,EAAA,KAAAqkL,GACAxpL,GAAAd,KAAAc,EACAqD,EAAAmuB,MAAAtyB,KAAAoE,GAAA,EAAApE,KAAAoE,EAAAtD,GAAA,EAAAA,GACAsuL,EAAA7kL,KAAAid,IAAAvhB,GACAqpL,EAAA/kL,KAAAq6J,IAAA3+J,EACA,OAAA,IAAAgjL,IACA,KAAAnoL,EAAAqD,GAAAoQ,GAAA66K,EAAAr8K,GAAAu8K,IACA,KAAAxuL,EAAAqD,GAAAlD,GAAAmuL,EAAA96K,GAAAg7K,IACA,KAAAxuL,EAAAqD,GAAAmO,GAAA88K,IACApvL,KAAAgM,YAuEA,IAiOAoiL,IACAC,GACAC,GACAE,GAqPAoD,GACAM,GA1dAzE,GAAA,QAAAmxD,GAAAx9O,GAGA,QAAAy9O,GAAAj6O,EAAAC,GACA,GAAAxE,GAAAssL,GAAA/nL,EAAAklL,GAAAllL,IAAAvE,GAAAwE,EAAAilL,GAAAjlL,IAAAxE,GACAc,EAAAwrL,EAAA/nL,EAAAzD,EAAA0D,EAAA1D,GACA2R,EAAA65K,EAAA/nL,EAAAkO,EAAAjO,EAAAiO,GACA9G,EAAAwgL,GAAA5nL,EAAAoH,QAAAnH,EAAAmH,QACA,OAAA,UAAAtM,GAKA,MAJAkF,GAAAvE,EAAAA,EAAAX,GACAkF,EAAAzD,EAAAA,EAAAzB,GACAkF,EAAAkO,EAAAA,EAAApT,GACAkF,EAAAoH,QAAAA,EAAAtM,GACAkF,EAAA,IAZA,GAAA+nL,GAAAJ,GAAAnrL,EAkBA,OAFAy9O,GAAAtyD,MAAAqyD,EAEAC,GACA,GA4BAjd,GAAAn1C,GAAAP,IACA4yD,GAAAryD,GAAAN,IAqDAoB,GAAA,8CACAC,GAAA,GAAA74K,QAAA44K,GAAA7vK,OAAA,KA+FAswK,GAAA,IAAAzjL,KAAAkd,GAEA0mK,IACA5S,WAAA,EACAC,WAAA,EACAuS,OAAA,EACAD,MAAA,EACA73G,OAAA,EACAC,OAAA,GAqGAuhH,GAAA9I,GAAAT,GAAA,OAAA,MAAA,QACA+G,GAAAtG,GAAAJ,GAAA,KAAA,IAAA,KAEAyB,GAAAzlL,KAAAw0O,MACA5uD,GAAA,EACAD,GAAA,EACAH,GAAA,MA8EAivD,GAAA1uD,GAAAhE,IACA2yD,GAAA3uD,GAAA9D,IAgCA0yD,GAAAzuD,GAAAnE,IACA6yD,GAAA1uD,GAAAjE,IA0BA4yD,GAAA1uD,GAAApE,IACA+yD,GAAA3uD,GAAAlE,IAiBAxlD,GAAA,EACAz4G,GAAA,EACA/iB,GAAA,EACAymL,GAAA,IAGAH,GAAA,EACAZ,GAAA,EACAI,GAAA,EACAD,GAAA,gBAAAiuD,cAAAA,YAAAzzO,IAAAyzO,YAAA1zO,KACAulL,GAAA,gBAAApxL,SAAAA,OAAAsL,sBAAAtL,OAAAsL,sBAAAqD,KAAA3O,QAAA,SAAA8F,GAAAyF,WAAAzF,EAAA,IAgBA0rL,IAAAvmL,UAAA6D,GAAA7D,WACAoG,YAAAmgL,GACAG,QAAA,SAAA5iE,EAAAhmG,EAAA2O,GACA,GAAA,kBAAAq3F,GAAA,KAAA,IAAA1yG,WAAA,6BACAqb,IAAA,MAAAA,EAAA5rB,MAAA4rB,IAAA,MAAA3O,EAAA,GAAAA,GACA9oB,KAAA4+K,OAAAsT,KAAAlyL,OACAkyL,GAAAA,GAAAtT,MAAA5+K,KACA4xL,GAAA5xL,KACAkyL,GAAAlyL,MAEAA,KAAAwxL,MAAA1iE,EACA9uH,KAAAyxL,MAAAh6J,EACA06J,MAEA3jL,KAAA,WACAxO,KAAAwxL,QACAxxL,KAAAwxL,MAAA,KACAxxL,KAAAyxL,MAAA7lJ,EAAAA,EACAumJ,OAyFA,IAAAS,IAAA9zK,EAAA,QAAA,MAAA,SAAA,aACAg0K,MAEAE,GAAA,EACAI,GAAA,EACAG,GAAA,EACAJ,GAAA,EACAE,GAAA,EACAG,GAAA,EACAF,GAAA,EAwiBA2D,GAAA7qI,GAAAphD,UAAAoG,YA4KAoB,GAAA,EAiBA+sO,GAAAnzL,GAAAphD,SAEAirL,IAAAjrL,UAAAmxB,GAAAnxB,WACAoG,YAAA6kL,GACAh8K,OAAA28K,GACA5mG,UAAA8mG,GACAj1L,OAAAm0L,GACAtwL,MAAAywL,GACA/pI,UAAA4qI,GACA76J,WAAA67J,GACAh3L,KAAAu+O,GAAAv+O,KACAggL,MAAAu+D,GAAAv+D,MACA1jI,KAAAiiM,GAAAjiM,KACAE,KAAA+hM,GAAA/hM,KACA/wC,MAAA8yO,GAAA9yO,MACAzK,KAAAu9O,GAAAv9O,KACAwhB,GAAAizK,GACA1/K,KAAAi+K,GACAE,UAAAK,GACA7wL,MAAA8yL,GACAE,WAAAE,GACAr3L,KAAAw3L,GACA9qL,OAAA0pL,GACA9D,MAAAmB,GACAlrK,MAAA4sK,GACA/nL,SAAAkoL,GACA9C,KAAAgD,GACAlxL,IAAAuzL,GA+BA,IAEAonD,IAAA,QAAA9pG,GAAAj2I,GAGA,QAAA+/O,GAAA9/O,GACA,MAAA6K,MAAA+/J,IAAA5qK,EAAAD,GAKA,MARAA,IAAAA,EAMA+/O,EAAAhzC,SAAA92D,EAEA8pG,GAXA,GAcAC,GAAA,QAAA/pG,GAAAj2I,GAGA,QAAAggP,GAAA//O,GACA,MAAA,GAAA6K,KAAA+/J,IAAA,EAAA5qK,EAAAD,GAKA,MARAA,IAAAA,EAMAggP,EAAAjzC,SAAA92D,EAEA+pG,GAvBA,GA0BAC,GAAA,QAAAhqG,GAAAj2I,GAGA,QAAAigP,GAAAhgP,GACA,QAAAA,GAAA,IAAA,EAAA6K,KAAA+/J,IAAA5qK,EAAAD,GAAA,EAAA8K,KAAA+/J,IAAA,EAAA5qK,EAAAD,IAAA,EAKA,MARAA,IAAAA,EAMAigP,EAAAlzC,SAAA92D,EAEAgqG,GAnCA,GAsCAzmD,GAAA1uL,KAAAkd,GACAqxK,GAAAG,GAAA,EAsCA7I,GAAA,EAAA,GACAuJ,GAAA,EAAA,GACAD,GAAA,EAAA,GACAE,GAAA,IACAE,GAAA,EAAA,GACAD,GAAA,GAAA,GACAE,GAAA,MACAC,GAAA,GAAA,GACAC,GAAA,GAAA,GACAhK,GAAA,EAAAG,GAAAA,GAgBAuvD,GAAA,QAAAjqG,GAAAtxI,GAGA,QAAAu7O,GAAAjgP,GACA,MAAAA,GAAAA,IAAA0E,EAAA,GAAA1E,EAAA0E,GAKA,MARAA,IAAAA,EAMAu7O,EAAAC,UAAAlqG,EAEAiqG,GAXA,SAcAE,GAAA,QAAAnqG,GAAAtxI,GAGA,QAAAy7O,GAAAngP,GACA,QAAAA,EAAAA,IAAA0E,EAAA,GAAA1E,EAAA0E,GAAA,EAKA,MARAA,IAAAA,EAMAy7O,EAAAD,UAAAlqG,EAEAmqG,GAvBA,SA0BAC,GAAA,QAAApqG,GAAAtxI,GAGA,QAAA07O,GAAApgP,GACA,QAAAA,GAAA,GAAA,EAAAA,EAAAA,IAAA0E,EAAA,GAAA1E,EAAA0E,IAAA1E,GAAA,GAAAA,IAAA0E,EAAA,GAAA1E,EAAA0E,GAAA,GAAA,EAKA,MARAA,IAAAA,EAMA07O,EAAAF,UAAAlqG,EAEAoqG,GAnCA,SAsCAC,GAAA,EAAAx1O,KAAAkd,GAIAu4N,GAAA,QAAAtqG,GAAAvxI,EAAA4B,GAGA,QAAAi6O,GAAAtgP,GACA,MAAAyE,GAAAoG,KAAA+/J,IAAA,EAAA,KAAA5qK,GAAA6K,KAAAq6J,KAAAxgK,EAAA1E,GAAAqG,GAHA,GAAA3B,GAAAmG,KAAA6jM,KAAA,GAAAjqM,EAAAoG,KAAAC,IAAA,EAAArG,MAAA4B,GAAAg6O,GASA,OAHAC,GAAAC,UAAA,SAAA97O,GAAA,MAAAuxI,GAAAvxI,EAAA4B,EAAAg6O,KACAC,EAAAE,OAAA,SAAAn6O,GAAA,MAAA2vI,GAAAvxI,EAAA4B,IAEAi6O,GAbA,EACA,IAeAG,GAAA,QAAAzqG,GAAAvxI,EAAA4B,GAGA,QAAAo6O,GAAAzgP,GACA,MAAA,GAAAyE,EAAAoG,KAAA+/J,IAAA,GAAA,IAAA5qK,GAAAA,IAAA6K,KAAAq6J,KAAAllK,EAAA0E,GAAA2B,GAHA,GAAA3B,GAAAmG,KAAA6jM,KAAA,GAAAjqM,EAAAoG,KAAAC,IAAA,EAAArG,MAAA4B,GAAAg6O,GASA,OAHAI,GAAAF,UAAA,SAAA97O,GAAA,MAAAuxI,GAAAvxI,EAAA4B,EAAAg6O,KACAI,EAAAD,OAAA,SAAAn6O,GAAA,MAAA2vI,GAAAvxI,EAAA4B,IAEAo6O,GA1BA,EACA,IA4BAC,GAAA,QAAA1qG,GAAAvxI,EAAA4B,GAGA,QAAAq6O,GAAA1gP,GACA,QAAAA,EAAA,EAAAA,EAAA,GAAA,EACAyE,EAAAoG,KAAA+/J,IAAA,EAAA,GAAA5qK,GAAA6K,KAAAq6J,KAAAxgK,EAAA1E,GAAAqG,GACA,EAAA5B,EAAAoG,KAAA+/J,IAAA,GAAA,GAAA5qK,GAAA6K,KAAAq6J,KAAAxgK,EAAA1E,GAAAqG,IAAA,EALA,GAAA3B,GAAAmG,KAAA6jM,KAAA,GAAAjqM,EAAAoG,KAAAC,IAAA,EAAArG,MAAA4B,GAAAg6O,GAWA,OAHAK,GAAAH,UAAA,SAAA97O,GAAA,MAAAuxI,GAAAvxI,EAAA4B,EAAAg6O,KACAK,EAAAF,OAAA,SAAAn6O,GAAA,MAAA2vI,GAAAvxI,EAAA4B,IAEAq6O,GAzCA,EACA,IA2CAjmD,IACA1iK,KAAA,KACA3O,MAAA,EACAnb,SAAA,IACAolL,KAAA6F,GAkCAxsI,IAAAphD,UAAAyoL,UAAAE,GACAvnI,GAAAphD,UAAAmxB,WAAAi+J,EAEA,IAAAC,KAAA,MAwCA6B,IAAAv/K,KAAA,QACAs/K,IAAAt/K,KAAA,SACA8/K,IAAA9/K,KAAA,UACA+/K,IAAA//K,KAAA,UAEAxZ,IACAwZ,KAAA,IACA2+K,SAAA,IAAA,KAAAtyL,IAAA/B,IACA+R,MAAA,SAAAnY,EAAApB,GAAA,MAAAoB,MAAAA,EAAA,GAAApB,EAAA,GAAA,KAAAoB,EAAA,GAAApB,EAAA,GAAA,MACAiqC,OAAA,SAAA22M,GAAA,MAAAA,KAAAA,EAAA,GAAA,GAAAA,EAAA,GAAA,MAGAhrO,IACAsH,KAAA,IACA2+K,SAAA,IAAA,KAAAtyL,IAAA/B,IACA+R,MAAA,SAAA5X,EAAA3B,GAAA,MAAA2B,MAAA3B,EAAA,GAAA,GAAA2B,EAAA,KAAA3B,EAAA,GAAA,GAAA2B,EAAA,MACAsoC,OAAA,SAAA22M,GAAA,MAAAA,KAAAA,EAAA,GAAA,GAAAA,EAAA,GAAA,MAGAhlD,IACA1+K,KAAA,KACA2+K,SAAA,IAAA,IAAA,IAAA,IAAA,KAAA,KAAA,KAAA,MAAAtyL,IAAA/B,IACA+R,MAAA,SAAAqnO,GAAA,MAAAA,IACA32M,OAAA,SAAA22M,GAAA,MAAAA,KAGA1lK,IACAnR,QAAA,YACApd,UAAA,OACAlsD,EAAA,YACAT,EAAA,YACA2E,EAAA,YACA3C,EAAA,YACAi/D,GAAA,cACA78D,GAAA,cACAoP,GAAA,cACAomC,GAAA,eAGAsjJ,IACAl9L,EAAA,IACAgC,EAAA,IACAi/D,GAAA,KACA78D,GAAA,KACAoP,GAAA,KACAomC,GAAA,MAGAujJ,IACA18L,EAAA,IACAkE,EAAA,IACAs8D,GAAA,KACA78D,GAAA,KACAoP,GAAA,KACAomC,GAAA,MAGA4jJ,IACAzzH,QAAA,EACApd,UAAA,EACAlsD,EAAA,KACAT,EAAA,EACA2E,EAAA,KACA3C,GAAA,EACAi/D,IAAA,EACA78D,GAAA,EACAoP,GAAA,EACAomC,IAAA,GAGA6jJ,IACA1zH,QAAA,EACApd,UAAA,EACAlsD,GAAA,EACAT,EAAA,KACA2E,EAAA,EACA3C,EAAA,KACAi/D,IAAA,EACA78D,IAAA,EACAoP,GAAA,EACAomC,GAAA,GAmcA7xB,GAAAjd,KAAAid,IACAo9I,GAAAr6J,KAAAq6J,IACA07E,GAAA/1O,KAAAkd,GACA23K,GAAAkhD,GAAA,EACAviD,GAAA,EAAAuiD,GACAxiD,GAAAvzL,KAAAC,IAyHA00L,GAAA/xL,MAAAnC,UAAArI,MAQA49O,GAAAh2O,KAAAkd,GACA+4N,GAAA,EAAAD,GAEAE,GAAAD,GADA,IAaAliD,IAAAtzL,UAAA2sB,GAAA3sB,WACAoG,YAAAktL,GACA/6B,OAAA,SAAA1iK,EAAAO,GACApB,KAAA4C,GAAA,KAAA5C,KAAAu+L,IAAAv+L,KAAAy+L,KAAA59L,GAAA,KAAAb,KAAAw+L,IAAAx+L,KAAA0+L,KAAAt9L,IAEA4iK,UAAA,WACA,OAAAhkK,KAAAy+L,MACAz+L,KAAAy+L,IAAAz+L,KAAAu+L,IAAAv+L,KAAA0+L,IAAA1+L,KAAAw+L,IACAx+L,KAAA4C,GAAA,MAGA4gK,OAAA,SAAA3iK,EAAAO,GACApB,KAAA4C,GAAA,KAAA5C,KAAAy+L,KAAA59L,GAAA,KAAAb,KAAA0+L,KAAAt9L,IAEAs+L,iBAAA,SAAAv9B,EAAAC,EAAAvhK,EAAAO,GACApB,KAAA4C,GAAA,MAAAu/J,EAAA,MAAAC,EAAA,KAAApiK,KAAAy+L,KAAA59L,GAAA,KAAAb,KAAA0+L,KAAAt9L,IAEA0mO,cAAA,SAAA3lE,EAAAC,EAAAC,EAAAC,EAAAzhK,EAAAO,GACApB,KAAA4C,GAAA,MAAAu/J,EAAA,MAAAC,EAAA,MAAAC,EAAA,MAAAC,EAAA,KAAAtiK,KAAAy+L,KAAA59L,GAAA,KAAAb,KAAA0+L,KAAAt9L,IAEAs/O,MAAA,SAAAv+E,EAAAC,EAAAC,EAAAC,EAAAjiK,GACA8hK,GAAAA,EAAAC,GAAAA,EAAAC,GAAAA,EAAAC,GAAAA,EAAAjiK,GAAAA,CACA,IAAA45K,GAAAj6K,KAAAy+L,IACAuI,EAAAhnM,KAAA0+L,IACAosB,EAAAzoD,EAAAF,EACA4oD,EAAAzoD,EAAAF,EACAkhE,EAAArpD,EAAA9X,EACAohE,EAAAv8B,EAAA5kC,EACAu+E,EAAArd,EAAAA,EAAAC,EAAAA,CAGA,IAAAljO,EAAA,EAAA,KAAA,IAAAP,OAAA,oBAAAO,EAGA,IAAA,OAAAL,KAAAy+L,IACAz+L,KAAA4C,GAAA,KAAA5C,KAAAy+L,IAAAt8B,GAAA,KAAAniK,KAAA0+L,IAAAt8B,OAIA,IAAAu+E,EApDA,KAyDA,GAAAp2O,KAAA+1B,IAAAijM,EAAAzY,EAAAC,EAAAuY,GAzDA,MAyDAjjO,EAKA,CACA,GAAAugP,GAAAv+E,EAAA4X,EACA4mE,EAAAv+E,EAAA0kC,EACA85C,EAAAh2B,EAAAA,EAAAC,EAAAA,EACAg2B,EAAAH,EAAAA,EAAAC,EAAAA,EACAG,EAAAz2O,KAAA87I,KAAAy6F,GACAG,EAAA12O,KAAA87I,KAAAs6F,GACA7/O,EAAAT,EAAAkK,KAAA86M,KAAAk7B,GAAAh2O,KAAA2jM,MAAA4yC,EAAAH,EAAAI,IAAA,EAAAC,EAAAC,KAAA,GACAC,EAAApgP,EAAAmgP,EACAE,EAAArgP,EAAAkgP,CAGAz2O,MAAA+1B,IAAA4gN,EAAA,GA1EA,OA2EAlhP,KAAA4C,GAAA,KAAAu/J,EAAA++E,EAAA5d,GAAA,KAAAlhE,EAAA8+E,EAAA3d,IAGAvjO,KAAA4C,GAAA,IAAAvC,EAAA,IAAAA,EAAA,WAAAkjO,EAAAqd,EAAAtd,EAAAud,GAAA,KAAA7gP,KAAAy+L,IAAAt8B,EAAAg/E,EAAAr2B,GAAA,KAAA9qN,KAAA0+L,IAAAt8B,EAAA++E,EAAAp2B,OApBA/qN,MAAA4C,GAAA,KAAA5C,KAAAy+L,IAAAt8B,GAAA,KAAAniK,KAAA0+L,IAAAt8B,UAuBA0B,IAAA,SAAAjjK,EAAAO,EAAAf,EAAAs6C,EAAAouB,EAAAq4K,GACAvgP,GAAAA,EAAAO,GAAAA,EAAAf,GAAAA,CACA,IAAAunF,GAAAvnF,EAAAkK,KAAAid,IAAAmzB,GACAmtC,EAAAznF,EAAAkK,KAAAq6J,IAAAjqH,GACAs/H,EAAAp5K,EAAA+mF,EACAo/G,EAAA5lM,EAAA0mF,EACAihF,EAAA,EAAAq4E,EACAhd,EAAAgd,EAAAzmM,EAAAouB,EAAAA,EAAApuB,CAGA,IAAAt6C,EAAA,EAAA,KAAA,IAAAP,OAAA,oBAAAO,EAGA,QAAAL,KAAAy+L,IACAz+L,KAAA4C,GAAA,IAAAq3K,EAAA,IAAA+sB,GAIAz8L,KAAA+1B,IAAAtgC,KAAAy+L,IAAAxkB,GAnGA,MAmGA1vK,KAAA+1B,IAAAtgC,KAAA0+L,IAAAsI,GAnGA,QAoGAhnM,KAAA4C,GAAA,IAAAq3K,EAAA,IAAA+sB,GAIA3mM,IAGA+jO,EAAA,IAAAA,EAAAA,EAAAoc,GAAAA,IAGApc,EAAAqc,GACAzgP,KAAA4C,GAAA,IAAAvC,EAAA,IAAAA,EAAA,QAAA0oK,EAAA,KAAAloK,EAAA+mF,GAAA,KAAAxmF,EAAA0mF,GAAA,IAAAznF,EAAA,IAAAA,EAAA,QAAA0oK,EAAA,KAAA/oK,KAAAy+L,IAAAxkB,GAAA,KAAAj6K,KAAA0+L,IAAAsI,GAIAo9B,EAnHA,OAoHApkO,KAAA4C,GAAA,IAAAvC,EAAA,IAAAA,EAAA,SAAA+jO,GAAAmc,IAAA,IAAAx3E,EAAA,KAAA/oK,KAAAy+L,IAAA59L,EAAAR,EAAAkK,KAAAid,IAAAuhD,IAAA,KAAA/oE,KAAA0+L,IAAAt9L,EAAAf,EAAAkK,KAAAq6J,IAAA77F,OAGA2K,KAAA,SAAA7yE,EAAAO,EAAAK,EAAAwE,GACAjG,KAAA4C,GAAA,KAAA5C,KAAAu+L,IAAAv+L,KAAAy+L,KAAA59L,GAAA,KAAAb,KAAAw+L,IAAAx+L,KAAA0+L,KAAAt9L,GAAA,MAAAK,EAAA,MAAAwE,EAAA,KAAAxE,EAAA,KAEAqP,SAAA,WACA,MAAA9Q,MAAA4C,GA2FA+8L,IAAA30L,UAAA40L,GAAA50L,WACAoG,YAAAuuL,GACA3nL,IAAA,SAAAqK,GACA,MAPA,IAOAA,IAAAriB,OAEAqF,IAAA,SAAAgd,GACA,MAAAriB,MAVA,IAUAqiB,IAEApe,IAAA,SAAAoe,EAAA9O,GAEA,MADAvT,MAbA,IAaAqiB,GAAA9O,EACAvT,MAEAiN,OAAA,SAAAoV,GACA,GAAAoiK,GAjBA,IAiBApiK,CACA,OAAAoiK,KAAAzkL,aAAAA,MAAAykL,IAEA1/I,MAAA,WACA,IAAA,GAAA0/I,KAAAzkL,MArBA,MAqBAykL,EAAA,UAAAzkL,MAAAykL,IAEA1nI,KAAA,WACA,GAAAA,KACA,KAAA,GAAA0nI,KAAAzkL,MAzBA,MAyBAykL,EAAA,IAAA1nI,EAAAn2C,KAAA69K,EAAA9hL,MAAA,GACA,OAAAo6C,IAEA+E,OAAA,WACA,GAAAA,KACA,KAAA,GAAA2iI,KAAAzkL,MA9BA,MA8BAykL,EAAA,IAAA3iI,EAAAl7C,KAAA5G,KAAAykL,GACA,OAAA3iI,IAEAg4G,QAAA,WACA,GAAAA,KACA,KAAA,GAAA2qB,KAAAzkL,MAnCA,MAmCAykL,EAAA,IAAA3qB,EAAAlzJ,MAAAyb,IAAAoiK,EAAA9hL,MAAA,GAAA4Q,MAAAvT,KAAAykL,IACA,OAAA3qB,IAEAt8G,KAAA,WACA,GAAAA,GAAA,CACA,KAAA,GAAAinI,KAAAzkL,MAxCA,MAwCAykL,EAAA,MAAAjnI,CACA,OAAAA,IAEA/wC,MAAA,WACA,IAAA,GAAAg4K,KAAAzkL,MAAA,GA5CA,MA4CAykL,EAAA,GAAA,OAAA,CACA,QAAA,GAEAziL,KAAA,SAAA6D,GACA,IAAA,GAAA4+K,KAAAzkL,MAhDA,MAgDAykL,EAAA,IAAA5+K,EAAA7F,KAAAykL,GAAAA,EAAA9hL,MAAA,GAAA3C,OAoGA,IAAAqhP,IAAAzhD,GAAA50L,SAEAw1L,IAAAx1L,UAAAy1L,GAAAz1L,WACAoG,YAAAovL,GACAxoL,IAAAqpO,GAAArpO,IACArQ,IAAA,SAAA4L,GAGA,MAFAA,IAAA,GACAvT,KA3JA,IA2JAuT,GAAAA,EACAvT,MAEAiN,OAAAo0O,GAAAp0O,OACA83B,MAAAs8M,GAAAt8M,MACA+c,OAAAu/L,GAAAtkM,KACAS,KAAA6jM,GAAA7jM,KACA/wC,MAAA40O,GAAA50O,MACAzK,KAAAq/O,GAAAr/O,KAqCA,IAAAs/O,IAAAn0O,MAAAnC,UAEAs3L,GAAAg/C,GAAA3+O,MAgDAu/L,UAEA,EAAA,MAAA,GAAA,QACA,IAAA,IAAA,EAAA,UACA,IAAA,IAAA,GAAA,QACA,EAAA,KAAA,IAAA,QACA,EAAA,MAAA,GAAA,MAAA,EAAA,KAAA,IAAA,QACA,EAAA,KAAA,EAAA,UACA,EAAA,KAAA,GAAA,QACA,GAAA,IAAA,EAAA,SACA,EAAA,MAAA,EAAA,SACA,GAAA,IAAA,EAAA,OAAA,IAAA,IAAA,EAAA,UACA,IAAA,IAAA,EAAA,SACA,GAAA,IAAA,IAAA,QACA,EAAA,MAAA,IAAA,QACA,GAAA,IAAA,EAAA,WAiWA2C,MACAD,MACAE,GAAA,GACAC,GAAA,GACAC,GAAA,GA+JAu8C,GAAA/8C,GAAA,KAEAg9C,GAAAD,GAAA39O,MACA69O,GAAAF,GAAA78C,UACAn0J,GAAAgxM,GAAA9wM,OACAixM,GAAAH,GAAAn8C,WACAu8C,GAAAJ,GAAAl8C,WAEAu8C,GAAAp9C,GAAA,MAEAq9C,GAAAD,GAAAh+O,MACAk+O,GAAAF,GAAAl9C,UACAq9C,GAAAH,GAAAnxM,OACAuxM,GAAAJ,GAAAx8C,WACA68C,GAAAL,GAAAv8C,WA6DA68C,GAAAt8C,GAAA47C,IACAW,GAAAv8C,GAAAi8C,IA6BAj1N,GAAA87G,GAAA,mBAEA3/H,GAAA2/H,GAAA,aAEAokB,GAAApkB,GAAA,iBAgaA05G,GAAA75C,GAAAv9L,UAAAw9L,GAAAx9L,SAEAo3O,IAAAn0J,KAAA,WACA,GAEA+yF,GACA3oJ,EAHA41D,EAAA,GAAAu6G,IAAAxoM,KAAAumM,GAAAvmM,KAAAwmM,GAAAxmM,KAAAu+L,IAAAv+L,KAAAw+L,IAAAx+L,KAAAy+L,IAAAz+L,KAAA0+L,KACAphJ,EAAAt9C,KAAA+mM,KAIA,KAAAzpJ,EAAA,MAAA2wC,EAEA,KAAA3wC,EAAAp8C,OAAA,MAAA+sF,GAAA84G,MAAA0B,GAAAnrJ,GAAA2wC,CAGA,KADA+yF,IAAAtjK,OAAA4/B,EAAAnlC,OAAA81E,EAAA84G,MAAA,GAAA55L,OAAA,KACAmwC,EAAA0jI,EAAAxsK,OACA,IAAA,GAAArU,GAAA,EAAAA,EAAA,IAAAA,GACAk4B,EAAAilB,EAAA5/B,OAAAvd,MACAk4B,EAAAn3B,OAAA8/K,EAAAp6K,MAAA8W,OAAA2a,EAAAlgB,OAAAmlC,EAAAnlC,OAAAhY,GAAA,GAAAgN,OAAA,KACAmwC,EAAAnlC,OAAAhY,GAAAsoM,GAAApwK,GAKA,OAAA41D,IAGAm0J,GAAAz6O,IAAA2+L,GACA87C,GAAAn7C,OAAAA,GACAm7C,GAAA37C,MAAAU,GACAi7C,GAAA1xO,KAAA02L,GACAg7C,GAAAxmK,OAAA0rH,GACA86C,GAAAluO,KAAAszL,GACA46C,GAAAn1O,OAAA26L,GACAw6C,GAAAt6C,UAAAA,GACAs6C,GAAA9pO,KAAAyvL,GACAq6C,GAAA5kM,KAAAwqJ,GACAo6C,GAAA/6C,MAAAY,GACAm6C,GAAAj5C,WAAAjB,GACAk6C,GAAAvhP,EAAAunM,GACAg6C,GAAAhhP,EAAAknM,EA0NA,IAAAkC,IAAA,GACAE,GAAAngM,KAAAkd,IAAA,EAAAld,KAAA87I,KAAA,IAgbA5wI,GAAA,0EAMAu2L,IAAAhhM,UAAAkhM,GAAAlhM,UAiBAkhM,GAAAlhM,UAAA8F,SAAA,WACA,MAAA9Q,MAAA0lH,KACA1lH,KAAAq+E,MACAr+E,KAAAmsM,KACAnsM,KAAA0uH,QACA1uH,KAAAktL,KAAA,IAAA,KACA,MAAAltL,KAAA6J,MAAA,GAAAU,KAAAC,IAAA,EAAA,EAAAxK,KAAA6J,SACA7J,KAAAosM,MAAA,IAAA,KACA,MAAApsM,KAAAqsM,UAAA,GAAA,IAAA9hM,KAAAC,IAAA,EAAA,EAAAxK,KAAAqsM,aACArsM,KAAAiS,KAAA,IAAA,IACAjS,KAAAiH,KAeA,IAAAwlM,IAmLAI,GA1JAS,IACAutB,IAAA,SAAAh6N,EAAAkF,GAAA,OAAA,IAAAlF,GAAAq3B,QAAAnyB,IACA+M,EAAA,SAAAjS,GAAA,MAAA0J,MAAAwa,MAAAlkB,GAAAiQ,SAAA,IACA/P,EAAA,SAAAF,GAAA,MAAAA,GAAA,IACAmF,EAAA,SAAAnF,GAAA,MAAA0J,MAAAwa,MAAAlkB,GAAAiQ,SAAA,KACArR,EAAA,SAAAoB,EAAAkF,GAAA,MAAAlF,GAAAo3B,cAAAlyB,IACAF,EAAA,SAAAhF,EAAAkF,GAAA,MAAAlF,GAAAq3B,QAAAnyB,IACA5E,EAAA,SAAAN,EAAAkF,GAAA,MAAAlF,GAAAwhP,YAAAt8O,IACA3F,EAAA,SAAAS,GAAA,MAAA0J,MAAAwa,MAAAlkB,GAAAiQ,SAAA,IACA/K,EAAA,SAAAlF,EAAAkF,GAAA,MAAA2mM,IAAA,IAAA7rM,EAAAkF,IACA1F,EAAAqsM,GACAtoM,EAAAmoM,GACAppM,EAAA,SAAAtC,GAAA,MAAA0J,MAAAwa,MAAAlkB,GAAAiQ,SAAA,IAAA9N,eACAnC,EAAA,SAAAA,GAAA,MAAA0J,MAAAwa,MAAAlkB,GAAAiQ,SAAA,MAOAq8L,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,GAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAwIAM,KACAJ,QAAA,IACAxB,UAAA,IACAD,UAAA,GACA2B,UAAA,IAAA,MAsCAO,GAAA9iM,WACAoG,YAAA08L,GACAl0L,MAAA,WACA5Z,KAAAoE,EACApE,KAAAN,EAAA,GAEAiI,IAAA,SAAAvG,GACA2sM,GAAAu0C,GAAAlhP,EAAApB,KAAAN,GACAquM,GAAA/tM,KAAAsiP,GAAAl+O,EAAApE,KAAAoE,GACApE,KAAAoE,EAAApE,KAAAN,GAAA4iP,GAAA5iP,EACAM,KAAAoE,EAAAk+O,GAAA5iP,GAEAguL,QAAA,WACA,MAAA1tL,MAAAoE,GAIA,IAuHAmrM,IACAC,GACAI,GACAC,GACAG,GA+FAkB,GAAAE,GAAAD,GAAAE,GACAK,GACAU,GAAAC,GACAzpB,GAEA/tG,GACA1uB,GAqKA6mJ,GAAAS,GACAR,GAAAC,GAAAC,GACAO,GAAAC,GAAAC,GACAW,GAAAC,GAAAC,GACAP,GAAAC,GACAl6B,GAAA+sB,GAAAuM,GA1YA+uC,GAAA,GAAAx0C,IASA0E,GAAA,KACAmC,GAAA,MACAxG,GAAA5jM,KAAAkd,GACA4mL,GAAAF,GAAA,EACA4B,GAAA5B,GAAA,EACA4G,GAAA,EAAA5G,GAEA0D,GAAA,IAAA1D,GACAwB,GAAAxB,GAAA,IAEA7tK,GAAA/1B,KAAA+1B,IACA2tJ,GAAA1jL,KAAA0jL,KACA/C,GAAA3gL,KAAA2gL,MACA4kB,GAAAvlM,KAAAid,IACA7c,GAAAJ,KAAAI,KACA0kL,GAAA9kL,KAAA8kL,IACAv0J,GAAAvwB,KAAAuwB,IACAwvI,GAAA//J,KAAA+/J,IACAikC,GAAAhkM,KAAAq6J,IACAunC,GAAA5hM,KAAA4hM,MAAA,SAAAtrM,GAAA,MAAAA,GAAA,EAAA,EAAAA,EAAA,GAAA,EAAA,GACAwlJ,GAAA97I,KAAA87I,KACAg/D,GAAA96M,KAAA86M,IAsBApW,IACAszC,QAAA,SAAAt1D,EAAAjiH,GACAyjI,GAAAxhB,EAAA+V,SAAAh4H,IAEAw3K,kBAAA,SAAAv1D,EAAAjiH,GAEA,IADA,GAAAy3K,GAAAx1D,EAAAw1D,SAAAtiP,GAAA,EAAAD,EAAAuiP,EAAAvhP,SACAf,EAAAD,GAAAuuM,GAAAg0C,EAAAtiP,GAAA6iM,SAAAh4H,KAIA0jI,IACAg0C,OAAA,SAAAz1D,EAAAjiH,GACAA,EAAA8sI,UAEA6qC,MAAA,SAAA11D,EAAAjiH,GACAiiH,EAAAA,EAAA4U,YACA72H,EAAAqsE,MAAA41C,EAAA,GAAAA,EAAA,GAAAA,EAAA,KAEA21D,WAAA,SAAA31D,EAAAjiH,GAEA,IADA,GAAA62H,GAAA5U,EAAA4U,YAAA1hM,GAAA,EAAAD,EAAA2hM,EAAA3gM,SACAf,EAAAD,GAAA+sL,EAAA4U,EAAA1hM,GAAA6qE,EAAAqsE,MAAA41C,EAAA,GAAAA,EAAA,GAAAA,EAAA,KAEA41D,WAAA,SAAA51D,EAAAjiH,GACA2jI,GAAA1hB,EAAA4U,YAAA72H,EAAA,IAEA83K,gBAAA,SAAA71D,EAAAjiH,GAEA,IADA,GAAA62H,GAAA5U,EAAA4U,YAAA1hM,GAAA,EAAAD,EAAA2hM,EAAA3gM,SACAf,EAAAD,GAAAyuM,GAAA9M,EAAA1hM,GAAA6qE,EAAA,IAEA+3K,QAAA,SAAA91D,EAAAjiH,GACA6jI,GAAA5hB,EAAA4U,YAAA72H,IAEAg4K,aAAA,SAAA/1D,EAAAjiH,GAEA,IADA,GAAA62H,GAAA5U,EAAA4U,YAAA1hM,GAAA,EAAAD,EAAA2hM,EAAA3gM,SACAf,EAAAD,GAAA2uM,GAAAhN,EAAA1hM,GAAA6qE,IAEAi4K,mBAAA,SAAAh2D,EAAAjiH,GAEA,IADA,GAAAk4K,GAAAj2D,EAAAi2D,WAAA/iP,GAAA,EAAAD,EAAAgjP,EAAAhiP,SACAf,EAAAD,GAAAuuM,GAAAy0C,EAAA/iP,GAAA6qE,KA0BAslI,GAAAzC,KAEA2C,GAAA3C,KAOAsB,IACA93D,MAAAm3D,GACAt2G,UAAAs2G,GACAp2G,QAAAo2G,GACAM,aAAA,WACAwB,GAAA12L,QACAu1L,GAAAj3G,UAAAg3G,GACAC,GAAA/2G,QAAAi3G,IAEAN,WAAA,WACA,GAAAo0C,IAAA7yC,EACAE,IAAA7oM,IAAAw7O,EAAA,EAAApuC,GAAAouC,EAAAA,GACAnjP,KAAAk4F,UAAAl4F,KAAAo4F,QAAAp4F,KAAAq3I,MAAAm3D,IAEAsJ,OAAA,WACAtH,GAAA7oM,IAAAotM,MAkFA5C,GAAAtE,KAIAmE,IACA36D,MAAA45D,GACA/4G,UAAA65G,GACA35G,QAAA65G,GACAnD,aAAA,WACAkD,GAAA36D,MAAA66D,GACAF,GAAA95G,UAAAo6G,GACAN,GAAA55G,QAAAm6G,GACAJ,GAAAv4L,QACAu1L,GAAAL,gBAEAC,WAAA,WACAI,GAAAJ,aACAiD,GAAA36D,MAAA45D,GACAe,GAAA95G,UAAA65G,GACAC,GAAA55G,QAAA65G,GACA3B,GAAA,GAAAY,KAAAC,GAAA,KAAAC,KAAAC,GAAA,KACAc,GAAAK,GAAAnB,GAAA,GACAc,IAAAK,KAAApB,IAAA,IACAjlJ,GAAA,GAAA+kJ,GAAA/kJ,GAAA,GAAAglJ,KAuJAkC,IACAyE,OAAAtJ,GACAn3D,MAAAy7D,GACA56G,UAAAk7G,GACAh7G,QAAAy7G,GACA/E,aAAA,WACAuE,GAAAn7G,UAAA47G,GACAT,GAAAj7G,QAAA47G,IAEAjF,WAAA,WACAsE,GAAAn7G,UAAAk7G,GACAC,GAAAj7G,QAAAy7G,IA8IAiB,IAAAj9H,OAAAi9H,EAyQA,IAisBAmG,IACAC,GACAC,GAwRAyC,GACAE,GACAD,GACAE,GA4EAwB,GACAC,GACAX,GACAC,GA7iCAhI,GAAAjJ,KAmMA0V,GAAA/M,GACA,WAAA,OAAA,GACAuB,GACAK,KACAjK,IAAAE,KAmUAjwC,GAAA,IAAAD,IAAAC,GAsLAm9C,GAAA1N,KAKAiN,IACAhD,OAAAtJ,GACAn3D,MAAAm3D,GACAt2G,UAAA2iH,GACAziH,QAAAo2G,GACAM,aAAAN,GACAO,WAAAP,IAsCA3M,IAAA,KAAA,MACA4Z,IAAAx0M,KAAA,aAAA46L,YAAAA,IAQAsa,IACAomC,QAAA,SAAAt1D,EAAA51C,GACA,MAAAqkE,IAAAzuB,EAAA+V,SAAA3rD,IAEAmrG,kBAAA,SAAAv1D,EAAA51C,GAEA,IADA,GAAAorG,GAAAx1D,EAAAw1D,SAAAtiP,GAAA,EAAAD,EAAAuiP,EAAAvhP,SACAf,EAAAD,GAAA,GAAAw7M,GAAA+mC,EAAAtiP,GAAA6iM,SAAA3rD,GAAA,OAAA,CACA,QAAA,IAIAskE,IACA+mC,OAAA,WACA,OAAA,GAEAC,MAAA,SAAA11D,EAAA51C,GACA,MAAAukE,IAAA3uB,EAAA4U,YAAAxqD,IAEAurG,WAAA,SAAA31D,EAAA51C,GAEA,IADA,GAAAwqD,GAAA5U,EAAA4U,YAAA1hM,GAAA,EAAAD,EAAA2hM,EAAA3gM,SACAf,EAAAD,GAAA,GAAA07M,GAAA/Z,EAAA1hM,GAAAk3I,GAAA,OAAA,CACA,QAAA,GAEAwrG,WAAA,SAAA51D,EAAA51C,GACA,MAAAwkE,IAAA5uB,EAAA4U,YAAAxqD,IAEAyrG,gBAAA,SAAA71D,EAAA51C,GAEA,IADA,GAAAwqD,GAAA5U,EAAA4U,YAAA1hM,GAAA,EAAAD,EAAA2hM,EAAA3gM,SACAf,EAAAD,GAAA,GAAA27M,GAAAha,EAAA1hM,GAAAk3I,GAAA,OAAA,CACA,QAAA,GAEA0rG,QAAA,SAAA91D,EAAA51C,GACA,MAAA0kE,IAAA9uB,EAAA4U,YAAAxqD,IAEA2rG,aAAA,SAAA/1D,EAAA51C,GAEA,IADA,GAAAwqD,GAAA5U,EAAA4U,YAAA1hM,GAAA,EAAAD,EAAA2hM,EAAA3gM,SACAf,EAAAD,GAAA,GAAA67M,GAAAla,EAAA1hM,GAAAk3I,GAAA,OAAA,CACA,QAAA,GAEA4rG,mBAAA,SAAAh2D,EAAA51C,GAEA,IADA,GAAA6rG,GAAAj2D,EAAAi2D,WAAA/iP,GAAA,EAAAD,EAAAgjP,EAAAhiP,SACAf,EAAAD,GAAA,GAAAw7M,GAAAwnC,EAAA/iP,GAAAk3I,GAAA,OAAA,CACA,QAAA,IAqLA+rG,GAAAv1C,KACAmQ,GAAAnQ,KAMA4P,IACApmE,MAAAm3D,GACAt2G,UAAAs2G,GACAp2G,QAAAo2G,GACAM,aAAA,WACA2O,GAAAvlH,UAAAslH,GACAC,GAAArlH,QAAA6lH,IAEAlP,WAAA,WACA0O,GAAAvlH,UAAAulH,GAAArlH,QAAAqlH,GAAApmE,MAAAm3D,GACA40C,GAAAz7O,IAAA24B,GAAA09K,KACAA,GAAApkM,SAEAqG,OAAA,WACA,GAAAygB,GAAA0iN,GAAA,CAEA,OADAA,IAAAxpO,QACA8mB,IAsBAy9K,GAAAvyK,EAAAA,EACAwyK,GAAAD,GACAh8C,IAAAg8C,GACA/7C,GAAAD,GAEA0+C,IACAxpE,MAAA6mE,GACAhmH,UAAAs2G,GACAp2G,QAAAo2G,GACAM,aAAAN,GACAO,WAAAP,GACAvuL,OAAA,WACA,GAAA0yL,KAAAwL,GAAAC,KAAAj8C,GAAAC,IAEA,OADAD,IAAAC,KAAAg8C,GAAAD,GAAAvyK,EAAAA,GACA+mK,IAaA2L,GAAA,EACAC,GAAA,EACAC,GAAA,EACAO,GAAA,EACAC,GAAA,EACAC,GAAA,EACAQ,GAAA,EACAC,GAAA,EACAC,GAAA,EAMAjB,IACArnE,MAAAgnE,GACAnmH,UAAAumH,GACArmH,QAAA8mH,GACApQ,aAAA,WACA4P,GAAAxmH,UAAAinH,GACAT,GAAAtmH,QAAAinH,IAEAtQ,WAAA,WACA2P,GAAArnE,MAAAgnE,GACAK,GAAAxmH,UAAAumH,GACAC,GAAAtmH,QAAA8mH,IAEAj/L,OAAA,WACA,GAAAy0L,GAAAiL,IAAAF,GAAAE,GAAAD,GAAAC,IACAV,IAAAF,GAAAE,GAAAD,GAAAC,IACAT,IAAAF,GAAAE,GAAAD,GAAAC,KACAvvH,IAAAA,IAIA,OAHAqvH,IAAAC,GAAAC,GACAO,GAAAC,GAAAC,GACAQ,GAAAC,GAAAC,GAAA,EACAjL,GAgEAkL,IAAA50M,WACAq4O,QAAA,IACA3iC,YAAA,SAAA99M,GACA,MAAA5C,MAAAqjP,QAAAzgP,EAAA5C,MAEA8uM,aAAA,WACA9uM,KAAAsjP,MAAA,GAEAv0C,WAAA,WACA/uM,KAAAsjP,MAAAr0J,KAEAiJ,UAAA,WACAl4F,KAAAujP,OAAA,GAEAnrJ,QAAA,WACA,IAAAp4F,KAAAsjP,OAAAtjP,KAAA6/M,SAAA77C,YACAhkK,KAAAujP,OAAAt0J,KAEAooD,MAAA,SAAAx2I,EAAAO,GACA,OAAApB,KAAAujP,QACA,IAAA,GACAvjP,KAAA6/M,SAAAt8C,OAAA1iK,EAAAO,GACApB,KAAAujP,OAAA,CACA,MAEA,KAAA,GACAvjP,KAAA6/M,SAAAr8C,OAAA3iK,EAAAO,EACA,MAEA,SACApB,KAAA6/M,SAAAt8C,OAAA1iK,EAAAb,KAAAqjP,QAAAjiP,GACApB,KAAA6/M,SAAA/7C,IAAAjjK,EAAAO,EAAApB,KAAAqjP,QAAA,EAAAtuC,MAKA90L,OAAAuuL,GAGA,IACAg1C,IACAvjC,GACAE,GACAD,GACAE,GALAC,GAAAxS,KAOAkS,IACA1oE,MAAAm3D,GACAt2G,UAAA,WACA6nH,GAAA1oE,MAAAyoE,IAEA1nH,QAAA,WACAorJ,IAAAxjC,GAAAC,GAAAE,IACAJ,GAAA1oE,MAAAm3D,IAEAM,aAAA,WACA00C,IAAA,GAEAz0C,WAAA,WACAy0C,GAAA,MAEAvjO,OAAA,WACA,GAAA/e,IAAAm/M,EAEA,OADAA,IAAAzmM,QACA1Y,GAmBAo/M,IAAAt1M,WACAq4O,QAAA,IACAI,QAAAjjC,GAAA,KACAE,YAAA,SAAA99M,GAEA,OADAA,GAAAA,KAAA5C,KAAAqjP,UAAArjP,KAAAqjP,QAAAzgP,EAAA5C,KAAAyjP,QAAA,MACAzjP,MAEA8uM,aAAA,WACA9uM,KAAAsjP,MAAA,GAEAv0C,WAAA,WACA/uM,KAAAsjP,MAAAr0J,KAEAiJ,UAAA,WACAl4F,KAAAujP,OAAA,GAEAnrJ,QAAA,WACA,IAAAp4F,KAAAsjP,OAAAtjP,KAAAugN,QAAA35M,KAAA,KACA5G,KAAAujP,OAAAt0J,KAEAooD,MAAA,SAAAx2I,EAAAO,GACA,OAAApB,KAAAujP,QACA,IAAA,GACAvjP,KAAAugN,QAAA35M,KAAA,IAAA/F,EAAA,IAAAO,GACApB,KAAAujP,OAAA,CACA,MAEA,KAAA,GACAvjP,KAAAugN,QAAA35M,KAAA,IAAA/F,EAAA,IAAAO,EACA,MAEA,SACA,MAAApB,KAAAyjP,UAAAzjP,KAAAyjP,QAAAjjC,GAAAxgN,KAAAqjP,UACArjP,KAAAugN,QAAA35M,KAAA,IAAA/F,EAAA,IAAAO,EAAApB,KAAAyjP,WAKAxjO,OAAA,WACA,GAAAjgB,KAAAugN,QAAAr/M,OAAA,CACA,GAAA+e,GAAAjgB,KAAAugN,QAAAvxM,KAAA,GAEA,OADAhP,MAAAugN,WACAtgM,EAEA,MAAA,QAkFA8gM,GAAA/1M,WACAoG,YAAA2vM,GACA1pE,MAAA,SAAAx2I,EAAAO,GAAApB,KAAAgrE,OAAAqsE,MAAAx2I,EAAAO,IACA02M,OAAA,WAAA93M,KAAAgrE,OAAA8sI,UACA5/G,UAAA,WAAAl4F,KAAAgrE,OAAAktB,aACAE,QAAA,WAAAp4F,KAAAgrE,OAAAotB,WACA02G,aAAA,WAAA9uM,KAAAgrE,OAAA8jI,gBACAC,WAAA,WAAA/uM,KAAAgrE,OAAA+jI,cAgDA,IAAAoT,IAAA,GACAF,GAAAnS,GAAA,GAAAH,IAkGA8T,GAAA3C,IACAzpE,MAAA,SAAAx2I,EAAAO,GACApB,KAAAgrE,OAAAqsE,MAAAx2I,EAAA8uM,GAAAvuM,EAAAuuM,OA2VAsV,GAAAL,GAAA,SAAA8+B,GACA,MAAAr9F,IAAA,GAAA,EAAAq9F,KAGAz+B,IAAAptI,OAAAgtI,GAAA,SAAAhwM,GACA,MAAA,GAAAu5L,GAAAv5L,EAAA,IASA,IAAAswM,IAAAP,GAAA,SAAA7jN,GACA,OAAAA,EAAAmtM,GAAAntM,KAAAA,EAAAwtM,GAAAxtM,IAGAokN,IAAAttI,OAAAgtI,GAAA,SAAAhwM,GACA,MAAAA,KAaAuwM,GAAAvtI,OAAA,SAAAh3E,EAAAO,GACA,OAAAP,EAAA,EAAAotL,GAAAoB,GAAAjuL,IAAAitM,KAgFAuX,GAAA/tI,OAAA+tI,EAiCA,IAAAQ,IAAA,SACAC,IAAA,QACAC,GAAA,OACAC,GAAA,QACArkN,GAAAmkJ,GAAA,GAAA,CAWA6/D,IAAAruI,OAAA,SAAAh3E,EAAAO,GAEA,IAAA,GAAA6uD,GAAAq6I,EAAAq5C,EADA7iP,EAAAM,EAAAunJ,EAAA7nJ,EAAAA,EAAAqlN,EAAAx9D,EAAAA,EAAAA,EACAxoJ,EAAA,EAAAA,EAZA,KAaAmqM,EAAAxpM,GAAAslN,GAAAC,GAAA19D,EAAAw9D,GAAAG,GAAAC,GAAA59D,IAAAvnJ,EACAuiP,EAAAv9B,GAAA,EAAAC,GAAA19D,EAAAw9D,GAAA,EAAAG,GAAA,EAAAC,GAAA59D,GACA7nJ,GAAAmvD,EAAAq6I,EAAAq5C,EAAAh7F,EAAA7nJ,EAAAA,EAAAqlN,EAAAx9D,EAAAA,EAAAA,IACAroH,GAAA2vB,GAAA0kJ,OAJAx0M,GAMA,OACA+B,GAAArB,GAAAulN,GAAA,EAAAC,GAAA19D,EAAAw9D,GAAA,EAAAG,GAAA,EAAAC,GAAA59D,IAAAmnD,GAAAhvM,GACAstM,GAAAG,GAAAztM,GAAAoB,MAcAukN,GAAA5uI,OAAAgtI,GAAA52B,IA0EAk5B,GAAAtvI,OAAA,SAAAh3E,EAAAO,GACA,GAAA6uD,GAAAy/I,EAAAtuM,EAAAjB,EAAA,EACA,GAAA,CACA,GAAA0hN,GAAAnS,EAAAA,EAAA0X,EAAAvF,EAAAA,CACAnS,IAAAz/I,GAAAy/I,GAAA,SAAAmS,GAAA,QAAAuF,GAAA,QAAAvF,EAAA,QAAA,QAAAuF,KAAAhmN,IACA,SAAAygN,GAAA,QAAAuF,GAAA,QAAAvF,EAAA,QAAA,QAAA,GAAAuF,WACA9mL,GAAA2vB,GAAAuiJ,MAAAryM,EAAA,EACA,QACAU,GAAA,OAAAghN,EAAAnS,EAAAA,IAAAmS,GAAAA,EAAAA,EAAAA,GAAA,QAAA,QAAAA,GAAA,SAAA,UACAnS,IAaA4X,GAAAzvI,OAAAgtI,GAAAzW,IAaAoZ,GAAA3vI,OAAAgtI,GAAA,SAAAhwM,GACA,MAAA,GAAAo5K,GAAAp5K,KAaA6yM,GAAA7vI,OAAA,SAAAh3E,EAAAO,GACA,QAAAA,EAAA,EAAA6sL,GAAAoB,GAAAxuL,IAAAwtM,KAsSAhxJ,GAAAryC,UAAA0+M,GAAA1+M,WACAoG,YAAAisC,GACAjF,MAAAowK,GACAxmN,KAAAymN,GACAJ,UAAAM,GACAG,WAAAJ,GACAvzF,IAAAyzF,GACAl3M,KAAAm3M,GACAlxL,KAAAoxL,GACAI,UAAAE,GACAu6B,YAAAt6B,GACAE,OAAAD,GACAxjL,MAAA0jL,GACAx7H,KAAA87H,GAGA,IAAAI,IAAAh9M,MAAAnC,UAAArI,MAgaAmqN,GAAA,IACAE,IAAAh9F,OAAA,GACA+8F,KA4IAW,IAAA1iN,UAAA2F,OAAAipD,OAAAvc,GAAAryC,UAkLA,IAAA0kM,KAAA,EAAAnlM,KAAA87I,KAAA,IAAA,EAmDA8oE,GAAA,QAAAz5E,GAAAxgB,GAEA,QAAAi6F,GAAAr2M,EAAAmhK,EAAA+sB,EAAA7kC,EAAAC,GACAqsD,GAAAv5F,EAAAp8G,EAAAmhK,EAAA+sB,EAAA7kC,EAAAC,GAOA,MAJA+sD,GAAAj6F,MAAA,SAAAr0H,GACA,MAAA60I,IAAA70I,GAAAA,GAAA,EAAAA,EAAA,IAGAsuN,GACAzf,IA+IAm0C,GAAA,QAAAnuG,GAAAxgB,GAEA,QAAA2uH,GAAA/qO,EAAAmhK,EAAA+sB,EAAA7kC,EAAAC,GACA,IAAArrC,EAAAj+G,EAAAgrO,YAAA/sH,EAAA7B,QAAAA,EAUA,IATA,GAAA6B,GACA5G,EACA6wD,EACA7gL,EAEAD,EADAsB,GAAA,EAEAvB,EAAA82H,EAAA71H,OACAqS,EAAAuF,EAAAvF,QAEA/R,EAAAvB,GAAA,CAEA,IADAkwH,EAAA4G,EAAAv1H,GAAAw/K,EAAA7wD,EAAAtoH,SACA1H,EAAAgwH,EAAA58G,MAAA,EAAArT,EAAA8gL,EAAA9/K,OAAAf,EAAAD,IAAAC,EAAAgwH,EAAA58G,OAAAytK,EAAA7gL,GAAAoT,KACA48G,GAAA2+F,KAAAzC,GAAAl8F,EAAA8pD,EAAA+sB,EAAA7kC,EAAA6kC,IAAA5kC,EAAA4kC,GAAA72E,EAAA58G,MAAAA,GACAi7M,GAAAr+F,EAAA8pD,EAAA+sB,EAAA/sB,IAAA9X,EAAA8X,GAAA9pD,EAAA58G,MAAAA,EAAA6uJ,GACA7uJ,GAAA48G,EAAA58G,UAGAuF,GAAAgrO,UAAA/sH,EAAA03F,GAAAv5F,EAAAp8G,EAAAmhK,EAAA+sB,EAAA7kC,EAAAC,GACArrC,EAAA7B,MAAAA,EAQA,MAJA2uH,GAAA3uH,MAAA,SAAAr0H,GACA,MAAA60I,IAAA70I,GAAAA,GAAA,EAAAA,EAAA,IAGAgjP,GACAn0C,IA4IAq0C,GAAA,QAAAC,GAAAtmO,GACA,QAAAumO,GAAAjrL,EAAAxuD,GAKA,MAJAwuD,GAAA,MAAAA,EAAA,GAAAA,EACAxuD,EAAA,MAAAA,EAAA,GAAAA,EACA,IAAAhD,UAAAtG,QAAAsJ,EAAAwuD,EAAAA,EAAA,GACAxuD,GAAAwuD,EACA,WACA,MAAAt7C,KAAAlT,EAAAwuD,GAMA,MAFAirL,GAAAvmO,OAAAsmO,EAEAC,GACArzB,IAEArpJ,GAAA,QAAA28K,GAAAxmO,GACA,QAAAymO,GAAAC,EAAAC,GACA,GAAAxjP,GAAAR,CAGA,OAFA+jP,GAAA,MAAAA,EAAA,GAAAA,EACAC,EAAA,MAAAA,EAAA,GAAAA,EACA,WACA,GAAAjjP,EAGA,IAAA,MAAAP,EAAAO,EAAAP,EAAAA,EAAA,SAGA,IACAA,EAAA,EAAA6c,IAAA,EACAtc,EAAA,EAAAsc,IAAA,EACArd,EAAAQ,EAAAA,EAAAO,EAAAA,SACAf,GAAAA,EAAA,EAEA,OAAA+jP,GAAAC,EAAAjjP,EAAAmJ,KAAA87I,MAAA,EAAA97I,KAAAuwB,IAAAz6B,GAAAA,IAMA,MAFA8jP,GAAAzmO,OAAAwmO,EAEAC,GACAvzB,IAEA0zB,GAAA,QAAAC,GAAA7mO,GACA,QAAA8mO,KACA,GAAAL,GAAA58K,GAAA7pD,OAAAA,GAAAhb,MAAA1C,KAAAwH,UACA,OAAA,YACA,MAAA+C,MAAA8kL,IAAA80D,MAMA,MAFAK,GAAA9mO,OAAA6mO,EAEAC,GACA5zB,IAEA6zB,GAAA,QAAAC,GAAAhnO,GACA,QAAAinO,GAAAzkP,GACA,MAAA,YACA,IAAA,GAAAi1H,GAAA,EAAAh1H,EAAA,EAAAA,EAAAD,IAAAC,EAAAg1H,GAAAz3G,GACA,OAAAy3G,IAMA,MAFAwvH,GAAAjnO,OAAAgnO,EAEAC,GACA/zB,IAEAg0B,GAAA,QAAAC,GAAAnnO,GACA,QAAAonO,GAAA5kP,GACA,GAAAykP,GAAAF,GAAA/mO,OAAAA,GAAAxd,EACA,OAAA,YACA,MAAAykP,KAAAzkP,GAMA,MAFA4kP,GAAApnO,OAAAmnO,EAEAC,GACAl0B,IAEAm0B,GAAA,QAAAC,GAAAtnO,GACA,QAAAunO,GAAAx1C,GACA,MAAA,YACA,OAAAllM,KAAAuwB,IAAA,EAAApd,KAAA+xL,GAMA,MAFAw1C,GAAAvnO,OAAAsnO,EAEAC,GACAr0B,IAoBAs0B,GAAA/3O,MAAAnC,UAEAonN,GAAA8yB,GAAAl8O,IACAkoN,GAAAg0B,GAAAviP,MAEAsuN,IAAAt0M,KAAA,YAqJAhY,IAAA,EAAA,GA+mBAgwN,GAAA,GAAA/oN,MACAgpN,GAAA,GAAAhpN,MAoEAy0N,GAAA7L,GAAA,aAEA,SAAAx4L,EAAA7U,GACA6U,EAAA+wJ,SAAA/wJ,EAAA7U,IACA,SAAAviB,EAAAC,GACA,MAAAA,GAAAD,GAIAy7N,IAAA5kL,MAAA,SAAArnC,GAEA,MADAA,GAAA7J,KAAA8sB,MAAAjjB,GACAoS,SAAApS,IAAAA,EAAA,EACAA,EAAA,EACAogN,GAAA,SAAAx4L,GACAA,EAAA+wJ,QAAAxiL,KAAA8sB,MAAA2E,EAAA5nB,GAAAA,IACA,SAAA4nB,EAAA7U,GACA6U,EAAA+wJ,SAAA/wJ,EAAA7U,EAAA/S,IACA,SAAAxP,EAAAC,GACA,OAAAA,EAAAD,GAAAwP,IANAisN,GADA,KAUA,IAAAl8B,IAAAk8B,GAAAl0K,MAGAgpK,GAAA,IAGAC,GAAA,OAEAt7K,GAAA06K,GAAA,SAAAx4L,GACAA,EAAA+wJ,QAAA/wJ,EAAAA,EAAA2hM,oBACA,SAAA3hM,EAAA7U,GACA6U,EAAA+wJ,SAAA/wJ,EATA,IASA7U,IACA,SAAAviB,EAAAC,GACA,OAAAA,EAAAD,GAXA,KAYA,SAAAo3B,GACA,MAAAA,GAAAkoK,kBAEAD,GAAAnqJ,GAAAqS,MAEAi0K,GAAA5L,GAAA,SAAAx4L,GACAA,EAAA+wJ,QAAA/wJ,EAAAA,EAAA2hM,kBAlBA,IAkBA3hM,EAAA6hM,eACA,SAAA7hM,EAAA7U,GACA6U,EAAA+wJ,SAAA/wJ,EAAA7U,EAAAguM,KACA,SAAAvwN,EAAAC,GACA,OAAAA,EAAAD,GAAAuwN,IACA,SAAAn5L,GACA,MAAAA,GAAA4hM,eAEA75B,GAAAq8B,GAAAj0K,MAEAg0K,GAAA3L,GAAA,SAAAx4L,GACAA,EAAA+wJ,QAAA/wJ,EAAAA,EAAA2hM,kBA7BA,IA6BA3hM,EAAA6hM,aAAA7hM,EAAA4hM,aAAAzI,KACA,SAAAn5L,EAAA7U,GACA6U,EAAA+wJ,SAAA/wJ,EA7BA,KA6BA7U,IACA,SAAAviB,EAAAC,GACA,OAAAA,EAAAD,GA/BA,MAgCA,SAAAo3B,GACA,MAAAA,GAAA48L,aAEA/0B,GAAAs8B,GAAAh0K,MAEAsqK,GAAAjC,GAAA,SAAAx4L,GACAA,EAAAi5L,SAAA,EAAA,EAAA,EAAA,IACA,SAAAj5L,EAAA7U,GACA6U,EAAA84L,QAAA94L,EAAA+4L,UAAA5tM,IACA,SAAAviB,EAAAC,GACA,OAAAA,EAAAD,GAAAC,EAAAqwN,oBAAAtwN,EAAAswN,qBAAAC,IAzCA,OA0CA,SAAAn5L,GACA,MAAAA,GAAA+4L,UAAA,IAEAqE,GAAA3C,GAAAtqK,MAaA2xK,GAAAjJ,GAAA,GACA2B,GAAA3B,GAAA,GACAswB,GAAAtwB,GAAA,GACAuwB,GAAAvwB,GAAA,GACAkJ,GAAAlJ,GAAA,GACAwwB,GAAAxwB,GAAA,GACAywB,GAAAzwB,GAAA,GAEA0wB,GAAAznB,GAAA3xK,MACAq5L,GAAAhvB,GAAArqK,MACAs5L,GAAAN,GAAAh5L,MACAu5L,GAAAN,GAAAj5L,MACAw5L,GAAA5nB,GAAA5xK,MACAy5L,GAAAP,GAAAl5L,MACA05L,GAAAP,GAAAn5L,MAEA+zK,GAAA1L,GAAA,SAAAx4L,GACAA,EAAA84L,QAAA,GACA94L,EAAAi5L,SAAA,EAAA,EAAA,EAAA,IACA,SAAAj5L,EAAA7U,GACA6U,EAAA8pN,SAAA9pN,EAAA26L,WAAAxvM,IACA,SAAAviB,EAAAC,GACA,MAAAA,GAAA8xN,WAAA/xN,EAAA+xN,WAAA,IAAA9xN,EAAA6xN,cAAA9xN,EAAA8xN,gBACA,SAAA16L,GACA,MAAAA,GAAA26L,aAEA2C,GAAA4G,GAAA/zK,MAEAw3I,GAAA6wB,GAAA,SAAAx4L,GACAA,EAAA8pN,SAAA,EAAA,GACA9pN,EAAAi5L,SAAA,EAAA,EAAA,EAAA,IACA,SAAAj5L,EAAA7U,GACA6U,EAAA05L,YAAA15L,EAAA06L,cAAAvvM,IACA,SAAAviB,EAAAC,GACA,MAAAA,GAAA6xN,cAAA9xN,EAAA8xN,eACA,SAAA16L,GACA,MAAAA,GAAA06L,eAIA/yB,IAAAloJ,MAAA,SAAArnC,GACA,MAAAoS,UAAApS,EAAA7J,KAAA8sB,MAAAjjB,KAAAA,EAAA,EAAAogN,GAAA,SAAAx4L,GACAA,EAAA05L,YAAAnrN,KAAA8sB,MAAA2E,EAAA06L,cAAAtiN,GAAAA,GACA4nB,EAAA8pN,SAAA,EAAA,GACA9pN,EAAAi5L,SAAA,EAAA,EAAA,EAAA,IACA,SAAAj5L,EAAA7U,GACA6U,EAAA05L,YAAA15L,EAAA06L,cAAAvvM,EAAA/S,KALA,KAQA,IAAA2xO,IAAApiD,GAAAx3I,MAEAs0K,GAAAjM,GAAA,SAAAx4L,GACAA,EAAAgqN,cAAA,EAAA,IACA,SAAAhqN,EAAA7U,GACA6U,EAAA+wJ,SAAA/wJ,EAAA7U,EAAAguM,KACA,SAAAvwN,EAAAC,GACA,OAAAA,EAAAD,GAAAuwN,IACA,SAAAn5L,GACA,MAAAA,GAAAgoK,kBAEAiiD,GAAAxlB,GAAAt0K,MAEAq0K,GAAAhM,GAAA,SAAAx4L,GACAA,EAAAkqN,cAAA,EAAA,EAAA,IACA,SAAAlqN,EAAA7U,GACA6U,EAAA+wJ,SAAA/wJ,EA5HA,KA4HA7U,IACA,SAAAviB,EAAAC,GACA,OAAAA,EAAAD,GA9HA,MA+HA,SAAAo3B,GACA,MAAAA,GAAA8nK,gBAEAqiD,GAAA3lB,GAAAr0K,MAEAoqK,GAAA/B,GAAA,SAAAx4L,GACAA,EAAAw5L,YAAA,EAAA,EAAA,EAAA,IACA,SAAAx5L,EAAA7U,GACA6U,EAAAs5L,WAAAt5L,EAAAuoK,aAAAp9K,IACA,SAAAviB,EAAAC,GACA,OAAAA,EAAAD,GAxIA,OAyIA,SAAAo3B,GACA,MAAAA,GAAAuoK,aAAA,IAEA6hD,GAAA7vB,GAAApqK,MAaA+xK,GAAA7I,GAAA,GACAiB,GAAAjB,GAAA,GACAgxB,GAAAhxB,GAAA,GACAixB,GAAAjxB,GAAA,GACA8I,GAAA9I,GAAA,GACAkxB,GAAAlxB,GAAA,GACAmxB,GAAAnxB,GAAA,GAEAoxB,GAAAvoB,GAAA/xK,MACAu6L,GAAApwB,GAAAnqK,MACAw6L,GAAAN,GAAAl6L,MACAy6L,GAAAN,GAAAn6L,MACA06L,GAAA1oB,GAAAhyK,MACA26L,GAAAP,GAAAp6L,MACA46L,GAAAP,GAAAr6L,MAEAo0K,GAAA/L,GAAA,SAAAx4L,GACAA,EAAAs5L,WAAA,GACAt5L,EAAAw5L,YAAA,EAAA,EAAA,EAAA,IACA,SAAAx5L,EAAA7U,GACA6U,EAAAgrN,YAAAhrN,EAAAsoK,cAAAn9K,IACA,SAAAviB,EAAAC,GACA,MAAAA,GAAAy/L,cAAA1/L,EAAA0/L,cAAA,IAAAz/L,EAAAw/L,iBAAAz/L,EAAAy/L,mBACA,SAAAroK,GACA,MAAAA,GAAAsoK,gBAEA2iD,GAAA1mB,GAAAp0K,MAEA6xK,GAAAxJ,GAAA,SAAAx4L,GACAA,EAAAgrN,YAAA,EAAA,GACAhrN,EAAAw5L,YAAA,EAAA,EAAA,EAAA,IACA,SAAAx5L,EAAA7U,GACA6U,EAAA65L,eAAA75L,EAAAqoK,iBAAAl9K,IACA,SAAAviB,EAAAC,GACA,MAAAA,GAAAw/L,iBAAAz/L,EAAAy/L,kBACA,SAAAroK,GACA,MAAAA,GAAAqoK,kBAIA25B,IAAAviL,MAAA,SAAArnC,GACA,MAAAoS,UAAApS,EAAA7J,KAAA8sB,MAAAjjB,KAAAA,EAAA,EAAAogN,GAAA,SAAAx4L,GACAA,EAAA65L,eAAAtrN,KAAA8sB,MAAA2E,EAAAqoK,iBAAAjwL,GAAAA,GACA4nB,EAAAgrN,YAAA,EAAA,GACAhrN,EAAAw5L,YAAA,EAAA,EAAA,EAAA,IACA,SAAAx5L,EAAA7U,GACA6U,EAAA65L,eAAA75L,EAAAqoK,iBAAAl9K,EAAA/S,KALA,KAQA,IAsnBAiqN,IAtnBA6oB,GAAAlpB,GAAA7xK,MAgWA6pK,IAAAllG,IAAA,GAAAluH,EAAA,IAAA0sB,EAAA,KACAmuM,GAAA,UACAC,GAAA,KACAF,GAAA,qBAqRAY,KACAlF,SAAA,SACAl9L,KAAA,aACAvE,KAAA,eACA0hM,SAAA,KAAA,MACAC,MAAA,SAAA,SAAA,UAAA,YAAA,WAAA,SAAA,YACAC,WAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,OACAC,QAAA,UAAA,WAAA,QAAA,QAAA,MAAA,OAAA,OAAA,SAAA,YAAA,UAAA,WAAA,YACAC,aAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,QAYA,IAMA4tB,IAAAv7O,KAAAZ,UAAA+6G,YACAy4G,GACA5+N,EAAAw9N,UARA,yBAeAgqB,IAAA,GAAAx7O,MAAA,4BACA6yN,GACA7+N,EAAAy9N,SAjBA,yBAmBAuC,GAAA,IACAC,GAAA,GAAAD,GACAE,GAAA,GAAAD,GACAE,GAAA,GAAAD,GACAE,GAAA,EAAAD,GACAE,GAAA,GAAAF,GACAJ,GAAA,IAAAI,GA4UAsnB,GAAA58E,GAAA,gEAEA68E,GAAA78E,GAAA,oDAEA88E,GAAA98E,GAAA,oDAEA+8E,GAAA/8E,GAAA,4EAEAg9E,GAAAh9E,GAAA,0DAEAi9E,GAAAj9E,GAAA,oDAEAk9E,GAAAl9E,GAAA,0DAEAm9E,GAAAn9E,GAAA,oDAEAo9E,GAAAp9E,GAAA,4EAMAk3D,GAAA,GAAAx0N,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApD,IAAAyhK,IAEAq9E,GAAApmB,GAAAC,IAEAomB,GAAA,GAAA56O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApD,IAAAyhK,IAEAu9E,GAAAtmB,GAAAqmB,IAEAE,GAAA,GAAA96O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApD,IAAAyhK,IAEAy9E,GAAAxmB,GAAAumB,IAEAE,GAAA,GAAAh7O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApD,IAAAyhK,IAEA29E,GAAA1mB,GAAAymB,IAEAE,GAAA,GAAAl7O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApD,IAAAyhK,IAEA69E,GAAA5mB,GAAA2mB,IAEAE,GAAA,GAAAp7O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApD,IAAAyhK,IAEA+9E,GAAA9mB,GAAA6mB,IAEAE,GAAA,GAAAt7O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApD,IAAAyhK,IAEAi+E,GAAAhnB,GAAA+mB,IAEAE,GAAA,GAAAx7O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApD,IAAAyhK,IAEAm+E,GAAAlnB,GAAAinB,IAEAE,GAAA,GAAA17O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApD,IAAAyhK,IAEAq+E,GAAApnB,GAAAmnB,IAEAE,GAAA,GAAA57O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAyhK,IAEAu+E,GAAAtnB,GAAAqnB,IAEAE,GAAA,GAAA97O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAyhK,IAEAy+E,GAAAxnB,GAAAunB,IAEAE,GAAA,GAAAh8O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAyhK,IAEA2+E,GAAA1nB,GAAAynB,IAEAE,GAAA,GAAAl8O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAyhK,IAEA6+E,GAAA5nB,GAAA2nB,IAEAE,GAAA,GAAAp8O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAyhK,IAEA++E,GAAA9nB,GAAA6nB,IAEAE,GAAA,GAAAt8O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAyhK,IAEAi/E,GAAAhoB,GAAA+nB,IAEAE,GAAA,GAAAx8O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAyhK,IAEAm/E,GAAAloB,GAAAioB,IAEAE,GAAA,GAAA18O,OAAA,GAAAf,OACA,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApD,IAAAyhK,IAEAq/E,GAAApoB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","file":"swish-min.js.new","sourcesContent":["/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under the MIT license\n */\nif(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");!function(t){\"use strict\";var e=jQuery.fn.jquery.split(\" \")[0].split(\".\");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||3<e[0])throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")}(),function(n){\"use strict\";n.fn.emulateTransitionEnd=function(t){var e=!1,i=this;n(this).one(\"bsTransitionEnd\",function(){e=!0});return setTimeout(function(){e||n(i).trigger(n.support.transition.end)},t),this},n(function(){n.support.transition=function o(){var t=document.createElement(\"bootstrap\"),e={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};for(var i in e)if(t.style[i]!==undefined)return{end:e[i]};return!1}(),n.support.transition&&(n.event.special.bsTransitionEnd={bindType:n.support.transition.end,delegateType:n.support.transition.end,handle:function(t){if(n(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(s){\"use strict\";var e='[data-dismiss=\"alert\"]',a=function(t){s(t).on(\"click\",e,this.close)};a.VERSION=\"3.4.1\",a.TRANSITION_DURATION=150,a.prototype.close=function(t){var e=s(this),i=e.attr(\"data-target\");i||(i=(i=e.attr(\"href\"))&&i.replace(/.*(?=#[^\\s]*$)/,\"\")),i=\"#\"===i?[]:i;var o=s(document).find(i);function n(){o.detach().trigger(\"closed.bs.alert\").remove()}t&&t.preventDefault(),o.length||(o=e.closest(\".alert\")),o.trigger(t=s.Event(\"close.bs.alert\")),t.isDefaultPrevented()||(o.removeClass(\"in\"),s.support.transition&&o.hasClass(\"fade\")?o.one(\"bsTransitionEnd\",n).emulateTransitionEnd(a.TRANSITION_DURATION):n())};var t=s.fn.alert;s.fn.alert=function o(i){return this.each(function(){var t=s(this),e=t.data(\"bs.alert\");e||t.data(\"bs.alert\",e=new a(this)),\"string\"==typeof i&&e[i].call(t)})},s.fn.alert.Constructor=a,s.fn.alert.noConflict=function(){return s.fn.alert=t,this},s(document).on(\"click.bs.alert.data-api\",e,a.prototype.close)}(jQuery),function(s){\"use strict\";var n=function(t,e){this.$element=s(t),this.options=s.extend({},n.DEFAULTS,e),this.isLoading=!1};function i(o){return this.each(function(){var t=s(this),e=t.data(\"bs.button\"),i=\"object\"==typeof o&&o;e||t.data(\"bs.button\",e=new n(this,i)),\"toggle\"==o?e.toggle():o&&e.setState(o)})}n.VERSION=\"3.4.1\",n.DEFAULTS={loadingText:\"loading...\"},n.prototype.setState=function(t){var e=\"disabled\",i=this.$element,o=i.is(\"input\")?\"val\":\"html\",n=i.data();t+=\"Text\",null==n.resetText&&i.data(\"resetText\",i[o]()),setTimeout(s.proxy(function(){i[o](null==n[t]?this.options[t]:n[t]),\"loadingText\"==t?(this.isLoading=!0,i.addClass(e).attr(e,e).prop(e,!0)):this.isLoading&&(this.isLoading=!1,i.removeClass(e).removeAttr(e).prop(e,!1))},this),0)},n.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle=\"buttons\"]');if(e.length){var i=this.$element.find(\"input\");\"radio\"==i.prop(\"type\")?(i.prop(\"checked\")&&(t=!1),e.find(\".active\").removeClass(\"active\"),this.$element.addClass(\"active\")):\"checkbox\"==i.prop(\"type\")&&(i.prop(\"checked\")!==this.$element.hasClass(\"active\")&&(t=!1),this.$element.toggleClass(\"active\")),i.prop(\"checked\",this.$element.hasClass(\"active\")),t&&i.trigger(\"change\")}else this.$element.attr(\"aria-pressed\",!this.$element.hasClass(\"active\")),this.$element.toggleClass(\"active\")};var t=s.fn.button;s.fn.button=i,s.fn.button.Constructor=n,s.fn.button.noConflict=function(){return s.fn.button=t,this},s(document).on(\"click.bs.button.data-api\",'[data-toggle^=\"button\"]',function(t){var e=s(t.target).closest(\".btn\");i.call(e,\"toggle\"),s(t.target).is('input[type=\"radio\"], input[type=\"checkbox\"]')||(t.preventDefault(),e.is(\"input,button\")?e.trigger(\"focus\"):e.find(\"input:visible,button:visible\").first().trigger(\"focus\"))}).on(\"focus.bs.button.data-api blur.bs.button.data-api\",'[data-toggle^=\"button\"]',function(t){s(t.target).closest(\".btn\").toggleClass(\"focus\",/^focus(in)?$/.test(t.type))})}(jQuery),function(p){\"use strict\";var c=function(t,e){this.$element=p(t),this.$indicators=this.$element.find(\".carousel-indicators\"),this.options=e,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on(\"keydown.bs.carousel\",p.proxy(this.keydown,this)),\"hover\"==this.options.pause&&!(\"ontouchstart\"in document.documentElement)&&this.$element.on(\"mouseenter.bs.carousel\",p.proxy(this.pause,this)).on(\"mouseleave.bs.carousel\",p.proxy(this.cycle,this))};function r(n){return this.each(function(){var t=p(this),e=t.data(\"bs.carousel\"),i=p.extend({},c.DEFAULTS,t.data(),\"object\"==typeof n&&n),o=\"string\"==typeof n?n:i.slide;e||t.data(\"bs.carousel\",e=new c(this,i)),\"number\"==typeof n?e.to(n):o?e[o]():i.interval&&e.pause().cycle()})}c.VERSION=\"3.4.1\",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:\"hover\",wrap:!0,keyboard:!0},c.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},c.prototype.cycle=function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(p.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(t){return this.$items=t.parent().children(\".item\"),this.$items.index(t||this.$active)},c.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e);if((\"prev\"==t&&0===i||\"next\"==t&&i==this.$items.length-1)&&!this.options.wrap)return e;var o=(i+(\"prev\"==t?-1:1))%this.$items.length;return this.$items.eq(o)},c.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(\".item.active\"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(i<t?\"next\":\"prev\",this.$items.eq(t))},c.prototype.pause=function(t){return t||(this.paused=!0),this.$element.find(\".next, .prev\").length&&p.support.transition&&(this.$element.trigger(p.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide(\"next\")},c.prototype.prev=function(){if(!this.sliding)return this.slide(\"prev\")},c.prototype.slide=function(t,e){var i=this.$element.find(\".item.active\"),o=e||this.getItemForDirection(t,i),n=this.interval,s=\"next\"==t?\"left\":\"right\",a=this;if(o.hasClass(\"active\"))return this.sliding=!1;var r=o[0],l=p.Event(\"slide.bs.carousel\",{relatedTarget:r,direction:s});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,n&&this.pause(),this.$indicators.length){this.$indicators.find(\".active\").removeClass(\"active\");var h=p(this.$indicators.children()[this.getItemIndex(o)]);h&&h.addClass(\"active\")}var d=p.Event(\"slid.bs.carousel\",{relatedTarget:r,direction:s});return p.support.transition&&this.$element.hasClass(\"slide\")?(o.addClass(t),\"object\"==typeof o&&o.length&&o[0].offsetWidth,i.addClass(s),o.addClass(s),i.one(\"bsTransitionEnd\",function(){o.removeClass([t,s].join(\" \")).addClass(\"active\"),i.removeClass([\"active\",s].join(\" \")),a.sliding=!1,setTimeout(function(){a.$element.trigger(d)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(i.removeClass(\"active\"),o.addClass(\"active\"),this.sliding=!1,this.$element.trigger(d)),n&&this.cycle(),this}};var t=p.fn.carousel;p.fn.carousel=r,p.fn.carousel.Constructor=c,p.fn.carousel.noConflict=function(){return p.fn.carousel=t,this};var e=function(t){var e=p(this),i=e.attr(\"href\");i&&(i=i.replace(/.*(?=#[^\\s]+$)/,\"\"));var o=e.attr(\"data-target\")||i,n=p(document).find(o);if(n.hasClass(\"carousel\")){var s=p.extend({},n.data(),e.data()),a=e.attr(\"data-slide-to\");a&&(s.interval=!1),r.call(n,s),a&&n.data(\"bs.carousel\").to(a),t.preventDefault()}};p(document).on(\"click.bs.carousel.data-api\",\"[data-slide]\",e).on(\"click.bs.carousel.data-api\",\"[data-slide-to]\",e),p(window).on(\"load\",function(){p('[data-ride=\"carousel\"]').each(function(){var t=p(this);r.call(t,t.data())})})}(jQuery),function(a){\"use strict\";var r=function(t,e){this.$element=a(t),this.options=a.extend({},r.DEFAULTS,e),this.$trigger=a('[data-toggle=\"collapse\"][href=\"#'+t.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+t.id+'\"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function n(t){var e,i=t.attr(\"data-target\")||(e=t.attr(\"href\"))&&e.replace(/.*(?=#[^\\s]+$)/,\"\");return a(document).find(i)}function l(o){return this.each(function(){var t=a(this),e=t.data(\"bs.collapse\"),i=a.extend({},r.DEFAULTS,t.data(),\"object\"==typeof o&&o);!e&&i.toggle&&/show|hide/.test(o)&&(i.toggle=!1),e||t.data(\"bs.collapse\",e=new r(this,i)),\"string\"==typeof o&&e[o]()})}r.VERSION=\"3.4.1\",r.TRANSITION_DURATION=350,r.DEFAULTS={toggle:!0},r.prototype.dimension=function(){return this.$element.hasClass(\"width\")?\"width\":\"height\"},r.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass(\"in\")){var t,e=this.$parent&&this.$parent.children(\".panel\").children(\".in, .collapsing\");if(!(e&&e.length&&(t=e.data(\"bs.collapse\"))&&t.transitioning)){var i=a.Event(\"show.bs.collapse\");if(this.$element.trigger(i),!i.isDefaultPrevented()){e&&e.length&&(l.call(e,\"hide\"),t||e.data(\"bs.collapse\",null));var o=this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[o](0).attr(\"aria-expanded\",!0),this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\",!0),this.transitioning=1;var n=function(){this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[o](\"\"),this.transitioning=0,this.$element.trigger(\"shown.bs.collapse\")};if(!a.support.transition)return n.call(this);var s=a.camelCase([\"scroll\",o].join(\"-\"));this.$element.one(\"bsTransitionEnd\",a.proxy(n,this)).emulateTransitionEnd(r.TRANSITION_DURATION)[o](this.$element[0][s])}}}},r.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass(\"in\")){var t=a.Event(\"hide.bs.collapse\");if(this.$element.trigger(t),!t.isDefaultPrevented()){var e=this.dimension();this.$element[e](this.$element[e]())[0].offsetHeight,this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\",!1),this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\",!1),this.transitioning=1;var i=function(){this.transitioning=0,this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\")};if(!a.support.transition)return i.call(this);this.$element[e](0).one(\"bsTransitionEnd\",a.proxy(i,this)).emulateTransitionEnd(r.TRANSITION_DURATION)}}},r.prototype.toggle=function(){this[this.$element.hasClass(\"in\")?\"hide\":\"show\"]()},r.prototype.getParent=function(){return a(document).find(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"'+this.options.parent+'\"]').each(a.proxy(function(t,e){var i=a(e);this.addAriaAndCollapsedClass(n(i),i)},this)).end()},r.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass(\"in\");t.attr(\"aria-expanded\",i),e.toggleClass(\"collapsed\",!i).attr(\"aria-expanded\",i)};var t=a.fn.collapse;a.fn.collapse=l,a.fn.collapse.Constructor=r,a.fn.collapse.noConflict=function(){return a.fn.collapse=t,this},a(document).on(\"click.bs.collapse.data-api\",'[data-toggle=\"collapse\"]',function(t){var e=a(this);e.attr(\"data-target\")||t.preventDefault();var i=n(e),o=i.data(\"bs.collapse\")?\"toggle\":e.data();l.call(i,o)})}(jQuery),function(a){\"use strict\";var r='[data-toggle=\"dropdown\"]',o=function(t){a(t).on(\"click.bs.dropdown\",this.toggle)};function l(t){var e=t.attr(\"data-target\");e||(e=(e=t.attr(\"href\"))&&/#[A-Za-z]/.test(e)&&e.replace(/.*(?=#[^\\s]*$)/,\"\"));var i=\"#\"!==e?a(document).find(e):null;return i&&i.length?i:t.parent()}function s(o){o&&3===o.which||(a(\".dropdown-backdrop\").remove(),a(r).each(function(){var t=a(this),e=l(t),i={relatedTarget:this};e.hasClass(\"open\")&&(o&&\"click\"==o.type&&/input|textarea/i.test(o.target.tagName)&&a.contains(e[0],o.target)||(e.trigger(o=a.Event(\"hide.bs.dropdown\",i)),o.isDefaultPrevented()||(t.attr(\"aria-expanded\",\"false\"),e.removeClass(\"open\").trigger(a.Event(\"hidden.bs.dropdown\",i)))))}))}o.VERSION=\"3.4.1\",o.prototype.toggle=function(t){var e=a(this);if(!e.is(\".disabled, :disabled\")){var i=l(e),o=i.hasClass(\"open\");if(s(),!o){\"ontouchstart\"in document.documentElement&&!i.closest(\".navbar-nav\").length&&a(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(a(this)).on(\"click\",s);var n={relatedTarget:this};if(i.trigger(t=a.Event(\"show.bs.dropdown\",n)),t.isDefaultPrevented())return;e.trigger(\"focus\").attr(\"aria-expanded\",\"true\"),i.toggleClass(\"open\").trigger(a.Event(\"shown.bs.dropdown\",n))}return!1}},o.prototype.keydown=function(t){if(/(38|40|27|32)/.test(t.which)&&!/input|textarea/i.test(t.target.tagName)){var e=a(this);if(t.preventDefault(),t.stopPropagation(),!e.is(\".disabled, :disabled\")){var i=l(e),o=i.hasClass(\"open\");if(!o&&27!=t.which||o&&27==t.which)return 27==t.which&&i.find(r).trigger(\"focus\"),e.trigger(\"click\");var n=i.find(\".dropdown-menu li:not(.disabled):visible a\");if(n.length){var s=n.index(t.target);38==t.which&&0<s&&s--,40==t.which&&s<n.length-1&&s++,~s||(s=0),n.eq(s).trigger(\"focus\")}}}};var t=a.fn.dropdown;a.fn.dropdown=function e(i){return this.each(function(){var t=a(this),e=t.data(\"bs.dropdown\");e||t.data(\"bs.dropdown\",e=new o(this)),\"string\"==typeof i&&e[i].call(t)})},a.fn.dropdown.Constructor=o,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=t,this},a(document).on(\"click.bs.dropdown.data-api\",s).on(\"click.bs.dropdown.data-api\",\".dropdown form\",function(t){t.stopPropagation()}).on(\"click.bs.dropdown.data-api\",r,o.prototype.toggle).on(\"keydown.bs.dropdown.data-api\",r,o.prototype.keydown).on(\"keydown.bs.dropdown.data-api\",\".dropdown-menu\",o.prototype.keydown)}(jQuery),function(a){\"use strict\";var s=function(t,e){this.options=e,this.$body=a(document.body),this.$element=a(t),this.$dialog=this.$element.find(\".modal-dialog\"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.fixedContent=\".navbar-fixed-top, .navbar-fixed-bottom\",this.options.remote&&this.$element.find(\".modal-content\").load(this.options.remote,a.proxy(function(){this.$element.trigger(\"loaded.bs.modal\")},this))};function r(o,n){return this.each(function(){var t=a(this),e=t.data(\"bs.modal\"),i=a.extend({},s.DEFAULTS,t.data(),\"object\"==typeof o&&o);e||t.data(\"bs.modal\",e=new s(this,i)),\"string\"==typeof o?e[o](n):i.show&&e.show(n)})}s.VERSION=\"3.4.1\",s.TRANSITION_DURATION=300,s.BACKDROP_TRANSITION_DURATION=150,s.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},s.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},s.prototype.show=function(i){var o=this,t=a.Event(\"show.bs.modal\",{relatedTarget:i});this.$element.trigger(t),this.isShown||t.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass(\"modal-open\"),this.escape(),this.resize(),this.$element.on(\"click.dismiss.bs.modal\",'[data-dismiss=\"modal\"]',a.proxy(this.hide,this)),this.$dialog.on(\"mousedown.dismiss.bs.modal\",function(){o.$element.one(\"mouseup.dismiss.bs.modal\",function(t){a(t.target).is(o.$element)&&(o.ignoreBackdropClick=!0)})}),this.backdrop(function(){var t=a.support.transition&&o.$element.hasClass(\"fade\");o.$element.parent().length||o.$element.appendTo(o.$body),o.$element.show().scrollTop(0),o.adjustDialog(),t&&o.$element[0].offsetWidth,o.$element.addClass(\"in\"),o.enforceFocus();var e=a.Event(\"shown.bs.modal\",{relatedTarget:i});t?o.$dialog.one(\"bsTransitionEnd\",function(){o.$element.trigger(\"focus\").trigger(e)}).emulateTransitionEnd(s.TRANSITION_DURATION):o.$element.trigger(\"focus\").trigger(e)}))},s.prototype.hide=function(t){t&&t.preventDefault(),t=a.Event(\"hide.bs.modal\"),this.$element.trigger(t),this.isShown&&!t.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off(\"focusin.bs.modal\"),this.$element.removeClass(\"in\").off(\"click.dismiss.bs.modal\").off(\"mouseup.dismiss.bs.modal\"),this.$dialog.off(\"mousedown.dismiss.bs.modal\"),a.support.transition&&this.$element.hasClass(\"fade\")?this.$element.one(\"bsTransitionEnd\",a.proxy(this.hideModal,this)).emulateTransitionEnd(s.TRANSITION_DURATION):this.hideModal())},s.prototype.enforceFocus=function(){a(document).off(\"focusin.bs.modal\").on(\"focusin.bs.modal\",a.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger(\"focus\")},this))},s.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(\"keydown.dismiss.bs.modal\",a.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off(\"keydown.dismiss.bs.modal\")},s.prototype.resize=function(){this.isShown?a(window).on(\"resize.bs.modal\",a.proxy(this.handleUpdate,this)):a(window).off(\"resize.bs.modal\")},s.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass(\"modal-open\"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger(\"hidden.bs.modal\")})},s.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},s.prototype.backdrop=function(t){var e=this,i=this.$element.hasClass(\"fade\")?\"fade\":\"\";if(this.isShown&&this.options.backdrop){var o=a.support.transition&&i;if(this.$backdrop=a(document.createElement(\"div\")).addClass(\"modal-backdrop \"+i).appendTo(this.$body),this.$element.on(\"click.dismiss.bs.modal\",a.proxy(function(t){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:t.target===t.currentTarget&&(\"static\"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass(\"in\"),!t)return;o?this.$backdrop.one(\"bsTransitionEnd\",t).emulateTransitionEnd(s.BACKDROP_TRANSITION_DURATION):t()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass(\"in\");var n=function(){e.removeBackdrop(),t&&t()};a.support.transition&&this.$element.hasClass(\"fade\")?this.$backdrop.one(\"bsTransitionEnd\",n).emulateTransitionEnd(s.BACKDROP_TRANSITION_DURATION):n()}else t&&t()},s.prototype.handleUpdate=function(){this.adjustDialog()},s.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:\"\"})},s.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},s.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},s.prototype.setScrollbar=function(){var t=parseInt(this.$body.css(\"padding-right\")||0,10);this.originalBodyPad=document.body.style.paddingRight||\"\";var n=this.scrollbarWidth;this.bodyIsOverflowing&&(this.$body.css(\"padding-right\",t+n),a(this.fixedContent).each(function(t,e){var i=e.style.paddingRight,o=a(e).css(\"padding-right\");a(e).data(\"padding-right\",i).css(\"padding-right\",parseFloat(o)+n+\"px\")}))},s.prototype.resetScrollbar=function(){this.$body.css(\"padding-right\",this.originalBodyPad),a(this.fixedContent).each(function(t,e){var i=a(e).data(\"padding-right\");a(e).removeData(\"padding-right\"),e.style.paddingRight=i||\"\"})},s.prototype.measureScrollbar=function(){var t=document.createElement(\"div\");t.className=\"modal-scrollbar-measure\",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var t=a.fn.modal;a.fn.modal=r,a.fn.modal.Constructor=s,a.fn.modal.noConflict=function(){return a.fn.modal=t,this},a(document).on(\"click.bs.modal.data-api\",'[data-toggle=\"modal\"]',function(t){var e=a(this),i=e.attr(\"href\"),o=e.attr(\"data-target\")||i&&i.replace(/.*(?=#[^\\s]+$)/,\"\"),n=a(document).find(o),s=n.data(\"bs.modal\")?\"toggle\":a.extend({remote:!/#/.test(i)&&i},n.data(),e.data());e.is(\"a\")&&t.preventDefault(),n.one(\"show.bs.modal\",function(t){t.isDefaultPrevented()||n.one(\"hidden.bs.modal\",function(){e.is(\":visible\")&&e.trigger(\"focus\")})}),r.call(n,s,this)})}(jQuery),function(g){\"use strict\";var o=[\"sanitize\",\"whiteList\",\"sanitizeFn\"],a=[\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"],t={\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",/^aria-[\\w-]*$/i],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},r=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,l=/^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function u(t,e){var i=t.nodeName.toLowerCase();if(-1!==g.inArray(i,e))return-1===g.inArray(i,a)||Boolean(t.nodeValue.match(r)||t.nodeValue.match(l));for(var o=g(e).filter(function(t,e){return e instanceof RegExp}),n=0,s=o.length;n<s;n++)if(i.match(o[n]))return!0;return!1}function n(t,e,i){if(0===t.length)return t;if(i&&\"function\"==typeof i)return i(t);if(!document.implementation||!document.implementation.createHTMLDocument)return t;var o=document.implementation.createHTMLDocument(\"sanitization\");o.body.innerHTML=t;for(var n=g.map(e,function(t,e){return e}),s=g(o.body).find(\"*\"),a=0,r=s.length;a<r;a++){var l=s[a],h=l.nodeName.toLowerCase();if(-1!==g.inArray(h,n))for(var d=g.map(l.attributes,function(t){return t}),p=[].concat(e[\"*\"]||[],e[h]||[]),c=0,f=d.length;c<f;c++)u(d[c],p)||l.removeAttribute(d[c].nodeName);else l.parentNode.removeChild(l)}return o.body.innerHTML}var m=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init(\"tooltip\",t,e)};m.VERSION=\"3.4.1\",m.TRANSITION_DURATION=150,m.DEFAULTS={animation:!0,placement:\"top\",selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0},sanitize:!0,sanitizeFn:null,whiteList:t},m.prototype.init=function(t,e,i){if(this.enabled=!0,this.type=t,this.$element=g(e),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&g(document).find(g.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var o=this.options.trigger.split(\" \"),n=o.length;n--;){var s=o[n];if(\"click\"==s)this.$element.on(\"click.\"+this.type,this.options.selector,g.proxy(this.toggle,this));else if(\"manual\"!=s){var a=\"hover\"==s?\"mouseenter\":\"focusin\",r=\"hover\"==s?\"mouseleave\":\"focusout\";this.$element.on(a+\".\"+this.type,this.options.selector,g.proxy(this.enter,this)),this.$element.on(r+\".\"+this.type,this.options.selector,g.proxy(this.leave,this))}}this.options.selector?this._options=g.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},m.prototype.getDefaults=function(){return m.DEFAULTS},m.prototype.getOptions=function(t){var e=this.$element.data();for(var i in e)e.hasOwnProperty(i)&&-1!==g.inArray(i,o)&&delete e[i];return(t=g.extend({},this.getDefaults(),e,t)).delay&&\"number\"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t.sanitize&&(t.template=n(t.template,t.whiteList,t.sanitizeFn)),t},m.prototype.getDelegateOptions=function(){var i={},o=this.getDefaults();return this._options&&g.each(this._options,function(t,e){o[t]!=e&&(i[t]=e)}),i},m.prototype.enter=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data(\"bs.\"+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data(\"bs.\"+this.type,e)),t instanceof g.Event&&(e.inState[\"focusin\"==t.type?\"focus\":\"hover\"]=!0),e.tip().hasClass(\"in\")||\"in\"==e.hoverState)e.hoverState=\"in\";else{if(clearTimeout(e.timeout),e.hoverState=\"in\",!e.options.delay||!e.options.delay.show)return e.show();e.timeout=setTimeout(function(){\"in\"==e.hoverState&&e.show()},e.options.delay.show)}},m.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},m.prototype.leave=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data(\"bs.\"+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data(\"bs.\"+this.type,e)),t instanceof g.Event&&(e.inState[\"focusout\"==t.type?\"focus\":\"hover\"]=!1),!e.isInStateTrue()){if(clearTimeout(e.timeout),e.hoverState=\"out\",!e.options.delay||!e.options.delay.hide)return e.hide();e.timeout=setTimeout(function(){\"out\"==e.hoverState&&e.hide()},e.options.delay.hide)}},m.prototype.show=function(){var t=g.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var e=g.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!e)return;var i=this,o=this.tip(),n=this.getUID(this.type);this.setContent(),o.attr(\"id\",n),this.$element.attr(\"aria-describedby\",n),this.options.animation&&o.addClass(\"fade\");var s=\"function\"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,a=/\\s?auto?\\s?/i,r=a.test(s);r&&(s=s.replace(a,\"\")||\"top\"),o.detach().css({top:0,left:0,display:\"block\"}).addClass(s).data(\"bs.\"+this.type,this),this.options.container?o.appendTo(g(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var l=this.getPosition(),h=o[0].offsetWidth,d=o[0].offsetHeight;if(r){var p=s,c=this.getPosition(this.$viewport);s=\"bottom\"==s&&l.bottom+d>c.bottom?\"top\":\"top\"==s&&l.top-d<c.top?\"bottom\":\"right\"==s&&l.right+h>c.width?\"left\":\"left\"==s&&l.left-h<c.left?\"right\":s,o.removeClass(p).addClass(s)}var f=this.getCalculatedOffset(s,l,h,d);this.applyPlacement(f,s);var u=function(){var t=i.hoverState;i.$element.trigger(\"shown.bs.\"+i.type),i.hoverState=null,\"out\"==t&&i.leave(i)};g.support.transition&&this.$tip.hasClass(\"fade\")?o.one(\"bsTransitionEnd\",u).emulateTransitionEnd(m.TRANSITION_DURATION):u()}},m.prototype.applyPlacement=function(t,e){var i=this.tip(),o=i[0].offsetWidth,n=i[0].offsetHeight,s=parseInt(i.css(\"margin-top\"),10),a=parseInt(i.css(\"margin-left\"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),t.top+=s,t.left+=a,g.offset.setOffset(i[0],g.extend({using:function(t){i.css({top:Math.round(t.top),left:Math.round(t.left)})}},t),0),i.addClass(\"in\");var r=i[0].offsetWidth,l=i[0].offsetHeight;\"top\"==e&&l!=n&&(t.top=t.top+n-l);var h=this.getViewportAdjustedDelta(e,t,r,l);h.left?t.left+=h.left:t.top+=h.top;var d=/top|bottom/.test(e),p=d?2*h.left-o+r:2*h.top-n+l,c=d?\"offsetWidth\":\"offsetHeight\";i.offset(t),this.replaceArrow(p,i[0][c],d)},m.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?\"left\":\"top\",50*(1-t/e)+\"%\").css(i?\"top\":\"left\",\"\")},m.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();this.options.html?(this.options.sanitize&&(e=n(e,this.options.whiteList,this.options.sanitizeFn)),t.find(\".tooltip-inner\").html(e)):t.find(\".tooltip-inner\").text(e),t.removeClass(\"fade in top bottom left right\")},m.prototype.hide=function(t){var e=this,i=g(this.$tip),o=g.Event(\"hide.bs.\"+this.type);function n(){\"in\"!=e.hoverState&&i.detach(),e.$element&&e.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\"+e.type),t&&t()}if(this.$element.trigger(o),!o.isDefaultPrevented())return i.removeClass(\"in\"),g.support.transition&&i.hasClass(\"fade\")?i.one(\"bsTransitionEnd\",n).emulateTransitionEnd(m.TRANSITION_DURATION):n(),this.hoverState=null,this},m.prototype.fixTitle=function(){var t=this.$element;(t.attr(\"title\")||\"string\"!=typeof t.attr(\"data-original-title\"))&&t.attr(\"data-original-title\",t.attr(\"title\")||\"\").attr(\"title\",\"\")},m.prototype.hasContent=function(){return this.getTitle()},m.prototype.getPosition=function(t){var e=(t=t||this.$element)[0],i=\"BODY\"==e.tagName,o=e.getBoundingClientRect();null==o.width&&(o=g.extend({},o,{width:o.right-o.left,height:o.bottom-o.top}));var n=window.SVGElement&&e instanceof window.SVGElement,s=i?{top:0,left:0}:n?null:t.offset(),a={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},r=i?{width:g(window).width(),height:g(window).height()}:null;return g.extend({},o,a,r,s)},m.prototype.getCalculatedOffset=function(t,e,i,o){return\"bottom\"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:\"top\"==t?{top:e.top-o,left:e.left+e.width/2-i/2}:\"left\"==t?{top:e.top+e.height/2-o/2,left:e.left-i}:{top:e.top+e.height/2-o/2,left:e.left+e.width}},m.prototype.getViewportAdjustedDelta=function(t,e,i,o){var n={top:0,left:0};if(!this.$viewport)return n;var s=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var r=e.top-s-a.scroll,l=e.top+s-a.scroll+o;r<a.top?n.top=a.top-r:l>a.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;h<a.left?n.left=a.left-h:d>a.right&&(n.left=a.left+a.width-d)}return n},m.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr(\"data-original-title\")||(\"function\"==typeof e.title?e.title.call(t[0]):e.title)},m.prototype.getUID=function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},m.prototype.tip=function(){if(!this.$tip&&(this.$tip=g(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},m.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},m.prototype.enable=function(){this.enabled=!0},m.prototype.disable=function(){this.enabled=!1},m.prototype.toggleEnabled=function(){this.enabled=!this.enabled},m.prototype.toggle=function(t){var e=this;t&&((e=g(t.currentTarget).data(\"bs.\"+this.type))||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data(\"bs.\"+this.type,e))),t?(e.inState.click=!e.inState.click,e.isInStateTrue()?e.enter(e):e.leave(e)):e.tip().hasClass(\"in\")?e.leave(e):e.enter(e)},m.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off(\".\"+t.type).removeData(\"bs.\"+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})},m.prototype.sanitizeHtml=function(t){return n(t,this.options.whiteList,this.options.sanitizeFn)};var e=g.fn.tooltip;g.fn.tooltip=function i(o){return this.each(function(){var t=g(this),e=t.data(\"bs.tooltip\"),i=\"object\"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data(\"bs.tooltip\",e=new m(this,i)),\"string\"==typeof o&&e[o]())})},g.fn.tooltip.Constructor=m,g.fn.tooltip.noConflict=function(){return g.fn.tooltip=e,this}}(jQuery),function(n){\"use strict\";var s=function(t,e){this.init(\"popover\",t,e)};if(!n.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");s.VERSION=\"3.4.1\",s.DEFAULTS=n.extend({},n.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'}),((s.prototype=n.extend({},n.fn.tooltip.Constructor.prototype)).constructor=s).prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();if(this.options.html){var o=typeof i;this.options.sanitize&&(e=this.sanitizeHtml(e),\"string\"===o&&(i=this.sanitizeHtml(i))),t.find(\".popover-title\").html(e),t.find(\".popover-content\").children().detach().end()[\"string\"===o?\"html\":\"append\"](i)}else t.find(\".popover-title\").text(e),t.find(\".popover-content\").children().detach().end().text(i);t.removeClass(\"fade top bottom left right in\"),t.find(\".popover-title\").html()||t.find(\".popover-title\").hide()},s.prototype.hasContent=function(){return this.getTitle()||this.getContent()},s.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr(\"data-content\")||(\"function\"==typeof e.content?e.content.call(t[0]):e.content)},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var t=n.fn.popover;n.fn.popover=function e(o){return this.each(function(){var t=n(this),e=t.data(\"bs.popover\"),i=\"object\"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data(\"bs.popover\",e=new s(this,i)),\"string\"==typeof o&&e[o]())})},n.fn.popover.Constructor=s,n.fn.popover.noConflict=function(){return n.fn.popover=t,this}}(jQuery),function(s){\"use strict\";function n(t,e){this.$body=s(document.body),this.$scrollElement=s(t).is(document.body)?s(window):s(t),this.options=s.extend({},n.DEFAULTS,e),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",s.proxy(this.process,this)),this.refresh(),this.process()}function e(o){return this.each(function(){var t=s(this),e=t.data(\"bs.scrollspy\"),i=\"object\"==typeof o&&o;e||t.data(\"bs.scrollspy\",e=new n(this,i)),\"string\"==typeof o&&e[o]()})}n.VERSION=\"3.4.1\",n.DEFAULTS={offset:10},n.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},n.prototype.refresh=function(){var t=this,o=\"offset\",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),s.isWindow(this.$scrollElement[0])||(o=\"position\",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=s(this),e=t.data(\"target\")||t.attr(\"href\"),i=/^#./.test(e)&&s(e);return i&&i.length&&i.is(\":visible\")&&[[i[o]().top+n,e]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},n.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),o<=e)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e<n[0])return this.activeTarget=null,this.clear();for(t=n.length;t--;)a!=s[t]&&e>=n[t]&&(n[t+1]===undefined||e<n[t+1])&&this.activate(s[t])},n.prototype.activate=function(t){this.activeTarget=t,this.clear();var e=this.selector+'[data-target=\"'+t+'\"],'+this.selector+'[href=\"'+t+'\"]',i=s(e).parents(\"li\").addClass(\"active\");i.parent(\".dropdown-menu\").length&&(i=i.closest(\"li.dropdown\").addClass(\"active\")),i.trigger(\"activate.bs.scrollspy\")},n.prototype.clear=function(){s(this.selector).parentsUntil(this.options.target,\".active\").removeClass(\"active\")};var t=s.fn.scrollspy;s.fn.scrollspy=e,s.fn.scrollspy.Constructor=n,s.fn.scrollspy.noConflict=function(){return s.fn.scrollspy=t,this},s(window).on(\"load.bs.scrollspy.data-api\",function(){s('[data-spy=\"scroll\"]').each(function(){var t=s(this);e.call(t,t.data())})})}(jQuery),function(r){\"use strict\";var a=function(t){this.element=r(t)};function e(i){return this.each(function(){var t=r(this),e=t.data(\"bs.tab\");e||t.data(\"bs.tab\",e=new a(this)),\"string\"==typeof i&&e[i]()})}a.VERSION=\"3.4.1\",a.TRANSITION_DURATION=150,a.prototype.show=function(){var t=this.element,e=t.closest(\"ul:not(.dropdown-menu)\"),i=t.data(\"target\");if(i||(i=(i=t.attr(\"href\"))&&i.replace(/.*(?=#[^\\s]*$)/,\"\")),!t.parent(\"li\").hasClass(\"active\")){var o=e.find(\".active:last a\"),n=r.Event(\"hide.bs.tab\",{relatedTarget:t[0]}),s=r.Event(\"show.bs.tab\",{relatedTarget:o[0]});if(o.trigger(n),t.trigger(s),!s.isDefaultPrevented()&&!n.isDefaultPrevented()){var a=r(document).find(i);this.activate(t.closest(\"li\"),e),this.activate(a,a.parent(),function(){o.trigger({type:\"hidden.bs.tab\",relatedTarget:t[0]}),t.trigger({type:\"shown.bs.tab\",relatedTarget:o[0]})})}}},a.prototype.activate=function(t,e,i){var o=e.find(\"> .active\"),n=i&&r.support.transition&&(o.length&&o.hasClass(\"fade\")||!!e.find(\"> .fade\").length);function s(){o.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),t.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),n?(t[0].offsetWidth,t.addClass(\"in\")):t.removeClass(\"fade\"),t.parent(\".dropdown-menu\").length&&t.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),i&&i()}o.length&&n?o.one(\"bsTransitionEnd\",s).emulateTransitionEnd(a.TRANSITION_DURATION):s(),o.removeClass(\"in\")};var t=r.fn.tab;r.fn.tab=e,r.fn.tab.Constructor=a,r.fn.tab.noConflict=function(){return r.fn.tab=t,this};var i=function(t){t.preventDefault(),e.call(r(this),\"show\")};r(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',i).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',i)}(jQuery),function(l){\"use strict\";var h=function(t,e){this.options=l.extend({},h.DEFAULTS,e);var i=this.options.target===h.DEFAULTS.target?l(this.options.target):l(document).find(this.options.target);this.$target=i.on(\"scroll.bs.affix.data-api\",l.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",l.proxy(this.checkPositionWithEventLoop,this)),this.$element=l(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function i(o){return this.each(function(){var t=l(this),e=t.data(\"bs.affix\"),i=\"object\"==typeof o&&o;e||t.data(\"bs.affix\",e=new h(this,i)),\"string\"==typeof o&&e[o]()})}h.VERSION=\"3.4.1\",h.RESET=\"affix affix-top affix-bottom\",h.DEFAULTS={offset:0,target:window},h.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&\"top\"==this.affixed)return n<i&&\"top\";if(\"bottom\"==this.affixed)return null!=i?!(n+this.unpin<=s.top)&&\"bottom\":!(n+a<=t-o)&&\"bottom\";var r=null==this.affixed,l=r?n:s.top;return null!=i&&n<=i?\"top\":null!=o&&t-o<=l+(r?a:e)&&\"bottom\"},h.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(h.RESET).addClass(\"affix\");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},h.prototype.checkPositionWithEventLoop=function(){setTimeout(l.proxy(this.checkPosition,this),1)},h.prototype.checkPosition=function(){if(this.$element.is(\":visible\")){var t=this.$element.height(),e=this.options.offset,i=e.top,o=e.bottom,n=Math.max(l(document).height(),l(document.body).height());\"object\"!=typeof e&&(o=i=e),\"function\"==typeof i&&(i=e.top(this.$element)),\"function\"==typeof o&&(o=e.bottom(this.$element));var s=this.getState(n,t,i,o);if(this.affixed!=s){null!=this.unpin&&this.$element.css(\"top\",\"\");var a=\"affix\"+(s?\"-\"+s:\"\"),r=l.Event(a+\".bs.affix\");if(this.$element.trigger(r),r.isDefaultPrevented())return;this.affixed=s,this.unpin=\"bottom\"==s?this.getPinnedOffset():null,this.$element.removeClass(h.RESET).addClass(a).trigger(a.replace(\"affix\",\"affixed\")+\".bs.affix\")}\"bottom\"==s&&this.$element.offset({top:n-t-o})}};var t=l.fn.affix;l.fn.affix=i,l.fn.affix.Constructor=h,l.fn.affix.noConflict=function(){return l.fn.affix=t,this},l(window).on(\"load\",function(){l('[data-spy=\"affix\"]').each(function(){var t=l(this),e=t.data();e.offset=e.offset||{},null!=e.offsetBottom&&(e.offset.bottom=e.offsetBottom),null!=e.offsetTop&&(e.offset.top=e.offsetTop),i.call(t,e)})})}(jQuery);\ndefine(\"bootstrap\", [\"jquery\"], function(){});\n\n","/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!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(e,t){\"use strict\";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return\"function\"==typeof t&&\"number\"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement(\"script\");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?l[c.call(e)]||\"object\":typeof e}var b=\"3.3.1\",w=function(e,t){return new w.fn.init(e,t)},T=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;w.fn=w.prototype={jquery:\"3.3.1\",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.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||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:\"jQuery\"+(\"3.3.1\"+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]\"!==c.call(e))&&(!(t=i(e))||\"function\"==typeof(n=f.call(t,\"constructor\")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},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},trim:function(e){return null==e?\"\":(e+\"\").replace(T,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,\"string\"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},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=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),\"function\"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){l[\"[object \"+t+\"]\"]=t.toLowerCase()});function C(e){var t=!!e&&\"length\"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b=\"sizzle\"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",M=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",R=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",I=\"\\\\[\"+M+\"*(\"+R+\")(?:\"+M+\"*([*^$|!~]?=)\"+M+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+R+\"))|)\"+M+\"*\\\\]\",W=\":(\"+R+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+I+\")*)|.*)\\\\)|)\",$=new RegExp(M+\"+\",\"g\"),B=new RegExp(\"^\"+M+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+M+\"+$\",\"g\"),F=new RegExp(\"^\"+M+\"*,\"+M+\"*\"),_=new RegExp(\"^\"+M+\"*([>+~]|\"+M+\")\"+M+\"*\"),z=new RegExp(\"=\"+M+\"*([^\\\\]'\\\"]*?)\"+M+\"*\\\\]\",\"g\"),X=new RegExp(W),U=new RegExp(\"^\"+R+\"$\"),V={ID:new RegExp(\"^#(\"+R+\")\"),CLASS:new RegExp(\"^\\\\.(\"+R+\")\"),TAG:new RegExp(\"^(\"+R+\"|[*])\"),ATTR:new RegExp(\"^\"+I),PSEUDO:new RegExp(\"^\"+W),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+M+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+M+\"*(?:([+-]|)\"+M+\"*(\\\\d+)|))\"+M+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+P+\")$\",\"i\"),needsContext:new RegExp(\"^\"+M+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+M+\"*((?:-\\\\d)?\\\\d*)\"+M+\"*\\\\)|)(?=[^-]|$)\",\"i\")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\\d$/i,Q=/^[^{]+\\{\\s*\\[native \\w/,J=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,K=/[+~]/,Z=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+M+\"?|(\"+M+\")|.)\",\"ig\"),ee=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ne=function(e,t){return t?\"\\0\"===e?\"\\ufffd\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&(\"form\"in e||\"label\"in e)},{dir:\"parentNode\",next:\"legend\"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],\"string\"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+\" \"]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if(\"object\"!==t.nodeName.toLowerCase()){(c=t.getAttribute(\"id\"))?c=c.replace(te,ne):t.setAttribute(\"id\",c=b),s=(h=a(e)).length;while(s--)h[s]=\"#\"+c+\" \"+ve(h[s]);v=h.join(\",\"),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute(\"id\")}}}return u(e.replace(B,\"$1\"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+\" \")>r.cacheLength&&delete t[e.shift()],t[n+\" \"]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split(\"|\"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return\"input\"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function de(e){return function(t){return\"form\"in t?t.parentNode&&!1===t.disabled?\"label\"in t?\"label\"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:\"label\"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener(\"unload\",re,!1):i.attachEvent&&i.attachEvent(\"onunload\",re)),n.attributes=ue(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute(\"id\")===t}},r.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}},r.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&g){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[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML=\"<a id='\"+b+\"'></a><select id='\"+b+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&y.push(\"[*^$]=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||y.push(\"\\\\[\"+M+\"*(?:value|\"+P+\")\"),e.querySelectorAll(\"[id~=\"+b+\"-]\").length||y.push(\"~=\"),e.querySelectorAll(\":checked\").length||y.push(\":checked\"),e.querySelectorAll(\"a#\"+b+\"+*\").length||y.push(\".#.+[+~]\")}),ue(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=d.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&y.push(\"name\"+M+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&y.push(\":enabled\",\":disabled\"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&y.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),y.push(\",.*:\")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,\"*\"),m.call(e,\"[s!='']:x\"),v.push(\"!=\",W)}),y=y.length&&new RegExp(y.join(\"|\")),v=v.length&&new RegExp(v.join(\"|\")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,\"='$1']\"),n.matchesSelector&&g&&!S[t+\" \"]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+\"\").replace(te,ne)},oe.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n=\"\",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,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(Z,ee),e[3]=(e[3]||e[4]||e[5]||\"\").replace(Z,ee),\"~=\"===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]||oe.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]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&X.test(n)&&(t=a(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(Z,ee).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+\" \"];return t||(t=new RegExp(\"(^|\"+M+\")\"+e+\"(\"+M+\"|$)\"))&&E(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?\"!=\"===t:!t||(i+=\"\",\"=\"===t?i===n:\"!=\"===t?i!==n:\"^=\"===t?n&&0===i.indexOf(n):\"*=\"===t?n&&i.indexOf(n)>-1:\"$=\"===t?n&&i.slice(-n.length)===n:\"~=\"===t?(\" \"+i.replace($,\" \")+\" \").indexOf(n)>-1:\"|=\"===t&&(i===n||i.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?\"nextSibling\":\"previousSibling\",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error(\"unsupported pseudo: \"+e);return i[b]?i(t):i.length>1?(n=[e,e,\"\",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,\"$1\"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||\"\")||oe.error(\"unsupported lang: \"+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return(n=n.toLowerCase())===e||0===n.indexOf(e+\"-\")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!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!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+\" \"];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B,\" \")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&\"parentNode\"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(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 Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||\"*\",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[\" \"],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:\" \"===e[u-2].type?\"*\":\"\"})).replace(B,\"$1\"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m=\"0\",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG(\"*\",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+\" \"];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p=\"function\"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&\"ID\"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split(\"\").sort(D).join(\"\")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement(\"fieldset\"))}),ue(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||le(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||le(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute(\"disabled\")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[\":\"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):\"string\"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\"string\"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,\"string\"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,\"string\"==typeof e){if(!(i=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,\"parentNode\")},parentsUntil:function(e,t,n){return k(e,\"parentNode\",n)},next:function(e){return P(e,\"nextSibling\")},prev:function(e){return P(e,\"previousSibling\")},nextAll:function(e){return k(e,\"nextSibling\")},prevAll:function(e){return k(e,\"previousSibling\")},nextUntil:function(e,t,n){return k(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return k(e,\"previousSibling\",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,\"iframe\")?e.contentDocument:(N(e,\"template\")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\\x20\\t\\r\\n\\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e=\"string\"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:\"\")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&\"string\"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[[\"notify\",\"progress\",w.Callbacks(\"memory\"),w.Callbacks(\"memory\"),2],[\"resolve\",\"done\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),1,\"rejected\"]],r=\"pending\",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},\"catch\":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+\"With\"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError(\"Thenable self-resolution\");l=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+\"With\"](this===o?void 0:this,arguments),this},o[t[0]+\"With\"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),\"pending\"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)[\"catch\"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener(\"DOMContentLoaded\",_),e.removeEventListener(\"load\",_),w.ready()}\"complete\"===r.readyState||\"loading\"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener(\"DOMContentLoaded\",_),e.addEventListener(\"load\",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(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},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,\"ms-\").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(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[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(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(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.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&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,ee=/[A-Z]/g;function te(e){return\"true\"===e||\"false\"!==e&&(\"null\"===e?null:e===+e+\"\"?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(ee,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,\"hasDataAttrs\"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf(\"data-\")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks(\"once memory\").add(function(){J.remove(e,[t+\"queue\",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=w.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=J.get(o[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ie=new RegExp(\"^(?:([+-])=|)(\"+re+\")([a-z%]*)$\",\"i\"),oe=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ae=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&w.contains(e.ownerDocument,e)&&\"none\"===w.css(e,\"display\")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,\"\")},u=s(),l=n&&n[3]||(w.cssNumber[t]?\"\":\"px\"),c=(w.cssNumber[t]||\"px\"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.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 le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,\"display\"),t.parentNode.removeChild(t),\"none\"===i&&(i=\"block\"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?(\"none\"===n&&(i[o]=J.get(r,\"display\")||null,i[o]||(r.style.display=\"\")),\"\"===r.style.display&&ae(r)&&(i[o]=ce(r))):\"none\"!==n&&(i[o]=\"none\",J.set(r,\"display\",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,he=/^$|^module$|\\/(?:java|ecma)script/i,ge={option:[1,\"<select multiple='multiple'>\",\"</select>\"],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,\"\",\"\"]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],\"globalEval\",!t||J.get(t[n],\"globalEval\"))}var me=/<|&#?\\w+;/;function xe(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))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement(\"div\")),s=(de.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(o));f.textContent=\"\",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),\"script\"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||\"\")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement(\"div\")),t=r.createElement(\"input\");t.setAttribute(\"type\",\"radio\"),t.setAttribute(\"checked\",\"checked\"),t.setAttribute(\"name\",\"t\"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML=\"<textarea>x</textarea>\",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){\"string\"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(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=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return\"undefined\"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||\"\").match(M)||[\"\"]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||\"\").match(M)||[\"\"]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||\"\").split(\".\").sort(),d){f=w.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,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,\"handle events\")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,\"events\")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.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&&e.button>=1))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?w(i,this).index(l)>-1:w.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(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&N(this,\"input\"))return this.click(),!1},_default:function(e){return N(e.target,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,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&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.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,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:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(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=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,Ae=/<script|<style|<link/i,je=/checked\\s*(?:[^=]|=\\s*.checked.)/i,qe=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function Le(e,t){return N(e,\"table\")&&N(11!==t.nodeType?t:t.firstChild,\"tr\")?w(e).children(\"tbody\")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function Oe(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();\"input\"===n&&pe.test(e.type)?t.checked=e.checked:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&\"string\"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,\"script\"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,\"script\"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||\"\")&&!J.access(l,\"globalEval\")&&w.contains(c,l)&&(l.src&&\"module\"!==(l.type||\"\").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,\"\"),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,\"script\")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,\"<$1></$2>\")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,\"script\")).length>0&&ve(a,!u&&ye(e,\"script\")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.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 Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(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&&(w.cleanData(ye(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(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&&!Ae.test(e)&&!ge[(de.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp(\"^(\"+re+\")(?!px)[a-z%]+$\",\"i\"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join(\"|\"),\"i\");!function(){function t(){if(c){l.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",c.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i=\"1%\"!==t.top,u=12===n(t.marginLeft),c.style.right=\"60%\",s=36===n(t.right),o=36===n(t.width),c.style.position=\"absolute\",a=36===c.offsetWidth||\"absolute\",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement(\"div\"),c=r.createElement(\"div\");c.style&&(c.style.backgroundClip=\"content-box\",c.cloneNode(!0).style.backgroundClip=\"\",h.clearCloneStyle=\"content-box\"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(\"\"!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ve={letterSpacing:\"0\",fontWeight:\"400\"},Ge=[\"Webkit\",\"Moz\",\"ms\"],Ye=r.createElement(\"div\").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function Ze(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?(\"content\"===n&&(u-=w.css(e,\"padding\"+oe[a],!0,i)),\"margin\"!==n&&(u-=w.css(e,\"border\"+oe[a]+\"Width\",!0,i))):(u+=w.css(e,\"padding\"+oe[a],!0,i),\"padding\"!==n?u+=w.css(e,\"border\"+oe[a]+\"Width\",!0,i):s+=w.css(e,\"border\"+oe[a]+\"Width\",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o=\"border-box\"===w.css(e,\"boxSizing\",!1,r),a=o;if(We.test(i)){if(!n)return i;i=\"auto\"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),(\"auto\"===i||!parseFloat(i)&&\"inline\"===w.css(e,\"display\",!1,r))&&(i=e[\"offset\"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?\"border\":\"content\"),a,r,i)+\"px\"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.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=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o=\"number\"),null!=n&&n===n&&(\"number\"===o&&(n+=i&&i[3]||(w.cssNumber[s]?\"\":\"px\")),h.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=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),\"normal\"===i&&t in Ve&&(i=Ve[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each([\"height\",\"width\"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a=\"border-box\"===w.css(e,\"boxSizing\",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,\"border\",!1,o)-.5)),s&&(i=ie.exec(n))&&\"px\"!==(i[3]||\"px\")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,\"marginLeft\"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),w.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},\"margin\"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?\"\":\"px\")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.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):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.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=w.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=oe[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(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&&ae(e),y=J.get(e,\"fxshow\");n.queue||(null==(a=w._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--,w.queue(e,\"fx\").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,\"display\")),\"none\"===(c=w.css(e,\"display\"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,\"display\"),fe([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===w.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;for(r in d)u||(y?\"hidden\"in y&&(g=y.hidden):y=J.access(e,\"fxshow\",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,\"fxshow\");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&\"expand\"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=[\"*\"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&\"object\"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,\"finish\"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,i=null!=e&&e+\"queueHooks\",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||\"fx\"),this.each(function(){var t,n=J.get(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut(\"show\"),slideUp:ut(\"hide\"),slideToggle:ut(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||\"fx\",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement(\"input\"),t=r.createElement(\"select\").appendChild(r.createElement(\"option\"));e.type=\"checkbox\",h.checkOn=\"\"!==e.value,h.optSelected=t.selected,(e=r.createElement(\"input\")).value=\"t\",e.type=\"radio\",h.radioValue=\"t\"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.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=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&\"radio\"===t&&N(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(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.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=w.find.attr(e,\"tabindex\");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),h.optSelected||(w.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)}}),w.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(\" \")}function mt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function xt(e){return Array.isArray(e)?e:\"string\"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){a=0;while(o=t[a++])r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){a=0;while(o=t[a++])while(r.indexOf(\" \"+o+\" \")>-1)r=r.replace(\" \"+o+\" \",\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(e,t){var n=typeof e,r=\"string\"===n||Array.isArray(e);return\"boolean\"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&\"boolean\"!==n||((t=mt(this))&&J.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||!1===e?\"\":J.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;t=\" \"+e+\" \";while(n=this[r++])if(1===n.nodeType&&(\" \"+vt(mt(n))+\" \").indexOf(t)>-1)return!0;return!1}});var bt=/\\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i=\"\":\"number\"==typeof i?i+=\"\":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?\"\":e+\"\"})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&\"set\"in t&&void 0!==t.set(this,i,\"value\")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&\"get\"in t&&void 0!==(n=t.get(i,\"value\"))?n:\"string\"==typeof(n=i.value)?n.replace(bt,\"\"):null==n?\"\":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,\"value\");return null!=t?t:vt(w.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||!N(n.parentNode,\"optgroup\"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each([\"radio\",\"checkbox\"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),h.focusin=\"onfocusin\"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,\"type\")?t.type:t,x=f.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(\".\")>-1&&(m=(x=m.split(\".\")).shift(),x.sort()),c=m.indexOf(\":\")<0&&\"on\"+m,t=t[w.expando]?t:new w.Event(m,\"object\"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+x.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,\"events\")||{})[t.type]&&J.get(s,\"handle\"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\\?/;w.parseXML=function(t){var n;if(!t||\"string\"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,\"text/xml\")}catch(e){n=void 0}return n&&!n.getElementsByTagName(\"parsererror\").length||w.error(\"Invalid XML: \"+t),n};var St=/\\[\\]$/,Dt=/\\r?\\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+\"[\"+(\"object\"==typeof i&&null!=i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==x(t))r(e,t);else for(i in t)jt(e+\"[\"+i+\"]\",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join(\"&\")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,\"elements\");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(\":disabled\")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,\"\\r\\n\")}}):{name:t.name,value:n.replace(Dt,\"\\r\\n\")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\\/\\//,It={},Wt={},$t=\"*/\".concat(\"*\"),Bt=r.createElement(\"a\");Bt.href=Ct.href;function Ft(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return\"string\"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i[\"*\"]&&a(\"*\")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(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]}function Ut(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}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:\"GET\",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":$t,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\":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){\"object\"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks(\"once memory\"),x=h.statusCode||{},b={},T={},C=\"canceled\",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+\"\").replace(Rt,Ct.protocol+\"//\"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||\"*\").toLowerCase().match(M)||[\"\"],null==h.crossDomain){l=r.createElement(\"a\");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+\"//\"+Bt.host!=l.protocol+\"//\"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&\"string\"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,\"\"),h.hasContent?h.data&&h.processData&&0===(h.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(h.data=h.data.replace(qt,\"+\")):(d=h.url.slice(o.length),h.data&&(h.processData||\"string\"==typeof h.data)&&(o+=(kt.test(o)?\"&\":\"?\")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,\"$1\"),d=(kt.test(o)?\"&\":\"?\")+\"_=\"+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader(\"If-Modified-Since\",w.lastModified[o]),w.etag[o]&&E.setRequestHeader(\"If-None-Match\",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader(\"Content-Type\",h.contentType),E.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\"*\"!==h.dataTypes[0]?\", \"+$t+\"; q=0.01\":\"\"):h.accepts[\"*\"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C=\"abort\",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger(\"ajaxSend\",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort(\"timeout\")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,\"No Transport\");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||\"\",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader(\"Last-Modified\"))&&(w.lastModified[o]=T),(T=E.getResponseHeader(\"etag\"))&&(w.etag[o]=T)),204===t||\"HEAD\"===h.type?C=\"nocontent\":304===t?C=\"notmodified\":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C=\"error\",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+\"\",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?\"ajaxSuccess\":\"ajaxError\",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger(\"ajaxComplete\",[E,h]),--w.active||w.event.trigger(\"ajaxStop\")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,\"json\")},getScript:function(e,t){return w.get(e,void 0,t,\"script\")}}),w.each([\"get\",\"post\"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,\"throws\":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(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(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&\"withCredentials\"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,\"abort\"===e?s.abort():\"error\"===e?\"number\"!=typeof s.status?o(0,\"error\"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,\"text\"!==(s.responseType||\"text\")||\"string\"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n(\"error\"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n(\"abort\");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.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 w.globalEval(e),e}}}),w.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),w.ajaxTransport(\"script\",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(\"<script>\").prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&o(\"error\"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\\?(?=&|$)|\\?\\?/;w.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Yt.pop()||w.expando+\"_\"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter(\"json jsonp\",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?\"url\":\"string\"==typeof t.data&&0===(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Qt.test(t.data)&&\"data\");if(s||\"jsonp\"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,\"$1\"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+i),t.converters[\"script json\"]=function(){return a||w.error(i+\" was not called\"),a[0]},t.dataTypes[0]=\"json\",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),\"script\"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument(\"\").body;return e.innerHTML=\"<form></form><form></form>\",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if(\"string\"!=typeof e)return[];\"boolean\"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\" \");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),a.length>0&&w.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?w(\"<div>\").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,\"position\"),f=w(e),p={};\"static\"===c&&(e.style.position=\"relative\"),s=f.offset(),o=w.css(e,\"top\"),u=w.css(e,\"left\"),(l=(\"absolute\"===c||\"fixed\"===c)&&(o+u).indexOf(\"auto\")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),\"using\"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\"fixed\"===w.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\"===w.css(e,\"position\"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,\"borderTopWidth\",!0),i.left+=w.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-w.css(r,\"marginTop\",!0),left:t.left-i.left-w.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&\"static\"===w.css(e,\"position\"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=\"pageYOffset\"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each([\"top\",\"left\"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+\"px\":n})}),w.each({Height:\"height\",Width:\"width\"},function(e,t){w.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||\"boolean\"!=typeof i),s=n||(!0===i||!0===o?\"margin\":\"border\");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf(\"outer\")?t[\"inner\"+e]:t.document.documentElement[\"client\"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body[\"scroll\"+e],o[\"scroll\"+e],t.body[\"offset\"+e],o[\"offset\"+e],o[\"client\"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.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,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.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)}}),w.proxy=function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * RequireJS module to get server configuration information. This module\n * fetches \"config.json\" relative  to  the   main  document.  The Prolog\n * server emits a  JSON  object  that   provides  the  location  of  all\n * explicitly  identified  HTTP  handlers.  These    are   intended  for\n * (typically) AJAX calls:\n *\n * ```\n *   $.ajax({ url: config.http.locations.swish_examples,\n *            ...\n * ```\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('config',[ \"jquery\" ],\n       function($) {\nvar KEY = \"SWISHCONFIG\";\n\n/* Configuration of various server components.  We provide\n   defaults for the case that these files are served from\n   a non-Prolog server.\n*/\n\nvar config;\n\nfunction getCachedConfig() {\n  if ( typeof(Storage) !== \"undefined\" && window.swish.config_hash ) {\n    var str;\n\n    if ( (str = localStorage.getItem(KEY)) ) {\n      value = JSON.parse(str);\n      if ( value.hash == window.swish.config_hash )\n\treturn value.config;\n    }\n  }\n}\n\nfunction setCachedConfig(config) {\n  if ( typeof(Storage) !== \"undefined\" && window.swish.config_hash ) {\n    localStorage.setItem(KEY, JSON.stringify(\n      { hash: window.swish.config_hash,\n        config: config\n      }));\n  }\n}\n\nif ( !config ) {\n  if ( !(config = getCachedConfig()) ) {\n    $.ajax(\"swish_config.json\",\n\t   { dataType: \"json\",\n\t     async: false,\n\t     success: function(data) {\n\t       config = data;\n\t       setCachedConfig(config);\n\t     },\n\t     error: function() {\n\t       alert(\"Failed to fetch configuration from server\");\n\t     }\n\t   });\n  }\n}\n\nreturn config;\n});\n\n\n\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * Manage persistent data such as preferences.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n */\n\ndefine('preferences',[\"jquery\"],\n       function($) {\n  var hasLocalStore = (typeof(Storage) !== \"undefined\");\n  var defaults = {};\n  var inform = {};\n\n  var preferences = {\n    /**\n     * @returns {Boolean} indicating whether persistent storage is\n     * supported.\n     */\n    persistent: function() {\n      return hasLocalStore;\n    },\n\n    /**\n     * Store that we do not want to see info dialogue with a given\n     * identifier again.\n     * @param {String} id\n     */\n    setNotAgain: function(id) {\n      if ( hasLocalStore ) {\n\tvar data = readNotAgain();\n\n\tif ( data.indexOf(id) < 0 ) {\n\t  data.push(id);\n\t  localStorage.setItem(\"notagain\", JSON.stringify(data));\n\t}\n      }\n    },\n\n    /**\n     * @returns {Boolean} `true` if the user choose not to see this\n     * dialogue again\n     * @param {String} id identifier to test\n     */\n    notagain: function(id) {\n      if ( hasLocalStore ) {\n\tvar data = readNotAgain();\n\treturn data.indexOf(id) >= 0;\n      }\n      return false;\n    },\n\n    /**\n     * Broadcast the change of a preference.\n     */\n    broadcast: function(name, value) {\n      var sel;\n\n      if ( inform.name == undefined )\n\tsel = \".swish-event-receiver\";\n      else if ( inform.name == null )\n\treturn;\n      else\n\tsel = inform.name;\n\n      $(sel).trigger(\"preference\", { name: name, value: value });\n    },\n\n    /**\n     * Set the value of a preference and broadcast it.\n     * FIXME: we should only broadcast if the value has changed.\n     * @param {String} name describes the name of the preference\n     * @param {Any} value describes the value.  Values are stored\n     * using JSON serialization.\n     */\n    setVal: function(name, value) {\n      if ( hasLocalStore ) {\n\tlocalStorage.setItem(name, JSON.stringify(value));\n      }\n      this.broadcast(name, value);\n    },\n\n    /**\n     * @param {String} name describes the name of the preference\n     * @param {Any} value describes the default value.\n     */\n    setDefault: function(name, value) {\n      defaults[name] = value;\n    },\n\n    /**\n     * @param {String} name describes the name of the preference\n     * @param {String} jQuery selector for elements to inform.  If\n     * `null`, nobody is informed.\n     */\n    setInform: function(name, value) {\n      inform[name] = value;\n    },\n\n    /**\n     * @param {String} name describes the name of the preference\n     */\n    getVal: function(name) {\n      if ( hasLocalStore ) {\n\tvar str;\n\n\tif ( (str = localStorage.getItem(name)) ) {\n\t  value = JSON.parse(str);\n\t  return value;\n\t}\n      }\n      return defaults[name];\n    },\n\n    /**\n     * Set a preference value for a document.\n     */\n    setDocVal: function(docid, name, value) {\n      var prefs = preferences.getVal(docid)||{};\n      prefs[name] = value;\n      preferences.setVal(docid, prefs);\n    },\n\n    /**\n     * Get a preference value for a document.\n     */\n    getDocVal: function(docid, name, def) {\n      var prefs = preferences.getVal(docid)||{};\n      return prefs[name] === undefined ? def : prefs[name];\n    }\n  }\n\n  function readNotAgain() {\n    var str = localStorage.getItem(\"notagain\") || \"[]\";\n    var notagain;\n\n    try {\n      data = JSON.parse(str);\n      if ( typeof(data) != \"object\" )\n\tdata = [];\n    } catch(err) {\n      data = [];\n    }\n\n    return data;\n  }\n\n  return preferences;\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2016, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * Manage hyper links.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n */\n\ndefine('links',[\"jquery\", \"config\", \"modal\"],\n       function($, config, modal) {\n\n  var functions = {\n    /** Decode a PlDoc specification and, if valid, open the\n     * corresponding documentation.\n     * @arg {String} from The PlDoc specification.  Accepted if it\n     * is of the form `[.*:].*[/]/?\\d+`\n     * @return Boolean `true` if the string was recognised\n     */\n    PlDoc: function(from, ev) {\n      function parsePred(s) {\n\tvar pred = {};\n\tvar i;\n\n\tif ( (i=s.indexOf(\":\")) > 0 ) {\n\t  pred.module = s.substring(0,i);\n\t  s = s.slice(i+1);\n\t}\n\tif ( (i=s.indexOf(\"/\")) > 0 ) {\n\t  pred.name = s.substring(0,i);\n\t  if ( s.charAt(i+1) == '/' )\t/* name//arity is a non-terminal */\n\t    pred.arity = parseInt(s.slice(i+2))+2;\n\t  else\n\t    pred.arity = parseInt(s.slice(i+1));\n\n\t  if ( !isNaN(pred.arity) )\n\t    return pred;\n\t}\n      }\n\n      if ( from ) {\n\tvar pred = parsePred(decodeURIComponent(from));\n\n\tif ( pred ) {\n\t  $(ev.target).closest(\"#ajaxModal\").modal('hide');\n\t  $(\".swish-event-receiver\").trigger(\"pldoc\", pred);\n\t  ev.preventDefault();\n\n\t  return true;\n\t}\n      }\n\n      return false;\n    },\n\n    /**\n     * Run a link that refers to a cell. Such a link has a\n     * `data-query=name` attribute and optionally a number of\n     * `data-Var=Value` attributes. Because attributes are\n     * case-insensitive, `Var` is matched case-insensitive against\n     * variables from the query.\n     */\n    runQueryLink: function(a, ev) {\n      var nb    = a.closest(\".notebook\");\n      var qname = a.data(\"query\");\n      var cell  = nb.find('.nb-cell[name=\"'+qname+'\"]');\n\n      if ( cell ) {\n\tvar vars = $().prologEditor('variables', cell.nbCell('text'),\n\t\t\t\t    { anon: true });\n\tvar bindings = \"\";\n\tvar options  = {};\n\tvar novars   = [];\n\n\tfunction isVar(k) {\n\t  for(var i=0; i<vars.length; i++) {\n\t    if ( vars[i].toLowerCase() == k.toLowerCase() )\n\t      return vars[i];\n\t  }\n\t  novars.push(k);\n\t}\n\n\t$.each(a.data(), function(k, v) {\n\t  var vr;\n\n\t  if ( k !== 'query' && (vr=isVar(k)) ) {\n\t    if ( bindings != \"\" )\n\t      bindings += \", \";\n\t    bindings += vr + \" = (\" + v + \")\";\n\t  }\n\t});\n\n\tif ( novars.length > 0 ) {\n\t  modal.feedback({\n\t    owner:    nb,\n\t    type:     \"warning\",\n\t    duration: 3000,\n\t    html:     \"The variables <b>\" + novars.join(\", \") + \"</b> do not appear in \" +\n\t\t      \"query <b>\" + qname + \"</b>\"\n\t  });\n\t}\n\n\tif ( bindings != \"\" )\n          options.bindings = bindings;\n\n\tcell.nbCell('run', options);\n      }\n    },\n\n    /**\n     * Follow a link from a markdown or HTML cell. This recognises links\n     * to internal SWISH objects and handles them using AJAX calls\n     * rather then opening a new page.  If the link is not recognised,\n     * it is opened on a new tab/page.  Recognised:\n     *\n     *  - class=\"store\" links open a gitty store element in a tab\n     *  - class=\"file\" links opens a file in a tab\n     *  - PlDoc links creates a modal dialog holding the documentation\n     *  - data-query=<query-name> runs a query.  data-<Var>=<Value>\n     *    binds variables.\n     *\n     * @param {Event} ev is the event to follow form\n     */\n    followLink: function(ev) {\n      var a = $(ev.target).closest(\"a\");\n      var done = false;\n\n      function accept() {\n\tdone = true;\n\tev.preventDefault();\n\n\t$(ev.target).closest(\"#ajaxModal\").modal('hide');\n      }\n\n      if ( a.attr(\"href\") ) {\n\tvar swishStore    = config.http.locations.swish + \"p/\";\n\tvar swishExamples = config.http.locations.swish + \"example/\";\n\tvar href\t  = a.attr(\"href\");\n\tvar modal;\n\n\tif ( href.startsWith(swishStore) && !href.match(/#/) ) {\n\t  accept();\n\t  file = href.slice(swishStore.length);\n\t  $(ev.target).closest(\".swish\").swish('playFile', file);\n\t} else if ( a.hasClass(\"store\") ) {\n\t  accept();\n\t  modal.alert(\"File does not appear to come from gitty store?\");\n\t} else if ( a.hasClass(\"file\") ||\n\t\t    (href.startsWith(swishExamples) && !href.match(/#/)) ) {\n\t  accept();\n\t  $(ev.target).closest(\".swish\")\n\t\t      .swish('playURL', {url: href});\n\t} else if ( a.hasClass(\"builtin\") && href.match(/predicate=/) ) {\n\t  done = functions.PlDoc(href.split(\"predicate=\").pop(), ev);\n\t} else if ( href.match(/object=/) ) {\n\t  done = functions.PlDoc(href.split(\"object=\").pop(), ev);\n\t} else if ( (modal=$(ev.target).closest(\"#ajaxModal\")).length == 1 &&\n\t\t    href.match(/#/) )\n\t{ var id = href.split(\"#\").pop();\n\t  var target;\n\n\t  if ( (target=modal.find(\"#\"+id)).length == 1 )\n\t  { done = true;\n\t    ev.preventDefault();\n\t    modal.animate({scrollTop: target.position().top}, 2000);\n\t  }\n\t}\n\n\tif ( !done ) {\n\t  ev.preventDefault();\n\t  window.open(href, '_blank');\n\t}\n      } else if ( a.data(\"query\") ) {\n\tfunctions.runQueryLink(a, ev);\n      }\n    }\n  }\n\n  return functions;\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * Small utilities\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n */\n\ndefine('utils',[\"jquery\"],\n       function($) {\n\n  var styles_loaded = [];\n\n  var utils = {\n    /**\n     * @param   {String} text is the text to be encoded\n     * @returns {String} HTML encoded version of text\n     */\n    htmlEncode: function(text) {\n      if ( !text ) return \"\";\n      return document.createElement('a')\n                     .appendChild(document.createTextNode(text))\n\t\t     .parentNode\n\t\t     .innerHTML;\n    },\n\n    /**\n     * @param {String} url is the style sheet to load\n     */\n     loadCSS: function(url) {\n      if ( styles_loaded.indexOf(url) == -1 ) {\n\tvar styles = document.createElement('link');\n\tstyles.rel = 'stylesheet';\n\tstyles.type = 'text/css';\n\tstyles.media = 'screen';\n\tstyles.href = url;\n\tdocument.getElementsByTagName('head')[0].appendChild(styles);\n\tstyles_loaded.push(url);\n      }\n    },\n\n    /**\n     * @returns {String} (random) UUID\n     */\n    generateUUID: function() {\n      var d = new Date().getTime();\n      var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n\t.replace(/[xy]/g, function(c) {\n\t  var r = (d + Math.random()*16)%16 | 0;\n\t  d = Math.floor(d/16);\n\t  return (c=='x' ? r : (r&0x7|0x8)).toString(16);\n\t});\n      return uuid;\n    },\n\n    flash: function(obj) {\n      obj.addClass(\"flash\");\n      setTimeout(function() { obj.removeClass(\"flash\"); }, 1500);\n    },\n\n    ago: function(time) {\n      var ago = ((new Date().getTime())/1000) - time;\n\n      if ( ago < 20  ) return \"just now\";\n      if ( ago < 60  ) return \"less then a minute ago\";\n      ago = Math.round(ago/60);\n      if ( ago < 120 ) return ago + \" minutes ago\";\n      ago = Math.round(ago/60);\n      if ( ago < 48 )  return ago + \" hours ago\";\n      ago = Math.round(ago/24);\n      if ( ago < 360 ) return ago + \" days ago\";\n      ago = Math.round(ago/365);\n      return ago + \" years ago\";\n    },\n\n    basename: function(path) {\n      return path ? path.split('/').pop() : null;\n    }\n  } // end of methods\n\n  if (typeof String.prototype.startsWith != 'function') {\n    String.prototype.startsWith = function(str) {\n      return this.lastIndexOf(str, 0) === 0;\n    };\n  }\n\n  return utils;\n});\n\n","// Laconic simplifies the generation of DOM content.\n(function(context) {\n\n  // properly-cased attribute names for IE setAttribute support\n  var attributeMap = {\n    'acceptcharset'     : 'acceptCharset',\n    'accesskey'         : 'accessKey',\n    'allowtransparency' : 'allowTransparency',\n    'bgcolor'           : 'bgColor',\n    'cellpadding'       : 'cellPadding',\n    'cellspacing'       : 'cellSpacing',\n    'class'             : 'className',\n    'classname'         : 'className',\n    'colspan'           : 'colSpan',\n    'csstext'           : 'style',\n    'defaultchecked'    : 'defaultChecked',\n    'defaultselected'   : 'defaultSelected',\n    'defaultvalue'      : 'defaultValue',\n    'for'               : 'htmlFor',\n    'frameborder'       : 'frameBorder',\n    'hspace'            : 'hSpace',\n    'htmlfor'           : 'htmlFor',\n    'longdesc'          : 'longDesc',\n    'maxlength'         : 'maxLength',\n    'marginwidth'       : 'marginWidth',\n    'marginheight'      : 'marginHeight',\n    'noresize'          : 'noResize',\n    'noshade'           : 'noShade',\n    'readonly'          : 'readOnly',\n    'rowspan'           : 'rowSpan',\n    'tabindex'          : 'tabIndex',\n    'valign'            : 'vAlign',\n    'vspace'            : 'vSpace'\n  };\n\n  // The laconic function serves as a generic method for generating\n  // DOM content, and also as a placeholder for helper functions.\n  //\n  // The first parameter MUST be a string specifying the element's \n  // tag name.  \n  // \n  // An optional object of element attributs may follow directly \n  // after the tag name.  \n  // \n  // Additional arguments will be considered children of the new \n  // element and may consist of elements, strings, or numbers.\n  // \n  // for example:\n  // laconic('div', {'class' : 'foo'}, 'bar');\n  function laconic() {\n\n    // create a new element of the requested type\n    var el = document.createElement(arguments[0]);\n    \n    // walk through the rest of the arguments\n    for(var i=1; i<arguments.length; i++) {\n      var arg = arguments[i];\n      if(arg === null || arg === undefined) continue;\n\n      // if the argument is a dom node, we simply append it\n      if(arg.nodeType === 1) {\n        el.appendChild(arg); \n      }\n\n      // if the argument is a string or a number, we append it as\n      // a new text node\n      else if(\n          (!!(arg === '' || (arg && arg.charCodeAt && arg.substr))) ||\n          (!!(arg === 0  || (arg && arg.toExponential && arg.toFixed)))) {\n\n        el.appendChild(document.createTextNode(arg));\n      }\n\n      // if the argument is a plain-old object, and we're processing the first \n      // argument, then we apply the object's values as element attributes\n      else if(i === 1 && typeof(arg) === 'object') {\n        for(var key in arg) {\n          if(arg.hasOwnProperty(key)) {\n            var value = arg[key];\n            if(value !== null && value !== undefined) {\n              key = key.toLowerCase();\n              key = attributeMap[key] || key;\n\n              // if the key represents an event (onclick, onchange, etc)\n              // we'll set the href to '#' if none is given, and we'll apply\n              // the attribute directly to the element for IE7 support.\n              var isEvent = key.charAt(0) === 'o' && key.charAt(1) === 'n';\n              if(isEvent) {\n                if(arg.href === undefined && key === 'onclick') {\n                  el.setAttribute('href', '#');\n                }\n                el[key] = value;\n              }\n\n              // if we're setting the style attribute, we may need to \n              // use the cssText property\n              else if(key === 'style' && el.style.setAttribute) {\n                el.style.setAttribute('cssText', value);\n              }\n\n              // if we're setting an attribute that's not properly supported \n              // by IE7's setAttribute implementation, then we apply the \n              // attribute directly to the element\n              else if(key === 'className' || key === 'htmlFor') {\n                el[key] = value;\n              }\n\n              // otherwise, we use the standard setAttribute\n              else {\n                el.setAttribute(key, value);\n              }\n            }\n          }\n        }\n      }\n\n      // if the argument is an array, we append each element\n      else if(Object.prototype.toString.call(arg) === '[object Array]') {\n        for(var j=0; j<arg.length; j++) {\n          var child = arg[j];\n          if(child.nodeType === 1) {\n            el.appendChild(child);\n          }\n        }\n      }\n    }\n\n    // Add an appendTo method to the newly created element, which will allow\n    // the DOM insertion to be method chained to the creation.  For example:\n    // $el.div('foo').appendTo(document.body);\n    el.appendTo = function(parentNode) {\n      if(parentNode.nodeType === 1 && this.nodeType === 1) {\n        parentNode.appendChild(this);\n      }\n      return this;\n    };\n    \n    return el;\n  }\n\n  // registers a new 'tag' that can be used to automate\n  // the creation of a known element hierarchy\n  laconic.registerElement= function(name, renderer) {\n    if(!laconic[name]) {\n      laconic[name] = function() {\n        var el = laconic('div', {'class' : name});\n        renderer.apply(el, Array.prototype.slice.call(arguments));\n        return el;\n      };\n    }\n  };\n\n  // html 4 tags \n  var deprecatedTags = ['acronym', 'applet', 'basefont', 'big', 'center', 'dir',\n    'font', 'frame', 'frameset', 'noframes', 'strike', 'tt', 'u', 'xmp'];\n\n  // html 5 tags\n  var tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b',\n    'base', 'bdo', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption',\n    'cite', 'code', 'col', 'colgroup', 'command', 'datalist', 'dd', 'del',\n    'details', 'dfn', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset',\n    'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5',\n    'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img',\n    'input', 'ins', 'keygen', 'kbd', 'label', 'legend', 'li', 'link', 'map',\n    'mark', 'menu', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol',\n    'optgroup', 'option', 'output', 'p', 'picture', 'param', 'pre', 'progress', \n    'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', \n    'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', \n    'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title',\n    'tr', 'ul', 'var', 'video', 'wbr'].concat(deprecatedTags);\n\n  // add our tag methods to the laconic object \n  var makeApply = function(tagName) {\n    return function() {\n      return laconic.apply(this, \n        [tagName].concat(Array.prototype.slice.call(arguments)));\n    };\n  };\n\n  for(var i=0; i<tags.length; i++) {\n    laconic[tags[i]] = makeApply(tags[i]);\n  }\n\n  // If we're in a CommonJS environment, we export our laconic methods\n  if(typeof module !== 'undefined' && module.exports) {\n    module.exports = laconic;\n  } \n\n  // otherwise, we attach them to the top level $.el namespace\n  else {\n    var dollar = context.$ || {};\n    dollar.el = laconic;\n    context.$ = dollar;\n  }\n}(this));\n\ndefine(\"laconic\", [\"jquery\"], function(){});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2018, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Provide version and release info\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('version',[ \"jquery\", \"config\", \"utils\", \"laconic\" ],\n       function($, config, utils) {\n\n(function($) {\n  var pluginName = 'version';\n\n  /** @lends $.fn.version */\n  var methods = {\n    _init: function(options) {\n      options = options||{};\n\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\t\t\t/* private data */\n\n\tif ( config.http.locations.versions ) {\n\t  elem.append($.el.div({class:\"version\"},\n\t\t\t       $.el.div({class:\"v-swish\"}),\n\t\t\t       $.el.div({class:\"v-changelog\"},\n\t\t\t\t\t$.el.table()),\n\t\t\t       $.el.div({class:\"v-prolog\"})));\n\n\t  elem[pluginName]('update');\n\t  if ( options.commit )\n\t    elem[pluginName]('changelog', options);\n\t}\n\n\telem.data(pluginName, data);\t/* store with element */\n      });\n    },\n\n    /**\n     * Update the SWISH and Prolog versions.\n     */\n    update: function() {\n      if ( config.http.locations.versions ) {\n\telem = this;\n\n\t$.get(config.http.locations.versions,\n\t      function(data) {\n\t\tif ( !data.swish || !data.prolog ) {\n\t\t  console.log(data);\n\t\t  return;\n\t\t}\n\n\t\tvar swishversion;\n\n\t\tif ( elem.hasClass(\"v-compact\") )\n\t\t  swishversion = $.el.a({title: \"View recent changes\"},\n\t\t\t\t\tdata.swish.version);\n\t\telse\n\t\t  swishversion = $.el.span(data.swish.version);\n\n\t\telem.find(\".v-swish\")\n\t\t    .append($.el.span($.el.a({class:\"v-product\",\n\t\t\t\t\t      href:\"https://swish.swi-prolog.org\"},\n\t\t\t\t\t     \"SWISH\"),\n\t\t\t\t      \" version \",\n\t\t\t\t      swishversion));\n\t\telem.find(\".v-prolog\")\n\t\t    .append($.el.span(\"Running on \",\n\t\t\t\t      $.el.a({class:\"v-product\",\n\t\t\t\t\t      href:\"http://www.swi-prolog.org/\"},\n\t\t\t\t\t     data.prolog.brand),\n\t\t\t\t      \" version \" +\n\t\t\t\t      data.prolog.version));\n\t\tif ( elem.hasClass(\"v-compact\") ) {\n\t\t  $(swishversion).on(\"click\", function(ev) {\n\t\t    if ( elem.hasClass(\"v-compact\") ) {\n\t\t      elem[pluginName]('versionDetails');\n\t\t      ev.preventDefault();\n\t\t      return false;\n\t\t    }\n\t\t  });\n\t\t}\n\t      });\n      }\n    },\n\n    versionDetails: function() {\n      var body = this.closest(\".modal-body\");\n\n      if ( body ) {\n\tthis.closest(\".modal-content\").find(\"h2\").html(\"SWISH ChangeLog\");\n\n\tthis.detach();\n\tbody.empty();\n\tbody.append(this);\n\tthis.removeClass(\"v-compact\");\n\tthis[pluginName]('changelog');\n      }\n    },\n\n    /**\n     * Get a changelog\n     */\n    changelog: function(options) {\n      var that = this;\n      options = options||{};\n      var params = {};\n\n      params.show = options.show || \"all\";\n      if ( options.commit ) {\n\tparams.commit = options.commit;\n      } else {\n\tparams.last = options.last || 20;\n      }\n\n      this.find(\".v-changelog > table\").html(\"\");\n      $.get(config.http.locations.changelog,\n\t    params,\n\t    function(data) {\n\n\t      for(var i=0; i<data.changelog.length; i++) {\n\t\tthat[pluginName]('addChange', data.changelog[i], i);\n\t      }\n\t    });\n    },\n\n    addChange: function(ch, i) {\n      var desc = $.el.td({class:\"v-description\", colspan:3});\n      $(desc).html(ch.message);\n\n      var cls = (i%2 == 0 ? \"even\" : \"odd\");\n\n      this.find(\".v-changelog > table\")\n\t  .append($.el.tr({class:\"v-change-header \"+cls},\n\t\t\t  $.el.td({class:\"v-author\"}, ch.author),\n\t\t\t  $.el.td({class:\"v-commit\"}, ch.commit.slice(0,7)),\n\t\t\t  $.el.td({class:\"v-date\"}, ch.committer_date_relative)),\n\t\t  $.el.tr({class:\"v-change-body \"+cls},\n\t\t\t  desc));\n    },\n\n    /**\n     * Check whether the server was updated since the last time we\n     * viewed the changes.\n     */\n    checkForUpdates: function() {\n      if ( !config.http.locations.versions )\n\treturn;\n\n      var str = localStorage.getItem(\"last-version\");\n\n      function saveCheckpoint(data) {\n\tvar last = { commit:data.commit, date: data.date };\n\tlocalStorage.setItem(\"last-version\", JSON.stringify(last));\n      }\n\n      if ( str && (last = JSON.parse(str)) && last.commit ) {\n\tvar title = \"SWISH updates since \" + utils.ago(last.date||0);\n\n\t$.get(config.http.locations.changes,\n\t      {commit:last.commit},\n\t      function(data) {\n\t\tif ( data.changes ) {\n\t\t  $(\"#swish-updates\")\n\t\t    .css(\"display\", \"inline-block\")\n\t\t    .attr(\"title\", \"SWISH has received \" +\n\t\t\t\t   data.changes + \" updates\\n\" +\n\t\t\t           \"Click for details\")\n\t\t    .on(\"click\", function(ev) {\n\t\t      $(ev.target).closest(\".swish\")\n\t\t\t          .swish('showUpdates',\n\t\t\t\t\t { title:  title,\n\t\t\t\t\t   commit: last.commit,\n\t\t\t\t\t   show:   \"tagged\"\n\t\t\t\t\t });\n\t\t      saveCheckpoint(data);\n\t\t      $(\"#swish-updates\").hide();\n\t\t    });\n\t\t}\n\t      });\n      } else {\n\t$.get(config.http.locations.changes,\n\t      function(data) {\n\t\tsaveCheckpoint(data);\n\t      });\n      }\n    }\n  }; // methods\n\n  /**\n   * <Class description>\n   *\n   * @class version\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.version = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Show modal windows\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('modal',[ \"jquery\", \"config\", \"preferences\", \"links\", \"form\", \"version\",\n\t \"laconic\", \"bootstrap\" ],\n       function($, config, preferences, links, form) {\n\n/* NOTE: form dependency is circular.  Form is initialized later. */\n\n(function($) {\n  var pluginName = 'swishModal';\n\n  /** @lends $.fn.modal */\n  var methods = {\n    /**\n     * Initialize the widget and listen for \"help\" events.\n     * @param {Object} options currently ignored\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\n\telem.addClass(\"swish-event-receiver\");\n\telem.on(\"help\", function(ev, data) {\n\t  elem.swishModal('showHelp', data);\n\t});\n\telem.on(\"pldoc\", function(ev, data) {\n\t  elem.swishModal('showPlDoc', data);\n\t});\n\telem.on(\"form\", function(ev, data) {\n\t  elem.swishModal('showForm', data);\n\t});\n\telem.on(\"dialog\", function(ev, data) {\n\t  elem.swishModal('show', data);\n\t});\n\telem.on(\"error\", function(ev, data) { /* still needed? */\n\t  elem.swishModal('show', data);\n\t});\n\telem.on(\"alert\", function(ev, str) {\n\t  var icon = \"<span class='glyphicon glyphicon-warning-sign'></span>\";\n\t  elem.swishModal('show', {title: icon, body:str});\n\t});\n\telem.on(\"ajaxError\", function(ev, jqXHR) {\n\t  elem.swishModal('showAjaxError', jqXHR);\n\t});\n\telem.on(\"feedback\", function(ev, options) {\n\t  elem.swishModal('feedback', options);\n\t});\n\telem.on(\"show\", function(ev, options) {\n\t  elem.swishModal('show', options);\n\t});\n\telem.on(\"server_form\", function(ev, options) {\n\t  elem.swishModal('server_form', options);\n\t});\n      });\n    },\n\n    /**\n     * Show a help file.  The help file is a normal HTML document.  The\n     * `<title>` element is used for the title, while the `<body>`\n     * carries the content of the help file.\n     * @param {Object} options\n     * @param {String} options.file file help file.\n     * @param {String} options.notagain Identifier to stop this dialog\n     */\n    showHelp: function(options) {\n      var that = this;\n\n      if ( options.notagain && preferences.notagain(options.notagain) )\n\treturn;\n\n      $.ajax({ url: config.http.locations.help + \"/\" + options.file,\n\t       dataType: \"html\",\n\t       success: function(data) {\n\t\t var container = $(\"<div>\");\n\t\t container.html(data);\n\t\t that.swishModal('show',\n\t\t\t\t $.extend(\n\t\t\t\t   { title: container.find(\"title\").text(),\n\t\t\t\t     body:  container\n\t\t\t\t   }, options));\n\t       }\n             });\n    },\n\n    /**\n     * Show a form.  The form is an HTML document.\n     * @param {Object} options\n     * @param {String} options.file file help file.\n     * @param {String} options.notagain Identifier to stop this dialog\n     */\n    showForm: function(options) {\n      var that = this;\n\n      $.ajax({ url: config.http.locations.form + \"/\" + options.file,\n\t       dataType: \"html\",\n\t       success: function(data) {\n\t\t var container = $(\"<div>\");\n\t\t container.html(data);\n\t\t that.swishModal('show',\n\t\t\t\t $.extend(\n\t\t\t\t   { title: container.find(\"legend\").text(),\n\t\t\t\t     body:  container\n\t\t\t\t   }, options));\n\t       }\n             });\n    },\n\n    /** Show PlDoc manual page\n     * @param {Object} options\n     * @param {String} options.name is the name of the predicate to show\n     * @param {String} options.arity arity of the predicate\n     * @param {String} [options.module] module of the predicate\n     */\n    showPlDoc: function(options) {\n      function docURL(options) {\n\tvar term = \"(\"+options.name+\")/\"+options.arity;\n\tif ( options.module )\t\t\t/* FIXME: must be valid Prolog term */\n\t  term = options.module+\":\"+term;\n\treturn   config.http.locations.pldoc_doc_for\n\t       + \"?header=false&object=\"\n\t       + encodeURIComponent(term);\n      }\n\n      function docBody(content, url) {\n\tcontent.parents(\"div.modal-dialog\").addClass(\"swish-embedded-manual\");\n\treturn \"<iframe class='swish-embedded-manual' \" +\n\t\t       \"onload='javascript:resizeIframe(this);' \" +\n                       \"src='\"+url+\"'>\" +\n\t       \"</iframe>\";\n      }\n\n      var data = { title: \"SWI-Prolog manual\",\n                   body:  function() {\n\t\t     return docBody(this, docURL(options))\n\t\t   }\n                 };\n\n      return this.swishModal('show', data);\n    },\n\n    /**\n     * Show a modal dialog.\n     * @param {Object} options\n     * @param {String} options.title HTML rendered as title\n     * @param {String|function} options.body  If this is a string the\n     * content is set using `$.html()`, else the function is called,\n     * where `this` refers to the jQuery content element and the\n     * function result is added to the content using `$.append()`.\n     * @param {String} options.notagain Identifier to stop this dialog\n     * showing\n     * @param {function} [options.onclose] If present, call this\n     * function if the modal window is closed.\n     */\n    show: function(options) {\n      var content = $.el.div({class:\"modal-body\"});\n      var title   = $.el.h2();\n      var md      = $.el.div({class:\"modal-content\"},\n\t\t\t     $.el.div({class:\"modal-header\"},\n\t\t\t\t      notAgain(options),\n\t\t\t\t      closeButton(),\n\t\t\t\t      title),\n\t\t\t     content);\n      var modalel = $.el.div({class:\"modal fade\", id:\"ajaxModal\",\n\t\t\t      tabindex:-1, role:\"dialog\"\n\t\t\t     },\n\t\t\t     $.el.div({class:\"modal-dialog\"},\n\t\t\t\t      md));\n      if ( options.notagain && preferences.persistent() ) {\n\t$(md).append($.el.div(\n\t  {class:\"modal-footer\"},\n\t  notAgain(options)));\n      }\n      content = $(content);\n      if ( typeof(options.body) == \"function\" ) {\n\tvar c = options.body.call(content);\n\tif ( c )\n\t  content.append(c);\n      } else {\n\tcontent.html(options.body);\n      }\n      $(title).html(options.title);\n      $(modalel).modal({show: true})\n\t\t.on(\"click\", \"a\", links.followLink)\n\t        .on(\"shown.bs.modal\", function() {\n\t\t   initTagsManagers();\n\t\t   // FIXME: should find a more structured way?\n\t\t   $(this).find(\".swish-versions\").version();\n\t\t })\n\t        .on(\"hidden.bs.modal\", function() {\n\t\t  if ( options.onclose )\n\t\t    options.onclose();\n\t\t  saveNotagain($(this));\n\t\t  $(this).remove();\n\t\t});\n\n      return this\n    },\n\n    /**\n     * Show a server-generated form and act on the buttons.\n     * @arg {Object} options\n     * @arg {String} options.url is the URL that generates the form\n     * content\n     * @arg {String} options.title sets the title of the form.\n     * @arg {Function} options.onreply is called after the form has\n     * been submitted.  `this` points at the submitting button and\n     * the first argument contains the server reply.\n     */\n\n    server_form: function(options) {\n      var modalel = $(this);\n\n      if ( form === undefined )\t\t\t/* circular dependency */\n\tform = require(\"form\");\n\n      return this.swishModal('show', {\n\ttitle: options.title,\n\tbody: function() {\n\t  elem = $(this);\n\t  $.ajax({ url: options.url,\n\t\t   data: options.data,\n\t\t   success: function(data) {\n\t\t     elem.append(data);\n\t\t   },\n\t\t   error: function(jqXHDR) {\n\t\t     modalel.swishModal('showAjaxError', jqXHDR);\n\t\t   }\n\t         });\n\n\t  elem.on(\"click\", \"button[data-action]\", function(ev) {\n\t    var formel = $(ev.target).closest(\"form\");\n\t    var data   = form.serializeAsObject(formel, true);\n\t    var button = $(ev.target).closest(\"button\");\n\n\t    if ( button.data(\"form_data\") == false ) {\n\t      $.ajax({ url: button.data(\"action\"),\n\t               success: function(obj) {\n\t\t\t button.closest(\".modal\").modal('hide');\n\t\t\t if ( options.onreply )\n\t\t\t   options.onreply.call(button[0], obj);\n\t\t\t ev.preventDefault();\n\t\t\t return false;\n\t\t       },\n\t\t       error: function(jqXHDR) {\n\t\t\t modalel.swishModal('showAjaxError', jqXHDR);\n\t\t       }\n\t      });\n\t    } else {\n\t      $.ajax({ url: button.data(\"action\"),\n\t\t       data: JSON.stringify(data),\n\t\t       dataType: \"json\",\n\t\t       contentType: \"application/json\",\n\t\t       type: \"POST\",\n\t\t       success: function(obj) {\n\t\t\t if ( obj.status == \"success\" ) {\n\t\t\t   button.closest(\".modal\").modal('hide');\n\t\t\t   if ( options.onreply )\n\t\t\t     options.onreply.call(button[0], obj);\n\t\t\t   ev.preventDefault();\n\t\t\t   return false;\n\t\t\t } else if ( obj.status == \"error\" ) {\n\t\t\t   form.formError(formel, obj.error);\n\t\t\t } else {\n\t\t\t   alert(\"Updated failed: \" +\n\t\t\t\t JSON.serializeAsObject(obj));\n\t\t\t }\n\t\t       },\n\t\t       error: function(jqXHDR) {\n\t\t\t modalel.swishModal('showAjaxError', jqXHDR);\n\t\t       }\n\t      });\n\t    }\n\n\t    ev.preventDefault();\n\t    return false;\n\t  });\n\t}\n      });\n    },\n\n    /**\n     * Display information about an ajax error\n     */\n    showAjaxError: function(jqXHR) {\n      var dom = $.el.div();\n\n      $(dom).html(jqXHR.responseText);\n      var h1 = $(dom).find(\"h1\");\n      var title = h1.text() || \"Server error\";\n      h1.remove();\n\n      var data = { title: title,\n\t\t   body: dom\n\t\t };\n\n      this.swishModal('show', data);\n    },\n\n    /**\n     * Display briefly a feedback message\n     * @param {Object} options\n     * @param {String} options.html defines the HTML content that is\n     * rendered.\n     * @param {Number} [options.duration=1500] number of milliseconds\n     * that the message is visible.\n     * @param {Object} [options.owner=$(\"body\")] is the DOM element to\n     * which the feedback window is added.\n     */\n    feedback: function(options) {\n      var win = $.el.div({class:\"feedback \"+options.type||\"\"});\n      $(win).html(options.html);\n\n      $(options.owner||\"body\").append(win);\n      setTimeout(function() {\n\t$(win).hide(400, function() {\n\t  $(win).remove();\n\t});\n      }, options.duration||1500);\n      return this;\n    }\n  }; // methods\n\n  function saveNotagain(elem) {\n    if ( !elem.hasClass(\"modal\") )\n      elem = elem.closest(\".modal\");\n\n    elem.find(\"[data-notagain]\")\n\t.each(function() {\n      if ( $(this).prop(\"checked\") ) {\n\tpreferences.setNotAgain($(this).attr(\"data-notagain\"));\n\treturn false;\n      }\n    });\n  }\n\n  function closeButton() {\n    var button = $.el.button({ type:\"button\", class:\"close\",\n\t\t\t       \"data-dismiss\":\"modal\"\n                             });\n    $(button)\n\t.html(\"&times;\")\n\t.on(\"click\", function(ev) {\n\t  ev.preventDefault();\n\t  saveNotagain($(ev.target));\n\t});\n\n    return button;\n  }\n\n  function notAgain(options) {\n    if ( options.notagain && preferences.persistent() ) {\n      return $.el.label($.el.input({ type:\"checkbox\",\n\t\t\t\t     'data-notagain':options.notagain,\n\t\t\t\t     name:\"dismiss\"\n\t\t\t\t   }),\n\t\t\t\" Don't show again!\");\n    } else {\n      return \"\";\n    }\n  }\n\n  /**\n   * Tags managers must be initialised after the DOM is complete.\n   * This cooperates with `tagInput()` from `form.js`\n   */\n  function initTagsManagers() {\n    var set = $(this).find(\".tm-input\");\n\n    set.each(function() {\n      var elem = $(this);\n      var tags = elem.data(\"prefilled\");\n      var options = {};\n\n      if ( tags ) options.prefilled = tags;\n\n      elem.tagsManager(options);\n    });\n  }\n\n  /**\n   * See http://stackoverflow.com/questions/9975810/make-iframe-automatically-adjust-height-according-to-the-contents-without-using\n   */\n  window.resizeIframe = function(iframe) {\n    iframe.style.height = 0;\n    iframe.style.height = iframe.contentWindow.document.body.scrollHeight+20\n                          + 'px';\n  }\n\n  /**\n   * This class is a small layer around bootstrap $.modal that isolates\n   * us from bootstrap and provides most of the intermediate divs\n   * needed to create a nice modal window.  In addition, it listens to\n   * `\"help\"` events.\n   *\n   * @class swishModal\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.swishModal = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n  var ntfid = 1;\n\n  return {\n    ajaxError: function(jqXHR) {\n      $(\".swish-event-receiver\").trigger(\"ajaxError\", jqXHR);\n    },\n    feedback: function(options) {\n      $(\".swish-event-receiver\").trigger(\"feedback\", options);\n    },\n    alert: function(options) {\n      $(\".swish-event-receiver\").trigger(\"alert\", options);\n    },\n    help: function(options) {\n      $(\".swish-event-receiver\").trigger(\"help\", options);\n    },\n    show: function(options) {\n      $(\".swish-event-receiver\").trigger(\"show\", options);\n    },\n    server_form: function(options) {\n      $(\".swish-event-receiver\").trigger(\"server_form\", options);\n    },\n\n    /**\n     * Provide a brief notification for an element, typically an\n     * icon or similar object.\n     *\n     * @param {Object} options\n     * @param {String} options.html provides the inner html of the message.\n     * @param {Number} [options.fadeIn=400] provide the fade in time.\n     * @param {Number} [options.fadeOut=400] provide the fade out time.\n     * @param {Number} [options.time=5000] provide the show time.  The\n     * value `0` prevents a timeout.\n     */\n    notify: function(elem, options) {\n      var id = \"ntf-\"+(options.wsid||ntfid++);\n\n      var div  = $.el.div({ class:\"notification notify-arrow\",\n\t\t\t    id:id\n\t\t\t  });\n      var epos = elem.offset();\n\n      $(\"body\").append(div);\n      if ( options.html )\n\t$(div).html(options.html);\n      else if ( options.dom )\n\t$(div).append(options.dom);\n\n      $(div).css({ left: epos.left+elem.width()-$(div).outerWidth()+15,\n\t\t   top:  epos.top+elem.height()+12\n\t\t })\n\t    .on(\"click\", function(){$(div).remove();})\n\t    .show(options.fadeIn||400);\n\n      if ( options.time !== 0 ) {\n\tvar time = options.time;\n\n\tif ( !time )\n\t  time = elem.hasClass(\"myself\") ? 1000 : 5000;\n\n\tsetTimeout(function() {\n\t  $(div).hide(options.fadeOut||400, function() {\n\t    $(\"#\"+id).remove();\n\t    if ( options.onremove )\n\t      options.onremove(options);\n\t    elem.chat('unnotify', options.wsid);\n\t  });\n\t}, time);\n      }\n    }\n  };\n});\n\n\n","/* ===================================================\n * tagmanager.js v3.0.1\n * http://welldonethings.com/tags/manager\n * ===================================================\n * Copyright 2012 Max Favilli\n *\n * Licensed under the Mozilla Public License, Version 2.0 You may not use this work except in compliance with the License.\n *\n * http://www.mozilla.org/MPL/2.0/\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n(function($) {\n\n    \"use strict\";\n\n    var defaults = {\n        prefilled: null,\n        CapitalizeFirstLetter: false,\n        preventSubmitOnEnter: true,     // deprecated\n        isClearInputOnEsc: true,        // deprecated\n        externalTagId: false,\n        prefillIdFieldName: 'Id',\n        prefillValueFieldName: 'Value',\n        AjaxPush: null,\n        AjaxPushAllTags: null,\n        AjaxPushParameters: null,\n        delimiters: [9, 13, 44],        // tab, enter, comma\n        backspace: [8],\n        maxTags: 0,\n        hiddenTagListName: null,        // deprecated\n        hiddenTagListId: null,          // deprecated\n        replace: true,\n        output: null,\n        deleteTagsOnBackspace: true,    // deprecated\n        tagsContainer: null,\n        tagCloseIcon: 'x',\n        tagClass: '',\n        validator: null,\n        onlyTagList: false,\n        tagList: null,\n        fillInputOnTagRemove: false\n    },\n\n    publicMethods = {\n        pushTag : function (tag, ignoreEvents, externalTagId) {\n            var $self = $(this), opts = $self.data('opts'), alreadyInList, tlisLowerCase, max, tagId,\n            tlis = $self.data(\"tlis\"), tlid = $self.data(\"tlid\"), idx, newTagId, newTagRemoveId, escaped,\n            html, $el, lastTagId, lastTagObj;\n\n            tag = privateMethods.trimTag(tag, opts.delimiterChars);\n\n            if (!tag || tag.length <= 0) { return; }\n\n            // check if restricted only to the tagList suggestions\n            if (opts.onlyTagList && undefined !== opts.tagList ){\n\n                //if the list has been updated by look pushed tag in the tagList. if not found return\n                if (opts.tagList){\n                    var $tagList = opts.tagList;\n\n                    // change each array item to lower case\n                    $.each($tagList, function(index, item) {\n                        $tagList[index] = item.toLowerCase();\n                    });\n                    var suggestion = $.inArray(tag.toLowerCase(), $tagList);\n\n                    if ( -1 === suggestion ) {\n                        //console.log(\"tag:\" + tag + \" not in tagList, not adding it\");\n                        return;\n                    } \n                }\n\n            }\n\n            if (opts.CapitalizeFirstLetter && tag.length > 1) {\n                tag = tag.charAt(0).toUpperCase() + tag.slice(1).toLowerCase();\n            }\n\n            // call the validator (if any) and do not let the tag pass if invalid\n            if (opts.validator && !opts.validator(tag)) {\n                $self.trigger('tm:invalid', tag)\n                return;\n            }\n\n            // dont accept new tags beyond the defined maximum\n            if (opts.maxTags > 0 && tlis.length >= opts.maxTags) { return; }\n\n            alreadyInList = false;\n            //use jQuery.map to make this work in IE8 (pure JS map is JS 1.6 but IE8 only supports JS 1.5)\n            tlisLowerCase = jQuery.map(tlis, function(elem) {\n                return elem.toLowerCase();\n            });\n\n            idx = $.inArray(tag.toLowerCase(), tlisLowerCase);\n\n            if (-1 !== idx) {\n                // console.log(\"tag:\" + tag + \" !!already in list!!\");\n                alreadyInList = true;\n            }\n\n            if (alreadyInList) {\n                $self.trigger('tm:duplicated', tag);\n                if (opts.blinkClass) {\n                    for (var i = 0; i < 6; ++i) {\n                        $(\"#\" + $self.data(\"tm_rndid\") + \"_\" + tlid[idx]).queue(function(next) {\n                            $(this).toggleClass(opts.blinkClass);\n                            next();\n                        }).delay(100);\n                    }\n                } else {\n                    $(\"#\" + $self.data(\"tm_rndid\") + \"_\" + tlid[idx]).stop()\n                        .animate({backgroundColor: opts.blinkBGColor_1}, 100)\n                        .animate({backgroundColor: opts.blinkBGColor_2}, 100)\n                        .animate({backgroundColor: opts.blinkBGColor_1}, 100)\n                        .animate({backgroundColor: opts.blinkBGColor_2}, 100)\n                        .animate({backgroundColor: opts.blinkBGColor_1}, 100)\n                        .animate({backgroundColor: opts.blinkBGColor_2}, 100);\n                }\n            } else {\n                if (opts.externalTagId === true) {\n                    if (externalTagId === undefined) {\n                        $.error('externalTagId is not passed for tag -' + tag);\n                    }\n                    tagId = externalTagId;\n                } else {\n                    max = Math.max.apply(null, tlid);\n                    max = max === -Infinity ? 0 : max;\n\n                    tagId = ++max;\n                }\n                if (!ignoreEvents) { $self.trigger('tm:pushing', [tag, tagId]); }\n                tlis.push(tag);\n                tlid.push(tagId);\n\n                if (!ignoreEvents)\n                    if (opts.AjaxPush !== null && opts.AjaxPushAllTags == null) {\n                        if ($.inArray(tag, opts.prefilled) === -1) {\n                            $.post(opts.AjaxPush, $.extend({tag: tag}, opts.AjaxPushParameters));\n                        }\n                    }\n\n                // console.log(\"tagList: \" + tlis);\n\n                newTagId = $self.data(\"tm_rndid\") + '_' + tagId;\n                newTagRemoveId = $self.data(\"tm_rndid\") + '_Remover_' + tagId;\n                escaped = $(\"<span/>\").text(tag).html();\n\n                html = '<span class=\"' + privateMethods.tagClasses.call($self) + '\" id=\"' + newTagId + '\">';\n                html+= '<span>' + escaped + '</span>';\n                html+= '<a href=\"#\" class=\"tm-tag-remove\" id=\"' + newTagRemoveId + '\" TagIdToRemove=\"' + tagId + '\">';\n                html+= opts.tagCloseIcon + '</a></span> ';\n                $el = $(html);\n\n                if (opts.tagsContainer !== null) {\n                    $(opts.tagsContainer).append($el);\n                } else {\n                    if (tlid.length > 1) {\n                        lastTagObj = $self.siblings(\"#\" + $self.data(\"tm_rndid\") + \"_\" + tlid[tlid.length - 2]);\n                        lastTagObj.after($el);\n                    } else {\n                        $self.before($el);\n                    }\n                }\n\n                $el.find(\"#\" + newTagRemoveId).on(\"click\", $self, function(e) {\n                    e.preventDefault();\n                    var TagIdToRemove = parseInt($(this).attr(\"TagIdToRemove\"));\n                    privateMethods.spliceTag.call($self, TagIdToRemove, e.data);\n                });\n\n                privateMethods.refreshHiddenTagList.call($self);\n\n                if (!ignoreEvents) { $self.trigger('tm:pushed', [tag, tagId]); }\n\n                privateMethods.showOrHide.call($self);\n                //if (tagManagerOptions.maxTags > 0 && tlis.length >= tagManagerOptions.maxTags) {\n                //  obj.hide();\n                //}\n            }\n            $self.val(\"\");\n        },\n\n        popTag : function () {\n            var $self = $(this), tagId, tagBeingRemoved,\n            tlis = $self.data(\"tlis\"),\n            tlid = $self.data(\"tlid\");\n\n            if (tlid.length > 0) {\n              tagId = tlid.pop();\n\n              tagBeingRemoved = tlis[tlis.length - 1];\n              $self.trigger('tm:popping', [tagBeingRemoved, tagId]);\n              tlis.pop();\n\n              // console.log(\"TagIdToRemove: \" + tagId);\n              $(\"#\" + $self.data(\"tm_rndid\") + \"_\" + tagId).remove();\n              privateMethods.refreshHiddenTagList.call($self);\n              $self.trigger('tm:popped', [tagBeingRemoved, tagId]);\n              // console.log(tlis);\n            }\n        },\n\n        empty : function() {\n            var $self = $(this), tlis = $self.data(\"tlis\"), tlid = $self.data(\"tlid\"), tagId;\n\n            while (tlid.length > 0) {\n                tagId = tlid.pop();\n                tlis.pop();\n                // console.log(\"TagIdToRemove: \" + tagId);\n                $(\"#\" + $self.data(\"tm_rndid\") + \"_\" + tagId).remove();\n                privateMethods.refreshHiddenTagList.call($self);\n                // console.log(tlis);\n            }\n            $self.trigger('tm:emptied', null);\n\n            privateMethods.showOrHide.call($self);\n            //if (tagManagerOptions.maxTags > 0 && tlis.length < tagManagerOptions.maxTags) {\n            //  obj.show();\n            //}\n        },\n\n        tags : function() {\n            var $self = this, tlis = $self.data(\"tlis\");\n            return tlis;\n        }\n    },\n\n    privateMethods = {\n        showOrHide : function () {\n            var $self = this, opts = $self.data('opts'), tlis = $self.data(\"tlis\");\n\n            if (opts.maxTags > 0 && tlis.length < opts.maxTags) {\n                $self.show();\n                $self.trigger('tm:show');\n            }\n\n            if (opts.maxTags > 0 && tlis.length >= opts.maxTags) {\n                $self.hide();\n                $self.trigger('tm:hide');\n            }\n        },\n\n        tagClasses : function () {\n            var $self = $(this), opts = $self.data('opts'), tagBaseClass = opts.tagBaseClass,\n            inputBaseClass = opts.inputBaseClass, cl;\n            // 1) default class (tm-tag)\n            cl = tagBaseClass;\n            // 2) interpolate from input class: tm-input-xxx --> tm-tag-xxx\n            if ($self.attr('class')) {\n                $.each($self.attr('class').split(' '), function (index, value) {\n                    if (value.indexOf(inputBaseClass + '-') !== -1) {\n                        cl += ' ' + tagBaseClass + value.substring(inputBaseClass.length);\n                    }\n                });\n            }\n            // 3) tags from tagClass option\n            cl += (opts.tagClass ? ' ' + opts.tagClass : '');\n            return cl;\n        },\n\n        trimTag : function (tag, delimiterChars) {\n            var i;\n            tag = $.trim(tag);\n            // truncate at the first delimiter char\n            i = 0;\n            for (i; i < tag.length; i++) {\n                if ($.inArray(tag.charCodeAt(i), delimiterChars) !== -1) { break; }\n            }\n            return tag.substring(0, i);\n        },\n\n        refreshHiddenTagList : function () {\n            var $self = $(this), tlis = $self.data(\"tlis\"), lhiddenTagList = $self.data(\"lhiddenTagList\");\n\n            if (lhiddenTagList) {\n                $(lhiddenTagList).val(tlis.join($self.data('opts').baseDelimiter)).change();\n            }\n\n            $self.trigger('tm:refresh', tlis.join($self.data('opts').baseDelimiter));\n        },\n\n        killEvent : function (e) {\n            e.cancelBubble = true;\n            e.returnValue = false;\n            e.stopPropagation();\n            e.preventDefault();\n        },\n\n        keyInArray : function (e, ary) {\n            return $.inArray(e.which, ary) !== -1;\n        },\n\n        applyDelimiter : function (e) {\n            var $self = $(this);\n            publicMethods.pushTag.call($self,$(this).val());\n            e.preventDefault();\n        },\n\n        prefill: function (pta) {\n            var $self = $(this);\n            var opts = $self.data('opts')\n            $.each(pta, function (key, val) {\n                if (opts.externalTagId === true) {\n                    publicMethods.pushTag.call($self, val[opts.prefillValueFieldName], true, val[opts.prefillIdFieldName]);\n                } else {\n                    publicMethods.pushTag.call($self, val, true);\n                }\n            });\n        },\n\n        pushAllTags : function (e, tag) {\n            var $self = $(this), opts = $self.data('opts'), tlis = $self.data(\"tlis\");\n            if (opts.AjaxPushAllTags) {\n                if (e.type !== 'tm:pushed' || $.inArray(tag, opts.prefilled) === -1) {\n                    $.post(opts.AjaxPush, $.extend({ tags: tlis.join(opts.baseDelimiter) }, opts.AjaxPushParameters));\n                }\n            }\n        },\n\n        spliceTag : function (tagId) {\n            var $self = this, tlis = $self.data(\"tlis\"), tlid = $self.data(\"tlid\"), idx = $.inArray(tagId, tlid),\n            tagBeingRemoved;\n\n            // console.log(\"TagIdToRemove: \" + tagId);\n            // console.log(\"position: \" + idx);\n\n            if (-1 !== idx) {\n                tagBeingRemoved = tlis[idx];\n                $self.trigger('tm:splicing', [tagBeingRemoved, tagId]);\n                $(\"#\" + $self.data(\"tm_rndid\") + \"_\" + tagId).remove();\n                tlis.splice(idx, 1);\n                tlid.splice(idx, 1);\n                privateMethods.refreshHiddenTagList.call($self);\n                $self.trigger('tm:spliced', [tagBeingRemoved, tagId]);\n                // console.log(tlis);\n            }\n\n            privateMethods.showOrHide.call($self);\n            //if (tagManagerOptions.maxTags > 0 && tlis.length < tagManagerOptions.maxTags) {\n            //  obj.show();\n            //}\n        },\n\n        init : function (options) {\n            var opts = $.extend({}, defaults, options), delimiters, keyNums;\n\n            opts.hiddenTagListName = (opts.hiddenTagListName === null)\n                ? 'hidden-' + this.attr('name')\n                : opts.hiddenTagListName;\n\n            delimiters = opts.delimeters || opts.delimiters; // 'delimeter' is deprecated\n            keyNums = [9, 13, 17, 18, 19, 37, 38, 39, 40]; // delimiter values to be handled as key codes\n            opts.delimiterChars = [];\n            opts.delimiterKeys = [];\n\n            $.each(delimiters, function (i, v) {\n                if ($.inArray(v, keyNums) !== -1) {\n                    opts.delimiterKeys.push(v);\n                } else {\n                    opts.delimiterChars.push(v);\n                }\n            });\n\n            opts.baseDelimiter = String.fromCharCode(opts.delimiterChars[0] || 44);\n            opts.tagBaseClass = 'tm-tag';\n            opts.inputBaseClass = 'tm-input';\n\n            if (!$.isFunction(opts.validator)) { opts.validator = null; }\n\n            this.each(function() {\n                var $self = $(this), hiddenObj ='', rndid ='', albet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\n                // prevent double-initialization of TagManager\n                if ($self.data('tagManager')) { return false; }\n                $self.data('tagManager', true);\n\n                for (var i = 0; i < 5; i++) {\n                  rndid += albet.charAt(Math.floor(Math.random() * albet.length));\n                }\n\n                $self.data(\"tm_rndid\", rndid);\n\n                // store instance-specific data in the DOM object\n                $self.data('opts',opts)\n                    .data('tlis', []) //list of string tags\n                    .data('tlid', []); //list of ID of the string tags\n\n                if (opts.output === null) {\n                    hiddenObj = $('<input/>', {\n                        type: 'hidden',\n                        name: opts.hiddenTagListName\n                    });\n                    $self.after(hiddenObj);\n                    $self.data(\"lhiddenTagList\", hiddenObj);\n                } else {\n                    $self.data(\"lhiddenTagList\", $(opts.output));\n                }\n\n                if (opts.AjaxPushAllTags) {\n                    $self.on('tm:spliced', privateMethods.pushAllTags);\n                    $self.on('tm:popped', privateMethods.pushAllTags);\n                    $self.on('tm:pushed', privateMethods.pushAllTags);\n                }\n\n                // hide popovers on focus and keypress events\n                $self.on('focus keypress', function(e) {\n                    if ($(this).popover) { $(this).popover('hide'); }\n                });\n\n                // handle ESC (keyup used for browser compatibility)\n                if (opts.isClearInputOnEsc) {\n                    $self.on('keyup', function(e) {\n                        if (e.which === 27) {\n                            // console.log('esc detected');\n                            $(this).val('');\n                            privateMethods.killEvent(e);\n                        }\n                    });\n                }\n\n                $self.on('keypress', function(e) {\n                    // push ASCII-based delimiters\n                    if (privateMethods.keyInArray(e, opts.delimiterChars)) {\n                        privateMethods.applyDelimiter.call($self, e);\n                    }\n                });\n\n                $self.on('keydown', function(e) {\n                    // disable ENTER\n                    if (e.which === 13) {\n                        if (opts.preventSubmitOnEnter) {\n                            privateMethods.killEvent(e);\n                        }\n                    }\n\n                    // push key-based delimiters (includes <enter> by default)\n                    if (privateMethods.keyInArray(e, opts.delimiterKeys)) {\n                        privateMethods.applyDelimiter.call($self, e);\n                    }\n                });\n\n                // BACKSPACE (keydown used for browser compatibility)\n                if (opts.deleteTagsOnBackspace) {\n                    $self.on('keydown', function(e) {\n                        if (privateMethods.keyInArray(e, opts.backspace)) {\n                            // console.log(\"backspace detected\");\n                            if ($(this).val().length <= 0) {\n                                publicMethods.popTag.call($self);\n                                privateMethods.killEvent(e);\n                            }\n                        }\n                    });\n                }\n\n                // on tag pop fill back the tag's content to the input field\n                if (opts.fillInputOnTagRemove) {\n                    $self.on('tm:popped', function(e, tag) {\n                        $(this).val(tag);\n                    });\n                }\n\n                $self.change(function(e) {\n                    if (!/webkit/.test(navigator.userAgent.toLowerCase())) {\n                        $self.focus();\n                    } // why?\n\n                    /* unimplemented mode to push tag on blur\n                     else if (tagManagerOptions.pushTagOnBlur) {\n                     console.log('change: pushTagOnBlur ' + tag);\n                     pushTag($(this).val());\n                     } */\n                    privateMethods.killEvent(e);\n                });\n\n                if (opts.prefilled !== null) {\n                    if (typeof (opts.prefilled) === \"object\") {\n                        privateMethods.prefill.call($self, opts.prefilled);\n                    } else if (typeof (opts.prefilled) === \"string\") {\n                        privateMethods.prefill.call($self, opts.prefilled.split(opts.baseDelimiter));\n                    } else if (typeof (opts.prefilled) === \"function\") {\n                        privateMethods.prefill.call($self, opts.prefilled());\n                    }\n                } else if (opts.output !== null) {\n                    if ($(opts.output) && $(opts.output).val()) { var existing_tags = $(opts.output); }\n                    privateMethods.prefill.call($self,$(opts.output).val().split(opts.baseDelimiter));\n                }\n\n            });\n\n            return this;\n        }\n    };\n\n    $.fn.tagsManager = function(method) {\n        var $self = $(this);\n\n        if (!(0 in this)) { return this; }\n\n        if ( publicMethods[method] ) {\n            return publicMethods[method].apply( $self, Array.prototype.slice.call(arguments, 1) );\n        } else if ( typeof method === 'object' || ! method ) {\n            return privateMethods.init.apply( this, arguments );\n        } else {\n            $.error( 'Method ' +  method + ' does not exist.' );\n            return false;\n        }\n    };\n\n}(jQuery));\n\ndefine(\"tagmanager\", [\"jquery\"], function(){});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2017, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * RequireJS module providing some general support methods for handling\n * forms and functions to build Bootstrap forms easily.\n *\n * @version 0.1.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('form',[ \"jquery\", \"config\", \"modal\", \"laconic\", \"tagmanager\" ],\n       function($, config, modal) {\n\n  var LABELWIDTH = 3;\n\n  var form = {\n    /**\n     * Serialize a form as an object. The following normalizations are\n     * performed:\n     *   - Form fields that have an empty string are ignored unless\n     *     `ignore_empty` is `true`\n     *   - The value from a `<input type=\"checkbox\">`is converted\n     *     into a JavaScript boolean.\n     *\t - The value of a tag-list is converted into a list of strings.\n     * @returns {Object} holding the name/value pairs of the form\n     */\n    serializeAsObject: function(form, ignore_empty) {\n      var arr = form.serializeArray();\n      var inset = [];\n      var obj = {};\n\n      // get arrays of checkboxes\n      form.find(\"div.checkboxes.array\").each(function() {\n\tvar elem = $(this);\n\tvar set = [];\n\n\telem.find(\"input:checked\").each(function() {\n\t  var name = $(this).attr(\"name\");\n\t  set.push(name);\n\t});\n\telem.find(\"input\").each(function() {\n\t  var name = $(this).attr(\"name\");\n\t  inset.push(name);\n\t});\n\n\tobj[elem.attr(\"name\")] = set;\n      });\n\n      for(var i=0; i<arr.length; i++) {\n\tvar name  = arr[i].name;\n\tvar value = arr[i].value;\n\tvar input = form.find('[name=\"'+name+'\"]');\n\tvar type  = input.prop(\"type\");\n\tvar jvalue;\n\n\tif ( (jvalue = input.data('json-value')) ) {\n\t  obj[name] = jvalue;\n\t} else if ( value != \"\" || ignore_empty == true ) {\n\t  // deal with tag lists\n\t  if ( type == \"hidden\" && name.indexOf(\"hidden-\") == 0 ) {\n\t    name = name.slice(\"hidden-\".length);\n\t    if ( obj[name] == undefined ) {\n\t      obj[name] = value.split(\",\");\n\t    } else {\n\t      obj[name] = value.split(\",\").concat(obj[name]);\n\t    }\n\t  } else if ( type == \"text\" && input.hasClass(\"tag-list\") ) {\n\t    if ( value != \"\" ) {\n\t      if ( obj[name] !== undefined )\n\t\tobj[name].push(value);\n\t      else\n\t\tobj[name] = [value];\n\t    }\n\t  } else if ( type == \"number\" ) {\n\t    obj[name] = parseInt(value);\n\t  } else if ( type == \"checkbox\" ) {\n\t    if ( inset.indexOf(name) == -1 )\n\t      obj[name] = (value == \"on\" ? true : false);\n\t  } else {\n\t    obj[name] = value;\n\t  }\n\t}\n      }\n\n      // unchecked checkboxes are not reported\n      form.find(\"[type=checkbox]\").each(function() {\n\tvar checkbox = $(this);\n\tvar name = checkbox.prop('name');\n\tif ( checkbox.prop(\"disabled\") != true &&\n\t     obj[name] === undefined &&\n\t     inset.indexOf(name) == -1 )\n\t  obj[name] = false;\n      });\n\n      return obj;\n    },\n\n    /**\n     * Provide feedback about problems with form elements\n     * @param form is the form to decorate\n     * @param error is a pengine error message created by lib/form.pl\n     */\n\n    formError: function(formel, error) {\n      formel.find(\".has-error\").removeClass(\"has-error\");\n      formel.find(\".help-block.with-errors\").remove();\n\n      if ( error ) {\n\tif ( error.code == \"form_error\" || error.code == \"input_error\" ) {\n\t  errors = error.data.split(\"\\n\");\n\t  for(var i=0; i<errors.length; i++) {\n\t    var el = errors[i].split(/:\\s*(.*)?/);\n\n\t    form.fieldError(formel, el[0], el[1]);\n\t  }\n\t} else\n\t{ modal.alert(error.data);\n\t}\n      }\n    },\n\n    fieldError: function(form, field, msg) {\n      var input = form.find(\"input[name=\"+field+\"]\");\n\n      if ( input.length > 0 ) {\n\tvar group = input.closest(\".form-group\");\n\n\tif ( input.parent().hasClass(\"input-group\") )\n\t  input = input.parent();\n\n\tgroup.addClass(\"has-error\");\n\tinput.after($.el.p({class:\"help-block with-errors\"}, msg));\n      } else\n      { alert(\"Missing value for \"+field);\n      }\n    },\n\n    showDialog: function(data) {\n      $(\".swish-event-receiver\").trigger(\"dialog\", data);\n    },\n\n    /**\n     * Invoke the central broadcasting of SWISH\n     * @param {String} event is the event name\n     * @param {any} [data] is the associated data\n     */\n    formBroadcast: function(event, data) {\n      $(\".swish-event-receiver\").trigger(event, data);\n    },\n\n    dyn_clear: function(form, onclear) {\n      form.find('.has-clear input[type=\"text\"]').on('input propertychange',\n\t\t\t\t\t\t    function() {\n\tvar $this = $(this);\n\tvar visible = Boolean($this.val());\n\t$this.siblings('.form-control-clear').toggleClass('hidden', !visible);\n      }).trigger('propertychange');\n\n      form.find('.form-control-clear').click(function() {\n\tvar input = $(this).siblings('input[type=\"text\"]');\n\tinput.val('').trigger('propertychange').focus();\n\tif ( onclear )\n\t  onclear.call(input);\n      });\n    },\n\n    fields: {\n      fileName: function(name, public, example, disabled) {\n\tvar labeltext;\n\tvar empty = \"(leave empty for generated random name)\"\n\tvar fork, input;\n\tvar community_examples = config.swish.community_examples && example != undefined;\n\n\tif ( community_examples )\n\t  labeltext = \"Public | Example | name\";\n\telse\n\t  labeltext = \"Public | name\";\n\n        var elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"name\", labeltext),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  $.el.div({class:\"input-group\"},\n\t\t\t\t   $.el.span({class:\"input-group-addon\",\n\t\t\t\t              title:\"If checked, other users can find this program\"\n\t\t\t\t             },\n\t\t\t\t\t     checkbox(\"public\",\n\t\t\t\t\t\t      { checked: public\n\t\t\t\t\t\t      })),\n\t\t\t\t   community_examples ?\n\t\t\t\t   $.el.span({class:\"input-group-addon\",\n\t\t\t\t              title:\"If checked, add to examples menu\"\n\t\t\t\t             },\n\t\t\t\t\t     checkbox(\"example\",\n\t\t\t\t\t\t      { checked: example\n\t\t\t\t\t\t      })) : undefined,\n\t\t\t   input = textInput(\"name\",\n\t\t\t\t\t     {placeholder:\"Name \" + empty,\n\t\t\t\t\t      title:\"Public name of your program\",\n\t\t\t\t\t      value:name,\n\t\t\t\t\t      disabled:disabled}),\n\t\t\t   name ?\n\t\t\t     fork = $.el.span({class:\"input-group-btn\"\n\t\t\t\t\t      },\n\t\t\t\t\t      $.el.button({ class: \"btn btn-success\",\n\t\t\t\t\t\t\t    type: \"button\"\n\t\t\t\t\t\t\t  }, \"Fork\")) : undefined\n\t\t\t\t  )));\n\n\tif ( fork ) {\n\t  $(fork).on(\"click\", function() {\n\t    var btn = $(input).closest(\"form\").find(\".btn.btn-primary\");\n\t    $(input).attr(\"placeholder\", \"Fork as \" + empty);\n\t    $(input).val(\"\");\n\t    btn.text(btn.text().replace(\"Update\", \"Fork\"));\n\t  });\n\t}\n\n\treturn elem;\n      },\n\n      title: function(title) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"title\", \"Title\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textInput(\"title\",\n\t\t\t\t    {placeholder:\"Descriptive title\",\n\t\t\t\t     value:title})));\n\treturn elem;\n      },\n\n      /**\n       * @param {String} [identity] if provided, this indicates that the\n       * author cannot be changed.\n       */\n      author: function(author, identity) {\n\tvar options = { placeholder:\"Your name\", value:author };\n\n\tif ( author && identity ) {\n\t  options.readonly = true;\n\t  options.title    = \"Verified author name\";\n\t}\n\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"author\", \"Author\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textInput(\"author\", options)));\n\treturn elem;\n      },\n\n      link: function(link) {\n\tvar options = {\n\t  readonly: true,\n\t  title: \"Permalink\",\n\t  value: link\n\t};\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"link\", \"Link\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textInput(\"link\", options)));\n\treturn elem;\n      },\n\n      date: function(stamp, labels, name) {\n\tname = name||label;\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(name, labels),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textInput(name,\n\t\t\t\t    {disabled: true,\n\t\t\t\t     value:new Date(stamp*1000).toLocaleString()\n\t\t\t\t    })));\n\treturn elem;\n      },\n\n      description: function(description) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"description\", \"Description\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textarea(\"description\", {value:description})));\n\treturn elem;\n      },\n\n      commit_message: function(msg) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"commit_message\", \"Changes\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textarea(\"commit_message\",\n\t\t\t\t   { value:msg,\n\t\t\t\t     placeholder:\"Describe your changes here\"\n\t\t\t\t   })));\n\treturn elem;\n      },\n\n      description: function(msg) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"description\", \"Description\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textarea(\"description\",\n\t\t\t\t   { value:msg,\n\t\t\t\t     placeholder:\"Description\"\n\t\t\t\t   })));\n\treturn elem;\n      },\n\n      tags: function(tags) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"tags\", \"Tags\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  tagInput(\"tags\", \"Tags help finding this code\", tags)));\n\treturn elem;\n      },\n\n      /**\n       * Provide checkboxes for determining who may save a new version\n       * of this file\n       */\n      modify: function(who, canmodify) {\n\tvar fields = [];\n\tvar opts = { name:\"modify\", label:\"Can save new version\",\n\t\t     type:\"array\"\n\t\t   };\n\n\tfunction add(key, label) {\n\t  fields.push({ name:key,\n\t\t\tlabel:label,\n\t\t\tvalue:who.indexOf(key) != -1,\n\t\t\treadonly: !canmodify\n\t\t      });\n\t}\n\n\tadd(\"any\",   \"Anyone\");\n\tadd(\"login\", \"Logged in users\");\n\tadd(\"owner\", \"Only me\");\n\n\tif ( !canmodify )\n\t  opts.title = \"Only logged in users and owners can set permissions\";\n\telse\n\t  opts.title = \"Specify who can save an updated version of this file\";\n\n\treturn form.fields.checkboxes(fields, opts);\n      },\n\n      follow: function(email) {\n\treturn form.fields.checkboxes(\n\t\t [ { name: \"follow\", label: \"Follow this document\",\n\t\t     value:!!email, readonly:!email\n\t\t   }\n\t\t ],\n\t\t { name:\"options\", label:\"\",\n\t\t   title: \"Notify about activity (updates, chat)\\n\"+\n\t\t\t  \"Requires being logged in with valid email\"\n\t\t });\n      },\n\n      projection: function(projection) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"projection\", \"Projection\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  textInput(\"projection\",\n\t\t\t\t    {placeholder:\"Columns\", value:projection})));\n\treturn elem;\n      },\n\n      csvFormat: function(list, format) {\n\tvar elem;\n\n\tlist = list||[\"prolog\"];\n\tformat = format||list[0];\n\n\tif ( list.length == 1 ) {\n\t  elem = $.el.input({type:\"hidden\", name:\"format\", value:list[0]});\n\t} else {\n\t  elem = $.el.div({class:\"form-group\"},\n\t\t\t  label(\"format\", \"Format\"),\n\t\t\t  $.el.div({class:valgridw()},\n\t\t\t\t   select(\"format\",\n\t\t\t\t\t  list,\n\t\t\t\t\t  {value:format})));\n\t}\n\n\treturn elem;\n      },\n\n      /**\n       * Ask for limit and distinct to modify the solution set.\n       * @param {Number} [limit] is the max number of solutions to\n       * return\n       * @param {Boolean} [distinct] requests only to return distinct\n       * solutions.\n       */\n      limit: function(limit, distinct) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"name\", \"Distinct | limit\"),\n\t\t $.el.div({class:valgridw()},\n\t\t\t  $.el.div({class:\"input-group\"},\n\t\t\t\t   $.el.span({class:\"input-group-addon\",\n\t\t\t\t              title:\"If checked only return distinct results\"\n\t\t\t\t             },\n\t\t\t\t\t     checkbox(\"distinct\",\n\t\t\t\t\t\t      { checked: distinct\n\t\t\t\t\t\t      })),\n\t\t\t\t   textInput(\"limit\",\n\t\t\t\t\t     {placeholder:\"Maximum result count (blank for unlimited)\",\n\t\t\t\t\t      title:\"Limit results\",\n\t\t\t\t\t      value:limit}))));\n\treturn elem;\n      },\n\n      /**\n       * @param {Array} boxes is a list of checkbox specifications.\n       * Uses .name, .label, .value (Boolean) and .readonly\n       */\n      checkboxes: function(boxes, options) {\n\tvar boxel;\n\n\toptions = $.extend({name:\"options\", label:\"Options\", col:LABELWIDTH},\n\t\t\t   options||{});\n\n\tvar dopts = { class: \"checkboxes col-xs-\"+(12-options.col),\n\t              name:  options.name\n\t\t    };\n\tif ( options.title ) dopts.title = options.title;\n\tif ( options.type  ) dopts.class += \" \"+options.type;\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(options.name, options.label, options.col),\n\t\t boxel = $.el.div(dopts));\n\n\tfor(var k=0; k<boxes.length; k++) {\n\t  var box = boxes[k];\n\t  var opts = {type: \"checkbox\", name:box.name, autocomplete:\"false\"};\n\t  if ( box.value )\n\t    opts.checked = \"checked\";\n\t  if ( box.readonly )\n\t    opts.disabled = \"disabled\";\n\t  $(boxel).append($.el.label({class:\"checkbox-inline\"},\n\t\t\t\t     $.el.input(opts), box.label));\n\t}\n\n\treturn elem;\n      },\n\n      chunk: function(value) {\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"count\", \"Initial solutions\", 3),\n\t\t $.el.div({class:\"col-xs-9\"},\n\t\t\t  $.el.div({class:\"input-group\"},\n\t\t\t\t   textInput(\"chunk\",\n\t\t\t\t\t     { title:\"Initial number of solutions\",\n\t\t\t\t\t       type:\"number\",\n\t\t\t\t\t       value:value}))));\n\treturn elem;\n      },\n\n      name: function(name, col) {\n\tcol = col||3;\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"name\", \"Name\", col),\n\t\t $.el.div({class:\"col-xs-\"+(12-col)},\n\t\t\t  textInput(\"name\",\n\t\t\t\t    {placeholder:\"Name\",\n\t\t\t\t     value:name})));\n\treturn elem;\n      },\n\n      filename: function(name, col) {\n\tcol = col||3;\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t label(\"filename\", \"File name\", col),\n\t\t $.el.div({class:\"col-xs-\"+(12-col)},\n\t\t\t  textInput(\"filename\",\n\t\t\t\t    {placeholder:\"File name\",\n\t\t\t\t     value:name})));\n\treturn elem;\n      },\n\n      hidden: function(name, value) {\n\tif ( value !== undefined )\n\t  return $.el.input({type:\"hidden\", name:name, value:value});\n      },\n\n      /**\n       * @param {Object} options\n       * @param {String} options.label is the label used for the\n       * primary button.\n       * @param {Function} options.action is called with two arguments,\n       * the _event_ and the serialized data from the embedded form\n       * @param {Number} options.offset determines the begin column in\n       * the grid (default 2)\n       */\n      buttons: function(options) {\n\toptions    = options||{};\n\tvar label  = options.label||\"Save program\";\n\tvar offset = options.offset||LABELWIDTH;\n\tvar button = $.el.button({ name:\"save\",\n\t\t\t\t   class:\"btn btn-primary\"\n\t\t\t\t },\n\t\t\t\t label);\n\n\t$(button).on(\"click\", function(ev) {\n\t  var elem = $(ev.target).parents(\"form\")[0];\n\t  var data = form.serializeAsObject($(elem));\n\n\t  options.action(ev, data);\n\t  $(ev.target).parents(\".modal\").modal('hide');\n\t  ev.preventDefault();\n\t  return false;\n\t});\n\n\tvar elem =\n\t$.el.div({class:\"form-group\"},\n\t\t $.el.div({class:\"col-xs-offset-\"+offset+\" col-xs-\"+(12-offset)},\n\t\t\t  button,\n\t\t\t  $.el.button({name:\"cancel\",\n\t\t\t\t       class:\"btn btn-danger\",\n\t\t\t\t       'data-dismiss':\"modal\"},\n\t\t\t\t      \"Cancel\")));\n\treturn elem;\n      },\n\n      /**\n       * Bootstrap radio button.  To get the value, use\n       * `$(\"label.active > input[name=Name]\").val();\n       * @param {String} name is the name of the radio button\n       * @param {Array(Object)} buttons is an array of objects with\n       * .active, .label and .value\n       */\n      radio: function(name, buttons, type) {\n\tvar elem = $.el.div({class:\"btn-group\", \"data-toggle\":\"buttons\"});\n\ttype = type||\"radio\"\n\n\tfor(var i=0; i<buttons.length; i++) {\n\t  var cls = \"btn btn-default btn-xs\";\n\t  if ( buttons[i].active )\n\t    cls += \" active\";\n\n\t  var opts = { type:type, name:name,\n\t               autocomplete:\"off\",\n\t\t       value:buttons[i].value\n\t\t     };\n\t  var lblopts = {class:cls};\n\t  if ( buttons[i].title )\n\t    lblopts.title = buttons[i].title;\n\t  $(elem).append($.el.label(lblopts,\n\t\t\t\t    $.el.input(opts),\n\t\t\t\t    buttons[i].label));\n\t}\n\n        return elem;\n      }\n    },\n\n    widgets: {\n      glyphIcon: function(glyph) {\n\treturn $.el.span({class:\"glyphicon glyphicon-\"+glyph});\n      },\n\n      typeIcon: function(type) {\n\treturn $.el.span({class:\"dropdown-icon type-icon \"+type});\n      },\n\n      glyphIconButton: function(glyph, options) {\n\tvar attrs = {class:\"btn\", type:\"button\"};\n\n\tif ( options.action ) attrs['data-action'] = options.action;\n\tif ( options.title )  attrs.title          = options.title;\n\tif ( options.class )  attrs.class\t  += \" \"+options.class;\n\n\treturn $.el.button(attrs, form.widgets.glyphIcon(glyph));\n      },\n\n      /**\n       * Turn an icon into a dropdown button.\n       * @param {Object} options\n       * @param {Any}\t options.client is the `this` for the menu\n       *\t\t functions.\n       * @param {String} [options.divClass] additional class for the\n       * returned `div` element\n       * @param {String} [options.ulClass] additional class for the\n       * `ul` element that defines the menu.\n       * @param {Object} [options.actions] defines the menu items.\n       * this is passed to populateMenu()\n       * @returns {DIV} the downdown button\n       */\n      dropdownButton: function(icon, options) {\n\tif ( !options ) options = {};\n\tvar cls     = options.divClass;\n\tvar ulClass = options.ulClass;\n\n\tvar dropdown = $.el.div(\n\t  {class: \"btn-group dropdown\"+(cls?\" \"+cls:\"\")},\n\t  $.el.button(\n\t    {class:\"dropdown-toggle\",\n\t     \"data-toggle\":\"dropdown\"},\n\t    icon),\n\t  $.el.ul({class:\"dropdown-menu\"+(ulClass?\" \"+ulClass:\"\")}));\n\n\tif ( options.actions )\n\t  form.widgets.populateMenu($(dropdown), options.client, options.actions);\n\n\treturn dropdown;\n      },\n\n      populateMenu: function(menu, client, actions) {\n\tvar ul = menu.find(\".dropdown-menu\");\n\tvar data = ul.data(\"menu\")||{};\n\n\tfunction runMenu(ev, a) {\n\t  var action = $(a).data('action');\n\n\t  if ( action )\n\t    action.call(client, a);\n\t}\n\n\tfunction addMenuItem(label, onclick) {\n\t  if ( onclick !== undefined ) {\n\t    if ( label.indexOf(\"--\") == 0 ) {\n\t      ul.append($.el.li({class:\"divider\"}));\n\t    } else {\n\t      var a = $.el.a(label);\n\n\t      $(a).data('action', onclick);\n\t      ul.append($.el.li(a));\n\t    }\n\t  }\n\t}\n\n\tfor(var a in actions) {\n\t  if ( actions.hasOwnProperty(a) ) {\n\t    addMenuItem(a, actions[a]);\n\t  }\n\t}\n\n\tif ( !data.bound ) {\n\t  data.bound = true;\n\t  ul.on(\"click\", \"a\", function(ev) { runMenu(ev, this); } );\n\t}\n\n\tul.data(\"menu\", data);\n\n\treturn menu;\n      }\n    }\n  };\n\n\t\t /*******************************\n\t\t *\t     FUNCTIONS\t\t*\n\t\t *******************************/\n\n  function valgridw(n) {\n    if ( n === undefined ) n = LABELWIDTH;\n    return \"col-xs-\"+(12-n);\n  }\n  function colgridw(n) {\n    if ( n === undefined ) n = LABELWIDTH;\n    return \"col-xs-\"+n;\n  }\n\n  function label(elemName, text, width) {\n    width = width || LABELWIDTH;\n    return $.el.label({class:\"control-label col-xs-\"+width+\"\", for:elemName}, text);\n  }\n\n  function checkbox(name, options) {\n    var attrs = {name:name, type:\"checkbox\"};\n    options = options||{};\n    if ( options.checked ) attrs.checked = \"checked\";\n    if ( options.title   ) attrs.title\t = options.title;\n    return $.el.input(attrs);\n  }\n\n  function textInput(name, options) {\n    var attrs = {name:name, type:\"text\", class:\"form-control\"};\n    options = options||{};\n    if ( options.placeholder ) attrs.placeholder = options.placeholder;\n    if ( options.title )       attrs.title       = options.title;\n    if ( options.value )       attrs.value       = options.value;\n    if ( options.disabled )    attrs.disabled    = options.disabled;\n    if ( options.readonly )    attrs.readonly    = options.readonly;\n    if ( options.type )        attrs.type        = options.type;\n    return $.el.input(attrs);\n  }\n\n  function tagInput(name, placeholder, tags) {\n    var attrs = { name:name, type:\"text\",\n                  class:\"tm-input tag-list\"\n                };\n    if ( placeholder ) attrs.placeholder = placeholder;\n    var elem = $.el.input(attrs);\n    if ( tags )\n      $(elem).data(\"prefilled\", tags);\n    return elem;\n  }\n\n  function helpBlock(help) {\n    return $.el.p({class:\"help-block\"},\n\t\t  \"Make saved file public and give it a meaningful name\");\n  }\n\n  function textarea(name, options) {\n    var attrs = {name:name, class:\"form-control\"};\n    options = options||{};\n\n    if ( options.placeholder ) attrs.placeholder = options.placeholder;\n\n    return $.el.textarea(attrs, options.value||\"\");\n  }\n\n  /**\n   * Create a bootstrap <select> element from a list of options\n   * @param {String} name is the name of the select element\n   * @param {Array} from is an array of options. Each options is a\n   * string or an object with keys `value` and `label`.\n   * @param {Object} [options]\n   * @param {Object} [options.value] If provided, the corresponding\n   * option is selected\n   */\n\n  function select(name, from, options) {\n    var select = $($.el.select({class:\"form-control\", name:name}));\n\n    options=options||{};\n\n    function addSelect(e) {\n      if ( typeof(e) == \"string\" ) {\n\tif ( e == options.value ) {\n\t  select.append($.el.option({selected:\"selected\"}, e));\n\t} else {\n\t  select.append($.el.option(e));\n\t}\n      } else {\n\tvar opts = {value:e.value};\n\tif ( e.value == options.value )\n\t  opts.selected = \"selected\";\n\n\tselect.append($.el.option(opts, e.label));\n      }\n    }\n\n    for(var i=0; i<from.length; i++)\n      addSelect(from[i]);\n\n    return select[0];\n  }\n\n  return form;\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2015-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * Manage application history. This file supports  two types of history:\n * plugin for the browser history  and  keep   track  of  issues such as\n * recently used files.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n */\n\ndefine('history',[\"jquery\", \"preferences\", \"form\", \"utils\"],\n       function($, preferences, form, utils) {\n  var history = {\n\n\t\t /*******************************\n\t\t *\t BROWSER HISTORY\t*\n\t\t *******************************/\n\n    /**\n     * Push a new entry to the browser history.  Since we have tabs,\n     * there isn't much reason for a back button.  We merely use the\n     * history to switch the location bar to the current document.\n     */\n    push: function(options) {\n      var cpath = window.location.pathname;\n\n      if ( cpath != options.url ) {\n\tvar state = {location: options.url, reason: options.reason};\n\n\twindow.history.pushState(state, \"\", options.url);\n\tdocument.title = \"SWISH -- \"\n                       + (options.url ? utils.basename(options.url)\n\t\t\t              : \"SWI-Prolog for SHaring\");\n      }\n    },\n\n    /**\n     * Restore a previous browser history state.  simply ignores.\n     * See push() for details.\n     */\n    pop: function(e) {\n    },\n\n\t\t /*******************************\n\t\t *\t  RECENT DOCUMENTS\t*\n\t\t *******************************/\n\n    recentMaxLength: 10,\n\n    /**\n     * Add/refresh document to list of recent documents.\n     * @param {Object} doc\n     * @param {String} doc.id is the document _identifier_\n     * @param {String} [doc.label] is the document label for\n     * the _Open recent_ menu.  Default is the `id`.\n     * @param {String} doc.type is the type of document.\n     * A document of a specific type is opened by calling\n     * `history.openRecent.type.call(event, doc)`\n     */\n\n    addRecent: function(doc) {\n      var recent = preferences.getVal(\"recentDocuments\")||[];\n\n      function equalDocument(d1, d2) {\n\treturn d1.type == d2.type && d1.id == d2.id;\n      }\n\n      for(var i=0; i<recent.length; i++) {\n\tif ( equalDocument(doc, recent[i]) ) {\n\t  recent.splice(i,1);\n\t  break;\n\t}\n      }\n      while ( recent.length+1 > history.recentMaxLength )\n\trecent.pop();\n      recent.splice(0,0,doc);\n\n      preferences.setVal(\"recentDocuments\", recent);\n    },\n\n    openRecent: function(ev, doc) {\n      return history.openRecent[doc.st_type](ev, doc);\n    },\n\n    /**\n     * Fill a (navbar) <ul> with <li><a> elements, where\n     * each <a> carries the related entry as `data('document')`\n     */\n    updateRecentUL: function() {\n      var ul = $(this);\n      var recent = preferences.getVal(\"recentDocuments\")||[];\n\n      ul.html(\"\");\n      for(var i=0; i<recent.length; i++) {\n\tvar e = recent[i];\n\n\tif ( e.id ) {\n\t  var a = $.el.a(form.widgets.typeIcon(e.id.split(\".\").pop()),\n\t\t\t e.label||e.id);\n\n\t  $(a).data('document', e);\n\t  ul.append($.el.li(a));\n\t}\n      }\n    }\n  };\n\n  /**\n   * Open recent \"gitty\" document\n   */\n  history.openRecent.gitty = function(ev, doc) {\n    $(ev.target).parents(\".swish\").swish('playFile', doc.id);\n  };\n\n  window.onpopstate = history.pop;\n\n  return history;\n});\n\n","/*  Part of SWISH\n\n    Author:        Anne Ogborn\n    E-mail:        annie66us@yahoo.com\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2018, Anne Ogborn\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n/**\n * @fileOverview\n * This file creates avatars from the SVG file icons/avatar.svg by\n * changing visibility and fill colors.  This is used in `chat.js`.\n *\n * @version 0.2.0\n * @author Anne Ogborn, annie66us@yahoo.com\n * @requires jquery\n */\ndefine('svgavatar',[\"jquery\", \"laconic\"],\n    function() {\n\n        (function($) {\n            var pluginName = 'svgavatar';\n\n            /** @lends $.fn.svgavatar */\n            var methods = {\n                _init: function(options) {\n                    return this.each(function() {\n                        var elem = $(this);\n                        var data = {}; /* private data */\n\n\n                        elem.data(pluginName, data); /* store with element */\n                    });\n                },\n\n                /**\n                 * @param {int} an integer from a range at least 0-2^20\n                 */\n                setAVappearanceByUserID: function(ID) {\n\t\t  return $(this).each(function() {\n\t\t    var _this = $(this);\n\n\t\t    var h = ID & 0x1FFFFF;\n\t\t    _this.svgavatar('selectAppearance', 'hair', h & 0x07);\n\t\t    _this.svgavatar('setFill', 'hair',\n\t\t\t\t    ['#000000', '#CC4400', '#FFFF22', '#9f220B'][(h >> 3) & 0x03]);\n\t\t    _this.svgavatar('selectAppearance', 'body', (h >> 5) & 0x03);\n\t\t    _this.svgavatar('setFill', 'body',\n\t\t\t\t    ['#95D155', '#19A6BA', '#F03C9B', '#0B061F'][(h >> 7) & 0x03]);\n\t\t    _this.svgavatar('selectAppearance', 'eyes', (h >> 9) & 0x07);\n\t\t    _this.svgavatar('selectAppearance', 'nose', (h >> 11) & 0x03);\n\t\t    _this.svgavatar('selectAppearance', 'mouth', (h >> 13) & 0x07);\n\t\t  });\n                },\n\n                selectAppearance: function(section, index) {\n\t\t  $(this).find('#' + section + ' g').css('display', 'none');\n\t\t  $(this).find('#' + section + ' g:nth-child(' + index + ')').css('display', 'inherit');\n                },\n\n                setFill: function(section, color) {\n\t\t  return $(this).each(function() {\n\t\t    $(this).find('#' + section + ' [fill]').attr('fill', color);\n\t\t  });\n                }\n            }; // methods\n\n                /**\n                 * <Class description>\n                 *\n                 * @class svgavatar\n                 * @tutorial jquery-doc\n                 * @memberOf $.fn\n                 * @param {String|Object} [method] Either a method name or the jQuery\n                 * plugin initialization object.\n                 * @param [...] Zero or more arguments passed to the jQuery `method`\n                 */\n\n                $.fn.svgavatar = function(method) {\n                    if (methods[method]) {\n                        return methods[method]\n                            .apply(this, Array.prototype.slice.call(arguments, 1));\n                    } else if (typeof method === 'object' || !method) {\n                        return methods._init.apply(this, arguments);\n                    } else {\n                        $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n                    }\n                };\n        }(jQuery));\n    });\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2016-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Deal with cooperation\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('chat',[ \"jquery\", \"config\", \"preferences\", \"form\", \"modal\", \"utils\",\n\t \"svgavatar\"\n       ],\n       function($, config, preferences, form, modal, utils) {\n\nvar MIN_RECONNECT_DELAY =  10000;\nvar MAX_RECONNECT_DELAY = 300000;\n\n(function($) {\n  var pluginName = 'chat';\n  var reconnect_delay = MIN_RECONNECT_DELAY;\n  var last_open = null;\n\n  /** @lends $.fn.chat */\n  var methods = {\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\t\t\t/* private data */\n\n\telem.data(pluginName, data);\t/* store with element */\n\n\t/* add event handling */\n\telem.on(\"click\", function(ev) {\n\t  var li = $(ev.target).closest(\"li.user\");\n\n\t  if ( li.length == 1 )\n\t    elem.chat('unnotify', li.attr(\"id\"));\n\t});\n\telem.on(\"send\", function(ev, msg) {\n\t  elem.chat('send', msg);\n\t});\n\t$(window).bind(\"beforeunload\", function() {\n\t  elem.chat('disconnect');\n\t});\n\n\t/* setup websocket */\n\tif ( config.swish.chat ) {\n\t  elem.chat('connect');\n\t}\n      });\n    },\n\n\t\t /*******************************\n\t\t *\t      WEBSOCKET\t\t*\n\t\t *******************************/\n\n    /**\n     * Create a websocket connection to /chat on the SWISH server.\n     */\n    connect: function() {\n      var elem = this;\n      var data = this.data(pluginName);\n      var url  = window.location.host + config.http.locations.swish_chat;\n      var lead = \"?\";\n      var ws = window.location.protocol.replace(\"http\", \"ws\");\n\n      if ( data.connection && data.connection.readyState != 3 )\n\treturn this;\t\t\t/* already connecting, open or closing */\n\n      function add_pref_param(name, pname) {\n\tvar value = preferences.getVal(pname);\n\n\tif ( value ) {\n\t  if ( pname == \"anon-avatar\" ) {\n\t    /* hack to deal with possibly rebased server */\n\t    if ( value.indexOf(\"#\") == -1 ) {\n\t      value = config.http.locations.avatar+value.split(\"/\").pop();\n\t    } else {\n\t      value = config.http.locations.swish+\"icons/\"+value.split(\"/\").pop();\n\t    }\n\t  }\n\n\t  url += lead + name + \"=\" + encodeURIComponent(value);\n\t  lead = \"&\";\n\t}\n      }\n\n      add_pref_param(\"avatar\",   \"anon-avatar\");\n      add_pref_param(\"nickname\", \"nick-name\");\n\n      if ( data.reconnect ) {\t\t\t/* reconnecting */\n\turl += lead + \"reconnect\" + \"=\" + encodeURIComponent(data.reconnect);\n\tlead = \"&\";\n      }\n\n      try {\n\tdata.connection = new WebSocket(ws + \"//\" + url,\n\t\t\t\t\t['v1.chat.swish.swi-prolog.org']);\n      } catch(err) {\n\telem.chat('userCount', undefined);\n\treturn;\n      }\n\n      data.connection.onerror = function(error) {\n\telem.chat('userCount', undefined);\n      };\n      data.connection.onclose = function(ev) {\n\tif ( last_open == null ) {\n\t  reconnect_delay *= 2;\n\t  if ( reconnect_delay > MAX_RECONNECT_DELAY )\n\t    reconnect_delay = MAX_RECONNECT_DELAY;\n\t} else {\n\t  if ( getTime() - last_open > 300000 )\n\t  { reconnect_delay = MIN_RECONNECT_DELAY;\n\t  } else\n\t  { reconnect_delay *= 2;\n\t    if ( reconnect_delay > MAX_RECONNECT_DELAY )\n\t      reconnect_delay = MAX_RECONNECT_DELAY;\n\t  }\n\t}\n\tsetTimeout(function() {\n\t  elem.chat('connect');\n\t}, reconnect_delay);\n      };\n      data.connection.onmessage = function(e) {\n\tvar msg = JSON.parse(e.data);\n\tmsg.origin = e.origin;\n\tif ( msg.type )\n\t  elem.chat(msg.type, msg);\n\telse\n\t  console.log(e);\n      };\n      data.connection.onopen = function() {\n      };\n    },\n\n    empty_queue: function() {\n      var data = this.data(pluginName);\n\n      while( data.queue &&\n\t     data.queue.length > 0\n\t     && data.connection.readyState == 1 ) {\n\tvar str = data.queue.shift();\n\tdata.connection.send(str);\n      }\n    },\n\n    disconnect: function() {\n      var data = this.data(pluginName);\n\n      if ( data.connection ) {\n\tthis.chat('send', {type: \"unload\"});\n\tdata.connection.onclose = function(){};\n\tdata.connection.close();\n\tdata.connection = undefined;\n      }\n\n      return this;\n    },\n\n\n\t\t /*******************************\n\t\t *\t   BASIC MESSAGES\t*\n\t\t *******************************/\n\n    /**\n     * @param {Object} msg is the JSON object to broadcast\n     */\n    send: function(msg) {\n      var data = this.data(pluginName);\n\n      if ( data && data.connection ) {\n\tvar str = JSON.stringify(msg);\n\n\tif ( data.connection.readyState != 1 ) {\n\t  if ( !data.queue )\n\t    data.queue = [str];\n\t  else\n\t    data.queue.push(str);\n\t  this.chat('connect');\n\t} else {\n\t  data.connection.send(str);\n\t}\n      }\n\n      return this;\n    },\n\n    subscribe: function(channel, sub_channel) {\n      var msg = { type: \"subscribe\", channel: channel };\n\n      if ( sub_channel )\n\tmsg.sub_channel = sub_channel;\n\n      this.chat('send', msg);\n    },\n\n    unsubscribe: function(channel, subchannel) {\n      var msg = { type: \"unsubscribe\", channel: channel };\n\n      if ( sub_channel )\n\tmsg.sub_channel = sub_channel;\n\n      this.chat('send', msg);\n    },\n\n\t\t /*******************************\n\t\t *\t      ACTIONS\t\t*\n\t\t *******************************/\n\n    /**\n     * The welcome message is sent by SWISH immediately after opening\n     * the websocket connection.  It provides the session UID for this\n     * user\n     */\n    welcome: function(e) {\n      var data = this.data(pluginName);\n\n      if ( data.wsid && data.wsid != e.wsid ) {\n\tthis.html(\"\");\t\t\t\t/* server restart? */\n      }\n\n      data.wsid = e.wsid;\n      data.reconnect = e.reconnect;\t\t/* reconnection token */\n      if ( e.avatar && e.avatar_source == 'generated' )\n\tpreferences.setVal(\"anon-avatar\", e.avatar);\n      e.role = \"self\";\n\n      var li = this.chat('addUser', e);\n      $(li).addClass(\"myself\");\n      this.chat('userCount', e.visitors);\n      last_open = getTime();\n\n      if ( e.check_login )\n\t$(\"#login\").login('update', \"check\");\n      else\n\t$(\".sourcelist\").trigger(\"login\");\n      $(\".storage\").storage('chat_status');\n      this.chat('empty_queue');\n    },\n\n    userCount: function(cnt) {\n      var elem = $(\"#user-count\");\n\n      if ( cnt == undefined ) {\n\telem.parent().hide();\n      } else {\n\telem.parent().show();\n\telem.text(cnt);\n      }\n    },\n\n    /**\n     * Replied when opening SWISH on a file to inform\n     * the new user about existing visitors to same\n     * files as are open in the current SWISH.  See\n     * inform_newby_about_existing_gazers/2.\n     */\n    gazers: function(e) {\n      if ( e.gazers ) {\n\tfor(var i=0; i<e.gazers.length; i++) {\n\t  var gazer = e.gazers[i];\n\t  this.chat('addUser', gazer);\n\t  if ( gazer.file )\n\t    this.chat('addUserFile', gazer.wsid, gazer.file);\n\t}\n      }\n    },\n\n    /**\n     * Replied if the profile associated with a visitor changes.  A\n     * key `reason` carries the reason for the change.\n     */\n\n    profile: function(e) {\n      var data = this.data(pluginName);\n      var li = $(\"#\"+e.wsid);\n\n      li.children(\"a\").html(\"\").append(avatar(e));\n      if ( e.avatar ) {\n\t$(\"*[data-userid=\"+e.wsid+\"] img.avatar\").attr(\"src\", e.avatar);\n\tif ( e.avatar_source == 'generated' )\n\t  preferences.setVal(\"anon-avatar\", e.avatar);\n      }\n\n      if ( e.name ) {\n\tli.prop('title', e.name);\n\tif ( e.reason == 'set-nick-name' ) {\n\t  e.html = \"Named <i>\"+utils.htmlEncode(e.name)+\"</i>\";\n\t  this.chat('notifyUser', e);\n\t}\n      }\n\n      if ( data.wsid == e.wsid ) {\t/* current user profile changed */\n\t$(\".sourcelist\").trigger(\"login\");\n      }\n    },\n\n    /**\n     * A user has rejoined. This is the case if we lost the\n     * connection and the connection was re-established.\n     */\n    rejoined: function(e) {\n      var avatars = $(\"#\"+e.wsid);\n\n      this.chat('lost', avatars, false);\n      if ( e.visitors )\n\tthis.chat('userCount', e.visitors);\n    },\n\n    /**\n     * A new user has joined.\n     */\n    joined: function(e) {\n      if ( e.visitors )\n\tthis.chat('userCount', e.visitors);\n    },\n\n    session_closed: function() {\n      $(\"#login\").login('update', \"session-closed\");\n    },\n\n    /**\n     * Display a notification by some user.\n     */\n    notify: function(e) {\n      this.chat('notifyUser', e);\n    },\n\n    /**\n     * Add incomming chat messages to the chatroom.  If there is no\n     * chatroom we should warn/open it\n     */\n    'chat-message': function(e) {\n      var rooms = $(\"div.chatroom\").chatroom('rooms', e.docid);\n\n      $(\".storage\").storage('chat_message', e);\n\n      if ( e.docid == \"gitty:\"+config.swish.hangout ) {\n\t$(\"#broadcast-bell\").chatbell('chat-message', e);\n      }\n\n      if ( rooms.length > 0 ) {\n\trooms.chatroom('add', e);\n\te.displayed = true;\n      } else {\n\tif ( $(\"#\"+e.user.id).length > 0 ) {\n\t  msg = $.extend({}, e);\n\t  msg.wsid = e.user.id;\n\t  msg.html = \"Wants to chat\";\n\t  this.chat('notifyUser', msg);\n\t}\n      }\n    },\n\n    /**\n     * Some action was forbidden\n     */\n\n     forbidden: function(e) {\n       modal.alert(e.message||\"Action is forbidden\");\n     },\n\n    /**\n     * Indicate we have read all messages upto a certain time stamp.\n     * @param {String} docid is the document id for which we should\n     * update the counter.\n     * @param {Number} time is the time of the last message read\n     * (seconds after 1/1/1970)\n     */\n    read_until: function(docid, time) {\n      preferences.setDocVal(docid, 'chatBar', time);\n    },\n\n\n\t\t /*******************************\n\t\t *\t        UI\t\t*\n\t\t *******************************/\n\n    /**\n     * Get the broadcast room\n     */\n     broadcast_room: function() {\n      return this.closest(\".swish\")\n                 .find(\".storage\")\n                 .storage('match', {file:config.swish.hangout});\n    },\n\n    /**\n     * Present a notification associated with a user. We do not\n     * add a user icon for open and close on the broadcast room if\n     * we do not have this open when the message arrives.\n     */\n    notifyUser: function(options) {\n      var elem = this;\n\n      function isBroadcast(options) {\n\treturn ( ( options.event == 'opened' ||\n\t\t   options.event == 'closed' ) &&\n\t\t options.event_argv &&\n\t\t options.event_argv[0] == config.swish.hangout\n\t       );\n      }\n\n      if ( isBroadcast(options) && !this.chat('broadcast_room') )\n\toptions.create_user = false;\n\n      var user_li = this.chat('addUser', options);\n\n      if ( user_li && user_li.length > 0 ) {\n\toptions.onremove = function() {\n\t  elem.chat('unnotify', options.wsid);\n\t};\n\tmodal.notify(user_li, options);\n\n\tthis.chat('updateFiles', options);\n      }\n    },\n\n    unnotify: function(wsid) {\n      if ( $(\"#\"+wsid).hasClass(\"removed\") )\n\tthis.chat('removeUser', wsid);\n\n      return this;\n    },\n\n    updateFiles: function(options) {\n      var data = $(this).data(pluginName);\n\n      function file() {\n\treturn options.event_argv[0];\n      }\n\n      if ( options.event == \"opened\" ) {\n\tthis.chat('addUserFile', options.wsid, file());\n      } else if ( options.event == \"closed\" ) {\n\tvar wsid = options.wsid == data.wsid ? undefined : options.wsid;\n\tthis.chat('removeUserFile', wsid, file(), true);\n      }\n    },\n\n    /**\n     * Return or add a user to the notification area.\n     * @param {Object} options\n     * @param {String} options.wsid Identifier for the user (a UUID)\n     * @param {String} [options.name] is the name of the user\n     * @returns {jQuery} the `li` element representing the user\n     */\n    addUser: function(options) {\n      var li = $(\"#\"+options.wsid);\n\n      if ( li.length == 0 )\n      { if ( options.create_user != false ) {\n\t  li = $(li_user(options.wsid, options));\n\t  this.prepend(li);\n        } else {\n\t  return null;\n\t}\n      } else {\n\tthis.chat('lost', li, false);\n      }\n\n      return li;\n    },\n\n    /**\n     * Remove a user avatar.  If a notification is pending we delay\n     * removal until the notification times out\n     */\n    removeUser: function(wsid) {\n      if ( typeof wsid == \"string\" ) {\n\twsid = {wsid:wsid};\n      }\n\n      if ( wsid.visitors !== undefined )\n\tthis.chat('userCount', wsid.visitors);\n      var li = $(\"#\"+wsid.wsid);\n      if ( li.length == 0 )\n\treturn this;\n\n      if ( wsid.reason != \"close\" ) {\n\tif ( $(\"#ntf-\"+wsid.wsid).length > 0 )\t/* notification pending */\n\t  li.addClass(\"removed\");\n\telse\n\t  li.hide(400, function() {this.remove();});\n      } else {\t\t\t\t\t/* connection was lost */\n\tthis.chat('lost', li, true);\n      }\n\n      return this;\n    },\n\n    /**\n     * Set/clear lost-connection state of users.\n     * @param {jQuery} li set of items to set/clear\n     * @param {Boolean} lost is `true` if we lost the connection\n     */\n    lost: function(li, lost) {\n      if ( lost ) {\n\tli.addClass(\"lost\");\n      } else {\n\tli.removeClass(\"lost\");\n      }\n\n      li.each(function() {\n\tvar elem = $(this);\n\tif ( lost ) {\n\t  elem.data('lost-timer',\n\t\t    setTimeout(function() {\n\t\t      if ( li.hasClass(\"lost\") )\n\t\t\tli.remove();\n\t\t    }, 60000));\n\t} else {\n\t  var tmo = elem.data('lost-timer');\n\t  if ( tmo ) {\n\t    clearTimeout(tmo);\n\t    elem.data('lost-timer', undefined);\n\t  }\n\t}\n      });\n    },\n\n    /**\n     * Get info about a specific user.\n     * @param {Array} [fields] lists the keys we want to have in the\n     * user objects.  Default is all we have.\n     */\n    user_info: function(fields) {\n      var li = $(this);\n      var user = {};\n\n      if ( !fields || fields.indexOf('id') >= 0 ) {\n\tuser.id = li.attr(\"id\");\n      }\n      if ( !fields || fields.indexOf('name') >= 0 ) {\n\tvar name = li.prop(\"title\");\n\tif ( name && name !== \"Me\" )\n\t  user.name = name;\n      }\n      if ( !fields || fields.indexOf('avatar') >= 0 ) {\n\tuser.avatar = li.find(\"img.avatar\").attr(\"src\");\n      }\n\n      return user;\n    },\n\n    /**\n     * Get the set of visible users.  The return is an object holding\n     * a key `self` and a key `users` bound to an array of users.\n     * `self` points to the user of this browser.  Self always has\n     * all keys\n     */\n    users: function(fields) {\n      var users = [];\n      var rc = {users:users};\n\n      this.find(\"li.user[id]\").each(function() {\n\tvar elem = $(this);\n\tvar self = elem.hasClass(\"myself\");\n\tvar user = elem.chat('user_info', self ? undefined : fields);\n\n\tif ( self ) {\n\t  rc.self = $.extend({}, user);\n\t  user.is_self = true;\n\t}\n\n\tusers.push(user);\n      });\n\n      return rc;\n    },\n\n    /**\n     * Get info on the _self_ user.\n     */\n    self: function(fields) {\n      var li = this.find(\"li.user.myself[id]\");\n\n      return li.chat('user_info', fields);\n    },\n\n    /**\n     * Browser `wsid` has opened `file`\n     */\n    addUserFile: function(wsid, file) {\n      var li = $(\"#\"+wsid);\n      var ul = li.find(\"ul.dropdown-menu\");\n      var fli;\n\n      ul.find(\"li.file\").each(function() {\n\tif ( $(this).data(\"file\") == file ) {\n\t  fli = this;\n\t  return false;\n\t}\n      });\n\n      if ( fli == undefined ) {\n\tvar type = file.split(\".\").pop();\n\tul.append(\n\t  $.el.li({class:\"file\", \"data-file\":file, title:\"Shared file\"},\n\t\t  $.el.a($.el.span({class: \"dropdown-icon type-icon \"+type}),\n\t\t\t file)));\n      }\n\n      return this;\n    },\n\n    /**\n     * Remove a file associated with the user wsid.\n     * @param {String} [wsid] User for which to remove file.  If\n     * `undefined`, remove file for all users.\n     * @param {Boolean} [user_too] if `true', remove the user if\n     * the set of files becomes empty and this is not `myself`.\n     */\n    removeUserFile: function(wsid, file, user_too) {\n      var elem = this;\n\n      function removeFile(user_li) {\n\tvar ul = user_li.children(\"ul.dropdown-menu\");\n\n\tul.find(\"li.file\").each(function() {\n\t  if ( $(this).data(\"file\") == file ) {\n\t    $(this).remove();\n\t    if ( user_too &&\n\t\t !user_li.hasClass(\"myself\") &&\n\t\t ul.find(\"li.file\").length == 0 )\n\t      elem.chat('removeUser', user_li.attr(\"id\"));\n\t    return false;\n\t  }\n\t});\n      }\n\n      if ( wsid ) {\n\tremoveFile($(\"#\"+wsid));\n      } else {\n\tthis.children().each(function() {\n\t  removeFile($(this), file, user_too);\n\t});\n      }\n    }\n  }; // methods\n\n  // Private functions\n\n  /**\n   * Add an entry for a user to the notification area\n   */\n  function li_user(id, options) {\n    options = options||{};\n    var ul;\n    var a;\n    var name = options.name;\n\n    if ( !name && options.role == \"self\" )\n      name = \"Me\";\n    if ( !name )\n      name = id;\n\n    var li = $.el.li({class:\"dropdown user\", id:id, title:name},\n\t\t   a=$.el.a({ class:\"dropdown-toggle avatar\",\n\t\t\t      'data-toggle':\"dropdown\"\n\t\t\t    },\n\t\t\t    avatar(options)),\n\t\t  ul=$.el.ul({ class:\"dropdown-menu pull-right\",\n\t\t\t       title:\"\"\n\t\t\t     }));\n\n    if ( options.role == \"self\" ) {\n      $(a).append($.el.b({class:\"caret\"}));\n\n      var input = $.el.input({ type:\"text\",\n\t\t\t       placeholder:\"Nick name\",\n\t\t\t       value:options.name||\"\",\n\t\t\t       title:\"Nick name\"\n\t\t\t     });\n      ul.append($.el.li(input));\n      $(input).keypress(function(ev) {\n\tif ( ev.which == 13 ) {\n\t  var name = $(input).val().trim();\n\n\t  if ( name != \"\" ) {\n\t    $(\"#chat\").trigger('send',\n\t\t\t       { type:'set-nick-name',\n\t\t\t\t name: name\n\t\t\t       });\n\t    preferences.setVal(\"nick-name\", name);\n\t  }\n\t  $(input).closest('.dropdown.open').removeClass('open');\n\t}\n      });\n\n      form.widgets.populateMenu($(li), $(\"#chat\"), {\n/*\t\"Chat ...\": function() {\n\t  this.chat('start_chat');\n\t}\n*/\n      });\n\n      ul.append($.el.li({class:\"divider\"}));\n    }\n\n    return li;\n  }\n\n  /**\n   * @return {Number} time since 1/1/1970 in milliseconds\n   */\n  function getTime() {\n    var d = new Date();\n    return d.getTime();\n  }\n\n  /**\n   * <Class description>\n   *\n   * @class chat\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.chat = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n  var svg_images = {};\n\n  function avatar(options) {\n    var img;\n\n    if ( options.avatar ) {\n      var m = /(.*\\.svg)#(\\d+)$/.exec(options.avatar);\n\n      if ( m && m[2] ) {\n\tvar id  = parseInt(m[2], 10);\n\tvar url = m[1];\n\n\timg = $.el.span({class:\"avatar svg\"});\n\tif ( svg_images[url] ) {\n\t  $(img).html(svg_images[url])\n\t        .svgavatar('setAVappearanceByUserID', id);\n\t} else {\n\t  $.ajax({ url: options.avatar,\n\t\t   type: \"GET\",\n\t\t   dataType: \"text\",\n\t\t   success: function(reply) {\n\t\t     svg_images[url] = reply;\n\t\t     $(img).html(reply)\n\t\t           .svgavatar('setAVappearanceByUserID', id);\n\t\t   },\n\t\t   error: function(jqXHR) {\n\t\t     modal.ajaxError(jqXHR);\n\t\t   }\n\t\t });\n\t}\n      } else {\n\timg = $.el.img({class:\"avatar\", src:options.avatar });\n      }\n    } else {\n      img = $.el.span({class:\"avatar glyphicon glyphicon-user\"})\n    }\n\n    return $.el.div({class:\"avatar-container\"}, img);\n  }\n\n  return {\n    avatar: avatar\n  };\n});\n\n","/*!\n * JQuery Spliter Plugin\n * Copyright (C) 2010-2013 Jakub Jankiewicz <http://jcubic.pl>\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n(function($, undefined) {\n    var count = 0;\n    var splitter_id = null;\n    var splitters = [];\n    var current_splitter = null;\n    $.fn.split = function(options) {\n        var data = this.data('splitter');\n        if (data) {\n            return data;\n        }\n        var panel_1;\n        var panel_2;\n        var settings = $.extend({\n            limit: 100,\n            orientation: 'horizontal',\n            position: '50%',\n            invisible: false,\n            onDragStart: $.noop,\n            onDragEnd: $.noop,\n            onDrag: $.noop\n        }, options || {});\n        this.settings = settings;\n        var cls;\n        var children = this.children();\n        if (settings.orientation == 'vertical') {\n            panel_1 = children.first().addClass('left_panel');\n            panel_2 = panel_1.next().addClass('right_panel');\n            cls = 'vsplitter';\n        } else if (settings.orientation == 'horizontal') {\n            panel_1 = children.first().addClass('top_panel')\n            panel_2 = panel_1.next().addClass('bottom_panel');\n            cls = 'hsplitter';\n        }\n        if (settings.invisible) {\n            cls += ' splitter-invisible';\n        }\n        var width = this.width();\n        var height = this.height();\n        var id = count++;\n        this.addClass('splitter_panel');\n        var splitter = $('<div/>').addClass(cls).bind('mouseenter touchstart', function() {\n            splitter_id = id;\n        }).bind('mouseleave touchend', function() {\n            splitter_id = null;\n        }).insertAfter(panel_1);\n        var position;\n\n        function get_position(position) {\n            if (typeof position === 'number') {\n                return position;\n            } else if (typeof position === 'string') {\n                var match = position.match(/^([0-9\\.]+)(px|%)$/);\n                if (match) {\n                    if (match[2] == 'px') {\n                        return +match[1];\n                    } else {\n                        if (settings.orientation == 'vertical') {\n                            return (width * +match[1]) / 100;\n                        } else if (settings.orientation == 'horizontal') {\n                            return (height * +match[1]) / 100;\n                        }\n                    }\n                } else {\n                    //throw position + ' is invalid value';\n                }\n            } else {\n                //throw 'position have invalid type';\n            }\n        }\n\n        var self = $.extend(this, {\n            refresh: function() {\n                var new_width = this.width();\n                var new_height = this.height();\n                if (width != new_width || height != new_height) {\n                    width = this.width();\n                    height = this.height();\n                    self.position(position);\n                }\n            },\n            position: (function() {\n                if (settings.orientation == 'vertical') {\n                    return function(n, silent) {\n                        if (n === undefined) {\n                            return position;\n                        } else {\n                            position = get_position(n);\n                            var sw = splitter.width();\n                            var sw2 = sw/2;\n                            if (settings.invisible) {\n                                var pw = panel_1.width(position).outerWidth();\n                                panel_2.width(self.width()-pw);\n                                splitter.css('left', pw-sw2);\n                            } else {\n                                var pw = panel_1.width(position-sw2).outerWidth();\n                                panel_2.width(self.width()-pw-sw);\n                                splitter.css('left', pw);\n                            }\n                        }\n                        if (!silent) {\n                            self.find('.splitter_panel').trigger('splitter.resize');\n                        }\n                        return self;\n                    };\n                } else if (settings.orientation == 'horizontal') {\n                    return function(n, silent) {\n                        if (n === undefined) {\n                            return position;\n                        } else {\n                            position = get_position(n);\n                            var sw = splitter.height();\n                            var sw2 = sw/2;\n                            if (settings.invisible) {\n                                var pw = panel_1.height(position).outerHeight();\n                                panel_2.height(self.height()-pw);\n                                splitter.css('top', pw-sw2);\n                            } else {\n                                var pw = panel_1.height(position-sw2).outerHeight();\n                                panel_2.height(self.height()-pw-sw);\n                                splitter.css('top', pw);\n                            }\n                        }\n                        if (!silent) {\n                            self.find('.splitter_panel').trigger('splitter.resize');\n                        }\n                        return self;\n                    };\n                } else {\n                    return $.noop;\n                }\n            })(),\n            orientation: settings.orientation,\n            limit: settings.limit,\n            isActive: function() {\n                return splitter_id === id;\n            },\n            destroy: function() {\n                self.removeClass('splitter_panel');\n                splitter.unbind('mouseenter');\n                splitter.unbind('mouseleave');\n                splitter.unbind('touchstart');\n                splitter.unbind('touchmove');\n                splitter.unbind('touchend');\n                splitter.unbind('touchleave');\n                splitter.unbind('touchcancel');\n                if (settings.orientation == 'vertical') {\n                    panel_1.removeClass('left_panel');\n                    panel_2.removeClass('right_panel');\n                } else if (settings.orientation == 'horizontal') {\n                    panel_1.removeClass('top_panel');\n                    panel_2.removeClass('bottom_panel');\n                }\n                self.unbind('splitter.resize');\n                self.find('.splitter_panel').trigger('splitter.resize');\n                splitters[id] = null;\n                splitter.remove();\n                var not_null = false;\n                for (var i=splitters.length; i--;) {\n                    if (splitters[i] !== null) {\n                        not_null = true;\n                        break;\n                    }\n                }\n                //remove document events when no splitters\n                if (!not_null) {\n                    $(document.documentElement).unbind('.splitter');\n                    $(window).unbind('resize.splitter');\n                    self.data('splitter', null);\n                    splitters = [];\n                    count = 0;\n                }\n            }\n        });\n        self.bind('splitter.resize', function(e) {\n            var pos = self.position();\n            if (self.orientation == 'vertical' &&\n                pos > self.width()) {\n                pos = self.width() - self.limit-1;\n            } else if (self.orientation == 'horizontal' &&\n                       pos > self.height()) {\n                pos = self.height() - self.limit-1;\n            }\n            if (pos < self.limit) {\n                pos = self.limit + 1;\n            }\n            self.position(pos, true);\n        });\n        //inital position of splitter\n        var pos;\n        if (settings.orientation == 'vertical') {\n            if (pos > width-settings.limit) {\n                pos = width-settings.limit;\n            } else {\n                pos = get_position(settings.position);\n            }\n        } else if (settings.orientation == 'horizontal') {\n            //position = height/2;\n            if (pos > height-settings.limit) {\n                pos = height-settings.limit;\n            } else {\n                pos = get_position(settings.position);\n            }\n        }\n        if (pos < settings.limit) {\n            pos = settings.limit;\n        }\n        self.position(pos, true);\n        if (splitters.length == 0) { // first time bind events to document\n            $(window).bind('resize.splitter', function() {\n                $.each(splitters, function(i, splitter) {\n                    if ( splitter ) splitter.refresh();\n                });\n            });\n            $(document.documentElement).bind('mousedown.splitter touchstart.splitter', function(e) {\n                if (splitter_id !== null) {\n                    current_splitter = splitters[splitter_id];\n                    $('<div class=\"splitterMask\"></div>').css('cursor', current_splitter.children().eq(1).css('cursor')).insertAfter(current_splitter);\n                    current_splitter.settings.onDragStart(e);\n                    return false;\n                }\n            }).bind('mouseup.splitter touchend.splitter touchleave.splitter touchcancel.splitter', function(e) {\n                if (current_splitter) {\n                    $('.splitterMask').remove();\n                    current_splitter.settings.onDragEnd(e);\n                    current_splitter = null;\n                }\n            }).bind('mousemove.splitter touchmove.splitter', function(e) {\n                if (current_splitter !== null) {\n                    var limit = current_splitter.limit;\n                    var offset = current_splitter.offset();\n                    if (current_splitter.orientation == 'vertical') {\n                        var pageX = e.pageX;\n                        if(e.originalEvent && e.originalEvent.changedTouches){\n                          pageX = e.originalEvent.changedTouches[0].pageX;\n                        }\n                        var x = pageX - offset.left;\n                        if (x <= current_splitter.limit) {\n                            x = current_splitter.limit + 1;\n                        } else if (x >= current_splitter.width() - limit) {\n                            x = current_splitter.width() - limit - 1;\n                        }\n                        if (x > current_splitter.limit &&\n                            x < current_splitter.width()-limit) {\n                            current_splitter.position(x, true);\n                            current_splitter.find('.splitter_panel').\n                                trigger('splitter.resize');\n                            e.preventDefault();\n                        }\n                    } else if (current_splitter.orientation == 'horizontal') {\n                        var pageY = e.pageY;\n                        if(e.originalEvent && e.originalEvent.changedTouches){\n                          pageY = e.originalEvent.changedTouches[0].pageY;\n                        }\n                        var y = pageY-offset.top;\n                        if (y <= current_splitter.limit) {\n                            y = current_splitter.limit + 1;\n                        } else if (y >= current_splitter.height() - limit) {\n                            y = current_splitter.height() - limit - 1;\n                        }\n                        if (y > current_splitter.limit &&\n                            y < current_splitter.height()-limit) {\n                            current_splitter.position(y, true);\n                            current_splitter.find('.splitter_panel').\n                                trigger('splitter.resize');\n                            e.preventDefault();\n                        }\n                    }\n                    current_splitter.settings.onDrag(e);\n                }\n            });\n        }\n        splitters.push(self);\n        self.data('splitter', self);\n        return self;\n    };\n})(jQuery);\n\ndefine(\"splitter\", [\"jquery\"], function(){});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Deal with subwindow layout\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('pane',[ \"jquery\", \"splitter\" ],\n       function() {\n\n(function($) {\n  var pluginName = 'tile';\n\n  /** @lends $.fn.tile */\n  var methods = {\n    /**\n     * @param {Object} [options] currently ignored\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar dir   = elem.hasClass(\"horizontal\") ? \"vertical\" : \"horizontal\";\n\tvar pos   = elem.attr(\"data-split\");\n\tvar panes = elem.children();\n\n\tpos = pos||\"50%\";\n\n\tpanes.each(function() {\n\t  $(this).wrap('<div class=\"pane-wrapper\"></div>')\n\t});\n\telem.addClass(\"pane-container\");\n\telem.split({ orientation:dir,\n\t             position:pos,\n\t\t     limit:10,\n\t\t     onDragStart: function() { elem.tile('resize_start'); },\n\t\t     onDrag: function(ev) { panes.trigger(\"pane.resize\"); },\n\t\t     onDragEnd: function() { elem.tile('resize_save'); }\n\t           });\n\telem.tile('resize_save');\n\n\telem.on('fullscreen', function(ev, val) {\n\t  elem.tile('resize');\n\t});\n      });\n    },\n\n    resize_start: function() {\n      return this.each(function() {\n\tvar elem    = $(this);\n\tvar info    = paneInfo(elem);\n\n\telem.find(\".reactive-size\").trigger(\"reactive-resize-start\",\n\t\t\t\t\t    info.splitter.orientation);\n      });\n    },\n\n    /**\n     * Save the current split location as a percentage, so we can\n     * maintain this percentage at subsequent resize events.  This\n     * is normally called after establishing the tile and after a\n     * user-initiated resize.\n     */\n    resize_save: function() {\n      this.each(function() {\n\tvar elem    = $(this);\n\tvar info    = paneInfo(elem);\n\tvar length, pos;\n\n\tif ( info.splitter.orientation == 'horizontal' ) {\n\t  length = elem.height();\n\t  pos    = $(info.first).height();\n\t} else {\n\t  length = elem.width();\n\t  pos    = $(info.first).width();\n\t}\n\n\tvar percent = Math.round(((100 * pos) / length)) + \"%\";\n\n\tinfo.splitter.resizestart = percent;\n      });\n\n      this.find(\".reactive-size\").trigger(\"reactive-resize\");\n      return this;\n    },\n\n    /**\n     * Act on a resize by keeping the relative distribution and respect\n     * min/max style properties. This assumes that {@link resizestart}\n     * is called at the start of the windowresize.\n     * @example $(window).resize(function() { $(\".tile\").tile('resize'); });\n     */\n    resize: function() {\n      return this.each(function() {\n\tvar elem     = $(this);\n\tvar splitter = elem.split();\n\n\tif ( splitter.resizestart ) {\n\t  splitter.position(splitter.resizestart);\n\t  splitter.settings.onDrag(elem);\n\t}\n      });\n    },\n\n    /**\n     * Split a pane, adding a new pane above/below/left/right of the\n     * splitted pane.  `this` must be the pane content!\n     * @param {Element} pane is a `<div>` element providing the content\n     * for the new tile.\n     * @param {String} [rel] is one of `above`/`below`/`left`/`right`.\n     * Default is `\"below\"`\n     * @param {Number} [pos] is percentage of the height/width taken by\n     * the new pane\n     * @param {Number} [minheight] is the minimum height of the new tab\n     * in the case of a vertical split.\n     * @return {jQuery} parent `pane-container` that hold me and the note\n     * that was added next to me.\n     */\n    split: function(pane, rel, pos, minheight) {\n      rel = rel||\"below\";\n\n      var relto  = this;\n      var dir    = (rel == \"above\" || rel == \"below\") ? \"horizontal\" : \"vertical\";\n      var parent = relto.wrap('<div class=\"pane-container tile \"' +\n\t\t\t      flipdir(dir) +\n\t\t\t      '></div>')\n                        .parent();\n      var hidden;\n\n      if ( !parent.is(\":visible\") ) {\n\thidden = parent.closest(\".tab-pane\");\n\thidden.addClass(\"active\");\n      }\n\n      if ( pos == undefined )\n\tpos = 50;\n      else if ( pos < 10 )\n\tpos = 10;\n      else if ( pos > 90 )\n\tpos = 90;\n\n      if ( minheight && dir == \"horizontal\" ) {\n\tvar sumh = this.height();\n\tvar left = sumh*pos/100;\n\tif ( left < minheight && minheight < sumh*0.9 ) {\n\t  pos = (minheight*100/sumh);\n\t}\n      }\n\n      if ( rel == \"above\" || rel == \"left\" ) {\n\tparent.prepend(pane);\n      } else {\n\tpos = 100 - pos;\n\tparent.append(pane);\n      }\n\n      var panes = $(relto).add(pane);\n      panes.wrap('<div class=\"pane-wrapper\"></div>');\n\n      parent.split({ orientation:dir,\n\t\t     position:pos+\"%\",\n\t\t     limit:10,\n\t\t     onDragStart: function() { parent.tile('resize_start'); },\n\t\t     onDrag:      function() { panes.trigger(\"pane.resize\"); },\n\t\t     onDragEnd:   function() { parent.tile('resize_save'); }\n\t\t   });\n      parent.tile('resize_save');\n      panes.trigger(\"pane.resize\");\n      if ( hidden )\n\thidden.removeClass(\"active\");\n\n      return parent;\n    },\n\n    /**\n     * Remove a tile from the DOM, causing the remaining half to occupy\n     * the whole space.  Again, `this` is the content pane.\n     */\n     close: function() {\n      var pane = this;\n      var splitContainer = pane.closest(\".pane-container\");\n\n      splitContainer.split().destroy();\n      pane.parent().remove();\n      splitContainer.children().first().children().first().unwrap().unwrap();\n    }\n  }; // methods\n\n  function paneInfo(pane) {\n    var panes = pane.children();\n\n    return { splitter: pane.split(),\n             first:    $(panes[0]).children()[0],\n\t     second:   $(panes[2]).children()[0]\n           };\n  }\n\n  function flipdir(dir) {\n    return dir == \"horizontal\" ? \"vertical\" : \"horizontal\";\n  }\n\n  /**\n   * Generate a tiled subwindow layout from a hierarchy of `<div>`\n   * elements.  Below is the HTML that creates the SWISH 2.0 subwindow\n   * layout.  This plugin uses the class `horizontal` or `vertical` to\n   * decide on the direction of the split and the attribute `data-split`\n   * to locate the split location.\n   *\n   *     <div class=\"tile horizontal\" data-split=\"60%\">\n   *       <div class=\"prolog-editor\"></div>\n   *       <div class=\"tile vertical\" data-split=\"70%\">\n   *         <div class=\"prolog-runners\"></div>\n   *         <div class=\"prolog-query\"></div>\n   *       </div>\n   *     </div>\n   *\n   * @class tile\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @example $(\".tile\").tile();\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.tile = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","/*!\n * typeahead.js 0.11.1\n * https://github.com/twitter/typeahead.js\n * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT\n */\n\n(function(root, factory) {\n    if (typeof define === \"function\" && define.amd) {\n        define(\"bloodhound\", [ \"jquery\" ], function(a0) {\n            return root[\"Bloodhound\"] = factory(a0);\n        });\n    } else if (typeof exports === \"object\") {\n        module.exports = factory(require(\"jquery\"));\n    } else {\n        root[\"Bloodhound\"] = factory(jQuery);\n    }\n})(this, function($) {\n    var _ = function() {\n        \"use strict\";\n        return {\n            isMsie: function() {\n                return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\\d+(.\\d+)?)/i)[2] : false;\n            },\n            isBlankString: function(str) {\n                return !str || /^\\s*$/.test(str);\n            },\n            escapeRegExChars: function(str) {\n                return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n            },\n            isString: function(obj) {\n                return typeof obj === \"string\";\n            },\n            isNumber: function(obj) {\n                return typeof obj === \"number\";\n            },\n            isArray: $.isArray,\n            isFunction: $.isFunction,\n            isObject: $.isPlainObject,\n            isUndefined: function(obj) {\n                return typeof obj === \"undefined\";\n            },\n            isElement: function(obj) {\n                return !!(obj && obj.nodeType === 1);\n            },\n            isJQuery: function(obj) {\n                return obj instanceof $;\n            },\n            toStr: function toStr(s) {\n                return _.isUndefined(s) || s === null ? \"\" : s + \"\";\n            },\n            bind: $.proxy,\n            each: function(collection, cb) {\n                $.each(collection, reverseArgs);\n                function reverseArgs(index, value) {\n                    return cb(value, index);\n                }\n            },\n            map: $.map,\n            filter: $.grep,\n            every: function(obj, test) {\n                var result = true;\n                if (!obj) {\n                    return result;\n                }\n                $.each(obj, function(key, val) {\n                    if (!(result = test.call(null, val, key, obj))) {\n                        return false;\n                    }\n                });\n                return !!result;\n            },\n            some: function(obj, test) {\n                var result = false;\n                if (!obj) {\n                    return result;\n                }\n                $.each(obj, function(key, val) {\n                    if (result = test.call(null, val, key, obj)) {\n                        return false;\n                    }\n                });\n                return !!result;\n            },\n            mixin: $.extend,\n            identity: function(x) {\n                return x;\n            },\n            clone: function(obj) {\n                return $.extend(true, {}, obj);\n            },\n            getIdGenerator: function() {\n                var counter = 0;\n                return function() {\n                    return counter++;\n                };\n            },\n            templatify: function templatify(obj) {\n                return $.isFunction(obj) ? obj : template;\n                function template() {\n                    return String(obj);\n                }\n            },\n            defer: function(fn) {\n                setTimeout(fn, 0);\n            },\n            debounce: function(func, wait, immediate) {\n                var timeout, result;\n                return function() {\n                    var context = this, args = arguments, later, callNow;\n                    later = function() {\n                        timeout = null;\n                        if (!immediate) {\n                            result = func.apply(context, args);\n                        }\n                    };\n                    callNow = immediate && !timeout;\n                    clearTimeout(timeout);\n                    timeout = setTimeout(later, wait);\n                    if (callNow) {\n                        result = func.apply(context, args);\n                    }\n                    return result;\n                };\n            },\n            throttle: function(func, wait) {\n                var context, args, timeout, result, previous, later;\n                previous = 0;\n                later = function() {\n                    previous = new Date();\n                    timeout = null;\n                    result = func.apply(context, args);\n                };\n                return function() {\n                    var now = new Date(), remaining = wait - (now - previous);\n                    context = this;\n                    args = arguments;\n                    if (remaining <= 0) {\n                        clearTimeout(timeout);\n                        timeout = null;\n                        previous = now;\n                        result = func.apply(context, args);\n                    } else if (!timeout) {\n                        timeout = setTimeout(later, remaining);\n                    }\n                    return result;\n                };\n            },\n            stringify: function(val) {\n                return _.isString(val) ? val : JSON.stringify(val);\n            },\n            noop: function() {}\n        };\n    }();\n    var VERSION = \"0.11.1\";\n    var tokenizers = function() {\n        \"use strict\";\n        return {\n            nonword: nonword,\n            whitespace: whitespace,\n            obj: {\n                nonword: getObjTokenizer(nonword),\n                whitespace: getObjTokenizer(whitespace)\n            }\n        };\n        function whitespace(str) {\n            str = _.toStr(str);\n            return str ? str.split(/\\s+/) : [];\n        }\n        function nonword(str) {\n            str = _.toStr(str);\n            return str ? str.split(/\\W+/) : [];\n        }\n        function getObjTokenizer(tokenizer) {\n            return function setKey(keys) {\n                keys = _.isArray(keys) ? keys : [].slice.call(arguments, 0);\n                return function tokenize(o) {\n                    var tokens = [];\n                    _.each(keys, function(k) {\n                        tokens = tokens.concat(tokenizer(_.toStr(o[k])));\n                    });\n                    return tokens;\n                };\n            };\n        }\n    }();\n    var LruCache = function() {\n        \"use strict\";\n        function LruCache(maxSize) {\n            this.maxSize = _.isNumber(maxSize) ? maxSize : 100;\n            this.reset();\n            if (this.maxSize <= 0) {\n                this.set = this.get = $.noop;\n            }\n        }\n        _.mixin(LruCache.prototype, {\n            set: function set(key, val) {\n                var tailItem = this.list.tail, node;\n                if (this.size >= this.maxSize) {\n                    this.list.remove(tailItem);\n                    delete this.hash[tailItem.key];\n                    this.size--;\n                }\n                if (node = this.hash[key]) {\n                    node.val = val;\n                    this.list.moveToFront(node);\n                } else {\n                    node = new Node(key, val);\n                    this.list.add(node);\n                    this.hash[key] = node;\n                    this.size++;\n                }\n            },\n            get: function get(key) {\n                var node = this.hash[key];\n                if (node) {\n                    this.list.moveToFront(node);\n                    return node.val;\n                }\n            },\n            reset: function reset() {\n                this.size = 0;\n                this.hash = {};\n                this.list = new List();\n            }\n        });\n        function List() {\n            this.head = this.tail = null;\n        }\n        _.mixin(List.prototype, {\n            add: function add(node) {\n                if (this.head) {\n                    node.next = this.head;\n                    this.head.prev = node;\n                }\n                this.head = node;\n                this.tail = this.tail || node;\n            },\n            remove: function remove(node) {\n                node.prev ? node.prev.next = node.next : this.head = node.next;\n                node.next ? node.next.prev = node.prev : this.tail = node.prev;\n            },\n            moveToFront: function(node) {\n                this.remove(node);\n                this.add(node);\n            }\n        });\n        function Node(key, val) {\n            this.key = key;\n            this.val = val;\n            this.prev = this.next = null;\n        }\n        return LruCache;\n    }();\n    var PersistentStorage = function() {\n        \"use strict\";\n        var LOCAL_STORAGE;\n        try {\n            LOCAL_STORAGE = window.localStorage;\n            LOCAL_STORAGE.setItem(\"~~~\", \"!\");\n            LOCAL_STORAGE.removeItem(\"~~~\");\n        } catch (err) {\n            LOCAL_STORAGE = null;\n        }\n        function PersistentStorage(namespace, override) {\n            this.prefix = [ \"__\", namespace, \"__\" ].join(\"\");\n            this.ttlKey = \"__ttl__\";\n            this.keyMatcher = new RegExp(\"^\" + _.escapeRegExChars(this.prefix));\n            this.ls = override || LOCAL_STORAGE;\n            !this.ls && this._noop();\n        }\n        _.mixin(PersistentStorage.prototype, {\n            _prefix: function(key) {\n                return this.prefix + key;\n            },\n            _ttlKey: function(key) {\n                return this._prefix(key) + this.ttlKey;\n            },\n            _noop: function() {\n                this.get = this.set = this.remove = this.clear = this.isExpired = _.noop;\n            },\n            _safeSet: function(key, val) {\n                try {\n                    this.ls.setItem(key, val);\n                } catch (err) {\n                    if (err.name === \"QuotaExceededError\") {\n                        this.clear();\n                        this._noop();\n                    }\n                }\n            },\n            get: function(key) {\n                if (this.isExpired(key)) {\n                    this.remove(key);\n                }\n                return decode(this.ls.getItem(this._prefix(key)));\n            },\n            set: function(key, val, ttl) {\n                if (_.isNumber(ttl)) {\n                    this._safeSet(this._ttlKey(key), encode(now() + ttl));\n                } else {\n                    this.ls.removeItem(this._ttlKey(key));\n                }\n                return this._safeSet(this._prefix(key), encode(val));\n            },\n            remove: function(key) {\n                this.ls.removeItem(this._ttlKey(key));\n                this.ls.removeItem(this._prefix(key));\n                return this;\n            },\n            clear: function() {\n                var i, keys = gatherMatchingKeys(this.keyMatcher);\n                for (i = keys.length; i--; ) {\n                    this.remove(keys[i]);\n                }\n                return this;\n            },\n            isExpired: function(key) {\n                var ttl = decode(this.ls.getItem(this._ttlKey(key)));\n                return _.isNumber(ttl) && now() > ttl ? true : false;\n            }\n        });\n        return PersistentStorage;\n        function now() {\n            return new Date().getTime();\n        }\n        function encode(val) {\n            return JSON.stringify(_.isUndefined(val) ? null : val);\n        }\n        function decode(val) {\n            return $.parseJSON(val);\n        }\n        function gatherMatchingKeys(keyMatcher) {\n            var i, key, keys = [], len = LOCAL_STORAGE.length;\n            for (i = 0; i < len; i++) {\n                if ((key = LOCAL_STORAGE.key(i)).match(keyMatcher)) {\n                    keys.push(key.replace(keyMatcher, \"\"));\n                }\n            }\n            return keys;\n        }\n    }();\n    var Transport = function() {\n        \"use strict\";\n        var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests = 6, sharedCache = new LruCache(10);\n        function Transport(o) {\n            o = o || {};\n            this.cancelled = false;\n            this.lastReq = null;\n            this._send = o.transport;\n            this._get = o.limiter ? o.limiter(this._get) : this._get;\n            this._cache = o.cache === false ? new LruCache(0) : sharedCache;\n        }\n        Transport.setMaxPendingRequests = function setMaxPendingRequests(num) {\n            maxPendingRequests = num;\n        };\n        Transport.resetCache = function resetCache() {\n            sharedCache.reset();\n        };\n        _.mixin(Transport.prototype, {\n            _fingerprint: function fingerprint(o) {\n                o = o || {};\n                return o.url + o.type + $.param(o.data || {});\n            },\n            _get: function(o, cb) {\n                var that = this, fingerprint, jqXhr;\n                fingerprint = this._fingerprint(o);\n                if (this.cancelled || fingerprint !== this.lastReq) {\n                    return;\n                }\n                if (jqXhr = pendingRequests[fingerprint]) {\n                    jqXhr.done(done).fail(fail);\n                } else if (pendingRequestsCount < maxPendingRequests) {\n                    pendingRequestsCount++;\n                    pendingRequests[fingerprint] = this._send(o).done(done).fail(fail).always(always);\n                } else {\n                    this.onDeckRequestArgs = [].slice.call(arguments, 0);\n                }\n                function done(resp) {\n                    cb(null, resp);\n                    that._cache.set(fingerprint, resp);\n                }\n                function fail() {\n                    cb(true);\n                }\n                function always() {\n                    pendingRequestsCount--;\n                    delete pendingRequests[fingerprint];\n                    if (that.onDeckRequestArgs) {\n                        that._get.apply(that, that.onDeckRequestArgs);\n                        that.onDeckRequestArgs = null;\n                    }\n                }\n            },\n            get: function(o, cb) {\n                var resp, fingerprint;\n                cb = cb || $.noop;\n                o = _.isString(o) ? {\n                    url: o\n                } : o || {};\n                fingerprint = this._fingerprint(o);\n                this.cancelled = false;\n                this.lastReq = fingerprint;\n                if (resp = this._cache.get(fingerprint)) {\n                    cb(null, resp);\n                } else {\n                    this._get(o, cb);\n                }\n            },\n            cancel: function() {\n                this.cancelled = true;\n            }\n        });\n        return Transport;\n    }();\n    var SearchIndex = window.SearchIndex = function() {\n        \"use strict\";\n        var CHILDREN = \"c\", IDS = \"i\";\n        function SearchIndex(o) {\n            o = o || {};\n            if (!o.datumTokenizer || !o.queryTokenizer) {\n                $.error(\"datumTokenizer and queryTokenizer are both required\");\n            }\n            this.identify = o.identify || _.stringify;\n            this.datumTokenizer = o.datumTokenizer;\n            this.queryTokenizer = o.queryTokenizer;\n            this.reset();\n        }\n        _.mixin(SearchIndex.prototype, {\n            bootstrap: function bootstrap(o) {\n                this.datums = o.datums;\n                this.trie = o.trie;\n            },\n            add: function(data) {\n                var that = this;\n                data = _.isArray(data) ? data : [ data ];\n                _.each(data, function(datum) {\n                    var id, tokens;\n                    that.datums[id = that.identify(datum)] = datum;\n                    tokens = normalizeTokens(that.datumTokenizer(datum));\n                    _.each(tokens, function(token) {\n                        var node, chars, ch;\n                        node = that.trie;\n                        chars = token.split(\"\");\n                        while (ch = chars.shift()) {\n                            node = node[CHILDREN][ch] || (node[CHILDREN][ch] = newNode());\n                            node[IDS].push(id);\n                        }\n                    });\n                });\n            },\n            get: function get(ids) {\n                var that = this;\n                return _.map(ids, function(id) {\n                    return that.datums[id];\n                });\n            },\n            search: function search(query) {\n                var that = this, tokens, matches;\n                tokens = normalizeTokens(this.queryTokenizer(query));\n                _.each(tokens, function(token) {\n                    var node, chars, ch, ids;\n                    if (matches && matches.length === 0) {\n                        return false;\n                    }\n                    node = that.trie;\n                    chars = token.split(\"\");\n                    while (node && (ch = chars.shift())) {\n                        node = node[CHILDREN][ch];\n                    }\n                    if (node && chars.length === 0) {\n                        ids = node[IDS].slice(0);\n                        matches = matches ? getIntersection(matches, ids) : ids;\n                    } else {\n                        matches = [];\n                        return false;\n                    }\n                });\n                return matches ? _.map(unique(matches), function(id) {\n                    return that.datums[id];\n                }) : [];\n            },\n            all: function all() {\n                var values = [];\n                for (var key in this.datums) {\n                    values.push(this.datums[key]);\n                }\n                return values;\n            },\n            reset: function reset() {\n                this.datums = {};\n                this.trie = newNode();\n            },\n            serialize: function serialize() {\n                return {\n                    datums: this.datums,\n                    trie: this.trie\n                };\n            }\n        });\n        return SearchIndex;\n        function normalizeTokens(tokens) {\n            tokens = _.filter(tokens, function(token) {\n                return !!token;\n            });\n            tokens = _.map(tokens, function(token) {\n                return token.toLowerCase();\n            });\n            return tokens;\n        }\n        function newNode() {\n            var node = {};\n            node[IDS] = [];\n            node[CHILDREN] = {};\n            return node;\n        }\n        function unique(array) {\n            var seen = {}, uniques = [];\n            for (var i = 0, len = array.length; i < len; i++) {\n                if (!seen[array[i]]) {\n                    seen[array[i]] = true;\n                    uniques.push(array[i]);\n                }\n            }\n            return uniques;\n        }\n        function getIntersection(arrayA, arrayB) {\n            var ai = 0, bi = 0, intersection = [];\n            arrayA = arrayA.sort();\n            arrayB = arrayB.sort();\n            var lenArrayA = arrayA.length, lenArrayB = arrayB.length;\n            while (ai < lenArrayA && bi < lenArrayB) {\n                if (arrayA[ai] < arrayB[bi]) {\n                    ai++;\n                } else if (arrayA[ai] > arrayB[bi]) {\n                    bi++;\n                } else {\n                    intersection.push(arrayA[ai]);\n                    ai++;\n                    bi++;\n                }\n            }\n            return intersection;\n        }\n    }();\n    var Prefetch = function() {\n        \"use strict\";\n        var keys;\n        keys = {\n            data: \"data\",\n            protocol: \"protocol\",\n            thumbprint: \"thumbprint\"\n        };\n        function Prefetch(o) {\n            this.url = o.url;\n            this.ttl = o.ttl;\n            this.cache = o.cache;\n            this.prepare = o.prepare;\n            this.transform = o.transform;\n            this.transport = o.transport;\n            this.thumbprint = o.thumbprint;\n            this.storage = new PersistentStorage(o.cacheKey);\n        }\n        _.mixin(Prefetch.prototype, {\n            _settings: function settings() {\n                return {\n                    url: this.url,\n                    type: \"GET\",\n                    dataType: \"json\"\n                };\n            },\n            store: function store(data) {\n                if (!this.cache) {\n                    return;\n                }\n                this.storage.set(keys.data, data, this.ttl);\n                this.storage.set(keys.protocol, location.protocol, this.ttl);\n                this.storage.set(keys.thumbprint, this.thumbprint, this.ttl);\n            },\n            fromCache: function fromCache() {\n                var stored = {}, isExpired;\n                if (!this.cache) {\n                    return null;\n                }\n                stored.data = this.storage.get(keys.data);\n                stored.protocol = this.storage.get(keys.protocol);\n                stored.thumbprint = this.storage.get(keys.thumbprint);\n                isExpired = stored.thumbprint !== this.thumbprint || stored.protocol !== location.protocol;\n                return stored.data && !isExpired ? stored.data : null;\n            },\n            fromNetwork: function(cb) {\n                var that = this, settings;\n                if (!cb) {\n                    return;\n                }\n                settings = this.prepare(this._settings());\n                this.transport(settings).fail(onError).done(onResponse);\n                function onError() {\n                    cb(true);\n                }\n                function onResponse(resp) {\n                    cb(null, that.transform(resp));\n                }\n            },\n            clear: function clear() {\n                this.storage.clear();\n                return this;\n            }\n        });\n        return Prefetch;\n    }();\n    var Remote = function() {\n        \"use strict\";\n        function Remote(o) {\n            this.url = o.url;\n            this.prepare = o.prepare;\n            this.transform = o.transform;\n            this.transport = new Transport({\n                cache: o.cache,\n                limiter: o.limiter,\n                transport: o.transport\n            });\n        }\n        _.mixin(Remote.prototype, {\n            _settings: function settings() {\n                return {\n                    url: this.url,\n                    type: \"GET\",\n                    dataType: \"json\"\n                };\n            },\n            get: function get(query, cb) {\n                var that = this, settings;\n                if (!cb) {\n                    return;\n                }\n                query = query || \"\";\n                settings = this.prepare(query, this._settings());\n                return this.transport.get(settings, onResponse);\n                function onResponse(err, resp) {\n                    err ? cb([]) : cb(that.transform(resp));\n                }\n            },\n            cancelLastRequest: function cancelLastRequest() {\n                this.transport.cancel();\n            }\n        });\n        return Remote;\n    }();\n    var oParser = function() {\n        \"use strict\";\n        return function parse(o) {\n            var defaults, sorter;\n            defaults = {\n                initialize: true,\n                identify: _.stringify,\n                datumTokenizer: null,\n                queryTokenizer: null,\n                sufficient: 5,\n                sorter: null,\n                local: [],\n                prefetch: null,\n                remote: null\n            };\n            o = _.mixin(defaults, o || {});\n            !o.datumTokenizer && $.error(\"datumTokenizer is required\");\n            !o.queryTokenizer && $.error(\"queryTokenizer is required\");\n            sorter = o.sorter;\n            o.sorter = sorter ? function(x) {\n                return x.sort(sorter);\n            } : _.identity;\n            o.local = _.isFunction(o.local) ? o.local() : o.local;\n            o.prefetch = parsePrefetch(o.prefetch);\n            o.remote = parseRemote(o.remote);\n            return o;\n        };\n        function parsePrefetch(o) {\n            var defaults;\n            if (!o) {\n                return null;\n            }\n            defaults = {\n                url: null,\n                ttl: 24 * 60 * 60 * 1e3,\n                cache: true,\n                cacheKey: null,\n                thumbprint: \"\",\n                prepare: _.identity,\n                transform: _.identity,\n                transport: null\n            };\n            o = _.isString(o) ? {\n                url: o\n            } : o;\n            o = _.mixin(defaults, o);\n            !o.url && $.error(\"prefetch requires url to be set\");\n            o.transform = o.filter || o.transform;\n            o.cacheKey = o.cacheKey || o.url;\n            o.thumbprint = VERSION + o.thumbprint;\n            o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;\n            return o;\n        }\n        function parseRemote(o) {\n            var defaults;\n            if (!o) {\n                return;\n            }\n            defaults = {\n                url: null,\n                cache: true,\n                prepare: null,\n                replace: null,\n                wildcard: null,\n                limiter: null,\n                rateLimitBy: \"debounce\",\n                rateLimitWait: 300,\n                transform: _.identity,\n                transport: null\n            };\n            o = _.isString(o) ? {\n                url: o\n            } : o;\n            o = _.mixin(defaults, o);\n            !o.url && $.error(\"remote requires url to be set\");\n            o.transform = o.filter || o.transform;\n            o.prepare = toRemotePrepare(o);\n            o.limiter = toLimiter(o);\n            o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;\n            delete o.replace;\n            delete o.wildcard;\n            delete o.rateLimitBy;\n            delete o.rateLimitWait;\n            return o;\n        }\n        function toRemotePrepare(o) {\n            var prepare, replace, wildcard;\n            prepare = o.prepare;\n            replace = o.replace;\n            wildcard = o.wildcard;\n            if (prepare) {\n                return prepare;\n            }\n            if (replace) {\n                prepare = prepareByReplace;\n            } else if (o.wildcard) {\n                prepare = prepareByWildcard;\n            } else {\n                prepare = idenityPrepare;\n            }\n            return prepare;\n            function prepareByReplace(query, settings) {\n                settings.url = replace(settings.url, query);\n                return settings;\n            }\n            function prepareByWildcard(query, settings) {\n                settings.url = settings.url.replace(wildcard, encodeURIComponent(query));\n                return settings;\n            }\n            function idenityPrepare(query, settings) {\n                return settings;\n            }\n        }\n        function toLimiter(o) {\n            var limiter, method, wait;\n            limiter = o.limiter;\n            method = o.rateLimitBy;\n            wait = o.rateLimitWait;\n            if (!limiter) {\n                limiter = /^throttle$/i.test(method) ? throttle(wait) : debounce(wait);\n            }\n            return limiter;\n            function debounce(wait) {\n                return function debounce(fn) {\n                    return _.debounce(fn, wait);\n                };\n            }\n            function throttle(wait) {\n                return function throttle(fn) {\n                    return _.throttle(fn, wait);\n                };\n            }\n        }\n        function callbackToDeferred(fn) {\n            return function wrapper(o) {\n                var deferred = $.Deferred();\n                fn(o, onSuccess, onError);\n                return deferred;\n                function onSuccess(resp) {\n                    _.defer(function() {\n                        deferred.resolve(resp);\n                    });\n                }\n                function onError(err) {\n                    _.defer(function() {\n                        deferred.reject(err);\n                    });\n                }\n            };\n        }\n    }();\n    var Bloodhound = function() {\n        \"use strict\";\n        var old;\n        old = window && window.Bloodhound;\n        function Bloodhound(o) {\n            o = oParser(o);\n            this.sorter = o.sorter;\n            this.identify = o.identify;\n            this.sufficient = o.sufficient;\n            this.local = o.local;\n            this.remote = o.remote ? new Remote(o.remote) : null;\n            this.prefetch = o.prefetch ? new Prefetch(o.prefetch) : null;\n            this.index = new SearchIndex({\n                identify: this.identify,\n                datumTokenizer: o.datumTokenizer,\n                queryTokenizer: o.queryTokenizer\n            });\n            o.initialize !== false && this.initialize();\n        }\n        Bloodhound.noConflict = function noConflict() {\n            window && (window.Bloodhound = old);\n            return Bloodhound;\n        };\n        Bloodhound.tokenizers = tokenizers;\n        _.mixin(Bloodhound.prototype, {\n            __ttAdapter: function ttAdapter() {\n                var that = this;\n                return this.remote ? withAsync : withoutAsync;\n                function withAsync(query, sync, async) {\n                    return that.search(query, sync, async);\n                }\n                function withoutAsync(query, sync) {\n                    return that.search(query, sync);\n                }\n            },\n            _loadPrefetch: function loadPrefetch() {\n                var that = this, deferred, serialized;\n                deferred = $.Deferred();\n                if (!this.prefetch) {\n                    deferred.resolve();\n                } else if (serialized = this.prefetch.fromCache()) {\n                    this.index.bootstrap(serialized);\n                    deferred.resolve();\n                } else {\n                    this.prefetch.fromNetwork(done);\n                }\n                return deferred.promise();\n                function done(err, data) {\n                    if (err) {\n                        return deferred.reject();\n                    }\n                    that.add(data);\n                    that.prefetch.store(that.index.serialize());\n                    deferred.resolve();\n                }\n            },\n            _initialize: function initialize() {\n                var that = this, deferred;\n                this.clear();\n                (this.initPromise = this._loadPrefetch()).done(addLocalToIndex);\n                return this.initPromise;\n                function addLocalToIndex() {\n                    that.add(that.local);\n                }\n            },\n            initialize: function initialize(force) {\n                return !this.initPromise || force ? this._initialize() : this.initPromise;\n            },\n            add: function add(data) {\n                this.index.add(data);\n                return this;\n            },\n            get: function get(ids) {\n                ids = _.isArray(ids) ? ids : [].slice.call(arguments);\n                return this.index.get(ids);\n            },\n            search: function search(query, sync, async) {\n                var that = this, local;\n                local = this.sorter(this.index.search(query));\n                sync(this.remote ? local.slice() : local);\n                if (this.remote && local.length < this.sufficient) {\n                    this.remote.get(query, processRemote);\n                } else if (this.remote) {\n                    this.remote.cancelLastRequest();\n                }\n                return this;\n                function processRemote(remote) {\n                    var nonDuplicates = [];\n                    _.each(remote, function(r) {\n                        !_.some(local, function(l) {\n                            return that.identify(r) === that.identify(l);\n                        }) && nonDuplicates.push(r);\n                    });\n                    async && async(nonDuplicates);\n                }\n            },\n            all: function all() {\n                return this.index.all();\n            },\n            clear: function clear() {\n                this.index.reset();\n                return this;\n            },\n            clearPrefetchCache: function clearPrefetchCache() {\n                this.prefetch && this.prefetch.clear();\n                return this;\n            },\n            clearRemoteCache: function clearRemoteCache() {\n                Transport.resetCache();\n                return this;\n            },\n            ttAdapter: function ttAdapter() {\n                return this.__ttAdapter();\n            }\n        });\n        return Bloodhound;\n    }();\n    return Bloodhound;\n});\n","/*!\n * typeahead.js 0.11.1\n * https://github.com/twitter/typeahead.js\n * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT\n */\n\n(function(root, factory) {\n    if (typeof define === \"function\" && define.amd) {\n        define(\"typeahead.js\", [ \"jquery\" ], function(a0) {\n            return factory(a0);\n        });\n    } else if (typeof exports === \"object\") {\n        module.exports = factory(require(\"jquery\"));\n    } else {\n        factory(jQuery);\n    }\n})(this, function($) {\n    var _ = function() {\n        \"use strict\";\n        return {\n            isMsie: function() {\n                return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\\d+(.\\d+)?)/i)[2] : false;\n            },\n            isBlankString: function(str) {\n                return !str || /^\\s*$/.test(str);\n            },\n            escapeRegExChars: function(str) {\n                return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n            },\n            isString: function(obj) {\n                return typeof obj === \"string\";\n            },\n            isNumber: function(obj) {\n                return typeof obj === \"number\";\n            },\n            isArray: $.isArray,\n            isFunction: $.isFunction,\n            isObject: $.isPlainObject,\n            isUndefined: function(obj) {\n                return typeof obj === \"undefined\";\n            },\n            isElement: function(obj) {\n                return !!(obj && obj.nodeType === 1);\n            },\n            isJQuery: function(obj) {\n                return obj instanceof $;\n            },\n            toStr: function toStr(s) {\n                return _.isUndefined(s) || s === null ? \"\" : s + \"\";\n            },\n            bind: $.proxy,\n            each: function(collection, cb) {\n                $.each(collection, reverseArgs);\n                function reverseArgs(index, value) {\n                    return cb(value, index);\n                }\n            },\n            map: $.map,\n            filter: $.grep,\n            every: function(obj, test) {\n                var result = true;\n                if (!obj) {\n                    return result;\n                }\n                $.each(obj, function(key, val) {\n                    if (!(result = test.call(null, val, key, obj))) {\n                        return false;\n                    }\n                });\n                return !!result;\n            },\n            some: function(obj, test) {\n                var result = false;\n                if (!obj) {\n                    return result;\n                }\n                $.each(obj, function(key, val) {\n                    if (result = test.call(null, val, key, obj)) {\n                        return false;\n                    }\n                });\n                return !!result;\n            },\n            mixin: $.extend,\n            identity: function(x) {\n                return x;\n            },\n            clone: function(obj) {\n                return $.extend(true, {}, obj);\n            },\n            getIdGenerator: function() {\n                var counter = 0;\n                return function() {\n                    return counter++;\n                };\n            },\n            templatify: function templatify(obj) {\n                return $.isFunction(obj) ? obj : template;\n                function template() {\n                    return String(obj);\n                }\n            },\n            defer: function(fn) {\n                setTimeout(fn, 0);\n            },\n            debounce: function(func, wait, immediate) {\n                var timeout, result;\n                return function() {\n                    var context = this, args = arguments, later, callNow;\n                    later = function() {\n                        timeout = null;\n                        if (!immediate) {\n                            result = func.apply(context, args);\n                        }\n                    };\n                    callNow = immediate && !timeout;\n                    clearTimeout(timeout);\n                    timeout = setTimeout(later, wait);\n                    if (callNow) {\n                        result = func.apply(context, args);\n                    }\n                    return result;\n                };\n            },\n            throttle: function(func, wait) {\n                var context, args, timeout, result, previous, later;\n                previous = 0;\n                later = function() {\n                    previous = new Date();\n                    timeout = null;\n                    result = func.apply(context, args);\n                };\n                return function() {\n                    var now = new Date(), remaining = wait - (now - previous);\n                    context = this;\n                    args = arguments;\n                    if (remaining <= 0) {\n                        clearTimeout(timeout);\n                        timeout = null;\n                        previous = now;\n                        result = func.apply(context, args);\n                    } else if (!timeout) {\n                        timeout = setTimeout(later, remaining);\n                    }\n                    return result;\n                };\n            },\n            stringify: function(val) {\n                return _.isString(val) ? val : JSON.stringify(val);\n            },\n            noop: function() {}\n        };\n    }();\n    var WWW = function() {\n        \"use strict\";\n        var defaultClassNames = {\n            wrapper: \"twitter-typeahead\",\n            input: \"tt-input\",\n            hint: \"tt-hint\",\n            menu: \"tt-menu\",\n            dataset: \"tt-dataset\",\n            suggestion: \"tt-suggestion\",\n            selectable: \"tt-selectable\",\n            empty: \"tt-empty\",\n            open: \"tt-open\",\n            cursor: \"tt-cursor\",\n            highlight: \"tt-highlight\"\n        };\n        return build;\n        function build(o) {\n            var www, classes;\n            classes = _.mixin({}, defaultClassNames, o);\n            www = {\n                css: buildCss(),\n                classes: classes,\n                html: buildHtml(classes),\n                selectors: buildSelectors(classes)\n            };\n            return {\n                css: www.css,\n                html: www.html,\n                classes: www.classes,\n                selectors: www.selectors,\n                mixin: function(o) {\n                    _.mixin(o, www);\n                }\n            };\n        }\n        function buildHtml(c) {\n            return {\n                wrapper: '<span class=\"' + c.wrapper + '\"></span>',\n                menu: '<div class=\"' + c.menu + '\"></div>'\n            };\n        }\n        function buildSelectors(classes) {\n            var selectors = {};\n            _.each(classes, function(v, k) {\n                selectors[k] = \".\" + v;\n            });\n            return selectors;\n        }\n        function buildCss() {\n            var css = {\n                wrapper: {\n                    position: \"relative\",\n                    display: \"inline-block\"\n                },\n                hint: {\n                    position: \"absolute\",\n                    top: \"0\",\n                    left: \"0\",\n                    borderColor: \"transparent\",\n                    boxShadow: \"none\",\n                    opacity: \"1\"\n                },\n                input: {\n                    position: \"relative\",\n                    verticalAlign: \"top\",\n                    backgroundColor: \"transparent\"\n                },\n                inputWithNoHint: {\n                    position: \"relative\",\n                    verticalAlign: \"top\"\n                },\n                menu: {\n                    position: \"absolute\",\n                    top: \"100%\",\n                    left: \"0\",\n                    zIndex: \"100\",\n                    display: \"none\"\n                },\n                ltr: {\n                    left: \"0\",\n                    right: \"auto\"\n                },\n                rtl: {\n                    left: \"auto\",\n                    right: \" 0\"\n                }\n            };\n            if (_.isMsie()) {\n                _.mixin(css.input, {\n                    backgroundImage: \"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)\"\n                });\n            }\n            return css;\n        }\n    }();\n    var EventBus = function() {\n        \"use strict\";\n        var namespace, deprecationMap;\n        namespace = \"typeahead:\";\n        deprecationMap = {\n            render: \"rendered\",\n            cursorchange: \"cursorchanged\",\n            select: \"selected\",\n            autocomplete: \"autocompleted\"\n        };\n        function EventBus(o) {\n            if (!o || !o.el) {\n                $.error(\"EventBus initialized without el\");\n            }\n            this.$el = $(o.el);\n        }\n        _.mixin(EventBus.prototype, {\n            _trigger: function(type, args) {\n                var $e;\n                $e = $.Event(namespace + type);\n                (args = args || []).unshift($e);\n                this.$el.trigger.apply(this.$el, args);\n                return $e;\n            },\n            before: function(type) {\n                var args, $e;\n                args = [].slice.call(arguments, 1);\n                $e = this._trigger(\"before\" + type, args);\n                return $e.isDefaultPrevented();\n            },\n            trigger: function(type) {\n                var deprecatedType;\n                this._trigger(type, [].slice.call(arguments, 1));\n                if (deprecatedType = deprecationMap[type]) {\n                    this._trigger(deprecatedType, [].slice.call(arguments, 1));\n                }\n            }\n        });\n        return EventBus;\n    }();\n    var EventEmitter = function() {\n        \"use strict\";\n        var splitter = /\\s+/, nextTick = getNextTick();\n        return {\n            onSync: onSync,\n            onAsync: onAsync,\n            off: off,\n            trigger: trigger\n        };\n        function on(method, types, cb, context) {\n            var type;\n            if (!cb) {\n                return this;\n            }\n            types = types.split(splitter);\n            cb = context ? bindContext(cb, context) : cb;\n            this._callbacks = this._callbacks || {};\n            while (type = types.shift()) {\n                this._callbacks[type] = this._callbacks[type] || {\n                    sync: [],\n                    async: []\n                };\n                this._callbacks[type][method].push(cb);\n            }\n            return this;\n        }\n        function onAsync(types, cb, context) {\n            return on.call(this, \"async\", types, cb, context);\n        }\n        function onSync(types, cb, context) {\n            return on.call(this, \"sync\", types, cb, context);\n        }\n        function off(types) {\n            var type;\n            if (!this._callbacks) {\n                return this;\n            }\n            types = types.split(splitter);\n            while (type = types.shift()) {\n                delete this._callbacks[type];\n            }\n            return this;\n        }\n        function trigger(types) {\n            var type, callbacks, args, syncFlush, asyncFlush;\n            if (!this._callbacks) {\n                return this;\n            }\n            types = types.split(splitter);\n            args = [].slice.call(arguments, 1);\n            while ((type = types.shift()) && (callbacks = this._callbacks[type])) {\n                syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));\n                asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));\n                syncFlush() && nextTick(asyncFlush);\n            }\n            return this;\n        }\n        function getFlush(callbacks, context, args) {\n            return flush;\n            function flush() {\n                var cancelled;\n                for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {\n                    cancelled = callbacks[i].apply(context, args) === false;\n                }\n                return !cancelled;\n            }\n        }\n        function getNextTick() {\n            var nextTickFn;\n            if (window.setImmediate) {\n                nextTickFn = function nextTickSetImmediate(fn) {\n                    setImmediate(function() {\n                        fn();\n                    });\n                };\n            } else {\n                nextTickFn = function nextTickSetTimeout(fn) {\n                    setTimeout(function() {\n                        fn();\n                    }, 0);\n                };\n            }\n            return nextTickFn;\n        }\n        function bindContext(fn, context) {\n            return fn.bind ? fn.bind(context) : function() {\n                fn.apply(context, [].slice.call(arguments, 0));\n            };\n        }\n    }();\n    var highlight = function(doc) {\n        \"use strict\";\n        var defaults = {\n            node: null,\n            pattern: null,\n            tagName: \"strong\",\n            className: null,\n            wordsOnly: false,\n            caseSensitive: false\n        };\n        return function hightlight(o) {\n            var regex;\n            o = _.mixin({}, defaults, o);\n            if (!o.node || !o.pattern) {\n                return;\n            }\n            o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ];\n            regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly);\n            traverse(o.node, hightlightTextNode);\n            function hightlightTextNode(textNode) {\n                var match, patternNode, wrapperNode;\n                if (match = regex.exec(textNode.data)) {\n                    wrapperNode = doc.createElement(o.tagName);\n                    o.className && (wrapperNode.className = o.className);\n                    patternNode = textNode.splitText(match.index);\n                    patternNode.splitText(match[0].length);\n                    wrapperNode.appendChild(patternNode.cloneNode(true));\n                    textNode.parentNode.replaceChild(wrapperNode, patternNode);\n                }\n                return !!match;\n            }\n            function traverse(el, hightlightTextNode) {\n                var childNode, TEXT_NODE_TYPE = 3;\n                for (var i = 0; i < el.childNodes.length; i++) {\n                    childNode = el.childNodes[i];\n                    if (childNode.nodeType === TEXT_NODE_TYPE) {\n                        i += hightlightTextNode(childNode) ? 1 : 0;\n                    } else {\n                        traverse(childNode, hightlightTextNode);\n                    }\n                }\n            }\n        };\n        function getRegex(patterns, caseSensitive, wordsOnly) {\n            var escapedPatterns = [], regexStr;\n            for (var i = 0, len = patterns.length; i < len; i++) {\n                escapedPatterns.push(_.escapeRegExChars(patterns[i]));\n            }\n            regexStr = wordsOnly ? \"\\\\b(\" + escapedPatterns.join(\"|\") + \")\\\\b\" : \"(\" + escapedPatterns.join(\"|\") + \")\";\n            return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, \"i\");\n        }\n    }(window.document);\n    var Input = function() {\n        \"use strict\";\n        var specialKeyCodeMap;\n        specialKeyCodeMap = {\n            9: \"tab\",\n            27: \"esc\",\n            37: \"left\",\n            39: \"right\",\n            13: \"enter\",\n            38: \"up\",\n            40: \"down\"\n        };\n        function Input(o, www) {\n            o = o || {};\n            if (!o.input) {\n                $.error(\"input is missing\");\n            }\n            www.mixin(this);\n            this.$hint = $(o.hint);\n            this.$input = $(o.input);\n            this.query = this.$input.val();\n            this.queryWhenFocused = this.hasFocus() ? this.query : null;\n            this.$overflowHelper = buildOverflowHelper(this.$input);\n            this._checkLanguageDirection();\n            if (this.$hint.length === 0) {\n                this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;\n            }\n        }\n        Input.normalizeQuery = function(str) {\n            return _.toStr(str).replace(/^\\s*/g, \"\").replace(/\\s{2,}/g, \" \");\n        };\n        _.mixin(Input.prototype, EventEmitter, {\n            _onBlur: function onBlur() {\n                this.resetInputValue();\n                this.trigger(\"blurred\");\n            },\n            _onFocus: function onFocus() {\n                this.queryWhenFocused = this.query;\n                this.trigger(\"focused\");\n            },\n            _onKeydown: function onKeydown($e) {\n                var keyName = specialKeyCodeMap[$e.which || $e.keyCode];\n                this._managePreventDefault(keyName, $e);\n                if (keyName && this._shouldTrigger(keyName, $e)) {\n                    this.trigger(keyName + \"Keyed\", $e);\n                }\n            },\n            _onInput: function onInput() {\n                this._setQuery(this.getInputValue());\n                this.clearHintIfInvalid();\n                this._checkLanguageDirection();\n            },\n            _managePreventDefault: function managePreventDefault(keyName, $e) {\n                var preventDefault;\n                switch (keyName) {\n                  case \"up\":\n                  case \"down\":\n                    preventDefault = !withModifier($e);\n                    break;\n\n                  default:\n                    preventDefault = false;\n                }\n                preventDefault && $e.preventDefault();\n            },\n            _shouldTrigger: function shouldTrigger(keyName, $e) {\n                var trigger;\n                switch (keyName) {\n                  case \"tab\":\n                    trigger = !withModifier($e);\n                    break;\n\n                  default:\n                    trigger = true;\n                }\n                return trigger;\n            },\n            _checkLanguageDirection: function checkLanguageDirection() {\n                var dir = (this.$input.css(\"direction\") || \"ltr\").toLowerCase();\n                if (this.dir !== dir) {\n                    this.dir = dir;\n                    this.$hint.attr(\"dir\", dir);\n                    this.trigger(\"langDirChanged\", dir);\n                }\n            },\n            _setQuery: function setQuery(val, silent) {\n                var areEquivalent, hasDifferentWhitespace;\n                areEquivalent = areQueriesEquivalent(val, this.query);\n                hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;\n                this.query = val;\n                if (!silent && !areEquivalent) {\n                    this.trigger(\"queryChanged\", this.query);\n                } else if (!silent && hasDifferentWhitespace) {\n                    this.trigger(\"whitespaceChanged\", this.query);\n                }\n            },\n            bind: function() {\n                var that = this, onBlur, onFocus, onKeydown, onInput;\n                onBlur = _.bind(this._onBlur, this);\n                onFocus = _.bind(this._onFocus, this);\n                onKeydown = _.bind(this._onKeydown, this);\n                onInput = _.bind(this._onInput, this);\n                this.$input.on(\"blur.tt\", onBlur).on(\"focus.tt\", onFocus).on(\"keydown.tt\", onKeydown);\n                if (!_.isMsie() || _.isMsie() > 9) {\n                    this.$input.on(\"input.tt\", onInput);\n                } else {\n                    this.$input.on(\"keydown.tt keypress.tt cut.tt paste.tt\", function($e) {\n                        if (specialKeyCodeMap[$e.which || $e.keyCode]) {\n                            return;\n                        }\n                        _.defer(_.bind(that._onInput, that, $e));\n                    });\n                }\n                return this;\n            },\n            focus: function focus() {\n                this.$input.focus();\n            },\n            blur: function blur() {\n                this.$input.blur();\n            },\n            getLangDir: function getLangDir() {\n                return this.dir;\n            },\n            getQuery: function getQuery() {\n                return this.query || \"\";\n            },\n            setQuery: function setQuery(val, silent) {\n                this.setInputValue(val);\n                this._setQuery(val, silent);\n            },\n            hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {\n                return this.query !== this.queryWhenFocused;\n            },\n            getInputValue: function getInputValue() {\n                return this.$input.val();\n            },\n            setInputValue: function setInputValue(value) {\n                this.$input.val(value);\n                this.clearHintIfInvalid();\n                this._checkLanguageDirection();\n            },\n            resetInputValue: function resetInputValue() {\n                this.setInputValue(this.query);\n            },\n            getHint: function getHint() {\n                return this.$hint.val();\n            },\n            setHint: function setHint(value) {\n                this.$hint.val(value);\n            },\n            clearHint: function clearHint() {\n                this.setHint(\"\");\n            },\n            clearHintIfInvalid: function clearHintIfInvalid() {\n                var val, hint, valIsPrefixOfHint, isValid;\n                val = this.getInputValue();\n                hint = this.getHint();\n                valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;\n                isValid = val !== \"\" && valIsPrefixOfHint && !this.hasOverflow();\n                !isValid && this.clearHint();\n            },\n            hasFocus: function hasFocus() {\n                return this.$input.is(\":focus\");\n            },\n            hasOverflow: function hasOverflow() {\n                var constraint = this.$input.width() - 2;\n                this.$overflowHelper.text(this.getInputValue());\n                return this.$overflowHelper.width() >= constraint;\n            },\n            isCursorAtEnd: function() {\n                var valueLength, selectionStart, range;\n                valueLength = this.$input.val().length;\n                selectionStart = this.$input[0].selectionStart;\n                if (_.isNumber(selectionStart)) {\n                    return selectionStart === valueLength;\n                } else if (document.selection) {\n                    range = document.selection.createRange();\n                    range.moveStart(\"character\", -valueLength);\n                    return valueLength === range.text.length;\n                }\n                return true;\n            },\n            destroy: function destroy() {\n                this.$hint.off(\".tt\");\n                this.$input.off(\".tt\");\n                this.$overflowHelper.remove();\n                this.$hint = this.$input = this.$overflowHelper = $(\"<div>\");\n            }\n        });\n        return Input;\n        function buildOverflowHelper($input) {\n            return $('<pre aria-hidden=\"true\"></pre>').css({\n                position: \"absolute\",\n                visibility: \"hidden\",\n                whiteSpace: \"pre\",\n                fontFamily: $input.css(\"font-family\"),\n                fontSize: $input.css(\"font-size\"),\n                fontStyle: $input.css(\"font-style\"),\n                fontVariant: $input.css(\"font-variant\"),\n                fontWeight: $input.css(\"font-weight\"),\n                wordSpacing: $input.css(\"word-spacing\"),\n                letterSpacing: $input.css(\"letter-spacing\"),\n                textIndent: $input.css(\"text-indent\"),\n                textRendering: $input.css(\"text-rendering\"),\n                textTransform: $input.css(\"text-transform\")\n            }).insertAfter($input);\n        }\n        function areQueriesEquivalent(a, b) {\n            return Input.normalizeQuery(a) === Input.normalizeQuery(b);\n        }\n        function withModifier($e) {\n            return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;\n        }\n    }();\n    var Dataset = function() {\n        \"use strict\";\n        var keys, nameGenerator;\n        keys = {\n            val: \"tt-selectable-display\",\n            obj: \"tt-selectable-object\"\n        };\n        nameGenerator = _.getIdGenerator();\n        function Dataset(o, www) {\n            o = o || {};\n            o.templates = o.templates || {};\n            o.templates.notFound = o.templates.notFound || o.templates.empty;\n            if (!o.source) {\n                $.error(\"missing source\");\n            }\n            if (!o.node) {\n                $.error(\"missing node\");\n            }\n            if (o.name && !isValidName(o.name)) {\n                $.error(\"invalid dataset name: \" + o.name);\n            }\n            www.mixin(this);\n            this.highlight = !!o.highlight;\n            this.name = o.name || nameGenerator();\n            this.limit = o.limit || 5;\n            this.displayFn = getDisplayFn(o.display || o.displayKey);\n            this.templates = getTemplates(o.templates, this.displayFn);\n            this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;\n            this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;\n            this._resetLastSuggestion();\n            this.$el = $(o.node).addClass(this.classes.dataset).addClass(this.classes.dataset + \"-\" + this.name);\n        }\n        Dataset.extractData = function extractData(el) {\n            var $el = $(el);\n            if ($el.data(keys.obj)) {\n                return {\n                    val: $el.data(keys.val) || \"\",\n                    obj: $el.data(keys.obj) || null\n                };\n            }\n            return null;\n        };\n        _.mixin(Dataset.prototype, EventEmitter, {\n            _overwrite: function overwrite(query, suggestions) {\n                suggestions = suggestions || [];\n                if (suggestions.length) {\n                    this._renderSuggestions(query, suggestions);\n                } else if (this.async && this.templates.pending) {\n                    this._renderPending(query);\n                } else if (!this.async && this.templates.notFound) {\n                    this._renderNotFound(query);\n                } else {\n                    this._empty();\n                }\n                this.trigger(\"rendered\", this.name, suggestions, false);\n            },\n            _append: function append(query, suggestions) {\n                suggestions = suggestions || [];\n                if (suggestions.length && this.$lastSuggestion.length) {\n                    this._appendSuggestions(query, suggestions);\n                } else if (suggestions.length) {\n                    this._renderSuggestions(query, suggestions);\n                } else if (!this.$lastSuggestion.length && this.templates.notFound) {\n                    this._renderNotFound(query);\n                }\n                this.trigger(\"rendered\", this.name, suggestions, true);\n            },\n            _renderSuggestions: function renderSuggestions(query, suggestions) {\n                var $fragment;\n                $fragment = this._getSuggestionsFragment(query, suggestions);\n                this.$lastSuggestion = $fragment.children().last();\n                this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));\n            },\n            _appendSuggestions: function appendSuggestions(query, suggestions) {\n                var $fragment, $lastSuggestion;\n                $fragment = this._getSuggestionsFragment(query, suggestions);\n                $lastSuggestion = $fragment.children().last();\n                this.$lastSuggestion.after($fragment);\n                this.$lastSuggestion = $lastSuggestion;\n            },\n            _renderPending: function renderPending(query) {\n                var template = this.templates.pending;\n                this._resetLastSuggestion();\n                template && this.$el.html(template({\n                    query: query,\n                    dataset: this.name\n                }));\n            },\n            _renderNotFound: function renderNotFound(query) {\n                var template = this.templates.notFound;\n                this._resetLastSuggestion();\n                template && this.$el.html(template({\n                    query: query,\n                    dataset: this.name\n                }));\n            },\n            _empty: function empty() {\n                this.$el.empty();\n                this._resetLastSuggestion();\n            },\n            _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {\n                var that = this, fragment;\n                fragment = document.createDocumentFragment();\n                _.each(suggestions, function getSuggestionNode(suggestion) {\n                    var $el, context;\n                    context = that._injectQuery(query, suggestion);\n                    $el = $(that.templates.suggestion(context)).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + \" \" + that.classes.selectable);\n                    fragment.appendChild($el[0]);\n                });\n                this.highlight && highlight({\n                    className: this.classes.highlight,\n                    node: fragment,\n                    pattern: query\n                });\n                return $(fragment);\n            },\n            _getFooter: function getFooter(query, suggestions) {\n                return this.templates.footer ? this.templates.footer({\n                    query: query,\n                    suggestions: suggestions,\n                    dataset: this.name\n                }) : null;\n            },\n            _getHeader: function getHeader(query, suggestions) {\n                return this.templates.header ? this.templates.header({\n                    query: query,\n                    suggestions: suggestions,\n                    dataset: this.name\n                }) : null;\n            },\n            _resetLastSuggestion: function resetLastSuggestion() {\n                this.$lastSuggestion = $();\n            },\n            _injectQuery: function injectQuery(query, obj) {\n                return _.isObject(obj) ? _.mixin({\n                    _query: query\n                }, obj) : obj;\n            },\n            update: function update(query) {\n                var that = this, canceled = false, syncCalled = false, rendered = 0;\n                this.cancel();\n                this.cancel = function cancel() {\n                    canceled = true;\n                    that.cancel = $.noop;\n                    that.async && that.trigger(\"asyncCanceled\", query);\n                };\n                this.source(query, sync, async);\n                !syncCalled && sync([]);\n                function sync(suggestions) {\n                    if (syncCalled) {\n                        return;\n                    }\n                    syncCalled = true;\n                    suggestions = (suggestions || []).slice(0, that.limit);\n                    rendered = suggestions.length;\n                    that._overwrite(query, suggestions);\n                    if (rendered < that.limit && that.async) {\n                        that.trigger(\"asyncRequested\", query);\n                    }\n                }\n                function async(suggestions) {\n                    suggestions = suggestions || [];\n                    if (!canceled && rendered < that.limit) {\n                        that.cancel = $.noop;\n                        rendered += suggestions.length;\n                        that._append(query, suggestions.slice(0, that.limit - rendered));\n                        that.async && that.trigger(\"asyncReceived\", query);\n                    }\n                }\n            },\n            cancel: $.noop,\n            clear: function clear() {\n                this._empty();\n                this.cancel();\n                this.trigger(\"cleared\");\n            },\n            isEmpty: function isEmpty() {\n                return this.$el.is(\":empty\");\n            },\n            destroy: function destroy() {\n                this.$el = $(\"<div>\");\n            }\n        });\n        return Dataset;\n        function getDisplayFn(display) {\n            display = display || _.stringify;\n            return _.isFunction(display) ? display : displayFn;\n            function displayFn(obj) {\n                return obj[display];\n            }\n        }\n        function getTemplates(templates, displayFn) {\n            return {\n                notFound: templates.notFound && _.templatify(templates.notFound),\n                pending: templates.pending && _.templatify(templates.pending),\n                header: templates.header && _.templatify(templates.header),\n                footer: templates.footer && _.templatify(templates.footer),\n                suggestion: templates.suggestion || suggestionTemplate\n            };\n            function suggestionTemplate(context) {\n                return $(\"<div>\").text(displayFn(context));\n            }\n        }\n        function isValidName(str) {\n            return /^[_a-zA-Z0-9-]+$/.test(str);\n        }\n    }();\n    var Menu = function() {\n        \"use strict\";\n        function Menu(o, www) {\n            var that = this;\n            o = o || {};\n            if (!o.node) {\n                $.error(\"node is required\");\n            }\n            www.mixin(this);\n            this.$node = $(o.node);\n            this.query = null;\n            this.datasets = _.map(o.datasets, initializeDataset);\n            function initializeDataset(oDataset) {\n                var node = that.$node.find(oDataset.node).first();\n                oDataset.node = node.length ? node : $(\"<div>\").appendTo(that.$node);\n                return new Dataset(oDataset, www);\n            }\n        }\n        _.mixin(Menu.prototype, EventEmitter, {\n            _onSelectableClick: function onSelectableClick($e) {\n                this.trigger(\"selectableClicked\", $($e.currentTarget));\n            },\n            _onRendered: function onRendered(type, dataset, suggestions, async) {\n                this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\n                this.trigger(\"datasetRendered\", dataset, suggestions, async);\n            },\n            _onCleared: function onCleared() {\n                this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\n                this.trigger(\"datasetCleared\");\n            },\n            _propagate: function propagate() {\n                this.trigger.apply(this, arguments);\n            },\n            _allDatasetsEmpty: function allDatasetsEmpty() {\n                return _.every(this.datasets, isDatasetEmpty);\n                function isDatasetEmpty(dataset) {\n                    return dataset.isEmpty();\n                }\n            },\n            _getSelectables: function getSelectables() {\n                return this.$node.find(this.selectors.selectable);\n            },\n            _removeCursor: function _removeCursor() {\n                var $selectable = this.getActiveSelectable();\n                $selectable && $selectable.removeClass(this.classes.cursor);\n            },\n            _ensureVisible: function ensureVisible($el) {\n                var elTop, elBottom, nodeScrollTop, nodeHeight;\n                elTop = $el.position().top;\n                elBottom = elTop + $el.outerHeight(true);\n                nodeScrollTop = this.$node.scrollTop();\n                nodeHeight = this.$node.height() + parseInt(this.$node.css(\"paddingTop\"), 10) + parseInt(this.$node.css(\"paddingBottom\"), 10);\n                if (elTop < 0) {\n                    this.$node.scrollTop(nodeScrollTop + elTop);\n                } else if (nodeHeight < elBottom) {\n                    this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));\n                }\n            },\n            bind: function() {\n                var that = this, onSelectableClick;\n                onSelectableClick = _.bind(this._onSelectableClick, this);\n                this.$node.on(\"click.tt\", this.selectors.selectable, onSelectableClick);\n                _.each(this.datasets, function(dataset) {\n                    dataset.onSync(\"asyncRequested\", that._propagate, that).onSync(\"asyncCanceled\", that._propagate, that).onSync(\"asyncReceived\", that._propagate, that).onSync(\"rendered\", that._onRendered, that).onSync(\"cleared\", that._onCleared, that);\n                });\n                return this;\n            },\n            isOpen: function isOpen() {\n                return this.$node.hasClass(this.classes.open);\n            },\n            open: function open() {\n                this.$node.addClass(this.classes.open);\n            },\n            close: function close() {\n                this.$node.removeClass(this.classes.open);\n                this._removeCursor();\n            },\n            setLanguageDirection: function setLanguageDirection(dir) {\n                this.$node.attr(\"dir\", dir);\n            },\n            selectableRelativeToCursor: function selectableRelativeToCursor(delta) {\n                var $selectables, $oldCursor, oldIndex, newIndex;\n                $oldCursor = this.getActiveSelectable();\n                $selectables = this._getSelectables();\n                oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;\n                newIndex = oldIndex + delta;\n                newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;\n                newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;\n                return newIndex === -1 ? null : $selectables.eq(newIndex);\n            },\n            setCursor: function setCursor($selectable) {\n                this._removeCursor();\n                if ($selectable = $selectable && $selectable.first()) {\n                    $selectable.addClass(this.classes.cursor);\n                    this._ensureVisible($selectable);\n                }\n            },\n            getSelectableData: function getSelectableData($el) {\n                return $el && $el.length ? Dataset.extractData($el) : null;\n            },\n            getActiveSelectable: function getActiveSelectable() {\n                var $selectable = this._getSelectables().filter(this.selectors.cursor).first();\n                return $selectable.length ? $selectable : null;\n            },\n            getTopSelectable: function getTopSelectable() {\n                var $selectable = this._getSelectables().first();\n                return $selectable.length ? $selectable : null;\n            },\n            update: function update(query) {\n                var isValidUpdate = query !== this.query;\n                if (isValidUpdate) {\n                    this.query = query;\n                    _.each(this.datasets, updateDataset);\n                }\n                return isValidUpdate;\n                function updateDataset(dataset) {\n                    dataset.update(query);\n                }\n            },\n            empty: function empty() {\n                _.each(this.datasets, clearDataset);\n                this.query = null;\n                this.$node.addClass(this.classes.empty);\n                function clearDataset(dataset) {\n                    dataset.clear();\n                }\n            },\n            destroy: function destroy() {\n                this.$node.off(\".tt\");\n                this.$node = $(\"<div>\");\n                _.each(this.datasets, destroyDataset);\n                function destroyDataset(dataset) {\n                    dataset.destroy();\n                }\n            }\n        });\n        return Menu;\n    }();\n    var DefaultMenu = function() {\n        \"use strict\";\n        var s = Menu.prototype;\n        function DefaultMenu() {\n            Menu.apply(this, [].slice.call(arguments, 0));\n        }\n        _.mixin(DefaultMenu.prototype, Menu.prototype, {\n            open: function open() {\n                !this._allDatasetsEmpty() && this._show();\n                return s.open.apply(this, [].slice.call(arguments, 0));\n            },\n            close: function close() {\n                this._hide();\n                return s.close.apply(this, [].slice.call(arguments, 0));\n            },\n            _onRendered: function onRendered() {\n                if (this._allDatasetsEmpty()) {\n                    this._hide();\n                } else {\n                    this.isOpen() && this._show();\n                }\n                return s._onRendered.apply(this, [].slice.call(arguments, 0));\n            },\n            _onCleared: function onCleared() {\n                if (this._allDatasetsEmpty()) {\n                    this._hide();\n                } else {\n                    this.isOpen() && this._show();\n                }\n                return s._onCleared.apply(this, [].slice.call(arguments, 0));\n            },\n            setLanguageDirection: function setLanguageDirection(dir) {\n                this.$node.css(dir === \"ltr\" ? this.css.ltr : this.css.rtl);\n                return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));\n            },\n            _hide: function hide() {\n                this.$node.hide();\n            },\n            _show: function show() {\n                this.$node.css(\"display\", \"block\");\n            }\n        });\n        return DefaultMenu;\n    }();\n    var Typeahead = function() {\n        \"use strict\";\n        function Typeahead(o, www) {\n            var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;\n            o = o || {};\n            if (!o.input) {\n                $.error(\"missing input\");\n            }\n            if (!o.menu) {\n                $.error(\"missing menu\");\n            }\n            if (!o.eventBus) {\n                $.error(\"missing event bus\");\n            }\n            www.mixin(this);\n            this.eventBus = o.eventBus;\n            this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;\n            this.input = o.input;\n            this.menu = o.menu;\n            this.enabled = true;\n            this.active = false;\n            this.input.hasFocus() && this.activate();\n            this.dir = this.input.getLangDir();\n            this._hacks();\n            this.menu.bind().onSync(\"selectableClicked\", this._onSelectableClicked, this).onSync(\"asyncRequested\", this._onAsyncRequested, this).onSync(\"asyncCanceled\", this._onAsyncCanceled, this).onSync(\"asyncReceived\", this._onAsyncReceived, this).onSync(\"datasetRendered\", this._onDatasetRendered, this).onSync(\"datasetCleared\", this._onDatasetCleared, this);\n            onFocused = c(this, \"activate\", \"open\", \"_onFocused\");\n            onBlurred = c(this, \"deactivate\", \"_onBlurred\");\n            onEnterKeyed = c(this, \"isActive\", \"isOpen\", \"_onEnterKeyed\");\n            onTabKeyed = c(this, \"isActive\", \"isOpen\", \"_onTabKeyed\");\n            onEscKeyed = c(this, \"isActive\", \"_onEscKeyed\");\n            onUpKeyed = c(this, \"isActive\", \"open\", \"_onUpKeyed\");\n            onDownKeyed = c(this, \"isActive\", \"open\", \"_onDownKeyed\");\n            onLeftKeyed = c(this, \"isActive\", \"isOpen\", \"_onLeftKeyed\");\n            onRightKeyed = c(this, \"isActive\", \"isOpen\", \"_onRightKeyed\");\n            onQueryChanged = c(this, \"_openIfActive\", \"_onQueryChanged\");\n            onWhitespaceChanged = c(this, \"_openIfActive\", \"_onWhitespaceChanged\");\n            this.input.bind().onSync(\"focused\", onFocused, this).onSync(\"blurred\", onBlurred, this).onSync(\"enterKeyed\", onEnterKeyed, this).onSync(\"tabKeyed\", onTabKeyed, this).onSync(\"escKeyed\", onEscKeyed, this).onSync(\"upKeyed\", onUpKeyed, this).onSync(\"downKeyed\", onDownKeyed, this).onSync(\"leftKeyed\", onLeftKeyed, this).onSync(\"rightKeyed\", onRightKeyed, this).onSync(\"queryChanged\", onQueryChanged, this).onSync(\"whitespaceChanged\", onWhitespaceChanged, this).onSync(\"langDirChanged\", this._onLangDirChanged, this);\n        }\n        _.mixin(Typeahead.prototype, {\n            _hacks: function hacks() {\n                var $input, $menu;\n                $input = this.input.$input || $(\"<div>\");\n                $menu = this.menu.$node || $(\"<div>\");\n                $input.on(\"blur.tt\", function($e) {\n                    var active, isActive, hasActive;\n                    active = document.activeElement;\n                    isActive = $menu.is(active);\n                    hasActive = $menu.has(active).length > 0;\n                    if (_.isMsie() && (isActive || hasActive)) {\n                        $e.preventDefault();\n                        $e.stopImmediatePropagation();\n                        _.defer(function() {\n                            $input.focus();\n                        });\n                    }\n                });\n                $menu.on(\"mousedown.tt\", function($e) {\n                    $e.preventDefault();\n                });\n            },\n            _onSelectableClicked: function onSelectableClicked(type, $el) {\n                this.select($el);\n            },\n            _onDatasetCleared: function onDatasetCleared() {\n                this._updateHint();\n            },\n            _onDatasetRendered: function onDatasetRendered(type, dataset, suggestions, async) {\n                this._updateHint();\n                this.eventBus.trigger(\"render\", suggestions, async, dataset);\n            },\n            _onAsyncRequested: function onAsyncRequested(type, dataset, query) {\n                this.eventBus.trigger(\"asyncrequest\", query, dataset);\n            },\n            _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {\n                this.eventBus.trigger(\"asynccancel\", query, dataset);\n            },\n            _onAsyncReceived: function onAsyncReceived(type, dataset, query) {\n                this.eventBus.trigger(\"asyncreceive\", query, dataset);\n            },\n            _onFocused: function onFocused() {\n                this._minLengthMet() && this.menu.update(this.input.getQuery());\n            },\n            _onBlurred: function onBlurred() {\n                if (this.input.hasQueryChangedSinceLastFocus()) {\n                    this.eventBus.trigger(\"change\", this.input.getQuery());\n                }\n            },\n            _onEnterKeyed: function onEnterKeyed(type, $e) {\n                var $selectable;\n                if ($selectable = this.menu.getActiveSelectable()) {\n                    this.select($selectable) && $e.preventDefault();\n                }\n            },\n            _onTabKeyed: function onTabKeyed(type, $e) {\n                var $selectable;\n                if ($selectable = this.menu.getActiveSelectable()) {\n                    this.select($selectable) && $e.preventDefault();\n                } else if ($selectable = this.menu.getTopSelectable()) {\n                    this.autocomplete($selectable) && $e.preventDefault();\n                }\n            },\n            _onEscKeyed: function onEscKeyed() {\n                this.close();\n            },\n            _onUpKeyed: function onUpKeyed() {\n                this.moveCursor(-1);\n            },\n            _onDownKeyed: function onDownKeyed() {\n                this.moveCursor(+1);\n            },\n            _onLeftKeyed: function onLeftKeyed() {\n                if (this.dir === \"rtl\" && this.input.isCursorAtEnd()) {\n                    this.autocomplete(this.menu.getTopSelectable());\n                }\n            },\n            _onRightKeyed: function onRightKeyed() {\n                if (this.dir === \"ltr\" && this.input.isCursorAtEnd()) {\n                    this.autocomplete(this.menu.getTopSelectable());\n                }\n            },\n            _onQueryChanged: function onQueryChanged(e, query) {\n                this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();\n            },\n            _onWhitespaceChanged: function onWhitespaceChanged() {\n                this._updateHint();\n            },\n            _onLangDirChanged: function onLangDirChanged(e, dir) {\n                if (this.dir !== dir) {\n                    this.dir = dir;\n                    this.menu.setLanguageDirection(dir);\n                }\n            },\n            _openIfActive: function openIfActive() {\n                this.isActive() && this.open();\n            },\n            _minLengthMet: function minLengthMet(query) {\n                query = _.isString(query) ? query : this.input.getQuery() || \"\";\n                return query.length >= this.minLength;\n            },\n            _updateHint: function updateHint() {\n                var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;\n                $selectable = this.menu.getTopSelectable();\n                data = this.menu.getSelectableData($selectable);\n                val = this.input.getInputValue();\n                if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {\n                    query = Input.normalizeQuery(val);\n                    escapedQuery = _.escapeRegExChars(query);\n                    frontMatchRegEx = new RegExp(\"^(?:\" + escapedQuery + \")(.+$)\", \"i\");\n                    match = frontMatchRegEx.exec(data.val);\n                    match && this.input.setHint(val + match[1]);\n                } else {\n                    this.input.clearHint();\n                }\n            },\n            isEnabled: function isEnabled() {\n                return this.enabled;\n            },\n            enable: function enable() {\n                this.enabled = true;\n            },\n            disable: function disable() {\n                this.enabled = false;\n            },\n            isActive: function isActive() {\n                return this.active;\n            },\n            activate: function activate() {\n                if (this.isActive()) {\n                    return true;\n                } else if (!this.isEnabled() || this.eventBus.before(\"active\")) {\n                    return false;\n                } else {\n                    this.active = true;\n                    this.eventBus.trigger(\"active\");\n                    return true;\n                }\n            },\n            deactivate: function deactivate() {\n                if (!this.isActive()) {\n                    return true;\n                } else if (this.eventBus.before(\"idle\")) {\n                    return false;\n                } else {\n                    this.active = false;\n                    this.close();\n                    this.eventBus.trigger(\"idle\");\n                    return true;\n                }\n            },\n            isOpen: function isOpen() {\n                return this.menu.isOpen();\n            },\n            open: function open() {\n                if (!this.isOpen() && !this.eventBus.before(\"open\")) {\n                    this.menu.open();\n                    this._updateHint();\n                    this.eventBus.trigger(\"open\");\n                }\n                return this.isOpen();\n            },\n            close: function close() {\n                if (this.isOpen() && !this.eventBus.before(\"close\")) {\n                    this.menu.close();\n                    this.input.clearHint();\n                    this.input.resetInputValue();\n                    this.eventBus.trigger(\"close\");\n                }\n                return !this.isOpen();\n            },\n            setVal: function setVal(val) {\n                this.input.setQuery(_.toStr(val));\n            },\n            getVal: function getVal() {\n                return this.input.getQuery();\n            },\n            select: function select($selectable) {\n                var data = this.menu.getSelectableData($selectable);\n                if (data && !this.eventBus.before(\"select\", data.obj)) {\n                    this.input.setQuery(data.val, true);\n                    this.eventBus.trigger(\"select\", data.obj);\n                    this.close();\n                    return true;\n                }\n                return false;\n            },\n            autocomplete: function autocomplete($selectable) {\n                var query, data, isValid;\n                query = this.input.getQuery();\n                data = this.menu.getSelectableData($selectable);\n                isValid = data && query !== data.val;\n                if (isValid && !this.eventBus.before(\"autocomplete\", data.obj)) {\n                    this.input.setQuery(data.val);\n                    this.eventBus.trigger(\"autocomplete\", data.obj);\n                    return true;\n                }\n                return false;\n            },\n            moveCursor: function moveCursor(delta) {\n                var query, $candidate, data, payload, cancelMove;\n                query = this.input.getQuery();\n                $candidate = this.menu.selectableRelativeToCursor(delta);\n                data = this.menu.getSelectableData($candidate);\n                payload = data ? data.obj : null;\n                cancelMove = this._minLengthMet() && this.menu.update(query);\n                if (!cancelMove && !this.eventBus.before(\"cursorchange\", payload)) {\n                    this.menu.setCursor($candidate);\n                    if (data) {\n                        this.input.setInputValue(data.val);\n                    } else {\n                        this.input.resetInputValue();\n                        this._updateHint();\n                    }\n                    this.eventBus.trigger(\"cursorchange\", payload);\n                    return true;\n                }\n                return false;\n            },\n            destroy: function destroy() {\n                this.input.destroy();\n                this.menu.destroy();\n            }\n        });\n        return Typeahead;\n        function c(ctx) {\n            var methods = [].slice.call(arguments, 1);\n            return function() {\n                var args = [].slice.call(arguments);\n                _.each(methods, function(method) {\n                    return ctx[method].apply(ctx, args);\n                });\n            };\n        }\n    }();\n    (function() {\n        \"use strict\";\n        var old, keys, methods;\n        old = $.fn.typeahead;\n        keys = {\n            www: \"tt-www\",\n            attrs: \"tt-attrs\",\n            typeahead: \"tt-typeahead\"\n        };\n        methods = {\n            initialize: function initialize(o, datasets) {\n                var www;\n                datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);\n                o = o || {};\n                www = WWW(o.classNames);\n                return this.each(attach);\n                function attach() {\n                    var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, typeahead, MenuConstructor;\n                    _.each(datasets, function(d) {\n                        d.highlight = !!o.highlight;\n                    });\n                    $input = $(this);\n                    $wrapper = $(www.html.wrapper);\n                    $hint = $elOrNull(o.hint);\n                    $menu = $elOrNull(o.menu);\n                    defaultHint = o.hint !== false && !$hint;\n                    defaultMenu = o.menu !== false && !$menu;\n                    defaultHint && ($hint = buildHintFromInput($input, www));\n                    defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));\n                    $hint && $hint.val(\"\");\n                    $input = prepInput($input, www);\n                    if (defaultHint || defaultMenu) {\n                        $wrapper.css(www.css.wrapper);\n                        $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);\n                        $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);\n                    }\n                    MenuConstructor = defaultMenu ? DefaultMenu : Menu;\n                    eventBus = new EventBus({\n                        el: $input\n                    });\n                    input = new Input({\n                        hint: $hint,\n                        input: $input\n                    }, www);\n                    menu = new MenuConstructor({\n                        node: $menu,\n                        datasets: datasets\n                    }, www);\n                    typeahead = new Typeahead({\n                        input: input,\n                        menu: menu,\n                        eventBus: eventBus,\n                        minLength: o.minLength\n                    }, www);\n                    $input.data(keys.www, www);\n                    $input.data(keys.typeahead, typeahead);\n                }\n            },\n            isEnabled: function isEnabled() {\n                var enabled;\n                ttEach(this.first(), function(t) {\n                    enabled = t.isEnabled();\n                });\n                return enabled;\n            },\n            enable: function enable() {\n                ttEach(this, function(t) {\n                    t.enable();\n                });\n                return this;\n            },\n            disable: function disable() {\n                ttEach(this, function(t) {\n                    t.disable();\n                });\n                return this;\n            },\n            isActive: function isActive() {\n                var active;\n                ttEach(this.first(), function(t) {\n                    active = t.isActive();\n                });\n                return active;\n            },\n            activate: function activate() {\n                ttEach(this, function(t) {\n                    t.activate();\n                });\n                return this;\n            },\n            deactivate: function deactivate() {\n                ttEach(this, function(t) {\n                    t.deactivate();\n                });\n                return this;\n            },\n            isOpen: function isOpen() {\n                var open;\n                ttEach(this.first(), function(t) {\n                    open = t.isOpen();\n                });\n                return open;\n            },\n            open: function open() {\n                ttEach(this, function(t) {\n                    t.open();\n                });\n                return this;\n            },\n            close: function close() {\n                ttEach(this, function(t) {\n                    t.close();\n                });\n                return this;\n            },\n            select: function select(el) {\n                var success = false, $el = $(el);\n                ttEach(this.first(), function(t) {\n                    success = t.select($el);\n                });\n                return success;\n            },\n            autocomplete: function autocomplete(el) {\n                var success = false, $el = $(el);\n                ttEach(this.first(), function(t) {\n                    success = t.autocomplete($el);\n                });\n                return success;\n            },\n            moveCursor: function moveCursoe(delta) {\n                var success = false;\n                ttEach(this.first(), function(t) {\n                    success = t.moveCursor(delta);\n                });\n                return success;\n            },\n            val: function val(newVal) {\n                var query;\n                if (!arguments.length) {\n                    ttEach(this.first(), function(t) {\n                        query = t.getVal();\n                    });\n                    return query;\n                } else {\n                    ttEach(this, function(t) {\n                        t.setVal(newVal);\n                    });\n                    return this;\n                }\n            },\n            destroy: function destroy() {\n                ttEach(this, function(typeahead, $input) {\n                    revert($input);\n                    typeahead.destroy();\n                });\n                return this;\n            }\n        };\n        $.fn.typeahead = function(method) {\n            if (methods[method]) {\n                return methods[method].apply(this, [].slice.call(arguments, 1));\n            } else {\n                return methods.initialize.apply(this, arguments);\n            }\n        };\n        $.fn.typeahead.noConflict = function noConflict() {\n            $.fn.typeahead = old;\n            return this;\n        };\n        function ttEach($els, fn) {\n            $els.each(function() {\n                var $input = $(this), typeahead;\n                (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);\n            });\n        }\n        function buildHintFromInput($input, www) {\n            return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop(\"readonly\", true).removeAttr(\"id name placeholder required\").attr({\n                autocomplete: \"off\",\n                spellcheck: \"false\",\n                tabindex: -1\n            });\n        }\n        function prepInput($input, www) {\n            $input.data(keys.attrs, {\n                dir: $input.attr(\"dir\"),\n                autocomplete: $input.attr(\"autocomplete\"),\n                spellcheck: $input.attr(\"spellcheck\"),\n                style: $input.attr(\"style\")\n            });\n            $input.addClass(www.classes.input).attr({\n                autocomplete: \"off\",\n                spellcheck: false\n            });\n            try {\n                !$input.attr(\"dir\") && $input.attr(\"dir\", \"auto\");\n            } catch (e) {}\n            return $input;\n        }\n        function getBackgroundStyles($el) {\n            return {\n                backgroundAttachment: $el.css(\"background-attachment\"),\n                backgroundClip: $el.css(\"background-clip\"),\n                backgroundColor: $el.css(\"background-color\"),\n                backgroundImage: $el.css(\"background-image\"),\n                backgroundOrigin: $el.css(\"background-origin\"),\n                backgroundPosition: $el.css(\"background-position\"),\n                backgroundRepeat: $el.css(\"background-repeat\"),\n                backgroundSize: $el.css(\"background-size\")\n            };\n        }\n        function revert($input) {\n            var www, $wrapper;\n            www = $input.data(keys.www);\n            $wrapper = $input.parent().filter(www.selectors.wrapper);\n            _.each($input.data(keys.attrs), function(val, key) {\n                _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);\n            });\n            $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);\n            if ($wrapper.length) {\n                $input.detach().insertAfter($wrapper);\n                $wrapper.remove();\n            }\n        }\n        function $elOrNull(obj) {\n            var isValid, $el;\n            isValid = _.isJQuery(obj) || _.isElement(obj);\n            $el = isValid ? $(obj).first() : [];\n            return $el.length ? $el : null;\n        }\n    })();\n});\ndefine(\"typeahead\", [\"jquery\"], (function (global) {\n    return function () {\n        var ret, fn;\n       fn = function ($) {\n\treturn require.s.contexts._.registry['typeahead.js'].factory($);\n      };\n        ret = fn.apply(global, arguments);\n        return ret;\n    };\n}(this)));\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2017, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Support the SWISH search box.  This we want to find:\n *\n *   - Predicates based on templates we also use for template completion\n *   - Source code (line)\t\t[TBD]\n *   - Saved programs by\n *     - Name\n *     - Tag\n *     - Description\t\t\t[TBD]\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('search',[ \"jquery\", \"config\", \"utils\", \"bloodhound\", \"typeahead\" ],\n       function($, config, utils, Bloodhound) {\n\n(function($) {\n  var pluginName = 'search';\n\n  /** @lends $.fn.search */\n  var methods = {\n    /**\n     * Turn Bootstrap search input into a typeahead widget\n     * @param {Object}  [options]\n     * @param {Boolean} [options.search=true] If false, merely use\n     * typeahead to fill a value.\n     */\n    _init: function(options) {\n      options = options||{};\n\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar query;\t\t\t/* current query */\n\n\t\t /*******************************\n\t\t *\t FILE COMPLETION\t*\n\t\t *******************************/\n\n\tvar files = new Bloodhound({\n\t\t\tname: \"files\",\n\t\t\tremote: { url: config.http.locations.swish_typeahead +\n\t\t\t\t       \"?set=file&q=%QUERY\",\n\t\t\t\t  wildcard: '%QUERY'\n\t\t\t},\n\t\t\tdatumTokenizer: fileTokenizer,\n\t\t\tqueryTokenizer: Bloodhound.tokenizers.whitespace\n\t               });\n\tfiles.initialize();\n\n\tfunction fileTokenizer(f) {\n\t  return (f.tags||[]).push(f.name);\n\t}\n\n\tfunction renderFile(f) {\n\t  function filetype(file) {\n\t    return file.split('.').pop();\n\t  }\n\t  function filebase(file) {\n\t    return file.split('.').slice(0,-1).join(\".\");\n\t  }\n\n\t  var str = \"<div class=\\\"tt-match file type-icon \"\n\t          + filetype(f.name)\n\t          + \"\\\">\"\n\t\t  + \"<span class=\\\"tt-label\\\">\"\n\t\t  + utils.htmlEncode(filebase(f.name));\n\t          + \"</span>\";\n\n\t  if ( f.tags ) {\n\t    str += \"<span class=\\\"tt-tags\\\">\";\n\t    for(var i=0; i<f.tags.length; i++) {\n\t      var tag = f.tags[i];\n\t      str += \"<span class=\\\"tt-tag\\\">\"\n\t\t   + utils.htmlEncode(tag)\n\t\t   + \"</span>\";\n\t    }\n\t    str += \"</span>\";\n\t  }\n\n\t  if ( f.title )\n\t    str += \"<div class=\\\"tt-title file\\\">\"\n\t\t + utils.htmlEncode(f.title)\n\t\t + \"</div>\";\n\t  str += \"</div>\";\n\n\t  return str;\n\t}\n\n\t\t /*******************************\n\t\t *     SEARCH STORE SOURCES\t*\n\t\t *******************************/\n\n\tvar storeContent = new Bloodhound({\n\t\t\t     name: \"store_content\",\n\t\t\t     limit: 20,\n\t\t\t     cache: false,\n\t\t\t     remote: {\n\t\t\t       url: config.http.locations.swish_typeahead +\n\t\t\t\t     \"?set=store_content&q=%QUERY\",\n\t\t\t       replace:bloodHoundURL\n\t\t\t     },\n\t\t\t     datumTokenizer: sourceLineTokenizer,\n\t\t\t     queryTokenizer: Bloodhound.tokenizers.whitespace\n\t                   });\n\tstoreContent.initialize();\n\n\tvar currentFile  = null;\n\tvar currentAlias = null;\n\tfunction renderStoreSourceLine(hit) {\n\t  var str = \"\";\n\n\t  if ( hit.file != currentFile || hit.alias != currentAlias ) {\n\t    var ext = hit.file.split('.').pop();\n\t    currentFile = hit.file;\n\t    currentAlias = hit.alias;\n\t    str = \"<div class=\\\"tt-file-header type-icon \"+ext+\"\\\">\"\n\t\t+ \"<span class=\\\"tt-path-file\\\">\"\n\t\t+ utils.htmlEncode(hit.file)\n\t\t+ \"</span>\"\n\t\t+ \"</div>\";\n\t  }\n\n\t  return str+renderSourceMatch(hit);\n\t}\n\n\t\t /*******************************\n\t\t *     SEARCH REMOTE SOURCES\t*\n\t\t *******************************/\n\n\tvar sources = new Bloodhound({\n\t\t\tname: \"source\",\n\t\t\tlimit: 15,\n\t\t\tcache: false,\n\t\t\tquery_cache_length: 1,\n\t\t\tremote: {\n\t\t\t  url: config.http.locations.swish_typeahead +\n\t\t\t\t\"?set=sources&q=%QUERY\",\n\t\t\t  replace: bloodHoundURL\n\t\t\t},\n\t\t\tdatumTokenizer: sourceLineTokenizer,\n\t\t\tqueryTokenizer: Bloodhound.tokenizers.whitespace\n\t               });\n\tsources.initialize();\n\n\tfunction sourceLineTokenizer(hit) {\n\t  return Bloodhound.tokenizers.whitespace(hit.text);\n\t}\n\n\tfunction renderSourceLine(hit) {\n\t  var str = \"\";\n\n\t  if ( hit.file != currentFile || hit.alias != currentAlias ) {\n\t    currentFile = hit.file;\n\t    currentAlias = hit.alias;\n\t    str = \"<div class=\\\"tt-file-header type-icon \"+hit.ext+\"\\\">\"\n\t        + \"<span class=\\\"tt-path-alias\\\">\"\n\t        + utils.htmlEncode(hit.alias)\n\t\t+ \"</span>(<span class=\\\"tt-path-file\\\">\"\n\t\t+ utils.htmlEncode(hit.file)\n\t\t+ \")</span>\"\n\t\t+ \"</div>\";\n\t  }\n\n\t  if ( hit.text )\n\t    str += renderSourceMatch(hit);\n\t  return str;\n\t}\n\n\n\t\t /*******************************\n\t\t *    PREDICATE COMPLETION\t*\n\t\t *******************************/\n\n\tfunction predicateMatcher(q, cb) {\n\t  var templates = config.swish.templates;\n\t  var matches = [];\n\t  var ql = q.split(\" \");\n\t  var pl = [];\n\n\t  for(var i=0; i<ql.length; i++)\n\t    pl.push({prefix:ql[i], regex:new RegExp(\"_\"+ql[i])});\n\n\t  for(var i=0; i<templates.length; i++) {\n\t    var templ = templates[i];\n\n\t    if ( templ.arity !== undefined ) {\n\t      for(var j=0, match=true; j<pl.length && match; j++) {\n\t\tif ( !(templ.name.startsWith(pl[j].prefix) ||\n\t\t       templ.name.match(pl[j].regex)) )\n\t\t  match=false;\n\t      }\n\t      if ( match )\n\t        matches.push(templ);\n\t    }\n\t  }\n\n\t  cb(matches);\n\t}\n\n\n\tfunction renderPredicate(p) {\n\t  var str = \"<div class=\\\"tt-match predicate\";\n\n\t  if ( p.type ) str += \" \" + p.type;\n\t  if ( p.mode ) str += \"\\\" title=\\\"\"\n                             + p.mode;\n\n\t  str += \"\\\">\"\n               + \"<span class=\\\"tt-label\\\">\"\n\t       + utils.htmlEncode(p.name)\n\t       + \"/\"\n\t       + p.arity\n\t       + \"</span>\";\n\n\t  if ( p.iso ) {\n\t    str += \"<span class=\\\"tt-tags\\\">\";\n\t    if ( p.iso )\n\t      str += \"<span class=\\\"tt-tag\\\">ISO</span>\";\n\t    str += \"</span>\";\n\t  }\n\n\t  if ( p.summary )\n\t    str += \"<div class=\\\"tt-title file\\\">\"\n\t\t + utils.htmlEncode(p.summary)\n\t\t + \"</div>\";\n\t  str += \"</div>\";\n\n\n\t  str += \"</div>\";\n\n\t  return str;\n\t}\n\n\t\t /*******************************\n\t\t *\t   SEARCH SOURCE\t*\n\t\t *******************************/\n\n\tvar sourceRE;\n\n\tfunction sourceMatcher(q, cb) {\n\t  query = q;\n\t  if ( q.length < 2 ) return [];\n\n\t  var matches = [];\n\t  var re = new RegExp(\"\\\\b\"+q, \"g\");\n\t  sourceRE = re;\n\n\t  $(\".prolog-editor\").each(function() {\n\t    var editor = this;\n\t    var m = $(editor).prologEditor('search', re, {max: 7});\n\n\t    for(var i=0; i<m.length; i++) {\n\t      m[i].editor = editor;\n\t      m[i].regex  = sourceRE;\n\t      matches.push(m[i]);\n\t    }\n\t  });\n\n\t  cb(matches);\n\t}\n\n\n\tfunction renderSourceMatch(hit) {\n\t  var text = hit.text;\n\t  var i;\n\n\t  if ( (i=text.search(sourceRE)) > 20 )\n\t    text = \"...\"+text.slice(i-17);\n\t  if ( text.length > 80 )\n\t    text = text.substring(0,80);\n\n\t  var str = \"<div class=\\\"tt-match source\\\">\"\n\t          + \"<span class=\\\"tt-line\\\">\"\n\t\t  + \"<span class=\\\"tt-lineno\\\">\"\n\t\t  + hit.line\n\t\t  + \"</span>\"\n\t\t  + \"<span class=\\\"tt-text\\\">\"\n\t\t  + utils.htmlEncode(text)\n\t          + \"</span>\"\n\t          + \"</span>\"\n\t\t  + \"</div>\";\n\n\t  return str;\n\t}\n\n\n\t\t /*******************************\n\t\t *\t       USERS\t\t*\n\t\t *******************************/\n\n\tvar users = new Bloodhound({\n\t\t\t     name: \"users\",\n\t\t\t     limit: 20,\n\t\t\t     cache: false,\n\t\t\t     remote: {\n\t\t\t       url: config.http.locations.swish_typeahead +\n\t\t\t\t     \"?set=user&q=%QUERY\",\n\t\t\t       replace:bloodHoundURL\n\t\t\t     },\n\t\t\t     datumTokenizer: sourceLineTokenizer,\n\t\t\t     queryTokenizer: Bloodhound.tokenizers.whitespace\n\t                   });\n\tusers.initialize();\n\n\tfunction renderUser(hit) {\n\t  function avatar(hit) {\n\t    if ( hit.avatar ) {\n\t      return '<img class=\"avatar\" src=\"'+encodeURI(hit.avatar)+'\">';\n\t    } else {\n\t      return \"\";\n\t    }\n\t  }\n\n\t  var str = '<div class=\"tt-match user\">'\n\t\t  + avatar(hit)\n\t\t  + '<span class=\"tt-label\">'\n\t\t  + utils.htmlEncode(hit.name)\n\t\t  + '</span>'\n\t\t  + '</div>';\n\n\t  return str;\n\t}\n\n\n\t\t /*******************************\n\t\t *\t      COMBINE\t\t*\n\t\t *******************************/\n\n\tvar typeaheadProperties = {\n\t  source:\t\t\t/* local source */\n\t  { name: \"source\",\n\t    display: 'text',\n\t    source: sourceMatcher,\n\t    templates: { suggestion: renderSourceMatch }\n\t  },\n\t  sources:\t\t\t/* remote sources */\n\t  { name: \"sources\",\n\t    display: 'file',\n\t    source: sources.ttAdapter(),\n\t    templates: { suggestion: renderSourceLine },\n\t    limit: 15\n\t  },\n\t  files:\t\t\t/* files in gitty on name and tags */\n\t  { name: \"files\",\n\t    display: 'name',\n\t    source: files.ttAdapter(),\n\t    templates: { suggestion: renderFile }\n\t  },\n\t  store_content:\t\t/* file content in gitty */\n\t  { name: \"store_content\",\n\t    display: 'file',\n\t    source: storeContent.ttAdapter(),\n\t    templates: { suggestion: renderStoreSourceLine }\n\t  },\n\t  predicates:\t\t\t/* built-in and library predicates */\n\t  { name: \"predicates\",\n\t    display: function(p) {\n\t      return p.name+\"/\"+p.arity;\n\t    },\n\t    source: predicateMatcher,\n\t    templates: { suggestion: renderPredicate }\n\t  },\n\t  users:\t\t\t/* Users (profiles) */\n\t  { name: \"users\",\n\t    display: \"name\",\n\t    source: users.ttAdapter(),\n\t    templates: { suggestion: renderUser }\n\t  }\n\t};\n\n\t// Get the actual query string exchanged between\n\t// typeahead and Bloodhound.\n\tvar of = typeaheadProperties.sources.source;\n\ttypeaheadProperties.sources.source = function(q, cb) {\n\t  currentFile = null;\n\t  currentAlias = null;\n\t  sourceRE = new RegExp(RegExp.escape(q));\n\t  return of(q, cb);\n\t}\n\n\t/**\n\t * Assemble the sources\n\t */\n\n\tfunction ttSources(from) {\n\t  var sources = [];\n\t  var src = from.replace(/\\s+/g, ' ').split(\" \");\n\n\t  for(var i=0; i<src.length; i++) {\n\t    sources.push(typeaheadProperties[src[i]]);\n\t  }\n\n\t  return sources;\n\t}\n\n\t\t /*******************************\n\t\t *\t     TYPEAHEAD\t\t*\n\t\t *******************************/\n\n\telem.typeahead({ minLength: 2,\n\t\t\t highlight: true\n\t\t       },\n\t\t       ttSources(elem.data(\"search-in\")))\n\t  .on('typeahead:selected typeahead:autocompleted',\n\t      function(ev, datum) {\n\n\t\tif ( options.search == false ) {\n\t\t  elem.data(\"json-value\", datum);\n\t\t} else {\n\t\t  if ( datum.type == \"store\" ) {\n\t\t    if ( datum.query ) {\n\t\t      datum.regex = new RegExp(RegExp.escape(datum.query), \"g\");\n\t\t      datum.showAllMatches = true;\n\t\t    }\n\t\t    $(ev.target).closest(\".swish\").swish('playFile', datum);\n\t\t  } else if ( datum.arity !== undefined ) {\n\t\t    $(\".swish-event-receiver\").trigger(\"pldoc\", datum);\n\t\t  } else if ( datum.editor !== undefined &&\n\t\t\t      datum.line !== undefined ) {\n\t\t    $(datum.editor).prologEditor('gotoLine', datum.line,\n\t\t\t\t\t\t { regex: datum.regex,\n\t\t\t\t\t\t   showAllMatches: true\n\t\t\t\t\t\t });\n\t\t  } else if ( datum.alias !== undefined ) {\n\t\t    var url = encodeURI(\"/\"+datum.alias+\n\t\t\t\t\t\"/\"+datum.file+\n\t\t\t\t\t\".\"+datum.ext);\n\t\t    var play = { url:url, line:datum.line };\n\n\t\t    if ( datum.query ) {\n\t\t      play.regex = new RegExp(RegExp.escape(datum.query), \"g\");\n\t\t      play.showAllMatches = true;\n\t\t    }\n\n\t\t    $(ev.target).closest(\".swish\").swish('playURL', play);\n\t\t  } else {\n\t\t    elem.data(\"json-value\", datum);\n\t\t    console.log(elem.data(\"json-value\"));\n\t\t  }\n\t\t}\n\t      });\n\n\tif ( options.search != false ) {\n\t  elem.closest(\"form\").submit(function(ev) {\n\t    var data = elem.data(\"json-value\");\n\t    var str  = elem.val();\n\n\t    if ( !(data && data.datum && data.datum.label == str) )\n\t      data = str;\n\n\t    elem.val(\"\");\n\t    elem.data(\"json-value\", null);\n\n\t    elem.search('search', data);\n\n\t    return false;\n\t  });\n\t}\n      });\n    },\n\n    /**\n     * Search for the a given query.\n     *\n     * @param {String|Object} q specifies the search target. If it is a\n     * string, no autocompletion was performed.  If it is an object, it\n     * is the object returned by Bloodhound\n     */\n    search: function(q) {\n      alert(\"Full search not yet implemented\\n\"+\n\t    \"Please select from auto completion list\");\n    }\n  }; // methods\n\n  function bloodHoundURL(url, query) {\n    var url = url.replace('%QUERY',\n\t\t\t  encodeURIComponent(query));\n    var match = $(\"label.active > input[name=smatch]\").val();\n    if ( match )\n      url += \"&match=\"+match;\n\n    return url;\n  }\n\n  /**\n   * <Class description>\n   *\n   * @class search\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.search = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\nRegExp.escape = function(string) {\n  return string.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')\n};\n\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// This is CodeMirror (https://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define('cm/lib/codemirror',factory) :\n  (global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n  // Kludges for bugs and behavior differences that can't be feature\n  // detected are enabled based on userAgent etc sniffing.\n  var userAgent = navigator.userAgent;\n  var platform = navigator.platform;\n\n  var gecko = /gecko\\/\\d/i.test(userAgent);\n  var ie_upto10 = /MSIE \\d/.test(userAgent);\n  var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n  var edge = /Edge\\/(\\d+)/.exec(userAgent);\n  var ie = ie_upto10 || ie_11up || edge;\n  var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n  var webkit = !edge && /WebKit\\//.test(userAgent);\n  var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n  var chrome = !edge && /Chrome\\//.test(userAgent);\n  var presto = /Opera\\//.test(userAgent);\n  var safari = /Apple Computer/.test(navigator.vendor);\n  var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n  var phantom = /PhantomJS/.test(userAgent);\n\n  var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent);\n  var android = /Android/.test(userAgent);\n  // This is woefully incomplete. Suggestions for alternative methods welcome.\n  var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n  var mac = ios || /Mac/.test(platform);\n  var chromeOS = /\\bCrOS\\b/.test(userAgent);\n  var windows = /win/i.test(platform);\n\n  var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n  if (presto_version) { presto_version = Number(presto_version[1]); }\n  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n  var captureRightClick = gecko || (ie && ie_version >= 9);\n\n  function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n  var rmClass = function(node, cls) {\n    var current = node.className;\n    var match = classTest(cls).exec(current);\n    if (match) {\n      var after = current.slice(match.index + match[0].length);\n      node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n    }\n  };\n\n  function removeChildren(e) {\n    for (var count = e.childNodes.length; count > 0; --count)\n      { e.removeChild(e.firstChild); }\n    return e\n  }\n\n  function removeChildrenAndAdd(parent, e) {\n    return removeChildren(parent).appendChild(e)\n  }\n\n  function elt(tag, content, className, style) {\n    var e = document.createElement(tag);\n    if (className) { e.className = className; }\n    if (style) { e.style.cssText = style; }\n    if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n    else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n    return e\n  }\n  // wrapper for elt, which removes the elt from the accessibility tree\n  function eltP(tag, content, className, style) {\n    var e = elt(tag, content, className, style);\n    e.setAttribute(\"role\", \"presentation\");\n    return e\n  }\n\n  var range;\n  if (document.createRange) { range = function(node, start, end, endNode) {\n    var r = document.createRange();\n    r.setEnd(endNode || node, end);\n    r.setStart(node, start);\n    return r\n  }; }\n  else { range = function(node, start, end) {\n    var r = document.body.createTextRange();\n    try { r.moveToElementText(node.parentNode); }\n    catch(e) { return r }\n    r.collapse(true);\n    r.moveEnd(\"character\", end);\n    r.moveStart(\"character\", start);\n    return r\n  }; }\n\n  function contains(parent, child) {\n    if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n      { child = child.parentNode; }\n    if (parent.contains)\n      { return parent.contains(child) }\n    do {\n      if (child.nodeType == 11) { child = child.host; }\n      if (child == parent) { return true }\n    } while (child = child.parentNode)\n  }\n\n  function activeElt() {\n    // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n    // IE < 10 will throw when accessed while the page is loading or in an iframe.\n    // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n    var activeElement;\n    try {\n      activeElement = document.activeElement;\n    } catch(e) {\n      activeElement = document.body || null;\n    }\n    while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n      { activeElement = activeElement.shadowRoot.activeElement; }\n    return activeElement\n  }\n\n  function addClass(node, cls) {\n    var current = node.className;\n    if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n  }\n  function joinClasses(a, b) {\n    var as = a.split(\" \");\n    for (var i = 0; i < as.length; i++)\n      { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n    return b\n  }\n\n  var selectInput = function(node) { node.select(); };\n  if (ios) // Mobile Safari apparently has a bug where select() is broken.\n    { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n  else if (ie) // Suppress mysterious IE10 errors\n    { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n  function bind(f) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    return function(){return f.apply(null, args)}\n  }\n\n  function copyObj(obj, target, overwrite) {\n    if (!target) { target = {}; }\n    for (var prop in obj)\n      { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n        { target[prop] = obj[prop]; } }\n    return target\n  }\n\n  // Counts the column offset in a string, taking tabs into account.\n  // Used mostly to find indentation.\n  function countColumn(string, end, tabSize, startIndex, startValue) {\n    if (end == null) {\n      end = string.search(/[^\\s\\u00a0]/);\n      if (end == -1) { end = string.length; }\n    }\n    for (var i = startIndex || 0, n = startValue || 0;;) {\n      var nextTab = string.indexOf(\"\\t\", i);\n      if (nextTab < 0 || nextTab >= end)\n        { return n + (end - i) }\n      n += nextTab - i;\n      n += tabSize - (n % tabSize);\n      i = nextTab + 1;\n    }\n  }\n\n  var Delayed = function() {this.id = null;};\n  Delayed.prototype.set = function (ms, f) {\n    clearTimeout(this.id);\n    this.id = setTimeout(f, ms);\n  };\n\n  function indexOf(array, elt) {\n    for (var i = 0; i < array.length; ++i)\n      { if (array[i] == elt) { return i } }\n    return -1\n  }\n\n  // Number of pixels added to scroller and sizer to hide scrollbar\n  var scrollerGap = 30;\n\n  // Returned or thrown by various protocols to signal 'I'm not\n  // handling this'.\n  var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n  // Reused option objects for setSelection & friends\n  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n  // The inverse of countColumn -- find the offset that corresponds to\n  // a particular column.\n  function findColumn(string, goal, tabSize) {\n    for (var pos = 0, col = 0;;) {\n      var nextTab = string.indexOf(\"\\t\", pos);\n      if (nextTab == -1) { nextTab = string.length; }\n      var skipped = nextTab - pos;\n      if (nextTab == string.length || col + skipped >= goal)\n        { return pos + Math.min(skipped, goal - col) }\n      col += nextTab - pos;\n      col += tabSize - (col % tabSize);\n      pos = nextTab + 1;\n      if (col >= goal) { return pos }\n    }\n  }\n\n  var spaceStrs = [\"\"];\n  function spaceStr(n) {\n    while (spaceStrs.length <= n)\n      { spaceStrs.push(lst(spaceStrs) + \" \"); }\n    return spaceStrs[n]\n  }\n\n  function lst(arr) { return arr[arr.length-1] }\n\n  function map(array, f) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n    return out\n  }\n\n  function insertSorted(array, value, score) {\n    var pos = 0, priority = score(value);\n    while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n    array.splice(pos, 0, value);\n  }\n\n  function nothing() {}\n\n  function createObj(base, props) {\n    var inst;\n    if (Object.create) {\n      inst = Object.create(base);\n    } else {\n      nothing.prototype = base;\n      inst = new nothing();\n    }\n    if (props) { copyObj(props, inst); }\n    return inst\n  }\n\n  var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n  function isWordCharBasic(ch) {\n    return /\\w/.test(ch) || ch > \"\\x80\" &&\n      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n  }\n  function isWordChar(ch, helper) {\n    if (!helper) { return isWordCharBasic(ch) }\n    if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n    return helper.test(ch)\n  }\n\n  function isEmpty(obj) {\n    for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n    return true\n  }\n\n  // Extending unicode characters. A series of a non-extending char +\n  // any number of extending chars is treated as a single unit as far\n  // as editing and measuring is concerned. This is not fully correct,\n  // since some scripts/fonts/browsers also treat other configurations\n  // of code points as a group.\n  var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n  // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n  function skipExtendingChars(str, pos, dir) {\n    while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n    return pos\n  }\n\n  // Returns the value from the range [`from`; `to`] that satisfies\n  // `pred` and is closest to `from`. Assumes that at least `to`\n  // satisfies `pred`. Supports `from` being greater than `to`.\n  function findFirst(pred, from, to) {\n    // At any point we are certain `to` satisfies `pred`, don't know\n    // whether `from` does.\n    var dir = from > to ? -1 : 1;\n    for (;;) {\n      if (from == to) { return from }\n      var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n      if (mid == from) { return pred(mid) ? from : to }\n      if (pred(mid)) { to = mid; }\n      else { from = mid + dir; }\n    }\n  }\n\n  // The display handles the DOM integration, both for input reading\n  // and content drawing. It holds references to DOM nodes and\n  // display-related state.\n\n  function Display(place, doc, input) {\n    var d = this;\n    this.input = input;\n\n    // Covers bottom-right square when both scrollbars are present.\n    d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n    d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Covers bottom of gutter when coverGutterNextToScrollbar is on\n    // and h scrollbar is present.\n    d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n    d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Will contain the actual code, positioned to cover the viewport.\n    d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n    // Elements are added to these to represent selection and cursors.\n    d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n    d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n    // A visibility: hidden element used to find the size of things.\n    d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n    // When lines outside of the viewport are measured, they are drawn in this.\n    d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n    // Wraps everything that needs to exist inside the vertically-padded coordinate system\n    d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n                      null, \"position: relative; outline: none\");\n    var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n    // Moved around its parent to cover visible view.\n    d.mover = elt(\"div\", [lines], null, \"position: relative\");\n    // Set to the height of the document, allowing scrolling.\n    d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n    d.sizerWidth = null;\n    // Behavior of elts with overflow: auto and padding is\n    // inconsistent across browsers. This is used to ensure the\n    // scrollable area is big enough.\n    d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n    // Will contain the gutters, if any.\n    d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n    d.lineGutter = null;\n    // Actual scrollable element.\n    d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n    d.scroller.setAttribute(\"tabIndex\", \"-1\");\n    // The element in which the editor lives.\n    d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n    if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n    if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n    if (place) {\n      if (place.appendChild) { place.appendChild(d.wrapper); }\n      else { place(d.wrapper); }\n    }\n\n    // Current rendered range (may be bigger than the view window).\n    d.viewFrom = d.viewTo = doc.first;\n    d.reportedViewFrom = d.reportedViewTo = doc.first;\n    // Information about the rendered lines.\n    d.view = [];\n    d.renderedView = null;\n    // Holds info about a single rendered line when it was rendered\n    // for measurement, while not in view.\n    d.externalMeasured = null;\n    // Empty space (in pixels) above the view\n    d.viewOffset = 0;\n    d.lastWrapHeight = d.lastWrapWidth = 0;\n    d.updateLineNumbers = null;\n\n    d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n    d.scrollbarsClipped = false;\n\n    // Used to only resize the line number gutter when necessary (when\n    // the amount of lines crosses a boundary that makes its width change)\n    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n    // Set to true when a non-horizontal-scrolling line widget is\n    // added. As an optimization, line widget aligning is skipped when\n    // this is false.\n    d.alignWidgets = false;\n\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n    // Tracks the maximum line length so that the horizontal scrollbar\n    // can be kept static when scrolling.\n    d.maxLine = null;\n    d.maxLineLength = 0;\n    d.maxLineChanged = false;\n\n    // Used for measuring wheel scrolling granularity\n    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n    // True when shift is held down.\n    d.shift = false;\n\n    // Used to track whether anything happened since the context menu\n    // was opened.\n    d.selForContextMenu = null;\n\n    d.activeTouch = null;\n\n    input.init(d);\n  }\n\n  // Find the line object corresponding to the given line number.\n  function getLine(doc, n) {\n    n -= doc.first;\n    if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n    var chunk = doc;\n    while (!chunk.lines) {\n      for (var i = 0;; ++i) {\n        var child = chunk.children[i], sz = child.chunkSize();\n        if (n < sz) { chunk = child; break }\n        n -= sz;\n      }\n    }\n    return chunk.lines[n]\n  }\n\n  // Get the part of a document between two positions, as an array of\n  // strings.\n  function getBetween(doc, start, end) {\n    var out = [], n = start.line;\n    doc.iter(start.line, end.line + 1, function (line) {\n      var text = line.text;\n      if (n == end.line) { text = text.slice(0, end.ch); }\n      if (n == start.line) { text = text.slice(start.ch); }\n      out.push(text);\n      ++n;\n    });\n    return out\n  }\n  // Get the lines between from and to, as array of strings.\n  function getLines(doc, from, to) {\n    var out = [];\n    doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n    return out\n  }\n\n  // Update the height of a line, propagating the height change\n  // upwards to parent nodes.\n  function updateLineHeight(line, height) {\n    var diff = height - line.height;\n    if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n  }\n\n  // Given a line object, find its line number by walking up through\n  // its parent links.\n  function lineNo(line) {\n    if (line.parent == null) { return null }\n    var cur = line.parent, no = indexOf(cur.lines, line);\n    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n      for (var i = 0;; ++i) {\n        if (chunk.children[i] == cur) { break }\n        no += chunk.children[i].chunkSize();\n      }\n    }\n    return no + cur.first\n  }\n\n  // Find the line at the given vertical position, using the height\n  // information in the document tree.\n  function lineAtHeight(chunk, h) {\n    var n = chunk.first;\n    outer: do {\n      for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n        var child = chunk.children[i$1], ch = child.height;\n        if (h < ch) { chunk = child; continue outer }\n        h -= ch;\n        n += child.chunkSize();\n      }\n      return n\n    } while (!chunk.lines)\n    var i = 0;\n    for (; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i], lh = line.height;\n      if (h < lh) { break }\n      h -= lh;\n    }\n    return n + i\n  }\n\n  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n  function lineNumberFor(options, i) {\n    return String(options.lineNumberFormatter(i + options.firstLineNumber))\n  }\n\n  // A Pos instance represents a position within the text.\n  function Pos(line, ch, sticky) {\n    if ( sticky === void 0 ) sticky = null;\n\n    if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n    this.line = line;\n    this.ch = ch;\n    this.sticky = sticky;\n  }\n\n  // Compare two positions, return 0 if they are the same, a negative\n  // number when a is less, and a positive number otherwise.\n  function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n  function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n  function copyPos(x) {return Pos(x.line, x.ch)}\n  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n  function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n  // Most of the external API clips given positions to make sure they\n  // actually exist within the document.\n  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n  function clipPos(doc, pos) {\n    if (pos.line < doc.first) { return Pos(doc.first, 0) }\n    var last = doc.first + doc.size - 1;\n    if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n    return clipToLen(pos, getLine(doc, pos.line).text.length)\n  }\n  function clipToLen(pos, linelen) {\n    var ch = pos.ch;\n    if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n    else if (ch < 0) { return Pos(pos.line, 0) }\n    else { return pos }\n  }\n  function clipPosArray(doc, array) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n    return out\n  }\n\n  // Optimize some code when these features are not used.\n  var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n  function seeReadOnlySpans() {\n    sawReadOnlySpans = true;\n  }\n\n  function seeCollapsedSpans() {\n    sawCollapsedSpans = true;\n  }\n\n  // TEXTMARKER SPANS\n\n  function MarkedSpan(marker, from, to) {\n    this.marker = marker;\n    this.from = from; this.to = to;\n  }\n\n  // Search an array of spans for a span matching the given marker.\n  function getMarkedSpanFor(spans, marker) {\n    if (spans) { for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.marker == marker) { return span }\n    } }\n  }\n  // Remove a span from an array, returning undefined if no spans are\n  // left (we don't store arrays for lines without spans).\n  function removeMarkedSpan(spans, span) {\n    var r;\n    for (var i = 0; i < spans.length; ++i)\n      { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n    return r\n  }\n  // Add a span to a line.\n  function addMarkedSpan(line, span) {\n    line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n    span.marker.attachLine(line);\n  }\n\n  // Used for the algorithm that adjusts markers for a change in the\n  // document. These functions cut an array of spans at a given\n  // character position, returning an array of remaining chunks (or\n  // undefined if nothing remains).\n  function markedSpansBefore(old, startCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n      if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n      }\n    } }\n    return nw\n  }\n  function markedSpansAfter(old, endCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n      if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n                                              span.to == null ? null : span.to - endCh));\n      }\n    } }\n    return nw\n  }\n\n  // Given a change object, compute the new set of marker spans that\n  // cover the line in which the change took place. Removes spans\n  // entirely within the change, reconnects spans belonging to the\n  // same marker that appear on both sides of the change, and cuts off\n  // spans partially within the change. Returns an array of span\n  // arrays with one element for each line in (after) the change.\n  function stretchSpansOverChange(doc, change) {\n    if (change.full) { return null }\n    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n    if (!oldFirst && !oldLast) { return null }\n\n    var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n    // Get the spans that 'stick out' on both sides\n    var first = markedSpansBefore(oldFirst, startCh, isInsert);\n    var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n    // Next, merge those two ends\n    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n    if (first) {\n      // Fix up .to properties of first\n      for (var i = 0; i < first.length; ++i) {\n        var span = first[i];\n        if (span.to == null) {\n          var found = getMarkedSpanFor(last, span.marker);\n          if (!found) { span.to = startCh; }\n          else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n        }\n      }\n    }\n    if (last) {\n      // Fix up .from in last (or move them into first in case of sameLine)\n      for (var i$1 = 0; i$1 < last.length; ++i$1) {\n        var span$1 = last[i$1];\n        if (span$1.to != null) { span$1.to += offset; }\n        if (span$1.from == null) {\n          var found$1 = getMarkedSpanFor(first, span$1.marker);\n          if (!found$1) {\n            span$1.from = offset;\n            if (sameLine) { (first || (first = [])).push(span$1); }\n          }\n        } else {\n          span$1.from += offset;\n          if (sameLine) { (first || (first = [])).push(span$1); }\n        }\n      }\n    }\n    // Make sure we didn't create any zero-length spans\n    if (first) { first = clearEmptySpans(first); }\n    if (last && last != first) { last = clearEmptySpans(last); }\n\n    var newMarkers = [first];\n    if (!sameLine) {\n      // Fill gap with whole-line-spans\n      var gap = change.text.length - 2, gapMarkers;\n      if (gap > 0 && first)\n        { for (var i$2 = 0; i$2 < first.length; ++i$2)\n          { if (first[i$2].to == null)\n            { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n      for (var i$3 = 0; i$3 < gap; ++i$3)\n        { newMarkers.push(gapMarkers); }\n      newMarkers.push(last);\n    }\n    return newMarkers\n  }\n\n  // Remove spans that are empty and don't have a clearWhenEmpty\n  // option of false.\n  function clearEmptySpans(spans) {\n    for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n        { spans.splice(i--, 1); }\n    }\n    if (!spans.length) { return null }\n    return spans\n  }\n\n  // Used to 'clip' out readOnly ranges when making a change.\n  function removeReadOnlyRanges(doc, from, to) {\n    var markers = null;\n    doc.iter(from.line, to.line + 1, function (line) {\n      if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n        var mark = line.markedSpans[i].marker;\n        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n          { (markers || (markers = [])).push(mark); }\n      } }\n    });\n    if (!markers) { return null }\n    var parts = [{from: from, to: to}];\n    for (var i = 0; i < markers.length; ++i) {\n      var mk = markers[i], m = mk.find(0);\n      for (var j = 0; j < parts.length; ++j) {\n        var p = parts[j];\n        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n          { newParts.push({from: p.from, to: m.from}); }\n        if (dto > 0 || !mk.inclusiveRight && !dto)\n          { newParts.push({from: m.to, to: p.to}); }\n        parts.splice.apply(parts, newParts);\n        j += newParts.length - 3;\n      }\n    }\n    return parts\n  }\n\n  // Connect or disconnect spans from a line.\n  function detachMarkedSpans(line) {\n    var spans = line.markedSpans;\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.detachLine(line); }\n    line.markedSpans = null;\n  }\n  function attachMarkedSpans(line, spans) {\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.attachLine(line); }\n    line.markedSpans = spans;\n  }\n\n  // Helpers used when computing which overlapping collapsed span\n  // counts as the larger one.\n  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n  // Returns a number indicating which of two overlapping collapsed\n  // spans is larger (and thus includes the other). Falls back to\n  // comparing ids when the spans cover exactly the same range.\n  function compareCollapsedMarkers(a, b) {\n    var lenDiff = a.lines.length - b.lines.length;\n    if (lenDiff != 0) { return lenDiff }\n    var aPos = a.find(), bPos = b.find();\n    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n    if (fromCmp) { return -fromCmp }\n    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n    if (toCmp) { return toCmp }\n    return b.id - a.id\n  }\n\n  // Find out whether a line ends or starts in a collapsed span. If\n  // so, return the marker for that span.\n  function collapsedSpanAtSide(line, start) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n        { found = sp.marker; }\n    } }\n    return found\n  }\n  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n  function collapsedSpanAround(line, ch) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n    } }\n    return found\n  }\n\n  // Test whether there exists a collapsed span that partially\n  // overlaps (covers the start or end, but not both) of a new span.\n  // Such overlap is not allowed.\n  function conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) {\n    var line = getLine(doc, lineNo$$1);\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      var found = sp.marker.find(0);\n      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n      if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n          fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n        { return true }\n    } }\n  }\n\n  // A visual line is a line as drawn on the screen. Folding, for\n  // example, can cause multiple logical lines to appear on the same\n  // visual line. This finds the start of the visual line that the\n  // given line is part of (usually that is the line itself).\n  function visualLine(line) {\n    var merged;\n    while (merged = collapsedSpanAtStart(line))\n      { line = merged.find(-1, true).line; }\n    return line\n  }\n\n  function visualLineEnd(line) {\n    var merged;\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return line\n  }\n\n  // Returns an array of logical lines that continue the visual line\n  // started by the argument, or undefined if there are no such lines.\n  function visualLineContinued(line) {\n    var merged, lines;\n    while (merged = collapsedSpanAtEnd(line)) {\n      line = merged.find(1, true).line\n      ;(lines || (lines = [])).push(line);\n    }\n    return lines\n  }\n\n  // Get the line number of the start of the visual line that the\n  // given line number is part of.\n  function visualLineNo(doc, lineN) {\n    var line = getLine(doc, lineN), vis = visualLine(line);\n    if (line == vis) { return lineN }\n    return lineNo(vis)\n  }\n\n  // Get the line number of the start of the next visual line after\n  // the given line.\n  function visualLineEndNo(doc, lineN) {\n    if (lineN > doc.lastLine()) { return lineN }\n    var line = getLine(doc, lineN), merged;\n    if (!lineIsHidden(doc, line)) { return lineN }\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return lineNo(line) + 1\n  }\n\n  // Compute whether a line is hidden. Lines count as hidden when they\n  // are part of a visual line that starts with another line, or when\n  // they are entirely covered by collapsed, non-widget span.\n  function lineIsHidden(doc, line) {\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      if (sp.from == null) { return true }\n      if (sp.marker.widgetNode) { continue }\n      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n        { return true }\n    } }\n  }\n  function lineIsHiddenInner(doc, line, span) {\n    if (span.to == null) {\n      var end = span.marker.find(1, true);\n      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n    }\n    if (span.marker.inclusiveRight && span.to == line.text.length)\n      { return true }\n    for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n      sp = line.markedSpans[i];\n      if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n          (sp.to == null || sp.to != span.from) &&\n          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n          lineIsHiddenInner(doc, line, sp)) { return true }\n    }\n  }\n\n  // Find the height above the given line.\n  function heightAtLine(lineObj) {\n    lineObj = visualLine(lineObj);\n\n    var h = 0, chunk = lineObj.parent;\n    for (var i = 0; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i];\n      if (line == lineObj) { break }\n      else { h += line.height; }\n    }\n    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n      for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n        var cur = p.children[i$1];\n        if (cur == chunk) { break }\n        else { h += cur.height; }\n      }\n    }\n    return h\n  }\n\n  // Compute the character length of a line, taking into account\n  // collapsed ranges (see markText) that might hide parts, and join\n  // other lines onto it.\n  function lineLength(line) {\n    if (line.height == 0) { return 0 }\n    var len = line.text.length, merged, cur = line;\n    while (merged = collapsedSpanAtStart(cur)) {\n      var found = merged.find(0, true);\n      cur = found.from.line;\n      len += found.from.ch - found.to.ch;\n    }\n    cur = line;\n    while (merged = collapsedSpanAtEnd(cur)) {\n      var found$1 = merged.find(0, true);\n      len -= cur.text.length - found$1.from.ch;\n      cur = found$1.to.line;\n      len += cur.text.length - found$1.to.ch;\n    }\n    return len\n  }\n\n  // Find the longest line in the document.\n  function findMaxLine(cm) {\n    var d = cm.display, doc = cm.doc;\n    d.maxLine = getLine(doc, doc.first);\n    d.maxLineLength = lineLength(d.maxLine);\n    d.maxLineChanged = true;\n    doc.iter(function (line) {\n      var len = lineLength(line);\n      if (len > d.maxLineLength) {\n        d.maxLineLength = len;\n        d.maxLine = line;\n      }\n    });\n  }\n\n  // BIDI HELPERS\n\n  function iterateBidiSections(order, from, to, f) {\n    if (!order) { return f(from, to, \"ltr\", 0) }\n    var found = false;\n    for (var i = 0; i < order.length; ++i) {\n      var part = order[i];\n      if (part.from < to && part.to > from || from == to && part.to == from) {\n        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n        found = true;\n      }\n    }\n    if (!found) { f(from, to, \"ltr\"); }\n  }\n\n  var bidiOther = null;\n  function getBidiPartAt(order, ch, sticky) {\n    var found;\n    bidiOther = null;\n    for (var i = 0; i < order.length; ++i) {\n      var cur = order[i];\n      if (cur.from < ch && cur.to > ch) { return i }\n      if (cur.to == ch) {\n        if (cur.from != cur.to && sticky == \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n      if (cur.from == ch) {\n        if (cur.from != cur.to && sticky != \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n    }\n    return found != null ? found : bidiOther\n  }\n\n  // Bidirectional ordering algorithm\n  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n  // that this (partially) implements.\n\n  // One-char codes used for character types:\n  // L (L):   Left-to-Right\n  // R (R):   Right-to-Left\n  // r (AL):  Right-to-Left Arabic\n  // 1 (EN):  European Number\n  // + (ES):  European Number Separator\n  // % (ET):  European Number Terminator\n  // n (AN):  Arabic Number\n  // , (CS):  Common Number Separator\n  // m (NSM): Non-Spacing Mark\n  // b (BN):  Boundary Neutral\n  // s (B):   Paragraph Separator\n  // t (S):   Segment Separator\n  // w (WS):  Whitespace\n  // N (ON):  Other Neutrals\n\n  // Returns null if characters are ordered as they appear\n  // (left-to-right), or an array of sections ({from, to, level}\n  // objects) in the order in which they occur visually.\n  var bidiOrdering = (function() {\n    // Character types for codepoints 0 to 0xff\n    var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n    // Character types for codepoints 0x600 to 0x6f9\n    var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n    function charType(code) {\n      if (code <= 0xf7) { return lowTypes.charAt(code) }\n      else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n      else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n      else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n      else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n      else if (code == 0x200c) { return \"b\" }\n      else { return \"L\" }\n    }\n\n    var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n    function BidiSpan(level, from, to) {\n      this.level = level;\n      this.from = from; this.to = to;\n    }\n\n    return function(str, direction) {\n      var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n      if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n      var len = str.length, types = [];\n      for (var i = 0; i < len; ++i)\n        { types.push(charType(str.charCodeAt(i))); }\n\n      // W1. Examine each non-spacing mark (NSM) in the level run, and\n      // change the type of the NSM to the type of the previous\n      // character. If the NSM is at the start of the level run, it will\n      // get the type of sor.\n      for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n        var type = types[i$1];\n        if (type == \"m\") { types[i$1] = prev; }\n        else { prev = type; }\n      }\n\n      // W2. Search backwards from each instance of a European number\n      // until the first strong type (R, L, AL, or sor) is found. If an\n      // AL is found, change the type of the European number to Arabic\n      // number.\n      // W3. Change all ALs to R.\n      for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n        var type$1 = types[i$2];\n        if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n        else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n      }\n\n      // W4. A single European separator between two European numbers\n      // changes to a European number. A single common separator between\n      // two numbers of the same type changes to that type.\n      for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n        var type$2 = types[i$3];\n        if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n        else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n                 (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n        prev$1 = type$2;\n      }\n\n      // W5. A sequence of European terminators adjacent to European\n      // numbers changes to all European numbers.\n      // W6. Otherwise, separators and terminators change to Other\n      // Neutral.\n      for (var i$4 = 0; i$4 < len; ++i$4) {\n        var type$3 = types[i$4];\n        if (type$3 == \",\") { types[i$4] = \"N\"; }\n        else if (type$3 == \"%\") {\n          var end = (void 0);\n          for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n          var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n          for (var j = i$4; j < end; ++j) { types[j] = replace; }\n          i$4 = end - 1;\n        }\n      }\n\n      // W7. Search backwards from each instance of a European number\n      // until the first strong type (R, L, or sor) is found. If an L is\n      // found, then change the type of the European number to L.\n      for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n        var type$4 = types[i$5];\n        if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n        else if (isStrong.test(type$4)) { cur$1 = type$4; }\n      }\n\n      // N1. A sequence of neutrals takes the direction of the\n      // surrounding strong text if the text on both sides has the same\n      // direction. European and Arabic numbers act as if they were R in\n      // terms of their influence on neutrals. Start-of-level-run (sor)\n      // and end-of-level-run (eor) are used at level run boundaries.\n      // N2. Any remaining neutrals take the embedding direction.\n      for (var i$6 = 0; i$6 < len; ++i$6) {\n        if (isNeutral.test(types[i$6])) {\n          var end$1 = (void 0);\n          for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n          var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n          var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n          var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n          for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n          i$6 = end$1 - 1;\n        }\n      }\n\n      // Here we depart from the documented algorithm, in order to avoid\n      // building up an actual levels array. Since there are only three\n      // levels (0, 1, 2) in an implementation that doesn't take\n      // explicit embedding into account, we can build up the order on\n      // the fly, without following the level-based algorithm.\n      var order = [], m;\n      for (var i$7 = 0; i$7 < len;) {\n        if (countsAsLeft.test(types[i$7])) {\n          var start = i$7;\n          for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n          order.push(new BidiSpan(0, start, i$7));\n        } else {\n          var pos = i$7, at = order.length;\n          for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n          for (var j$2 = pos; j$2 < i$7;) {\n            if (countsAsNum.test(types[j$2])) {\n              if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); }\n              var nstart = j$2;\n              for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n              order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n              pos = j$2;\n            } else { ++j$2; }\n          }\n          if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n        }\n      }\n      if (direction == \"ltr\") {\n        if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n          order[0].from = m[0].length;\n          order.unshift(new BidiSpan(0, 0, m[0].length));\n        }\n        if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n          lst(order).to -= m[0].length;\n          order.push(new BidiSpan(0, len - m[0].length, len));\n        }\n      }\n\n      return direction == \"rtl\" ? order.reverse() : order\n    }\n  })();\n\n  // Get the bidi ordering for the given line (and cache it). Returns\n  // false for lines that are fully left-to-right, and an array of\n  // BidiSpan objects otherwise.\n  function getOrder(line, direction) {\n    var order = line.order;\n    if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n    return order\n  }\n\n  // EVENT HANDLING\n\n  // Lightweight event framework. on/off also work on DOM nodes,\n  // registering native DOM handlers.\n\n  var noHandlers = [];\n\n  var on = function(emitter, type, f) {\n    if (emitter.addEventListener) {\n      emitter.addEventListener(type, f, false);\n    } else if (emitter.attachEvent) {\n      emitter.attachEvent(\"on\" + type, f);\n    } else {\n      var map$$1 = emitter._handlers || (emitter._handlers = {});\n      map$$1[type] = (map$$1[type] || noHandlers).concat(f);\n    }\n  };\n\n  function getHandlers(emitter, type) {\n    return emitter._handlers && emitter._handlers[type] || noHandlers\n  }\n\n  function off(emitter, type, f) {\n    if (emitter.removeEventListener) {\n      emitter.removeEventListener(type, f, false);\n    } else if (emitter.detachEvent) {\n      emitter.detachEvent(\"on\" + type, f);\n    } else {\n      var map$$1 = emitter._handlers, arr = map$$1 && map$$1[type];\n      if (arr) {\n        var index = indexOf(arr, f);\n        if (index > -1)\n          { map$$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n      }\n    }\n  }\n\n  function signal(emitter, type /*, values...*/) {\n    var handlers = getHandlers(emitter, type);\n    if (!handlers.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2);\n    for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n  }\n\n  // The DOM events that CodeMirror handles can be overridden by\n  // registering a (non-DOM) handler on the editor for the event name,\n  // and preventDefault-ing the event in that handler.\n  function signalDOMEvent(cm, e, override) {\n    if (typeof e == \"string\")\n      { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n    signal(cm, override || e.type, cm, e);\n    return e_defaultPrevented(e) || e.codemirrorIgnore\n  }\n\n  function signalCursorActivity(cm) {\n    var arr = cm._handlers && cm._handlers.cursorActivity;\n    if (!arr) { return }\n    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n    for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n      { set.push(arr[i]); } }\n  }\n\n  function hasHandler(emitter, type) {\n    return getHandlers(emitter, type).length > 0\n  }\n\n  // Add on and off methods to a constructor's prototype, to make\n  // registering events on such objects more convenient.\n  function eventMixin(ctor) {\n    ctor.prototype.on = function(type, f) {on(this, type, f);};\n    ctor.prototype.off = function(type, f) {off(this, type, f);};\n  }\n\n  // Due to the fact that we still support jurassic IE versions, some\n  // compatibility wrappers are needed.\n\n  function e_preventDefault(e) {\n    if (e.preventDefault) { e.preventDefault(); }\n    else { e.returnValue = false; }\n  }\n  function e_stopPropagation(e) {\n    if (e.stopPropagation) { e.stopPropagation(); }\n    else { e.cancelBubble = true; }\n  }\n  function e_defaultPrevented(e) {\n    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n  }\n  function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n  function e_target(e) {return e.target || e.srcElement}\n  function e_button(e) {\n    var b = e.which;\n    if (b == null) {\n      if (e.button & 1) { b = 1; }\n      else if (e.button & 2) { b = 3; }\n      else if (e.button & 4) { b = 2; }\n    }\n    if (mac && e.ctrlKey && b == 1) { b = 3; }\n    return b\n  }\n\n  // Detect drag-and-drop\n  var dragAndDrop = function() {\n    // There is *some* kind of drag-and-drop support in IE6-8, but I\n    // couldn't get it to work yet.\n    if (ie && ie_version < 9) { return false }\n    var div = elt('div');\n    return \"draggable\" in div || \"dragDrop\" in div\n  }();\n\n  var zwspSupported;\n  function zeroWidthElement(measure) {\n    if (zwspSupported == null) {\n      var test = elt(\"span\", \"\\u200b\");\n      removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n      if (measure.firstChild.offsetHeight != 0)\n        { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n    }\n    var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n      elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n    node.setAttribute(\"cm-text\", \"\");\n    return node\n  }\n\n  // Feature-detect IE's crummy client rect reporting for bidi text\n  var badBidiRects;\n  function hasBadBidiRects(measure) {\n    if (badBidiRects != null) { return badBidiRects }\n    var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n    var r0 = range(txt, 0, 1).getBoundingClientRect();\n    var r1 = range(txt, 1, 2).getBoundingClientRect();\n    removeChildren(measure);\n    if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n    return badBidiRects = (r1.right - r0.right < 3)\n  }\n\n  // See if \"\".split is the broken IE version, if so, provide an\n  // alternative way to split lines.\n  var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n    var pos = 0, result = [], l = string.length;\n    while (pos <= l) {\n      var nl = string.indexOf(\"\\n\", pos);\n      if (nl == -1) { nl = string.length; }\n      var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n      var rt = line.indexOf(\"\\r\");\n      if (rt != -1) {\n        result.push(line.slice(0, rt));\n        pos += rt + 1;\n      } else {\n        result.push(line);\n        pos = nl + 1;\n      }\n    }\n    return result\n  } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n  var hasSelection = window.getSelection ? function (te) {\n    try { return te.selectionStart != te.selectionEnd }\n    catch(e) { return false }\n  } : function (te) {\n    var range$$1;\n    try {range$$1 = te.ownerDocument.selection.createRange();}\n    catch(e) {}\n    if (!range$$1 || range$$1.parentElement() != te) { return false }\n    return range$$1.compareEndPoints(\"StartToEnd\", range$$1) != 0\n  };\n\n  var hasCopyEvent = (function () {\n    var e = elt(\"div\");\n    if (\"oncopy\" in e) { return true }\n    e.setAttribute(\"oncopy\", \"return;\");\n    return typeof e.oncopy == \"function\"\n  })();\n\n  var badZoomedRects = null;\n  function hasBadZoomedRects(measure) {\n    if (badZoomedRects != null) { return badZoomedRects }\n    var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n    var normal = node.getBoundingClientRect();\n    var fromRange = range(node, 0, 1).getBoundingClientRect();\n    return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n  }\n\n  // Known modes, by name and by MIME\n  var modes = {}, mimeModes = {};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  function defineMode(name, mode) {\n    if (arguments.length > 2)\n      { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n    modes[name] = mode;\n  }\n\n  function defineMIME(mime, spec) {\n    mimeModes[mime] = spec;\n  }\n\n  // Given a MIME type, a {name, ...options} config object, or a name\n  // string, return a mode config object.\n  function resolveMode(spec) {\n    if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n      spec = mimeModes[spec];\n    } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n      var found = mimeModes[spec.name];\n      if (typeof found == \"string\") { found = {name: found}; }\n      spec = createObj(found, spec);\n      spec.name = found.name;\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n      return resolveMode(\"application/xml\")\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n      return resolveMode(\"application/json\")\n    }\n    if (typeof spec == \"string\") { return {name: spec} }\n    else { return spec || {name: \"null\"} }\n  }\n\n  // Given a mode spec (anything that resolveMode accepts), find and\n  // initialize an actual mode object.\n  function getMode(options, spec) {\n    spec = resolveMode(spec);\n    var mfactory = modes[spec.name];\n    if (!mfactory) { return getMode(options, \"text/plain\") }\n    var modeObj = mfactory(options, spec);\n    if (modeExtensions.hasOwnProperty(spec.name)) {\n      var exts = modeExtensions[spec.name];\n      for (var prop in exts) {\n        if (!exts.hasOwnProperty(prop)) { continue }\n        if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n        modeObj[prop] = exts[prop];\n      }\n    }\n    modeObj.name = spec.name;\n    if (spec.helperType) { modeObj.helperType = spec.helperType; }\n    if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n      { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n    return modeObj\n  }\n\n  // This can be used to attach properties to mode objects from\n  // outside the actual mode definition.\n  var modeExtensions = {};\n  function extendMode(mode, properties) {\n    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n    copyObj(properties, exts);\n  }\n\n  function copyState(mode, state) {\n    if (state === true) { return state }\n    if (mode.copyState) { return mode.copyState(state) }\n    var nstate = {};\n    for (var n in state) {\n      var val = state[n];\n      if (val instanceof Array) { val = val.concat([]); }\n      nstate[n] = val;\n    }\n    return nstate\n  }\n\n  // Given a mode and a state (for that mode), find the inner mode and\n  // state at the position that the state refers to.\n  function innerMode(mode, state) {\n    var info;\n    while (mode.innerMode) {\n      info = mode.innerMode(state);\n      if (!info || info.mode == mode) { break }\n      state = info.state;\n      mode = info.mode;\n    }\n    return info || {mode: mode, state: state}\n  }\n\n  function startState(mode, a1, a2) {\n    return mode.startState ? mode.startState(a1, a2) : true\n  }\n\n  // STRING STREAM\n\n  // Fed to the mode parsers, provides helper functions to make\n  // parsers more succinct.\n\n  var StringStream = function(string, tabSize, lineOracle) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n    this.lineOracle = lineOracle;\n  };\n\n  StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n  StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n  StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n  StringStream.prototype.next = function () {\n    if (this.pos < this.string.length)\n      { return this.string.charAt(this.pos++) }\n  };\n  StringStream.prototype.eat = function (match) {\n    var ch = this.string.charAt(this.pos);\n    var ok;\n    if (typeof match == \"string\") { ok = ch == match; }\n    else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n    if (ok) {++this.pos; return ch}\n  };\n  StringStream.prototype.eatWhile = function (match) {\n    var start = this.pos;\n    while (this.eat(match)){}\n    return this.pos > start\n  };\n  StringStream.prototype.eatSpace = function () {\n      var this$1 = this;\n\n    var start = this.pos;\n    while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos; }\n    return this.pos > start\n  };\n  StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n  StringStream.prototype.skipTo = function (ch) {\n    var found = this.string.indexOf(ch, this.pos);\n    if (found > -1) {this.pos = found; return true}\n  };\n  StringStream.prototype.backUp = function (n) {this.pos -= n;};\n  StringStream.prototype.column = function () {\n    if (this.lastColumnPos < this.start) {\n      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n      this.lastColumnPos = this.start;\n    }\n    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.indentation = function () {\n    return countColumn(this.string, null, this.tabSize) -\n      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n    if (typeof pattern == \"string\") {\n      var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n      var substr = this.string.substr(this.pos, pattern.length);\n      if (cased(substr) == cased(pattern)) {\n        if (consume !== false) { this.pos += pattern.length; }\n        return true\n      }\n    } else {\n      var match = this.string.slice(this.pos).match(pattern);\n      if (match && match.index > 0) { return null }\n      if (match && consume !== false) { this.pos += match[0].length; }\n      return match\n    }\n  };\n  StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n  StringStream.prototype.hideFirstChars = function (n, inner) {\n    this.lineStart += n;\n    try { return inner() }\n    finally { this.lineStart -= n; }\n  };\n  StringStream.prototype.lookAhead = function (n) {\n    var oracle = this.lineOracle;\n    return oracle && oracle.lookAhead(n)\n  };\n  StringStream.prototype.baseToken = function () {\n    var oracle = this.lineOracle;\n    return oracle && oracle.baseToken(this.pos)\n  };\n\n  var SavedContext = function(state, lookAhead) {\n    this.state = state;\n    this.lookAhead = lookAhead;\n  };\n\n  var Context = function(doc, state, line, lookAhead) {\n    this.state = state;\n    this.doc = doc;\n    this.line = line;\n    this.maxLookAhead = lookAhead || 0;\n    this.baseTokens = null;\n    this.baseTokenPos = 1;\n  };\n\n  Context.prototype.lookAhead = function (n) {\n    var line = this.doc.getLine(this.line + n);\n    if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n    return line\n  };\n\n  Context.prototype.baseToken = function (n) {\n      var this$1 = this;\n\n    if (!this.baseTokens) { return null }\n    while (this.baseTokens[this.baseTokenPos] <= n)\n      { this$1.baseTokenPos += 2; }\n    var type = this.baseTokens[this.baseTokenPos + 1];\n    return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n            size: this.baseTokens[this.baseTokenPos] - n}\n  };\n\n  Context.prototype.nextLine = function () {\n    this.line++;\n    if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n  };\n\n  Context.fromSaved = function (doc, saved, line) {\n    if (saved instanceof SavedContext)\n      { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n    else\n      { return new Context(doc, copyState(doc.mode, saved), line) }\n  };\n\n  Context.prototype.save = function (copy) {\n    var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n    return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n  };\n\n\n  // Compute a style array (an array starting with a mode generation\n  // -- for invalidation -- followed by pairs of end positions and\n  // style strings), which is used to highlight the tokens on the\n  // line.\n  function highlightLine(cm, line, context, forceToEnd) {\n    // A styles array always starts with a number identifying the\n    // mode/overlays that it is based on (for easy invalidation).\n    var st = [cm.state.modeGen], lineClasses = {};\n    // Compute the base array of styles\n    runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n            lineClasses, forceToEnd);\n    var state = context.state;\n\n    // Run overlays, adjust style array.\n    var loop = function ( o ) {\n      context.baseTokens = st;\n      var overlay = cm.state.overlays[o], i = 1, at = 0;\n      context.state = true;\n      runMode(cm, line.text, overlay.mode, context, function (end, style) {\n        var start = i;\n        // Ensure there's a token end at the current position, and that i points at it\n        while (at < end) {\n          var i_end = st[i];\n          if (i_end > end)\n            { st.splice(i, 1, end, st[i+1], i_end); }\n          i += 2;\n          at = Math.min(end, i_end);\n        }\n        if (!style) { return }\n        if (overlay.opaque) {\n          st.splice(start, i - start, end, \"overlay \" + style);\n          i = start + 2;\n        } else {\n          for (; start < i; start += 2) {\n            var cur = st[start+1];\n            st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n          }\n        }\n      }, lineClasses);\n      context.state = state;\n      context.baseTokens = null;\n      context.baseTokenPos = 1;\n    };\n\n    for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n  }\n\n  function getLineStyles(cm, line, updateFrontier) {\n    if (!line.styles || line.styles[0] != cm.state.modeGen) {\n      var context = getContextBefore(cm, lineNo(line));\n      var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n      var result = highlightLine(cm, line, context);\n      if (resetState) { context.state = resetState; }\n      line.stateAfter = context.save(!resetState);\n      line.styles = result.styles;\n      if (result.classes) { line.styleClasses = result.classes; }\n      else if (line.styleClasses) { line.styleClasses = null; }\n      if (updateFrontier === cm.doc.highlightFrontier)\n        { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n    }\n    return line.styles\n  }\n\n  function getContextBefore(cm, n, precise) {\n    var doc = cm.doc, display = cm.display;\n    if (!doc.mode.startState) { return new Context(doc, true, n) }\n    var start = findStartLine(cm, n, precise);\n    var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n    var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n    doc.iter(start, n, function (line) {\n      processLine(cm, line.text, context);\n      var pos = context.line;\n      line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n      context.nextLine();\n    });\n    if (precise) { doc.modeFrontier = context.line; }\n    return context\n  }\n\n  // Lightweight form of highlight -- proceed over this line and\n  // update state, but don't save a style array. Used for lines that\n  // aren't currently visible.\n  function processLine(cm, text, context, startAt) {\n    var mode = cm.doc.mode;\n    var stream = new StringStream(text, cm.options.tabSize, context);\n    stream.start = stream.pos = startAt || 0;\n    if (text == \"\") { callBlankLine(mode, context.state); }\n    while (!stream.eol()) {\n      readToken(mode, stream, context.state);\n      stream.start = stream.pos;\n    }\n  }\n\n  function callBlankLine(mode, state) {\n    if (mode.blankLine) { return mode.blankLine(state) }\n    if (!mode.innerMode) { return }\n    var inner = innerMode(mode, state);\n    if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n  }\n\n  function readToken(mode, stream, state, inner) {\n    for (var i = 0; i < 10; i++) {\n      if (inner) { inner[0] = innerMode(mode, state).mode; }\n      var style = mode.token(stream, state);\n      if (stream.pos > stream.start) { return style }\n    }\n    throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n  }\n\n  var Token = function(stream, type, state) {\n    this.start = stream.start; this.end = stream.pos;\n    this.string = stream.current();\n    this.type = type || null;\n    this.state = state;\n  };\n\n  // Utility for getTokenAt and getLineTokens\n  function takeToken(cm, pos, precise, asArray) {\n    var doc = cm.doc, mode = doc.mode, style;\n    pos = clipPos(doc, pos);\n    var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n    var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n    if (asArray) { tokens = []; }\n    while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n      stream.start = stream.pos;\n      style = readToken(mode, stream, context.state);\n      if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n    }\n    return asArray ? tokens : new Token(stream, style, context.state)\n  }\n\n  function extractLineClasses(type, output) {\n    if (type) { for (;;) {\n      var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n      if (!lineClass) { break }\n      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n      var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n      if (output[prop] == null)\n        { output[prop] = lineClass[2]; }\n      else if (!(new RegExp(\"(?:^|\\s)\" + lineClass[2] + \"(?:$|\\s)\")).test(output[prop]))\n        { output[prop] += \" \" + lineClass[2]; }\n    } }\n    return type\n  }\n\n  // Run the given mode's parser over a line, calling f for each token.\n  function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n    var flattenSpans = mode.flattenSpans;\n    if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n    var curStart = 0, curStyle = null;\n    var stream = new StringStream(text, cm.options.tabSize, context), style;\n    var inner = cm.options.addModeClass && [null];\n    if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n    while (!stream.eol()) {\n      if (stream.pos > cm.options.maxHighlightLength) {\n        flattenSpans = false;\n        if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n        stream.pos = text.length;\n        style = null;\n      } else {\n        style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n      }\n      if (inner) {\n        var mName = inner[0].name;\n        if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n      }\n      if (!flattenSpans || curStyle != style) {\n        while (curStart < stream.start) {\n          curStart = Math.min(stream.start, curStart + 5000);\n          f(curStart, curStyle);\n        }\n        curStyle = style;\n      }\n      stream.start = stream.pos;\n    }\n    while (curStart < stream.pos) {\n      // Webkit seems to refuse to render text nodes longer than 57444\n      // characters, and returns inaccurate measurements in nodes\n      // starting around 5000 chars.\n      var pos = Math.min(stream.pos, curStart + 5000);\n      f(pos, curStyle);\n      curStart = pos;\n    }\n  }\n\n  // Finds the line to start with when starting a parse. Tries to\n  // find a line with a stateAfter, so that it can start with a\n  // valid state. If that fails, it returns the line with the\n  // smallest indentation, which tends to need the least context to\n  // parse correctly.\n  function findStartLine(cm, n, precise) {\n    var minindent, minline, doc = cm.doc;\n    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n    for (var search = n; search > lim; --search) {\n      if (search <= doc.first) { return doc.first }\n      var line = getLine(doc, search - 1), after = line.stateAfter;\n      if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n        { return search }\n      var indented = countColumn(line.text, null, cm.options.tabSize);\n      if (minline == null || minindent > indented) {\n        minline = search - 1;\n        minindent = indented;\n      }\n    }\n    return minline\n  }\n\n  function retreatFrontier(doc, n) {\n    doc.modeFrontier = Math.min(doc.modeFrontier, n);\n    if (doc.highlightFrontier < n - 10) { return }\n    var start = doc.first;\n    for (var line = n - 1; line > start; line--) {\n      var saved = getLine(doc, line).stateAfter;\n      // change is on 3\n      // state on line 1 looked ahead 2 -- so saw 3\n      // test 1 + 2 < 3 should cover this\n      if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n        start = line + 1;\n        break\n      }\n    }\n    doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n  }\n\n  // LINE DATA STRUCTURE\n\n  // Line objects. These hold state related to a line, including\n  // highlighting info (the styles array).\n  var Line = function(text, markedSpans, estimateHeight) {\n    this.text = text;\n    attachMarkedSpans(this, markedSpans);\n    this.height = estimateHeight ? estimateHeight(this) : 1;\n  };\n\n  Line.prototype.lineNo = function () { return lineNo(this) };\n  eventMixin(Line);\n\n  // Change the content (text, markers) of a line. Automatically\n  // invalidates cached information and tries to re-estimate the\n  // line's height.\n  function updateLine(line, text, markedSpans, estimateHeight) {\n    line.text = text;\n    if (line.stateAfter) { line.stateAfter = null; }\n    if (line.styles) { line.styles = null; }\n    if (line.order != null) { line.order = null; }\n    detachMarkedSpans(line);\n    attachMarkedSpans(line, markedSpans);\n    var estHeight = estimateHeight ? estimateHeight(line) : 1;\n    if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n  }\n\n  // Detach a line from the document tree and its markers.\n  function cleanUpLine(line) {\n    line.parent = null;\n    detachMarkedSpans(line);\n  }\n\n  // Convert a style as returned by a mode (either null, or a string\n  // containing one or more styles) to a CSS style. This is cached,\n  // and also looks for line-wide styles.\n  var styleToClassCache = {}, styleToClassCacheWithMode = {};\n  function interpretTokenStyle(style, options) {\n    if (!style || /^\\s*$/.test(style)) { return null }\n    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n    return cache[style] ||\n      (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n  }\n\n  // Render the DOM representation of the text of a line. Also builds\n  // up a 'line map', which points at the DOM nodes that represent\n  // specific stretches of text, and is used by the measuring code.\n  // The returned object contains the DOM node, this map, and\n  // information about line-wide styles that were set by the mode.\n  function buildLineContent(cm, lineView) {\n    // The padding-right forces the element to have a 'border', which\n    // is needed on Webkit to be able to get line-level bounding\n    // rectangles for it (in measureChar).\n    var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n    var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n                   col: 0, pos: 0, cm: cm,\n                   trailingSpace: false,\n                   splitSpaces: cm.getOption(\"lineWrapping\")};\n    lineView.measure = {};\n\n    // Iterate over the logical lines that make up this visual line.\n    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n      var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n      builder.pos = 0;\n      builder.addToken = buildToken;\n      // Optionally wire in some hacks into the token-rendering\n      // algorithm, to deal with browser quirks.\n      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n        { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n      builder.map = [];\n      var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n      insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n      if (line.styleClasses) {\n        if (line.styleClasses.bgClass)\n          { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n        if (line.styleClasses.textClass)\n          { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n      }\n\n      // Ensure at least a single node is present, for measuring.\n      if (builder.map.length == 0)\n        { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n      // Store the map and a cache object for the current logical line\n      if (i == 0) {\n        lineView.measure.map = builder.map;\n        lineView.measure.cache = {};\n      } else {\n  (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n        ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n      }\n    }\n\n    // See issue #2901\n    if (webkit) {\n      var last = builder.content.lastChild;\n      if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n        { builder.content.className = \"cm-tab-wrap-hack\"; }\n    }\n\n    signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n    if (builder.pre.className)\n      { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n    return builder\n  }\n\n  function defaultSpecialCharPlaceholder(ch) {\n    var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n    token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n    token.setAttribute(\"aria-label\", token.title);\n    return token\n  }\n\n  // Build up the DOM representation for a single token, and add it to\n  // the line map. Takes care to render special characters separately.\n  function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n    if (!text) { return }\n    var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n    var special = builder.cm.state.specialChars, mustWrap = false;\n    var content;\n    if (!special.test(text)) {\n      builder.col += text.length;\n      content = document.createTextNode(displayText);\n      builder.map.push(builder.pos, builder.pos + text.length, content);\n      if (ie && ie_version < 9) { mustWrap = true; }\n      builder.pos += text.length;\n    } else {\n      content = document.createDocumentFragment();\n      var pos = 0;\n      while (true) {\n        special.lastIndex = pos;\n        var m = special.exec(text);\n        var skipped = m ? m.index - pos : text.length - pos;\n        if (skipped) {\n          var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n          else { content.appendChild(txt); }\n          builder.map.push(builder.pos, builder.pos + skipped, txt);\n          builder.col += skipped;\n          builder.pos += skipped;\n        }\n        if (!m) { break }\n        pos += skipped + 1;\n        var txt$1 = (void 0);\n        if (m[0] == \"\\t\") {\n          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n          txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n          txt$1.setAttribute(\"role\", \"presentation\");\n          txt$1.setAttribute(\"cm-text\", \"\\t\");\n          builder.col += tabWidth;\n        } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n          txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          builder.col += 1;\n        } else {\n          txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n          else { content.appendChild(txt$1); }\n          builder.col += 1;\n        }\n        builder.map.push(builder.pos, builder.pos + 1, txt$1);\n        builder.pos++;\n      }\n    }\n    builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n    if (style || startStyle || endStyle || mustWrap || css) {\n      var fullStyle = style || \"\";\n      if (startStyle) { fullStyle += startStyle; }\n      if (endStyle) { fullStyle += endStyle; }\n      var token = elt(\"span\", [content], fullStyle, css);\n      if (attributes) {\n        for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n          { token.setAttribute(attr, attributes[attr]); } }\n      }\n      return builder.content.appendChild(token)\n    }\n    builder.content.appendChild(content);\n  }\n\n  // Change some spaces to NBSP to prevent the browser from collapsing\n  // trailing spaces at the end of a line when rendering text (issue #1362).\n  function splitSpaces(text, trailingBefore) {\n    if (text.length > 1 && !/  /.test(text)) { return text }\n    var spaceBefore = trailingBefore, result = \"\";\n    for (var i = 0; i < text.length; i++) {\n      var ch = text.charAt(i);\n      if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n        { ch = \"\\u00a0\"; }\n      result += ch;\n      spaceBefore = ch == \" \";\n    }\n    return result\n  }\n\n  // Work around nonsense dimensions being reported for stretches of\n  // right-to-left text.\n  function buildTokenBadBidi(inner, order) {\n    return function (builder, text, style, startStyle, endStyle, css, attributes) {\n      style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n      var start = builder.pos, end = start + text.length;\n      for (;;) {\n        // Find the part that overlaps with the start of this text\n        var part = (void 0);\n        for (var i = 0; i < order.length; i++) {\n          part = order[i];\n          if (part.to > start && part.from <= start) { break }\n        }\n        if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n        inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n        startStyle = null;\n        text = text.slice(part.to - start);\n        start = part.to;\n      }\n    }\n  }\n\n  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n    var widget = !ignoreWidget && marker.widgetNode;\n    if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n    if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n      if (!widget)\n        { widget = builder.content.appendChild(document.createElement(\"span\")); }\n      widget.setAttribute(\"cm-marker\", marker.id);\n    }\n    if (widget) {\n      builder.cm.display.input.setUneditable(widget);\n      builder.content.appendChild(widget);\n    }\n    builder.pos += size;\n    builder.trailingSpace = false;\n  }\n\n  // Outputs a number of spans to make up a line, taking highlighting\n  // and marked text into account.\n  function insertLineContent(line, builder, styles) {\n    var spans = line.markedSpans, allText = line.text, at = 0;\n    if (!spans) {\n      for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n        { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n      return\n    }\n\n    var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n    for (;;) {\n      if (nextChange == pos) { // Update current marker set\n        spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n        attributes = null;\n        collapsed = null; nextChange = Infinity;\n        var foundBookmarks = [], endStyles = (void 0);\n        for (var j = 0; j < spans.length; ++j) {\n          var sp = spans[j], m = sp.marker;\n          if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n            foundBookmarks.push(m);\n          } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n            if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n              nextChange = sp.to;\n              spanEndStyle = \"\";\n            }\n            if (m.className) { spanStyle += \" \" + m.className; }\n            if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n            if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n            if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n            // support for the old title property\n            // https://github.com/codemirror/CodeMirror/pull/5673\n            if (m.title) { (attributes || (attributes = {})).title = m.title; }\n            if (m.attributes) {\n              for (var attr in m.attributes)\n                { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n            }\n            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n              { collapsed = sp; }\n          } else if (sp.from > pos && nextChange > sp.from) {\n            nextChange = sp.from;\n          }\n        }\n        if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n          { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n        if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n          { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n        if (collapsed && (collapsed.from || 0) == pos) {\n          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n                             collapsed.marker, collapsed.from == null);\n          if (collapsed.to == null) { return }\n          if (collapsed.to == pos) { collapsed = false; }\n        }\n      }\n      if (pos >= len) { break }\n\n      var upto = Math.min(len, nextChange);\n      while (true) {\n        if (text) {\n          var end = pos + text.length;\n          if (!collapsed) {\n            var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n          }\n          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n          pos = end;\n          spanStartStyle = \"\";\n        }\n        text = allText.slice(at, at = styles[i++]);\n        style = interpretTokenStyle(styles[i++], builder.cm.options);\n      }\n    }\n  }\n\n\n  // These objects are used to represent the visible (currently drawn)\n  // part of the document. A LineView may correspond to multiple\n  // logical lines, if those are connected by collapsed ranges.\n  function LineView(doc, line, lineN) {\n    // The starting line\n    this.line = line;\n    // Continuing lines, if any\n    this.rest = visualLineContinued(line);\n    // Number of logical lines in this visual line\n    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n    this.node = this.text = null;\n    this.hidden = lineIsHidden(doc, line);\n  }\n\n  // Create a range of LineView objects for the given lines.\n  function buildViewArray(cm, from, to) {\n    var array = [], nextPos;\n    for (var pos = from; pos < to; pos = nextPos) {\n      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n      nextPos = pos + view.size;\n      array.push(view);\n    }\n    return array\n  }\n\n  var operationGroup = null;\n\n  function pushOperation(op) {\n    if (operationGroup) {\n      operationGroup.ops.push(op);\n    } else {\n      op.ownsGroup = operationGroup = {\n        ops: [op],\n        delayedCallbacks: []\n      };\n    }\n  }\n\n  function fireCallbacksForOps(group) {\n    // Calls delayed callbacks and cursorActivity handlers until no\n    // new ones appear\n    var callbacks = group.delayedCallbacks, i = 0;\n    do {\n      for (; i < callbacks.length; i++)\n        { callbacks[i].call(null); }\n      for (var j = 0; j < group.ops.length; j++) {\n        var op = group.ops[j];\n        if (op.cursorActivityHandlers)\n          { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n            { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n      }\n    } while (i < callbacks.length)\n  }\n\n  function finishOperation(op, endCb) {\n    var group = op.ownsGroup;\n    if (!group) { return }\n\n    try { fireCallbacksForOps(group); }\n    finally {\n      operationGroup = null;\n      endCb(group);\n    }\n  }\n\n  var orphanDelayedCallbacks = null;\n\n  // Often, we want to signal events at a point where we are in the\n  // middle of some work, but don't want the handler to start calling\n  // other methods on the editor, which might be in an inconsistent\n  // state or simply not expect any other events to happen.\n  // signalLater looks whether there are any handlers, and schedules\n  // them to be executed when the last operation ends, or, if no\n  // operation is active, when a timeout fires.\n  function signalLater(emitter, type /*, values...*/) {\n    var arr = getHandlers(emitter, type);\n    if (!arr.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2), list;\n    if (operationGroup) {\n      list = operationGroup.delayedCallbacks;\n    } else if (orphanDelayedCallbacks) {\n      list = orphanDelayedCallbacks;\n    } else {\n      list = orphanDelayedCallbacks = [];\n      setTimeout(fireOrphanDelayed, 0);\n    }\n    var loop = function ( i ) {\n      list.push(function () { return arr[i].apply(null, args); });\n    };\n\n    for (var i = 0; i < arr.length; ++i)\n      loop( i );\n  }\n\n  function fireOrphanDelayed() {\n    var delayed = orphanDelayedCallbacks;\n    orphanDelayedCallbacks = null;\n    for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n  }\n\n  // When an aspect of a line changes, a string is added to\n  // lineView.changes. This updates the relevant part of the line's\n  // DOM structure.\n  function updateLineForChanges(cm, lineView, lineN, dims) {\n    for (var j = 0; j < lineView.changes.length; j++) {\n      var type = lineView.changes[j];\n      if (type == \"text\") { updateLineText(cm, lineView); }\n      else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n      else if (type == \"class\") { updateLineClasses(cm, lineView); }\n      else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n    }\n    lineView.changes = null;\n  }\n\n  // Lines with gutter elements, widgets or a background class need to\n  // be wrapped, and have the extra elements added to the wrapper div\n  function ensureLineWrapped(lineView) {\n    if (lineView.node == lineView.text) {\n      lineView.node = elt(\"div\", null, null, \"position: relative\");\n      if (lineView.text.parentNode)\n        { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n      lineView.node.appendChild(lineView.text);\n      if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n    }\n    return lineView.node\n  }\n\n  function updateLineBackground(cm, lineView) {\n    var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n    if (cls) { cls += \" CodeMirror-linebackground\"; }\n    if (lineView.background) {\n      if (cls) { lineView.background.className = cls; }\n      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n    } else if (cls) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n      cm.display.input.setUneditable(lineView.background);\n    }\n  }\n\n  // Wrapper around buildLineContent which will reuse the structure\n  // in display.externalMeasured when possible.\n  function getLineContent(cm, lineView) {\n    var ext = cm.display.externalMeasured;\n    if (ext && ext.line == lineView.line) {\n      cm.display.externalMeasured = null;\n      lineView.measure = ext.measure;\n      return ext.built\n    }\n    return buildLineContent(cm, lineView)\n  }\n\n  // Redraw the line's text. Interacts with the background and text\n  // classes because the mode may output tokens that influence these\n  // classes.\n  function updateLineText(cm, lineView) {\n    var cls = lineView.text.className;\n    var built = getLineContent(cm, lineView);\n    if (lineView.text == lineView.node) { lineView.node = built.pre; }\n    lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n    lineView.text = built.pre;\n    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n      lineView.bgClass = built.bgClass;\n      lineView.textClass = built.textClass;\n      updateLineClasses(cm, lineView);\n    } else if (cls) {\n      lineView.text.className = cls;\n    }\n  }\n\n  function updateLineClasses(cm, lineView) {\n    updateLineBackground(cm, lineView);\n    if (lineView.line.wrapClass)\n      { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n    else if (lineView.node != lineView.text)\n      { lineView.node.className = \"\"; }\n    var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n    lineView.text.className = textClass || \"\";\n  }\n\n  function updateLineGutter(cm, lineView, lineN, dims) {\n    if (lineView.gutter) {\n      lineView.node.removeChild(lineView.gutter);\n      lineView.gutter = null;\n    }\n    if (lineView.gutterBackground) {\n      lineView.node.removeChild(lineView.gutterBackground);\n      lineView.gutterBackground = null;\n    }\n    if (lineView.line.gutterClass) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n                                      (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n      cm.display.input.setUneditable(lineView.gutterBackground);\n      wrap.insertBefore(lineView.gutterBackground, lineView.text);\n    }\n    var markers = lineView.line.gutterMarkers;\n    if (cm.options.lineNumbers || markers) {\n      var wrap$1 = ensureLineWrapped(lineView);\n      var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n      cm.display.input.setUneditable(gutterWrap);\n      wrap$1.insertBefore(gutterWrap, lineView.text);\n      if (lineView.line.gutterClass)\n        { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n      if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n        { lineView.lineNumber = gutterWrap.appendChild(\n          elt(\"div\", lineNumberFor(cm.options, lineN),\n              \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n              (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n      if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) {\n        var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];\n        if (found)\n          { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n                                     (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n      } }\n    }\n  }\n\n  function updateLineWidgets(cm, lineView, dims) {\n    if (lineView.alignable) { lineView.alignable = null; }\n    for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n      next = node.nextSibling;\n      if (node.className == \"CodeMirror-linewidget\")\n        { lineView.node.removeChild(node); }\n    }\n    insertLineWidgets(cm, lineView, dims);\n  }\n\n  // Build a line's DOM representation from scratch\n  function buildLineElement(cm, lineView, lineN, dims) {\n    var built = getLineContent(cm, lineView);\n    lineView.text = lineView.node = built.pre;\n    if (built.bgClass) { lineView.bgClass = built.bgClass; }\n    if (built.textClass) { lineView.textClass = built.textClass; }\n\n    updateLineClasses(cm, lineView);\n    updateLineGutter(cm, lineView, lineN, dims);\n    insertLineWidgets(cm, lineView, dims);\n    return lineView.node\n  }\n\n  // A lineView may contain multiple logical lines (when merged by\n  // collapsed spans). The widgets for all of them need to be drawn.\n  function insertLineWidgets(cm, lineView, dims) {\n    insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n    if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n      { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n  }\n\n  function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n    if (!line.widgets) { return }\n    var wrap = ensureLineWrapped(lineView);\n    for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n      var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\");\n      if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n      positionLineWidget(widget, node, lineView, dims);\n      cm.display.input.setUneditable(node);\n      if (allowAbove && widget.above)\n        { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n      else\n        { wrap.appendChild(node); }\n      signalLater(widget, \"redraw\");\n    }\n  }\n\n  function positionLineWidget(widget, node, lineView, dims) {\n    if (widget.noHScroll) {\n  (lineView.alignable || (lineView.alignable = [])).push(node);\n      var width = dims.wrapperWidth;\n      node.style.left = dims.fixedPos + \"px\";\n      if (!widget.coverGutter) {\n        width -= dims.gutterTotalWidth;\n        node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n      }\n      node.style.width = width + \"px\";\n    }\n    if (widget.coverGutter) {\n      node.style.zIndex = 5;\n      node.style.position = \"relative\";\n      if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n    }\n  }\n\n  function widgetHeight(widget) {\n    if (widget.height != null) { return widget.height }\n    var cm = widget.doc.cm;\n    if (!cm) { return 0 }\n    if (!contains(document.body, widget.node)) {\n      var parentStyle = \"position: relative;\";\n      if (widget.coverGutter)\n        { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n      if (widget.noHScroll)\n        { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n      removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n    }\n    return widget.height = widget.node.parentNode.offsetHeight\n  }\n\n  // Return true when the given mouse event happened in a widget\n  function eventInWidget(display, e) {\n    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n      if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n          (n.parentNode == display.sizer && n != display.mover))\n        { return true }\n    }\n  }\n\n  // POSITION MEASUREMENT\n\n  function paddingTop(display) {return display.lineSpace.offsetTop}\n  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n  function paddingH(display) {\n    if (display.cachedPaddingH) { return display.cachedPaddingH }\n    var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\"));\n    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n    if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n    return data\n  }\n\n  function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n  function displayWidth(cm) {\n    return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n  }\n  function displayHeight(cm) {\n    return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n  }\n\n  // Ensure the lineView.wrapping.heights array is populated. This is\n  // an array of bottom offsets for the lines that make up a drawn\n  // line. When lineWrapping is on, there might be more than one\n  // height.\n  function ensureLineHeights(cm, lineView, rect) {\n    var wrapping = cm.options.lineWrapping;\n    var curWidth = wrapping && displayWidth(cm);\n    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n      var heights = lineView.measure.heights = [];\n      if (wrapping) {\n        lineView.measure.width = curWidth;\n        var rects = lineView.text.firstChild.getClientRects();\n        for (var i = 0; i < rects.length - 1; i++) {\n          var cur = rects[i], next = rects[i + 1];\n          if (Math.abs(cur.bottom - next.bottom) > 2)\n            { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n        }\n      }\n      heights.push(rect.bottom - rect.top);\n    }\n  }\n\n  // Find a line map (mapping character offsets to text nodes) and a\n  // measurement cache for the given line number. (A line view might\n  // contain multiple lines when collapsed ranges are present.)\n  function mapFromLineView(lineView, line, lineN) {\n    if (lineView.line == line)\n      { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n    for (var i = 0; i < lineView.rest.length; i++)\n      { if (lineView.rest[i] == line)\n        { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n    for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n      { if (lineNo(lineView.rest[i$1]) > lineN)\n        { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n  }\n\n  // Render a line into the hidden node display.externalMeasured. Used\n  // when measurement is needed for a line that's not in the viewport.\n  function updateExternalMeasurement(cm, line) {\n    line = visualLine(line);\n    var lineN = lineNo(line);\n    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n    view.lineN = lineN;\n    var built = view.built = buildLineContent(cm, view);\n    view.text = built.pre;\n    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n    return view\n  }\n\n  // Get a {top, bottom, left, right} box (in line-local coordinates)\n  // for a given character.\n  function measureChar(cm, line, ch, bias) {\n    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n  }\n\n  // Find a line view that corresponds to the given line number.\n  function findViewForLine(cm, lineN) {\n    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n      { return cm.display.view[findViewIndex(cm, lineN)] }\n    var ext = cm.display.externalMeasured;\n    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n      { return ext }\n  }\n\n  // Measurement can be split in two steps, the set-up work that\n  // applies to the whole line, and the measurement of the actual\n  // character. Functions like coordsChar, that need to do a lot of\n  // measurements in a row, can thus ensure that the set-up work is\n  // only done once.\n  function prepareMeasureForLine(cm, line) {\n    var lineN = lineNo(line);\n    var view = findViewForLine(cm, lineN);\n    if (view && !view.text) {\n      view = null;\n    } else if (view && view.changes) {\n      updateLineForChanges(cm, view, lineN, getDimensions(cm));\n      cm.curOp.forceUpdate = true;\n    }\n    if (!view)\n      { view = updateExternalMeasurement(cm, line); }\n\n    var info = mapFromLineView(view, line, lineN);\n    return {\n      line: line, view: view, rect: null,\n      map: info.map, cache: info.cache, before: info.before,\n      hasHeights: false\n    }\n  }\n\n  // Given a prepared measurement object, measures the position of an\n  // actual character (or fetches it from the cache).\n  function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n    if (prepared.before) { ch = -1; }\n    var key = ch + (bias || \"\"), found;\n    if (prepared.cache.hasOwnProperty(key)) {\n      found = prepared.cache[key];\n    } else {\n      if (!prepared.rect)\n        { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n      if (!prepared.hasHeights) {\n        ensureLineHeights(cm, prepared.view, prepared.rect);\n        prepared.hasHeights = true;\n      }\n      found = measureCharInner(cm, prepared, ch, bias);\n      if (!found.bogus) { prepared.cache[key] = found; }\n    }\n    return {left: found.left, right: found.right,\n            top: varHeight ? found.rtop : found.top,\n            bottom: varHeight ? found.rbottom : found.bottom}\n  }\n\n  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n  function nodeAndOffsetInLineMap(map$$1, ch, bias) {\n    var node, start, end, collapse, mStart, mEnd;\n    // First, search the line map for the text node corresponding to,\n    // or closest to, the target character.\n    for (var i = 0; i < map$$1.length; i += 3) {\n      mStart = map$$1[i];\n      mEnd = map$$1[i + 1];\n      if (ch < mStart) {\n        start = 0; end = 1;\n        collapse = \"left\";\n      } else if (ch < mEnd) {\n        start = ch - mStart;\n        end = start + 1;\n      } else if (i == map$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) {\n        end = mEnd - mStart;\n        start = end - 1;\n        if (ch >= mEnd) { collapse = \"right\"; }\n      }\n      if (start != null) {\n        node = map$$1[i + 2];\n        if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n          { collapse = bias; }\n        if (bias == \"left\" && start == 0)\n          { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) {\n            node = map$$1[(i -= 3) + 2];\n            collapse = \"left\";\n          } }\n        if (bias == \"right\" && start == mEnd - mStart)\n          { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) {\n            node = map$$1[(i += 3) + 2];\n            collapse = \"right\";\n          } }\n        break\n      }\n    }\n    return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n  }\n\n  function getUsefulRect(rects, bias) {\n    var rect = nullRect;\n    if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n      if ((rect = rects[i]).left != rect.right) { break }\n    } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n      if ((rect = rects[i$1]).left != rect.right) { break }\n    } }\n    return rect\n  }\n\n  function measureCharInner(cm, prepared, ch, bias) {\n    var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n    var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n    var rect;\n    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n      for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n        while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n        while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n        if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n          { rect = node.parentNode.getBoundingClientRect(); }\n        else\n          { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n        if (rect.left || rect.right || start == 0) { break }\n        end = start;\n        start = start - 1;\n        collapse = \"right\";\n      }\n      if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n    } else { // If it is a widget, simply get the box for the whole widget.\n      if (start > 0) { collapse = bias = \"right\"; }\n      var rects;\n      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n        { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n      else\n        { rect = node.getBoundingClientRect(); }\n    }\n    if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n      var rSpan = node.parentNode.getClientRects()[0];\n      if (rSpan)\n        { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n      else\n        { rect = nullRect; }\n    }\n\n    var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n    var mid = (rtop + rbot) / 2;\n    var heights = prepared.view.measure.heights;\n    var i = 0;\n    for (; i < heights.length - 1; i++)\n      { if (mid < heights[i]) { break } }\n    var top = i ? heights[i - 1] : 0, bot = heights[i];\n    var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n                  right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n                  top: top, bottom: bot};\n    if (!rect.left && !rect.right) { result.bogus = true; }\n    if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n    return result\n  }\n\n  // Work around problem with bounding client rects on ranges being\n  // returned incorrectly when zoomed on IE10 and below.\n  function maybeUpdateRectForZooming(measure, rect) {\n    if (!window.screen || screen.logicalXDPI == null ||\n        screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n      { return rect }\n    var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n    var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n    return {left: rect.left * scaleX, right: rect.right * scaleX,\n            top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n  }\n\n  function clearLineMeasurementCacheFor(lineView) {\n    if (lineView.measure) {\n      lineView.measure.cache = {};\n      lineView.measure.heights = null;\n      if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n        { lineView.measure.caches[i] = {}; } }\n    }\n  }\n\n  function clearLineMeasurementCache(cm) {\n    cm.display.externalMeasure = null;\n    removeChildren(cm.display.lineMeasure);\n    for (var i = 0; i < cm.display.view.length; i++)\n      { clearLineMeasurementCacheFor(cm.display.view[i]); }\n  }\n\n  function clearCaches(cm) {\n    clearLineMeasurementCache(cm);\n    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n    if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n    cm.display.lineNumChars = null;\n  }\n\n  function pageScrollX() {\n    // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n    // which causes page_Offset and bounding client rects to use\n    // different reference viewports and invalidate our calculations.\n    if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }\n    return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n  }\n  function pageScrollY() {\n    if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }\n    return window.pageYOffset || (document.documentElement || document.body).scrollTop\n  }\n\n  function widgetTopHeight(lineObj) {\n    var height = 0;\n    if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)\n      { height += widgetHeight(lineObj.widgets[i]); } } }\n    return height\n  }\n\n  // Converts a {top, bottom, left, right} box from line-local\n  // coordinates into another coordinate system. Context may be one of\n  // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n  // or \"page\".\n  function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n    if (!includeWidgets) {\n      var height = widgetTopHeight(lineObj);\n      rect.top += height; rect.bottom += height;\n    }\n    if (context == \"line\") { return rect }\n    if (!context) { context = \"local\"; }\n    var yOff = heightAtLine(lineObj);\n    if (context == \"local\") { yOff += paddingTop(cm.display); }\n    else { yOff -= cm.display.viewOffset; }\n    if (context == \"page\" || context == \"window\") {\n      var lOff = cm.display.lineSpace.getBoundingClientRect();\n      yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n      var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n      rect.left += xOff; rect.right += xOff;\n    }\n    rect.top += yOff; rect.bottom += yOff;\n    return rect\n  }\n\n  // Coverts a box from \"div\" coords to another coordinate system.\n  // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n  function fromCoordSystem(cm, coords, context) {\n    if (context == \"div\") { return coords }\n    var left = coords.left, top = coords.top;\n    // First move into \"page\" coordinate system\n    if (context == \"page\") {\n      left -= pageScrollX();\n      top -= pageScrollY();\n    } else if (context == \"local\" || !context) {\n      var localBox = cm.display.sizer.getBoundingClientRect();\n      left += localBox.left;\n      top += localBox.top;\n    }\n\n    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n  }\n\n  function charCoords(cm, pos, context, lineObj, bias) {\n    if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n  }\n\n  // Returns a box for a given cursor position, which may have an\n  // 'other' property containing the position of the secondary cursor\n  // on a bidi boundary.\n  // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n  // and after `char - 1` in writing order of `char - 1`\n  // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n  // and before `char` in writing order of `char`\n  // Examples (upper-case letters are RTL, lower-case are LTR):\n  //     Pos(0, 1, ...)\n  //     before   after\n  // ab     a|b     a|b\n  // aB     a|B     aB|\n  // Ab     |Ab     A|b\n  // AB     B|A     B|A\n  // Every position after the last character on a line is considered to stick\n  // to the last character on the line.\n  function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n    lineObj = lineObj || getLine(cm.doc, pos.line);\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    function get(ch, right) {\n      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n      if (right) { m.left = m.right; } else { m.right = m.left; }\n      return intoCoordSystem(cm, lineObj, m, context)\n    }\n    var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n    if (ch >= lineObj.text.length) {\n      ch = lineObj.text.length;\n      sticky = \"before\";\n    } else if (ch <= 0) {\n      ch = 0;\n      sticky = \"after\";\n    }\n    if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n    function getBidi(ch, partPos, invert) {\n      var part = order[partPos], right = part.level == 1;\n      return get(invert ? ch - 1 : ch, right != invert)\n    }\n    var partPos = getBidiPartAt(order, ch, sticky);\n    var other = bidiOther;\n    var val = getBidi(ch, partPos, sticky == \"before\");\n    if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n    return val\n  }\n\n  // Used to cheaply estimate the coordinates for a position. Used for\n  // intermediate scroll updates.\n  function estimateCoords(cm, pos) {\n    var left = 0;\n    pos = clipPos(cm.doc, pos);\n    if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n    var lineObj = getLine(cm.doc, pos.line);\n    var top = heightAtLine(lineObj) + paddingTop(cm.display);\n    return {left: left, right: left, top: top, bottom: top + lineObj.height}\n  }\n\n  // Positions returned by coordsChar contain some extra information.\n  // xRel is the relative x position of the input coordinates compared\n  // to the found position (so xRel > 0 means the coordinates are to\n  // the right of the character position, for example). When outside\n  // is true, that means the coordinates lie outside the line's\n  // vertical range.\n  function PosWithInfo(line, ch, sticky, outside, xRel) {\n    var pos = Pos(line, ch, sticky);\n    pos.xRel = xRel;\n    if (outside) { pos.outside = true; }\n    return pos\n  }\n\n  // Compute the character position closest to the given coordinates.\n  // Input must be lineSpace-local (\"div\" coordinate system).\n  function coordsChar(cm, x, y) {\n    var doc = cm.doc;\n    y += cm.display.viewOffset;\n    if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) }\n    var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n    if (lineN > last)\n      { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) }\n    if (x < 0) { x = 0; }\n\n    var lineObj = getLine(doc, lineN);\n    for (;;) {\n      var found = coordsCharInner(cm, lineObj, lineN, x, y);\n      var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 ? 1 : 0));\n      if (!collapsed) { return found }\n      var rangeEnd = collapsed.find(1);\n      if (rangeEnd.line == lineN) { return rangeEnd }\n      lineObj = getLine(doc, lineN = rangeEnd.line);\n    }\n  }\n\n  function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n    y -= widgetTopHeight(lineObj);\n    var end = lineObj.text.length;\n    var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n    end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n    return {begin: begin, end: end}\n  }\n\n  function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n    return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n  }\n\n  // Returns true if the given side of a box is after the given\n  // coordinates, in top-to-bottom, left-to-right order.\n  function boxIsAfter(box, x, y, left) {\n    return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n  }\n\n  function coordsCharInner(cm, lineObj, lineNo$$1, x, y) {\n    // Move y into line-local coordinate space\n    y -= heightAtLine(lineObj);\n    var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n    // When directly calling `measureCharPrepared`, we have to adjust\n    // for the widgets at this line.\n    var widgetHeight$$1 = widgetTopHeight(lineObj);\n    var begin = 0, end = lineObj.text.length, ltr = true;\n\n    var order = getOrder(lineObj, cm.doc.direction);\n    // If the line isn't plain left-to-right text, first figure out\n    // which bidi section the coordinates fall into.\n    if (order) {\n      var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n                   (cm, lineObj, lineNo$$1, preparedMeasure, order, x, y);\n      ltr = part.level != 1;\n      // The awkward -1 offsets are needed because findFirst (called\n      // on these below) will treat its first bound as inclusive,\n      // second as exclusive, but we want to actually address the\n      // characters in the part's range\n      begin = ltr ? part.from : part.to - 1;\n      end = ltr ? part.to : part.from - 1;\n    }\n\n    // A binary search to find the first character whose bounding box\n    // starts after the coordinates. If we run across any whose box wrap\n    // the coordinates, store that.\n    var chAround = null, boxAround = null;\n    var ch = findFirst(function (ch) {\n      var box = measureCharPrepared(cm, preparedMeasure, ch);\n      box.top += widgetHeight$$1; box.bottom += widgetHeight$$1;\n      if (!boxIsAfter(box, x, y, false)) { return false }\n      if (box.top <= y && box.left <= x) {\n        chAround = ch;\n        boxAround = box;\n      }\n      return true\n    }, begin, end);\n\n    var baseX, sticky, outside = false;\n    // If a box around the coordinates was found, use that\n    if (boxAround) {\n      // Distinguish coordinates nearer to the left or right side of the box\n      var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n      ch = chAround + (atStart ? 0 : 1);\n      sticky = atStart ? \"after\" : \"before\";\n      baseX = atLeft ? boxAround.left : boxAround.right;\n    } else {\n      // (Adjust for extended bound, if necessary.)\n      if (!ltr && (ch == end || ch == begin)) { ch++; }\n      // To determine which side to associate with, get the box to the\n      // left of the character and compare it's vertical position to the\n      // coordinates\n      sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n        (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight$$1 <= y) == ltr ?\n        \"after\" : \"before\";\n      // Now get accurate coordinates for this place, in order to get a\n      // base X position\n      var coords = cursorCoords(cm, Pos(lineNo$$1, ch, sticky), \"line\", lineObj, preparedMeasure);\n      baseX = coords.left;\n      outside = y < coords.top || y >= coords.bottom;\n    }\n\n    ch = skipExtendingChars(lineObj.text, ch, 1);\n    return PosWithInfo(lineNo$$1, ch, sticky, outside, x - baseX)\n  }\n\n  function coordsBidiPart(cm, lineObj, lineNo$$1, preparedMeasure, order, x, y) {\n    // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n    // situation, we can take this ordering to correspond to the visual\n    // ordering. This finds the first part whose end is after the given\n    // coordinates.\n    var index = findFirst(function (i) {\n      var part = order[i], ltr = part.level != 1;\n      return boxIsAfter(cursorCoords(cm, Pos(lineNo$$1, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n                                     \"line\", lineObj, preparedMeasure), x, y, true)\n    }, 0, order.length - 1);\n    var part = order[index];\n    // If this isn't the first part, the part's start is also after\n    // the coordinates, and the coordinates aren't on the same line as\n    // that start, move one part back.\n    if (index > 0) {\n      var ltr = part.level != 1;\n      var start = cursorCoords(cm, Pos(lineNo$$1, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n                               \"line\", lineObj, preparedMeasure);\n      if (boxIsAfter(start, x, y, true) && start.top > y)\n        { part = order[index - 1]; }\n    }\n    return part\n  }\n\n  function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n    // In a wrapped line, rtl text on wrapping boundaries can do things\n    // that don't correspond to the ordering in our `order` array at\n    // all, so a binary search doesn't work, and we want to return a\n    // part that only spans one line so that the binary search in\n    // coordsCharInner is safe. As such, we first find the extent of the\n    // wrapped line, and then do a flat search in which we discard any\n    // spans that aren't on the line.\n    var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n    var begin = ref.begin;\n    var end = ref.end;\n    if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n    var part = null, closestDist = null;\n    for (var i = 0; i < order.length; i++) {\n      var p = order[i];\n      if (p.from >= end || p.to <= begin) { continue }\n      var ltr = p.level != 1;\n      var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n      // Weigh against spans ending before this, so that they are only\n      // picked if nothing ends after\n      var dist = endX < x ? x - endX + 1e9 : endX - x;\n      if (!part || closestDist > dist) {\n        part = p;\n        closestDist = dist;\n      }\n    }\n    if (!part) { part = order[order.length - 1]; }\n    // Clip the part to the wrapped line.\n    if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n    if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n    return part\n  }\n\n  var measureText;\n  // Compute the default text height.\n  function textHeight(display) {\n    if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n    if (measureText == null) {\n      measureText = elt(\"pre\");\n      // Measure a bunch of lines, for browsers that compute\n      // fractional heights.\n      for (var i = 0; i < 49; ++i) {\n        measureText.appendChild(document.createTextNode(\"x\"));\n        measureText.appendChild(elt(\"br\"));\n      }\n      measureText.appendChild(document.createTextNode(\"x\"));\n    }\n    removeChildrenAndAdd(display.measure, measureText);\n    var height = measureText.offsetHeight / 50;\n    if (height > 3) { display.cachedTextHeight = height; }\n    removeChildren(display.measure);\n    return height || 1\n  }\n\n  // Compute the default character width.\n  function charWidth(display) {\n    if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n    var anchor = elt(\"span\", \"xxxxxxxxxx\");\n    var pre = elt(\"pre\", [anchor]);\n    removeChildrenAndAdd(display.measure, pre);\n    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n    if (width > 2) { display.cachedCharWidth = width; }\n    return width || 10\n  }\n\n  // Do a bulk-read of the DOM positions and sizes needed to draw the\n  // view, so that we don't interleave reading and writing to the DOM.\n  function getDimensions(cm) {\n    var d = cm.display, left = {}, width = {};\n    var gutterLeft = d.gutters.clientLeft;\n    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n      left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft;\n      width[cm.options.gutters[i]] = n.clientWidth;\n    }\n    return {fixedPos: compensateForHScroll(d),\n            gutterTotalWidth: d.gutters.offsetWidth,\n            gutterLeft: left,\n            gutterWidth: width,\n            wrapperWidth: d.wrapper.clientWidth}\n  }\n\n  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n  // but using getBoundingClientRect to get a sub-pixel-accurate\n  // result.\n  function compensateForHScroll(display) {\n    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n  }\n\n  // Returns a function that estimates the height of a line, to use as\n  // first approximation until the line becomes visible (and is thus\n  // properly measurable).\n  function estimateHeight(cm) {\n    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n    return function (line) {\n      if (lineIsHidden(cm.doc, line)) { return 0 }\n\n      var widgetsHeight = 0;\n      if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n        if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n      } }\n\n      if (wrapping)\n        { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n      else\n        { return widgetsHeight + th }\n    }\n  }\n\n  function estimateLineHeights(cm) {\n    var doc = cm.doc, est = estimateHeight(cm);\n    doc.iter(function (line) {\n      var estHeight = est(line);\n      if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n    });\n  }\n\n  // Given a mouse event, find the corresponding position. If liberal\n  // is false, it checks whether a gutter or scrollbar was clicked,\n  // and returns null if it was. forRect is used by rectangular\n  // selections, and tries to estimate a character position even for\n  // coordinates beyond the right of the text.\n  function posFromMouse(cm, e, liberal, forRect) {\n    var display = cm.display;\n    if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n    var x, y, space = display.lineSpace.getBoundingClientRect();\n    // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n    try { x = e.clientX - space.left; y = e.clientY - space.top; }\n    catch (e) { return null }\n    var coords = coordsChar(cm, x, y), line;\n    if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n    }\n    return coords\n  }\n\n  // Find the view element corresponding to a given line. Return null\n  // when the line isn't visible.\n  function findViewIndex(cm, n) {\n    if (n >= cm.display.viewTo) { return null }\n    n -= cm.display.viewFrom;\n    if (n < 0) { return null }\n    var view = cm.display.view;\n    for (var i = 0; i < view.length; i++) {\n      n -= view[i].size;\n      if (n < 0) { return i }\n    }\n  }\n\n  function updateSelection(cm) {\n    cm.display.input.showSelection(cm.display.input.prepareSelection());\n  }\n\n  function prepareSelection(cm, primary) {\n    if ( primary === void 0 ) primary = true;\n\n    var doc = cm.doc, result = {};\n    var curFragment = result.cursors = document.createDocumentFragment();\n    var selFragment = result.selection = document.createDocumentFragment();\n\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      if (!primary && i == doc.sel.primIndex) { continue }\n      var range$$1 = doc.sel.ranges[i];\n      if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue }\n      var collapsed = range$$1.empty();\n      if (collapsed || cm.options.showCursorWhenSelecting)\n        { drawSelectionCursor(cm, range$$1.head, curFragment); }\n      if (!collapsed)\n        { drawSelectionRange(cm, range$$1, selFragment); }\n    }\n    return result\n  }\n\n  // Draws a cursor for the given range\n  function drawSelectionCursor(cm, head, output) {\n    var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n    var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n    cursor.style.left = pos.left + \"px\";\n    cursor.style.top = pos.top + \"px\";\n    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n    if (pos.other) {\n      // Secondary cursor, shown when on a 'jump' in bi-directional text\n      var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n      otherCursor.style.display = \"\";\n      otherCursor.style.left = pos.other.left + \"px\";\n      otherCursor.style.top = pos.other.top + \"px\";\n      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n    }\n  }\n\n  function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n  // Draws the given range as a highlighted selection\n  function drawSelectionRange(cm, range$$1, output) {\n    var display = cm.display, doc = cm.doc;\n    var fragment = document.createDocumentFragment();\n    var padding = paddingH(cm.display), leftSide = padding.left;\n    var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n    var docLTR = doc.direction == \"ltr\";\n\n    function add(left, top, width, bottom) {\n      if (top < 0) { top = 0; }\n      top = Math.round(top);\n      bottom = Math.round(bottom);\n      fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n                             top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n                             height: \" + (bottom - top) + \"px\")));\n    }\n\n    function drawForLine(line, fromArg, toArg) {\n      var lineObj = getLine(doc, line);\n      var lineLen = lineObj.text.length;\n      var start, end;\n      function coords(ch, bias) {\n        return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n      }\n\n      function wrapX(pos, dir, side) {\n        var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n        var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n        var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n        return coords(ch, prop)[prop]\n      }\n\n      var order = getOrder(lineObj, doc.direction);\n      iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n        var ltr = dir == \"ltr\";\n        var fromPos = coords(from, ltr ? \"left\" : \"right\");\n        var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n        var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n        var first = i == 0, last = !order || i == order.length - 1;\n        if (toPos.top - fromPos.top <= 3) { // Single line\n          var openLeft = (docLTR ? openStart : openEnd) && first;\n          var openRight = (docLTR ? openEnd : openStart) && last;\n          var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n          var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n          add(left, fromPos.top, right - left, fromPos.bottom);\n        } else { // Multiple lines\n          var topLeft, topRight, botLeft, botRight;\n          if (ltr) {\n            topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n            topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n            botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n            botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n          } else {\n            topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n            topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n            botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n            botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n          }\n          add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n          if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n          add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n        }\n\n        if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n        if (cmpCoords(toPos, start) < 0) { start = toPos; }\n        if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n        if (cmpCoords(toPos, end) < 0) { end = toPos; }\n      });\n      return {start: start, end: end}\n    }\n\n    var sFrom = range$$1.from(), sTo = range$$1.to();\n    if (sFrom.line == sTo.line) {\n      drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n    } else {\n      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n      var singleVLine = visualLine(fromLine) == visualLine(toLine);\n      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n      if (singleVLine) {\n        if (leftEnd.top < rightStart.top - 2) {\n          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n        } else {\n          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n        }\n      }\n      if (leftEnd.bottom < rightStart.top)\n        { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n    }\n\n    output.appendChild(fragment);\n  }\n\n  // Cursor-blinking\n  function restartBlink(cm) {\n    if (!cm.state.focused) { return }\n    var display = cm.display;\n    clearInterval(display.blinker);\n    var on = true;\n    display.cursorDiv.style.visibility = \"\";\n    if (cm.options.cursorBlinkRate > 0)\n      { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\"; },\n        cm.options.cursorBlinkRate); }\n    else if (cm.options.cursorBlinkRate < 0)\n      { display.cursorDiv.style.visibility = \"hidden\"; }\n  }\n\n  function ensureFocus(cm) {\n    if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }\n  }\n\n  function delayBlurEvent(cm) {\n    cm.state.delayingBlurEvent = true;\n    setTimeout(function () { if (cm.state.delayingBlurEvent) {\n      cm.state.delayingBlurEvent = false;\n      onBlur(cm);\n    } }, 100);\n  }\n\n  function onFocus(cm, e) {\n    if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; }\n\n    if (cm.options.readOnly == \"nocursor\") { return }\n    if (!cm.state.focused) {\n      signal(cm, \"focus\", cm, e);\n      cm.state.focused = true;\n      addClass(cm.display.wrapper, \"CodeMirror-focused\");\n      // This test prevents this from firing when a context\n      // menu is closed (since the input reset would kill the\n      // select-all detection hack)\n      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n        cm.display.input.reset();\n        if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n      }\n      cm.display.input.receivedFocus();\n    }\n    restartBlink(cm);\n  }\n  function onBlur(cm, e) {\n    if (cm.state.delayingBlurEvent) { return }\n\n    if (cm.state.focused) {\n      signal(cm, \"blur\", cm, e);\n      cm.state.focused = false;\n      rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n    }\n    clearInterval(cm.display.blinker);\n    setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n  }\n\n  // Read the actual heights of the rendered lines, and update their\n  // stored heights to match.\n  function updateHeightsInViewport(cm) {\n    var display = cm.display;\n    var prevBottom = display.lineDiv.offsetTop;\n    for (var i = 0; i < display.view.length; i++) {\n      var cur = display.view[i], wrapping = cm.options.lineWrapping;\n      var height = (void 0), width = 0;\n      if (cur.hidden) { continue }\n      if (ie && ie_version < 8) {\n        var bot = cur.node.offsetTop + cur.node.offsetHeight;\n        height = bot - prevBottom;\n        prevBottom = bot;\n      } else {\n        var box = cur.node.getBoundingClientRect();\n        height = box.bottom - box.top;\n        // Check that lines don't extend past the right of the current\n        // editor width\n        if (!wrapping && cur.text.firstChild)\n          { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n      }\n      var diff = cur.line.height - height;\n      if (diff > .005 || diff < -.005) {\n        updateLineHeight(cur.line, height);\n        updateWidgetHeight(cur.line);\n        if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n          { updateWidgetHeight(cur.rest[j]); } }\n      }\n      if (width > cm.display.sizerWidth) {\n        var chWidth = Math.ceil(width / charWidth(cm.display));\n        if (chWidth > cm.display.maxLineLength) {\n          cm.display.maxLineLength = chWidth;\n          cm.display.maxLine = cur.line;\n          cm.display.maxLineChanged = true;\n        }\n      }\n    }\n  }\n\n  // Read and store the height of line widgets associated with the\n  // given line.\n  function updateWidgetHeight(line) {\n    if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n      var w = line.widgets[i], parent = w.node.parentNode;\n      if (parent) { w.height = parent.offsetHeight; }\n    } }\n  }\n\n  // Compute the lines that are visible in a given viewport (defaults\n  // the the current scroll position). viewport may contain top,\n  // height, and ensure (see op.scrollToPos) properties.\n  function visibleLines(display, doc, viewport) {\n    var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n    top = Math.floor(top - paddingTop(display));\n    var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n    // forces those lines into the viewport (if possible).\n    if (viewport && viewport.ensure) {\n      var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n      if (ensureFrom < from) {\n        from = ensureFrom;\n        to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n      } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n        from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n        to = ensureTo;\n      }\n    }\n    return {from: from, to: Math.max(to, from + 1)}\n  }\n\n  // Re-align line numbers and gutter marks to compensate for\n  // horizontal scrolling.\n  function alignHorizontally(cm) {\n    var display = cm.display, view = display.view;\n    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n    var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n    for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n      if (cm.options.fixedGutter) {\n        if (view[i].gutter)\n          { view[i].gutter.style.left = left; }\n        if (view[i].gutterBackground)\n          { view[i].gutterBackground.style.left = left; }\n      }\n      var align = view[i].alignable;\n      if (align) { for (var j = 0; j < align.length; j++)\n        { align[j].style.left = left; } }\n    } }\n    if (cm.options.fixedGutter)\n      { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n  }\n\n  // Used to ensure that the line number gutter is still the right\n  // size for the current document size. Returns true when an update\n  // is needed.\n  function maybeUpdateLineNumberWidth(cm) {\n    if (!cm.options.lineNumbers) { return false }\n    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n    if (last.length != display.lineNumChars) {\n      var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n                                                 \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n      display.lineGutter.style.width = \"\";\n      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n      display.lineNumWidth = display.lineNumInnerWidth + padding;\n      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n      display.lineGutter.style.width = display.lineNumWidth + \"px\";\n      updateGutterSpace(cm);\n      return true\n    }\n    return false\n  }\n\n  // SCROLLING THINGS INTO VIEW\n\n  // If an editor sits on the top or bottom of the window, partially\n  // scrolled out of view, this ensures that the cursor is visible.\n  function maybeScrollWindow(cm, rect) {\n    if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n    var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n    if (rect.top + box.top < 0) { doScroll = true; }\n    else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }\n    if (doScroll != null && !phantom) {\n      var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n                         top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n                         height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n                         left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n      cm.display.lineSpace.appendChild(scrollNode);\n      scrollNode.scrollIntoView(doScroll);\n      cm.display.lineSpace.removeChild(scrollNode);\n    }\n  }\n\n  // Scroll a given position into view (immediately), verifying that\n  // it actually became visible (as line heights are accurately\n  // measured, the position of something may 'drift' during drawing).\n  function scrollPosIntoView(cm, pos, end, margin) {\n    if (margin == null) { margin = 0; }\n    var rect;\n    if (!cm.options.lineWrapping && pos == end) {\n      // Set pos and end to the cursor positions around the character pos sticks to\n      // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n      // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n      pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n      end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n    }\n    for (var limit = 0; limit < 5; limit++) {\n      var changed = false;\n      var coords = cursorCoords(cm, pos);\n      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n      rect = {left: Math.min(coords.left, endCoords.left),\n              top: Math.min(coords.top, endCoords.top) - margin,\n              right: Math.max(coords.left, endCoords.left),\n              bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n      var scrollPos = calculateScrollPos(cm, rect);\n      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n      if (scrollPos.scrollTop != null) {\n        updateScrollTop(cm, scrollPos.scrollTop);\n        if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n      }\n      if (scrollPos.scrollLeft != null) {\n        setScrollLeft(cm, scrollPos.scrollLeft);\n        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n      }\n      if (!changed) { break }\n    }\n    return rect\n  }\n\n  // Scroll a given set of coordinates into view (immediately).\n  function scrollIntoView(cm, rect) {\n    var scrollPos = calculateScrollPos(cm, rect);\n    if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n    if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n  }\n\n  // Calculate a new scroll position needed to scroll the given\n  // rectangle into view. Returns an object with scrollTop and\n  // scrollLeft properties. When these are undefined, the\n  // vertical/horizontal position does not need to be adjusted.\n  function calculateScrollPos(cm, rect) {\n    var display = cm.display, snapMargin = textHeight(cm.display);\n    if (rect.top < 0) { rect.top = 0; }\n    var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n    var screen = displayHeight(cm), result = {};\n    if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n    var docBottom = cm.doc.height + paddingVert(display);\n    var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n    if (rect.top < screentop) {\n      result.scrollTop = atTop ? 0 : rect.top;\n    } else if (rect.bottom > screentop + screen) {\n      var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n      if (newTop != screentop) { result.scrollTop = newTop; }\n    }\n\n    var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;\n    var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);\n    var tooWide = rect.right - rect.left > screenw;\n    if (tooWide) { rect.right = rect.left + screenw; }\n    if (rect.left < 10)\n      { result.scrollLeft = 0; }\n    else if (rect.left < screenleft)\n      { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); }\n    else if (rect.right > screenw + screenleft - 3)\n      { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n    return result\n  }\n\n  // Store a relative adjustment to the scroll position in the current\n  // operation (to be applied when the operation finishes).\n  function addToScrollTop(cm, top) {\n    if (top == null) { return }\n    resolveScrollToPos(cm);\n    cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n  }\n\n  // Make sure that at the end of the operation the current cursor is\n  // shown.\n  function ensureCursorVisible(cm) {\n    resolveScrollToPos(cm);\n    var cur = cm.getCursor();\n    cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n  }\n\n  function scrollToCoords(cm, x, y) {\n    if (x != null || y != null) { resolveScrollToPos(cm); }\n    if (x != null) { cm.curOp.scrollLeft = x; }\n    if (y != null) { cm.curOp.scrollTop = y; }\n  }\n\n  function scrollToRange(cm, range$$1) {\n    resolveScrollToPos(cm);\n    cm.curOp.scrollToPos = range$$1;\n  }\n\n  // When an operation has its scrollToPos property set, and another\n  // scroll action is applied before the end of the operation, this\n  // 'simulates' scrolling that position into view in a cheap way, so\n  // that the effect of intermediate scroll commands is not ignored.\n  function resolveScrollToPos(cm) {\n    var range$$1 = cm.curOp.scrollToPos;\n    if (range$$1) {\n      cm.curOp.scrollToPos = null;\n      var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to);\n      scrollToCoordsRange(cm, from, to, range$$1.margin);\n    }\n  }\n\n  function scrollToCoordsRange(cm, from, to, margin) {\n    var sPos = calculateScrollPos(cm, {\n      left: Math.min(from.left, to.left),\n      top: Math.min(from.top, to.top) - margin,\n      right: Math.max(from.right, to.right),\n      bottom: Math.max(from.bottom, to.bottom) + margin\n    });\n    scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n  }\n\n  // Sync the scrollable area and scrollbars, ensure the viewport\n  // covers the visible area.\n  function updateScrollTop(cm, val) {\n    if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n    if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n    setScrollTop(cm, val, true);\n    if (gecko) { updateDisplaySimple(cm); }\n    startWorker(cm, 100);\n  }\n\n  function setScrollTop(cm, val, forceScroll) {\n    val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val);\n    if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n    cm.doc.scrollTop = val;\n    cm.display.scrollbars.setScrollTop(val);\n    if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n  }\n\n  // Sync scroller and scrollbar, ensure the gutter elements are\n  // aligned.\n  function setScrollLeft(cm, val, isScroller, forceScroll) {\n    val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);\n    if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n    cm.doc.scrollLeft = val;\n    alignHorizontally(cm);\n    if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n    cm.display.scrollbars.setScrollLeft(val);\n  }\n\n  // SCROLLBARS\n\n  // Prepare DOM reads needed to update the scrollbars. Done in one\n  // shot to minimize update/measure roundtrips.\n  function measureForScrollbars(cm) {\n    var d = cm.display, gutterW = d.gutters.offsetWidth;\n    var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n    return {\n      clientHeight: d.scroller.clientHeight,\n      viewHeight: d.wrapper.clientHeight,\n      scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n      viewWidth: d.wrapper.clientWidth,\n      barLeft: cm.options.fixedGutter ? gutterW : 0,\n      docHeight: docH,\n      scrollHeight: docH + scrollGap(cm) + d.barHeight,\n      nativeBarWidth: d.nativeBarWidth,\n      gutterWidth: gutterW\n    }\n  }\n\n  var NativeScrollbars = function(place, scroll, cm) {\n    this.cm = cm;\n    var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n    var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n    vert.tabIndex = horiz.tabIndex = -1;\n    place(vert); place(horiz);\n\n    on(vert, \"scroll\", function () {\n      if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n    });\n    on(horiz, \"scroll\", function () {\n      if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n    });\n\n    this.checkedZeroWidth = false;\n    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n    if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n  };\n\n  NativeScrollbars.prototype.update = function (measure) {\n    var needsH = measure.scrollWidth > measure.clientWidth + 1;\n    var needsV = measure.scrollHeight > measure.clientHeight + 1;\n    var sWidth = measure.nativeBarWidth;\n\n    if (needsV) {\n      this.vert.style.display = \"block\";\n      this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n      var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n      // A bug in IE8 can cause this value to be negative, so guard it.\n      this.vert.firstChild.style.height =\n        Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n    } else {\n      this.vert.style.display = \"\";\n      this.vert.firstChild.style.height = \"0\";\n    }\n\n    if (needsH) {\n      this.horiz.style.display = \"block\";\n      this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n      this.horiz.style.left = measure.barLeft + \"px\";\n      var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n      this.horiz.firstChild.style.width =\n        Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n    } else {\n      this.horiz.style.display = \"\";\n      this.horiz.firstChild.style.width = \"0\";\n    }\n\n    if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n      if (sWidth == 0) { this.zeroWidthHack(); }\n      this.checkedZeroWidth = true;\n    }\n\n    return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n  };\n\n  NativeScrollbars.prototype.setScrollLeft = function (pos) {\n    if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n    if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n  };\n\n  NativeScrollbars.prototype.setScrollTop = function (pos) {\n    if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n    if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n  };\n\n  NativeScrollbars.prototype.zeroWidthHack = function () {\n    var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n    this.horiz.style.height = this.vert.style.width = w;\n    this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n    this.disableHoriz = new Delayed;\n    this.disableVert = new Delayed;\n  };\n\n  NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n    bar.style.pointerEvents = \"auto\";\n    function maybeDisable() {\n      // To find out whether the scrollbar is still visible, we\n      // check whether the element under the pixel in the bottom\n      // right corner of the scrollbar box is the scrollbar box\n      // itself (when the bar is still visible) or its filler child\n      // (when the bar is hidden). If it is still visible, we keep\n      // it enabled, if it's hidden, we disable pointer events.\n      var box = bar.getBoundingClientRect();\n      var elt$$1 = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n          : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n      if (elt$$1 != bar) { bar.style.pointerEvents = \"none\"; }\n      else { delay.set(1000, maybeDisable); }\n    }\n    delay.set(1000, maybeDisable);\n  };\n\n  NativeScrollbars.prototype.clear = function () {\n    var parent = this.horiz.parentNode;\n    parent.removeChild(this.horiz);\n    parent.removeChild(this.vert);\n  };\n\n  var NullScrollbars = function () {};\n\n  NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n  NullScrollbars.prototype.setScrollLeft = function () {};\n  NullScrollbars.prototype.setScrollTop = function () {};\n  NullScrollbars.prototype.clear = function () {};\n\n  function updateScrollbars(cm, measure) {\n    if (!measure) { measure = measureForScrollbars(cm); }\n    var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n    updateScrollbarsInner(cm, measure);\n    for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n      if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n        { updateHeightsInViewport(cm); }\n      updateScrollbarsInner(cm, measureForScrollbars(cm));\n      startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n    }\n  }\n\n  // Re-synchronize the fake scrollbars with the actual size of the\n  // content.\n  function updateScrollbarsInner(cm, measure) {\n    var d = cm.display;\n    var sizes = d.scrollbars.update(measure);\n\n    d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n    d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n    d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n    if (sizes.right && sizes.bottom) {\n      d.scrollbarFiller.style.display = \"block\";\n      d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n      d.scrollbarFiller.style.width = sizes.right + \"px\";\n    } else { d.scrollbarFiller.style.display = \"\"; }\n    if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n      d.gutterFiller.style.display = \"block\";\n      d.gutterFiller.style.height = sizes.bottom + \"px\";\n      d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n    } else { d.gutterFiller.style.display = \"\"; }\n  }\n\n  var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n  function initScrollbars(cm) {\n    if (cm.display.scrollbars) {\n      cm.display.scrollbars.clear();\n      if (cm.display.scrollbars.addClass)\n        { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n    }\n\n    cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n      cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n      // Prevent clicks in the scrollbars from killing focus\n      on(node, \"mousedown\", function () {\n        if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n      });\n      node.setAttribute(\"cm-not-content\", \"true\");\n    }, function (pos, axis) {\n      if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n      else { updateScrollTop(cm, pos); }\n    }, cm);\n    if (cm.display.scrollbars.addClass)\n      { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n  }\n\n  // Operations are used to wrap a series of changes to the editor\n  // state in such a way that each change won't have to update the\n  // cursor and display (which would be awkward, slow, and\n  // error-prone). Instead, display updates are batched and then all\n  // combined and executed at once.\n\n  var nextOpId = 0;\n  // Start a new operation.\n  function startOperation(cm) {\n    cm.curOp = {\n      cm: cm,\n      viewChanged: false,      // Flag that indicates that lines might need to be redrawn\n      startHeight: cm.doc.height, // Used to detect need to update scrollbar\n      forceUpdate: false,      // Used to force a redraw\n      updateInput: 0,       // Whether to reset the input textarea\n      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)\n      changeObjs: null,        // Accumulated changes, for firing change events\n      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n      cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n      selectionChanged: false, // Whether the selection needs to be redrawn\n      updateMaxLine: false,    // Set when the widest line needs to be determined anew\n      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n      scrollToPos: null,       // Used to scroll to a specific position\n      focus: false,\n      id: ++nextOpId           // Unique ID\n    };\n    pushOperation(cm.curOp);\n  }\n\n  // Finish an operation, updating the display and signalling delayed events\n  function endOperation(cm) {\n    var op = cm.curOp;\n    if (op) { finishOperation(op, function (group) {\n      for (var i = 0; i < group.ops.length; i++)\n        { group.ops[i].cm.curOp = null; }\n      endOperations(group);\n    }); }\n  }\n\n  // The DOM updates done when an operation finishes are batched so\n  // that the minimum number of relayouts are required.\n  function endOperations(group) {\n    var ops = group.ops;\n    for (var i = 0; i < ops.length; i++) // Read DOM\n      { endOperation_R1(ops[i]); }\n    for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n      { endOperation_W1(ops[i$1]); }\n    for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n      { endOperation_R2(ops[i$2]); }\n    for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n      { endOperation_W2(ops[i$3]); }\n    for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n      { endOperation_finish(ops[i$4]); }\n  }\n\n  function endOperation_R1(op) {\n    var cm = op.cm, display = cm.display;\n    maybeClipScrollbars(cm);\n    if (op.updateMaxLine) { findMaxLine(cm); }\n\n    op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n      op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n                         op.scrollToPos.to.line >= display.viewTo) ||\n      display.maxLineChanged && cm.options.lineWrapping;\n    op.update = op.mustUpdate &&\n      new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n  }\n\n  function endOperation_W1(op) {\n    op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n  }\n\n  function endOperation_R2(op) {\n    var cm = op.cm, display = cm.display;\n    if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n    op.barMeasure = measureForScrollbars(cm);\n\n    // If the max line changed since it was last measured, measure it,\n    // and ensure the document's width matches it.\n    // updateDisplay_W2 will use these properties to do the actual resizing\n    if (display.maxLineChanged && !cm.options.lineWrapping) {\n      op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n      cm.display.sizerWidth = op.adjustWidthTo;\n      op.barMeasure.scrollWidth =\n        Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n      op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n    }\n\n    if (op.updatedDisplay || op.selectionChanged)\n      { op.preparedSelection = display.input.prepareSelection(); }\n  }\n\n  function endOperation_W2(op) {\n    var cm = op.cm;\n\n    if (op.adjustWidthTo != null) {\n      cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n      if (op.maxScrollLeft < cm.doc.scrollLeft)\n        { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n      cm.display.maxLineChanged = false;\n    }\n\n    var takeFocus = op.focus && op.focus == activeElt();\n    if (op.preparedSelection)\n      { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n    if (op.updatedDisplay || op.startHeight != cm.doc.height)\n      { updateScrollbars(cm, op.barMeasure); }\n    if (op.updatedDisplay)\n      { setDocumentHeight(cm, op.barMeasure); }\n\n    if (op.selectionChanged) { restartBlink(cm); }\n\n    if (cm.state.focused && op.updateInput)\n      { cm.display.input.reset(op.typing); }\n    if (takeFocus) { ensureFocus(op.cm); }\n  }\n\n  function endOperation_finish(op) {\n    var cm = op.cm, display = cm.display, doc = cm.doc;\n\n    if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n    // Abort mouse wheel delta measurement, when scrolling explicitly\n    if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n      { display.wheelStartX = display.wheelStartY = null; }\n\n    // Propagate the scroll position to the actual DOM scroller\n    if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n    if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n    // If we need to scroll a specific position into view, do so.\n    if (op.scrollToPos) {\n      var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n                                   clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n      maybeScrollWindow(cm, rect);\n    }\n\n    // Fire events for markers that are hidden/unidden by editing or\n    // undoing\n    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n    if (hidden) { for (var i = 0; i < hidden.length; ++i)\n      { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n    if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n      { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n    if (display.wrapper.offsetHeight)\n      { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n    // Fire change events, and delayed event handlers\n    if (op.changeObjs)\n      { signal(cm, \"changes\", cm, op.changeObjs); }\n    if (op.update)\n      { op.update.finish(); }\n  }\n\n  // Run the given function in an operation\n  function runInOp(cm, f) {\n    if (cm.curOp) { return f() }\n    startOperation(cm);\n    try { return f() }\n    finally { endOperation(cm); }\n  }\n  // Wraps a function in an operation. Returns the wrapped function.\n  function operation(cm, f) {\n    return function() {\n      if (cm.curOp) { return f.apply(cm, arguments) }\n      startOperation(cm);\n      try { return f.apply(cm, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n  // Used to add methods to editor and doc instances, wrapping them in\n  // operations.\n  function methodOp(f) {\n    return function() {\n      if (this.curOp) { return f.apply(this, arguments) }\n      startOperation(this);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(this); }\n    }\n  }\n  function docMethodOp(f) {\n    return function() {\n      var cm = this.cm;\n      if (!cm || cm.curOp) { return f.apply(this, arguments) }\n      startOperation(cm);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n\n  // Updates the display.view data structure for a given change to the\n  // document. From and to are in pre-change coordinates. Lendiff is\n  // the amount of lines added or subtracted by the change. This is\n  // used for changes that span multiple lines, or change the way\n  // lines are divided into visual lines. regLineChange (below)\n  // registers single-line changes.\n  function regChange(cm, from, to, lendiff) {\n    if (from == null) { from = cm.doc.first; }\n    if (to == null) { to = cm.doc.first + cm.doc.size; }\n    if (!lendiff) { lendiff = 0; }\n\n    var display = cm.display;\n    if (lendiff && to < display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers > from))\n      { display.updateLineNumbers = from; }\n\n    cm.curOp.viewChanged = true;\n\n    if (from >= display.viewTo) { // Change after\n      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n        { resetView(cm); }\n    } else if (to <= display.viewFrom) { // Change before\n      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n        resetView(cm);\n      } else {\n        display.viewFrom += lendiff;\n        display.viewTo += lendiff;\n      }\n    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n      resetView(cm);\n    } else if (from <= display.viewFrom) { // Top overlap\n      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cut) {\n        display.view = display.view.slice(cut.index);\n        display.viewFrom = cut.lineN;\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    } else if (to >= display.viewTo) { // Bottom overlap\n      var cut$1 = viewCuttingPoint(cm, from, from, -1);\n      if (cut$1) {\n        display.view = display.view.slice(0, cut$1.index);\n        display.viewTo = cut$1.lineN;\n      } else {\n        resetView(cm);\n      }\n    } else { // Gap in the middle\n      var cutTop = viewCuttingPoint(cm, from, from, -1);\n      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cutTop && cutBot) {\n        display.view = display.view.slice(0, cutTop.index)\n          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n          .concat(display.view.slice(cutBot.index));\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    }\n\n    var ext = display.externalMeasured;\n    if (ext) {\n      if (to < ext.lineN)\n        { ext.lineN += lendiff; }\n      else if (from < ext.lineN + ext.size)\n        { display.externalMeasured = null; }\n    }\n  }\n\n  // Register a change to a single line. Type must be one of \"text\",\n  // \"gutter\", \"class\", \"widget\"\n  function regLineChange(cm, line, type) {\n    cm.curOp.viewChanged = true;\n    var display = cm.display, ext = cm.display.externalMeasured;\n    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n      { display.externalMeasured = null; }\n\n    if (line < display.viewFrom || line >= display.viewTo) { return }\n    var lineView = display.view[findViewIndex(cm, line)];\n    if (lineView.node == null) { return }\n    var arr = lineView.changes || (lineView.changes = []);\n    if (indexOf(arr, type) == -1) { arr.push(type); }\n  }\n\n  // Clear the view.\n  function resetView(cm) {\n    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n    cm.display.view = [];\n    cm.display.viewOffset = 0;\n  }\n\n  function viewCuttingPoint(cm, oldN, newN, dir) {\n    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n      { return {index: index, lineN: newN} }\n    var n = cm.display.viewFrom;\n    for (var i = 0; i < index; i++)\n      { n += view[i].size; }\n    if (n != oldN) {\n      if (dir > 0) {\n        if (index == view.length - 1) { return null }\n        diff = (n + view[index].size) - oldN;\n        index++;\n      } else {\n        diff = n - oldN;\n      }\n      oldN += diff; newN += diff;\n    }\n    while (visualLineNo(cm.doc, newN) != newN) {\n      if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n      index += dir;\n    }\n    return {index: index, lineN: newN}\n  }\n\n  // Force the view to cover a given range, adding empty view element\n  // or clipping off existing ones as needed.\n  function adjustView(cm, from, to) {\n    var display = cm.display, view = display.view;\n    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n      display.view = buildViewArray(cm, from, to);\n      display.viewFrom = from;\n    } else {\n      if (display.viewFrom > from)\n        { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n      else if (display.viewFrom < from)\n        { display.view = display.view.slice(findViewIndex(cm, from)); }\n      display.viewFrom = from;\n      if (display.viewTo < to)\n        { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n      else if (display.viewTo > to)\n        { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n    }\n    display.viewTo = to;\n  }\n\n  // Count the number of lines in the view whose DOM representation is\n  // out of date (or nonexistent).\n  function countDirtyView(cm) {\n    var view = cm.display.view, dirty = 0;\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n    }\n    return dirty\n  }\n\n  // HIGHLIGHT WORKER\n\n  function startWorker(cm, time) {\n    if (cm.doc.highlightFrontier < cm.display.viewTo)\n      { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n  }\n\n  function highlightWorker(cm) {\n    var doc = cm.doc;\n    if (doc.highlightFrontier >= cm.display.viewTo) { return }\n    var end = +new Date + cm.options.workTime;\n    var context = getContextBefore(cm, doc.highlightFrontier);\n    var changedLines = [];\n\n    doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n      if (context.line >= cm.display.viewFrom) { // Visible\n        var oldStyles = line.styles;\n        var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n        var highlighted = highlightLine(cm, line, context, true);\n        if (resetState) { context.state = resetState; }\n        line.styles = highlighted.styles;\n        var oldCls = line.styleClasses, newCls = highlighted.classes;\n        if (newCls) { line.styleClasses = newCls; }\n        else if (oldCls) { line.styleClasses = null; }\n        var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n          oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n        for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n        if (ischange) { changedLines.push(context.line); }\n        line.stateAfter = context.save();\n        context.nextLine();\n      } else {\n        if (line.text.length <= cm.options.maxHighlightLength)\n          { processLine(cm, line.text, context); }\n        line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n        context.nextLine();\n      }\n      if (+new Date > end) {\n        startWorker(cm, cm.options.workDelay);\n        return true\n      }\n    });\n    doc.highlightFrontier = context.line;\n    doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n    if (changedLines.length) { runInOp(cm, function () {\n      for (var i = 0; i < changedLines.length; i++)\n        { regLineChange(cm, changedLines[i], \"text\"); }\n    }); }\n  }\n\n  // DISPLAY DRAWING\n\n  var DisplayUpdate = function(cm, viewport, force) {\n    var display = cm.display;\n\n    this.viewport = viewport;\n    // Store some values that we'll need later (but don't want to force a relayout for)\n    this.visible = visibleLines(display, cm.doc, viewport);\n    this.editorIsHidden = !display.wrapper.offsetWidth;\n    this.wrapperHeight = display.wrapper.clientHeight;\n    this.wrapperWidth = display.wrapper.clientWidth;\n    this.oldDisplayWidth = displayWidth(cm);\n    this.force = force;\n    this.dims = getDimensions(cm);\n    this.events = [];\n  };\n\n  DisplayUpdate.prototype.signal = function (emitter, type) {\n    if (hasHandler(emitter, type))\n      { this.events.push(arguments); }\n  };\n  DisplayUpdate.prototype.finish = function () {\n      var this$1 = this;\n\n    for (var i = 0; i < this.events.length; i++)\n      { signal.apply(null, this$1.events[i]); }\n  };\n\n  function maybeClipScrollbars(cm) {\n    var display = cm.display;\n    if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n      display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n      display.heightForcer.style.height = scrollGap(cm) + \"px\";\n      display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n      display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n      display.scrollbarsClipped = true;\n    }\n  }\n\n  function selectionSnapshot(cm) {\n    if (cm.hasFocus()) { return null }\n    var active = activeElt();\n    if (!active || !contains(cm.display.lineDiv, active)) { return null }\n    var result = {activeElt: active};\n    if (window.getSelection) {\n      var sel = window.getSelection();\n      if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n        result.anchorNode = sel.anchorNode;\n        result.anchorOffset = sel.anchorOffset;\n        result.focusNode = sel.focusNode;\n        result.focusOffset = sel.focusOffset;\n      }\n    }\n    return result\n  }\n\n  function restoreSelection(snapshot) {\n    if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }\n    snapshot.activeElt.focus();\n    if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n      var sel = window.getSelection(), range$$1 = document.createRange();\n      range$$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n      range$$1.collapse(false);\n      sel.removeAllRanges();\n      sel.addRange(range$$1);\n      sel.extend(snapshot.focusNode, snapshot.focusOffset);\n    }\n  }\n\n  // Does the actual updating of the line display. Bails out\n  // (returning false) when there is nothing to be done and forced is\n  // false.\n  function updateDisplayIfNeeded(cm, update) {\n    var display = cm.display, doc = cm.doc;\n\n    if (update.editorIsHidden) {\n      resetView(cm);\n      return false\n    }\n\n    // Bail out if the visible area is already rendered and nothing changed.\n    if (!update.force &&\n        update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n        display.renderedView == display.view && countDirtyView(cm) == 0)\n      { return false }\n\n    if (maybeUpdateLineNumberWidth(cm)) {\n      resetView(cm);\n      update.dims = getDimensions(cm);\n    }\n\n    // Compute a suitable new viewport (from & to)\n    var end = doc.first + doc.size;\n    var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n    var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n    if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n    if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n    if (sawCollapsedSpans) {\n      from = visualLineNo(cm.doc, from);\n      to = visualLineEndNo(cm.doc, to);\n    }\n\n    var different = from != display.viewFrom || to != display.viewTo ||\n      display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n    adjustView(cm, from, to);\n\n    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n    // Position the mover div to align with the current scroll position\n    cm.display.mover.style.top = display.viewOffset + \"px\";\n\n    var toUpdate = countDirtyView(cm);\n    if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n      { return false }\n\n    // For big changes, we hide the enclosing element during the\n    // update, since that speeds up the operations on most browsers.\n    var selSnapshot = selectionSnapshot(cm);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n    patchDisplay(cm, display.updateLineNumbers, update.dims);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n    display.renderedView = display.view;\n    // There might have been a widget with a focused element that got\n    // hidden or updated, if so re-focus it.\n    restoreSelection(selSnapshot);\n\n    // Prevent selection and cursors from interfering with the scroll\n    // width and height.\n    removeChildren(display.cursorDiv);\n    removeChildren(display.selectionDiv);\n    display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n    if (different) {\n      display.lastWrapHeight = update.wrapperHeight;\n      display.lastWrapWidth = update.wrapperWidth;\n      startWorker(cm, 400);\n    }\n\n    display.updateLineNumbers = null;\n\n    return true\n  }\n\n  function postUpdateDisplay(cm, update) {\n    var viewport = update.viewport;\n\n    for (var first = true;; first = false) {\n      if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n        // Clip forced viewport to actual scrollable area.\n        if (viewport && viewport.top != null)\n          { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n        // Updated line heights might result in the drawn area not\n        // actually covering the viewport. Keep looping until it does.\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n          { break }\n      }\n      if (!updateDisplayIfNeeded(cm, update)) { break }\n      updateHeightsInViewport(cm);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.force = false;\n    }\n\n    update.signal(cm, \"update\", cm);\n    if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n      update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n      cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n    }\n  }\n\n  function updateDisplaySimple(cm, viewport) {\n    var update = new DisplayUpdate(cm, viewport);\n    if (updateDisplayIfNeeded(cm, update)) {\n      updateHeightsInViewport(cm);\n      postUpdateDisplay(cm, update);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.finish();\n    }\n  }\n\n  // Sync the actual display DOM structure with display.view, removing\n  // nodes for lines that are no longer in view, and creating the ones\n  // that are not there yet, and updating the ones that are out of\n  // date.\n  function patchDisplay(cm, updateNumbersFrom, dims) {\n    var display = cm.display, lineNumbers = cm.options.lineNumbers;\n    var container = display.lineDiv, cur = container.firstChild;\n\n    function rm(node) {\n      var next = node.nextSibling;\n      // Works around a throw-scroll bug in OS X Webkit\n      if (webkit && mac && cm.display.currentWheelTarget == node)\n        { node.style.display = \"none\"; }\n      else\n        { node.parentNode.removeChild(node); }\n      return next\n    }\n\n    var view = display.view, lineN = display.viewFrom;\n    // Loop over the elements in the view, syncing cur (the DOM nodes\n    // in display.lineDiv) with the view as we go.\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n        var node = buildLineElement(cm, lineView, lineN, dims);\n        container.insertBefore(node, cur);\n      } else { // Already drawn\n        while (cur != lineView.node) { cur = rm(cur); }\n        var updateNumber = lineNumbers && updateNumbersFrom != null &&\n          updateNumbersFrom <= lineN && lineView.lineNumber;\n        if (lineView.changes) {\n          if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n          updateLineForChanges(cm, lineView, lineN, dims);\n        }\n        if (updateNumber) {\n          removeChildren(lineView.lineNumber);\n          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n        }\n        cur = lineView.node.nextSibling;\n      }\n      lineN += lineView.size;\n    }\n    while (cur) { cur = rm(cur); }\n  }\n\n  function updateGutterSpace(cm) {\n    var width = cm.display.gutters.offsetWidth;\n    cm.display.sizer.style.marginLeft = width + \"px\";\n  }\n\n  function setDocumentHeight(cm, measure) {\n    cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n    cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n    cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n  }\n\n  // Rebuild the gutter elements, ensure the margin to the left of the\n  // code matches their width.\n  function updateGutters(cm) {\n    var gutters = cm.display.gutters, specs = cm.options.gutters;\n    removeChildren(gutters);\n    var i = 0;\n    for (; i < specs.length; ++i) {\n      var gutterClass = specs[i];\n      var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + gutterClass));\n      if (gutterClass == \"CodeMirror-linenumbers\") {\n        cm.display.lineGutter = gElt;\n        gElt.style.width = (cm.display.lineNumWidth || 1) + \"px\";\n      }\n    }\n    gutters.style.display = i ? \"\" : \"none\";\n    updateGutterSpace(cm);\n  }\n\n  // Make sure the gutters options contains the element\n  // \"CodeMirror-linenumbers\" when the lineNumbers option is true.\n  function setGuttersForLineNumbers(options) {\n    var found = indexOf(options.gutters, \"CodeMirror-linenumbers\");\n    if (found == -1 && options.lineNumbers) {\n      options.gutters = options.gutters.concat([\"CodeMirror-linenumbers\"]);\n    } else if (found > -1 && !options.lineNumbers) {\n      options.gutters = options.gutters.slice(0);\n      options.gutters.splice(found, 1);\n    }\n  }\n\n  // Since the delta values reported on mouse wheel events are\n  // unstandardized between browsers and even browser versions, and\n  // generally horribly unpredictable, this code starts by measuring\n  // the scroll effect that the first few mouse wheel events have,\n  // and, from that, detects the way it can convert deltas to pixel\n  // offsets afterwards.\n  //\n  // The reason we want to know the amount a wheel event will scroll\n  // is that it gives us a chance to update the display before the\n  // actual scrolling happens, reducing flickering.\n\n  var wheelSamples = 0, wheelPixelsPerUnit = null;\n  // Fill in a browser-detected starting value on browsers where we\n  // know one. These don't have to be accurate -- the result of them\n  // being wrong would just be a slight flicker on the first wheel\n  // scroll (if it is large enough).\n  if (ie) { wheelPixelsPerUnit = -.53; }\n  else if (gecko) { wheelPixelsPerUnit = 15; }\n  else if (chrome) { wheelPixelsPerUnit = -.7; }\n  else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n  function wheelEventDelta(e) {\n    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n    else if (dy == null) { dy = e.wheelDelta; }\n    return {x: dx, y: dy}\n  }\n  function wheelEventPixels(e) {\n    var delta = wheelEventDelta(e);\n    delta.x *= wheelPixelsPerUnit;\n    delta.y *= wheelPixelsPerUnit;\n    return delta\n  }\n\n  function onScrollWheel(cm, e) {\n    var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n\n    var display = cm.display, scroll = display.scroller;\n    // Quit if there's nothing to scroll here\n    var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n    var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n    if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n    // Webkit browsers on OS X abort momentum scrolls when the target\n    // of the scroll event is removed from the scrollable element.\n    // This hack (see related code in patchDisplay) makes sure the\n    // element is kept around.\n    if (dy && mac && webkit) {\n      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n        for (var i = 0; i < view.length; i++) {\n          if (view[i].node == cur) {\n            cm.display.currentWheelTarget = cur;\n            break outer\n          }\n        }\n      }\n    }\n\n    // On some browsers, horizontal scrolling will cause redraws to\n    // happen before the gutter has been realigned, causing it to\n    // wriggle around in a most unseemly way. When we have an\n    // estimated pixels/delta value, we just handle horizontal\n    // scrolling entirely here. It'll be slightly off from native, but\n    // better than glitching out.\n    if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n      if (dy && canScrollY)\n        { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }\n      setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));\n      // Only prevent default scrolling if vertical scrolling is\n      // actually possible. Otherwise, it causes vertical scroll\n      // jitter on OSX trackpads when deltaX is small and deltaY\n      // is large (issue #3579)\n      if (!dy || (dy && canScrollY))\n        { e_preventDefault(e); }\n      display.wheelStartX = null; // Abort measurement, if in progress\n      return\n    }\n\n    // 'Project' the visible viewport to cover the area that is being\n    // scrolled into view (if we know enough to estimate it).\n    if (dy && wheelPixelsPerUnit != null) {\n      var pixels = dy * wheelPixelsPerUnit;\n      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n      if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n      else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n      updateDisplaySimple(cm, {top: top, bottom: bot});\n    }\n\n    if (wheelSamples < 20) {\n      if (display.wheelStartX == null) {\n        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n        display.wheelDX = dx; display.wheelDY = dy;\n        setTimeout(function () {\n          if (display.wheelStartX == null) { return }\n          var movedX = scroll.scrollLeft - display.wheelStartX;\n          var movedY = scroll.scrollTop - display.wheelStartY;\n          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n            (movedX && display.wheelDX && movedX / display.wheelDX);\n          display.wheelStartX = display.wheelStartY = null;\n          if (!sample) { return }\n          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n          ++wheelSamples;\n        }, 200);\n      } else {\n        display.wheelDX += dx; display.wheelDY += dy;\n      }\n    }\n  }\n\n  // Selection objects are immutable. A new one is created every time\n  // the selection changes. A selection is one or more non-overlapping\n  // (and non-touching) ranges, sorted, and an integer that indicates\n  // which one is the primary selection (the one that's scrolled into\n  // view, that getCursor returns, etc).\n  var Selection = function(ranges, primIndex) {\n    this.ranges = ranges;\n    this.primIndex = primIndex;\n  };\n\n  Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n  Selection.prototype.equals = function (other) {\n      var this$1 = this;\n\n    if (other == this) { return true }\n    if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var here = this$1.ranges[i], there = other.ranges[i];\n      if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n    }\n    return true\n  };\n\n  Selection.prototype.deepCopy = function () {\n      var this$1 = this;\n\n    var out = [];\n    for (var i = 0; i < this.ranges.length; i++)\n      { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)); }\n    return new Selection(out, this.primIndex)\n  };\n\n  Selection.prototype.somethingSelected = function () {\n      var this$1 = this;\n\n    for (var i = 0; i < this.ranges.length; i++)\n      { if (!this$1.ranges[i].empty()) { return true } }\n    return false\n  };\n\n  Selection.prototype.contains = function (pos, end) {\n      var this$1 = this;\n\n    if (!end) { end = pos; }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var range = this$1.ranges[i];\n      if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n        { return i }\n    }\n    return -1\n  };\n\n  var Range = function(anchor, head) {\n    this.anchor = anchor; this.head = head;\n  };\n\n  Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n  Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n  Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n  // Take an unsorted, potentially overlapping set of ranges, and\n  // build a selection out of it. 'Consumes' ranges array (modifying\n  // it).\n  function normalizeSelection(cm, ranges, primIndex) {\n    var mayTouch = cm && cm.options.selectionsMayTouch;\n    var prim = ranges[primIndex];\n    ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n    primIndex = indexOf(ranges, prim);\n    for (var i = 1; i < ranges.length; i++) {\n      var cur = ranges[i], prev = ranges[i - 1];\n      var diff = cmp(prev.to(), cur.from());\n      if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n        if (i <= primIndex) { --primIndex; }\n        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n      }\n    }\n    return new Selection(ranges, primIndex)\n  }\n\n  function simpleSelection(anchor, head) {\n    return new Selection([new Range(anchor, head || anchor)], 0)\n  }\n\n  // Compute the position of the end of a change (its 'to' property\n  // refers to the pre-change end).\n  function changeEnd(change) {\n    if (!change.text) { return change.to }\n    return Pos(change.from.line + change.text.length - 1,\n               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n  }\n\n  // Adjust a position to refer to the post-change position of the\n  // same text, or the end of the change if the change covers it.\n  function adjustForChange(pos, change) {\n    if (cmp(pos, change.from) < 0) { return pos }\n    if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n    var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n    if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n    return Pos(line, ch)\n  }\n\n  function computeSelAfterChange(doc, change) {\n    var out = [];\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      var range = doc.sel.ranges[i];\n      out.push(new Range(adjustForChange(range.anchor, change),\n                         adjustForChange(range.head, change)));\n    }\n    return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n  }\n\n  function offsetPos(pos, old, nw) {\n    if (pos.line == old.line)\n      { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n    else\n      { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n  }\n\n  // Used by replaceSelections to allow moving the selection to the\n  // start or around the replaced test. Hint may be \"start\" or \"around\".\n  function computeReplacedSel(doc, changes, hint) {\n    var out = [];\n    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n    for (var i = 0; i < changes.length; i++) {\n      var change = changes[i];\n      var from = offsetPos(change.from, oldPrev, newPrev);\n      var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n      oldPrev = change.to;\n      newPrev = to;\n      if (hint == \"around\") {\n        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n        out[i] = new Range(inv ? to : from, inv ? from : to);\n      } else {\n        out[i] = new Range(from, from);\n      }\n    }\n    return new Selection(out, doc.sel.primIndex)\n  }\n\n  // Used to get the editor into a consistent state again when options change.\n\n  function loadMode(cm) {\n    cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n    resetModeState(cm);\n  }\n\n  function resetModeState(cm) {\n    cm.doc.iter(function (line) {\n      if (line.stateAfter) { line.stateAfter = null; }\n      if (line.styles) { line.styles = null; }\n    });\n    cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n    startWorker(cm, 100);\n    cm.state.modeGen++;\n    if (cm.curOp) { regChange(cm); }\n  }\n\n  // DOCUMENT DATA STRUCTURE\n\n  // By default, updates that start and end at the beginning of a line\n  // are treated specially, in order to make the association of line\n  // widgets and marker elements with the text behave more intuitive.\n  function isWholeLineUpdate(doc, change) {\n    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n      (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n  }\n\n  // Perform a change on the document data structure.\n  function updateDoc(doc, change, markedSpans, estimateHeight$$1) {\n    function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n    function update(line, text, spans) {\n      updateLine(line, text, spans, estimateHeight$$1);\n      signalLater(line, \"change\", line, change);\n    }\n    function linesFor(start, end) {\n      var result = [];\n      for (var i = start; i < end; ++i)\n        { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)); }\n      return result\n    }\n\n    var from = change.from, to = change.to, text = change.text;\n    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n    // Adjust the line structure\n    if (change.full) {\n      doc.insert(0, linesFor(0, text.length));\n      doc.remove(text.length, doc.size - text.length);\n    } else if (isWholeLineUpdate(doc, change)) {\n      // This is a whole-line replace. Treated specially to make\n      // sure line objects move the way they are supposed to.\n      var added = linesFor(0, text.length - 1);\n      update(lastLine, lastLine.text, lastSpans);\n      if (nlines) { doc.remove(from.line, nlines); }\n      if (added.length) { doc.insert(from.line, added); }\n    } else if (firstLine == lastLine) {\n      if (text.length == 1) {\n        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n      } else {\n        var added$1 = linesFor(1, text.length - 1);\n        added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1));\n        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n        doc.insert(from.line + 1, added$1);\n      }\n    } else if (text.length == 1) {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n      doc.remove(from.line + 1, nlines);\n    } else {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n      var added$2 = linesFor(1, text.length - 1);\n      if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n      doc.insert(from.line + 1, added$2);\n    }\n\n    signalLater(doc, \"change\", doc, change);\n  }\n\n  // Call f for all linked documents.\n  function linkedDocs(doc, f, sharedHistOnly) {\n    function propagate(doc, skip, sharedHist) {\n      if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n        var rel = doc.linked[i];\n        if (rel.doc == skip) { continue }\n        var shared = sharedHist && rel.sharedHist;\n        if (sharedHistOnly && !shared) { continue }\n        f(rel.doc, shared);\n        propagate(rel.doc, doc, shared);\n      } }\n    }\n    propagate(doc, null, true);\n  }\n\n  // Attach a document to an editor.\n  function attachDoc(cm, doc) {\n    if (doc.cm) { throw new Error(\"This document is already in use.\") }\n    cm.doc = doc;\n    doc.cm = cm;\n    estimateLineHeights(cm);\n    loadMode(cm);\n    setDirectionClass(cm);\n    if (!cm.options.lineWrapping) { findMaxLine(cm); }\n    cm.options.mode = doc.modeOption;\n    regChange(cm);\n  }\n\n  function setDirectionClass(cm) {\n  (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n  }\n\n  function directionChanged(cm) {\n    runInOp(cm, function () {\n      setDirectionClass(cm);\n      regChange(cm);\n    });\n  }\n\n  function History(startGen) {\n    // Arrays of change events and selections. Doing something adds an\n    // event to done and clears undo. Undoing moves events from done\n    // to undone, redoing moves them in the other direction.\n    this.done = []; this.undone = [];\n    this.undoDepth = Infinity;\n    // Used to track when changes can be merged into a single undo\n    // event\n    this.lastModTime = this.lastSelTime = 0;\n    this.lastOp = this.lastSelOp = null;\n    this.lastOrigin = this.lastSelOrigin = null;\n    // Used by the isClean() method\n    this.generation = this.maxGeneration = startGen || 1;\n  }\n\n  // Create a history change event from an updateDoc-style change\n  // object.\n  function historyChangeFromChange(doc, change) {\n    var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n    linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n    return histChange\n  }\n\n  // Pop all selection events off the end of a history array. Stop at\n  // a change event.\n  function clearSelectionEvents(array) {\n    while (array.length) {\n      var last = lst(array);\n      if (last.ranges) { array.pop(); }\n      else { break }\n    }\n  }\n\n  // Find the top change event in the history. Pop off selection\n  // events that are in the way.\n  function lastChangeEvent(hist, force) {\n    if (force) {\n      clearSelectionEvents(hist.done);\n      return lst(hist.done)\n    } else if (hist.done.length && !lst(hist.done).ranges) {\n      return lst(hist.done)\n    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n      hist.done.pop();\n      return lst(hist.done)\n    }\n  }\n\n  // Register a change in the history. Merges changes that are within\n  // a single operation, or are close together with an origin that\n  // allows merging (starting with \"+\") into a single event.\n  function addChangeToHistory(doc, change, selAfter, opId) {\n    var hist = doc.history;\n    hist.undone.length = 0;\n    var time = +new Date, cur;\n    var last;\n\n    if ((hist.lastOp == opId ||\n         hist.lastOrigin == change.origin && change.origin &&\n         ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n          change.origin.charAt(0) == \"*\")) &&\n        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n      // Merge this change into the last event\n      last = lst(cur.changes);\n      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n        // Optimized case for simple insertion -- don't want to add\n        // new changesets for every character typed\n        last.to = changeEnd(change);\n      } else {\n        // Add new sub-event\n        cur.changes.push(historyChangeFromChange(doc, change));\n      }\n    } else {\n      // Can not be merged, start a new event.\n      var before = lst(hist.done);\n      if (!before || !before.ranges)\n        { pushSelectionToHistory(doc.sel, hist.done); }\n      cur = {changes: [historyChangeFromChange(doc, change)],\n             generation: hist.generation};\n      hist.done.push(cur);\n      while (hist.done.length > hist.undoDepth) {\n        hist.done.shift();\n        if (!hist.done[0].ranges) { hist.done.shift(); }\n      }\n    }\n    hist.done.push(selAfter);\n    hist.generation = ++hist.maxGeneration;\n    hist.lastModTime = hist.lastSelTime = time;\n    hist.lastOp = hist.lastSelOp = opId;\n    hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n    if (!last) { signal(doc, \"historyAdded\"); }\n  }\n\n  function selectionEventCanBeMerged(doc, origin, prev, sel) {\n    var ch = origin.charAt(0);\n    return ch == \"*\" ||\n      ch == \"+\" &&\n      prev.ranges.length == sel.ranges.length &&\n      prev.somethingSelected() == sel.somethingSelected() &&\n      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n  }\n\n  // Called whenever the selection changes, sets the new selection as\n  // the pending selection in the history, and pushes the old pending\n  // selection into the 'done' array when it was significantly\n  // different (in number of selected ranges, emptiness, or time).\n  function addSelectionToHistory(doc, sel, opId, options) {\n    var hist = doc.history, origin = options && options.origin;\n\n    // A new event is started when the previous origin does not match\n    // the current, or the origins don't allow matching. Origins\n    // starting with * are always merged, those starting with + are\n    // merged when similar and close together in time.\n    if (opId == hist.lastSelOp ||\n        (origin && hist.lastSelOrigin == origin &&\n         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n      { hist.done[hist.done.length - 1] = sel; }\n    else\n      { pushSelectionToHistory(sel, hist.done); }\n\n    hist.lastSelTime = +new Date;\n    hist.lastSelOrigin = origin;\n    hist.lastSelOp = opId;\n    if (options && options.clearRedo !== false)\n      { clearSelectionEvents(hist.undone); }\n  }\n\n  function pushSelectionToHistory(sel, dest) {\n    var top = lst(dest);\n    if (!(top && top.ranges && top.equals(sel)))\n      { dest.push(sel); }\n  }\n\n  // Used to store marked span information in the history.\n  function attachLocalSpans(doc, change, from, to) {\n    var existing = change[\"spans_\" + doc.id], n = 0;\n    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n      if (line.markedSpans)\n        { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n      ++n;\n    });\n  }\n\n  // When un/re-doing restores text containing marked spans, those\n  // that have been explicitly cleared should not be restored.\n  function removeClearedSpans(spans) {\n    if (!spans) { return null }\n    var out;\n    for (var i = 0; i < spans.length; ++i) {\n      if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n      else if (out) { out.push(spans[i]); }\n    }\n    return !out ? spans : out.length ? out : null\n  }\n\n  // Retrieve and filter the old marked spans stored in a change event.\n  function getOldSpans(doc, change) {\n    var found = change[\"spans_\" + doc.id];\n    if (!found) { return null }\n    var nw = [];\n    for (var i = 0; i < change.text.length; ++i)\n      { nw.push(removeClearedSpans(found[i])); }\n    return nw\n  }\n\n  // Used for un/re-doing changes from the history. Combines the\n  // result of computing the existing spans with the set of spans that\n  // existed in the history (so that deleting around a span and then\n  // undoing brings back the span).\n  function mergeOldSpans(doc, change) {\n    var old = getOldSpans(doc, change);\n    var stretched = stretchSpansOverChange(doc, change);\n    if (!old) { return stretched }\n    if (!stretched) { return old }\n\n    for (var i = 0; i < old.length; ++i) {\n      var oldCur = old[i], stretchCur = stretched[i];\n      if (oldCur && stretchCur) {\n        spans: for (var j = 0; j < stretchCur.length; ++j) {\n          var span = stretchCur[j];\n          for (var k = 0; k < oldCur.length; ++k)\n            { if (oldCur[k].marker == span.marker) { continue spans } }\n          oldCur.push(span);\n        }\n      } else if (stretchCur) {\n        old[i] = stretchCur;\n      }\n    }\n    return old\n  }\n\n  // Used both to provide a JSON-safe object in .getHistory, and, when\n  // detaching a document, to split the history in two\n  function copyHistoryArray(events, newGroup, instantiateSel) {\n    var copy = [];\n    for (var i = 0; i < events.length; ++i) {\n      var event = events[i];\n      if (event.ranges) {\n        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n        continue\n      }\n      var changes = event.changes, newChanges = [];\n      copy.push({changes: newChanges});\n      for (var j = 0; j < changes.length; ++j) {\n        var change = changes[j], m = (void 0);\n        newChanges.push({from: change.from, to: change.to, text: change.text});\n        if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n          if (indexOf(newGroup, Number(m[1])) > -1) {\n            lst(newChanges)[prop] = change[prop];\n            delete change[prop];\n          }\n        } } }\n      }\n    }\n    return copy\n  }\n\n  // The 'scroll' parameter given to many of these indicated whether\n  // the new cursor position should be scrolled into view after\n  // modifying the selection.\n\n  // If shift is held or the extend flag is set, extends a range to\n  // include a given position (and optionally a second position).\n  // Otherwise, simply returns the range between the given positions.\n  // Used for cursor motion and such.\n  function extendRange(range, head, other, extend) {\n    if (extend) {\n      var anchor = range.anchor;\n      if (other) {\n        var posBefore = cmp(head, anchor) < 0;\n        if (posBefore != (cmp(other, anchor) < 0)) {\n          anchor = head;\n          head = other;\n        } else if (posBefore != (cmp(head, other) < 0)) {\n          head = other;\n        }\n      }\n      return new Range(anchor, head)\n    } else {\n      return new Range(other || head, head)\n    }\n  }\n\n  // Extend the primary selection range, discard the rest.\n  function extendSelection(doc, head, other, options, extend) {\n    if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n    setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n  }\n\n  // Extend all selections (pos is an array of selections with length\n  // equal the number of selections)\n  function extendSelections(doc, heads, options) {\n    var out = [];\n    var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n    for (var i = 0; i < doc.sel.ranges.length; i++)\n      { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n    var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n    setSelection(doc, newSel, options);\n  }\n\n  // Updates a single range in the selection.\n  function replaceOneSelection(doc, i, range, options) {\n    var ranges = doc.sel.ranges.slice(0);\n    ranges[i] = range;\n    setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n  }\n\n  // Reset the selection to a single range.\n  function setSimpleSelection(doc, anchor, head, options) {\n    setSelection(doc, simpleSelection(anchor, head), options);\n  }\n\n  // Give beforeSelectionChange handlers a change to influence a\n  // selection update.\n  function filterSelectionChange(doc, sel, options) {\n    var obj = {\n      ranges: sel.ranges,\n      update: function(ranges) {\n        var this$1 = this;\n\n        this.ranges = [];\n        for (var i = 0; i < ranges.length; i++)\n          { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n                                     clipPos(doc, ranges[i].head)); }\n      },\n      origin: options && options.origin\n    };\n    signal(doc, \"beforeSelectionChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n    if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n    else { return sel }\n  }\n\n  function setSelectionReplaceHistory(doc, sel, options) {\n    var done = doc.history.done, last = lst(done);\n    if (last && last.ranges) {\n      done[done.length - 1] = sel;\n      setSelectionNoUndo(doc, sel, options);\n    } else {\n      setSelection(doc, sel, options);\n    }\n  }\n\n  // Set a new selection.\n  function setSelection(doc, sel, options) {\n    setSelectionNoUndo(doc, sel, options);\n    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n  }\n\n  function setSelectionNoUndo(doc, sel, options) {\n    if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n      { sel = filterSelectionChange(doc, sel, options); }\n\n    var bias = options && options.bias ||\n      (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n    if (!(options && options.scroll === false) && doc.cm)\n      { ensureCursorVisible(doc.cm); }\n  }\n\n  function setSelectionInner(doc, sel) {\n    if (sel.equals(doc.sel)) { return }\n\n    doc.sel = sel;\n\n    if (doc.cm) {\n      doc.cm.curOp.updateInput = 1;\n      doc.cm.curOp.selectionChanged = true;\n      signalCursorActivity(doc.cm);\n    }\n    signalLater(doc, \"cursorActivity\", doc);\n  }\n\n  // Verify that the selection does not partially select any atomic\n  // marked ranges.\n  function reCheckSelection(doc) {\n    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n  }\n\n  // Return a selection that does not partially select any atomic\n  // ranges.\n  function skipAtomicInSelection(doc, sel, bias, mayClear) {\n    var out;\n    for (var i = 0; i < sel.ranges.length; i++) {\n      var range = sel.ranges[i];\n      var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n      var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n      var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n      if (out || newAnchor != range.anchor || newHead != range.head) {\n        if (!out) { out = sel.ranges.slice(0, i); }\n        out[i] = new Range(newAnchor, newHead);\n      }\n    }\n    return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n  }\n\n  function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n    var line = getLine(doc, pos.line);\n    if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n      var sp = line.markedSpans[i], m = sp.marker;\n      if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n          (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n        if (mayClear) {\n          signal(m, \"beforeCursorEnter\");\n          if (m.explicitlyCleared) {\n            if (!line.markedSpans) { break }\n            else {--i; continue}\n          }\n        }\n        if (!m.atomic) { continue }\n\n        if (oldPos) {\n          var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n          if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)\n            { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n          if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n            { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n        }\n\n        var far = m.find(dir < 0 ? -1 : 1);\n        if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)\n          { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n        return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n      }\n    } }\n    return pos\n  }\n\n  // Ensure a given position is not inside an atomic range.\n  function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n    var dir = bias || 1;\n    var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n        skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n    if (!found) {\n      doc.cantEdit = true;\n      return Pos(doc.first, 0)\n    }\n    return found\n  }\n\n  function movePos(doc, pos, dir, line) {\n    if (dir < 0 && pos.ch == 0) {\n      if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n      else { return null }\n    } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n      if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n      else { return null }\n    } else {\n      return new Pos(pos.line, pos.ch + dir)\n    }\n  }\n\n  function selectAll(cm) {\n    cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n  }\n\n  // UPDATING\n\n  // Allow \"beforeChange\" event handlers to influence a change\n  function filterChange(doc, change, update) {\n    var obj = {\n      canceled: false,\n      from: change.from,\n      to: change.to,\n      text: change.text,\n      origin: change.origin,\n      cancel: function () { return obj.canceled = true; }\n    };\n    if (update) { obj.update = function (from, to, text, origin) {\n      if (from) { obj.from = clipPos(doc, from); }\n      if (to) { obj.to = clipPos(doc, to); }\n      if (text) { obj.text = text; }\n      if (origin !== undefined) { obj.origin = origin; }\n    }; }\n    signal(doc, \"beforeChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n    if (obj.canceled) {\n      if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n      return null\n    }\n    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n  }\n\n  // Apply a change to a document, and add it to the document's\n  // history, and propagating it to all linked documents.\n  function makeChange(doc, change, ignoreReadOnly) {\n    if (doc.cm) {\n      if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n      if (doc.cm.state.suppressEdits) { return }\n    }\n\n    if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n      change = filterChange(doc, change, true);\n      if (!change) { return }\n    }\n\n    // Possibly split or suppress the update based on the presence\n    // of read-only spans in its range.\n    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n    if (split) {\n      for (var i = split.length - 1; i >= 0; --i)\n        { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n    } else {\n      makeChangeInner(doc, change);\n    }\n  }\n\n  function makeChangeInner(doc, change) {\n    if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n    var selAfter = computeSelAfterChange(doc, change);\n    addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n    var rebased = [];\n\n    linkedDocs(doc, function (doc, sharedHist) {\n      if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n        rebaseHist(doc.history, change);\n        rebased.push(doc.history);\n      }\n      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n    });\n  }\n\n  // Revert a change stored in a document's history.\n  function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n    var suppress = doc.cm && doc.cm.state.suppressEdits;\n    if (suppress && !allowSelectionOnly) { return }\n\n    var hist = doc.history, event, selAfter = doc.sel;\n    var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n    // Verify that there is a useable event (so that ctrl-z won't\n    // needlessly clear selection events)\n    var i = 0;\n    for (; i < source.length; i++) {\n      event = source[i];\n      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n        { break }\n    }\n    if (i == source.length) { return }\n    hist.lastOrigin = hist.lastSelOrigin = null;\n\n    for (;;) {\n      event = source.pop();\n      if (event.ranges) {\n        pushSelectionToHistory(event, dest);\n        if (allowSelectionOnly && !event.equals(doc.sel)) {\n          setSelection(doc, event, {clearRedo: false});\n          return\n        }\n        selAfter = event;\n      } else if (suppress) {\n        source.push(event);\n        return\n      } else { break }\n    }\n\n    // Build up a reverse change object to add to the opposite history\n    // stack (redo when undoing, and vice versa).\n    var antiChanges = [];\n    pushSelectionToHistory(selAfter, dest);\n    dest.push({changes: antiChanges, generation: hist.generation});\n    hist.generation = event.generation || ++hist.maxGeneration;\n\n    var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n    var loop = function ( i ) {\n      var change = event.changes[i];\n      change.origin = type;\n      if (filter && !filterChange(doc, change, false)) {\n        source.length = 0;\n        return {}\n      }\n\n      antiChanges.push(historyChangeFromChange(doc, change));\n\n      var after = i ? computeSelAfterChange(doc, change) : lst(source);\n      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n      if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n      var rebased = [];\n\n      // Propagate to the linked documents\n      linkedDocs(doc, function (doc, sharedHist) {\n        if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n          rebaseHist(doc.history, change);\n          rebased.push(doc.history);\n        }\n        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n      });\n    };\n\n    for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n      var returned = loop( i$1 );\n\n      if ( returned ) return returned.v;\n    }\n  }\n\n  // Sub-views need their line numbers shifted when text is added\n  // above or below them in the parent document.\n  function shiftDoc(doc, distance) {\n    if (distance == 0) { return }\n    doc.first += distance;\n    doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n      Pos(range.anchor.line + distance, range.anchor.ch),\n      Pos(range.head.line + distance, range.head.ch)\n    ); }), doc.sel.primIndex);\n    if (doc.cm) {\n      regChange(doc.cm, doc.first, doc.first - distance, distance);\n      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n        { regLineChange(doc.cm, l, \"gutter\"); }\n    }\n  }\n\n  // More lower-level change function, handling only a single document\n  // (not linked ones).\n  function makeChangeSingleDoc(doc, change, selAfter, spans) {\n    if (doc.cm && !doc.cm.curOp)\n      { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n    if (change.to.line < doc.first) {\n      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n      return\n    }\n    if (change.from.line > doc.lastLine()) { return }\n\n    // Clip the change to the size of this doc\n    if (change.from.line < doc.first) {\n      var shift = change.text.length - 1 - (doc.first - change.from.line);\n      shiftDoc(doc, shift);\n      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n                text: [lst(change.text)], origin: change.origin};\n    }\n    var last = doc.lastLine();\n    if (change.to.line > last) {\n      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n                text: [change.text[0]], origin: change.origin};\n    }\n\n    change.removed = getBetween(doc, change.from, change.to);\n\n    if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n    if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n    else { updateDoc(doc, change, spans); }\n    setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n  }\n\n  // Handle the interaction of a change to a document with the editor\n  // that this document is part of.\n  function makeChangeSingleDocInEditor(cm, change, spans) {\n    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n    var recomputeMaxLength = false, checkWidthStart = from.line;\n    if (!cm.options.lineWrapping) {\n      checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n      doc.iter(checkWidthStart, to.line + 1, function (line) {\n        if (line == display.maxLine) {\n          recomputeMaxLength = true;\n          return true\n        }\n      });\n    }\n\n    if (doc.sel.contains(change.from, change.to) > -1)\n      { signalCursorActivity(cm); }\n\n    updateDoc(doc, change, spans, estimateHeight(cm));\n\n    if (!cm.options.lineWrapping) {\n      doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n        var len = lineLength(line);\n        if (len > display.maxLineLength) {\n          display.maxLine = line;\n          display.maxLineLength = len;\n          display.maxLineChanged = true;\n          recomputeMaxLength = false;\n        }\n      });\n      if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n    }\n\n    retreatFrontier(doc, from.line);\n    startWorker(cm, 400);\n\n    var lendiff = change.text.length - (to.line - from.line) - 1;\n    // Remember that these lines changed, for updating the display\n    if (change.full)\n      { regChange(cm); }\n    else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n      { regLineChange(cm, from.line, \"text\"); }\n    else\n      { regChange(cm, from.line, to.line + 1, lendiff); }\n\n    var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n    if (changeHandler || changesHandler) {\n      var obj = {\n        from: from, to: to,\n        text: change.text,\n        removed: change.removed,\n        origin: change.origin\n      };\n      if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n      if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n    }\n    cm.display.selForContextMenu = null;\n  }\n\n  function replaceRange(doc, code, from, to, origin) {\n    var assign;\n\n    if (!to) { to = from; }\n    if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n    if (typeof code == \"string\") { code = doc.splitLines(code); }\n    makeChange(doc, {from: from, to: to, text: code, origin: origin});\n  }\n\n  // Rebasing/resetting history to deal with externally-sourced changes\n\n  function rebaseHistSelSingle(pos, from, to, diff) {\n    if (to < pos.line) {\n      pos.line += diff;\n    } else if (from < pos.line) {\n      pos.line = from;\n      pos.ch = 0;\n    }\n  }\n\n  // Tries to rebase an array of history events given a change in the\n  // document. If the change touches the same lines as the event, the\n  // event, and everything 'behind' it, is discarded. If the change is\n  // before the event, the event's positions are updated. Uses a\n  // copy-on-write scheme for the positions, to avoid having to\n  // reallocate them all on every rebase, but also avoid problems with\n  // shared position objects being unsafely updated.\n  function rebaseHistArray(array, from, to, diff) {\n    for (var i = 0; i < array.length; ++i) {\n      var sub = array[i], ok = true;\n      if (sub.ranges) {\n        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n        for (var j = 0; j < sub.ranges.length; j++) {\n          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n        }\n        continue\n      }\n      for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n        var cur = sub.changes[j$1];\n        if (to < cur.from.line) {\n          cur.from = Pos(cur.from.line + diff, cur.from.ch);\n          cur.to = Pos(cur.to.line + diff, cur.to.ch);\n        } else if (from <= cur.to.line) {\n          ok = false;\n          break\n        }\n      }\n      if (!ok) {\n        array.splice(0, i + 1);\n        i = 0;\n      }\n    }\n  }\n\n  function rebaseHist(hist, change) {\n    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n    rebaseHistArray(hist.done, from, to, diff);\n    rebaseHistArray(hist.undone, from, to, diff);\n  }\n\n  // Utility for applying a change to a line by handle or number,\n  // returning the number and optionally registering the line as\n  // changed.\n  function changeLine(doc, handle, changeType, op) {\n    var no = handle, line = handle;\n    if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n    else { no = lineNo(handle); }\n    if (no == null) { return null }\n    if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n    return line\n  }\n\n  // The document is represented as a BTree consisting of leaves, with\n  // chunk of lines in them, and branches, with up to ten leaves or\n  // other branch nodes below them. The top node is always a branch\n  // node, and is the document object itself (meaning it has\n  // additional methods and properties).\n  //\n  // All nodes have parent links. The tree is used both to go from\n  // line numbers to line objects, and to go from objects to numbers.\n  // It also indexes by height, and is used to convert between height\n  // and line object, and to find the total height of the document.\n  //\n  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n  function LeafChunk(lines) {\n    var this$1 = this;\n\n    this.lines = lines;\n    this.parent = null;\n    var height = 0;\n    for (var i = 0; i < lines.length; ++i) {\n      lines[i].parent = this$1;\n      height += lines[i].height;\n    }\n    this.height = height;\n  }\n\n  LeafChunk.prototype = {\n    chunkSize: function() { return this.lines.length },\n\n    // Remove the n lines at offset 'at'.\n    removeInner: function(at, n) {\n      var this$1 = this;\n\n      for (var i = at, e = at + n; i < e; ++i) {\n        var line = this$1.lines[i];\n        this$1.height -= line.height;\n        cleanUpLine(line);\n        signalLater(line, \"delete\");\n      }\n      this.lines.splice(at, n);\n    },\n\n    // Helper used to collapse a small branch into a single leaf.\n    collapse: function(lines) {\n      lines.push.apply(lines, this.lines);\n    },\n\n    // Insert the given array of lines at offset 'at', count them as\n    // having the given height.\n    insertInner: function(at, lines, height) {\n      var this$1 = this;\n\n      this.height += height;\n      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n      for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1; }\n    },\n\n    // Used to iterate over a part of the tree.\n    iterN: function(at, n, op) {\n      var this$1 = this;\n\n      for (var e = at + n; at < e; ++at)\n        { if (op(this$1.lines[at])) { return true } }\n    }\n  };\n\n  function BranchChunk(children) {\n    var this$1 = this;\n\n    this.children = children;\n    var size = 0, height = 0;\n    for (var i = 0; i < children.length; ++i) {\n      var ch = children[i];\n      size += ch.chunkSize(); height += ch.height;\n      ch.parent = this$1;\n    }\n    this.size = size;\n    this.height = height;\n    this.parent = null;\n  }\n\n  BranchChunk.prototype = {\n    chunkSize: function() { return this.size },\n\n    removeInner: function(at, n) {\n      var this$1 = this;\n\n      this.size -= n;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this$1.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var rm = Math.min(n, sz - at), oldHeight = child.height;\n          child.removeInner(at, rm);\n          this$1.height -= oldHeight - child.height;\n          if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null; }\n          if ((n -= rm) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n      // If the result is smaller than 25 lines, ensure that it is a\n      // single leaf node.\n      if (this.size - n < 25 &&\n          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n        var lines = [];\n        this.collapse(lines);\n        this.children = [new LeafChunk(lines)];\n        this.children[0].parent = this;\n      }\n    },\n\n    collapse: function(lines) {\n      var this$1 = this;\n\n      for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); }\n    },\n\n    insertInner: function(at, lines, height) {\n      var this$1 = this;\n\n      this.size += lines.length;\n      this.height += height;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this$1.children[i], sz = child.chunkSize();\n        if (at <= sz) {\n          child.insertInner(at, lines, height);\n          if (child.lines && child.lines.length > 50) {\n            // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n            // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n            var remaining = child.lines.length % 25 + 25;\n            for (var pos = remaining; pos < child.lines.length;) {\n              var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n              child.height -= leaf.height;\n              this$1.children.splice(++i, 0, leaf);\n              leaf.parent = this$1;\n            }\n            child.lines = child.lines.slice(0, remaining);\n            this$1.maybeSpill();\n          }\n          break\n        }\n        at -= sz;\n      }\n    },\n\n    // When a node has grown, check whether it should be split.\n    maybeSpill: function() {\n      if (this.children.length <= 10) { return }\n      var me = this;\n      do {\n        var spilled = me.children.splice(me.children.length - 5, 5);\n        var sibling = new BranchChunk(spilled);\n        if (!me.parent) { // Become the parent node\n          var copy = new BranchChunk(me.children);\n          copy.parent = me;\n          me.children = [copy, sibling];\n          me = copy;\n       } else {\n          me.size -= sibling.size;\n          me.height -= sibling.height;\n          var myIndex = indexOf(me.parent.children, me);\n          me.parent.children.splice(myIndex + 1, 0, sibling);\n        }\n        sibling.parent = me.parent;\n      } while (me.children.length > 10)\n      me.parent.maybeSpill();\n    },\n\n    iterN: function(at, n, op) {\n      var this$1 = this;\n\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this$1.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var used = Math.min(n, sz - at);\n          if (child.iterN(at, used, op)) { return true }\n          if ((n -= used) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n    }\n  };\n\n  // Line widgets are block elements displayed above or below a line.\n\n  var LineWidget = function(doc, node, options) {\n    var this$1 = this;\n\n    if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n      { this$1[opt] = options[opt]; } } }\n    this.doc = doc;\n    this.node = node;\n  };\n\n  LineWidget.prototype.clear = function () {\n      var this$1 = this;\n\n    var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n    if (no == null || !ws) { return }\n    for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1); } }\n    if (!ws.length) { line.widgets = null; }\n    var height = widgetHeight(this);\n    updateLineHeight(line, Math.max(0, line.height - height));\n    if (cm) {\n      runInOp(cm, function () {\n        adjustScrollWhenAboveVisible(cm, line, -height);\n        regLineChange(cm, no, \"widget\");\n      });\n      signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n    }\n  };\n\n  LineWidget.prototype.changed = function () {\n      var this$1 = this;\n\n    var oldH = this.height, cm = this.doc.cm, line = this.line;\n    this.height = null;\n    var diff = widgetHeight(this) - oldH;\n    if (!diff) { return }\n    if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n    if (cm) {\n      runInOp(cm, function () {\n        cm.curOp.forceUpdate = true;\n        adjustScrollWhenAboveVisible(cm, line, diff);\n        signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n      });\n    }\n  };\n  eventMixin(LineWidget);\n\n  function adjustScrollWhenAboveVisible(cm, line, diff) {\n    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n      { addToScrollTop(cm, diff); }\n  }\n\n  function addLineWidget(doc, handle, node, options) {\n    var widget = new LineWidget(doc, node, options);\n    var cm = doc.cm;\n    if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n    changeLine(doc, handle, \"widget\", function (line) {\n      var widgets = line.widgets || (line.widgets = []);\n      if (widget.insertAt == null) { widgets.push(widget); }\n      else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); }\n      widget.line = line;\n      if (cm && !lineIsHidden(doc, line)) {\n        var aboveVisible = heightAtLine(line) < doc.scrollTop;\n        updateLineHeight(line, line.height + widgetHeight(widget));\n        if (aboveVisible) { addToScrollTop(cm, widget.height); }\n        cm.curOp.forceUpdate = true;\n      }\n      return true\n    });\n    if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n    return widget\n  }\n\n  // TEXTMARKERS\n\n  // Created with markText and setBookmark methods. A TextMarker is a\n  // handle that can be used to clear or find a marked position in the\n  // document. Line objects hold arrays (markedSpans) containing\n  // {from, to, marker} object pointing to such marker objects, and\n  // indicating that such a marker is present on that line. Multiple\n  // lines may point to the same marker when it spans across lines.\n  // The spans will have null for their from/to properties when the\n  // marker continues beyond the start/end of the line. Markers have\n  // links back to the lines they currently touch.\n\n  // Collapsed markers have unique ids, in order to be able to order\n  // them, which is needed for uniquely determining an outer marker\n  // when they overlap (they may nest, but not partially overlap).\n  var nextMarkerId = 0;\n\n  var TextMarker = function(doc, type) {\n    this.lines = [];\n    this.type = type;\n    this.doc = doc;\n    this.id = ++nextMarkerId;\n  };\n\n  // Clear the marker.\n  TextMarker.prototype.clear = function () {\n      var this$1 = this;\n\n    if (this.explicitlyCleared) { return }\n    var cm = this.doc.cm, withOp = cm && !cm.curOp;\n    if (withOp) { startOperation(cm); }\n    if (hasHandler(this, \"clear\")) {\n      var found = this.find();\n      if (found) { signalLater(this, \"clear\", found.from, found.to); }\n    }\n    var min = null, max = null;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this$1.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this$1);\n      if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n      else if (cm) {\n        if (span.to != null) { max = lineNo(line); }\n        if (span.from != null) { min = lineNo(line); }\n      }\n      line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n      if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm)\n        { updateLineHeight(line, textHeight(cm.display)); }\n    }\n    if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n      var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual);\n      if (len > cm.display.maxLineLength) {\n        cm.display.maxLine = visual;\n        cm.display.maxLineLength = len;\n        cm.display.maxLineChanged = true;\n      }\n    } }\n\n    if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n    this.lines.length = 0;\n    this.explicitlyCleared = true;\n    if (this.atomic && this.doc.cantEdit) {\n      this.doc.cantEdit = false;\n      if (cm) { reCheckSelection(cm.doc); }\n    }\n    if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n    if (withOp) { endOperation(cm); }\n    if (this.parent) { this.parent.clear(); }\n  };\n\n  // Find the position of the marker in the document. Returns a {from,\n  // to} object by default. Side can be passed to get a specific side\n  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n  // Pos objects returned contain a line object, rather than a line\n  // number (used to prevent looking up the same line twice).\n  TextMarker.prototype.find = function (side, lineObj) {\n      var this$1 = this;\n\n    if (side == null && this.type == \"bookmark\") { side = 1; }\n    var from, to;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this$1.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this$1);\n      if (span.from != null) {\n        from = Pos(lineObj ? line : lineNo(line), span.from);\n        if (side == -1) { return from }\n      }\n      if (span.to != null) {\n        to = Pos(lineObj ? line : lineNo(line), span.to);\n        if (side == 1) { return to }\n      }\n    }\n    return from && {from: from, to: to}\n  };\n\n  // Signals that the marker's widget changed, and surrounding layout\n  // should be recomputed.\n  TextMarker.prototype.changed = function () {\n      var this$1 = this;\n\n    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n    if (!pos || !cm) { return }\n    runInOp(cm, function () {\n      var line = pos.line, lineN = lineNo(pos.line);\n      var view = findViewForLine(cm, lineN);\n      if (view) {\n        clearLineMeasurementCacheFor(view);\n        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n      }\n      cm.curOp.updateMaxLine = true;\n      if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n        var oldHeight = widget.height;\n        widget.height = null;\n        var dHeight = widgetHeight(widget) - oldHeight;\n        if (dHeight)\n          { updateLineHeight(line, line.height + dHeight); }\n      }\n      signalLater(cm, \"markerChanged\", cm, this$1);\n    });\n  };\n\n  TextMarker.prototype.attachLine = function (line) {\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp;\n      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n        { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n    }\n    this.lines.push(line);\n  };\n\n  TextMarker.prototype.detachLine = function (line) {\n    this.lines.splice(indexOf(this.lines, line), 1);\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp\n      ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n    }\n  };\n  eventMixin(TextMarker);\n\n  // Create a marker, wire it up to the right lines, and\n  function markText(doc, from, to, options, type) {\n    // Shared markers (across linked documents) are handled separately\n    // (markTextShared will call out to this again, once per\n    // document).\n    if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n    // Ensure we are in an operation.\n    if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n    var marker = new TextMarker(doc, type), diff = cmp(from, to);\n    if (options) { copyObj(options, marker, false); }\n    // Don't connect empty markers unless clearWhenEmpty is false\n    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n      { return marker }\n    if (marker.replacedWith) {\n      // Showing up as a widget implies collapsed (widget replaces text)\n      marker.collapsed = true;\n      marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n      if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n      if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n    }\n    if (marker.collapsed) {\n      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n        { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n      seeCollapsedSpans();\n    }\n\n    if (marker.addToHistory)\n      { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n    var curLine = from.line, cm = doc.cm, updateMaxLine;\n    doc.iter(curLine, to.line + 1, function (line) {\n      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n        { updateMaxLine = true; }\n      if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n      addMarkedSpan(line, new MarkedSpan(marker,\n                                         curLine == from.line ? from.ch : null,\n                                         curLine == to.line ? to.ch : null));\n      ++curLine;\n    });\n    // lineIsHidden depends on the presence of the spans, so needs a second pass\n    if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n      if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n    }); }\n\n    if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n    if (marker.readOnly) {\n      seeReadOnlySpans();\n      if (doc.history.done.length || doc.history.undone.length)\n        { doc.clearHistory(); }\n    }\n    if (marker.collapsed) {\n      marker.id = ++nextMarkerId;\n      marker.atomic = true;\n    }\n    if (cm) {\n      // Sync editor state\n      if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n      if (marker.collapsed)\n        { regChange(cm, from.line, to.line + 1); }\n      else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n               marker.attributes || marker.title)\n        { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n      if (marker.atomic) { reCheckSelection(cm.doc); }\n      signalLater(cm, \"markerAdded\", cm, marker);\n    }\n    return marker\n  }\n\n  // SHARED TEXTMARKERS\n\n  // A shared marker spans multiple linked documents. It is\n  // implemented as a meta-marker-object controlling multiple normal\n  // markers.\n  var SharedTextMarker = function(markers, primary) {\n    var this$1 = this;\n\n    this.markers = markers;\n    this.primary = primary;\n    for (var i = 0; i < markers.length; ++i)\n      { markers[i].parent = this$1; }\n  };\n\n  SharedTextMarker.prototype.clear = function () {\n      var this$1 = this;\n\n    if (this.explicitlyCleared) { return }\n    this.explicitlyCleared = true;\n    for (var i = 0; i < this.markers.length; ++i)\n      { this$1.markers[i].clear(); }\n    signalLater(this, \"clear\");\n  };\n\n  SharedTextMarker.prototype.find = function (side, lineObj) {\n    return this.primary.find(side, lineObj)\n  };\n  eventMixin(SharedTextMarker);\n\n  function markTextShared(doc, from, to, options, type) {\n    options = copyObj(options);\n    options.shared = false;\n    var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n    var widget = options.widgetNode;\n    linkedDocs(doc, function (doc) {\n      if (widget) { options.widgetNode = widget.cloneNode(true); }\n      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n      for (var i = 0; i < doc.linked.length; ++i)\n        { if (doc.linked[i].isParent) { return } }\n      primary = lst(markers);\n    });\n    return new SharedTextMarker(markers, primary)\n  }\n\n  function findSharedMarkers(doc) {\n    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n  }\n\n  function copySharedMarkers(doc, markers) {\n    for (var i = 0; i < markers.length; i++) {\n      var marker = markers[i], pos = marker.find();\n      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n      if (cmp(mFrom, mTo)) {\n        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n        marker.markers.push(subMark);\n        subMark.parent = marker;\n      }\n    }\n  }\n\n  function detachSharedMarkers(markers) {\n    var loop = function ( i ) {\n      var marker = markers[i], linked = [marker.primary.doc];\n      linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n      for (var j = 0; j < marker.markers.length; j++) {\n        var subMarker = marker.markers[j];\n        if (indexOf(linked, subMarker.doc) == -1) {\n          subMarker.parent = null;\n          marker.markers.splice(j--, 1);\n        }\n      }\n    };\n\n    for (var i = 0; i < markers.length; i++) loop( i );\n  }\n\n  var nextDocId = 0;\n  var Doc = function(text, mode, firstLine, lineSep, direction) {\n    if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n    if (firstLine == null) { firstLine = 0; }\n\n    BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n    this.first = firstLine;\n    this.scrollTop = this.scrollLeft = 0;\n    this.cantEdit = false;\n    this.cleanGeneration = 1;\n    this.modeFrontier = this.highlightFrontier = firstLine;\n    var start = Pos(firstLine, 0);\n    this.sel = simpleSelection(start);\n    this.history = new History(null);\n    this.id = ++nextDocId;\n    this.modeOption = mode;\n    this.lineSep = lineSep;\n    this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n    this.extend = false;\n\n    if (typeof text == \"string\") { text = this.splitLines(text); }\n    updateDoc(this, {from: start, to: start, text: text});\n    setSelection(this, simpleSelection(start), sel_dontScroll);\n  };\n\n  Doc.prototype = createObj(BranchChunk.prototype, {\n    constructor: Doc,\n    // Iterate over the document. Supports two forms -- with only one\n    // argument, it calls that for each line in the document. With\n    // three, it iterates over the range given by the first two (with\n    // the second being non-inclusive).\n    iter: function(from, to, op) {\n      if (op) { this.iterN(from - this.first, to - from, op); }\n      else { this.iterN(this.first, this.first + this.size, from); }\n    },\n\n    // Non-public interface for adding and removing lines.\n    insert: function(at, lines) {\n      var height = 0;\n      for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n      this.insertInner(at - this.first, lines, height);\n    },\n    remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n    // From here, the methods are part of the public interface. Most\n    // are also available from CodeMirror (editor) instances.\n\n    getValue: function(lineSep) {\n      var lines = getLines(this, this.first, this.first + this.size);\n      if (lineSep === false) { return lines }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n    setValue: docMethodOp(function(code) {\n      var top = Pos(this.first, 0), last = this.first + this.size - 1;\n      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n                        text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n      if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n      setSelection(this, simpleSelection(top), sel_dontScroll);\n    }),\n    replaceRange: function(code, from, to, origin) {\n      from = clipPos(this, from);\n      to = to ? clipPos(this, to) : from;\n      replaceRange(this, code, from, to, origin);\n    },\n    getRange: function(from, to, lineSep) {\n      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n      if (lineSep === false) { return lines }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n\n    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n    getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n    getLineNumber: function(line) {return lineNo(line)},\n\n    getLineHandleVisualStart: function(line) {\n      if (typeof line == \"number\") { line = getLine(this, line); }\n      return visualLine(line)\n    },\n\n    lineCount: function() {return this.size},\n    firstLine: function() {return this.first},\n    lastLine: function() {return this.first + this.size - 1},\n\n    clipPos: function(pos) {return clipPos(this, pos)},\n\n    getCursor: function(start) {\n      var range$$1 = this.sel.primary(), pos;\n      if (start == null || start == \"head\") { pos = range$$1.head; }\n      else if (start == \"anchor\") { pos = range$$1.anchor; }\n      else if (start == \"end\" || start == \"to\" || start === false) { pos = range$$1.to(); }\n      else { pos = range$$1.from(); }\n      return pos\n    },\n    listSelections: function() { return this.sel.ranges },\n    somethingSelected: function() {return this.sel.somethingSelected()},\n\n    setCursor: docMethodOp(function(line, ch, options) {\n      setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n    }),\n    setSelection: docMethodOp(function(anchor, head, options) {\n      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n    }),\n    extendSelection: docMethodOp(function(head, other, options) {\n      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n    }),\n    extendSelections: docMethodOp(function(heads, options) {\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    extendSelectionsBy: docMethodOp(function(f, options) {\n      var heads = map(this.sel.ranges, f);\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    setSelections: docMethodOp(function(ranges, primary, options) {\n      var this$1 = this;\n\n      if (!ranges.length) { return }\n      var out = [];\n      for (var i = 0; i < ranges.length; i++)\n        { out[i] = new Range(clipPos(this$1, ranges[i].anchor),\n                           clipPos(this$1, ranges[i].head)); }\n      if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n      setSelection(this, normalizeSelection(this.cm, out, primary), options);\n    }),\n    addSelection: docMethodOp(function(anchor, head, options) {\n      var ranges = this.sel.ranges.slice(0);\n      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n      setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n    }),\n\n    getSelection: function(lineSep) {\n      var this$1 = this;\n\n      var ranges = this.sel.ranges, lines;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());\n        lines = lines ? lines.concat(sel) : sel;\n      }\n      if (lineSep === false) { return lines }\n      else { return lines.join(lineSep || this.lineSeparator()) }\n    },\n    getSelections: function(lineSep) {\n      var this$1 = this;\n\n      var parts = [], ranges = this.sel.ranges;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());\n        if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()); }\n        parts[i] = sel;\n      }\n      return parts\n    },\n    replaceSelection: function(code, collapse, origin) {\n      var dup = [];\n      for (var i = 0; i < this.sel.ranges.length; i++)\n        { dup[i] = code; }\n      this.replaceSelections(dup, collapse, origin || \"+input\");\n    },\n    replaceSelections: docMethodOp(function(code, collapse, origin) {\n      var this$1 = this;\n\n      var changes = [], sel = this.sel;\n      for (var i = 0; i < sel.ranges.length; i++) {\n        var range$$1 = sel.ranges[i];\n        changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin};\n      }\n      var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n      for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n        { makeChange(this$1, changes[i$1]); }\n      if (newSel) { setSelectionReplaceHistory(this, newSel); }\n      else if (this.cm) { ensureCursorVisible(this.cm); }\n    }),\n    undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n    redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n    setExtending: function(val) {this.extend = val;},\n    getExtending: function() {return this.extend},\n\n    historySize: function() {\n      var hist = this.history, done = 0, undone = 0;\n      for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n      for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n      return {undo: done, redo: undone}\n    },\n    clearHistory: function() {this.history = new History(this.history.maxGeneration);},\n\n    markClean: function() {\n      this.cleanGeneration = this.changeGeneration(true);\n    },\n    changeGeneration: function(forceSplit) {\n      if (forceSplit)\n        { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n      return this.history.generation\n    },\n    isClean: function (gen) {\n      return this.history.generation == (gen || this.cleanGeneration)\n    },\n\n    getHistory: function() {\n      return {done: copyHistoryArray(this.history.done),\n              undone: copyHistoryArray(this.history.undone)}\n    },\n    setHistory: function(histData) {\n      var hist = this.history = new History(this.history.maxGeneration);\n      hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n    },\n\n    setGutterMarker: docMethodOp(function(line, gutterID, value) {\n      return changeLine(this, line, \"gutter\", function (line) {\n        var markers = line.gutterMarkers || (line.gutterMarkers = {});\n        markers[gutterID] = value;\n        if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n        return true\n      })\n    }),\n\n    clearGutter: docMethodOp(function(gutterID) {\n      var this$1 = this;\n\n      this.iter(function (line) {\n        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n          changeLine(this$1, line, \"gutter\", function () {\n            line.gutterMarkers[gutterID] = null;\n            if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n            return true\n          });\n        }\n      });\n    }),\n\n    lineInfo: function(line) {\n      var n;\n      if (typeof line == \"number\") {\n        if (!isLine(this, line)) { return null }\n        n = line;\n        line = getLine(this, line);\n        if (!line) { return null }\n      } else {\n        n = lineNo(line);\n        if (n == null) { return null }\n      }\n      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n              widgets: line.widgets}\n    },\n\n    addLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        if (!line[prop]) { line[prop] = cls; }\n        else if (classTest(cls).test(line[prop])) { return false }\n        else { line[prop] += \" \" + cls; }\n        return true\n      })\n    }),\n    removeLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        var cur = line[prop];\n        if (!cur) { return false }\n        else if (cls == null) { line[prop] = null; }\n        else {\n          var found = cur.match(classTest(cls));\n          if (!found) { return false }\n          var end = found.index + found[0].length;\n          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n        }\n        return true\n      })\n    }),\n\n    addLineWidget: docMethodOp(function(handle, node, options) {\n      return addLineWidget(this, handle, node, options)\n    }),\n    removeLineWidget: function(widget) { widget.clear(); },\n\n    markText: function(from, to, options) {\n      return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n    },\n    setBookmark: function(pos, options) {\n      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n                      insertLeft: options && options.insertLeft,\n                      clearWhenEmpty: false, shared: options && options.shared,\n                      handleMouseEvents: options && options.handleMouseEvents};\n      pos = clipPos(this, pos);\n      return markText(this, pos, pos, realOpts, \"bookmark\")\n    },\n    findMarksAt: function(pos) {\n      pos = clipPos(this, pos);\n      var markers = [], spans = getLine(this, pos.line).markedSpans;\n      if (spans) { for (var i = 0; i < spans.length; ++i) {\n        var span = spans[i];\n        if ((span.from == null || span.from <= pos.ch) &&\n            (span.to == null || span.to >= pos.ch))\n          { markers.push(span.marker.parent || span.marker); }\n      } }\n      return markers\n    },\n    findMarks: function(from, to, filter) {\n      from = clipPos(this, from); to = clipPos(this, to);\n      var found = [], lineNo$$1 = from.line;\n      this.iter(from.line, to.line + 1, function (line) {\n        var spans = line.markedSpans;\n        if (spans) { for (var i = 0; i < spans.length; i++) {\n          var span = spans[i];\n          if (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to ||\n                span.from == null && lineNo$$1 != from.line ||\n                span.from != null && lineNo$$1 == to.line && span.from >= to.ch) &&\n              (!filter || filter(span.marker)))\n            { found.push(span.marker.parent || span.marker); }\n        } }\n        ++lineNo$$1;\n      });\n      return found\n    },\n    getAllMarks: function() {\n      var markers = [];\n      this.iter(function (line) {\n        var sps = line.markedSpans;\n        if (sps) { for (var i = 0; i < sps.length; ++i)\n          { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n      });\n      return markers\n    },\n\n    posFromIndex: function(off) {\n      var ch, lineNo$$1 = this.first, sepSize = this.lineSeparator().length;\n      this.iter(function (line) {\n        var sz = line.text.length + sepSize;\n        if (sz > off) { ch = off; return true }\n        off -= sz;\n        ++lineNo$$1;\n      });\n      return clipPos(this, Pos(lineNo$$1, ch))\n    },\n    indexFromPos: function (coords) {\n      coords = clipPos(this, coords);\n      var index = coords.ch;\n      if (coords.line < this.first || coords.ch < 0) { return 0 }\n      var sepSize = this.lineSeparator().length;\n      this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n        index += line.text.length + sepSize;\n      });\n      return index\n    },\n\n    copy: function(copyHistory) {\n      var doc = new Doc(getLines(this, this.first, this.first + this.size),\n                        this.modeOption, this.first, this.lineSep, this.direction);\n      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n      doc.sel = this.sel;\n      doc.extend = false;\n      if (copyHistory) {\n        doc.history.undoDepth = this.history.undoDepth;\n        doc.setHistory(this.getHistory());\n      }\n      return doc\n    },\n\n    linkedDoc: function(options) {\n      if (!options) { options = {}; }\n      var from = this.first, to = this.first + this.size;\n      if (options.from != null && options.from > from) { from = options.from; }\n      if (options.to != null && options.to < to) { to = options.to; }\n      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n      if (options.sharedHist) { copy.history = this.history\n      ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n      copySharedMarkers(copy, findSharedMarkers(this));\n      return copy\n    },\n    unlinkDoc: function(other) {\n      var this$1 = this;\n\n      if (other instanceof CodeMirror) { other = other.doc; }\n      if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n        var link = this$1.linked[i];\n        if (link.doc != other) { continue }\n        this$1.linked.splice(i, 1);\n        other.unlinkDoc(this$1);\n        detachSharedMarkers(findSharedMarkers(this$1));\n        break\n      } }\n      // If the histories were shared, split them again\n      if (other.history == this.history) {\n        var splitIds = [other.id];\n        linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n        other.history = new History(null);\n        other.history.done = copyHistoryArray(this.history.done, splitIds);\n        other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n      }\n    },\n    iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n    getMode: function() {return this.mode},\n    getEditor: function() {return this.cm},\n\n    splitLines: function(str) {\n      if (this.lineSep) { return str.split(this.lineSep) }\n      return splitLinesAuto(str)\n    },\n    lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n    setDirection: docMethodOp(function (dir) {\n      if (dir != \"rtl\") { dir = \"ltr\"; }\n      if (dir == this.direction) { return }\n      this.direction = dir;\n      this.iter(function (line) { return line.order = null; });\n      if (this.cm) { directionChanged(this.cm); }\n    })\n  });\n\n  // Public alias.\n  Doc.prototype.eachLine = Doc.prototype.iter;\n\n  // Kludge to work around strange IE behavior where it'll sometimes\n  // re-fire a series of drag-related events right after the drop (#1551)\n  var lastDrop = 0;\n\n  function onDrop(e) {\n    var cm = this;\n    clearDragCursor(cm);\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n      { return }\n    e_preventDefault(e);\n    if (ie) { lastDrop = +new Date; }\n    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n    if (!pos || cm.isReadOnly()) { return }\n    // Might be a file drop, in which case we simply extract the text\n    // and insert it.\n    if (files && files.length && window.FileReader && window.File) {\n      var n = files.length, text = Array(n), read = 0;\n      var loadFile = function (file, i) {\n        if (cm.options.allowDropFileTypes &&\n            indexOf(cm.options.allowDropFileTypes, file.type) == -1)\n          { return }\n\n        var reader = new FileReader;\n        reader.onload = operation(cm, function () {\n          var content = reader.result;\n          if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) { content = \"\"; }\n          text[i] = content;\n          if (++read == n) {\n            pos = clipPos(cm.doc, pos);\n            var change = {from: pos, to: pos,\n                          text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),\n                          origin: \"paste\"};\n            makeChange(cm.doc, change);\n            setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));\n          }\n        });\n        reader.readAsText(file);\n      };\n      for (var i = 0; i < n; ++i) { loadFile(files[i], i); }\n    } else { // Normal drop\n      // Don't do a replace if the drop happened inside of the selected text.\n      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n        cm.state.draggingText(e);\n        // Ensure the editor is re-focused\n        setTimeout(function () { return cm.display.input.focus(); }, 20);\n        return\n      }\n      try {\n        var text$1 = e.dataTransfer.getData(\"Text\");\n        if (text$1) {\n          var selected;\n          if (cm.state.draggingText && !cm.state.draggingText.copy)\n            { selected = cm.listSelections(); }\n          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n          if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n            { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n          cm.replaceSelection(text$1, \"around\", \"paste\");\n          cm.display.input.focus();\n        }\n      }\n      catch(e){}\n    }\n  }\n\n  function onDragStart(cm, e) {\n    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n    e.dataTransfer.setData(\"Text\", cm.getSelection());\n    e.dataTransfer.effectAllowed = \"copyMove\";\n\n    // Use dummy image instead of default browsers image.\n    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n    if (e.dataTransfer.setDragImage && !safari) {\n      var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n      img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n      if (presto) {\n        img.width = img.height = 1;\n        cm.display.wrapper.appendChild(img);\n        // Force a relayout, or Opera won't use our image for some obscure reason\n        img._top = img.offsetTop;\n      }\n      e.dataTransfer.setDragImage(img, 0, 0);\n      if (presto) { img.parentNode.removeChild(img); }\n    }\n  }\n\n  function onDragOver(cm, e) {\n    var pos = posFromMouse(cm, e);\n    if (!pos) { return }\n    var frag = document.createDocumentFragment();\n    drawSelectionCursor(cm, pos, frag);\n    if (!cm.display.dragCursor) {\n      cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n      cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n    }\n    removeChildrenAndAdd(cm.display.dragCursor, frag);\n  }\n\n  function clearDragCursor(cm) {\n    if (cm.display.dragCursor) {\n      cm.display.lineSpace.removeChild(cm.display.dragCursor);\n      cm.display.dragCursor = null;\n    }\n  }\n\n  // These must be handled carefully, because naively registering a\n  // handler for each editor will cause the editors to never be\n  // garbage collected.\n\n  function forEachCodeMirror(f) {\n    if (!document.getElementsByClassName) { return }\n    var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n    for (var i = 0; i < byClass.length; i++) {\n      var cm = byClass[i].CodeMirror;\n      if (cm) { editors.push(cm); }\n    }\n    if (editors.length) { editors[0].operation(function () {\n      for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n    }); }\n  }\n\n  var globalsRegistered = false;\n  function ensureGlobalHandlers() {\n    if (globalsRegistered) { return }\n    registerGlobalHandlers();\n    globalsRegistered = true;\n  }\n  function registerGlobalHandlers() {\n    // When the window resizes, we need to refresh active editors.\n    var resizeTimer;\n    on(window, \"resize\", function () {\n      if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n        resizeTimer = null;\n        forEachCodeMirror(onResize);\n      }, 100); }\n    });\n    // When the window loses focus, we want to show the editor as blurred\n    on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n  }\n  // Called when the window resizes\n  function onResize(cm) {\n    var d = cm.display;\n    // Might be a text scaling operation, clear size caches.\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n    d.scrollbarsClipped = false;\n    cm.setSize();\n  }\n\n  var keyNames = {\n    3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n    19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n    36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n    46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n    106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 127: \"Delete\", 145: \"ScrollLock\",\n    173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n    221: \"]\", 222: \"'\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n    63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n  };\n\n  // Number keys\n  for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n  // Alphabetic keys\n  for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n  // Function keys\n  for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n  var keyMap = {};\n\n  keyMap.basic = {\n    \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n    \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n    \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n    \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n    \"Esc\": \"singleSelection\"\n  };\n  // Note that the save and find-related commands aren't defined by\n  // default. User code or addons can define them. Unknown commands\n  // are simply ignored.\n  keyMap.pcDefault = {\n    \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n    \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n    \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n    \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n    \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n    \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n    \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n    \"fallthrough\": \"basic\"\n  };\n  // Very basic readline/emacs-style bindings, which are standard on Mac.\n  keyMap.emacsy = {\n    \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n    \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n    \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n    \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\",\n    \"Ctrl-O\": \"openLine\"\n  };\n  keyMap.macDefault = {\n    \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n    \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n    \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n    \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n    \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n    \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n    \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n    \"fallthrough\": [\"basic\", \"emacsy\"]\n  };\n  keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n  // KEYMAP DISPATCH\n\n  function normalizeKeyName(name) {\n    var parts = name.split(/-(?!$)/);\n    name = parts[parts.length - 1];\n    var alt, ctrl, shift, cmd;\n    for (var i = 0; i < parts.length - 1; i++) {\n      var mod = parts[i];\n      if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n      else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n      else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n      else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n      else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n    }\n    if (alt) { name = \"Alt-\" + name; }\n    if (ctrl) { name = \"Ctrl-\" + name; }\n    if (cmd) { name = \"Cmd-\" + name; }\n    if (shift) { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // This is a kludge to keep keymaps mostly working as raw objects\n  // (backwards compatibility) while at the same time support features\n  // like normalization and multi-stroke key bindings. It compiles a\n  // new normalized keymap, and then updates the old object to reflect\n  // this.\n  function normalizeKeyMap(keymap) {\n    var copy = {};\n    for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n      var value = keymap[keyname];\n      if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n      if (value == \"...\") { delete keymap[keyname]; continue }\n\n      var keys = map(keyname.split(\" \"), normalizeKeyName);\n      for (var i = 0; i < keys.length; i++) {\n        var val = (void 0), name = (void 0);\n        if (i == keys.length - 1) {\n          name = keys.join(\" \");\n          val = value;\n        } else {\n          name = keys.slice(0, i + 1).join(\" \");\n          val = \"...\";\n        }\n        var prev = copy[name];\n        if (!prev) { copy[name] = val; }\n        else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n      }\n      delete keymap[keyname];\n    } }\n    for (var prop in copy) { keymap[prop] = copy[prop]; }\n    return keymap\n  }\n\n  function lookupKey(key, map$$1, handle, context) {\n    map$$1 = getKeyMap(map$$1);\n    var found = map$$1.call ? map$$1.call(key, context) : map$$1[key];\n    if (found === false) { return \"nothing\" }\n    if (found === \"...\") { return \"multi\" }\n    if (found != null && handle(found)) { return \"handled\" }\n\n    if (map$$1.fallthrough) {\n      if (Object.prototype.toString.call(map$$1.fallthrough) != \"[object Array]\")\n        { return lookupKey(key, map$$1.fallthrough, handle, context) }\n      for (var i = 0; i < map$$1.fallthrough.length; i++) {\n        var result = lookupKey(key, map$$1.fallthrough[i], handle, context);\n        if (result) { return result }\n      }\n    }\n  }\n\n  // Modifier key presses don't count as 'real' key presses for the\n  // purpose of keymap fallthrough.\n  function isModifierKey(value) {\n    var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n    return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n  }\n\n  function addModifierNames(name, event, noShift) {\n    var base = name;\n    if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n    if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Cmd\") { name = \"Cmd-\" + name; }\n    if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // Look up the name of a key as indicated by an event object.\n  function keyName(event, noShift) {\n    if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n    var name = keyNames[event.keyCode];\n    if (name == null || event.altGraphKey) { return false }\n    // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n    // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n    if (event.keyCode == 3 && event.code) { name = event.code; }\n    return addModifierNames(name, event, noShift)\n  }\n\n  function getKeyMap(val) {\n    return typeof val == \"string\" ? keyMap[val] : val\n  }\n\n  // Helper for deleting text near the selection(s), used to implement\n  // backspace, delete, and similar functionality.\n  function deleteNearSelection(cm, compute) {\n    var ranges = cm.doc.sel.ranges, kill = [];\n    // Build up a set of ranges to kill first, merging overlapping\n    // ranges.\n    for (var i = 0; i < ranges.length; i++) {\n      var toKill = compute(ranges[i]);\n      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n        var replaced = kill.pop();\n        if (cmp(replaced.from, toKill.from) < 0) {\n          toKill.from = replaced.from;\n          break\n        }\n      }\n      kill.push(toKill);\n    }\n    // Next, remove those actual ranges.\n    runInOp(cm, function () {\n      for (var i = kill.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n      ensureCursorVisible(cm);\n    });\n  }\n\n  function moveCharLogically(line, ch, dir) {\n    var target = skipExtendingChars(line.text, ch + dir, dir);\n    return target < 0 || target > line.text.length ? null : target\n  }\n\n  function moveLogically(line, start, dir) {\n    var ch = moveCharLogically(line, start.ch, dir);\n    return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n  }\n\n  function endOfLine(visually, cm, lineObj, lineNo, dir) {\n    if (visually) {\n      var order = getOrder(lineObj, cm.doc.direction);\n      if (order) {\n        var part = dir < 0 ? lst(order) : order[0];\n        var moveInStorageOrder = (dir < 0) == (part.level == 1);\n        var sticky = moveInStorageOrder ? \"after\" : \"before\";\n        var ch;\n        // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n        // it could be that the last bidi part is not on the last visual line,\n        // since visual lines contain content order-consecutive chunks.\n        // Thus, in rtl, we are looking for the first (content-order) character\n        // in the rtl chunk that is on the last line (that is, the same line\n        // as the last (content-order) character).\n        if (part.level > 0 || cm.doc.direction == \"rtl\") {\n          var prep = prepareMeasureForLine(cm, lineObj);\n          ch = dir < 0 ? lineObj.text.length - 1 : 0;\n          var targetTop = measureCharPrepared(cm, prep, ch).top;\n          ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n          if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n        } else { ch = dir < 0 ? part.to : part.from; }\n        return new Pos(lineNo, ch, sticky)\n      }\n    }\n    return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n  }\n\n  function moveVisually(cm, line, start, dir) {\n    var bidi = getOrder(line, cm.doc.direction);\n    if (!bidi) { return moveLogically(line, start, dir) }\n    if (start.ch >= line.text.length) {\n      start.ch = line.text.length;\n      start.sticky = \"before\";\n    } else if (start.ch <= 0) {\n      start.ch = 0;\n      start.sticky = \"after\";\n    }\n    var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n    if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n      // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n      // nothing interesting happens.\n      return moveLogically(line, start, dir)\n    }\n\n    var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n    var prep;\n    var getWrappedLineExtent = function (ch) {\n      if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n      prep = prep || prepareMeasureForLine(cm, line);\n      return wrappedLineExtentChar(cm, line, prep, ch)\n    };\n    var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n    if (cm.doc.direction == \"rtl\" || part.level == 1) {\n      var moveInStorageOrder = (part.level == 1) == (dir < 0);\n      var ch = mv(start, moveInStorageOrder ? 1 : -1);\n      if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n        // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n        var sticky = moveInStorageOrder ? \"before\" : \"after\";\n        return new Pos(start.line, ch, sticky)\n      }\n    }\n\n    // Case 3: Could not move within this bidi part in this visual line, so leave\n    // the current bidi part\n\n    var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n      var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n        ? new Pos(start.line, mv(ch, 1), \"before\")\n        : new Pos(start.line, ch, \"after\"); };\n\n      for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n        var part = bidi[partPos];\n        var moveInStorageOrder = (dir > 0) == (part.level != 1);\n        var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n        if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n        ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n        if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n      }\n    };\n\n    // Case 3a: Look for other bidi parts on the same visual line\n    var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n    if (res) { return res }\n\n    // Case 3b: Look for other bidi parts on the next visual line\n    var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n    if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n      res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n      if (res) { return res }\n    }\n\n    // Case 4: Nowhere to move\n    return null\n  }\n\n  // Commands are parameter-less actions that can be performed on an\n  // editor, mostly used for keybindings.\n  var commands = {\n    selectAll: selectAll,\n    singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n    killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n      if (range.empty()) {\n        var len = getLine(cm.doc, range.head.line).text.length;\n        if (range.head.ch == len && range.head.line < cm.lastLine())\n          { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n        else\n          { return {from: range.head, to: Pos(range.head.line, len)} }\n      } else {\n        return {from: range.from(), to: range.to()}\n      }\n    }); },\n    deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0),\n      to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n    }); }); },\n    delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0), to: range.from()\n    }); }); },\n    delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n      return {from: leftPos, to: range.from()}\n    }); },\n    delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n      return {from: range.from(), to: rightPos }\n    }); },\n    undo: function (cm) { return cm.undo(); },\n    redo: function (cm) { return cm.redo(); },\n    undoSelection: function (cm) { return cm.undoSelection(); },\n    redoSelection: function (cm) { return cm.redoSelection(); },\n    goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n    goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n    goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n      {origin: \"+move\", bias: -1}\n    ); },\n    goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: 0, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n      if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n      return pos\n    }, sel_move); },\n    goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n    goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n    goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n    goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n    goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n    goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n    goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n    goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n    goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n    goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n    goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n    goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n    delCharBefore: function (cm) { return cm.deleteH(-1, \"char\"); },\n    delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n    delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n    delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n    delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n    delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n    indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n    indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n    indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n    insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n    insertSoftTab: function (cm) {\n      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n      for (var i = 0; i < ranges.length; i++) {\n        var pos = ranges[i].from();\n        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n        spaces.push(spaceStr(tabSize - col % tabSize));\n      }\n      cm.replaceSelections(spaces);\n    },\n    defaultTab: function (cm) {\n      if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n      else { cm.execCommand(\"insertTab\"); }\n    },\n    // Swap the two chars left and right of each selection's head.\n    // Move cursor behind the two swapped characters afterwards.\n    //\n    // Doesn't consider line feeds a character.\n    // Doesn't scan more than one line above to find a character.\n    // Doesn't do anything on an empty line.\n    // Doesn't do anything with non-empty selections.\n    transposeChars: function (cm) { return runInOp(cm, function () {\n      var ranges = cm.listSelections(), newSel = [];\n      for (var i = 0; i < ranges.length; i++) {\n        if (!ranges[i].empty()) { continue }\n        var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n        if (line) {\n          if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n          if (cur.ch > 0) {\n            cur = new Pos(cur.line, cur.ch + 1);\n            cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n                            Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n          } else if (cur.line > cm.doc.first) {\n            var prev = getLine(cm.doc, cur.line - 1).text;\n            if (prev) {\n              cur = new Pos(cur.line, 1);\n              cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n                              prev.charAt(prev.length - 1),\n                              Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n            }\n          }\n        }\n        newSel.push(new Range(cur, cur));\n      }\n      cm.setSelections(newSel);\n    }); },\n    newlineAndIndent: function (cm) { return runInOp(cm, function () {\n      var sels = cm.listSelections();\n      for (var i = sels.length - 1; i >= 0; i--)\n        { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n      sels = cm.listSelections();\n      for (var i$1 = 0; i$1 < sels.length; i$1++)\n        { cm.indentLine(sels[i$1].from().line, null, true); }\n      ensureCursorVisible(cm);\n    }); },\n    openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n    toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n  };\n\n\n  function lineStart(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLine(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, visual, lineN, 1)\n  }\n  function lineEnd(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLineEnd(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, line, lineN, -1)\n  }\n  function lineStartSmart(cm, pos) {\n    var start = lineStart(cm, pos.line);\n    var line = getLine(cm.doc, start.line);\n    var order = getOrder(line, cm.doc.direction);\n    if (!order || order[0].level == 0) {\n      var firstNonWS = Math.max(0, line.text.search(/\\S/));\n      var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n      return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n    }\n    return start\n  }\n\n  // Run a handler that was bound to a key.\n  function doHandleBinding(cm, bound, dropShift) {\n    if (typeof bound == \"string\") {\n      bound = commands[bound];\n      if (!bound) { return false }\n    }\n    // Ensure previous input has been read, so that the handler sees a\n    // consistent view of the document\n    cm.display.input.ensurePolled();\n    var prevShift = cm.display.shift, done = false;\n    try {\n      if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n      if (dropShift) { cm.display.shift = false; }\n      done = bound(cm) != Pass;\n    } finally {\n      cm.display.shift = prevShift;\n      cm.state.suppressEdits = false;\n    }\n    return done\n  }\n\n  function lookupKeyForEditor(cm, name, handle) {\n    for (var i = 0; i < cm.state.keyMaps.length; i++) {\n      var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n      if (result) { return result }\n    }\n    return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n      || lookupKey(name, cm.options.keyMap, handle, cm)\n  }\n\n  // Note that, despite the name, this function is also used to check\n  // for bound mouse clicks.\n\n  var stopSeq = new Delayed;\n\n  function dispatchKey(cm, name, e, handle) {\n    var seq = cm.state.keySeq;\n    if (seq) {\n      if (isModifierKey(name)) { return \"handled\" }\n      if (/\\'$/.test(name))\n        { cm.state.keySeq = null; }\n      else\n        { stopSeq.set(50, function () {\n          if (cm.state.keySeq == seq) {\n            cm.state.keySeq = null;\n            cm.display.input.reset();\n          }\n        }); }\n      if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n    }\n    return dispatchKeyInner(cm, name, e, handle)\n  }\n\n  function dispatchKeyInner(cm, name, e, handle) {\n    var result = lookupKeyForEditor(cm, name, handle);\n\n    if (result == \"multi\")\n      { cm.state.keySeq = name; }\n    if (result == \"handled\")\n      { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n    if (result == \"handled\" || result == \"multi\") {\n      e_preventDefault(e);\n      restartBlink(cm);\n    }\n\n    return !!result\n  }\n\n  // Handle a key from the keydown event.\n  function handleKeyBinding(cm, e) {\n    var name = keyName(e, true);\n    if (!name) { return false }\n\n    if (e.shiftKey && !cm.state.keySeq) {\n      // First try to resolve full name (including 'Shift-'). Failing\n      // that, see if there is a cursor-motion command (starting with\n      // 'go') bound to the keyname without 'Shift-'.\n      return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n          || dispatchKey(cm, name, e, function (b) {\n               if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n                 { return doHandleBinding(cm, b) }\n             })\n    } else {\n      return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n    }\n  }\n\n  // Handle a key from the keypress event\n  function handleCharBinding(cm, e, ch) {\n    return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n  }\n\n  var lastStoppedKey = null;\n  function onKeyDown(e) {\n    var cm = this;\n    cm.curOp.focus = activeElt();\n    if (signalDOMEvent(cm, e)) { return }\n    // IE does strange things with escape.\n    if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n    var code = e.keyCode;\n    cm.display.shift = code == 16 || e.shiftKey;\n    var handled = handleKeyBinding(cm, e);\n    if (presto) {\n      lastStoppedKey = handled ? code : null;\n      // Opera has no cut event... we try to at least catch the key combo\n      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n        { cm.replaceSelection(\"\", null, \"cut\"); }\n    }\n\n    // Turn mouse into crosshair when Alt is held on Mac.\n    if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n      { showCrossHair(cm); }\n  }\n\n  function showCrossHair(cm) {\n    var lineDiv = cm.display.lineDiv;\n    addClass(lineDiv, \"CodeMirror-crosshair\");\n\n    function up(e) {\n      if (e.keyCode == 18 || !e.altKey) {\n        rmClass(lineDiv, \"CodeMirror-crosshair\");\n        off(document, \"keyup\", up);\n        off(document, \"mouseover\", up);\n      }\n    }\n    on(document, \"keyup\", up);\n    on(document, \"mouseover\", up);\n  }\n\n  function onKeyUp(e) {\n    if (e.keyCode == 16) { this.doc.sel.shift = false; }\n    signalDOMEvent(this, e);\n  }\n\n  function onKeyPress(e) {\n    var cm = this;\n    if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n    var keyCode = e.keyCode, charCode = e.charCode;\n    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n    if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n    // Some browsers fire keypress events for backspace\n    if (ch == \"\\x08\") { return }\n    if (handleCharBinding(cm, e, ch)) { return }\n    cm.display.input.onKeyPress(e);\n  }\n\n  var DOUBLECLICK_DELAY = 400;\n\n  var PastClick = function(time, pos, button) {\n    this.time = time;\n    this.pos = pos;\n    this.button = button;\n  };\n\n  PastClick.prototype.compare = function (time, pos, button) {\n    return this.time + DOUBLECLICK_DELAY > time &&\n      cmp(pos, this.pos) == 0 && button == this.button\n  };\n\n  var lastClick, lastDoubleClick;\n  function clickRepeat(pos, button) {\n    var now = +new Date;\n    if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n      lastClick = lastDoubleClick = null;\n      return \"triple\"\n    } else if (lastClick && lastClick.compare(now, pos, button)) {\n      lastDoubleClick = new PastClick(now, pos, button);\n      lastClick = null;\n      return \"double\"\n    } else {\n      lastClick = new PastClick(now, pos, button);\n      lastDoubleClick = null;\n      return \"single\"\n    }\n  }\n\n  // A mouse down can be a single click, double click, triple click,\n  // start of selection drag, start of text drag, new cursor\n  // (ctrl-click), rectangle drag (alt-drag), or xwin\n  // middle-click-paste. Or it might be a click on something we should\n  // not interfere with, such as a scrollbar or widget.\n  function onMouseDown(e) {\n    var cm = this, display = cm.display;\n    if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n    display.input.ensurePolled();\n    display.shift = e.shiftKey;\n\n    if (eventInWidget(display, e)) {\n      if (!webkit) {\n        // Briefly turn off draggability, to allow widgets to do\n        // normal dragging things.\n        display.scroller.draggable = false;\n        setTimeout(function () { return display.scroller.draggable = true; }, 100);\n      }\n      return\n    }\n    if (clickInGutter(cm, e)) { return }\n    var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n    window.focus();\n\n    // #3261: make sure, that we're not starting a second selection\n    if (button == 1 && cm.state.selectingText)\n      { cm.state.selectingText(e); }\n\n    if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n    if (button == 1) {\n      if (pos) { leftButtonDown(cm, pos, repeat, e); }\n      else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n    } else if (button == 2) {\n      if (pos) { extendSelection(cm.doc, pos); }\n      setTimeout(function () { return display.input.focus(); }, 20);\n    } else if (button == 3) {\n      if (captureRightClick) { cm.display.input.onContextMenu(e); }\n      else { delayBlurEvent(cm); }\n    }\n  }\n\n  function handleMappedButton(cm, button, pos, repeat, event) {\n    var name = \"Click\";\n    if (repeat == \"double\") { name = \"Double\" + name; }\n    else if (repeat == \"triple\") { name = \"Triple\" + name; }\n    name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n    return dispatchKey(cm,  addModifierNames(name, event), event, function (bound) {\n      if (typeof bound == \"string\") { bound = commands[bound]; }\n      if (!bound) { return false }\n      var done = false;\n      try {\n        if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n        done = bound(cm, pos) != Pass;\n      } finally {\n        cm.state.suppressEdits = false;\n      }\n      return done\n    })\n  }\n\n  function configureMouse(cm, repeat, event) {\n    var option = cm.getOption(\"configureMouse\");\n    var value = option ? option(cm, repeat, event) : {};\n    if (value.unit == null) {\n      var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n      value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n    }\n    if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n    if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n    if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n    return value\n  }\n\n  function leftButtonDown(cm, pos, repeat, event) {\n    if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n    else { cm.curOp.focus = activeElt(); }\n\n    var behavior = configureMouse(cm, repeat, event);\n\n    var sel = cm.doc.sel, contained;\n    if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n        repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n        (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n        (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n      { leftButtonStartDrag(cm, event, pos, behavior); }\n    else\n      { leftButtonSelect(cm, event, pos, behavior); }\n  }\n\n  // Start a text drag. When it ends, see if any dragging actually\n  // happen, and treat as a click if it didn't.\n  function leftButtonStartDrag(cm, event, pos, behavior) {\n    var display = cm.display, moved = false;\n    var dragEnd = operation(cm, function (e) {\n      if (webkit) { display.scroller.draggable = false; }\n      cm.state.draggingText = false;\n      off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n      off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n      off(display.scroller, \"dragstart\", dragStart);\n      off(display.scroller, \"drop\", dragEnd);\n      if (!moved) {\n        e_preventDefault(e);\n        if (!behavior.addNew)\n          { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n        // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n        if (webkit || ie && ie_version == 9)\n          { setTimeout(function () {display.wrapper.ownerDocument.body.focus(); display.input.focus();}, 20); }\n        else\n          { display.input.focus(); }\n      }\n    });\n    var mouseMove = function(e2) {\n      moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n    };\n    var dragStart = function () { return moved = true; };\n    // Let the drag handler handle this.\n    if (webkit) { display.scroller.draggable = true; }\n    cm.state.draggingText = dragEnd;\n    dragEnd.copy = !behavior.moveOnDrag;\n    // IE's approach to draggable\n    if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n    on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n    on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n    on(display.scroller, \"dragstart\", dragStart);\n    on(display.scroller, \"drop\", dragEnd);\n\n    delayBlurEvent(cm);\n    setTimeout(function () { return display.input.focus(); }, 20);\n  }\n\n  function rangeForUnit(cm, pos, unit) {\n    if (unit == \"char\") { return new Range(pos, pos) }\n    if (unit == \"word\") { return cm.findWordAt(pos) }\n    if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n    var result = unit(cm, pos);\n    return new Range(result.from, result.to)\n  }\n\n  // Normal selection, as opposed to text dragging.\n  function leftButtonSelect(cm, event, start, behavior) {\n    var display = cm.display, doc = cm.doc;\n    e_preventDefault(event);\n\n    var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n    if (behavior.addNew && !behavior.extend) {\n      ourIndex = doc.sel.contains(start);\n      if (ourIndex > -1)\n        { ourRange = ranges[ourIndex]; }\n      else\n        { ourRange = new Range(start, start); }\n    } else {\n      ourRange = doc.sel.primary();\n      ourIndex = doc.sel.primIndex;\n    }\n\n    if (behavior.unit == \"rectangle\") {\n      if (!behavior.addNew) { ourRange = new Range(start, start); }\n      start = posFromMouse(cm, event, true, true);\n      ourIndex = -1;\n    } else {\n      var range$$1 = rangeForUnit(cm, start, behavior.unit);\n      if (behavior.extend)\n        { ourRange = extendRange(ourRange, range$$1.anchor, range$$1.head, behavior.extend); }\n      else\n        { ourRange = range$$1; }\n    }\n\n    if (!behavior.addNew) {\n      ourIndex = 0;\n      setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n      startSel = doc.sel;\n    } else if (ourIndex == -1) {\n      ourIndex = ranges.length;\n      setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n                   {scroll: false, origin: \"*mouse\"});\n    } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n      setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n                   {scroll: false, origin: \"*mouse\"});\n      startSel = doc.sel;\n    } else {\n      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n    }\n\n    var lastPos = start;\n    function extendTo(pos) {\n      if (cmp(lastPos, pos) == 0) { return }\n      lastPos = pos;\n\n      if (behavior.unit == \"rectangle\") {\n        var ranges = [], tabSize = cm.options.tabSize;\n        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n             line <= end; line++) {\n          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n          if (left == right)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n          else if (text.length > leftPos)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n        }\n        if (!ranges.length) { ranges.push(new Range(start, start)); }\n        setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n                     {origin: \"*mouse\", scroll: false});\n        cm.scrollIntoView(pos);\n      } else {\n        var oldRange = ourRange;\n        var range$$1 = rangeForUnit(cm, pos, behavior.unit);\n        var anchor = oldRange.anchor, head;\n        if (cmp(range$$1.anchor, anchor) > 0) {\n          head = range$$1.head;\n          anchor = minPos(oldRange.from(), range$$1.anchor);\n        } else {\n          head = range$$1.anchor;\n          anchor = maxPos(oldRange.to(), range$$1.head);\n        }\n        var ranges$1 = startSel.ranges.slice(0);\n        ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n        setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n      }\n    }\n\n    var editorSize = display.wrapper.getBoundingClientRect();\n    // Used to ensure timeout re-tries don't fire when another extend\n    // happened in the meantime (clearTimeout isn't reliable -- at\n    // least on Chrome, the timeouts still happen even when cleared,\n    // if the clear happens after their scheduled firing time).\n    var counter = 0;\n\n    function extend(e) {\n      var curCount = ++counter;\n      var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n      if (!cur) { return }\n      if (cmp(cur, lastPos) != 0) {\n        cm.curOp.focus = activeElt();\n        extendTo(cur);\n        var visible = visibleLines(display, doc);\n        if (cur.line >= visible.to || cur.line < visible.from)\n          { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n      } else {\n        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n        if (outside) { setTimeout(operation(cm, function () {\n          if (counter != curCount) { return }\n          display.scroller.scrollTop += outside;\n          extend(e);\n        }), 50); }\n      }\n    }\n\n    function done(e) {\n      cm.state.selectingText = false;\n      counter = Infinity;\n      e_preventDefault(e);\n      display.input.focus();\n      off(display.wrapper.ownerDocument, \"mousemove\", move);\n      off(display.wrapper.ownerDocument, \"mouseup\", up);\n      doc.history.lastSelOrigin = null;\n    }\n\n    var move = operation(cm, function (e) {\n      if (e.buttons === 0 || !e_button(e)) { done(e); }\n      else { extend(e); }\n    });\n    var up = operation(cm, done);\n    cm.state.selectingText = up;\n    on(display.wrapper.ownerDocument, \"mousemove\", move);\n    on(display.wrapper.ownerDocument, \"mouseup\", up);\n  }\n\n  // Used when mouse-selecting to adjust the anchor to the proper side\n  // of a bidi jump depending on the visual position of the head.\n  function bidiSimplify(cm, range$$1) {\n    var anchor = range$$1.anchor;\n    var head = range$$1.head;\n    var anchorLine = getLine(cm.doc, anchor.line);\n    if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range$$1 }\n    var order = getOrder(anchorLine);\n    if (!order) { return range$$1 }\n    var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n    if (part.from != anchor.ch && part.to != anchor.ch) { return range$$1 }\n    var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n    if (boundary == 0 || boundary == order.length) { return range$$1 }\n\n    // Compute the relative visual position of the head compared to the\n    // anchor (<0 is to the left, >0 to the right)\n    var leftSide;\n    if (head.line != anchor.line) {\n      leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n    } else {\n      var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n      var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n      if (headIndex == boundary - 1 || headIndex == boundary)\n        { leftSide = dir < 0; }\n      else\n        { leftSide = dir > 0; }\n    }\n\n    var usePart = order[boundary + (leftSide ? -1 : 0)];\n    var from = leftSide == (usePart.level == 1);\n    var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n    return anchor.ch == ch && anchor.sticky == sticky ? range$$1 : new Range(new Pos(anchor.line, ch, sticky), head)\n  }\n\n\n  // Determines whether an event happened in the gutter, and fires the\n  // handlers for the corresponding event.\n  function gutterEvent(cm, e, type, prevent) {\n    var mX, mY;\n    if (e.touches) {\n      mX = e.touches[0].clientX;\n      mY = e.touches[0].clientY;\n    } else {\n      try { mX = e.clientX; mY = e.clientY; }\n      catch(e) { return false }\n    }\n    if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n    if (prevent) { e_preventDefault(e); }\n\n    var display = cm.display;\n    var lineBox = display.lineDiv.getBoundingClientRect();\n\n    if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n    mY -= lineBox.top - display.viewOffset;\n\n    for (var i = 0; i < cm.options.gutters.length; ++i) {\n      var g = display.gutters.childNodes[i];\n      if (g && g.getBoundingClientRect().right >= mX) {\n        var line = lineAtHeight(cm.doc, mY);\n        var gutter = cm.options.gutters[i];\n        signal(cm, type, cm, line, gutter, e);\n        return e_defaultPrevented(e)\n      }\n    }\n  }\n\n  function clickInGutter(cm, e) {\n    return gutterEvent(cm, e, \"gutterClick\", true)\n  }\n\n  // CONTEXT MENU HANDLING\n\n  // To make the context menu work, we need to briefly unhide the\n  // textarea (making it as unobtrusive as possible) to let the\n  // right-click take effect on it.\n  function onContextMenu(cm, e) {\n    if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n    if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n    if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n  }\n\n  function contextMenuInGutter(cm, e) {\n    if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n    return gutterEvent(cm, e, \"gutterContextMenu\", false)\n  }\n\n  function themeChanged(cm) {\n    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n      cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n    clearCaches(cm);\n  }\n\n  var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n  var defaults = {};\n  var optionHandlers = {};\n\n  function defineOptions(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    function option(name, deflt, handle, notOnInit) {\n      CodeMirror.defaults[name] = deflt;\n      if (handle) { optionHandlers[name] =\n        notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n    }\n\n    CodeMirror.defineOption = option;\n\n    // Passed to option handlers when there is no old value.\n    CodeMirror.Init = Init;\n\n    // These two are, on init, called from the constructor because they\n    // have to be initialized before the editor can start at all.\n    option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n    option(\"mode\", null, function (cm, val) {\n      cm.doc.modeOption = val;\n      loadMode(cm);\n    }, true);\n\n    option(\"indentUnit\", 2, loadMode, true);\n    option(\"indentWithTabs\", false);\n    option(\"smartIndent\", true);\n    option(\"tabSize\", 4, function (cm) {\n      resetModeState(cm);\n      clearCaches(cm);\n      regChange(cm);\n    }, true);\n\n    option(\"lineSeparator\", null, function (cm, val) {\n      cm.doc.lineSep = val;\n      if (!val) { return }\n      var newBreaks = [], lineNo = cm.doc.first;\n      cm.doc.iter(function (line) {\n        for (var pos = 0;;) {\n          var found = line.text.indexOf(val, pos);\n          if (found == -1) { break }\n          pos = found + val.length;\n          newBreaks.push(Pos(lineNo, found));\n        }\n        lineNo++;\n      });\n      for (var i = newBreaks.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n    });\n    option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200f\\u2028\\u2029\\ufeff]/g, function (cm, val, old) {\n      cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n      if (old != Init) { cm.refresh(); }\n    });\n    option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n    option(\"electricChars\", true);\n    option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n      throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n    }, true);\n    option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n    option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n    option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n    option(\"rtlMoveVisually\", !windows);\n    option(\"wholeLineUpdateBefore\", true);\n\n    option(\"theme\", \"default\", function (cm) {\n      themeChanged(cm);\n      guttersChanged(cm);\n    }, true);\n    option(\"keyMap\", \"default\", function (cm, val, old) {\n      var next = getKeyMap(val);\n      var prev = old != Init && getKeyMap(old);\n      if (prev && prev.detach) { prev.detach(cm, next); }\n      if (next.attach) { next.attach(cm, prev || null); }\n    });\n    option(\"extraKeys\", null);\n    option(\"configureMouse\", null);\n\n    option(\"lineWrapping\", false, wrappingChanged, true);\n    option(\"gutters\", [], function (cm) {\n      setGuttersForLineNumbers(cm.options);\n      guttersChanged(cm);\n    }, true);\n    option(\"fixedGutter\", true, function (cm, val) {\n      cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n      cm.refresh();\n    }, true);\n    option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n    option(\"scrollbarStyle\", \"native\", function (cm) {\n      initScrollbars(cm);\n      updateScrollbars(cm);\n      cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n      cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n    }, true);\n    option(\"lineNumbers\", false, function (cm) {\n      setGuttersForLineNumbers(cm.options);\n      guttersChanged(cm);\n    }, true);\n    option(\"firstLineNumber\", 1, guttersChanged, true);\n    option(\"lineNumberFormatter\", function (integer) { return integer; }, guttersChanged, true);\n    option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n    option(\"resetSelectionOnContextMenu\", true);\n    option(\"lineWiseCopyCut\", true);\n    option(\"pasteLinesPerSelection\", true);\n    option(\"selectionsMayTouch\", false);\n\n    option(\"readOnly\", false, function (cm, val) {\n      if (val == \"nocursor\") {\n        onBlur(cm);\n        cm.display.input.blur();\n      }\n      cm.display.input.readOnlyChanged(val);\n    });\n    option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n    option(\"dragDrop\", true, dragDropChanged);\n    option(\"allowDropFileTypes\", null);\n\n    option(\"cursorBlinkRate\", 530);\n    option(\"cursorScrollMargin\", 0);\n    option(\"cursorHeight\", 1, updateSelection, true);\n    option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n    option(\"workTime\", 100);\n    option(\"workDelay\", 100);\n    option(\"flattenSpans\", true, resetModeState, true);\n    option(\"addModeClass\", false, resetModeState, true);\n    option(\"pollInterval\", 100);\n    option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n    option(\"historyEventDelay\", 1250);\n    option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n    option(\"maxHighlightLength\", 10000, resetModeState, true);\n    option(\"moveInputWithCursor\", true, function (cm, val) {\n      if (!val) { cm.display.input.resetPosition(); }\n    });\n\n    option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n    option(\"autofocus\", null);\n    option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n    option(\"phrases\", null);\n  }\n\n  function guttersChanged(cm) {\n    updateGutters(cm);\n    regChange(cm);\n    alignHorizontally(cm);\n  }\n\n  function dragDropChanged(cm, value, old) {\n    var wasOn = old && old != Init;\n    if (!value != !wasOn) {\n      var funcs = cm.display.dragFunctions;\n      var toggle = value ? on : off;\n      toggle(cm.display.scroller, \"dragstart\", funcs.start);\n      toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n      toggle(cm.display.scroller, \"dragover\", funcs.over);\n      toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n      toggle(cm.display.scroller, \"drop\", funcs.drop);\n    }\n  }\n\n  function wrappingChanged(cm) {\n    if (cm.options.lineWrapping) {\n      addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      cm.display.sizer.style.minWidth = \"\";\n      cm.display.sizerWidth = null;\n    } else {\n      rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      findMaxLine(cm);\n    }\n    estimateLineHeights(cm);\n    regChange(cm);\n    clearCaches(cm);\n    setTimeout(function () { return updateScrollbars(cm); }, 100);\n  }\n\n  // A CodeMirror instance represents an editor. This is the object\n  // that user code is usually dealing with.\n\n  function CodeMirror(place, options) {\n    var this$1 = this;\n\n    if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n    this.options = options = options ? copyObj(options) : {};\n    // Determine effective options based on given values and defaults.\n    copyObj(defaults, options, false);\n    setGuttersForLineNumbers(options);\n\n    var doc = options.value;\n    if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n    else if (options.mode) { doc.modeOption = options.mode; }\n    this.doc = doc;\n\n    var input = new CodeMirror.inputStyles[options.inputStyle](this);\n    var display = this.display = new Display(place, doc, input);\n    display.wrapper.CodeMirror = this;\n    updateGutters(this);\n    themeChanged(this);\n    if (options.lineWrapping)\n      { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n    initScrollbars(this);\n\n    this.state = {\n      keyMaps: [],  // stores maps added by addKeyMap\n      overlays: [], // highlighting overlays, as added by addOverlay\n      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info\n      overwrite: false,\n      delayingBlurEvent: false,\n      focused: false,\n      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n      pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n      selectingText: false,\n      draggingText: false,\n      highlight: new Delayed(), // stores highlight worker timeout\n      keySeq: null,  // Unfinished key sequence\n      specialChars: null\n    };\n\n    if (options.autofocus && !mobile) { display.input.focus(); }\n\n    // Override magic textarea content restore that IE sometimes does\n    // on our hidden textarea on reload\n    if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n    registerEventHandlers(this);\n    ensureGlobalHandlers();\n\n    startOperation(this);\n    this.curOp.forceUpdate = true;\n    attachDoc(this, doc);\n\n    if ((options.autofocus && !mobile) || this.hasFocus())\n      { setTimeout(bind(onFocus, this), 20); }\n    else\n      { onBlur(this); }\n\n    for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n      { optionHandlers[opt](this$1, options[opt], Init); } }\n    maybeUpdateLineNumberWidth(this);\n    if (options.finishInit) { options.finishInit(this); }\n    for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1); }\n    endOperation(this);\n    // Suppress optimizelegibility in Webkit, since it breaks text\n    // measuring on line wrapping boundaries.\n    if (webkit && options.lineWrapping &&\n        getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n      { display.lineDiv.style.textRendering = \"auto\"; }\n  }\n\n  // The default configuration options.\n  CodeMirror.defaults = defaults;\n  // Functions to run when options are changed.\n  CodeMirror.optionHandlers = optionHandlers;\n\n  // Attach the necessary event handlers when initializing the editor\n  function registerEventHandlers(cm) {\n    var d = cm.display;\n    on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n    // Older IE's will not fire a second mousedown for a double click\n    if (ie && ie_version < 11)\n      { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n        if (signalDOMEvent(cm, e)) { return }\n        var pos = posFromMouse(cm, e);\n        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n        e_preventDefault(e);\n        var word = cm.findWordAt(pos);\n        extendSelection(cm.doc, word.anchor, word.head);\n      })); }\n    else\n      { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n    // Some browsers fire contextmenu *after* opening the menu, at\n    // which point we can't mess with it anymore. Context menu is\n    // handled in onMouseDown for these browsers.\n    on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n\n    // Used to suppress mouse event handling when a touch happens\n    var touchFinished, prevTouch = {end: 0};\n    function finishTouch() {\n      if (d.activeTouch) {\n        touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n        prevTouch = d.activeTouch;\n        prevTouch.end = +new Date;\n      }\n    }\n    function isMouseLikeTouchEvent(e) {\n      if (e.touches.length != 1) { return false }\n      var touch = e.touches[0];\n      return touch.radiusX <= 1 && touch.radiusY <= 1\n    }\n    function farAway(touch, other) {\n      if (other.left == null) { return true }\n      var dx = other.left - touch.left, dy = other.top - touch.top;\n      return dx * dx + dy * dy > 20 * 20\n    }\n    on(d.scroller, \"touchstart\", function (e) {\n      if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n        d.input.ensurePolled();\n        clearTimeout(touchFinished);\n        var now = +new Date;\n        d.activeTouch = {start: now, moved: false,\n                         prev: now - prevTouch.end <= 300 ? prevTouch : null};\n        if (e.touches.length == 1) {\n          d.activeTouch.left = e.touches[0].pageX;\n          d.activeTouch.top = e.touches[0].pageY;\n        }\n      }\n    });\n    on(d.scroller, \"touchmove\", function () {\n      if (d.activeTouch) { d.activeTouch.moved = true; }\n    });\n    on(d.scroller, \"touchend\", function (e) {\n      var touch = d.activeTouch;\n      if (touch && !eventInWidget(d, e) && touch.left != null &&\n          !touch.moved && new Date - touch.start < 300) {\n        var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n        if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n          { range = new Range(pos, pos); }\n        else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n          { range = cm.findWordAt(pos); }\n        else // Triple tap\n          { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n        cm.setSelection(range.anchor, range.head);\n        cm.focus();\n        e_preventDefault(e);\n      }\n      finishTouch();\n    });\n    on(d.scroller, \"touchcancel\", finishTouch);\n\n    // Sync scrolling between fake scrollbars and real scrollable\n    // area, ensure viewport is updated when scrolling.\n    on(d.scroller, \"scroll\", function () {\n      if (d.scroller.clientHeight) {\n        updateScrollTop(cm, d.scroller.scrollTop);\n        setScrollLeft(cm, d.scroller.scrollLeft, true);\n        signal(cm, \"scroll\", cm);\n      }\n    });\n\n    // Listen to wheel events in order to try and update the viewport on time.\n    on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n    on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n    // Prevent wrapper from ever scrolling\n    on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n    d.dragFunctions = {\n      enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n      over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n      start: function (e) { return onDragStart(cm, e); },\n      drop: operation(cm, onDrop),\n      leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n    };\n\n    var inp = d.input.getField();\n    on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n    on(inp, \"keydown\", operation(cm, onKeyDown));\n    on(inp, \"keypress\", operation(cm, onKeyPress));\n    on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n    on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n  }\n\n  var initHooks = [];\n  CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n  // Indent the given line. The how parameter can be \"smart\",\n  // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n  // (typically set to true for forced single-line indents), empty\n  // lines are not indented, and places where the mode returns Pass\n  // are left alone.\n  function indentLine(cm, n, how, aggressive) {\n    var doc = cm.doc, state;\n    if (how == null) { how = \"add\"; }\n    if (how == \"smart\") {\n      // Fall back to \"prev\" when the mode doesn't have an indentation\n      // method.\n      if (!doc.mode.indent) { how = \"prev\"; }\n      else { state = getContextBefore(cm, n).state; }\n    }\n\n    var tabSize = cm.options.tabSize;\n    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n    if (line.stateAfter) { line.stateAfter = null; }\n    var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n    if (!aggressive && !/\\S/.test(line.text)) {\n      indentation = 0;\n      how = \"not\";\n    } else if (how == \"smart\") {\n      indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n      if (indentation == Pass || indentation > 150) {\n        if (!aggressive) { return }\n        how = \"prev\";\n      }\n    }\n    if (how == \"prev\") {\n      if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n      else { indentation = 0; }\n    } else if (how == \"add\") {\n      indentation = curSpace + cm.options.indentUnit;\n    } else if (how == \"subtract\") {\n      indentation = curSpace - cm.options.indentUnit;\n    } else if (typeof how == \"number\") {\n      indentation = curSpace + how;\n    }\n    indentation = Math.max(0, indentation);\n\n    var indentString = \"\", pos = 0;\n    if (cm.options.indentWithTabs)\n      { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n    if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n    if (indentString != curSpaceString) {\n      replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n      line.stateAfter = null;\n      return true\n    } else {\n      // Ensure that, if the cursor was in the whitespace at the start\n      // of the line, it is moved to the end of that space.\n      for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n        var range = doc.sel.ranges[i$1];\n        if (range.head.line == n && range.head.ch < curSpaceString.length) {\n          var pos$1 = Pos(n, curSpaceString.length);\n          replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n          break\n        }\n      }\n    }\n  }\n\n  // This will be set to a {lineWise: bool, text: [string]} object, so\n  // that, when pasting, we know what kind of selections the copied\n  // text was made out of.\n  var lastCopied = null;\n\n  function setLastCopied(newLastCopied) {\n    lastCopied = newLastCopied;\n  }\n\n  function applyTextInput(cm, inserted, deleted, sel, origin) {\n    var doc = cm.doc;\n    cm.display.shift = false;\n    if (!sel) { sel = doc.sel; }\n\n    var recent = +new Date - 200;\n    var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n    var textLines = splitLinesAuto(inserted), multiPaste = null;\n    // When pasting N lines into N selections, insert one line per selection\n    if (paste && sel.ranges.length > 1) {\n      if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n        if (sel.ranges.length % lastCopied.text.length == 0) {\n          multiPaste = [];\n          for (var i = 0; i < lastCopied.text.length; i++)\n            { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n        }\n      } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n        multiPaste = map(textLines, function (l) { return [l]; });\n      }\n    }\n\n    var updateInput = cm.curOp.updateInput;\n    // Normal behavior is to insert the new text into every selection\n    for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n      var range$$1 = sel.ranges[i$1];\n      var from = range$$1.from(), to = range$$1.to();\n      if (range$$1.empty()) {\n        if (deleted && deleted > 0) // Handle deletion\n          { from = Pos(from.line, from.ch - deleted); }\n        else if (cm.state.overwrite && !paste) // Handle overwrite\n          { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n        else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == inserted)\n          { from = to = Pos(from.line, 0); }\n      }\n      var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n                         origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n      makeChange(cm.doc, changeEvent);\n      signalLater(cm, \"inputRead\", cm, changeEvent);\n    }\n    if (inserted && !paste)\n      { triggerElectric(cm, inserted); }\n\n    ensureCursorVisible(cm);\n    if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n    cm.curOp.typing = true;\n    cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n  }\n\n  function handlePaste(e, cm) {\n    var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n    if (pasted) {\n      e.preventDefault();\n      if (!cm.isReadOnly() && !cm.options.disableInput)\n        { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n      return true\n    }\n  }\n\n  function triggerElectric(cm, inserted) {\n    // When an 'electric' character is inserted, immediately trigger a reindent\n    if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n    var sel = cm.doc.sel;\n\n    for (var i = sel.ranges.length - 1; i >= 0; i--) {\n      var range$$1 = sel.ranges[i];\n      if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue }\n      var mode = cm.getModeAt(range$$1.head);\n      var indented = false;\n      if (mode.electricChars) {\n        for (var j = 0; j < mode.electricChars.length; j++)\n          { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n            indented = indentLine(cm, range$$1.head.line, \"smart\");\n            break\n          } }\n      } else if (mode.electricInput) {\n        if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch)))\n          { indented = indentLine(cm, range$$1.head.line, \"smart\"); }\n      }\n      if (indented) { signalLater(cm, \"electricInput\", cm, range$$1.head.line); }\n    }\n  }\n\n  function copyableRanges(cm) {\n    var text = [], ranges = [];\n    for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n      var line = cm.doc.sel.ranges[i].head.line;\n      var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n      ranges.push(lineRange);\n      text.push(cm.getRange(lineRange.anchor, lineRange.head));\n    }\n    return {text: text, ranges: ranges}\n  }\n\n  function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n    field.setAttribute(\"autocorrect\", !!autocorrect);\n    field.setAttribute(\"autocapitalize\", !!autocapitalize);\n    field.setAttribute(\"spellcheck\", !!spellcheck);\n  }\n\n  function hiddenTextarea() {\n    var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n    var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n    // The textarea is kept positioned near the cursor to prevent the\n    // fact that it'll be scrolled into view on input from scrolling\n    // our fake cursor out of view. On webkit, when wrap=off, paste is\n    // very slow. So make the area wide instead.\n    if (webkit) { te.style.width = \"1000px\"; }\n    else { te.setAttribute(\"wrap\", \"off\"); }\n    // If border: 0; -- iOS fails to open keyboard (issue #1287)\n    if (ios) { te.style.border = \"1px solid black\"; }\n    disableBrowserMagic(te);\n    return div\n  }\n\n  // The publicly visible API. Note that methodOp(f) means\n  // 'wrap f in an operation, performed on its `this` parameter'.\n\n  // This is not the complete set of editor methods. Most of the\n  // methods defined on the Doc type are also injected into\n  // CodeMirror.prototype, for backwards compatibility and\n  // convenience.\n\n  function addEditorMethods(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    var helpers = CodeMirror.helpers = {};\n\n    CodeMirror.prototype = {\n      constructor: CodeMirror,\n      focus: function(){window.focus(); this.display.input.focus();},\n\n      setOption: function(option, value) {\n        var options = this.options, old = options[option];\n        if (options[option] == value && option != \"mode\") { return }\n        options[option] = value;\n        if (optionHandlers.hasOwnProperty(option))\n          { operation(this, optionHandlers[option])(this, value, old); }\n        signal(this, \"optionChange\", this, option);\n      },\n\n      getOption: function(option) {return this.options[option]},\n      getDoc: function() {return this.doc},\n\n      addKeyMap: function(map$$1, bottom) {\n        this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map$$1));\n      },\n      removeKeyMap: function(map$$1) {\n        var maps = this.state.keyMaps;\n        for (var i = 0; i < maps.length; ++i)\n          { if (maps[i] == map$$1 || maps[i].name == map$$1) {\n            maps.splice(i, 1);\n            return true\n          } }\n      },\n\n      addOverlay: methodOp(function(spec, options) {\n        var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n        if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n        insertSorted(this.state.overlays,\n                     {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n                      priority: (options && options.priority) || 0},\n                     function (overlay) { return overlay.priority; });\n        this.state.modeGen++;\n        regChange(this);\n      }),\n      removeOverlay: methodOp(function(spec) {\n        var this$1 = this;\n\n        var overlays = this.state.overlays;\n        for (var i = 0; i < overlays.length; ++i) {\n          var cur = overlays[i].modeSpec;\n          if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n            overlays.splice(i, 1);\n            this$1.state.modeGen++;\n            regChange(this$1);\n            return\n          }\n        }\n      }),\n\n      indentLine: methodOp(function(n, dir, aggressive) {\n        if (typeof dir != \"string\" && typeof dir != \"number\") {\n          if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n          else { dir = dir ? \"add\" : \"subtract\"; }\n        }\n        if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n      }),\n      indentSelection: methodOp(function(how) {\n        var this$1 = this;\n\n        var ranges = this.doc.sel.ranges, end = -1;\n        for (var i = 0; i < ranges.length; i++) {\n          var range$$1 = ranges[i];\n          if (!range$$1.empty()) {\n            var from = range$$1.from(), to = range$$1.to();\n            var start = Math.max(end, from.line);\n            end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n            for (var j = start; j < end; ++j)\n              { indentLine(this$1, j, how); }\n            var newRanges = this$1.doc.sel.ranges;\n            if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n              { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n          } else if (range$$1.head.line > end) {\n            indentLine(this$1, range$$1.head.line, how, true);\n            end = range$$1.head.line;\n            if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1); }\n          }\n        }\n      }),\n\n      // Fetch the parser token for a given character. Useful for hacks\n      // that want to inspect the mode state (say, for completion).\n      getTokenAt: function(pos, precise) {\n        return takeToken(this, pos, precise)\n      },\n\n      getLineTokens: function(line, precise) {\n        return takeToken(this, Pos(line), precise, true)\n      },\n\n      getTokenTypeAt: function(pos) {\n        pos = clipPos(this.doc, pos);\n        var styles = getLineStyles(this, getLine(this.doc, pos.line));\n        var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n        var type;\n        if (ch == 0) { type = styles[2]; }\n        else { for (;;) {\n          var mid = (before + after) >> 1;\n          if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n          else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n          else { type = styles[mid * 2 + 2]; break }\n        } }\n        var cut = type ? type.indexOf(\"overlay \") : -1;\n        return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n      },\n\n      getModeAt: function(pos) {\n        var mode = this.doc.mode;\n        if (!mode.innerMode) { return mode }\n        return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n      },\n\n      getHelper: function(pos, type) {\n        return this.getHelpers(pos, type)[0]\n      },\n\n      getHelpers: function(pos, type) {\n        var this$1 = this;\n\n        var found = [];\n        if (!helpers.hasOwnProperty(type)) { return found }\n        var help = helpers[type], mode = this.getModeAt(pos);\n        if (typeof mode[type] == \"string\") {\n          if (help[mode[type]]) { found.push(help[mode[type]]); }\n        } else if (mode[type]) {\n          for (var i = 0; i < mode[type].length; i++) {\n            var val = help[mode[type][i]];\n            if (val) { found.push(val); }\n          }\n        } else if (mode.helperType && help[mode.helperType]) {\n          found.push(help[mode.helperType]);\n        } else if (help[mode.name]) {\n          found.push(help[mode.name]);\n        }\n        for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n          var cur = help._global[i$1];\n          if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1)\n            { found.push(cur.val); }\n        }\n        return found\n      },\n\n      getStateAfter: function(line, precise) {\n        var doc = this.doc;\n        line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n        return getContextBefore(this, line + 1, precise).state\n      },\n\n      cursorCoords: function(start, mode) {\n        var pos, range$$1 = this.doc.sel.primary();\n        if (start == null) { pos = range$$1.head; }\n        else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n        else { pos = start ? range$$1.from() : range$$1.to(); }\n        return cursorCoords(this, pos, mode || \"page\")\n      },\n\n      charCoords: function(pos, mode) {\n        return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n      },\n\n      coordsChar: function(coords, mode) {\n        coords = fromCoordSystem(this, coords, mode || \"page\");\n        return coordsChar(this, coords.left, coords.top)\n      },\n\n      lineAtHeight: function(height, mode) {\n        height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n        return lineAtHeight(this.doc, height + this.display.viewOffset)\n      },\n      heightAtLine: function(line, mode, includeWidgets) {\n        var end = false, lineObj;\n        if (typeof line == \"number\") {\n          var last = this.doc.first + this.doc.size - 1;\n          if (line < this.doc.first) { line = this.doc.first; }\n          else if (line > last) { line = last; end = true; }\n          lineObj = getLine(this.doc, line);\n        } else {\n          lineObj = line;\n        }\n        return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n          (end ? this.doc.height - heightAtLine(lineObj) : 0)\n      },\n\n      defaultTextHeight: function() { return textHeight(this.display) },\n      defaultCharWidth: function() { return charWidth(this.display) },\n\n      getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n      addWidget: function(pos, node, scroll, vert, horiz) {\n        var display = this.display;\n        pos = cursorCoords(this, clipPos(this.doc, pos));\n        var top = pos.bottom, left = pos.left;\n        node.style.position = \"absolute\";\n        node.setAttribute(\"cm-ignore-events\", \"true\");\n        this.display.input.setUneditable(node);\n        display.sizer.appendChild(node);\n        if (vert == \"over\") {\n          top = pos.top;\n        } else if (vert == \"above\" || vert == \"near\") {\n          var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n          hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n          // Default to positioning above (if specified and possible); otherwise default to positioning below\n          if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n            { top = pos.top - node.offsetHeight; }\n          else if (pos.bottom + node.offsetHeight <= vspace)\n            { top = pos.bottom; }\n          if (left + node.offsetWidth > hspace)\n            { left = hspace - node.offsetWidth; }\n        }\n        node.style.top = top + \"px\";\n        node.style.left = node.style.right = \"\";\n        if (horiz == \"right\") {\n          left = display.sizer.clientWidth - node.offsetWidth;\n          node.style.right = \"0px\";\n        } else {\n          if (horiz == \"left\") { left = 0; }\n          else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n          node.style.left = left + \"px\";\n        }\n        if (scroll)\n          { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n      },\n\n      triggerOnKeyDown: methodOp(onKeyDown),\n      triggerOnKeyPress: methodOp(onKeyPress),\n      triggerOnKeyUp: onKeyUp,\n      triggerOnMouseDown: methodOp(onMouseDown),\n\n      execCommand: function(cmd) {\n        if (commands.hasOwnProperty(cmd))\n          { return commands[cmd].call(null, this) }\n      },\n\n      triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n      findPosH: function(from, amount, unit, visually) {\n        var this$1 = this;\n\n        var dir = 1;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          cur = findPosH(this$1.doc, cur, dir, unit, visually);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveH: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        this.extendSelectionsBy(function (range$$1) {\n          if (this$1.display.shift || this$1.doc.extend || range$$1.empty())\n            { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) }\n          else\n            { return dir < 0 ? range$$1.from() : range$$1.to() }\n        }, sel_move);\n      }),\n\n      deleteH: methodOp(function(dir, unit) {\n        var sel = this.doc.sel, doc = this.doc;\n        if (sel.somethingSelected())\n          { doc.replaceSelection(\"\", null, \"+delete\"); }\n        else\n          { deleteNearSelection(this, function (range$$1) {\n            var other = findPosH(doc, range$$1.head, dir, unit, false);\n            return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other}\n          }); }\n      }),\n\n      findPosV: function(from, amount, unit, goalColumn) {\n        var this$1 = this;\n\n        var dir = 1, x = goalColumn;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          var coords = cursorCoords(this$1, cur, \"div\");\n          if (x == null) { x = coords.left; }\n          else { coords.left = x; }\n          cur = findPosV(this$1, coords, dir, unit);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveV: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        var doc = this.doc, goals = [];\n        var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n        doc.extendSelectionsBy(function (range$$1) {\n          if (collapse)\n            { return dir < 0 ? range$$1.from() : range$$1.to() }\n          var headPos = cursorCoords(this$1, range$$1.head, \"div\");\n          if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn; }\n          goals.push(headPos.left);\n          var pos = findPosV(this$1, headPos, dir, unit);\n          if (unit == \"page\" && range$$1 == doc.sel.primary())\n            { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n          return pos\n        }, sel_move);\n        if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n          { doc.sel.ranges[i].goalColumn = goals[i]; } }\n      }),\n\n      // Find the word at the given position (as returned by coordsChar).\n      findWordAt: function(pos) {\n        var doc = this.doc, line = getLine(doc, pos.line).text;\n        var start = pos.ch, end = pos.ch;\n        if (line) {\n          var helper = this.getHelper(pos, \"wordChars\");\n          if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n          var startChar = line.charAt(start);\n          var check = isWordChar(startChar, helper)\n            ? function (ch) { return isWordChar(ch, helper); }\n            : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n            : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n          while (start > 0 && check(line.charAt(start - 1))) { --start; }\n          while (end < line.length && check(line.charAt(end))) { ++end; }\n        }\n        return new Range(Pos(pos.line, start), Pos(pos.line, end))\n      },\n\n      toggleOverwrite: function(value) {\n        if (value != null && value == this.state.overwrite) { return }\n        if (this.state.overwrite = !this.state.overwrite)\n          { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n        else\n          { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n        signal(this, \"overwriteToggle\", this, this.state.overwrite);\n      },\n      hasFocus: function() { return this.display.input.getField() == activeElt() },\n      isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n      scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n      getScrollInfo: function() {\n        var scroller = this.display.scroller;\n        return {left: scroller.scrollLeft, top: scroller.scrollTop,\n                height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n                width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n                clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n      },\n\n      scrollIntoView: methodOp(function(range$$1, margin) {\n        if (range$$1 == null) {\n          range$$1 = {from: this.doc.sel.primary().head, to: null};\n          if (margin == null) { margin = this.options.cursorScrollMargin; }\n        } else if (typeof range$$1 == \"number\") {\n          range$$1 = {from: Pos(range$$1, 0), to: null};\n        } else if (range$$1.from == null) {\n          range$$1 = {from: range$$1, to: null};\n        }\n        if (!range$$1.to) { range$$1.to = range$$1.from; }\n        range$$1.margin = margin || 0;\n\n        if (range$$1.from.line != null) {\n          scrollToRange(this, range$$1);\n        } else {\n          scrollToCoordsRange(this, range$$1.from, range$$1.to, range$$1.margin);\n        }\n      }),\n\n      setSize: methodOp(function(width, height) {\n        var this$1 = this;\n\n        var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n        if (width != null) { this.display.wrapper.style.width = interpret(width); }\n        if (height != null) { this.display.wrapper.style.height = interpret(height); }\n        if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n        var lineNo$$1 = this.display.viewFrom;\n        this.doc.iter(lineNo$$1, this.display.viewTo, function (line) {\n          if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n            { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, \"widget\"); break } } }\n          ++lineNo$$1;\n        });\n        this.curOp.forceUpdate = true;\n        signal(this, \"refresh\", this);\n      }),\n\n      operation: function(f){return runInOp(this, f)},\n      startOperation: function(){return startOperation(this)},\n      endOperation: function(){return endOperation(this)},\n\n      refresh: methodOp(function() {\n        var oldHeight = this.display.cachedTextHeight;\n        regChange(this);\n        this.curOp.forceUpdate = true;\n        clearCaches(this);\n        scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n        updateGutterSpace(this);\n        if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)\n          { estimateLineHeights(this); }\n        signal(this, \"refresh\", this);\n      }),\n\n      swapDoc: methodOp(function(doc) {\n        var old = this.doc;\n        old.cm = null;\n        attachDoc(this, doc);\n        clearCaches(this);\n        this.display.input.reset();\n        scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n        this.curOp.forceScroll = true;\n        signalLater(this, \"swapDoc\", this, old);\n        return old\n      }),\n\n      phrase: function(phraseText) {\n        var phrases = this.options.phrases;\n        return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n      },\n\n      getInputField: function(){return this.display.input.getField()},\n      getWrapperElement: function(){return this.display.wrapper},\n      getScrollerElement: function(){return this.display.scroller},\n      getGutterElement: function(){return this.display.gutters}\n    };\n    eventMixin(CodeMirror);\n\n    CodeMirror.registerHelper = function(type, name, value) {\n      if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n      helpers[type][name] = value;\n    };\n    CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n      CodeMirror.registerHelper(type, name, value);\n      helpers[type]._global.push({pred: predicate, val: value});\n    };\n  }\n\n  // Used for horizontal relative motion. Dir is -1 or 1 (left or\n  // right), unit can be \"char\", \"column\" (like char, but doesn't\n  // cross line boundaries), \"word\" (across next word), or \"group\" (to\n  // the start of next group of word or non-word-non-whitespace\n  // chars). The visually param controls whether, in right-to-left\n  // text, direction 1 means to move towards the next index in the\n  // string, or towards the character to the right of the current\n  // position. The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\n  function findPosH(doc, pos, dir, unit, visually) {\n    var oldPos = pos;\n    var origDir = dir;\n    var lineObj = getLine(doc, pos.line);\n    function findNextLine() {\n      var l = pos.line + dir;\n      if (l < doc.first || l >= doc.first + doc.size) { return false }\n      pos = new Pos(l, pos.ch, pos.sticky);\n      return lineObj = getLine(doc, l)\n    }\n    function moveOnce(boundToLine) {\n      var next;\n      if (visually) {\n        next = moveVisually(doc.cm, lineObj, pos, dir);\n      } else {\n        next = moveLogically(lineObj, pos, dir);\n      }\n      if (next == null) {\n        if (!boundToLine && findNextLine())\n          { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir); }\n        else\n          { return false }\n      } else {\n        pos = next;\n      }\n      return true\n    }\n\n    if (unit == \"char\") {\n      moveOnce();\n    } else if (unit == \"column\") {\n      moveOnce(true);\n    } else if (unit == \"word\" || unit == \"group\") {\n      var sawType = null, group = unit == \"group\";\n      var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n      for (var first = true;; first = false) {\n        if (dir < 0 && !moveOnce(!first)) { break }\n        var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n        var type = isWordChar(cur, helper) ? \"w\"\n          : group && cur == \"\\n\" ? \"n\"\n          : !group || /\\s/.test(cur) ? null\n          : \"p\";\n        if (group && !first && !type) { type = \"s\"; }\n        if (sawType && sawType != type) {\n          if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n          break\n        }\n\n        if (type) { sawType = type; }\n        if (dir > 0 && !moveOnce(!first)) { break }\n      }\n    }\n    var result = skipAtomic(doc, pos, oldPos, origDir, true);\n    if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n    return result\n  }\n\n  // For relative vertical movement. Dir may be -1 or 1. Unit can be\n  // \"page\" or \"line\". The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\n  function findPosV(cm, pos, dir, unit) {\n    var doc = cm.doc, x = pos.left, y;\n    if (unit == \"page\") {\n      var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n      var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n      y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n    } else if (unit == \"line\") {\n      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n    }\n    var target;\n    for (;;) {\n      target = coordsChar(cm, x, y);\n      if (!target.outside) { break }\n      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n      y += dir * 5;\n    }\n    return target\n  }\n\n  // CONTENTEDITABLE INPUT STYLE\n\n  var ContentEditableInput = function(cm) {\n    this.cm = cm;\n    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n    this.polling = new Delayed();\n    this.composing = null;\n    this.gracePeriod = false;\n    this.readDOMTimeout = null;\n  };\n\n  ContentEditableInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = input.cm;\n    var div = input.div = display.lineDiv;\n    disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n    on(div, \"paste\", function (e) {\n      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n      // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n      if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n    });\n\n    on(div, \"compositionstart\", function (e) {\n      this$1.composing = {data: e.data, done: false};\n    });\n    on(div, \"compositionupdate\", function (e) {\n      if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n    });\n    on(div, \"compositionend\", function (e) {\n      if (this$1.composing) {\n        if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n        this$1.composing.done = true;\n      }\n    });\n\n    on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n    on(div, \"input\", function () {\n      if (!this$1.composing) { this$1.readFromDOMSoon(); }\n    });\n\n    function onCopyCut(e) {\n      if (signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n        if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.operation(function () {\n            cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n            cm.replaceSelection(\"\", null, \"cut\");\n          });\n        }\n      }\n      if (e.clipboardData) {\n        e.clipboardData.clearData();\n        var content = lastCopied.text.join(\"\\n\");\n        // iOS exposes the clipboard API, but seems to discard content inserted into it\n        e.clipboardData.setData(\"Text\", content);\n        if (e.clipboardData.getData(\"Text\") == content) {\n          e.preventDefault();\n          return\n        }\n      }\n      // Old-fashioned briefly-focus-a-textarea hack\n      var kludge = hiddenTextarea(), te = kludge.firstChild;\n      cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n      te.value = lastCopied.text.join(\"\\n\");\n      var hadFocus = document.activeElement;\n      selectInput(te);\n      setTimeout(function () {\n        cm.display.lineSpace.removeChild(kludge);\n        hadFocus.focus();\n        if (hadFocus == div) { input.showPrimarySelection(); }\n      }, 50);\n    }\n    on(div, \"copy\", onCopyCut);\n    on(div, \"cut\", onCopyCut);\n  };\n\n  ContentEditableInput.prototype.prepareSelection = function () {\n    var result = prepareSelection(this.cm, false);\n    result.focus = this.cm.state.focused;\n    return result\n  };\n\n  ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n    if (!info || !this.cm.display.view.length) { return }\n    if (info.focus || takeFocus) { this.showPrimarySelection(); }\n    this.showMultipleSelections(info);\n  };\n\n  ContentEditableInput.prototype.getSelection = function () {\n    return this.cm.display.wrapper.ownerDocument.getSelection()\n  };\n\n  ContentEditableInput.prototype.showPrimarySelection = function () {\n    var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n    var from = prim.from(), to = prim.to();\n\n    if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n        cmp(minPos(curAnchor, curFocus), from) == 0 &&\n        cmp(maxPos(curAnchor, curFocus), to) == 0)\n      { return }\n\n    var view = cm.display.view;\n    var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n        {node: view[0].measure.map[2], offset: 0};\n    var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n    if (!end) {\n      var measure = view[view.length - 1].measure;\n      var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n      end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]};\n    }\n\n    if (!start || !end) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var old = sel.rangeCount && sel.getRangeAt(0), rng;\n    try { rng = range(start.node, start.offset, end.offset, end.node); }\n    catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n    if (rng) {\n      if (!gecko && cm.state.focused) {\n        sel.collapse(start.node, start.offset);\n        if (!rng.collapsed) {\n          sel.removeAllRanges();\n          sel.addRange(rng);\n        }\n      } else {\n        sel.removeAllRanges();\n        sel.addRange(rng);\n      }\n      if (old && sel.anchorNode == null) { sel.addRange(old); }\n      else if (gecko) { this.startGracePeriod(); }\n    }\n    this.rememberSelection();\n  };\n\n  ContentEditableInput.prototype.startGracePeriod = function () {\n      var this$1 = this;\n\n    clearTimeout(this.gracePeriod);\n    this.gracePeriod = setTimeout(function () {\n      this$1.gracePeriod = false;\n      if (this$1.selectionChanged())\n        { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n    }, 20);\n  };\n\n  ContentEditableInput.prototype.showMultipleSelections = function (info) {\n    removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n    removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n  };\n\n  ContentEditableInput.prototype.rememberSelection = function () {\n    var sel = this.getSelection();\n    this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n    this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n  };\n\n  ContentEditableInput.prototype.selectionInEditor = function () {\n    var sel = this.getSelection();\n    if (!sel.rangeCount) { return false }\n    var node = sel.getRangeAt(0).commonAncestorContainer;\n    return contains(this.div, node)\n  };\n\n  ContentEditableInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\") {\n      if (!this.selectionInEditor())\n        { this.showSelection(this.prepareSelection(), true); }\n      this.div.focus();\n    }\n  };\n  ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n  ContentEditableInput.prototype.getField = function () { return this.div };\n\n  ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n  ContentEditableInput.prototype.receivedFocus = function () {\n    var input = this;\n    if (this.selectionInEditor())\n      { this.pollSelection(); }\n    else\n      { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n    function poll() {\n      if (input.cm.state.focused) {\n        input.pollSelection();\n        input.polling.set(input.cm.options.pollInterval, poll);\n      }\n    }\n    this.polling.set(this.cm.options.pollInterval, poll);\n  };\n\n  ContentEditableInput.prototype.selectionChanged = function () {\n    var sel = this.getSelection();\n    return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n      sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n  };\n\n  ContentEditableInput.prototype.pollSelection = function () {\n    if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n    var sel = this.getSelection(), cm = this.cm;\n    // On Android Chrome (version 56, at least), backspacing into an\n    // uneditable block element will put the cursor in that element,\n    // and then, because it's not editable, hide the virtual keyboard.\n    // Because Android doesn't allow us to actually detect backspace\n    // presses in a sane way, this code checks for when that happens\n    // and simulates a backspace press in this case.\n    if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) {\n      this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n      this.blur();\n      this.focus();\n      return\n    }\n    if (this.composing) { return }\n    this.rememberSelection();\n    var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (anchor && head) { runInOp(cm, function () {\n      setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n      if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n    }); }\n  };\n\n  ContentEditableInput.prototype.pollContent = function () {\n    if (this.readDOMTimeout != null) {\n      clearTimeout(this.readDOMTimeout);\n      this.readDOMTimeout = null;\n    }\n\n    var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n    var from = sel.from(), to = sel.to();\n    if (from.ch == 0 && from.line > cm.firstLine())\n      { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n    if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n      { to = Pos(to.line + 1, 0); }\n    if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n    var fromIndex, fromLine, fromNode;\n    if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n      fromLine = lineNo(display.view[0].line);\n      fromNode = display.view[0].node;\n    } else {\n      fromLine = lineNo(display.view[fromIndex].line);\n      fromNode = display.view[fromIndex - 1].node.nextSibling;\n    }\n    var toIndex = findViewIndex(cm, to.line);\n    var toLine, toNode;\n    if (toIndex == display.view.length - 1) {\n      toLine = display.viewTo - 1;\n      toNode = display.lineDiv.lastChild;\n    } else {\n      toLine = lineNo(display.view[toIndex + 1].line) - 1;\n      toNode = display.view[toIndex + 1].node.previousSibling;\n    }\n\n    if (!fromNode) { return false }\n    var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n    var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n    while (newText.length > 1 && oldText.length > 1) {\n      if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n      else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n      else { break }\n    }\n\n    var cutFront = 0, cutEnd = 0;\n    var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n    while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n      { ++cutFront; }\n    var newBot = lst(newText), oldBot = lst(oldText);\n    var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n                             oldBot.length - (oldText.length == 1 ? cutFront : 0));\n    while (cutEnd < maxCutEnd &&\n           newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n      { ++cutEnd; }\n    // Try to move start of change to start of selection if ambiguous\n    if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n      while (cutFront && cutFront > from.ch &&\n             newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n        cutFront--;\n        cutEnd++;\n      }\n    }\n\n    newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n    newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n    var chFrom = Pos(fromLine, cutFront);\n    var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n    if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n      replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n      return true\n    }\n  };\n\n  ContentEditableInput.prototype.ensurePolled = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.reset = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.forceCompositionEnd = function () {\n    if (!this.composing) { return }\n    clearTimeout(this.readDOMTimeout);\n    this.composing = null;\n    this.updateFromDOM();\n    this.div.blur();\n    this.div.focus();\n  };\n  ContentEditableInput.prototype.readFromDOMSoon = function () {\n      var this$1 = this;\n\n    if (this.readDOMTimeout != null) { return }\n    this.readDOMTimeout = setTimeout(function () {\n      this$1.readDOMTimeout = null;\n      if (this$1.composing) {\n        if (this$1.composing.done) { this$1.composing = null; }\n        else { return }\n      }\n      this$1.updateFromDOM();\n    }, 80);\n  };\n\n  ContentEditableInput.prototype.updateFromDOM = function () {\n      var this$1 = this;\n\n    if (this.cm.isReadOnly() || !this.pollContent())\n      { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n  };\n\n  ContentEditableInput.prototype.setUneditable = function (node) {\n    node.contentEditable = \"false\";\n  };\n\n  ContentEditableInput.prototype.onKeyPress = function (e) {\n    if (e.charCode == 0 || this.composing) { return }\n    e.preventDefault();\n    if (!this.cm.isReadOnly())\n      { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n  };\n\n  ContentEditableInput.prototype.readOnlyChanged = function (val) {\n    this.div.contentEditable = String(val != \"nocursor\");\n  };\n\n  ContentEditableInput.prototype.onContextMenu = function () {};\n  ContentEditableInput.prototype.resetPosition = function () {};\n\n  ContentEditableInput.prototype.needsContentAttribute = true;\n\n  function posToDOM(cm, pos) {\n    var view = findViewForLine(cm, pos.line);\n    if (!view || view.hidden) { return null }\n    var line = getLine(cm.doc, pos.line);\n    var info = mapFromLineView(view, line, pos.line);\n\n    var order = getOrder(line, cm.doc.direction), side = \"left\";\n    if (order) {\n      var partPos = getBidiPartAt(order, pos.ch);\n      side = partPos % 2 ? \"right\" : \"left\";\n    }\n    var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n    result.offset = result.collapse == \"right\" ? result.end : result.start;\n    return result\n  }\n\n  function isInGutter(node) {\n    for (var scan = node; scan; scan = scan.parentNode)\n      { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n    return false\n  }\n\n  function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n  function domTextBetween(cm, from, to, fromLine, toLine) {\n    var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n    function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n    function close() {\n      if (closing) {\n        text += lineSep;\n        if (extraLinebreak) { text += lineSep; }\n        closing = extraLinebreak = false;\n      }\n    }\n    function addText(str) {\n      if (str) {\n        close();\n        text += str;\n      }\n    }\n    function walk(node) {\n      if (node.nodeType == 1) {\n        var cmText = node.getAttribute(\"cm-text\");\n        if (cmText) {\n          addText(cmText);\n          return\n        }\n        var markerID = node.getAttribute(\"cm-marker\"), range$$1;\n        if (markerID) {\n          var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n          if (found.length && (range$$1 = found[0].find(0)))\n            { addText(getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep)); }\n          return\n        }\n        if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n        var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n        if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n        if (isBlock) { close(); }\n        for (var i = 0; i < node.childNodes.length; i++)\n          { walk(node.childNodes[i]); }\n\n        if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n        if (isBlock) { closing = true; }\n      } else if (node.nodeType == 3) {\n        addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n      }\n    }\n    for (;;) {\n      walk(from);\n      if (from == to) { break }\n      from = from.nextSibling;\n      extraLinebreak = false;\n    }\n    return text\n  }\n\n  function domToPos(cm, node, offset) {\n    var lineNode;\n    if (node == cm.display.lineDiv) {\n      lineNode = cm.display.lineDiv.childNodes[offset];\n      if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n      node = null; offset = 0;\n    } else {\n      for (lineNode = node;; lineNode = lineNode.parentNode) {\n        if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n        if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n      }\n    }\n    for (var i = 0; i < cm.display.view.length; i++) {\n      var lineView = cm.display.view[i];\n      if (lineView.node == lineNode)\n        { return locateNodeInLineView(lineView, node, offset) }\n    }\n  }\n\n  function locateNodeInLineView(lineView, node, offset) {\n    var wrapper = lineView.text.firstChild, bad = false;\n    if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n    if (node == wrapper) {\n      bad = true;\n      node = wrapper.childNodes[offset];\n      offset = 0;\n      if (!node) {\n        var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n        return badPos(Pos(lineNo(line), line.text.length), bad)\n      }\n    }\n\n    var textNode = node.nodeType == 3 ? node : null, topNode = node;\n    if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n      textNode = node.firstChild;\n      if (offset) { offset = textNode.nodeValue.length; }\n    }\n    while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n    var measure = lineView.measure, maps = measure.maps;\n\n    function find(textNode, topNode, offset) {\n      for (var i = -1; i < (maps ? maps.length : 0); i++) {\n        var map$$1 = i < 0 ? measure.map : maps[i];\n        for (var j = 0; j < map$$1.length; j += 3) {\n          var curNode = map$$1[j + 2];\n          if (curNode == textNode || curNode == topNode) {\n            var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n            var ch = map$$1[j] + offset;\n            if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)]; }\n            return Pos(line, ch)\n          }\n        }\n      }\n    }\n    var found = find(textNode, topNode, offset);\n    if (found) { return badPos(found, bad) }\n\n    // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n    for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n      found = find(after, after.firstChild, 0);\n      if (found)\n        { return badPos(Pos(found.line, found.ch - dist), bad) }\n      else\n        { dist += after.textContent.length; }\n    }\n    for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n      found = find(before, before.firstChild, -1);\n      if (found)\n        { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n      else\n        { dist$1 += before.textContent.length; }\n    }\n  }\n\n  // TEXTAREA INPUT STYLE\n\n  var TextareaInput = function(cm) {\n    this.cm = cm;\n    // See input.poll and input.reset\n    this.prevInput = \"\";\n\n    // Flag that indicates whether we expect input to appear real soon\n    // now (after some event like 'keypress' or 'input') and are\n    // polling intensively.\n    this.pollingFast = false;\n    // Self-resetting timeout for the poller\n    this.polling = new Delayed();\n    // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n    this.hasSelection = false;\n    this.composing = null;\n  };\n\n  TextareaInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = this.cm;\n    this.createField(display);\n    var te = this.textarea;\n\n    display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n    // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n    if (ios) { te.style.width = \"0px\"; }\n\n    on(te, \"input\", function () {\n      if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n      input.poll();\n    });\n\n    on(te, \"paste\", function (e) {\n      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n      cm.state.pasteIncoming = +new Date;\n      input.fastPoll();\n    });\n\n    function prepareCopyCut(e) {\n      if (signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.setSelections(ranges.ranges, null, sel_dontScroll);\n        } else {\n          input.prevInput = \"\";\n          te.value = ranges.text.join(\"\\n\");\n          selectInput(te);\n        }\n      }\n      if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n    }\n    on(te, \"cut\", prepareCopyCut);\n    on(te, \"copy\", prepareCopyCut);\n\n    on(display.scroller, \"paste\", function (e) {\n      if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n      if (!te.dispatchEvent) {\n        cm.state.pasteIncoming = +new Date;\n        input.focus();\n        return\n      }\n\n      // Pass the `paste` event to the textarea so it's handled by its event listener.\n      var event = new Event(\"paste\");\n      event.clipboardData = e.clipboardData;\n      te.dispatchEvent(event);\n    });\n\n    // Prevent normal selection in the editor (we handle our own)\n    on(display.lineSpace, \"selectstart\", function (e) {\n      if (!eventInWidget(display, e)) { e_preventDefault(e); }\n    });\n\n    on(te, \"compositionstart\", function () {\n      var start = cm.getCursor(\"from\");\n      if (input.composing) { input.composing.range.clear(); }\n      input.composing = {\n        start: start,\n        range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n      };\n    });\n    on(te, \"compositionend\", function () {\n      if (input.composing) {\n        input.poll();\n        input.composing.range.clear();\n        input.composing = null;\n      }\n    });\n  };\n\n  TextareaInput.prototype.createField = function (_display) {\n    // Wraps and hides input textarea\n    this.wrapper = hiddenTextarea();\n    // The semihidden textarea that is focused when the editor is\n    // focused, and receives input.\n    this.textarea = this.wrapper.firstChild;\n  };\n\n  TextareaInput.prototype.prepareSelection = function () {\n    // Redraw the selection and/or cursor\n    var cm = this.cm, display = cm.display, doc = cm.doc;\n    var result = prepareSelection(cm);\n\n    // Move the hidden textarea near the cursor to prevent scrolling artifacts\n    if (cm.options.moveInputWithCursor) {\n      var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n      var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n      result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n                                          headPos.top + lineOff.top - wrapOff.top));\n      result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n                                           headPos.left + lineOff.left - wrapOff.left));\n    }\n\n    return result\n  };\n\n  TextareaInput.prototype.showSelection = function (drawn) {\n    var cm = this.cm, display = cm.display;\n    removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n    removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n    if (drawn.teTop != null) {\n      this.wrapper.style.top = drawn.teTop + \"px\";\n      this.wrapper.style.left = drawn.teLeft + \"px\";\n    }\n  };\n\n  // Reset the input to correspond to the selection (or to be empty,\n  // when not typing and nothing is selected)\n  TextareaInput.prototype.reset = function (typing) {\n    if (this.contextMenuPending || this.composing) { return }\n    var cm = this.cm;\n    if (cm.somethingSelected()) {\n      this.prevInput = \"\";\n      var content = cm.getSelection();\n      this.textarea.value = content;\n      if (cm.state.focused) { selectInput(this.textarea); }\n      if (ie && ie_version >= 9) { this.hasSelection = content; }\n    } else if (!typing) {\n      this.prevInput = this.textarea.value = \"\";\n      if (ie && ie_version >= 9) { this.hasSelection = null; }\n    }\n  };\n\n  TextareaInput.prototype.getField = function () { return this.textarea };\n\n  TextareaInput.prototype.supportsTouch = function () { return false };\n\n  TextareaInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n      try { this.textarea.focus(); }\n      catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n    }\n  };\n\n  TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n  TextareaInput.prototype.resetPosition = function () {\n    this.wrapper.style.top = this.wrapper.style.left = 0;\n  };\n\n  TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n  // Poll for input changes, using the normal rate of polling. This\n  // runs as long as the editor is focused.\n  TextareaInput.prototype.slowPoll = function () {\n      var this$1 = this;\n\n    if (this.pollingFast) { return }\n    this.polling.set(this.cm.options.pollInterval, function () {\n      this$1.poll();\n      if (this$1.cm.state.focused) { this$1.slowPoll(); }\n    });\n  };\n\n  // When an event has just come in that is likely to add or change\n  // something in the input textarea, we poll faster, to ensure that\n  // the change appears on the screen quickly.\n  TextareaInput.prototype.fastPoll = function () {\n    var missed = false, input = this;\n    input.pollingFast = true;\n    function p() {\n      var changed = input.poll();\n      if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n      else {input.pollingFast = false; input.slowPoll();}\n    }\n    input.polling.set(20, p);\n  };\n\n  // Read input from the textarea, and update the document to match.\n  // When something is selected, it is present in the textarea, and\n  // selected (unless it is huge, in which case a placeholder is\n  // used). When nothing is selected, the cursor sits after previously\n  // seen text (can be empty), which is stored in prevInput (we must\n  // not reset the textarea when typing, because that breaks IME).\n  TextareaInput.prototype.poll = function () {\n      var this$1 = this;\n\n    var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n    // Since this is called a *lot*, try to bail out as cheaply as\n    // possible when it is clear that nothing happened. hasSelection\n    // will be the case when there is a lot of text in the textarea,\n    // in which case reading its value would be expensive.\n    if (this.contextMenuPending || !cm.state.focused ||\n        (hasSelection(input) && !prevInput && !this.composing) ||\n        cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n      { return false }\n\n    var text = input.value;\n    // If nothing changed, bail.\n    if (text == prevInput && !cm.somethingSelected()) { return false }\n    // Work around nonsensical selection resetting in IE9/10, and\n    // inexplicable appearance of private area unicode characters on\n    // some key combos in Mac (#2689).\n    if (ie && ie_version >= 9 && this.hasSelection === text ||\n        mac && /[\\uf700-\\uf7ff]/.test(text)) {\n      cm.display.input.reset();\n      return false\n    }\n\n    if (cm.doc.sel == cm.display.selForContextMenu) {\n      var first = text.charCodeAt(0);\n      if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n      if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n    }\n    // Find the part of the input that is actually new\n    var same = 0, l = Math.min(prevInput.length, text.length);\n    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n    runInOp(cm, function () {\n      applyTextInput(cm, text.slice(same), prevInput.length - same,\n                     null, this$1.composing ? \"*compose\" : null);\n\n      // Don't leave long text in the textarea, since it makes further polling slow\n      if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n      else { this$1.prevInput = text; }\n\n      if (this$1.composing) {\n        this$1.composing.range.clear();\n        this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n                                           {className: \"CodeMirror-composing\"});\n      }\n    });\n    return true\n  };\n\n  TextareaInput.prototype.ensurePolled = function () {\n    if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n  };\n\n  TextareaInput.prototype.onKeyPress = function () {\n    if (ie && ie_version >= 9) { this.hasSelection = null; }\n    this.fastPoll();\n  };\n\n  TextareaInput.prototype.onContextMenu = function (e) {\n    var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n    if (input.contextMenuPending) { input.contextMenuPending(); }\n    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n    if (!pos || presto) { return } // Opera is difficult.\n\n    // Reset the current text selection only if the click is done outside of the selection\n    // and 'resetSelectionOnContextMenu' option is true.\n    var reset = cm.options.resetSelectionOnContextMenu;\n    if (reset && cm.doc.sel.contains(pos) == -1)\n      { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n    var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n    var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n    input.wrapper.style.cssText = \"position: static\";\n    te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n      top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n      z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n    var oldScrollY;\n    if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)\n    display.input.focus();\n    if (webkit) { window.scrollTo(null, oldScrollY); }\n    display.input.reset();\n    // Adds \"Select all\" to context menu in FF\n    if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n    input.contextMenuPending = rehide;\n    display.selForContextMenu = cm.doc.sel;\n    clearTimeout(display.detectingSelectAll);\n\n    // Select-all will be greyed out if there's nothing to select, so\n    // this adds a zero-width space so that we can later check whether\n    // it got selected.\n    function prepareSelectAllHack() {\n      if (te.selectionStart != null) {\n        var selected = cm.somethingSelected();\n        var extval = \"\\u200b\" + (selected ? te.value : \"\");\n        te.value = \"\\u21da\"; // Used to catch context-menu undo\n        te.value = extval;\n        input.prevInput = selected ? \"\" : \"\\u200b\";\n        te.selectionStart = 1; te.selectionEnd = extval.length;\n        // Re-set this, in case some other handler touched the\n        // selection in the meantime.\n        display.selForContextMenu = cm.doc.sel;\n      }\n    }\n    function rehide() {\n      if (input.contextMenuPending != rehide) { return }\n      input.contextMenuPending = false;\n      input.wrapper.style.cssText = oldWrapperCSS;\n      te.style.cssText = oldCSS;\n      if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n      // Try to detect the user choosing select-all\n      if (te.selectionStart != null) {\n        if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n        var i = 0, poll = function () {\n          if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n              te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n            operation(cm, selectAll)(cm);\n          } else if (i++ < 10) {\n            display.detectingSelectAll = setTimeout(poll, 500);\n          } else {\n            display.selForContextMenu = null;\n            display.input.reset();\n          }\n        };\n        display.detectingSelectAll = setTimeout(poll, 200);\n      }\n    }\n\n    if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n    if (captureRightClick) {\n      e_stop(e);\n      var mouseup = function () {\n        off(window, \"mouseup\", mouseup);\n        setTimeout(rehide, 20);\n      };\n      on(window, \"mouseup\", mouseup);\n    } else {\n      setTimeout(rehide, 50);\n    }\n  };\n\n  TextareaInput.prototype.readOnlyChanged = function (val) {\n    if (!val) { this.reset(); }\n    this.textarea.disabled = val == \"nocursor\";\n  };\n\n  TextareaInput.prototype.setUneditable = function () {};\n\n  TextareaInput.prototype.needsContentAttribute = false;\n\n  function fromTextArea(textarea, options) {\n    options = options ? copyObj(options) : {};\n    options.value = textarea.value;\n    if (!options.tabindex && textarea.tabIndex)\n      { options.tabindex = textarea.tabIndex; }\n    if (!options.placeholder && textarea.placeholder)\n      { options.placeholder = textarea.placeholder; }\n    // Set autofocus to true if this textarea is focused, or if it has\n    // autofocus and no other element is focused.\n    if (options.autofocus == null) {\n      var hasFocus = activeElt();\n      options.autofocus = hasFocus == textarea ||\n        textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n    }\n\n    function save() {textarea.value = cm.getValue();}\n\n    var realSubmit;\n    if (textarea.form) {\n      on(textarea.form, \"submit\", save);\n      // Deplorable hack to make the submit method do the right thing.\n      if (!options.leaveSubmitMethodAlone) {\n        var form = textarea.form;\n        realSubmit = form.submit;\n        try {\n          var wrappedSubmit = form.submit = function () {\n            save();\n            form.submit = realSubmit;\n            form.submit();\n            form.submit = wrappedSubmit;\n          };\n        } catch(e) {}\n      }\n    }\n\n    options.finishInit = function (cm) {\n      cm.save = save;\n      cm.getTextArea = function () { return textarea; };\n      cm.toTextArea = function () {\n        cm.toTextArea = isNaN; // Prevent this from being ran twice\n        save();\n        textarea.parentNode.removeChild(cm.getWrapperElement());\n        textarea.style.display = \"\";\n        if (textarea.form) {\n          off(textarea.form, \"submit\", save);\n          if (typeof textarea.form.submit == \"function\")\n            { textarea.form.submit = realSubmit; }\n        }\n      };\n    };\n\n    textarea.style.display = \"none\";\n    var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n      options);\n    return cm\n  }\n\n  function addLegacyProps(CodeMirror) {\n    CodeMirror.off = off;\n    CodeMirror.on = on;\n    CodeMirror.wheelEventPixels = wheelEventPixels;\n    CodeMirror.Doc = Doc;\n    CodeMirror.splitLines = splitLinesAuto;\n    CodeMirror.countColumn = countColumn;\n    CodeMirror.findColumn = findColumn;\n    CodeMirror.isWordChar = isWordCharBasic;\n    CodeMirror.Pass = Pass;\n    CodeMirror.signal = signal;\n    CodeMirror.Line = Line;\n    CodeMirror.changeEnd = changeEnd;\n    CodeMirror.scrollbarModel = scrollbarModel;\n    CodeMirror.Pos = Pos;\n    CodeMirror.cmpPos = cmp;\n    CodeMirror.modes = modes;\n    CodeMirror.mimeModes = mimeModes;\n    CodeMirror.resolveMode = resolveMode;\n    CodeMirror.getMode = getMode;\n    CodeMirror.modeExtensions = modeExtensions;\n    CodeMirror.extendMode = extendMode;\n    CodeMirror.copyState = copyState;\n    CodeMirror.startState = startState;\n    CodeMirror.innerMode = innerMode;\n    CodeMirror.commands = commands;\n    CodeMirror.keyMap = keyMap;\n    CodeMirror.keyName = keyName;\n    CodeMirror.isModifierKey = isModifierKey;\n    CodeMirror.lookupKey = lookupKey;\n    CodeMirror.normalizeKeyMap = normalizeKeyMap;\n    CodeMirror.StringStream = StringStream;\n    CodeMirror.SharedTextMarker = SharedTextMarker;\n    CodeMirror.TextMarker = TextMarker;\n    CodeMirror.LineWidget = LineWidget;\n    CodeMirror.e_preventDefault = e_preventDefault;\n    CodeMirror.e_stopPropagation = e_stopPropagation;\n    CodeMirror.e_stop = e_stop;\n    CodeMirror.addClass = addClass;\n    CodeMirror.contains = contains;\n    CodeMirror.rmClass = rmClass;\n    CodeMirror.keyNames = keyNames;\n  }\n\n  // EDITOR CONSTRUCTOR\n\n  defineOptions(CodeMirror);\n\n  addEditorMethods(CodeMirror);\n\n  // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n  var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n  for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n    { CodeMirror.prototype[prop] = (function(method) {\n      return function() {return method.apply(this.doc, arguments)}\n    })(Doc.prototype[prop]); } }\n\n  eventMixin(Doc);\n  CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  CodeMirror.defineMode = function(name/*, mode, …*/) {\n    if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n    defineMode.apply(this, arguments);\n  };\n\n  CodeMirror.defineMIME = defineMIME;\n\n  // Minimal default mode.\n  CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n  CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n  // EXTENSIONS\n\n  CodeMirror.defineExtension = function (name, func) {\n    CodeMirror.prototype[name] = func;\n  };\n  CodeMirror.defineDocExtension = function (name, func) {\n    Doc.prototype[name] = func;\n  };\n\n  CodeMirror.fromTextArea = fromTextArea;\n\n  addLegacyProps(CodeMirror);\n\n  CodeMirror.version = \"5.44.0\";\n\n  return CodeMirror;\n\n})));\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2017, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Provide the chat window.  The communication is handled by chat.js\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('chatroom',[ \"jquery\", \"form\", \"cm/lib/codemirror\", \"utils\", \"config\",\n\t \"modal\", \"links\", \"chat\",\n\t \"laconic\"\n       ],\n       function($, form, CodeMirror, utils, config, modal, links, chat) {\n\n(function($) {\n  var pluginName = 'chatroom';\n  var lasthangoutwarning = 0;\n\n  /** @lends $.fn.chatroom */\n  var methods = {\n    /**\n     * {Object} [options]\n     * {String} [options.docid] Document identifier\n     */\n\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = { messages: [] };\t\t/* private data */\n\tvar btn, send;\n\tvar close;\n\tvar text;\n\tvar hangout = \"gitty:\"+config.swish.hangout;\n\n\tdata.docid = options.docid;\n\telem.data(pluginName, data);\t/* store with element */\n\n\telem.addClass(\"chatroom each-minute swish-event-receiver\");\n\n\t\t\t\t\t/* build DOM */\n\n\tbtn  = $.el.div({class:\"btn-group dropup\"},\n\t\t send = $.el.button({ type:\"button\",\n\t\t\t\t      class:\"btn btn-primary btn-xs\"\n\t\t\t\t    }, \"Send\"),\n\t\t\t$.el.button({ type:\"button\",\n\t\t\t\t      class:\"btn btn-info btn-xs \"+\n\t\t\t\t            \"dropdown-toggle\",\n\t\t\t\t      'data-toggle':\"dropdown\",\n\t\t\t\t      'aria-haspopup':true,\n\t\t\t\t      'aria-expanded':false\n\t\t\t\t    },\n\t\t\t\t    $.el.span({class:\"caret\"})),\n\t\t   ul = $.el.ul({class:\"dropdown-menu pull-right\"}));\n\ttext = $.el.textarea({ placeholder:\"Type chat message here ...\"\n\t\t\t     }),\n\n\telem.append($.el.div(\n\t\t      {class:\"chat-conversation\"},\n\t\t      $.el.div({class:\"chat-outer-wrapper\"},\n\t\t\t $.el.div({class:\"chat-inner-wrapper\"},\n\t\t\t   $.el.div({class:\"chat-content-wrapper\"},\n\t\t\t      $.el.div({class:\"chat-stretch\"}),\n\t\t\t      $.el.div({class:\"chat-content\"}))))),\n\t    close = $.el.span({class:\"glyphicon menu glyphicon-remove-circle\"}),\n\t\t    $.el.div({class:\"chat-input\"},\n\t\t\t     $.el.table({class:\"chat-input\"},\n\t\t\t\t\t$.el.tr($.el.td({class:\"chat-text\"}, text),\n\t\t\t\t\t\t$.el.td({class:\"chat-send\"}, btn)))));\n\n\t$(send).on(\"click\", function() {\n\t  elem.chatroom('send');\n\t});\n\n\t\t\t\t\t/* event handling */\n\tform.widgets.populateMenu($(btn), elem, {\n\t  \"Include my query\": function() {\n\t    var query = $(\".prolog-query-editor\").queryEditor('getQuery');\n\t    if ( query.trim() != \"\" ) {\n\t      this.chatroom('send',\n\t\t\t    {payload: [{type:\"query\", query:query}]});\n\t    } else {\n\t      modal.alert(\"Your query editor is empty\");\n\t    }\n\t  }\n\t});\n\tif ( options.docid != hangout ) {\n\t  form.widgets.populateMenu($(btn), elem, {\n\t    \"Broadcast to hangout\": function() {\n\t      this.chatroom('send',\n\t\t\t    { broadcast: \"gitty:\"+config.swish.hangout\n\t\t\t    });\n\t    }\n\t  });\n\t}\n\t$(close).on(\"click\", function() {\n\t  elem.tile('close');\n\t});\n\tif ( options.oneline ) {\n\t  $(text).keypress(function(ev) {\n\t    if ( ev.which == 13 ) {\n\t      elem.chatroom('send');\n\t      ev.preventDefault();\n\t      return false;\n\t    }\n\t  });\n\t} else {\n\t  $(text).on('keyup', function() {\n\t    var that = $(this);\n\t    var h;\n\n\t    if ( that.scrollTop() != 0 && (h=that.height()) < 500 ) {\n\t      h += parseFloat(that.css('line-height'));\n\n\t      that.animate({ height: h }, 200,\n\t\t\t   function() { elem.chatroom('scrollToBottom'); });\n\t    }\n\t  });\n\t}\n\tif ( options.docid == hangout ) {\n\t  $(text).focus(function() {\n\t    if ( $(text).val() == \"\" ) {\n\t      var now = new Date().getTime();\n\n\t      if ( now-lasthangoutwarning > 300000 ) {\n\t\tlasthangoutwarning = now;\n\n\t\tmodal.help({file:\"hangout.html\", notagain:\"hangout\"});\n\t      }\n\t    }\n\t  });\n\t}\n\telem.on(\"click\", \".chat-message button\", function(ev) {\n\t  var button = $(ev.target).closest(\"button\");\n\t  var val;\n\n\t  if ( (val = button.data(\"commit\")) ) {\n\t    elem.closest(\".swish\").swish('playFile', val);\n\t  } else if ( (val = button.data(\"diff\")) ) {\n\t    elem.chatroom('diff', val);\n\t  }\n\n\t  ev.preventDefault();\n\t  return false;\n\t});\n\telem.on(\"click\", \".chat-content a\", links.followLink);\n\telem.on(\"pane.resize\", function() {\n\t  elem.chatroom('scrollToBottom', true);\n\t});\n\telem.on(\"minute\", function() {\n\t  elem.chatroom('update_time');\n\t});\n\telem.on(\"activate-tab\", function() {\n\t  elem.chatroom('read_until');\n\t});\n\n\t$(text).height(parseFloat($(text).css('line-height'))+5);\n\n\telem.chatroom('load_from_server');\n      });\n    },\n\n    close: function() {\n      return this.tile('close');\n    },\n\n    /**\n     * Send a chat message.\n     * @param {Object} [options]\n     * @param {Array}  [options.payload] Payloads (queries, etc)\n     * @param {String} [options.docid] Addressed document of not self\n     * @param {String} [options.broadcast] Also broadcast the message\n     * to the indicated document id.\n     * @param {Bool}   [options.clear] if `false`, do not clear the\n     * message window after sending.\n     */\n    send: function(options) {\n      options = options||{};\n      var data = this.data(pluginName);\n      var msg = {type:\"chat-message\"};\n      var ta = this.find(\"textarea\");\n      msg.text = ta.val().trim();\n      var payload = options.payload||[];\n      var has_payload = false;\n      var selection = this.chatroom('storage').storage('getSelection');\n      var hangout = \"gitty:\" + config.swish.hangout;\n\n      if ( selection )\n\tpayload.push({type:\"selection\", selection:selection});\n\n      for(var i=0; i<payload.length; i++) {\n\tif ( payload[i].type != 'about' ) {\n\t  has_payload = true;\n\t  break;\n\t}\n      }\n\t\t\t\t\t/* send first message to hangout */\n      if ( !options.broadcast &&\n\t   data.docid != hangout &&\n\t   data.messages.length == 0 )\n\toptions.broadcast = hangout;\n\n      if ( msg.text != \"\" || has_payload ) {\n\tmsg.uuid    = utils.generateUUID();\n\tmsg.payload = payload;\n\tmsg.docid   = options.docid||data.docid;\n\tif ( options.class )\n\t  msg.class = options.class;\n\n\tif ( options.clear == true ) {\n\t  this.chatroom('clear');\n\t} else {\n\t  data.clear = msg.uuid;\n\t}\n\n\t$(\"#chat\").chat('send', msg);\n\tif ( options.broadcast ) {\n\t  msg.payload.unshift({type:\"about\", docid:data.docid});\n\t  msg.docid = options.broadcast;\n\t  $(\"#chat\").chat('send', msg);\n\t}\n      } else if ( !options.payload ) {\n\tmodal.alert(\"No message to send\");\n      }\n    },\n\n    /**\n     * Get the related storage object\n     */\n    storage: function() {\n      return this.closest(\".tab-pane\").find(\".storage\");\n    },\n\n    /**\n     * @param {Object} msg is the chat message object\n     * @return {Bool} `true` if the msg is sent by the current user.\n     */\n    is_self: function(msg) {\n      var muser = msg.user||{};\n      var suser = config.swish.user||{};\n\n      var self = $(\"#chat\").chat('self');\n\n      return ((muser.id && muser.id == self.id) ||\n\t      (muser.avatar && muser.avatar == self.avatar) ||\n\t      (muser.profile_id && muser.profile_id == suser.profile_id));\n    },\n\n    /**\n     * Indicate we have read all content\n     */\n    read_until: function(msg) {\n      var data;\n\n      if ( msg == undefined &&\n\t   (data = this.data(pluginName)) &&\n\t   data.messages.length > 0 )\n\tmsg = data.messages[data.messages.length-1];\n\n      if ( msg ) {\n\t$(\"#chat\").chat('read_until', msg.docid, msg.time);\n\t$(\".chat-bell\").chatbell('read_until', msg.docid, msg.time);\n      }\n    },\n\n    /**\n     * Render a chat message.\n     * @param {Object} msg\n     * @param {String} msg.html is the HTML content of the object\n     * @param {String} msg.text is the ext of the object\n     * @param {Object} msg.user Sender description\n     */\n    render: function(msg) {\n      var muser = msg.user||{};\n      var suser = config.swish.user||{};\n\n      if ( msg.is_self === undefined )\n\tmsg.is_self = this.chatroom('is_self', msg);\n\n      elem = $($.el.div({class:\"chat-message\"+(msg.is_self ? \" self\" : \"\"),\n\t\t\t 'data-userid':muser.wsid}));\n      if ( !msg.is_self && muser.avatar ) {\n\telem.append(chat.avatar(muser));\n      }\n      elem.append($.el.span({class:\"chat-sender\"},\n\t\t\t    msg.is_self ? \"Me\" : muser.name));\n\n      if ( msg.time ) {\n\tvar title = new Date(msg.time*1000).toLocaleString();\n\telem.append($.el.span({class:\"chat-time\", title:title},\n\t\t\t      \"(\", utils.ago(msg.time), \") \"));\n\telem.data('time', msg.time);\n      }\n\n      if ( msg.payload ) {\n\tfor(var i=0; i<msg.payload.length; i++) {\n\t  var pl = msg.payload[i];\n\t  if ( payload_handlers[pl.type] )\n\t    payload_handlers[pl.type].call(elem, pl);\n\t  else\n\t    console.log(pl);\n\t}\n      }\n\n      var html;\n      if ( msg.html ) {\n\thtml = msg.html;\n      } else if ( msg.text ) {\n\thtml = $($.el.span(msg.text)).html();\n\thtml = markdown(html);\n      }\n\n      if ( html ) {\n\tvar span = $.el.span({class:\"chat-message html\"});\n\t$(span).html(html);\n\telem.append(span);\n      }\n\n      return elem;\n    },\n\n    /**\n     * Add a message to the chatroom.\n     * @param {Object} msg is the message to display\n     * @param {Bool} [seen] if `true`, claim that the message is read.\n     * When omitted it is `true` if the chatroom is visible.\n     */\n    add: function(msg, seen) {\n      var data = this.data(pluginName);\n\n      if ( msg.docid == data.docid )\n      { var elem;\n\n\tif ( seen == undefined )\n\t  seen = this.is(\":visible\");\n\n\tif ( msg.is_self == undefined )\n\t  msg.is_self = this.chatroom('is_self', msg);\n\tdata.messages.push(msg);\n\n\telem = this.chatroom('render', msg);\n\tthis.find(\".chat-content\").append(elem);\n\tthis.chatroom('scrollToBottom');\n\n\tif ( seen )\n\t  this.chatroom('read_until', msg);\n      }\n\n      if ( msg.uuid && msg.uuid == data.clear ) {\n\tthis.chatroom('clear');\n      }\n\n      return this;\n    },\n\n    clear: function() {\n      var ta = this.find(\"textarea\");\n\n      ta.val(\"\");\n      ta.height(parseFloat(ta.css('line-height')+5));\n    },\n\n    load_from_server: function(ifempty) {\n      var data = this.data(pluginName);\n      var elem = $(this);\n\n      $.get(config.http.locations.chat_messages,\n\t    { docid: data.docid\n\t    },\n\t    function(messages) {\n\t      if ( messages.length == 0 ) {\n\t\tif ( ifempty )\n\t\t  elem.chatroom('close');\n\t\telse if ( data.docid != \"gitty:\"+config.swish.hangout )\n\t\t  modal.help({file:\"newchat.html\", notagain:\"newchat\"});\n\t      } else {\n\t\tfor(var i=0; i<messages.length; i++) {\n\t\t  elem.chatroom('add', messages[i], i == messages.length-1 );\n\t\t}\n\t      }\n\t    }).fail(function(jqXHR, textStatus, errorThrown) {\n\t      modal.ajaxError(jqXHR);\n\t    });\n\n      return this;\n    },\n\n    update_time: function() {\n      return this.find(\".chat-message\").each(function() {\n\tvar elem = $(this);\n\tvar time;\n\tif ( (time=elem.data('time')) )\n\t  elem.find(\".chat-time\").text(\"(\"+utils.ago(time)+\") \");\n      });\n    },\n\n    /**\n     * Show diff between versions\n     * @param {Object} options\n     * @param {String} options.from Base commit\n     * @param {String} options.to Target commit\n     * @param {String} options.name Name of the file\n     */\n\n    diff: function(options) {\n      function error(jqXHR) {\n\tmodal.ajaxError(jqXHR);\n      }\n\n      $.ajax({\n        url: config.http.locations.web_storage + options.from,\n\tdata: {format: \"raw\"},\n\tsuccess: function(from) {\n\t  $.ajax({\n\t    url: config.http.locations.web_storage + options.to,\n\t    data: {format: \"raw\"},\n\t    success: function(to) {\n\n\t      function diffBody() {\n\t\tvar diff = $.el.div();\n\n\t\tthis.append(diff);\n\t\t$(diff).diff({\n\t\t  base: from,\n\t\t  head: to,\n\t\t  baseName: options.name + \" (before)\",\n\t\t  headName: options.name + \" (after)\"\n\t\t});\n\t\tthis.parents(\"div.modal-dialog\").addClass(\"modal-wide\");\n\t      }\n\n\t      form.showDialog({\n\t        title: \"Update differences\",\n\t\tbody:  diffBody\n\t      });\n\t    },\n\t    error: error\n\t  })\n\t},\n\terror: error\n      });\n    },\n\n\n    /**\n     * Associate with a new document\n     */\n    docid: function(docid, ifempty) {\n      var data = this.data(pluginName);\n\n      if ( data.docid != docid ) {\n\tthis.find(\".chat-content\").html(\"\");\n\tdata.docid = docid;\n\tthis.chatroom('load_from_server', ifempty);\n      }\n    },\n\n    /**\n     * @param {String} docid docid of rooms we are looking for\n     * @returns {jQuery} set of chatrooms pointing at document id\n     */\n    rooms: function(docid) {\n      var rooms = [];\n\n      this.each(function() {\n\tvar room = $(this);\n\tvar data = room.data(pluginName);\n\tif ( data.docid == docid )\n\t  rooms.push(this);\n      });\n\n      return $(rooms);\n    },\n\n    scrollToBottom: function(onlydown) {\n      this.each(function() {\n\tvar elem = $(this);\n\tscroll  =   elem.find(\"div.chat-inner-wrapper\");\n\twrap    = scroll.find(\"div.chat-content-wrapper\");\n\tcontent =   wrap.find(\"div.chat-content\");\n\tvar height = content[0].scrollHeight;\n\tvar room   = wrap.height() - height - 8;\n\n\tif ( room > 0 || onlydown !== true ) {\n\t  wrap.find(\"div.chat-stretch\").height(room > 0 ? room : 0);\n\t  scroll.scrollTop(height);\n\t}\n      });\n\n      return this;\n    }\n  }; // methods\n\n\n\t\t /*******************************\n\t\t *\t PAYLOAD HANDLERS\t*\n\t\t *******************************/\n\n  var payload_handlers = {\n    selection: function(selection) {\n      var label   = $().storage('getSelectionLabel', selection.selection);\n      var btn = $($.el.button({ class:\"btn btn-xs btn-primary\"\n\t\t\t      },\n\t\t\t      label + \" \",\n\t\t\t      form.widgets.glyphIcon(\"eye-open\")));\n      btn.on(\"click\", function(ev) {\n\t$(ev.target).chatroom('storage')\n\t            .storage('restoreSelection', selection.selection);\n      });\n\n      this.append(\" \", btn, \" \");\n    },\n\n    query: function(query) {\n      var btn = $($.el.button({ class:\"btn btn-xs btn-primary\"\n\t\t\t      },\n\t\t\t      \"Query \",\n\t\t\t      form.widgets.glyphIcon(\"download\")));\n      btn.on(\"click\", function() {\n\tvar qe = $(\".prolog-query-editor\");\n\n\tqe.queryEditor('setQuery', query.query);\n\tutils.flash(qe.find(\".CodeMirror\"));\n      });\n      sourceToolTip(btn, query.query);\n\n      this.append(\" \", btn, \" \");\n    },\n\n    update: function(update) {\n      var old, dif, nwe;\n\n      this.append(\" \", $.el.span(\n        {class:\"update\"},\n\told = btn(\"play\",    \"btn-primary\", \"Open old version\"),\n\tdif = btn(\"zoom-in\", \"btn-info\",    \"View changes\"),\n        nwe = btn(\"play\",    \"btn-primary\", \"Open new version\")), \" \");\n\n      $(old).data('commit', update.previous);\n      $(dif).data('diff',   {from:update.previous, to:update.commit,\n\t\t\t     name:update.name});\n      $(nwe).data('commit', update.commit);\n    },\n\n    about: function(about) {\n      var file = about.docid.replace(\"gitty:\", \"\");\n\n      this.append(\" \",\n\t$.el.a({\n\t  href:config.http.locations.web_storage+file,\n\t  class:\"store btn btn-primary btn-xs\"\n\t}, file), \" \");\n    }\n  };\n\n\n  // private functions\n\n  function sourceToolTip(elem, src) {\n    var pre = $.el.pre({class:\"cm-s-prolog\"});\n\n    CodeMirror.runMode(src, \"prolog\", pre);\n\n    elem.attr(\"title\", $.el.div(pre).innerHTML);\n    elem.data(\"html\", true);\n    elem.data(\"placement\", \"bottom\");\n    elem.data(\"trigger\", \"hover\");\n    elem.tooltip();\n  }\n\n  function btn(glyph, type, title) {\n    return form.widgets.glyphIconButton(glyph,\n\t\t\t\t\t{class:\"btn-xs \"+type, title:title});\n  }\n\n  /**\n   * Perform very simple regex based markdown processing\n   */\n  function markdown(text) {\n    var replace = [\n      { regex: /[a-z][a-zA-Z0-9_]*\\/[0-9]/g,\n        func:  function(match) {\n\t  return '<a class=\"builtin\" href=\"/pldoc/man?predicate='+match+'\">'\n\t         +match+'</a>';\n\t}\n      },\n      { regex: /[a-zA-Z0-9_-]+\\.(pl|swinb)\\b/g,\n        func:  function(match) {\n\t  return '<a class=\"builtin\" href=\"'+\n\t\t config.http.locations.web_storage+\n\t         match+'\">'\n\t         +match+'</a>';\n\t}\n      },\n      { regex: /`(.)`/g,\n        func:  function(match, content) {\n\t  return '<code>'+content+'</code>';\n\t}\n      },\n      { regex: /`([\\w\\[\\{\\(][^`]*[\\w\\]\\}\\)])`/g,\n        func:  function(match, content) {\n\t  return '<code>'+content+'</code>';\n\t}\n      },\n      { delim: \"\\\\*\", a: \"\\\\*\\\\b\", z: \"\\\\b\\\\*\", tag: \"b\" },\n      { delim: \"__\",  a: \"\\\\b__\",  z: \"__\\\\b\",  tag: \"b\" },\n      { delim: \"_\",   a: \"\\\\b_\",   z: \"_\\\\b\",   tag: \"i\" }\n    ];\n\n    function wrap(tag) {\n      return function(match, content) {\n\treturn \"<\"+tag+\">\"+content+\"</\"+tag+\">\";\n      };\n    }\n\n    for(var i=0; i<replace.length; i++) {\n      var r = replace[i];\n\n      if ( r.regex ) {\n\ttext = text.replace(r.regex, r.func);\n      } else if ( r.delim ) {\n\ttext = text.replace(RegExp(r.a+\"([^\"+r.delim+\"]+)\"+r.z,\"g\"),\n\t\t\t    wrap(r.tag));\n      }\n    }\n\n    return text;\n  }\n\n  /**\n   * <Class description>\n   *\n   * @class chatroom\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.chatroom = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2017, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * <Description of the File>\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('chatbell',[ \"jquery\", \"form\", \"modal\", \"config\", \"preferences\",\n\t \"laconic\", \"chatroom\"\n       ],\n       function($, form, modal, config, preferences) {\n\n(function($) {\n  var pluginName = 'chatbell';\n\n  /** @lends $.fn.chatbell */\n  var methods = {\n    /**\n     * @param {Object} [options]\n     * @param {String} [options.docid] Associate with a document id.\n     * If default, try the `data-document` attribute.\n     * @param {String} [options.empty_title] Title attribute if there\n     * are no new messages\n     */\n    _init: function(options) {\n      options = options||{};\n\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = $.extend({}, options); /* private data */\n\n\tdata.docid = options.docid||elem.data('document');\n\telem.data(pluginName, data);\t/* store with element */\n\n\telem.addClass(\"chat-bell\");\n\telem.attr('title', \"Messages available\");\n\telem.append(form.widgets.glyphIcon(\"bell\"),\n\t\t    $.el.span({class:\"chat-bell-count\"}, \"-\"));\n\telem.chatbell('update');\n      });\n    },\n\n    /**\n     * Set the chat counter and optionally associate the chat bell\n     * with a document (`docid`)\n     * @param {Object} chats\n     * @param {Number} chats.count number of chat messages to report\n     * @param {String} [chats.docid] associate bell with document\n     */\n    chats: function(chats) {\n      var data = this.data(pluginName);\n      var span = this.find(\".chat-bell-count\");\n      var elem = this;\n\n      function empty() {\n\tspan.text(\"-\");\n\telem.removeClass('chat-available chat-alert');\n\telem.attr('title', data.empty_title||\"No messages available\");\n      }\n\n      if ( chats == undefined ) {\n\tdelete data.docid;\n\tdelete data.count;\n\tdelete data.total;\n\n\tempty();\n      } else {\n\tvar count = chats.count == undefined ? chats.total : chats.count;\n\n\tif ( chats.docid ) data.docid = chats.docid;\n\tif ( chats.count ) data.count = chats.count;\n\tif ( chats.total ) data.total = chats.total;\n\n\tif ( chats.total > 0 ) {\n\t  this.addClass('chat-available');\n\t  if ( count > 0 ) {\n\t    span.text(count);\n\t    this.addClass('chat-alert');\n\t    this.attr('title', count + \" new messages\");\n\t  } else {\n\t    span.text(chats.total);\n\t    this.removeClass('chat-alert');\n\t    this.attr('title', chats.total + \" old messages\");\n\t  }\n\t} else {\n\t  empty();\n\t}\n      }\n\n      return this;\n    },\n\n    'chats++': function(docid) {\n      var data = this.data(pluginName);\n\n      if ( data.total != undefined ) data.total++; else data.total = 1;\n      if ( data.count != undefined ) data.count++;\n      if (      docid != undefined ) data.docid = docid;\n\n      if ( data.total ) {\n\tthis.chatbell('chats', {\n\t  total: data.total,\n\t  count: data.count\n\t});\n      }\n\n      return this;\n    },\n\n    /**\n     * Update the chat bell.\n     * @param {Object} [chats]\n     * @param {Number} [chats.total]\n     * @param {Number} [chats.count]\n     * @param {Number} [chats.docid]\n     */\n    update: function(chats) {\n      var data = this.data(pluginName);\n\n      chats = chats||{};\n\n      if ( chats.total != undefined &&\n\t   chats.count != undefined ) {\n\tthis.chatbell('chats', chats);\n      } else {\n\tvar docid = chats.docid||data.docid;\n\tvar after = preferences.getDocVal(docid, 'chatBar', 0);\n\n\t\t\t/* fetch if we want unread or we don't know total */\n\tif ( docid && (after || chats.total == undefined) ) {\n\t  var elem = $(this);\n\n\t  $.get(config.http.locations.chat_status,\n\t\t{ docid: docid,\n\t\t  after: after\n\t\t},\n\t\tfunction(chats) {\n\t\t  elem.chatbell('chats', chats);\n\t\t});\n\t} else if ( chats.total != undefined ) {\n\t  this.chatbell('chats', chats);\n\t}\n      }\n\n      return this;\n    },\n\n    /**\n     * Sent by the chatroom if the user saw the last message.\n     */\n    read_until: function(docid, time) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName);\n\n\tif ( data.docid == docid && data.total ) {\n\t  elem.chatbell('chats', {total: data.total, count:0});\n\t}\n      });\n    },\n\n    /**\n     * Handle an incomming chat message.  If the message is not from\n     * myself, display as a short notification.\n     */\n    'chat-message': function(msg) {\n      if ( msg.is_self == undefined )\n\tmsg.is_self = this.chatroom('is_self', msg);\n\n      this.chatbell('chats++');\n\n      if ( !msg.is_self ) {\n\tvar elem = this.chatroom('render', msg);\n\tvar options = {\n\t  dom: elem\n\t};\n\n\tmodal.notify(this, options);\n      }\n    }\n  }; // methods\n\n  /**\n   * <Class description>\n   *\n   * @class chatbell\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.chatbell = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * List available sources.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('sourcelist',[ \"jquery\", \"config\", \"form\", \"modal\", \"laconic\" ],\n       function($, config, form, modal) {\n\n(function($) {\n  var pluginName = 'sourcelist';\n\n  var current_query = {q: config.swish.default_query || \"\"};\n  var current_profile;\n  var query_cache = [];\n  var pending = [];\n  var qid = 0;\n\n  /** @lends $.fn.sourcelist */\n  var methods = {\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\t\t\t/* private data */\n\n\telem.data(pluginName, data);\t/* store with element */\n\t\t\t\t\t/* populate search page */\n\telem[pluginName]('fill', undefined, current_query);\n\telem[pluginName]('check_cache');\n\telem[pluginName]('update', current_query);\n\telem.on(\"login\", function() {\n\t  if ( elem[pluginName]('check_cache') )\n\t    elem[pluginName]('update', current_query);\n\t});\n      });\n    },\n\n    check_cache: function() {\n      var profile = $(\"#login\").login('get_profile',\n\t\t\t\t      [ \"display_name\", \"avatar\"\n\t\t\t\t      ]);\n      if ( !(current_profile &&\n\t     current_profile.display_name == profile.display_name &&\n\t     current_profile.avatar == profile.avatar) ) {\n\tquery_cache = [];\n\tcurrent_profile = profile;\n\treturn true;\n      } else {\n\tif ( !current_profile )\n\t  current_profile = profile;\n\treturn false;\n      }\n    },\n\n    /**\n     * Post an update query and process the result\n     */\n    update: function(query) {\n      var elem = this;\n      var reply;\n\n      this[pluginName]('check_cache');\n\n      if ( (reply = from_cache(query_cache, query)) ) {\n\t$.ajax({\n\t  url: config.http.locations.source_modified,\n\t  dataType: \"json\",\n\t  success: function(json) {\n\t    if ( json.modified < reply.modified+10 ) {\n\t      elem.sourcelist('fill', reply, query);\n\t    } else {\n\t      query_cache = [];\n\t      elem[pluginName]('update', query);\n\t    }\n\t  },\n\t  error: function(jqXHDR) {\n\t    modal.ajaxError(jqXHDR);\n\t  }\n\t});\n      } else {\n\tquery = query||{};\n\n\t$.extend(query, current_profile);\n\tquery.q = query.q||\"\";\n\tquery.offset = query.offset||0;\n\tquery.limit  = query.limit||10;\n\tquery.qid    = qid++;\n\n\tpending.push(query);\n\telem[pluginName]('busy', true);\n\n\t$.ajax({\n\t  url: config.http.locations.source_list,\n\t  data: query,\n\t  dataType: \"json\",\n\t  success: function(reply) {\n\t    reply.query = query;\n\t    pending.pop();\t\t/* should match qid */\n\t    if ( pending.length == 0 )\n\t      elem[pluginName]('busy', false);\n\t    add_to_cache(query_cache, reply);\n\t    elem.sourcelist('fill', reply, query);\n\t  },\n\t  error: function(jqXHDR) {\n\t    pending.pop();\n\t    modal.ajaxError(jqXHDR);\n\t  }\n\t});\n      }\n    },\n\n    /**\n     * Go to a page\n     */\n\n    page: function(move) {\n      var data = this.data(pluginName);\n\n      if ( data && data.page ) {\n\tvar q = $.extend({}, data.page.query);\n\n\tif ( q.offset == undefined )\n\t  q.offset = 0;\n\n\tfunction roundUp(v, n) {\n\t  return Math.floor((v+(n-1))/n) * n;\n\t}\n\n\tswitch(move) {\n\t  case \"first\": q.offset  = 0; break;\n\t  case \"prev\":  q.offset -= data.page.size; break;\n\t  case \"next\":  q.offset += data.page.size; break;\n\t  case \"last\":  q.offset  = roundUp(data.page.total, data.page.size) -\n\t\t\t\t    data.page.size; break;\n\t  default: return;\n\t}\n\n\tq.offset = Math.max(0, q.offset);\n\tthis[pluginName]('update', q);\n      }\n    },\n\n    /**\n     * Fill the result table\n     */\n    fill: function(results, query) {\n      var data = this.data(pluginName);\n      var body;\n\n      if ( !data )\t\t\t\t/* has gone */\n\treturn this;\n\n      if ( results ) {\n\tcurrent_query = query;\n\tdata.page = { query:  query,\n\t\t      offset: query.offset,\n\t\t      size:   query.limit,\n\t\t      total:  results.total\n\t\t    };\n      }\n\n      function h(title) {\n\treturn $.el.th(title);\n      }\n\n      function humanize(stamp) {\n\tvar d = new Date(stamp*1000);\n\tvar s = d.toISOString();\n\n\treturn s.slice(0, 10) + \" \" + s.slice(11,19);\n      }\n\n      body = this.find(\"tbody\");\n      if ( body.length == 0 ) {\n\tthis.append($.el.div({class:\"search-form input-group\"}),\n\t\t    $.el.div({class:\"search-results\"},\n\t\t      table =\n\t\t      $.el.table({class:\"table table-striped table-hover \"+\n\t\t\t\t\t\"table-condensed\"},\n\t\t\t\t $.el.thead($.el.tr(h(\"Type\"),\n\t\t\t\t\t\t    h(\"Name\"),\n\t\t\t\t\t\t    h(\"Tags\"),\n\t\t\t\t\t\t    h(\"User\"),\n\t\t\t\t\t\t    h(\"Modified\"))),\n\t\t\t\t body = $.el.tbody()),\n\t\t      $.el.div({class:\"search-no-results\"}),\n\t\t      $.el.div({class:\"loading search\"})),\n\t\t    $.el.div({class:\"search-footer\"}));\n\tthis[pluginName]('search_form');\n\tbody = $(body);\n\tbody.on(\"click\", \"tr\", function(ev) {\n\t  var tr = $(ev.target).closest(\"tr\");\n\t  $(\"body\").swish('playFile', { file:tr.attr(\"data-name\") });\n\t});\n      } else {\n\t$(body).html(\"\");\n      }\n\n      // set the query, unless we are typing one\n      var input = this.find(\"input.search\");\n      if ( !input.is(\":focus\") ) {\n\tinput.val(results ? results.query.q : query ? query.q : \"\");\n\tinput.trigger(\"propertychange\", false);\n      }\n\n      if ( results ) {\n\tvar i = query.offset - results.query.offset;\n\tvar e = Math.min(i+query.limit, results.matches.length);\n\n\tif ( i<e )\n\t  $(table).show();\n\telse\n\t  $(table).hide();\n\n\tfor(; i<e; i++)\n\t{ var match = results.matches[i];\n\t  var ext   = match.name.split(\".\").pop();\n\t  var base  = match.name.slice(0, -(ext.length+1));\n\n\t  var tdtags = $.el.td({class:\"tags\"});\n\t  var tags = match.tags||[];\n\t  tags.forEach(function(tag) {\n\t    $(tdtags).append($.el.span({class:\"tag\"}, tag));\n\t  });\n\n\t  body.append($.el.tr({\"data-name\":match.name},\n\t\t\t      $.el.td(form.widgets.typeIcon(ext)),\n\t\t\t      $.el.td(base),\n\t\t\t      tdtags,\n\t\t\t      $.el.td(match.author),\n\t\t\t      $.el.td(humanize(match.time))));\n\t}\n\tthis[pluginName]('search_footer', results, query);\n      }\n    },\n\n    search_footer: function(results, query) {\n      var footer = this.find(\"div.search-footer\");\n      var noresults = this.find(\"div.search-no-results\");\n      var bopts = {};\n\n      function btn(action, dir, icon) {\n\tbopts.action = action;\n\tbopts.class  = \"btn-primary \"+dir;\n\treturn form.widgets.glyphIconButton(icon, bopts);\n      }\n\n      if ( footer.find(\".f-total\").length == 0 ) {\n\tfooter.append(btn(\"first\", \"backward\", \"fast-backward\"),\n\t\t      btn(\"prev\",  \"backward\", \"step-backward\"),\n\t\t      $.el.button({class:\"btn btn-default\"},\n\t\t\t\t  $.el.span({class: \"f-from\"}),\n\t\t\t\t  $.el.label(\"to\"),\n\t\t\t\t  $.el.span({class: \"f-to\"}),\n\t\t\t\t  $.el.label(\"from\"),\n\t\t\t\t  $.el.span({class: \"f-total\"})),\n\t\t      btn(\"next\", \"forward\", \"step-forward\"),\n\t\t      btn(\"last\", \"forward\", \"fast-forward\"));\n\n\tfooter.on(\"click\", \"button\", function(ev) {\n\t  var b   = $(ev.target).closest(\"button\");\n\t  var act = b.data('action');\n\n\t  if ( act )\n\t    b.closest(\"div.sourcelist\")[pluginName](\"page\", act)\n\t});\n      }\n\n      var end = Math.min(query.offset+query.limit, results.total);\n\n      if ( results.total == 0 ) {\n\tif ( noresults.find(\"div\").length == 0 ) {\n\t  var a;\n\t  noresults.append(\n\t    $.el.div($.el.span({class:\"no-search-results-warning\"},\n\t\t\t       form.widgets.glyphIcon(\"alert\"),\n\t\t\t       \" No matching files\"), $.el.br(),\n\t\t     \"If you are a new user you may\",\n\t\t     $.el.ul($.el.li(\"Use the Examples menu from the navigation bar\"),\n\t\t\t     $.el.li(\"Use the Program or Notebook button above\")),\n\t\t     $.el.div(a=$.el.a({href:\"#\"}, \"help on search\"))));\n\t  $(a).on(\"click\", function() {\n\t    console.log(\"help\");\n\t    modal.help({file:\"sourcelist.html\"});\n\t  });\n\t}\n\tnoresults.show();\n\tfooter.hide();\n      } else\n      { noresults.hide();\n\n\tif ( query.offset > 0 || end < results.total ) {\n\t  footer.show();\n\t  if ( query.offset == 0 ) {\n\t    footer.find(\".backward\").attr(\"disabled\", \"disabled\");\n\t  } else {\n\t    footer.find(\".backward\").removeAttr(\"disabled\");\n\t  }\n\t  if ( end >= results.total ) {\n\t    footer.find(\".forward\").attr(\"disabled\", \"disabled\");\n\t  } else {\n\t    footer.find(\".forward\").removeAttr(\"disabled\");\n\t  }\n\t  footer.find(\".f-from\") .text(\"\"+query.offset);\n\t  footer.find(\".f-to\")   .text(\"\"+end);\n\t  footer.find(\".f-total\").text(\"\"+results.total);\n\t} else {\n\t  footer.hide();\n\t}\n      }\n    },\n\n    search_form: function() {\n      var data = this.data(pluginName);\n      var elem = this;\n      var div = this.find(\"div.search-form\");\n      var btnsubmit;\n\n      function btn(title, members) {\n\tvar ul;\n\tvar div = $.el.div({class:\"btn-group\"},\n\t\t    $.el.button({ type:\"button\",\n\t\t\t          class:\"btn btn-default dropdown-toggle\",\n\t\t\t          'data-toggle':\"dropdown\",\n\t\t\t          'aria-haspopup': true,\n\t\t\t          'aria-expanded': false\n\t\t\t        },\n\t\t\t\ttitle, \" \",\n\t\t\t\t$.el.span({class:\"caret\"})),\n\t\t    ul=$.el.ul({class:\"dropdown-menu\"}));\n\n\tfunction add(item) {\n\t  var a;\n\n\t  if ( typeof(item) == \"string\" ) {\n\t    return $.el.a({'data-tag':item}, item);\n\t  } else if ( item.i) {\n\t    a = $.el.a({'data-tag':item.t, 'data-value':item.v},\n\t\t       form.widgets.typeIcon(item.i), \" \"+item.l);\n\t  } else {\n\t    a = $.el.a({'data-tag':item.t, 'data-value':item.v},\n\t\t       item.l);\n\t  }\n\t  $(a).data('quote', item.q == undefined ? \"\\\"\" : item.q);\n\n\t  return a;\n\t}\n\n\tfor(var i=0; i<members.length; i++) {\n\t  $(ul).append($.el.li(add(members[i])));\n\t}\n\n\treturn div;\n      }\n\n      function resettimeout(set) {\n\tif ( data.tmo ) {\n\t  clearTimeout(data.tmo);\n\t  data.tmo = undefined;\n\t}\n\tif ( set == true )\n\t  set = 1000;\n\tif ( set )\n\t  data.tmo = setTimeout(submit, set);\n      }\n\n      function submit(ev) {\n\tif ( ev )\n\t  ev.preventDefault();\n\tresettimeout();\n\tvar q = elem.find(\"input\").val();\n\telem[pluginName]('update', {q:q});\n\treturn false;\n      }\n\n      div.append(\n\t$.el.div({class:\"form-group has-feedback has-clear\"},\n\t\t $.el.input({\n\t\t   type: \"text\",\n\t\t   class: \"form-control search\",\n\t\t   placeholder: \"Find files\"\n\t\t }),\n\t\t $.el.span({class:\"form-control-clear glyphicon \"+\n\t\t\t\t  \"glyphicon-remove form-control-feedback \"+\n\t\t\t\t  \"hidden\"})),\n\t$.el.div({ class: \"input-group-btn\" },\n\t\t btn(\"Filter\", [{t:\"user\", l:\"My files\",        v:\"me\", q:\"\\\"\"},\n\t\t\t\t{t:\"user\", l:\"By user\",         v:\"\",   q:\"\\\"\"},\n\t\t\t\t{t:\"user\", l:\"By user (regex)\", v:\"\",   q:\"/\"},\n\t\t\t\t{t:\"tag\",  l:\"By tag\",          v:\"\",   q:\"\\\"\"},\n\t\t\t\t{t:\"tag\",  l:\"By tag (regex)\",  v:\"\",   q:\"/\"},\n\t\t\t\t{t:\"name\", l:\"By name\",         v:\"\",   q:\"\\\"\"},\n\t\t\t\t{t:\"name\", l:\"By name (regex)\", v:\"\",   q:\"/\"}\n\t\t\t       ]),\n\t\t btn(\"Type\",   [{t:\"type\", l:\"Program\",   i:\"pl\",    v:\"pl\",    q:\"\"},\n\t\t\t\t{t:\"type\", l:\"Notebook\",  i:\"swinb\", v:\"swinb\", q:\"\"},\n\t\t\t\t{t:\"type\", l:\"Permalink\", i:\"lnk\",   v:\"lnk\",   q:\"\"}\n\t\t\t       ]),\n\t\t btnsubmit=\n\t\t $.el.button({class:\"btn btn-default\", type:\"submit\"},\n\t\t\t     $.el.i({class:\"glyphicon glyphicon-search\"}))));\n\n      form.dyn_clear(div, submit);\n\n      div.on(\"click\", \"a\", function(ev) {\n\tvar a = $(ev.target).closest(\"a\");\n\n\tfunction tag(tag, value, q) {\n\t  var input = div.find(\"input\");\n\t  var val = input.val();\n\t  var tagv = tag + \":\" + q + (value||\"\") + q;\n\n\t  if ( val.trim() == \"\" ) {\n\t    val = tagv;\n\t  } else {\n\t    if ( value && RegExp(\"\\\\b\"+tag+\":\").test(val) ) {\n\t      val = val.replace(RegExp(\"\\\\b\"+tag+\":(\\\\S*|\\\\s*\\\"[^\\\"]*\\\")\"), tagv);\n\t    } else {\n\t      val = val.trim() + \" \" + tagv;\n\t    }\n\t  }\n\n\t  input.val(val).trigger('propertychange');\n\t  if ( value || tag == \"tag\" )\n\t    submit();\n\t}\n\n\ttag(a.data('tag'), a.data('value'), a.data('quote'));\n      });\n\n      $(btnsubmit).on(\"click\", function(ev) {\n\treturn submit(ev);\n      });\n\n      var inputel = elem.find(\"input\");\n      inputel.keydown(function(ev) {\n\tif ( ev.which == 13 )\n\t  return submit(ev);\n      }).on(\"input propertychange\", function(ev, propagate) {\n\tif ( propagate != false ) {\n\t  if ( from_cache(query_cache, inputel.val()) ) {\n\t    resettimeout(200);\n\t  } else\n\t    resettimeout(true);\n\t}\n      });\n    },\n\n    busy: function(busy) {\n      var div = this.find(\"div.loading\");\n\n      if ( busy )\n\tdiv.show();\n      else\n\tdiv.hide();\n    }\n  }; // methods\n\n\n  /**\n   * Cache management.  These functions should eventually merge results\n   * and select sub-results without contacting the server.\n   */\n  function from_cache(cache, query) {\n    function qmatch(entry) {\n      var e = entry.query;\n      if ( query.q == e.q ) {\n\tif ( query.offset >= e.offset &&\n\t     (query.offset+query.limit <= e.offset + entry.matches.length ||\n\t      e.offset + entry.matches.length == entry.total) )\n\t  return e;\n\t}\n    }\n\n    if ( query != undefined ) {\n      query.offset = query.offset || 0;\n      query.limit  = query.limit  || 10;\n\n      for(var i=cache.length-1; i>=0; i--) {\n\tvar entry = cache[i];\n\tif ( qmatch(entry) )\n\t  return entry;\n      }\n    }\n  }\n\n  function add_to_cache(cache, result) {\n    var qr = result.query;\n\n    qr.offset = qr.offset || 0;\n    qr.limit  = qr.limit  || 10;\n\n    for(var i=cache.length-1; i>=0; i--) {\n      var entry = cache[i];\n      var qc = entry.query;\n\n      if ( qc.q == qr.q ) {\n\tif ( qc.offset + entry.matches.length == qr.offset ) {\n\t  for(var i=0; i<result.matches.length; i++)\n\t    entry.matches.push(result.matches[i]);\n\t  return;\n\t}\n      }\n    }\n\n    cache.push(result);\n  }\n\n  /**\n   * List available sources.\n   *\n   * @class sourcelist\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.sourcelist = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * This file deals with tabbed panes.  It implements dynamic tabs on top\n * if Bootstrap.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('tabbed',[ \"jquery\", \"form\", \"config\", \"preferences\", \"modal\",\n\t \"laconic\", \"search\", \"chatbell\", \"sourcelist\" ],\n       function($, form, config, preferences, modal) {\nvar tabbed = {\n  tabTypes: {},\n  type: function(from) {\n    var ext = from.split('.').pop();\n\n    for(var k in tabbed.tabTypes) {\n      if ( tabbed.tabTypes.hasOwnProperty(k) &&\n\t   tabbed.tabTypes[k].dataType == ext )\n\treturn tabbed.tabTypes[k];\n    }\n  }\n};\n\ntabbed.tabTypes.permalink = {\n  dataType: \"lnk\",\n  typeName: \"program\",\n  label: \"Program\",\n  create: function(dom, options) {\n    $(dom).addClass(\"prolog-editor\")\n\t  .prologEditor($.extend({save:true}, options))\n\t  .prologEditor('makeCurrent');\n  }\n};\n\n\n(function($) {\n  var pluginName = 'tabbed';\n  var tabid = 0;\n\n  /** @lends $.fn.tabbed */\n  var methods = {\n    /**\n     * Turn the current element into a Bootstrap tabbed pane. All\n     * children of the current element are changed into tabs.  The\n     * child can control the mapping using:\n     *\n     *   - `data-label = \"Label\"`\n     *   - `data-close = \"disabled\"`\n     */\n    _init: function(options) {\n      options = options||{};\n\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\t\t\t/* private data */\n\n\tdata.newTab   = options.newTab;\n\tdata.tabTypes = options.tabTypes || tabbed.tabTypes;\n\telem.data(pluginName, data);\t/* store with element */\n\n\telem.addClass(\"tabbed unloadable\");\n\telem.tabbed('makeTabbed');\n\telem.on(\"trace-location\", function(ev, prompt) {\n\t  elem.tabbed('showTracePort', prompt);\n\t});\n\telem.on(\"data-is-clean\", function(ev, clean) {\n\t  var tab = $(ev.target).closest(\".tab-pane\");\n\t  var a   = elem.tabbed('navTab', tab.attr('id'));\n\n\t  if ( a )\n\t  { if ( clean )\n\t      a.removeClass(\"data-dirty\");\n\t    else\n\t      a.addClass(\"data-dirty\");\n\t  }\n\t});\n\telem.on(\"unload\", function(ev) {\n\t  if ( ev.target == elem[0] &&\n\t       elem.closest(\".swish\").swish('preserve_state') ) {\n\t    var state = elem[pluginName]('getState');\n\t    localStorage.setItem(\"tabs\", JSON.stringify(state));\n\t  }\n\t});\n\telem.on(\"restore\", function(ev) {\n\t  var state;\n\n\t  if ( ev.target == elem[0] ) {\n\t    try {\n\t      var str = localStorage.getItem(\"tabs\");\n\t      if ( str )\n\t\tstate = JSON.parse(str);\n\t    } catch(err) {\n\t    }\n\n\t    if ( state && typeof(state) == \"object\" ) {\n\t      elem[pluginName]('setState', state);\n\t    }\n\t  }\n\t});\n\telem.on(\"preference\", function(ev, pref) {\n\t  if ( pref.name == \"preserve-state\" &&\n\t       pref.value == false ) {\n\t    localStorage.removeItem(\"tabs\");\n\t  }\n\t});\n      });\n    },\n\n    /**\n     * Turn the pane into a tabbed pane\n     */\n    makeTabbed: function() {\n      var children = this.children();\n      var ul = $.el.ul({ class:\"nav nav-tabs\",\n\t\t\t role:\"tablist\"\n\t\t       });\n      var contents = $.el.div({class:\"tab-content\"});\n\n      this.prepend(contents);\n      this.prepend(ul);\n\n      $(ul).on(\"click\", \"span.xclose\", function(ev) {\n\tvar id = $(ev.target).parent().attr(\"data-id\");\n\t$(ev.target).parents(\".tabbed\").first().tabbed('removeTab', id);\n\tev.preventDefault();\n      });\n      $(ul).on(\"click\", \"a\", function(ev) {\n\t$(ev.target).closest(\"a\").tab('show');\n\tev.preventDefault();\n      });\n\n\t\t\t/* Turn children into tabs */\n      for(var i=0; i<children.length; i++) {\n\tvar child = $(children[i]);\n\tvar id = genId();\n\tvar label = child.attr(\"data-label\") || \"Unknown\";\n\tvar close = child.attr(\"data-close\") != \"disabled\";\n\tvar active = (i == children.length-1);\t/* activate last */\n\n\tvar li = this.tabbed('tabLabel', id, label, close);\n\tif ( active )\n\t  $(li).addClass(\"active\");\n\t$(ul).append(li);\n\t$(contents).append(wrapInTab($(children[i]), id, active));\n      }\n\n\t\t\t/* Create and handle \"+\" button */\n      var create = $.el.a({ class: \"tab-new compact\",\n\t\t\t    title: \"Open a new tab\"\n\t\t\t  },\n\t\t\t  glyphicon(\"plus\"));\n      $(ul).append($.el.li({ class: \"tab-new\", role:\"presentation\" }, create));\n      $(create).on(\"click\", function(ev) {\n\tvar tabbed = $(ev.target).parents(\".tabbed\").first();\n\n\ttabbed.tabbed('newTab');\n\tev.preventDefault();\n\treturn false;\n      });\n\n\t\t\t/* Handle tab-switching */\n      $(ul).on(\"shown.bs.tab\", \"a\", function(ev) {\n\tvar newContentID  = $(ev.target).data(\"id\");\n\t$(\"#\"+newContentID+\" .swish-event-receiver\").trigger(\"activate-tab\");\n\t$(\"#\"+newContentID+\" .storage\").storage(\"activate\");\n      });\n\n      if ( this.tabbed('navContent').children().length == 0 ) {\n\tthis.tabbed('newTab');\n      }\n    },\n\n    /**\n     * Add an empty new tab from the \"+\" button.  This calls\n     * options.newTab() to return a DOM element for the new\n     * tab.\n     * @param {HTMLElement} [content] Content for the new tab\n     * If omitted, it calls `options.newTab` or uses the method\n     * `tabSelect`.\n     * @return {jQuery} object representing the created tab\n     */\n    newTab: function(dom, active) {\n      var data = this.data(pluginName);\n\n      if ( dom == undefined ) {\n\tif ( data.newTab ) {\n\t  dom = data.newTab();\n\t} else {\n\t  var sl;\n\t  dom = this.tabbed('tabSelect');\n\t  $(dom).append(this.tabbed('profileForm'),\n\t\t\t$.el.hr(),\n\t\t\t//this.tabbed('searchForm'),\n\t\t        sl = $.el.div({class:\"sourcelist\"}));\n\t  $(sl).sourcelist();\n\t}\n      }\n\n      if ( active == undefined )\n\tactive = true;\n\n      return this.tabbed('addTab', dom, {active:active,close:true});\n    },\n\n    getState: function() {\n      var state = this[pluginName]('get_ordered_storage').storage('getState');\n\n      state.pathname = window.location.pathname;\n      state.time     = new Date().getTime();\n\n      return state;\n    },\n\n    setState: function(state) {\n      var elem = this;\n      var fromURL = this.find(\".storage\").length > 0;\n\n      for(var i=0; i<state.tabs.length; i++) {\n\tvar data = state.tabs[i];\n\tthis[pluginName]('restoreTab', data, fromURL);\n      }\n    },\n\n    restoreTab: function(data, fromURL) {\n      var elem = this;\n      var tab;\n\n      data.query = null;\t\t/* null keeps query */\n      data.noHistory = true;\t\t/* do not update window path */\n\n      var existing = this.find(\".storage\").storage('match', data);\n      if ( existing ) {\n\texisting.data('storage').url = data.url;\n\ttab = existing.closest(\".tab-pane\");\n\telem.tabbed('move_right', tab);\n      } else\n      { tab = undefined;\n      }\n\n      function restoreData(into, from) {\n\tif ( from.data ) {\n\t  into.find(\".storage\").storage('setValue', {\n\t    data: from.data,\n\t    role: 'source'\n\t  });\n\t}\n\tif ( from.chatroom ) {\n\t  into.find(\".storage\").storage('chat', from.chatroom);\n\t}\n      }\n\n      if ( existing ) {\n\trestoreData(tab, data);\n      } else if ( existing ) {\n\t/* nothing to do? */\n      } else {\t\t\t\t/* TBD: Centralise */\n\tvar select = this.find(\"div.tabbed-select\");\n\tvar newtab;\n\tvar restoring = '<div class=\"restore-tab\">Restoring ' +\n\t                   (data.file||data.url) + \" ...\" +\n\t\t\t'</div>';\n\n\tif ( select.length > 0 )  {\n\t  newtab = select.first().closest(\".tab-pane\");\n\t  newtab.html(restoring);\n\t} else {\n\t  var active = (!fromURL && Boolean(data.active));\n\t  newtab = elem.tabbed('newTab', $(restoring), active);\n\t}\n\n\tif ( data.st_type == \"gitty\" ) {\n\t  var url = config.http.locations.web_storage + data.file;\n\t  $.ajax({ url: url,\n\t\t   type: \"GET\",\n\t\t   data: {format: \"json\"},\n\t\t   success: function(reply) {\n\t\t     reply.url = url;\n\t\t     reply.st_type = \"gitty\";\n\t\t     reply.noHistory = true;\n\t\t     if ( !elem.tabbed('setSource', newtab, reply) ) {\n\t\t       console.log(\"Failed to restore\", data.file);\n\t\t       elem.tabbed('removeTab', tab.attr(\"id\"));\n\t\t     }\n\t\t     restoreData(newtab, data);\n\t\t     if ( !fromURL && newtab.hasClass(\"active\") )\n\t\t       newtab.find(\".storage\").storage(\"activate\");\n\t\t   },\n\t\t   error: function(jqXHR) {\n\t\t     modal.ajaxError(jqXHR);\n\t\t   }\n\t  });\n\t} else if ( data.url ) {\n\t  $.ajax({ url: data.url,\n\t\t   type: \"GET\",\n\t\t   data: {format: \"json\"},\n\t\t   success: function(source) {\n\t\t     var msg;\n\n\t\t     if ( typeof(source) == \"string\" ) {\n\t\t       msg = { data: source };\n\t\t       msg.st_type = \"external\";\n\t\t     } else if ( typeof(source) == \"object\" &&\n\t\t\t\t typeof(source.data) == \"string\" ) {\n\t\t       msg = source;\n\t\t       msg.st_type = \"filesys\";\n\t\t     } else {\n\t\t       alert(\"Invalid data\");\n\t\t       return;\n\t\t     }\n\t\t     msg.noHistory = true;\n\t\t     msg.url = data.url;\n\t\t     if ( !elem.tabbed('setSource', newtab, msg) ) {\n\t\t       console.log(\"Failed to restore\", data.url);\n\t\t       elem.tabbed('removeTab', newtab.attr(\"id\"));\n\t\t     }\n\t\t     restoreData(newtab, data);\n\t\t     if ( !fromURL && newtab.hasClass(\"active\") )\n\t\t       newtab.find(\".storage\").storage(\"activate\");\n\t\t   },\n\t\t   error: function(jqXHR) {\n\t\t     modal.ajaxError(jqXHR);\n\t\t   }\n\t  });\n\t} else {\n\t  console.log(\"Cannot restore \", data);\n\t}\n      }\n    },\n\n\n    /**\n     * Add a new tab from the provided source.  If there is a _select_\n     * (new) tab, open the data in this tab.\n     */\n    tabFromSource: function(src) {\n      var elem = this;\n      var select = this.find(\"div.tabbed-select\");\n\n      if ( typeof(src) == \"string\" )\n\tsrc = {data:src};\n\n      function inNewTab() {\n\tvar tab = elem.tabbed('newTab', $(\"<span></span>\"));\n\tif ( !elem.tabbed('setSource', tab, src) ) {\n\t  elem.tabbed('removeTab', tab.attr(\"id\"));\n\t}\n      }\n\n      if ( select.length > 0 ) {\n\tvar tab = select.first().closest(\".tab-pane\");\n\tthis.tabbed('show', tab.attr(\"id\"));\n\tthis.tabbed('setSource', tab, src);\n      } else if ( src.newTab || preferences.getVal(\"new-tab\") ) {\n\tinNewTab();\n      } else\n      { var tab;\n\n\tthis.find(\".storage\").each(function(i, st) {\n\t  if ( $(st).storage('setSource', src) ) {\n\t    tab = $(st).closest(\".tab-pane\");\n\t    return false;\n\t  }\n        });\n\n\tif ( tab )\n\t  this.tabbed('show', tab.attr(\"id\"));\n\telse\n\t  inNewTab();\n      }\n\n      return this;\n    },\n\n    /**\n     * Transform the new tab into a tab that can hold the requested\n     * source.\n     * @return {Boolean} `true` if a suitable type was found\n     */\n    setSource: function(tab, src) {\n      if ( typeof(src) == \"object\" &&\n\t   ((src.meta && src.meta.name) || src.url) )\n      { var name = (src.meta && src.meta.name) ? src.meta.name : src.url;\n\tvar tabType = tabbed.type(name);\n\tvar content = $.el.div();\n\tvar options = {};\n\n\tif ( src.noHistory )\n\t  options.noHistory = true;\n\n\ttab.html(\"\");\n\ttab.tabbed('title', tabType.label, tabType.dataType);\n\ttab.append(content);\n\ttabType.create(content, options);\n\t$(content).storage('setSource', src);\n\treturn true;\n      }\n\n      return false;\n    },\n\n    /**\n     * Show a tracer port. This implies finding the proper editor,\n     * making sure it is visible and ask it to show to port or, if\n     * no editor is displaying this source, create a new one.\n     * @param {Object} prompt\n     * @param {Object} [prompt.source]\n     * @param {Object} [prompt.source.file] is the file associated\n     * with the debug event.  Currently, we accept\n     *\n     *   - `pengine://<pengine>/src` refers to the editor that provided\n     *     the source for pengine <pengine>\n     *\t - `swish://<file>.pl` refers to an included file from the\n     *\t   store.\n     */\n    showTracePort: function(prompt) {\n      if ( prompt && prompt.source && prompt.source.file ) {\n\tvar file = prompt.source.file;\n\tvar pengineID, store;\n\tvar editors;\n\n\tfunction isPengineSrc() {\n\t  var id;\n\n\t  if ( file.startsWith(\"pengine://\") )\n\t    return file.split(\"/\")[2];\n\t}\n\n\tfunction isStoreSrc() {\n\t  var prefix = \"swish://\";\n\t  if ( file.startsWith(prefix) )\n\t    return file.slice(prefix.length);\n\t}\n\n\tif ( (pengineID=isPengineSrc()) ) {\n\t  editors = this.find(\".prolog-editor\")\n\t\t\t.filter(function(i, e) {\n\t\t\t  return $(e).prologEditor('pengine', {has:pengineID});\n\t\t\t});\n\t} else if ( (store=isStoreSrc()) ) {\n\t  editors = this.find(\".storage\")\n\t\t\t.storage('match', {file:store});\n\n\t  if ( !editors ) {\n\t    this.closest(\".swish\")\n\t        .swish('playFile',\n\t\t       { file: store,\n\t\t\t newTab: true,\n\t\t\t noHistory: true,\n\t\t\t prompt: prompt\n\t\t       });\n\t    return this;\n\t  }\n\t}\n\n\tif ( editors )\n\t  editors.prologEditor('showTracePort', prompt);\n      }\n\n      return this;\n    },\n\n\n    /**\n     * Add a new tab using content\n     * @param {Object} content is the DOM node to use as content for the\n     * tab.\n     * @param {Object} options\n     * @param {Boolean} [options.active] if `true`, make the new tab\n     * active\n     * @param {Boolean} [options.close] if `true`, allow closing the new\n     * tab.\n     * @return {jQuery} the created tab element\n     */\n    addTab: function(content, options) {\n      var ul  = this.tabbed('navTabs');\n      var id  = genId();\n      var tab =\twrapInTab(content, id, options.active);\n\n      this.tabbed('navContent').append(tab);\n\n      var li  = this.tabbed('tabLabel', id, \"New tab\", close, \"select\");\n\n      var create = ul.find(\"a.tab-new\");\n      if ( create.length == 1 )\n\t$(li).insertBefore(create.first().parent());\n      else\n\tul.append(li);\n\n      if ( options.active )\n\t$(li).find(\"a\").first().tab('show');\n\n      return tab;\n    },\n\n    /**\n     * Remove tab with given Id. If the tab is the active tab, make the\n     * previous tab active, or if there is no previous, the next. If the\n     * tabbed environment becomes empty, add a virgin tab.\n     *\n     * @param {String} id is the id of the tab to destroy\n     */\n    removeTab: function(id) {\n      var li  = this.tabbed('navTabs').find(\"a[data-id='\"+id+\"']\").parent();\n      var tab = $(\"#\"+id);\n      var new_active;\n\n      if ( tab.find(\".storage\").storage('unload', \"closetab\") == false )\n\treturn;\n\n      if ( tab.is(\":visible\") )\n\tnew_active = li.prev() || li.next();\n      li.remove();\n\t\t\t\t\t/* HACK: close embedded runners */\n      tab.find(\".prolog-runner\").prologRunner('close');\n      tab.find(\".storage\").storage('close');\n      tab.remove();\n      if ( new_active && new_active.length > 0 ) {\n\tnew_active.find(\"a\").first().tab('show');\n      } else if ( this.tabbed('navContent').children().length == 0 ) {\n\tthis.tabbed('newTab');\n      }\n\n      $(\".storage\").storage('chat_status', true);\n    },\n\n    /**\n     * Show indicated tab.\n     * @param {String} id is the id of the tab to show.\n     */\n    show: function(id) {\n      var a = this.tabbed('navTab', id);\n      if ( a ) {\n\ta.tab('show');\n      }\n\n      $(\".storage\").storage('chat_status', true);\n    },\n\n    /**\n     * Move the argument tab or tab id to the right of all\n     * tabs.\n     */\n    move_right: function(tab) {\n      var id;\n      var ul = this.find(\">ul\");\n\n      if ( typeof(tab) == \"string\" )\n\tid = tab;\n      else\n\tid = tab.attr('id');\n\n      ul.find(\"a[data-id=\"+id+\"]\")\n        .closest(\"li\")\n        .insertBefore(ul.children().last());\n    },\n\n    /**\n     * Create a label (`li`) for a new tab.\n     * @param {String} id is the identifier of the new tab\n     * @param {String} label is the textual label of the new tab\n     * @param {Boolean} close determines whether or nor a close button\n     * is added to the tab.\n     * @param {String} [type=\"pl\"] indicates the type of the tab. This\n     * is used for associating an icon with the tab.\n     */\n    tabLabel: function(id, label, close, type) {\n      var close_button;\n      var chat;\n\n      if ( close )\n      { close_button = glyphicon(\"remove\", \"xclose\");\n\t$(close_button).attr(\"title\", \"Close tab\");\n      }\n      type = type||\"pl\";\n\n      var a1 = $.el.a({class:\"compact\", href:\"#\"+id, \"data-id\":id},\n\t\t      $.el.span({class:\"tab-icon type-icon \"+type}),\n\t\t      $.el.span({class:\"tab-dirty\",\n\t\t                 title:\"Tab is modified. \"+\n\t\t\t\t       \"See File/Save and Edit/View changes\"}),\n\t       chat = $.el.a({class:'tab-chat'}),\n\t\t      $.el.span({class:\"tab-title\"}, label),\n\t\t      close_button);\n      var li = $.el.li({role:\"presentation\"}, a1);\n\n      $(chat).chatbell()\n             .on(\"click\", function(ev) {\n\tvar id = $(ev.target).closest(\"a.compact\").data(\"id\");\n\t$(\"#\"+id).find(\".storage\").storage('chat');\n\treturn false;\n      });\n\n      return li;\n    },\n\n    /**\n     * Calling obj.tabbed('anchor') finds the <a> element\n     * representing the tab label from the node obj that appears\n     * somewhere on the tab\n     */\n    anchor: function() {\n      var tab    = this.closest(\".tab-pane\");\n\n      if ( tab.length == 0 ) {\n\treturn undefined;\t\t/* e.g., fullscreen mode */\n      }\n\n      var tabbed = tab.closest(\".tabbed\");\n      var id     = tab.attr(\"id\");\n      var ul\t = tabbed.tabbed('navTabs');\n      var a      = ul.find(\"a[data-id=\"+id+\"]\");\n\n      return a;\n    },\n\n    /**\n     * Find the storage objects in the tabbed environment in the\n     * order of the tabs.  Note that the content divs maye be ordered\n     * differently.\n     */\n    get_ordered_storage: function() {\n      var elem = this;\n      var result = [];\n\n      this.find(\">ul>li\").each(function() {\n\tvar id = $(this).find(\">a\").data('id');\n\telem.find(\">div.tab-content>div[id=\"+id+\"] .storage\").each(function() {\n\t  result.push(this);\n\t});\n      });\n\n      return $(result);\n    },\n\n    /**\n     * This method is typically _not_ called on the tab, but on some\n     * inner element of the tab.  It changes the title of the tab.\n     * @param {String} title is the new title for the tab.\n     * @param {String} [type=\"pl\"] is the new type for the tab.\n     */\n    title: function(title, type) {\n      var a = this.tabbed('anchor');\n\n      if ( a ) {\n\ta.find(\".tab-title\").text(title);\n\tif ( type ) {\n\t  var icon = a.find(\".tab-icon\");\n\t  icon.removeClass();\n\t  icon.addClass(\"tab-icon type-icon \"+type);\n\t}\n      }\n\n      return this;\n    },\n\n    /**\n     * Set the chat message feedback for this tab\n     * @param {Object} [chats]\n     * @param {Number} [chats.count] number of available chat messages\n     * on the document.\n     */\n    chats: function(chats) {\n      var a = this.tabbed('anchor');\n\n      if ( a ) {\n\ta.find(\".chat-bell\").chatbell('update', chats);\n      }\n\n      return this;\n    },\n\n    /**\n     * Increment the chat count and possibly associate the bell\n     * with the document identifier.\n     * @param {String} [docid] is the document identifier to associate\n     * with.\n     */\n    'chats++': function(docid) {\n      var a = this.tabbed('anchor');\n\n      if ( a ) {\n\ta.find(\".chat-bell\").chatbell('chats++', docid);\n      }\n\n      return this;\n    },\n\n\n    /**\n     * Default empty tab content that allows the user to transform\n     * the tab into the desired object.\n     * @return {Object} containing content for the new tab\n     */\n    tabSelect: function() {\n      var data = this.data(pluginName);\n      var dom = $.el.div({class:\"tabbed-select\"},\n\t\t\t $.el.div({class: \"tabbed-create\"},\n\t\t\t\t  $.el.label({class: \"tabbed-left\"},\n\t\t\t\t\t     \"Create a \"),\n\t\t\t\t  g=$.el.div({class:\"btn-group\",role:\"group\"}),\n\t\t\t\t  $.el.label({class: \"tabbed-right\"}, \"here\")));\n      var types = [];\n\n      for(var k in data.tabTypes) {\n\tif ( data.tabTypes.hasOwnProperty(k) &&\n\t     data.tabTypes[k].order )\n\t  types.push(k);\n      }\n      types.sort(function(a,b) {\n\treturn data.tabTypes[a].order - data.tabTypes[b].order;\n      });\n\n      for(var i = 0; i<types.length; i++) {\n\tvar type = data.tabTypes[types[i]];\n\n\t$(g).append($.el.button({ type:\"button\",\n\t\t\t\t  class:\"btn btn-primary\",\n\t\t\t\t  \"data-type\":type.typeName,\n\t\t\t\t  \"data-ext\":type.dataType\n\t\t\t\t},\n\t\t\t\ttype.label));\n      }\n\n      $(g).on(\"click\", \".btn\", function(ev) {\n\tvar type    = $(ev.target).data('type');\n\tvar tab     = $(ev.target).closest(\".tab-pane\");\n\tvar content = $.el.div();\n\tvar options = $.extend({}, tabbed.tabTypes[type]);\n\tvar profile = tab.find(\"label.active > input[name=profile]\").val();\n\n\tif ( profile ) {\n\t  options.profile = profile;\n\t  options.value   = tab.tabbed('profileValue', profile,\n\t\t\t\t       tabbed.tabTypes[type].dataType);\n\t  if ( options.value != undefined )\n\t    preferences.setVal(\"default-profile\", profile);\n\t}\n\n\ttab.html(\"\");\n\ttab.tabbed('title', options.label, options.dataType);\n\ttab.append(content);\n\ttabbed.tabTypes[type].create(content, options);\n      });\n      $(g).addClass(\"swish-event-receiver\");\n      $(g).on(\"download save fileInfo print\", function(ev) {\n\tvar tab = $(ev.target).closest(\".tab-pane\");\n\tif ( tab.is(\":visible\") ) {\n\t  var typelabel = { \"download\" : \"you wish to download\",\n\t\t\t    \"save\"     : \"you wish to save\",\n\t\t\t    \"print\"    : \"you wish to print\",\n\t\t\t    \"fileInfo\" : \"for which you want details\"\n\t  };\n\n\t  modal.alert(\"Please activate the tab \"+typelabel[ev.type]);\n\t  ev.stopPropagation();\n\t}\n      });\n      $(g).on(\"profile-selected\", function(ev, profile) {\n\t$(ev.target).find(\"button\").each(function() {\n\t  $(this).prop('disabled',\n\t\t       profile.type.indexOf($(this).data('ext')) < 0);\n\t});\n      });\n\n      return dom;\n    },\n\n    /**\n     * Find sources\n     */\n    searchForm: function() {\n      var sform = $.el.form({class: \"search-sources\"},\n\t$.el.label({class:\"control-label\"}, 'Open source file containing'),\n        $.el.div(\n\t  {class: \"input-group\"},\n\t  $.el.input({ type: \"text\",\n\t\t       class: \"form-control search\",\n\t\t       placeholder: \"Search sources\",\n\t\t       'data-search-in': \"sources store_content\",\n\t\t     }),\n\t  $.el.div({ class: \"input-group-btn\" },\n\t\t   $.el.button({class:\"btn btn-default\", type:\"submit\"},\n\t\t\t       $.el.i({class:\"glyphicon glyphicon-search\"})))),\n\t$.el.div({class: \"input-group\"},\n\t  form.fields.radio(\"smatch\",\n\t    [ { label:\"Start of line\", value:\"sol\"},\n\t      { label:\"Start of word\", value:\"sow\", active:true},\n\t      { label:\"Anywhere\", value:\"anywhere\" }\n\t    ])));\n      $(sform).find(\"input.search\").search();\n\n      return sform;\n    },\n\n    sourceList: function() {\n\n\n    },\n\n    profileForm: function() {\n      if ( config.swish.profiles && config.swish.profiles.length > 0 ) {\n\tvar def;\n\n\tfor(var i=0; i<config.swish.profiles.length; i++) {\n\t  delete config.swish.profiles[i].active;\n\t}\n\n\tif ( (def=preferences.getVal(\"default-profile\")) ) {\n\t  for(var i=0; i<config.swish.profiles.length; i++) {\n\t    if ( config.swish.profiles[i].value == def )\n\t      config.swish.profiles[i].active = true\n\t  }\n\t} else {\n\t  config.swish.profiles[0].active = true;\n\t}\n\n\tvar pform =\n\t$.el.div(\n\t  {class:\"tabbed-profile\"},\n\t  $.el.label({class: \"tabbed-left\"}, \"based on\"),\n\t  $.el.div({class: \"input-group select-profile\"},\n\t\t   form.fields.radio(\"profile\", config.swish.profiles)),\n\t  $.el.label({class: \"tabbed-right\"}, \"profile\"));\n\n\t$(pform).on(\"click\", function(ev) {\n\t  var select = $(ev.target).find(\"input\").val();\n\t  var profile = profileObject(select);\n\t  $(ev.target).closest(\".tab-pane\")\n\t\t      .find(\".tabbed-create .btn-group\")\n\t\t      .trigger(\"profile-selected\", profile);\n\t});\n\n\treturn pform;\n      }\n    },\n\n    profileValue: function(name, ext) {\n      var url = config.http.locations.swish + \"profile/\" + name + \".\" + ext;\n      return $.ajax({ url: url,\n\t\t      type: \"GET\",\n\t\t      data: {format: \"raw\"},\n\t\t      async: false,\n\t\t      error: function(jqXHR) {\n\t\t\tmodal.ajaxError(jqXHR);\n\t\t      }\n      }).responseText;\n    },\n\n    /**\n     * Get the UL list that represents the nav tabs\n     */\n    navTabs: function() {\n      return this.find(\"ul.nav-tabs\").first();\n    },\n\n    navTab: function(id) {\n      var a = this.find(\"ul.nav-tabs\").first().find(\"a[data-id='\"+id+\"']\");\n      if ( a.length > 0 )\n\treturn a;\n    },\n\n    navContent: function() {\n      return this.find(\"div.tab-content\").first();\n    }\n  }; // methods\n\n  /**\n   * Wrap a content element in a Bootstrap tab content.\n   * @param {Object} dom is the object that must be wrapped\n   * @param {String} id is the identifier to give to the new content\n   * @param {Boolean} active sets the tab to active if `true`\n   * @return {jQuery} `div` object of class `tab-pane` and the\n   * passed `id`.\n   */\n  function wrapInTab(dom, id, active) {\n    $(dom).wrap('<div role=\"tabpanel\" class=\"tab-pane\" id=\"'+id+'\"></div>');\n    var wrapped = $(dom).parent();\n\n    if ( active )\n      wrapped.addClass(\"active\");\n\n    return wrapped;\n  }\n\n  function glyphicon(glyph, className) {\n    var span = $.el.span({class:\"glyphicon glyphicon-\"+glyph});\n\n    if ( className )\n      $(span).addClass(className);\n\n    return span;\n  }\n\n  function genId()\n  { return \"tabbed-tab-\"+tabid++;\n  }\n\n  function profileObject(name) {\n    if ( config.swish.profiles ) {\n      for(var i=0; i<config.swish.profiles.length; i++) {\n\tif ( config.swish.profiles[i].value == name )\n\t  return config.swish.profiles[i];\n      }\n    }\n  }\n\n  /**\n   * <Class description>\n   *\n   * @class tabbed\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.tabbed = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n  return tabbed;\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2016, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * RequireJS module providing some general support methods for accessing\n * Prolog\n *\n * @version 0.1.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\n/* Also depends on \"editor\", but requireJS cannot handle cyclic dependencies.\n   As downloadCSV() is only called after initialisation we dropped this\n   dependency.\n*/\n\ndefine('prolog',[ \"jquery\", \"config\", \"form\", \"preferences\",\n\t /* \"editor\" */\n       ],\n       function($, config, form, preferences) {\n  var prolog = {\n    /**\n     * Download query results as CSV.\n     * @param {Object} [options]\n     * @param {String} [options.projection] holds the Prolog projection\n     * variables, separated by commas, e.g., `\"X,Y\"`\n     * @param {String} [options.format=\"prolog\"] holds a string that\n     * defines the variation of the CSV format, e.g., `\"prolog\"` or\n     * `\"rdf\"`\n     * @param {String|Number} [options.limit] defines the max number of\n     * results.\n     * @param {Boolean} [options.distinct] requests only distinct\n     * results.\n     * @param {String} [options.disposition] provides the default for\n     * the download file.  If no extension is given, \".csv\" is added.\n     */\n    downloadCSV: function(query, source, options) {\n      options = options||{};\n      options.disposition = (options.disposition||\n\t\t\t     options.filename||\n\t\t\t     \"swish-results.csv\");\n\n      if ( options.projection ) {\n\tvar formel;\n\tvar format = options.format||\"prolog\";\n\n\tfunction attr(name,value) {\n\t  return $.el.input({type:\"hidden\", name:name, value:value});\n\t}\n\n\tif ( options.distinct )\n\t  query = \"distinct([\"+options.projection+\"],(\"+query+\"))\";\n\tif ( options.limit ) {\n\t  var limit = parseInt(options.limit.replace(/[ _]/g,\"\"));\n\n\t  if ( typeof(limit) == \"number\" ) {\n\t    query = \"limit(\"+limit+\",(\"+query+\"))\";\n\t  } else {\n\t    alert(\"Not an integer: \", options.limit);\n\t    return false;\n\t  }\n\t}\n\n\tformel = $.el.form({ method:\"POST\",\n                             action:config.http.locations.pengines+\"/create\",\n\t\t\t     target:\"_blank\"\n\t\t           },\n\t\t\t   attr(\"format\", \"csv\"),\n\t\t\t   attr(\"chunk\", \"10\"),\n\t\t\t   attr(\"solutions\", \"all\"),\n\t\t\t   attr(\"disposition\", options.disposition),\n\t\t\t   attr(\"application\", \"swish\"),\n\t\t\t   attr(\"ask\", query),\n\t\t\t   attr(\"src_text\", source),\n\t\t\t   attr(\"template\", format+\"(\"+options.projection+\")\"));\n\t$(\"body\").append(formel);\n\tformel.submit();\n\t$(formel).remove();\n      } else {\n\tvar vars = $().prologEditor('variables', query, {projection: true});\n\tvar disposition = options.disposition;\n\tif ( disposition.indexOf(\".\") < 0 )\n\t  disposition += \".csv\";\n\n\tfunction infoBody() {\n\t  var formel = $.el.form(\n            {class:\"form-horizontal\"},\n\t    form.fields.projection(vars.join(\",\")),\n\t    form.fields.csvFormat(config.swish.csv_formats,\n\t\t\t\t  preferences.getVal(\"csvFormat\")),\n\t    form.fields.limit(\"10 000\", false),\n\t    form.fields.filename(disposition, 2),\n\t    form.fields.buttons(\n\t      { label: \"Download CSV\",\n\t\taction: function(ev, params) {\n\t\t  ev.preventDefault();\n\t\t  if ( config.swish.csv_formats.length > 1 )\n\t\t    preferences.setVal(\"csvFormat\", params.format);\n\t\t  prolog.downloadCSV(query, source, params);\n\n\t\t  return false;\n\t\t}\n\t      }));\n\t  this.append(formel);\n\t}\n\n\tform.showDialog({ title: \"Download query results as CSV\",\n\t\t\t  body:  infoBody\n\t\t        });\n      }\n\n      return this;\n      },\n\n    /**\n     * Remove the full-stop from a query string\n     */\n    trimFullStop: function(s) {\n      return s.replace(/\\.\\s*$/m, \"\");\n    },\n\n    /**\n     * Default options for $.swish()\n     */\n    options: {\n      application: \"swish\",\n      chunk: 5\n    }\n  }\n\n\t\t /*******************************\n\t\t *\t     PENGINES\t\t*\n\t\t *******************************/\n\n  /**\n   * $.swish(options) creates a new Pengine with given default\n   * options.  The default options are determined by `prolog.options`.\n   * This function expects pengines.js to be already loaded.  The\n   * bootstrapping of that is achieved in `swish.js`.\n   *\n   * @return {Pengine} the created pengine object\n   */\n  $.swish = function(options) {\n    for(var opt in prolog.options) {\n      if ( prolog.options.hasOwnProperty(opt) &&\n\t   !options.hasOwnProperty(opt) ) {\n\toptions[opt] = prolog.options[opt];\n      }\n    }\n\n    return new Pengine(options);\n  };\n\n  return prolog;\n});\n\n\n","(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/hint/templates-hint',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  var templatesMap = [];\n  var Pos = CodeMirror.Pos;\n\n  function startsWith(str, token) {\n    return str.slice(0, token.length).toUpperCase() == token.toUpperCase();\n  }\n\n  function DEBUG(topic) {\n    //console.log.apply(null, Array.slice(arguments, 1));\n  }\n\n  CodeMirror.templatesHint = {};\n\n  function getLabel(proposal) {\n    var template = proposal.template;\n    return document.createTextNode(template.name);\n  }\n\n  var ourMap = {\n    Tab : selectNextVariable,\n    Enter : function(cm) { selectNextVariable(cm, true) },\n    Esc : uninstall,\n    \"Ctrl-Space\": hintValue\n  }\n\n  function TemplateState() {\n    this.marked = [];\n    this.selectableMarkers = [];\n    this.varIndex = -1;\n  }\n\n  function isNested(cm) {\n    return cm._templateStack ? cm._templateStack.length : 0;\n  }\n\n\n  // A Template instance represents an autocompletion template.\n  // It can be parsed from an eclipse-type template string,\n  // or supplied with a pre-parsed token array.\n  //\n  // The token array may consist of the following tokens:\n  //   \"\\n\" (newline character)\n  //       Single newline character per token.\n  //   text (string)\n  //       Normal text, no newline characters allowed.\n  //   { variable: \"name\" }\n  //       Variable token, to be populated by the user.\n  //   { cursor: true }\n  //       The cursor will be placed here after completing the template\n  //   { line_separator: true }\n  //       If the template surrounds existing text, the existing text will be\n  //       placed here. Not implemented currently.\n  function Template(data) {\n    this.name = data.name; // Optional\n    this.description = data.description; // Optional\n    this.text = data.text; // Optional\n    if ( data.varTemplates ) {\n      this.varTemplates = data.varTemplates;\n    }\n    if(data.template != null) {\n      this.source = data.template;\n    } else if(data.tokens != null) {\n      this._tokens = data.tokens;\n    }\n  }\n\n  Template.prototype.tokens = function() {\n    if(this._tokens == null) {\n      this._tokens = parseTemplate(this.source);\n    }\n    return this._tokens;\n  };\n\n  Template.prototype.content = function() {\n    if(this._content == null) {\n      var tokens = this.tokens();\n      var content = '';\n      for ( var i = 0; i < tokens.length; i++) {\n        var token = tokens[i];\n        if (typeof token == 'string') {\n          content += token;\n        } else if (token.variable) {\n          content += token.variable;\n        } else {\n          // Ignore special tokens\n        }\n      }\n      this._content = content;\n    }\n    return this._content;\n  };\n\n  function parseTemplate(content) {\n    var tokens = [];\n    var varParsing = false;\n    var last = null;\n    var token = '';\n    for ( var i = 0; i < content.length; i++) {\n      var current = content.charAt(i);\n      if (current == \"\\n\") {\n        if (token != '') {\n          tokens.push(token);\n        }\n        token = '';\n        tokens.push(current);\n        last = null;\n      } else {\n        var addChar = true;\n        if (varParsing) {\n          if (current == \"}\") {\n            varParsing = false;\n            addChar = false;\n            if(token == 'cursor') {\n              tokens.push({\n                \"cursor\" : true\n              });\n            } else if(token == 'line_selection') {\n              tokens.push({\n                \"line_selection\" : true\n              });\n            } else {\n              tokens.push({\n                \"variable\" : token\n              });\n            }\n            token = '';\n          }\n        } else {\n          if (current == \"$\" && (i + 1) <= content.length) {\n            i++;\n            var next = content.charAt(i);\n            if (next == \"{\") {\n              varParsing = true;\n              addChar = false;\n              if (token != '') {\n                tokens.push(token);\n              }\n              token = '';\n            }\n          }\n\n        }\n        if (addChar && last != \"$\") {\n          token += current;\n          last = current;\n        } else {\n          last = null;\n        }\n      }\n    }\n    if (token != '') {\n      tokens.push(token);\n    }\n    return tokens;\n  }\n\n\n  function getMarkerChanged(cm, textChanged) {\n    var markers = cm.findMarksAt(textChanged.from);\n    if (markers) {\n      for ( var i = 0; i < markers.length; i++) {\n        var marker = markers[i];\n        if (marker._templateVar) {\n          return marker;\n        }\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Track changes.  If the change is outside any template variable,\n   * uninstall() the template editing.  If it is inside, see whether\n   * there are any other template variables with the same name and\n   * update them accordingly.\n   */\n  function onChange(cm, textChanged) {\n    var state = cm._templateState;\n    if (!textChanged.origin || !state || state.updating) {\n      return;\n    }\n    try {\n      state.updating = true;\n      var markerChanged = getMarkerChanged(cm, textChanged);\n      if (markerChanged == null) {\n        uninstall(cm);\n      } else {\n        var posChanged = markerChanged.find();\n        var newContent = cm.getRange(posChanged.from, posChanged.to);\n        for ( var i = 0; i < state.marked.length; i++) {\n          var marker = state.marked[i];\n          if (marker != markerChanged\n              && marker._templateVar == markerChanged._templateVar) {\n            var pos = marker.find();\n            cm.replaceRange(newContent, pos.from, pos.to);\n          }\n        }\n      }\n    } finally {\n      state.updating = false;\n    }\n  }\n\n  function onEndCompletion(cm) {\n    DEBUG(\"template\", \"endCompletion()\", isNested(cm));\n    if ( isNested(cm) )\n      uninstall(cm, true);\n  }\n\n  function selectNextVariable(cm, exitOnEnd) {\n    var state = cm._templateState;\n    if (state.selectableMarkers.length > 0) {\n      state.varIndex++;\n      if (state.varIndex >= state.selectableMarkers.length) {\n        // If we reach the last token and exitOnEnd is true, we exit instead of\n        // looping back to the first token.\n        if (exitOnEnd) {\n          exit(cm);\n          return;\n        }\n        state.varIndex = 0;\n      }\n      var marker = state.selectableMarkers[state.varIndex];\n      var pos = marker.find();\n      cm.setSelection(pos.from, pos.to);\n      var templateVar = marker._templateVar;\n      for ( var i = 0; i < state.marked.length; i++) {\n        var m = state.marked[i];\n        if (m == marker) {\n          m.className = \"\";\n          m.startStyle = \"\";\n          m.endStyle = \"\";\n        } else {\n          if (m._templateVar == marker._templateVar) {\n            m.className = \"CodeMirror-templates-variable-selected\";\n            m.startStyle = \"\";\n            m.endStyle = \"\";\n          } else {\n            m.className = \"CodeMirror-templates-variable\";\n            m.startStyle = \"CodeMirror-templates-variable-start\";\n            m.endStyle = \"CodeMirror-templates-variable-end\";\n          }\n        }\n      }\n      cm.refresh();\n    } else {\n      // No tokens - exit.\n      exit(cm);\n    }\n  }\n\n  /**\n   * Recursively use hinting for the values\n   */\n  function hintValue(cm) {\n    var state  = cm._templateState;\n    var marker = state.selectableMarkers[state.varIndex];\n    var prev   = {state:state};\n\n    if ( cm._hintTemplateMarker )\n      prev.marker = cm._hintTemplateMarker;\n\n    if ( !cm._templateStack )\n      cm._templateStack = [];\n    cm._templateStack.push(prev);\n    delete cm._templateState;\n\n    function samePos(p1, p2) {\n      return p1.ch == p2.ch && p1.line == p2.line;\n    }\n\n    cm._hintTemplateMarker = marker;\n    var pos = marker.find();\n    var sels = cm.listSelections();\n    if ( sels.length == 1 &&\n\t samePos(sels[0].anchor, pos.from) &&\n\t samePos(sels[0].head,   pos.to) ) {\n      cm.replaceRange(\"\\u2630\", pos.from, pos.to);\n    }\n\n    CodeMirror.commands.autocomplete(cm);\n  }\n\n  Template.prototype.insert = function(cm, data) {\n    var template = this;\n    var nested = isNested(cm);\n\n    DEBUG(\"template\", \"Insert, nested\", nested, \"template\", template);\n    if ( cm._templateState || nested ) {\n      DEBUG(\"template\", \"Uninstall from insert()\", nested);\n      uninstall(cm);\n    }\n\n    if ( template.text ) {\n      cm.replaceRange(template.text, data.from, data.to);\n      return;\n    }\n\n    var state = new TemplateState();\n    cm._templateState = state;\n\n    var tokens = this.tokens();\n    var content = '';\n    var line = data.from.line;\n    var col = data.from.ch;\n    var markers = [];\n    var variables = [];\n    var cursor = null;\n    for ( var i = 0; i < tokens.length; i++) {\n      var token = tokens[i];\n      if(typeof token == 'string') {\n        content += token;\n        if (token == \"\\n\") {\n          line++;\n          col = 0;\n        } else {\n          col += token.length;\n        }\n      } else if (token.variable) {\n        content += token.variable;\n        var from = Pos(line, col);\n        var to = Pos(line, col\n            + token.variable.length);\n        var selectable = variables[token.variable] != false;\n        col += token.variable.length;\n        markers.push({\n          from : from,\n          to : to,\n          variable : token.variable,\n          selectable : selectable\n        });\n        variables[token.variable] = false;\n      } else if(token.cursor) {\n        cursor = Pos(line, col);\n      } else {\n        // Unhandled tokens, e.g. line_selection. Ignore.\n      }\n    }\n\n    var from = data.from;\n    var to = data.to;\n    var startLine = from.line;\n    cm.replaceRange(content, from, to);\n\n    for ( var i = 0; i < markers.length; i++) {\n      function subTemplate(tvar) {\n\tif ( template.varTemplates && template.varTemplates[tvar] )\n\t  return template.varTemplates[tvar];\n\treturn undefined;\n      }\n\n      var marker = markers[i], from = marker.from, to = marker.to;\n      var markText = cm.markText(from, to, {\n        className : \"CodeMirror-templates-variable\",\n        startStyle : \"CodeMirror-templates-variable-start\",\n        endStyle : \"CodeMirror-templates-variable-end\",\n        inclusiveLeft : true,\n        inclusiveRight : true,\n        clearWhenEmpty: false,  // Works in CodeMirror 4.6\n        _templateVar : marker.variable,\n\t_templates : subTemplate(marker.variable)\n      });\n      state.marked.push(markText);\n      if (marker.selectable == true) {\n        state.selectableMarkers.push(markText);\n      }\n    }\n\n    if (cursor != null) {\n      state.cursor = cm.setBookmark(cursor);\n    }\n\n    // Auto-indent everything except the first line.\n    // This will typically indent the rest of the code according\n    // to the indentation of the first line.\n    // We do the indentation after creating the markers, so that the\n    // markers are moved accordingly.\n    var lines = content.split(\"\\n\");\n    for ( var x = 1; x < lines.length; x++) {\n      var targetLine = startLine + x;\n      cm.indentLine(targetLine);\n    }\n\n    // Have to be before selectNextVariable, since selectNextVariable\n    // may exit and remove the keymap again.\n    if ( !nested ) {\n      cm.on(\"change\", onChange);\n      DEBUG(\"template\", \"Installing endCompletion\");\n      cm.on(\"endCompletion\", onEndCompletion);\n      cm.addKeyMap(ourMap);\n    }\n\n    selectNextVariable(cm, true);\n  }\n\n  function exit(cm) {\n    // Move to ${cursor} in the template, then uninstall.\n    var cursor = cm._templateState.cursor;\n    if (cursor != null) {\n      var cursorPos = cursor.find();\n      if (cursorPos != null) {\n        cm.setSelection(cursorPos, cursorPos);\n      }\n    }\n    uninstall(cm);\n  }\n\n  function uninstall(cm, canceled) {\n    var state = cm._templateState;\n\n    function canceledMarker() {\n      DEBUG(\"template\", \"Canceled?\");\n\n      for ( var i = 0; i < state.marked.length; i++) {\n\tvar mark = state.marked[i];\n\tif ( mark == cm._hintTemplateMarker ) {\n\t  var pos = mark.find();\n\t  if ( pos && cm.getRange(pos.from, pos.to) == \"\\u2630\" )\n\t    cm.replaceRange(mark._templateVar, pos.from, pos.to);\n\t}\n      }\n    }\n\n    if ( state ) {\n      DEBUG(\"template\", \"Uninstall, clearing: \", state.marked.length);\n      for ( var i = 0; i < state.marked.length; i++) {\n\tstate.marked[i].clear();\n      }\n      if (state.cursor != null) {\n\tstate.cursor.clear();\n      }\n      state.marked.length = 0;\n      state.selectableMarkers.length = 0;\n    } else {\n      DEBUG(\"template\", \"Uninstall, no state\");\n    }\n\n    if ( cm._templateStack && cm._templateStack.length > 0 ) {\n      DEBUG(\"template\", \"Popping from level\", cm._templateStack.length);\n      var prev = cm._templateStack.pop();\n      state = cm._templateState = prev.state;\n      if ( canceled && cm._hintTemplateMarker )\n\tcanceledMarker();\n      if ( prev.marker ) {\n\tcm._hintTemplateMarker = prev.marker;\n      } else {\n\tdelete cm._hintTemplateMarker;\n      }\n    } else {\n      DEBUG(\"template\", \"Leaving template mode\");\n      cm.off(\"change\", onChange);\n      cm.off(\"endCompletion\", onEndCompletion);\n      cm.removeKeyMap(ourMap);\n      delete cm._templateState;\n      delete cm._hintTemplateMarker;\n    }\n  }\n\n  CodeMirror.templatesHint.getCompletions = function(cm, completions, text) {\n    var mode = cm.doc.mode.name;\n    var list = templatesMap[mode];\n    if (list) {\n      for ( var i = 0; i < list.length; i++) {\n        var template = list[i];\n        if (startsWith(template.name, text)) {\n          var label = template.name;\n          if (template.description) {\n            label += '- ' + template.description;\n          }\n          var className = \"CodeMirror-hint-template\";\n          if (template.className)\n            className = template.className;\n          var completion = {\n            \"className\" : className,\n            \"text\" : label,\n            \"template\" : template,\n          };\n          completion.data = completion;\n          completion.hint = function(cm, data, completion) {\n            completion.template.insert(cm, data);\n          };\n          completion.info = function(completion) {\n            var content = completion.template.content();\n\n            if (CodeMirror.runMode) {\n              var result = document.createElement('div');\n              result.className = 'cm-s-default';\n              if (cm.options && cm.options.theme)\n                result.className = 'cm-s-' + cm.options.theme;\n              CodeMirror.runMode(content, cm.getMode().name, result);\n              return result;\n            }\n            return content;\n          };\n          completions.push(completion);\n        }\n      }\n    }\n  }\n\n  CodeMirror.templatesHint.Template = Template;\n\n  CodeMirror.templatesHint.addTemplates = function(templates) {\n    var context = templates.context;\n    if (context) {\n      var list = templatesMap[context];\n      if (!list) {\n        list = [];\n        templatesMap[context] = list;\n      }\n      templates.templates.forEach(function(template) {\n        list.push(new Template(template));\n      });\n    }\n  }\n\n});\n\n\n","// Loosely based on codemirror/addon/hint/xml-hint.js\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/prolog/prolog-template-hint',[ \"../../lib/codemirror\",\n\t     \"../../addon/hint/templates-hint\",\n\t     \"jquery\", \"config\", \"laconic\"\n\t   ], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror, TemplatesHint, $, config) {\n  \"use strict\";\n\n  var templates = config.swish.templates || [];\n\n  function PrologHint(options) {\n    var hint = this;\n\n    function modeToTemplate(mode) {\n      var varp = /[-+?:^@!]*([A-Z][A-Za-z_0-9]*)/g;\n      var detp = /\\bis\\s+(det|nondet|semidet|fail|multi)$/;\n\n      if ( !hint.template ) {\n\thint.template    = mode.replace(varp, \"$${$1}\")\n\t\t\t       .replace(detp, \"\");\n\tif ( !hint.template.match(/\\${cursor}/) )\n\t  hint.template += \"${cursor}\";\n      }\n\n      if ( !hint.displayText )\n\thint.displayText = mode;\n\n      if ( !hint.varTemplates ) {\n\tvar metav = mode.match(/:[A-Z][A-Za-z_0-9]*/g);\n\n\tif ( metav && metav.length > 0 ) {\n\t  var vt = {};\n\n\t  for(var i=0; i<metav.length; i++) {\n\t    vt[metav[i].substring(1)] = templates;\n\t  }\n\t  hint.varTemplates = vt;\n\t}\n      }\n    }\n\n    var copy = [ \"template\",\n\t\t \"displayText\",\n\t\t \"text\",\n\t\t {from:\"summary\", to:\"description\"},\n\t\t \"className\",\n\t\t \"varTemplates\"\n\t       ];\n\n    if ( typeof(options) == \"string\" ) {\n      this.displayText = options;\n      this.text = options;\n    } else {\n      for(var i=0; i<copy.length; i++) {\n\tvar spec = copy[i];\n\tif ( typeof(spec) == \"string\" ) {\n\t  if ( options[spec] )\n\t    this[spec] = options[spec];\n\t} else {\n\t  if ( options[spec.from] )\n\t    this[spec.to] = options[spec.from];\n\t}\n      }\n\n      if ( options.mode )\n\tmodeToTemplate(options.mode);\n\n      if ( options.classes )\n\toptions.className = options.classes.join(\" \");\n    }\n\n    /**\n     * Render a completion label inside a <li>.  This hook is called\n     * from standard CM addons/hint/show-hint.js to render the hinting\n     * alternatives.\n     * @param li is the list element\n     * @param data seems to be the result from getHints()\n     * @param me is this PrologHint instance\n     */\n    this.render = function(li, data, me) {\n      $(li).append(me.displayText);\n    }\n    /**\n     * Provide an HTML string or element that describes the completion.\n     * used by addon/hint/show-context-info.js\n     * @param me is this PrologHint instance\n     */\n    this.info = function(me) {\n      return me.description;\n    }\n  }\n\n  PrologHint.prototype.hint = function(cm, data, completion) {\n    var template = new CodeMirror.templatesHint.Template(this);\n    template.insert(cm, data);\n  };\n\n  function hintsFor(cm, state, options) {\n    var text = state.token.string;\n    var results = [];\n    var myTemplates = templates;\n\n    function startsWith(str, start) {\n      return str.slice(0, start.length) == start;\n    }\n\n    if ( cm._hintTemplateMarker ) {\n      if ( text == \"\\u2630\" )\n\ttext = \"\";\n      myTemplates = cm._hintTemplateMarker._templates;\n    }\n\n    var symbol = text.length > 0 && !text.match(/\\w/);\n\n    if ( myTemplates ) {\n      for(var i=0; i<myTemplates.length; i++) {\n\tvar templ = myTemplates[i];\n\tif ( typeof(templ) == \"string\" ) {\n\t  if ( startsWith(templ, text) )\n\t    results.push(new PrologHint(templ));\n\t} else {\n\t  var fields = [\"name\", \"mode\", \"template\", \"text\"];\n\n\t  if ( symbol ) {\n\t    if ( templ.name && templ.name.indexOf(text) >= 0 )\n\t      results.push(new PrologHint(templ));\n\t  } else {\n\t    for(var j=0; j<fields.length; j++) {\n\t      if ( templ[fields[j]] )\n\t      { if ( startsWith(templ[fields[j]], text) ) {\n\t\t  results.push(new PrologHint(templ));\n\t        }\n\t\tbreak;\n\t      }\n\t    }\n\t  }\n\t}\n      }\n    }\n\n    if ( results.length == 0 ) {\t/* Include AnyWord hinting completions */\n      var anyword = CodeMirror.hint.anyword;\n      var opts = (text==\"\"&&cm._hintTemplateMarker) ?\n\t\t  { word: /[A-Z][A-Za-z0-9_]*/ } : options;\n      var anyhint = anyword(cm, opts);\n      for(var i=0; i<anyhint.list.length; i++)\n\tresults.push(new PrologHint(anyhint.list[i]));\n    }\n\n    return { list: results,\n             from: state.position.from,\n\t     to:   state.position.to\n           };\n  }\n\n  function getHints(cm, callback, options) {\n    var state = getState(cm);\n  //console.log(state);\n    var data  = hintsFor(cm, state, options);\n    CodeMirror.attachContextInfo(data);\n    callback(data);\n  }\n  getHints.async = true;\n\n  function getState(cm) {\n    var cur = cm.getCursor();\n    var token = cm.getTokenAt(cur);\n//  var enriched = cm.getEnrichedToken(token);\n    var inner = CodeMirror.innerMode(cm.getMode(), token.state);\n    if (inner.mode.name != \"prolog\") {\n      return null;\n    }\n\n    var tokenPosition = {\n      from: new CodeMirror.Pos(cur.line, token.start),\n      to:   new CodeMirror.Pos(cur.line, token.end)\n    };\n\n    return { token:    token,\n\t     position: tokenPosition\n           };\n  }\n\n  CodeMirror.registerHelper(\"hint\", \"prologTemplate\", getHints);\n\n  return {\n    getHints: getHints,\n    getState: getState\n  };\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Dialog components to interact with the gitty store.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('gitty',[ \"jquery\", \"config\", \"form\", \"modal\", \"laconic\" ],\n       function($, config, form, modal) {\n\n(function($) {\n  var pluginName = 'gitty';\n\n  /** @lends $.fn.gitty */\n  var methods = {\n    /**\n     * @param {Object} options\n     * @param {Object.meta} provides the gitty meta-data\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName)||{};\n\tvar meta = options.meta;\n\tvar tabs;\n\n\tdata.commits = [];\n\tdata.commits[meta.commit] = meta;\n\tdata.commit  = meta.commit;\n\tdata.editor  = options.editor;\n\n\tfunction tab(label, active, id, disabled) {\n\t  var attrs = {role:\"presentation\"};\n\t  var classes = [];\n\t  if ( active   ) classes.push(\"active\");\n\t  if ( disabled ) classes.push(\"disabled\");\n\t  if ( classes != [] )\n\t    attrs.class = classes.join(\" \");\n\t  var elem =\n\t  $.el.li(attrs, $.el.a({href:\"#\"+id, 'data-toggle':\"tab\"}, label));\n\t  return elem;\n\t}\n\n\thenabled = !Boolean(meta.previous);\n\ttabs     = $($.el.div({class:\"tab-content\"}));\n\n\telem.append($.el.ul(\n\t  {class:\"nav nav-tabs\"},\n\t  tab(\"Meta data\", true,  \"gitty-meta-data\"),\n\t  tab(\"History\",   false, \"gitty-history\",  henabled),\n\t  tab(\"Changes\",   false, \"gitty-diff\",     henabled)));\n\telem.append(tabs);\n\n\t/* meta-data tab */\n\ttabs.append($.el.div({ class:\"tab-pane fade in active gitty-meta-data\",\n\t                       id:\"gitty-meta-data\"}));\n\telem.find('[href=\"#gitty-meta-data\"]').on(\"show.bs.tab\", function(ev) {\n\t  elem.gitty('showMetaData');\n\t});\n\n\t/* history tab */\n\ttabs.append($.el.div({ class:\"tab-pane fade gitty-history\",\n\t                       id:\"gitty-history\"}));\n\telem.find('[href=\"#gitty-history\"]').on(\"show.bs.tab\", function(ev) {\n\t  elem.gitty('showHistory');\n\t});\n\n\t/* diff/changes tab */\n\ttabs.append($.el.div({ class:\"tab-pane fade gitty-diff\",\n\t                       id:\"gitty-diff\"}));\n\telem.find('[href=\"#gitty-diff\"]').on(\"show.bs.tab\", function(ev) {\n\t  elem.gitty('showDiff');\n\t});\n\n\telem.data(pluginName, data);\n\n\telem.gitty('showMetaData');\n      });\n    },\n\n    /**\n     * @param is the gitty meta-object\n     * @return {DOM} node holding the title\n     */\n    title: function(meta) {\n      var title = $.el.span(\"File \", $.el.span({class:\"filename\"}, meta.name));\n      if ( meta.symbolic != \"HEAD\" && meta.commit )\n\t$(title).append(\"@\", $.el.span({class:\"sha1 abbrev\"},\n\t\t\t\t       meta.commit.substring(0,7)));\n\n      return title;\n    },\n\n\n\t\t /*******************************\n\t\t *\t     META DATA\t\t*\n\t\t *******************************/\n\n    /**\n     * Show meta data for the current version.  If this is the HEAD,\n     * allow updating the meta-data\n     */\n    showMetaData: function() {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName);\n\tvar tab  = elem.find(\".gitty-meta-data\");\n\tvar formel;\n\tvar meta = data.commits[data.commit];\n\n\tif ( data.metaData == data.commit )\n\t  return;\n\tdata.metaData = data.commit;\n\n\ttab.html(\"\");\n\tformel = $.el.form({class:\"form-horizontal\"},\n\t\t      form.fields.fileName(meta.name, meta.public, meta.example,\n\t\t\t\t\t   true), // disabled\n\t\t      form.fields.title(meta.title),\n\t\t      form.fields.author(meta.author),\n\t\t      form.fields.date(meta.time, \"Date\", \"date\"),\n\t\t      form.fields.tags(meta.tags));\n\n\tif ( meta.symbolic == \"HEAD\" ) {\n\t  $(formel).append(\n\t      form.fields.buttons(\n\t\t{ label: \"Update meta data\",\n\t\t  action: function(ev, newMetaData) {\n\t\t    data.editor.storage('save', newMetaData, \"only-meta-data\");\n\t\t    return false;\n\t\t  }\n\t\t}));\n\t}\n\n\ttab.append(formel);\n      });\n    },\n\n\n\t\t /*******************************\n\t\t *\t     COMMIT LOG\t\t*\n\t\t *******************************/\n\n    /**\n     * Fill the commit log tab\n     */\n    showHistory: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName);\n\tvar tab  = elem.find(\".gitty-history\");\n\tvar meta = data.commits[data.commit];\n\tvar playButton;\n\n\tif ( data.history )\n\t  return;\n\n\toptions = options||{};\n\tif ( !options.depth )\n\t  options.depth = 100;\n\n\ttab.html(\"\");\n\ttab.append($.el.div({class:\"gitty-history-table\"},\n\t\t\t    $.el.table(\n\t  { class:\"table table-striped table-condensed gitty-history\",\n\t    'data-click-to-select':true,\n\t    'data-single-select':true\n\t  },\n\t  $.el.tr($.el.th(\"Comment\"),\n\t\t  $.el.th(\"Date\"),\n\t\t  $.el.th(\"User\"),\n\t\t  $.el.th(\"Changed\")),\n\t  $.el.tbody())));\n\n\tplayButton = form.widgets.glyphIconButton(\n           \"play\",\n\t   { title:\"Open the highlighted version in SWISH\",\n\t     class:\"btn-primary\"\n\t   });\n\ttab.append(playButton);\n\t$(playButton).on(\"click\", function(ev) {\n\t  var row = elem.find(\"tr.success\");\n\t  if ( row.length == 1 ) {\n\t    var commit = row.data('commit');\n\n\t    if ( data.commits[commit].symbolic == \"HEAD\" )\n\t      file = data.commits[commit].name;\n\t    else\n\t      file = commit;\n\n\t    elem.parents(\".swish\").swish('playFile', file);\n\t    $(\"#ajaxModal\").modal('hide');\n\t  }\n\t  return false;\n\t});\n\n\tvar url  = config.http.locations.web_storage\n\t\t + encodeURI(meta.name);\n\n\t$.ajax({ url: url,\n\t\t contentType: \"application/json\",\n\t\t type: \"GET\",\n\t\t data: { format: \"history\",\n\t\t         depth: options.depth,\t/* might skip last */\n\t\t         to: data.commit\n\t\t       },\n\t\t success: function(reply) {\n\t\t   elem.gitty('fillHistoryTable', reply);\n\t\t   data.history = data.commit;\n\t\t },\n\t\t error: function(jqXHDR) {\n\t\t   modal.ajaxError(jqXHR);\n\t\t }\n\t       });\n      });\n    },\n\n    /**\n     * Fill the history table\n     */\n    fillHistoryTable: function(historyobj) {\n      var gitty = this;\n      var data  = this.data(pluginName);\n      var table = this.find(\".table.gitty-history tbody\");\n      var history = historyobj.history ? historyobj.history : historyobj;\n\n      for(var i=0; i<history.length; i++) {\n\tvar h = history[i];\n\n\tif ( !data.commits[h.commit] )\n\t  data.commits[h.commit] = h;\n      }\n\n      function changedAttributes(m1) {\n\tvar m2, diff;\n\tvar elem = $.el.span();\n\n\tif ( m1.previous ) {\n\t  if ( (m2 = data.commits[m1.previous]) &&\n\t       (diff = diffMeta(m1, m2)) ) {\n\t    var change = 0;\n\n\t    for( var d in diff ) {\n\t      if ( diff.hasOwnProperty(d) ) {\n\t\tvar ch = (d == \"name\" ? \"forked \"+m2.name : d);\n\t\t$(elem).append((change++ == 0 ? undefined : \", \"),\n\t\t\t       $.el.span({class:\"change-type\"}, ch));\n\t      }\n\t    }\n\t  }\n\t} else {\n\t  $(elem).append(\"initial\");\n\t}\n\n\treturn elem;\n      }\n\n      if ( historyobj.skipped ) {\n\ttable.append($.el.tr(\n\t  $.el.td({class:\"skipped-commits\",\n\t           colspan:4},\n\t\t  \"(Skipped \"+historyobj.skipped+\" commits)\")));\n      }\n\n      for(var i=0; i<history.length; i++) {\n\tvar h = history[i];\n\tvar tr;\n\n\tif ( i == history.length-1 &&\n\t     h.previous && !data.commit[h.previous] )\n\t  break;\n\n\tvar attrs = {'data-commit':h.commit};\n\tif ( data.commit == h.commit )\n\t  attrs.class = \"success\";\n\n\ttr = $.el.tr(attrs,\n\t\t     h.commit_message ?\n\t\t       $.el.td({class:\"commit-message\"},\n\t\t\t       h.commit_message) :\n\t\t       $.el.td({class:\"commit-message no-comment\"},\n\t\t\t       \"No comment\"),\n\t\t     $.el.td({class:\"date\"},\n\t\t\t     new Date(h.time*1000).toLocaleString()),\n\t\t     $.el.td({class:\"author\"},\n\t\t\t     h.author||\"No author\"),\n\t\t     $.el.td({class:\"changes\"},\n\t\t\t     changedAttributes(h)));\n\ttable.append(tr);\n      }\n\n      table.on(\"click\", \"tr\", function(ev) {\n\tvar tr = $(ev.target).parents(\"tr\");\n\tvar commit = tr.data('commit');\n\n\tgitty.gitty('setCommit', commit);\n      });\n    },\n\n    /**\n     * Select a row in the table and set the title.\n     * @param {String} version is the SHA1 of the new version\n     */\n\n    setCommit: function(commit) {\n      var data = this.data(pluginName);\t/* private data */\n      var h2   = this.parent(\".modal-content\").find(\"h2\");\n\n      h2.html(\"\");\n      h2.append(this.gitty('title', data.commits[commit]));\n      this.find(\"tr.success\").removeClass(\"success\");\n      this.find(\"tr[data-commit=\"+commit+\"]\").addClass(\"success\");\n      data.commit = commit;\n\n      return this;\n    },\n\n\t\t /*******************************\n\t\t *\t       DIFFS\t\t*\n\t\t *******************************/\n\n    /**\n     * Show diff of a given file\n     * @param {Object} options\n     * @param {String} options.file is the file for which to show diffs\n     * @param {String} [options.base] is the base SHA1 (defaults to\n     * HEAD^)\n     */\n\n    showDiff: function() {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName);\n\n\tif ( data.diff == data.commit )\n\t  return;\n\n\telem.find(\".gitty-diff\").html(\"\");\n\tvar url  = config.http.locations.web_storage\n\t\t + encodeURI(data.commit);\n\n\t$.ajax({ url: url,\n\t\t contentType: \"application/json\",\n\t\t type: \"GET\",\n\t\t data: { format: \"diff\"\n\t\t },\n\t\t success: function(reply) {\n\t\t   elem.gitty('fillDiff', reply);\n\t\t   data.diff = data.commit;\n\t\t },\n\t\t error: function(jqXHR) {\n\t\t   modal.ajaxError(jqXHR);\n\t\t }\n\t       });\n      });\n    },\n\n    fillDiff: function(diff) {\n      if ( diff.tags ) this.gitty('diffTags', diff.tags);\n      if ( diff.data ) this.gitty('udiffData', diff.data);\n    },\n\n    diffTags: function(diff) {\n      var tab  = this.find(\".gitty-diff\");\n      var div = $($.el.div({class:\"diff-tags\"},\n\t\t\t    $.el.label(\"Tags\")));\n      var span = $($.el.span({class:\"diff-tags\"}));\n\n      div.append(span);\n\n      function addTag(tag, className) {\n\tspan.append($.el.span({class: \"diff-tag \"+className}, tag));\n      }\n\n      if ( diff.deleted.length ) {\n\tspan.append(\"Removed: \");\n\tfor(var i=0; i<diff.deleted.length; i++)\n\t  addTag(diff.deleted[i], \"deleted\");\n      }\n      if ( diff.added.length ) {\n\tspan.append(diff.deleted.length ? \", \" : \"\", \"Added: \");\n\tfor(var i=0; i<diff.added.length; i++)\n\t  addTag(diff.added[i], \"added\");\n      }\n\n      tab.append(div);\n\n      return this;\n    },\n\n    udiffData: function(diff) {\n      var tab  = this.find(\".gitty-diff\");\n      var lines = diff.split(\"\\n\");\n      var pre = $($.el.pre({class:\"udiff\"}));\n\n      for(var i=0; i<lines.length; i++) {\n\tvar line = lines[i];\n\tvar classmap = { '@': 'udiff-hdr',\n\t\t\t ' ': 'udiff-ctx',\n\t\t\t '+': 'udiff-add',\n\t\t\t '-': 'udiff-del'\n\t\t       };\n\tpre.append($.el.span({class:classmap[line.charAt(0)]}, line),\n\t\t   $.el.br());\n      }\n\n      tab.append(pre);\n    }\n  }; // methods\n\n  /**\n   * <Class description>\n   *\n   * @class gitty\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.gitty = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n  /**\n   * Diff meta data\n   * @returns {Object|null}, where object holds `author`, `title` and/or\n   * `tags`\n   */\n\n  function diffMeta(m1, m2) {\n    var diff = {};\n\n    function diffAttr(a) {\n      if ( (m1[a] || m2[a]) && m1[a] != m2[a] )\n\tdiff[a] = {from: m1[a], to: m2[a]};\n    }\n\n    diffAttr(\"author\");\n    diffAttr(\"title\");\n    diffAttr(\"data\");\n    diffAttr(\"public\");\n    diffAttr(\"example\");\n    diffAttr(\"name\");\n\n    if ( (d=diffTags(m1.tags, m2.tags)) )\n      diff.tags = d;\n\n    return $.isEmptyObject(diff) ? null : diff;\n  }\n\n  function reduceMeta(meta, old) {\n    var r = {};\n\n    for( var k in meta ) {\n      if ( meta.hasOwnProperty(k) ) {\n\tswitch(typeof(meta[k])) {\n\t  case \"object\":\n\t    if ( $.isArray(meta[k]) ) {\n\t      if ( !diffTags(meta[k], old[k]) )\n\t\tcontinue;\n\t    }\n\t    break;\n\t  case \"string\":\n\t  case \"boolean\":\n\t    if ( old[k] == meta[k] )\n\t      continue;\n\t}\n\n\tr[k] = meta[k];\n      }\n    }\n\n    return r;\n  }\n\n  /**\n   * Diff two tag arrays (arrays of strings)\n   * @returns {Object|null}, where object.added is an array with new\n   * tags and object.deleted contains deleted tags.\n   */\n  function diffTags(t1, t2) {\n    var d, diff = {};\n\n    t1 = t1||[];\n    t2 = t2||[];\n\n    function added(t1, t2) {\n      var a = [];\n\n      for(var i=0; i<t2.length; i++) {\n\tif ( t1.indexOf(t2[i]) < 0 )\n\t  a.push(t2[i]);\n      }\n\n      return a;\n    }\n\n    if ( (d=added(t1,t2)).length > 0 ) diff.added = d;\n    if ( (d=added(t2,t1)).length > 0 ) diff.deleted = d;\n\n    return $.isEmptyObject(diff) ? null : diff;\n  }\n\n  return {\n    diffMeta:   diffMeta,\n    reduceMeta: reduceMeta,\n    diffTags:   diffTags\n  };\n});\n\n","/***\nThis is part of jsdifflib v1.0. <http://snowtide.com/jsdifflib>\n\nCopyright (c) 2007, Snowtide Informatics Systems, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n\t* Redistributions of source code must retain the above copyright notice, this\n\t\tlist of conditions and the following disclaimer.\n\t* Redistributions in binary form must reproduce the above copyright notice,\n\t\tthis list of conditions and the following disclaimer in the documentation\n\t\tand/or other materials provided with the distribution.\n\t* Neither the name of the Snowtide Informatics Systems nor the names of its\n\t\tcontributors may be used to endorse or promote products derived from this\n\t\tsoftware without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n***/\n/* Author: Chas Emerick <cemerick@snowtide.com> */\nvar __whitespace = {\" \":true, \"\\t\":true, \"\\n\":true, \"\\f\":true, \"\\r\":true};\n\nvar difflib = {\n\tdefaultJunkFunction: function (c) {\n\t\treturn __whitespace.hasOwnProperty(c);\n\t},\n\t\n\tstripLinebreaks: function (str) { return str.replace(/^[\\n\\r]*|[\\n\\r]*$/g, \"\"); },\n\t\n\tstringAsLines: function (str) {\n\t\tvar lfpos = str.indexOf(\"\\n\");\n\t\tvar crpos = str.indexOf(\"\\r\");\n\t\tvar linebreak = ((lfpos > -1 && crpos > -1) || crpos < 0) ? \"\\n\" : \"\\r\";\n\t\t\n\t\tvar lines = str.split(linebreak);\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tlines[i] = difflib.stripLinebreaks(lines[i]);\n\t\t}\n\t\t\n\t\treturn lines;\n\t},\n\t\n\t// iteration-based reduce implementation\n\t__reduce: function (func, list, initial) {\n\t\tif (initial != null) {\n\t\t\tvar value = initial;\n\t\t\tvar idx = 0;\n\t\t} else if (list) {\n\t\t\tvar value = list[0];\n\t\t\tvar idx = 1;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t\t\n\t\tfor (; idx < list.length; idx++) {\n\t\t\tvalue = func(value, list[idx]);\n\t\t}\n\t\t\n\t\treturn value;\n\t},\n\t\n\t// comparison function for sorting lists of numeric tuples\n\t__ntuplecomp: function (a, b) {\n\t\tvar mlen = Math.max(a.length, b.length);\n\t\tfor (var i = 0; i < mlen; i++) {\n\t\t\tif (a[i] < b[i]) return -1;\n\t\t\tif (a[i] > b[i]) return 1;\n\t\t}\n\t\t\n\t\treturn a.length == b.length ? 0 : (a.length < b.length ? -1 : 1);\n\t},\n\t\n\t__calculate_ratio: function (matches, length) {\n\t\treturn length ? 2.0 * matches / length : 1.0;\n\t},\n\t\n\t// returns a function that returns true if a key passed to the returned function\n\t// is in the dict (js object) provided to this function; replaces being able to\n\t// carry around dict.has_key in python...\n\t__isindict: function (dict) {\n\t\treturn function (key) { return dict.hasOwnProperty(key); };\n\t},\n\t\n\t// replacement for python's dict.get function -- need easy default values\n\t__dictget: function (dict, key, defaultValue) {\n\t\treturn dict.hasOwnProperty(key) ? dict[key] : defaultValue;\n\t},\t\n\t\n\tSequenceMatcher: function (a, b, isjunk) {\n\t\tthis.set_seqs = function (a, b) {\n\t\t\tthis.set_seq1(a);\n\t\t\tthis.set_seq2(b);\n\t\t}\n\t\t\n\t\tthis.set_seq1 = function (a) {\n\t\t\tif (a == this.a) return;\n\t\t\tthis.a = a;\n\t\t\tthis.matching_blocks = this.opcodes = null;\n\t\t}\n\t\t\n\t\tthis.set_seq2 = function (b) {\n\t\t\tif (b == this.b) return;\n\t\t\tthis.b = b;\n\t\t\tthis.matching_blocks = this.opcodes = this.fullbcount = null;\n\t\t\tthis.__chain_b();\n\t\t}\n\t\t\n\t\tthis.__chain_b = function () {\n\t\t\tvar b = this.b;\n\t\t\tvar n = b.length;\n\t\t\tvar b2j = this.b2j = {};\n\t\t\tvar populardict = {};\n\t\t\tfor (var i = 0; i < b.length; i++) {\n\t\t\t\tvar elt = b[i];\n\t\t\t\tif (b2j.hasOwnProperty(elt)) {\n\t\t\t\t\tvar indices = b2j[elt];\n\t\t\t\t\tif (n >= 200 && indices.length * 100 > n) {\n\t\t\t\t\t\tpopulardict[elt] = 1;\n\t\t\t\t\t\tdelete b2j[elt];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tindices.push(i);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tb2j[elt] = [i];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor (var elt in populardict) {\n\t\t\t\tif (populardict.hasOwnProperty(elt)) {\n\t\t\t\t\tdelete b2j[elt];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar isjunk = this.isjunk;\n\t\t\tvar junkdict = {};\n\t\t\tif (isjunk) {\n\t\t\t\tfor (var elt in populardict) {\n\t\t\t\t\tif (populardict.hasOwnProperty(elt) && isjunk(elt)) {\n\t\t\t\t\t\tjunkdict[elt] = 1;\n\t\t\t\t\t\tdelete populardict[elt];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (var elt in b2j) {\n\t\t\t\t\tif (b2j.hasOwnProperty(elt) && isjunk(elt)) {\n\t\t\t\t\t\tjunkdict[elt] = 1;\n\t\t\t\t\t\tdelete b2j[elt];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tthis.isbjunk = difflib.__isindict(junkdict);\n\t\t\tthis.isbpopular = difflib.__isindict(populardict);\n\t\t}\n\t\t\n\t\tthis.find_longest_match = function (alo, ahi, blo, bhi) {\n\t\t\tvar a = this.a;\n\t\t\tvar b = this.b;\n\t\t\tvar b2j = this.b2j;\n\t\t\tvar isbjunk = this.isbjunk;\n\t\t\tvar besti = alo;\n\t\t\tvar bestj = blo;\n\t\t\tvar bestsize = 0;\n\t\t\tvar j = null;\n\t\t\tvar k;\n\t\n\t\t\tvar j2len = {};\n\t\t\tvar nothing = [];\n\t\t\tfor (var i = alo; i < ahi; i++) {\n\t\t\t\tvar newj2len = {};\n\t\t\t\tvar jdict = difflib.__dictget(b2j, a[i], nothing);\n\t\t\t\tfor (var jkey in jdict) {\n\t\t\t\t\tif (jdict.hasOwnProperty(jkey)) {\n\t\t\t\t\t\tj = jdict[jkey];\n\t\t\t\t\t\tif (j < blo) continue;\n\t\t\t\t\t\tif (j >= bhi) break;\n\t\t\t\t\t\tnewj2len[j] = k = difflib.__dictget(j2len, j - 1, 0) + 1;\n\t\t\t\t\t\tif (k > bestsize) {\n\t\t\t\t\t\t\tbesti = i - k + 1;\n\t\t\t\t\t\t\tbestj = j - k + 1;\n\t\t\t\t\t\t\tbestsize = k;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tj2len = newj2len;\n\t\t\t}\n\t\n\t\t\twhile (besti > alo && bestj > blo && !isbjunk(b[bestj - 1]) && a[besti - 1] == b[bestj - 1]) {\n\t\t\t\tbesti--;\n\t\t\t\tbestj--;\n\t\t\t\tbestsize++;\n\t\t\t}\n\t\t\t\t\n\t\t\twhile (besti + bestsize < ahi && bestj + bestsize < bhi &&\n\t\t\t\t\t!isbjunk(b[bestj + bestsize]) &&\n\t\t\t\t\ta[besti + bestsize] == b[bestj + bestsize]) {\n\t\t\t\tbestsize++;\n\t\t\t}\n\t\n\t\t\twhile (besti > alo && bestj > blo && isbjunk(b[bestj - 1]) && a[besti - 1] == b[bestj - 1]) {\n\t\t\t\tbesti--;\n\t\t\t\tbestj--;\n\t\t\t\tbestsize++;\n\t\t\t}\n\t\t\t\n\t\t\twhile (besti + bestsize < ahi && bestj + bestsize < bhi && isbjunk(b[bestj + bestsize]) &&\n\t\t\t\t\ta[besti + bestsize] == b[bestj + bestsize]) {\n\t\t\t\tbestsize++;\n\t\t\t}\n\t\n\t\t\treturn [besti, bestj, bestsize];\n\t\t}\n\t\t\n\t\tthis.get_matching_blocks = function () {\n\t\t\tif (this.matching_blocks != null) return this.matching_blocks;\n\t\t\tvar la = this.a.length;\n\t\t\tvar lb = this.b.length;\n\t\n\t\t\tvar queue = [[0, la, 0, lb]];\n\t\t\tvar matching_blocks = [];\n\t\t\tvar alo, ahi, blo, bhi, qi, i, j, k, x;\n\t\t\twhile (queue.length) {\n\t\t\t\tqi = queue.pop();\n\t\t\t\talo = qi[0];\n\t\t\t\tahi = qi[1];\n\t\t\t\tblo = qi[2];\n\t\t\t\tbhi = qi[3];\n\t\t\t\tx = this.find_longest_match(alo, ahi, blo, bhi);\n\t\t\t\ti = x[0];\n\t\t\t\tj = x[1];\n\t\t\t\tk = x[2];\n\t\n\t\t\t\tif (k) {\n\t\t\t\t\tmatching_blocks.push(x);\n\t\t\t\t\tif (alo < i && blo < j)\n\t\t\t\t\t\tqueue.push([alo, i, blo, j]);\n\t\t\t\t\tif (i+k < ahi && j+k < bhi)\n\t\t\t\t\t\tqueue.push([i + k, ahi, j + k, bhi]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tmatching_blocks.sort(difflib.__ntuplecomp);\n\t\n\t\t\tvar i1 = 0, j1 = 0, k1 = 0, block = 0;\n\t\t\tvar i2, j2, k2;\n\t\t\tvar non_adjacent = [];\n\t\t\tfor (var idx in matching_blocks) {\n\t\t\t\tif (matching_blocks.hasOwnProperty(idx)) {\n\t\t\t\t\tblock = matching_blocks[idx];\n\t\t\t\t\ti2 = block[0];\n\t\t\t\t\tj2 = block[1];\n\t\t\t\t\tk2 = block[2];\n\t\t\t\t\tif (i1 + k1 == i2 && j1 + k1 == j2) {\n\t\t\t\t\t\tk1 += k2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (k1) non_adjacent.push([i1, j1, k1]);\n\t\t\t\t\t\ti1 = i2;\n\t\t\t\t\t\tj1 = j2;\n\t\t\t\t\t\tk1 = k2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (k1) non_adjacent.push([i1, j1, k1]);\n\t\n\t\t\tnon_adjacent.push([la, lb, 0]);\n\t\t\tthis.matching_blocks = non_adjacent;\n\t\t\treturn this.matching_blocks;\n\t\t}\n\t\t\n\t\tthis.get_opcodes = function () {\n\t\t\tif (this.opcodes != null) return this.opcodes;\n\t\t\tvar i = 0;\n\t\t\tvar j = 0;\n\t\t\tvar answer = [];\n\t\t\tthis.opcodes = answer;\n\t\t\tvar block, ai, bj, size, tag;\n\t\t\tvar blocks = this.get_matching_blocks();\n\t\t\tfor (var idx in blocks) {\n\t\t\t\tif (blocks.hasOwnProperty(idx)) {\n\t\t\t\t\tblock = blocks[idx];\n\t\t\t\t\tai = block[0];\n\t\t\t\t\tbj = block[1];\n\t\t\t\t\tsize = block[2];\n\t\t\t\t\ttag = '';\n\t\t\t\t\tif (i < ai && j < bj) {\n\t\t\t\t\t\ttag = 'replace';\n\t\t\t\t\t} else if (i < ai) {\n\t\t\t\t\t\ttag = 'delete';\n\t\t\t\t\t} else if (j < bj) {\n\t\t\t\t\t\ttag = 'insert';\n\t\t\t\t\t}\n\t\t\t\t\tif (tag) answer.push([tag, i, ai, j, bj]);\n\t\t\t\t\ti = ai + size;\n\t\t\t\t\tj = bj + size;\n\t\t\t\t\t\n\t\t\t\t\tif (size) answer.push(['equal', ai, i, bj, j]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn answer;\n\t\t}\n\t\t\n\t\t// this is a generator function in the python lib, which of course is not supported in javascript\n\t\t// the reimplementation builds up the grouped opcodes into a list in their entirety and returns that.\n\t\tthis.get_grouped_opcodes = function (n) {\n\t\t\tif (!n) n = 3;\n\t\t\tvar codes = this.get_opcodes();\n\t\t\tif (!codes) codes = [[\"equal\", 0, 1, 0, 1]];\n\t\t\tvar code, tag, i1, i2, j1, j2;\n\t\t\tif (codes[0][0] == 'equal') {\n\t\t\t\tcode = codes[0];\n\t\t\t\ttag = code[0];\n\t\t\t\ti1 = code[1];\n\t\t\t\ti2 = code[2];\n\t\t\t\tj1 = code[3];\n\t\t\t\tj2 = code[4];\n\t\t\t\tcodes[0] = [tag, Math.max(i1, i2 - n), i2, Math.max(j1, j2 - n), j2];\n\t\t\t}\n\t\t\tif (codes[codes.length - 1][0] == 'equal') {\n\t\t\t\tcode = codes[codes.length - 1];\n\t\t\t\ttag = code[0];\n\t\t\t\ti1 = code[1];\n\t\t\t\ti2 = code[2];\n\t\t\t\tj1 = code[3];\n\t\t\t\tj2 = code[4];\n\t\t\t\tcodes[codes.length - 1] = [tag, i1, Math.min(i2, i1 + n), j1, Math.min(j2, j1 + n)];\n\t\t\t}\n\t\n\t\t\tvar nn = n + n;\n\t\t\tvar group = [];\n\t\t\tvar groups = [];\n\t\t\tfor (var idx in codes) {\n\t\t\t\tif (codes.hasOwnProperty(idx)) {\n\t\t\t\t\tcode = codes[idx];\n\t\t\t\t\ttag = code[0];\n\t\t\t\t\ti1 = code[1];\n\t\t\t\t\ti2 = code[2];\n\t\t\t\t\tj1 = code[3];\n\t\t\t\t\tj2 = code[4];\n\t\t\t\t\tif (tag == 'equal' && i2 - i1 > nn) {\n\t\t\t\t\t\tgroup.push([tag, i1, Math.min(i2, i1 + n), j1, Math.min(j2, j1 + n)]);\n\t\t\t\t\t\tgroups.push(group);\n\t\t\t\t\t\tgroup = [];\n\t\t\t\t\t\ti1 = Math.max(i1, i2-n);\n\t\t\t\t\t\tj1 = Math.max(j1, j2-n);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tgroup.push([tag, i1, i2, j1, j2]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (group && !(group.length == 1 && group[0][0] == 'equal')) groups.push(group)\n\t\t\t\n\t\t\treturn groups;\n\t\t}\n\t\t\n\t\tthis.ratio = function () {\n\t\t\tmatches = difflib.__reduce(\n\t\t\t\t\t\t\tfunction (sum, triple) { return sum + triple[triple.length - 1]; },\n\t\t\t\t\t\t\tthis.get_matching_blocks(), 0);\n\t\t\treturn difflib.__calculate_ratio(matches, this.a.length + this.b.length);\n\t\t}\n\t\t\n\t\tthis.quick_ratio = function () {\n\t\t\tvar fullbcount, elt;\n\t\t\tif (this.fullbcount == null) {\n\t\t\t\tthis.fullbcount = fullbcount = {};\n\t\t\t\tfor (var i = 0; i < this.b.length; i++) {\n\t\t\t\t\telt = this.b[i];\n\t\t\t\t\tfullbcount[elt] = difflib.__dictget(fullbcount, elt, 0) + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfullbcount = this.fullbcount;\n\t\n\t\t\tvar avail = {};\n\t\t\tvar availhas = difflib.__isindict(avail);\n\t\t\tvar matches = numb = 0;\n\t\t\tfor (var i = 0; i < this.a.length; i++) {\n\t\t\t\telt = this.a[i];\n\t\t\t\tif (availhas(elt)) {\n\t\t\t\t\tnumb = avail[elt];\n\t\t\t\t} else {\n\t\t\t\t\tnumb = difflib.__dictget(fullbcount, elt, 0);\n\t\t\t\t}\n\t\t\t\tavail[elt] = numb - 1;\n\t\t\t\tif (numb > 0) matches++;\n\t\t\t}\n\t\t\t\n\t\t\treturn difflib.__calculate_ratio(matches, this.a.length + this.b.length);\n\t\t}\n\t\t\n\t\tthis.real_quick_ratio = function () {\n\t\t\tvar la = this.a.length;\n\t\t\tvar lb = this.b.length;\n\t\t\treturn _calculate_ratio(Math.min(la, lb), la + lb);\n\t\t}\n\t\t\n\t\tthis.isjunk = isjunk ? isjunk : difflib.defaultJunkFunction;\n\t\tthis.a = this.b = null;\n\t\tthis.set_seqs(a, b);\n\t}\n};\n\n\ndefine(\"difflib\", function(){});\n\n","/*\nThis is part of jsdifflib v1.0. <http://github.com/cemerick/jsdifflib>\n\nCopyright 2007 - 2011 Chas Emerick <cemerick@snowtide.com>. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are\npermitted provided that the following conditions are met:\n\n   1. Redistributions of source code must retain the above copyright notice, this list of\n      conditions and the following disclaimer.\n\n   2. Redistributions in binary form must reproduce the above copyright notice, this list\n      of conditions and the following disclaimer in the documentation and/or other materials\n      provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY Chas Emerick ``AS IS'' AND ANY EXPRESS OR IMPLIED\nWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Chas Emerick OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nThe views and conclusions contained in the software and documentation are those of the\nauthors and should not be interpreted as representing official policies, either expressed\nor implied, of Chas Emerick.\n*/\ndiffview = {\n\t/**\n\t * Builds and returns a visual diff view.  The single parameter, `params', should contain\n\t * the following values:\n\t *\n\t * - baseTextLines: the array of strings that was used as the base text input to SequenceMatcher\n\t * - newTextLines: the array of strings that was used as the new text input to SequenceMatcher\n\t * - opcodes: the array of arrays returned by SequenceMatcher.get_opcodes()\n\t * - baseTextName: the title to be displayed above the base text listing in the diff view; defaults\n\t *\t   to \"Base Text\"\n\t * - newTextName: the title to be displayed above the new text listing in the diff view; defaults\n\t *\t   to \"New Text\"\n\t * - contextSize: the number of lines of context to show around differences; by default, all lines\n\t *\t   are shown\n\t * - viewType: if 0, a side-by-side diff view is generated (default); if 1, an inline diff view is\n\t *\t   generated\n\t */\n\tbuildView: function (params) {\n\t\tvar baseTextLines = params.baseTextLines;\n\t\tvar newTextLines = params.newTextLines;\n\t\tvar opcodes = params.opcodes;\n\t\tvar baseTextName = params.baseTextName ? params.baseTextName : \"Base Text\";\n\t\tvar newTextName = params.newTextName ? params.newTextName : \"New Text\";\n\t\tvar contextSize = params.contextSize;\n\t\tvar inline = (params.viewType == 0 || params.viewType == 1) ? params.viewType : 0;\n\n\t\tif (baseTextLines == null)\n\t\t\tthrow \"Cannot build diff view; baseTextLines is not defined.\";\n\t\tif (newTextLines == null)\n\t\t\tthrow \"Cannot build diff view; newTextLines is not defined.\";\n\t\tif (!opcodes)\n\t\t\tthrow \"Canno build diff view; opcodes is not defined.\";\n\t\t\n\t\tfunction celt (name, clazz) {\n\t\t\tvar e = document.createElement(name);\n\t\t\te.className = clazz;\n\t\t\treturn e;\n\t\t}\n\t\t\n\t\tfunction telt (name, text) {\n\t\t\tvar e = document.createElement(name);\n\t\t\te.appendChild(document.createTextNode(text));\n\t\t\treturn e;\n\t\t}\n\t\t\n\t\tfunction ctelt (name, clazz, text) {\n\t\t\tvar e = document.createElement(name);\n\t\t\te.className = clazz;\n\t\t\te.appendChild(document.createTextNode(text));\n\t\t\treturn e;\n\t\t}\n\t\n\t\tvar tdata = document.createElement(\"thead\");\n\t\tvar node = document.createElement(\"tr\");\n\t\ttdata.appendChild(node);\n\t\tif (inline) {\n\t\t\tnode.appendChild(document.createElement(\"th\"));\n\t\t\tnode.appendChild(document.createElement(\"th\"));\n\t\t\tnode.appendChild(ctelt(\"th\", \"texttitle\", baseTextName + \" vs. \" + newTextName));\n\t\t} else {\n\t\t\tnode.appendChild(document.createElement(\"th\"));\n\t\t\tnode.appendChild(ctelt(\"th\", \"texttitle\", baseTextName));\n\t\t\tnode.appendChild(document.createElement(\"th\"));\n\t\t\tnode.appendChild(ctelt(\"th\", \"texttitle\", newTextName));\n\t\t}\n\t\ttdata = [tdata];\n\t\t\n\t\tvar rows = [];\n\t\tvar node2;\n\t\t\n\t\t/**\n\t\t * Adds two cells to the given row; if the given row corresponds to a real\n\t\t * line number (based on the line index tidx and the endpoint of the \n\t\t * range in question tend), then the cells will contain the line number\n\t\t * and the line of text from textLines at position tidx (with the class of\n\t\t * the second cell set to the name of the change represented), and tidx + 1 will\n\t\t * be returned.\t Otherwise, tidx is returned, and two empty cells are added\n\t\t * to the given row.\n\t\t */\n\t\tfunction addCells (row, tidx, tend, textLines, change) {\n\t\t\tif (tidx < tend) {\n\t\t\t\trow.appendChild(telt(\"th\", (tidx + 1).toString()));\n\t\t\t\trow.appendChild(ctelt(\"td\", change, textLines[tidx].replace(/\\t/g, \"\\u00a0\\u00a0\\u00a0\\u00a0\")));\n\t\t\t\treturn tidx + 1;\n\t\t\t} else {\n\t\t\t\trow.appendChild(document.createElement(\"th\"));\n\t\t\t\trow.appendChild(celt(\"td\", \"empty\"));\n\t\t\t\treturn tidx;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction addCellsInline (row, tidx, tidx2, textLines, change) {\n\t\t\trow.appendChild(telt(\"th\", tidx == null ? \"\" : (tidx + 1).toString()));\n\t\t\trow.appendChild(telt(\"th\", tidx2 == null ? \"\" : (tidx2 + 1).toString()));\n\t\t\trow.appendChild(ctelt(\"td\", change, textLines[tidx != null ? tidx : tidx2].replace(/\\t/g, \"\\u00a0\\u00a0\\u00a0\\u00a0\")));\n\t\t}\n\t\t\n\t\tfor (var idx = 0; idx < opcodes.length; idx++) {\n\t\t\tcode = opcodes[idx];\n\t\t\tchange = code[0];\n\t\t\tvar b = code[1];\n\t\t\tvar be = code[2];\n\t\t\tvar n = code[3];\n\t\t\tvar ne = code[4];\n\t\t\tvar rowcnt = Math.max(be - b, ne - n);\n\t\t\tvar toprows = [];\n\t\t\tvar botrows = [];\n\t\t\tfor (var i = 0; i < rowcnt; i++) {\n\t\t\t\t// jump ahead if we've alredy provided leading context or if this is the first range\n\t\t\t\tif (contextSize && opcodes.length > 1 && ((idx > 0 && i == contextSize) || (idx == 0 && i == 0)) && change==\"equal\") {\n\t\t\t\t\tvar jump = rowcnt - ((idx == 0 ? 1 : 2) * contextSize);\n\t\t\t\t\tif (jump > 1) {\n\t\t\t\t\t\ttoprows.push(node = document.createElement(\"tr\"));\n\t\t\t\t\t\t\n\t\t\t\t\t\tb += jump;\n\t\t\t\t\t\tn += jump;\n\t\t\t\t\t\ti += jump - 1;\n\t\t\t\t\t\tnode.appendChild(telt(\"th\", \"...\"));\n\t\t\t\t\t\tif (!inline) node.appendChild(ctelt(\"td\", \"skip\", \"\"));\n\t\t\t\t\t\tnode.appendChild(telt(\"th\", \"...\"));\n\t\t\t\t\t\tnode.appendChild(ctelt(\"td\", \"skip\", \"\"));\n\t\t\t\t\t\t\n\t\t\t\t\t\t// skip last lines if they're all equal\n\t\t\t\t\t\tif (idx + 1 == opcodes.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttoprows.push(node = document.createElement(\"tr\"));\n\t\t\t\tif (inline) {\n\t\t\t\t\tif (change == \"insert\") {\n\t\t\t\t\t\taddCellsInline(node, null, n++, newTextLines, change);\n\t\t\t\t\t} else if (change == \"replace\") {\n\t\t\t\t\t\tbotrows.push(node2 = document.createElement(\"tr\"));\n\t\t\t\t\t\tif (b < be) addCellsInline(node, b++, null, baseTextLines, \"delete\");\n\t\t\t\t\t\tif (n < ne) addCellsInline(node2, null, n++, newTextLines, \"insert\");\n\t\t\t\t\t} else if (change == \"delete\") {\n\t\t\t\t\t\taddCellsInline(node, b++, null, baseTextLines, change);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// equal\n\t\t\t\t\t\taddCellsInline(node, b++, n++, baseTextLines, change);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tb = addCells(node, b, be, baseTextLines, change);\n\t\t\t\t\tn = addCells(node, n, ne, newTextLines, change);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < toprows.length; i++) rows.push(toprows[i]);\n\t\t\tfor (var i = 0; i < botrows.length; i++) rows.push(botrows[i]);\n\t\t}\n\t\t\n\t\trows.push(node = ctelt(\"th\", \"author\", \"diff view generated by \"));\n\t\tnode.setAttribute(\"colspan\", inline ? 3 : 4);\n\t\tnode.appendChild(node2 = telt(\"a\", \"jsdifflib\"));\n\t\tnode2.setAttribute(\"href\", \"http://github.com/cemerick/jsdifflib\");\n\t\t\n\t\ttdata.push(node = document.createElement(\"tbody\"));\n\t\tfor (var idx in rows) rows.hasOwnProperty(idx) && node.appendChild(rows[idx]);\n\t\t\n\t\tnode = celt(\"table\", \"diff\" + (inline ? \" inlinediff\" : \"\"));\n\t\tfor (var idx in tdata) tdata.hasOwnProperty(idx) && node.appendChild(tdata[idx]);\n\t\treturn node;\n\t}\n};\n\n\ndefine(\"diffview\", function(){});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2015-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * View diffs between versions\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('diff',[ \"jquery\", \"difflib\", \"diffview\" ],\n       function() {\n\n(function($) {\n  var pluginName = 'diff';\n\n  /** @lends $.fn.diff */\n  var methods = {\n    /**\n     * Render diff between two strings in the target element (must\n     * be a `<div>`).\n     *\n     * @param {Object} [options]\n     * @param {String} [base] Old version\n     * @param {String} [head] New version\n     * @param {String} [baseName=\"Base text\"] Name for old version\n     * @param {String} [headName=\"Current text\"] Name for current version\n     * @param {Number} [context=3] Number of context lines\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar base        = difflib.stringAsLines(options.base);\n\tvar newtxt      = difflib.stringAsLines(options.head);\n\tvar sm          = new difflib.SequenceMatcher(base, newtxt);\n\tvar opcodes     = sm.get_opcodes();\n\tvar contextSize = options.contextSize == undefined\n\t\t\t\t? 3 : options.contextSize;\n\n\tthis.appendChild(diffview.buildView(\n\t  { baseTextLines: base,\n\t    newTextLines: newtxt,\n\t    opcodes: opcodes,\n\t    baseTextName: options.baseName || \"Base text\",\n\t    newTextName:  options.headName || \"Current text\",\n\t    contextSize: contextSize,\n\t    viewType: $(\"inline\").checked ? 1 : 0\n\t  }));\n      });\n    }\n  }; // methods\n\n  /**\n   * This class is a jQuery wrapper around\n   *\n   * @class diff\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.diff = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Defines the interaction with the `File` menu and gitty storage\n * module of the server.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('storage',[ \"jquery\", \"config\", \"modal\", \"form\", \"gitty\",\n\t \"history\", \"tabbed\", \"utils\",\n\t \"laconic\", \"diff\"\n       ],\n       function($, config, modal, form, gitty, history, tabbed, utils) {\n\n(function($) {\n  var pluginName = 'storage';\n\n  var defaults = {\n    typeName: \"program\",\n    is_clean: true,\n    markClean: function(clean) {}\n  }\n\n  /** @lends $.fn.storage */\n  var methods = {\n    /**\n     * @param {Object} options\n     * @param {Function} options.setValue sets the new document value\n     * @param {Function} options.getValue gets the current document value\n     * @param {Function} options.changeGen identifies the current state\n     * @param {String}   options.cleanData identifies the clean state\n     * @param {String}\t options.cleanCheckpoint is the action that\n     * caused the clean state\n     * @param {Any}\t options.cleanGeneration identifies the clean\n     * state.\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = $.extend({}, defaults, options);\n\n\telem.data(pluginName, data);\t/* store with element */\n\telem.addClass(\"storage unloadable\");\n\telem.storage('update_tab_title');\n\n\t/**\n\t * Execute a method on the storage plugin. This particularly\n\t * avoids handling events that have bubbled up from children\n\t * that have a storage plugin attached, which may happen in\n\t * notebooks.\n\t */\n\tfunction onStorage(ev, method) {\n\t  var target = $(ev.target);\n\n\t  if ( target.hasClass(\"storage\") && target.is(\":visible\") ) {\n\t    var rc = target.storage.apply(\n\t\t       target,\n\t\t       Array.prototype.slice.call(arguments, 1));\n\t    if ( rc == \"propagate\" )\n\t      return;\n\t  }\n\t  ev.stopPropagation();\n\t}\n\n\telem.on(\"save\", function(ev, data) {\n\t  onStorage(ev, 'save', data);\n\t});\n\telem.on(\"download\", function(ev) {\n\t  onStorage(ev, 'download');\n\t});\n\telem.on(\"fileInfo\", function(ev) {\n\t  onStorage(ev, 'info');\n\t});\n\telem.on(\"diff\", function(ev) {\n\t  onStorage(ev, 'diff');\n\t});\n\telem.on(\"revert\", function(ev) {\n\t  onStorage(ev, 'revert');\n\t});\n\telem.on(\"reload\", function(ev) {\n\t  onStorage(ev, 'reload');\n\t});\n\telem.on(\"chat-about-file\", function(ev) {\n\t  onStorage(ev, 'chat');\n\t});\n\telem.on(\"follow-file\", function(ev) {\n\t  onStorage(ev, 'follow');\n\t});\n\telem.on(\"activate-tab\", function(ev) {\n\t\t\t\t\t\t/* TBD: What exactly? */\n\t});\n\telem.on(\"data-is-clean\", function(ev, clean) {\n\t  elem.storage('markClean', clean);\n\t});\n\telem.on(\"fullscreen\", function(ev, val) {\n\t  if ( !val )\n\t    elem.storage('update_tab_title');\n\t});\n\telem.on(\"unload\", function(ev, rc) {\n\t  rc.rc = elem.storage('unload', \"beforeunload\", ev);\n\t});\n\n\telem.storage('chat', (data.meta||{}).chat||'update');\n      });\n    },\n\n    /**\n     * @returns {Boolean} `true` if the storage can represent the\n     * requested type\n     */\n    supportsType: function(src) {\n      var data = this.data(pluginName);\n      var type = tabbed.tabTypes[data.typeName];\n\n      if ( typeof(src) == \"string\" )\n\tsrc = {data:src};\n\n      if ( (src.meta && src.meta.name) || src.url )\n      { var name = (src.meta && src.meta.name) ? src.meta.name : src.url;\n\n\tif ( tabbed.type(name)[\"typeName\"] != type.typeName )\n\t  return false;\n      }\n\n      return true;\n    },\n\n    /**\n     * @param {String|Object} src becomes the new contents of the editor\n     * @param {String} src.data contains the data in the case that\n     * `src` is an object.\n     * @return {Object|String} The string `\"propagate\"` is\n     * returned if the provided src does not match the supported type.\n     */\n    setSource: function(src) {\n      var data = this.data(pluginName);\n\n      if ( typeof(src) == \"string\" )\n\tsrc = {data:src};\n\n      if ( !this.storage('supportsType', src) )\n\treturn undefined;\n\n      if ( this.storage('unload', \"setSource\") == false )\n\treturn false;\n\n      if ( src.meta ) {\n\tdata.file = src.meta.name;\n\tdata.meta = src.meta;\n\tdata.url  = null;\n\tif ( src.meta.symbolic == \"HEAD\" )\n\t  src.url = config.http.locations.web_storage + src.meta.name;\n      } else {\n\tdata.file = null;\n\tdata.meta = null;\n      }\n      data.url     = src.url;\n      data.st_type = src.st_type;\n      data.chats   = src.chats;\n\n      data.setValue(src);\n      data.cleanGeneration = data.changeGen();\n      data.cleanData       = data.getValue();\n      data.cleanCheckpoint = src.cleanCheckpoint || \"load\";\n      data.markClean(true);\n\n      this.storage('update_tab_title');\n\n      if ( !src.url       ) src.url = config.http.locations.swish;\n      if ( !src.noHistory ) history.push({ url: src.url,\n\t\t\t\t\t   reason: 'load'\n\t\t\t\t\t });\n\n      this.storage('chat', src.chat||(src.meta||{}).chat||'update');\n      $(\".storage\").storage('chat_status', true);\n\n      return this;\n    },\n\n    is_clean: function() {\n      var data = this.data(pluginName);\n      return data.isClean(data.cleanGeneration);\n    },\n\n    /**\n     * Set the value, but do not update the clean generation, meta-\n     * data, etc.  This is used for restoring a modified state.\n     * See tabbed.setState().\n     */\n    setValue: function(value) {\n      var data = this.data(pluginName);\n\n      data.setValue(value);\n      this.trigger(\"data-is-clean\", data.isClean(data.cleanGeneration));\n\n      return this;\n    },\n\n    /**\n     * Update the label and icon shown in the tab\n     */\n    update_tab_title: function(action) {\n      return this.each(function() {\n\tvar elem  = $(this);\n\tvar docid = elem.storage('docid');\n\n\tif ( action == 'chats++' ) {\n\t  elem.tabbed('chats++', docid);\n\t} else {\n\t  var data = elem.data(pluginName);\n\t  var file = data.file||data.url;\n\t  var type;\n\t  var title;\n\n\t  if ( !file || !(type = tabbed.type(file)) )\n\t    type = tabbed.tabTypes[data.typeName];\n\n\t  if ( file ) {\n\t    title = filebase(utils.basename(file));\n\t    if ( data.meta &&\n\t\t data.meta.symbolic != \"HEAD\" &&\n\t         data.meta.commit ) {\n\t      title += \"@\" + data.meta.commit.substring(0,7);\n\t    }\n\t  } else {\n\t    title = type.label;\n\t  }\n\n\t  if ( docid && data.chats )\n\t    data.chats.docid = docid;\n\n\t  elem.tabbed('title', title, type.dataType);\n\t  elem.tabbed('chats', data.chats);\n\t}\n      });\n    },\n\n    /**\n     * Load document from the server.\n     */\n    load: function(file) {\n      if ( file ) {\n\tvar that = this;\n\tvar options = this.data(pluginName);\n\n\t$.ajax({ url: config.http.locations.web_storage + file,\n\t\t dataType: \"text\",\n\t\t success: function(data) {\n\t\t   that.storage('setSource',\n\t\t\t\t{ data: data,\n\t\t\t\t  meta: { name:file\n\t\t\t\t        }\n\t\t\t\t});\n\t\t },\n\t\t error: function(jqXHDR) {\n\t\t   modal.ajaxError(jqXHR);\n\t\t }\n\t       });\n      }\n      return this;\n    },\n\n    /**\n     * Revert to upstream version\n     */\n    revert: function() {\n      var data = this.data(pluginName);\n\n      data.setValue(data.cleanData);\n      data.cleanGeneration = data.changeGen();\n      data.markClean(true);\n      return this;\n    },\n\n    /**\n     * Reload from server.\n     * @param {String} file Name of the file to reload.  Default is to\n     * reload the current `data.file`.\n     */\n    reload: function(file) {\n      var elem = this;\n      var data = elem.data(pluginName);\n          file = file||data.file;\n      var url  = config.http.locations.web_storage +\n\t\t encodeURI(file);\n\n      $.ajax({ url: url,\n\t       type: \"GET\",\n\t       data: { format: \"json\" },\n\t       success: function(reply) {\n\t\t reply.url = url;\n\t\t reply.st_type = \"gitty\";\n\t\t reply.noHistory = true;\n\t\t elem.storage('setSource', reply);\n\t\t $(\"#chat\").trigger('send',\n\t\t\t\t    { type:'reloaded',\n\t\t\t\t      file:file,\n\t\t\t\t      commit:reply.meta.commit\n\t\t\t\t    });\n\t       },\n\t       error: function(jqXHR) {\n\t\t modal.ajaxError(jqXHR);\n\t       }\n\t     });\n\n      return this;\n    },\n\n    /**\n     * Save the current document to the server.  Depending on the\n     * arguments, this function implements several forms of saving:\n     *\n     *   - Without arguments arguments, it implements \"Save\".\n     *   - With (\"as\"), it implements \"Save as\", which opens a\n     *     dialog which calls this method again, but now with\n     *     meta-data in the first argument.\n     *   - With ({...}) it performs the save operation of \"Save as\"\n     *   - With ({...}, \"only-meta-data\") it only updates the meta\n     *     data on the server.\n     *\n     * @param {Object} [meta] provides additional meta-information.\n     * Currently defined fields are `author`, `email`,\n     * `title`, `keywords` and `description`. Illegal fields are ignored\n     * by the server.\n     * @param {String} [what] If `\"only-meta-data\"`, only the meta-data\n     * is updated.\n     */\n    save: function(meta, what) {\n      var data   = this.data(pluginName);\n      var type   = tabbed.tabTypes[data.typeName];\n      var url    = config.http.locations.web_storage;\n      var method = \"POST\";\n      var elem   = this;\n      var post;\n\n      if ( (data.st_type == \"filesys\" || data.st_type == \"external\") && data.url )\n\treturn this.storage('saveURL');\n\n      if ( meta == \"as\" ) {\n\tthis.storage('saveAs');\n\treturn this;\n      }\n\n      if ( data.file &&\n\t   ( what == \"only-meta-data\" ||\n\t     ( !(meta && meta.default) &&\n\t       (!meta || meta.name == data.file)\n\t     )\n\t   ) ) {\n\turl += encodeURI(data.file);\n\tmethod = \"PUT\";\n      }\n\n      if ( what == \"only-meta-data\" ) {\n\tif ( $.isEmptyObject(gitty.reduceMeta(meta, data.meta)) ) {\n\t  alert(\"No change\");\n\t  return;\n\t}\n\tpost = { update: \"meta-data\" };\n      } else if ( method == \"POST\" ) {\n\tpost = { data: data.getValue(),\n\t\t type: type.dataType\n\t       };\n      } else {\n\tif ( !data.isClean(data.cleanGeneration) ) {\n\t  post = { data: data.getValue(),\n\t\t   type: type.dataType\n\t\t };\n\t} else if ( gitty.diffTags(data.meta.tags, meta.tags) == null ) {\n\t  alert(\"No change\");\n\t  return;\n\t}\n      }\n\n      if ( meta )\n\tpost.meta = meta;\n      if ( data.meta )\n\tpost.previous = data.meta.commit;\n\n      $.ajax({ url: url,\n               dataType: \"json\",\n\t       contentType: \"application/json\",\n\t       type: method,\n\t       data: JSON.stringify(post),\n\t       success: function(reply) {\n\t\t if ( reply.error ) {\n\t\t   modal.alert(errorString(\"Could not save\", reply));\n\t\t } else {\n\t\t   if ( data.meta &&\n\t\t\tdata.meta.example != reply.meta.example ) {\n\t\t     elem.closest(\".swish\").trigger('examples-changed');\n\t\t   }\n\t\t   data.file = reply.file;\n\t\t   data.meta = reply.meta;\n\t\t   data.st_type = \"gitty\";\n\t\t   data.cleanGeneration = data.changeGen();\n\t\t   data.cleanData       = data.getValue();\n\t\t   data.cleanCheckpoint = \"save\";\n\t\t   data.markClean(true);\n\t\t   modal.feedback({ html: \"Saved\",\n\t\t\t\t    owner: elem\n\t\t                  });\n\n\t\t   if ( method == \"POST\" )\n\t\t     data.chats = {\t\t/* forked file has no chats */\n\t\t       docid: elem.storage('docid'),\n\t\t       total: 0\n\t\t     };\n\t\t   elem.storage('update_tab_title');\n\t\t   elem.storage('chat', (data.meta||{}).chat||'update');\n\t\t   elem.storage('load_messages', reply.messages||[]);\n\t\t   $(\".storage\").storage('chat_status', true);\n\t\t   history.push({url: reply.url, reason: \"save\"});\n\t\t }\n\t       },\n\t       error: function(jqXHR, textStatus, errorThrown) {\n\t\t if ( jqXHR.status == 409 ) {\n\t\t   elem.storage('resolveEditConflict',\n\t\t\t\tJSON.parse(jqXHR.responseText));\n\t\t } else if ( jqXHR.status == 403 ) {\n\t\t   modal.alert(\"Permission denied.  Please try a different name\");\n\t\t } else {\n\t\t   alert('Save failed; click \"ok\" to try again');\n\t\t   elem.storage('saveAs');\n\t\t }\n\t       }\n\t     });\n\n      return this;\n    },\n\n    /**\n     * Provide a Save As dialog\n     */\n    saveAs: function(options) {\n      var data = this.data(pluginName);\n      var meta    = data.meta||{};\n      var editor  = this;\n      var update  = Boolean(data.file);\n      var fork    = data.meta && meta.symbolic != \"HEAD\" && !meta.default;\n      var type    = tabbed.tabTypes[data.typeName];\n      var profile = $(\"#login\").login('get_profile',\n\t\t\t\t      [ \"display_name\", \"avatar\", \"email\",\n\t\t\t\t\t\"identity\"\n\t\t\t\t      ]);\n      var author  = profile.display_name;\n      var modify  = meta.modify;\n      var canmodify;\n\n      if ( meta.public === undefined )\n\tmeta.public = true;\n\n      if ( profile.identity ) {\n\tif ( !modify )\n\t  modify = [\"login\", \"owner\"];\n      } else\n      { modify = [\"any\", \"login\", \"owner\"];\n      }\n\n      if ( profile.identity ) {\n\tcanmodify = (profile.identity == meta.identity ||\n\t\t     !(meta.identity||meta.user));\n      } else {\n\tcanmodify = false;\n      }\n\n      options = options||{};\n\n      function saveAsBody() {\n\tthis.append($.el.form(\n          { class:\"form-horizontal\"},\n\t    form.fields.hidden(\"identity\", profile.identity),\n\t    form.fields.hidden(\"default\", meta.default),\n\t    form.fields.hidden(\"chat\", meta.chat),\n\t    profile.identity ? undefined :\n\t\t\t       form.fields.hidden(\"avatar\", profile.avatar),\n\t    form.fields.fileName(fork ? null: data.file,\n\t\t\t\t meta.public, meta.example),\n\t    form.fields.title(meta.title),\n\t    form.fields.author(author, profile.identity),\n\t    update ? form.fields.commit_message() : undefined,\n\t    form.fields.tags(meta.tags),\n\t    form.fields.modify(modify, canmodify),\n\t    form.fields.follow(profile.email),\n\t    form.fields.buttons(\n\t      { label: fork   ? \"Fork \"+type.label :\n\t\t       update ? \"Update \"+type.label :\n\t\t\t\t\"Save \"+type.label,\n\t\taction: function(ev, as) {\n\t\t\t  editor.storage('save', as);\n\t\t\t  return false;\n\t\t\t}\n\t      })));\n      }\n\n      form.showDialog({ title: options.title ? options.title :\n\t\t\t       fork   ? \"Fork from \"+meta.commit.substring(0,7) :\n\t\t\t       update ? \"Save new version\" :\n\t\t\t                \"Save \"+type.label+\" as\",\n\t\t\tbody:  saveAsBody\n\t\t      });\n\n      return this;\n    },\n\n    /**\n     * Save data to the URL it was loaded from.\n     * FIXME: feedback, allow recompilation (if Prolog source)\n     */\n    saveURL: function() {\n      var options = this.data(pluginName);\n      var data = options.getValue();\n      var type = tabbed.type(options.url)||{};\n      var elem = this;\n\n      if ( options.isClean(options.cleanGeneration) ) {\n\talert(\"No change\");\n\treturn this;\n      }\n\n      $.ajax({ url: options.url,\n               dataType: \"json\",\n\t       contentType: type.contentType||\"text/plain\",\n\t       type: \"PUT\",\n\t       data: data,\n\t       success: function(reply) {\n\t\t if ( reply.error ) {\n\t\t   modal.alert(errorString(\"Could not save\", reply));\n\t\t } else {\n\t\t   options.cleanGeneration = options.changeGen();\n\t\t   options.cleanData       = options.getValue();\n\t\t   options.cleanCheckpoint = \"save\";\n\t\t   options.markClean(true);\n\t\t   modal.feedback({ html: \"Saved\",\n\t\t\t\t    owner: elem\n\t\t                  });\n\t\t }\n\t       },\n\t       error: function(jqXHR) {\n\t\t if ( jqXHR.status == 403 ) {\n\t\t   var url = options.url;\n\t\t   delete(options.meta);\n\t\t   delete(options.st_type);\n\t\t   delete(options.url);\n\t\t   elem.storage('saveAs', {\n\t\t     title: \"<div class='warning'>Could not save to \"+url+\n\t\t\t    \"</div> Save a copy as\"\n\t\t   });\n\t\t } else\n\t\t { modal.ajaxError(jqXHR);\n\t\t }\n\t       }\n\t     });\n\n      return this;\n    },\n\n    /**\n     * Storage was activated (e.g., a tab switch)\n     */\n    activate: function() {\n      var data = this.data(pluginName);\n\n      if ( data && data.url ) {\n\thistory.push({url: data.url, reason: 'activate'});\n      }\n\n      return this;\n    },\n\n    /**\n     * @return {Object} state of a set of storage objects, typically\n     * called from a tabbed environment to save the state of all tabs.\n     */\n    getState: function(always) {\n      var state = {\n        tabs: []\n      };\n\n      this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName);\n\tvar meta = elem.meta || {};\n\tvar h;\n\n\t\t\t\t\t/* avoid incomplete elements */\n\tif ( (data.file || data.url) && data.isClean && data.cleanGeneration ) {\n\t  if ( !meta.name && data.file )\n\t    meta.name = data.file;\n\n\t  var tab = {\n\t    file:    meta.name,\n\t    st_type: data.st_type,\n\t    url:     data.url\n\t  };\n\t  if ( elem[pluginName]('getActive') )\n\t    tab.active = true;\n\t  if ( (h=elem[pluginName]('chatroom_size')) )\n\t    tab.chatroom = h;\n\n\t  state.tabs.push(tab);\n\n\t  if ( always ||\n\t       !data.isClean(data.cleanGeneration) ) {\n\t    tab.meta = meta;\n\t    tab.data = data.getValue();\n\t  }\n\t}\n      });\n\n      return state;\n    },\n\n    /**\n     * Restore a storage object from local (when modified) or remote\n     * version.\n     *\n     * @param {String} name is the name of the document to retrieve.\n     */\n    restoreLocal: function(name) {\n      var str = localStorage.getItem(\"$file$\"+name);\n      var data;\n\n      try {\n\tdata = JSON.parse(str);\n\tif ( typeof(data) != \"object\" )\n\t  data = undefined;\n      } catch(err) {\n\tdata = undefined;\n      }\n\n      if ( data ) {\n\tthis[pluginName]('setSource', data);\n      } else {\n\tthis[pluginName]('reload', name);\n      }\n    },\n\n\t\t /*******************************\n\t\t *\t    EDIT CONFLICTS\t*\n\t\t *******************************/\n\n    resolveEditConflict: function(options) {\n      var bdiv;\n\n      options.storage = this;\n\n      function body() {\n\tvar elem = $(this);\n\n\telem.addClass(\"edit-conflict\");\n\n\tfunction tabLabel(label, active, id, disabled) {\n\t  var attrs = {role:\"presentation\"};\n\t  var classes = [];\n\t  if ( active   ) classes.push(\"active\");\n\t  if ( disabled ) classes.push(\"disabled\");\n\t  if ( classes != [] )\n\t    attrs.class = classes.join(\" \");\n\t  var elem =\n\t  $.el.li(attrs, $.el.a({href:\"#\"+id, 'data-toggle':\"tab\"}, label));\n\t  return elem;\n\t}\n\n\ttabs = $($.el.div({class:\"tab-content\"}));\n\telem.append($.el.ul(\n\t  {class:\"nav nav-tabs\"},\n\t  tabLabel(\"My edits\",    true,  \"merge-my-edits\"),\n\t  tabLabel(\"Their edits\", false, \"merge-server-edits\"),\n\t  tabLabel(\"Conflicts\",   false, \"merge-conflicts\")));\n\telem.append(tabs);\n\n\tfunction tabContent(id, cls) {\n\t  tabs.append($.el.div({class:\"tab-pane fade \"+id+\" \"+cls, id:id}));\n\t  elem.find('[href=\"#'+id+'\"]').on(\"show.bs.tab\", function(ev) {\n\t    elem.storage(id);\n\t  });\n\t}\n\n\ttabContent(\"merge-my-edits\",    \"in active\");\n\ttabContent(\"merge-server-edits\", \"\");\n\ttabContent(\"merge-conflicts\",   \"\");\n\n\telem.data(\"edit-conflict\", options);\n\n\telem.storage('merge-my-edits');\n\n\telem.append(bdiv =\n\t  $.el.div({class:\"form-group\"},\n\t\t   $.el.button({name:\"merge\",\n\t\t\t\tclass:\"btn btn-primary\"},\n\t\t\t       \"Merge\"),\n\t\t   $.el.button({name:\"discard-my-edits\",\n\t\t\t\tclass:\"btn btn-primary\"},\n\t\t\t       \"Discard my changes\"),\n\t\t   $.el.button({name:\"discard-server-edits\",\n\t\t\t\tclass:\"btn btn-primary\"},\n\t\t\t       \"Discard changes on server\"),\n\t\t   $.el.button({name:\"cancel\",\n\t\t\t\tclass:\"btn btn-danger\",\n\t\t\t\t'data-dismiss':\"modal\"},\n\t\t\t       \"Cancel\")));\n\n\n\t$(bdiv).on(\"click\", \"button\", function(ev) {\n\t  elem.storage('editConflictAction', $(ev.target).attr(\"name\"));\n\t  $(ev.target).parents(\".modal\").modal('hide');\n\t  ev.preventDefault();\n\t  return false;\n\t});\n      }\n\n      form.showDialog({ title: \"Edit conflict\",\n\t\t\tbody: body\n\t\t      });\n\n      return this;\n    },\n\n    'merge-my-edits': function() {\n      var data = $(this).data(\"edit-conflict\");\n      $(this).find(\".merge-my-edits\")\n        .empty()\n        .append(udiff(data.edit.me.data));\n    },\n\n    'merge-server-edits': function() {\n      var data = $(this).data(\"edit-conflict\");\n      $(this).find(\".merge-server-edits\")\n        .empty()\n        .append(udiff(data.edit.server.data));\n    },\n\n    'merge-conflicts': function() {\n      var data = $(this).data(\"edit-conflict\");\n      var tab  = $(this).find(\".merge-conflicts\");\n\n      tab.empty();\n      if ( data.patch_status != 0 ) {\n\ttab.append(editConflicts(data.merged));\n      } else {\n\ttab.html(\"No merge conflicts\");\n      }\n    },\n\n    editConflictAction: function(action) {\n      var options = $(this).data(\"edit-conflict\");\n      var data = $(options.storage).data(pluginName);\n\n      if ( action == \"merge\" ) {\n\tdata.setValue(options.merged);\n\tdata.meta.commit = options.edit.server.to.commit;\n      } else if ( action == \"discard-my-edits\" ) {\n\t$(options.storage).storage('reload');\n      } else if ( action == \"discard-server-edits\" ) {\n\tvar data = $(options.storage).data(pluginName);\n\tdata.meta.commit = options.edit.server.to.commit;\n      }\n    },\n\n\n\t\t /*******************************\n\t\t *\t   DOWNLOADING\t\t*\n\t\t *******************************/\n\n    download: function() {\n      var options = this.data(pluginName);\n      var type    = tabbed.tabTypes[options.typeName];\n      var data    = options.getValue();\n      var href    = \"data:text/plain;charset=UTF-8,\"\n\t          + encodeURIComponent(data);\n\n      var a = $.el.a({ href:href,\n\t\t       download:options.file||(\"swish.\"+type.dataType)\n\t\t     });\n      this.append(a);\n      a.click();\n      $(a).remove();\n\n      return this;\n    },\n\n    /**\n     * @param {Object} [options]\n     * @param {String|Boolean} [options.data=false] if `true`, always\n     * include the content of the storage.  If `\"if_modified\"`, only\n     * include the content if it is modified.\n     * @param {String} [options.type] if provided, only return objects\n     * associated with files with the given extension.\n     * @return {Array.Object}\n     */\n    getData: function(options) {\n      var result = [];\n\n      options = options||{};\n\n      this.each(function() {\n\tvar data = $(this).data(pluginName);\n\tvar obj = {};\n\n\tobj.type = data.st_type;\n\tif ( data.url ) obj.url = data.url;\n\tif ( data.meta ) {\n\t  function copyMeta(name) {\n\t    if ( data.meta[name] )\n\t      obj[name] = data.meta[name];\n\t  }\n\n\t  copyMeta(\"name\");\n\t  copyMeta(\"path\");\n\t  copyMeta(\"modified\");\n\t  copyMeta(\"loaded\");\n\t  copyMeta(\"modified_since_loaded\");\n\t  copyMeta(\"module\");\n\t}\n\n\tif ( $(this)[pluginName]('getActive') )\n\t  obj.active = true;\n\n\tif ( !options.type ||\n\t     ( options.name &&\n\t       options.name.split(\".\").pop() == options.type ) ) {\n\t  if ( options.data ) {\n\t    var value = data.getValue();\n\n\t    obj.modified = (value != data.cleanData);\n\t    if ( options.data == true ||\n\t\t (obj.modified && options.data == \"if_modified\") )\n\t      obj.data = value;\n\t  }\n\n\t  result.push(obj);\n        }\n      });\n\n      return result;\n    },\n\n    /**\n     * @return {jQuery|undefined} the jQuery storage element that\n     * matches `to`\n     */\n    match: function(to) {\n      for(var k=0; k<this.length; k++) {\n\tme = $(this[k]);\n\tvar data = me.data(pluginName);\n\n\tif ( to.file && to.file == data.file )\n\t  return me;\n\tif ( to.url && to.url == data.url )\n\t  return me;\n      }\n    },\n\n    /**\n     * Expose associateted tab\n     * @return {jQuery|undefined} storage plugin if tab could be\n     * exposed.\n     */\n    expose: function(reason) {\n      var tab = this.closest(\".tab-pane\");\n      if ( tab.length == 1 ) {\n\tvar tabbed = tab.closest(\".tabbed\");\n\ttabbed.tabbed('show', tab.attr('id'));\n\tif ( reason )\n\t  modal.feedback({ html: reason,\n\t                   owner: this\n\t                 });\n\n\treturn this;\n      }\n    },\n\n    /**\n     * Provide information about the current source in a modal\n     * dialog.\n     */\n    info: function() {\n      var data = this.data(pluginName);\n      var meta = data.meta||{};\n      var editor = this;\n      var title;\n\n      if ( data.st_type == \"gitty\" ) {\n\ttitle = $().gitty('title', meta);\n      } else if ( data.st_type == \"filesys\" ) {\n\ttitle = \"File system -- \" + utils.basename(meta.path);\n      } else if ( data.st_type == \"external\" ) {\n\ttitle = \"External -- \" + data.url;\n      } else {\n\ttitle = \"Scratch source\";\n      }\n\n      function infoBody() {\n\tif ( data.st_type == \"gitty\" ) {\n\t  data.editor = editor;\t\t/* circular reference */\n\t  this.gitty(data);\n\t} else if ( data.st_type == \"filesys\" ) {\n\t  filesysInfo(this, meta);\n\t} else if ( !data.st_type ) {\n\t  this.append($.el.p(\"The source is not associated with a file. \",\n\t\t\t     \"Use \",\n\t\t\t     $.el.b(\"Save ...\"),\n\t\t\t     \" to save the source with meta information.\"\n\t\t\t    ));\n\t}\n      }\n\n      form.showDialog({ title: title,\n\t\t\tbody:  infoBody\n\t\t      });\n\n      return this;\n    },\n\n    /**\n     * Generate diff relative to last checkpoint.\n     */\n    diff: function() {\n      var data = this.data(pluginName);\n      var baseName = { load: \"Loaded text\",\n\t\t       new: \"New text\",\n\t\t       save: \"Saved text\"\n\t\t     };\n\n      function infoBody() {\n\tvar diff = $.el.div();\n\tvar current = data.getValue();\n\n\tthis.append(diff);\n\n\tif ( current == data.cleanData ) {\n\t  $(diff).append($.el.p(\"No changes\"));\n\t} else {\n\t  var rb;\n\t  var buttons = $.el.div({ class:\"btn-group diff\",\n\t\t\t           role:\"group\"\n\t\t\t\t },\n\t\t\t\t $.el.button({ name:\"close\",\n\t\t\t\t\t       'data-dismiss':\"modal\",\n\t\t\t\t               class:\"btn btn-primary\"\n\t\t\t\t\t     },\n\t\t\t\t\t     \"Close\"),\n\t\t\t\t rb=\n\t\t\t\t $.el.button({ name:\"revert\",\n\t\t\t\t               class:\"btn btn-danger\",\n\t\t\t\t\t       'data-dismiss':\"modal\"\n\t\t\t\t\t     },\n\t\t\t\t\t     \"Revert changes\"));\n\t  $(diff).diff({ base: data.cleanData,\n\t\t\t head: current,\n\t\t\t baseName: baseName[data.cleanCheckpoint]\n\t\t       });\n\t  this.append($.el.div({class: \"wrapper text-center\"}, buttons));\n\t  $(rb).on(\"click\", function(ev) {\n\t    $(\".swish-event-receiver\").trigger(\"revert\");\n\t  });\n\t  this.parents(\"div.modal-dialog\").addClass(\"modal-wide\");\n\t}\n      }\n\n      form.showDialog({ title: \"Changes since \" + baseName[data.cleanCheckpoint],\n\t\t\tbody:  infoBody\n\t\t      });\n\n      return this;\n    },\n\n    /**\n     * Get a description of the selection to be transferred with a\n     * chat message.\n     */\n    getSelection: function() {\n      if ( this.hasClass(\"prolog-editor\") ) {\t/* plain editor */\n\tvar sel = this.prologEditor('getSelection');\n\treturn sel ? sel[0].selections : null;\n      } else if ( this.hasClass(\"notebook\") ) {\n\treturn this.notebook('getSelection');\n      } else {\n\tconsole.log(\"Don't know how to get selection from\", this);\n      }\n    },\n\n    /**\n     * @returns {String} description of the selection to use inside\n     * a link or button\n     */\n    getSelectionLabel: function(sel) {\n      function editorLabel(sels) {\n\tvar label = \"\";\n\tfor(var i=0; i<sels.length; i++) {\n\t  var s = sels[i];\n\t  if ( label != \"\" )\n\t    label += \";\";\n\t  label += \"@L\"+(s.from.line+1);\n\t  if ( s.to.line != s.from.line )\n\t    label += \"-\"+(s.to.line+1);\n\t}\n\treturn label;\n      }\n\n      if ( sel[0].selections ) {\n\tvar label = \"\";\n\n\tfor(var i=0; i<sel.length; i++) {\n\t  var ed = sel[i];\n\t  if ( label != \"\" )\n\t    label += \",\";\n\t  label += (ed.cell||\"\") + editorLabel(ed.selections);\n\t}\n\treturn label;\n      } else {\n\treturn editorLabel(sel);\n      }\n    },\n\n    /**\n     * Restore a selection retrieved using `getSelection`.\n     */\n    restoreSelection: function(sel) {\n      if ( this.hasClass(\"prolog-editor\") ) {\t/* plain editor */\n\treturn this.prologEditor('restoreSelection', sel);\n      } else if ( this.hasClass(\"notebook\") ) { /* notebook */\n\treturn this.notebook('restoreSelection', sel);\n      } else {\n\tconsole.log(sel);\n      }\n    },\n\n    /**\n     * @return {Boolean} `true` if storage is in an active tab\n     */\n    getActive: function() {\n      return $(this).closest(\".tab-pane.active\").length == 1;\n    },\n\n    /**\n     * Get a document identification string for chats, status, etc.\n     * @param {String} [type] defines the type of storage supported\n     * @param {Object} [data] is the data object from which to derive\n     * the id.\n     * @return {String} identifier for the document\n     */\n    docid: function(type, data) {\n      data = data||this.data(pluginName);\n\n      if ( !type || type == data.st_type ) {\n\tvar meta = data.meta||{};\n\n\tif ( data.st_type == \"gitty\" ) {\n\t  return \"gitty:\"+meta.name;\n\t} else if ( data.st_type == \"filesys\" ) {\n\t  return \"filesys:\"+meta.path;\n\t} else if ( data.st_type == \"external\" ) {\n\t  return \"url:\"+data.url;\n\t}\n      }\n    },\n\n    /**\n     * Open the chat window for the current file\n     */\n    chat: function(action) {\n      var data = this.data(pluginName);\n      var docid = this.storage('docid', 'gitty');\n\n      if ( docid ) {\n\tvar chat = this.closest(\".tab-pane\").find(\".chatroom\");\n\n\tif ( chat.length > 0 ) {\n\t  if ( action == 'update' )\n\t    chat.chatroom('docid', docid, 'close');\n\t  else\n\t    utils.flash(chat);\n\t} else if ( action != 'update' ) {\n\t  chat = $($.el.div({class:\"chatroom\"}));\n\t  var percentage;\n\n\t  if ( typeof(action) == \"number\" )\n\t    percentage = action;\n\t  else if ( action == 'large' )\n\t    percentage = 80;\n\t  else\n\t    percentage = 20;\n\n\t  chat.chatroom({docid:docid});\n\t  this.tile('split', chat, \"below\", percentage, 150)\n\t      .addClass(\"chat-container\");\n\t}\n      } else if ( action == 'update' ) {\n\tthis.storage('close_chat');\n      } else if ( !data.st_type ) {\n\tmodal.alert(\"You can only chat about a saved document.<br>\"+\n\t\t    \"Please save your document and try again.\");\n      } else {\n\tmodal.alert(\"The chat facility is only available for \"+\n\t\t    \"user-saved files.<br>\"+\n\t\t    \"You can use the <b>Open hangout</b> menu from \"+\n\t\t    \"the top-right bell to access the hangout room.\");\n      }\n\n      return this;\n    },\n\n    /**\n     * Close associated chat\n     */\n    close_chat: function() {\n      this.closest(\".chat-container\").find(\".chatroom\").chatroom('close');\n    },\n\n    /**\n     * @return percentage of the chatroom, `true` when undefined or\n     * `false` if there is no chatroom.\n     */\n    chatroom_size: function() {\n      var tab = this.closest(\".tab-pane\");\n      var cr = tab.find(\".chatroom\").closest(\".pane-wrapper\");\n      if ( cr.length > 0 ) {\n\tvar h = tab.height();\n\tif ( h == 0 )\n\t  return 20;\t\t\t/* default */\n\treturn Math.round(cr.height()*100/h);\n      }\n      return false;\n    },\n\n    /**\n     * Act upon the arrival of a chat message.  Update the tab title.\n     * If the message is not displayed and it is not permanent\n     * (`create == false`) we should not update the counter.\n     */\n    chat_message: function(msg) {\n      if ( !msg.displayed && msg.create == false )\n\treturn this;\n\n      return this.each(function() {\n\tvar elem = $(this);\n\n\tif ( msg.docid == elem.storage('docid') ) {\n\t  var data = elem.data(pluginName);\n\n\t  if ( data.chats ) {\n\t    if ( data.chats.total != undefined ) data.chats.total++;\n\t    if ( data.chats.count != undefined ) data.chats.count++;\n\t  } else {\n\t    data.chats = {total:1};\n\t  }\n\n\t  elem.storage('update_tab_title', 'chats++');\n\t}\n      });\n    },\n\n    /**\n     * Handle (error) messages when reloading a plugin registered using\n     * `:- use_gitty_file(File)`.\n     *\n     * @param {Array.Object} messages\n     */\n\n    load_messages: function(messages) {\n      var warnings = 0;\n      var errors = 0;\n      var html = \"\";\n      var done;\n\n      for(var i=0; i<messages.length; i++) {\n\tvar msg = messages[i];\n\n\tif ( msg.kind == \"warning\" ) {\n\t  warnings++;\n\t} else if ( msg.kind == \"error\" ) {\n\t  errors++;\n\t} else if ( msg.code == done )\n\t{ done = msg.data[0];\n\t  continue;\n\t} else\n\t  continue;\n\n\tif ( msg.html )\n\t  html += msg.html;\n\telse\n\t  html += $($.el.div($.el.pre({class:\"msg-\"+msg.kind},\n\t\t\t\t      msg.data[0]))).html();\n\n\tthis.prologEditor('highlightError', msg);\n      }\n\n      if ( errors || warnings ) {\n\tvar explain;\n\n\texplain = $($.el.div(\n\t\t    $.el.p(\"The following messages where generated while \"+\n\t\t\t   \"compiling the file.  These messages are inserted \"+\n\t\t\t   \"in the editor.\"))).html();\n\n\tmodal.alert(explain + html);\n      } else if ( done ) {\n\tmodal.feedback({ html: done,\n\t\t\t owner: this\n\t\t       });\n      }\n\n      return this;\n    },\n\n    /**\n     * Edit the _follow_ options for this file.\n     */\n\n    follow: function() {\n      var docid = this.storage('docid', 'gitty');\n\n      if ( docid ) {\n\tmodal.server_form({\n\t  title: \"Follow file options\",\n\t  url:   config.http.locations.follow_file_options,\n\t  data:  {docid: docid}\n\t});\n      } else {\n\tmodal.alert(\"Sorry, can only follow files\");\n      }\n    },\n\n    /**\n     * Called if the editor is destroyed to see whether it has pending\n     * modifications.\n     *\n     * @param {String} why is one of `\"beforeunload\" if the window is\n     * left or \"setSource\" if the source will be replaced.\n     */\n    unload: function(why, ev) {\n      var data = this.data(pluginName);\n\n      if ( !data )\t\t\t\t/* how can this happen? */\n\treturn undefined;\n\n      if ( data.meta ) {\n\thistory.addRecent({ st_type: \"gitty\",\n\t\t\t    id:\t  data.meta.name\t/* FIXME: add hash? */\n\t\t\t  });\n      }\n\n      if ( data.cleanData && data.getValue &&\n\t   data.cleanData != data.getValue() ) {\n\tif ( why == \"beforeunload\" ) {\n\t  var message = \"The source editor has unsaved changes.\\n\"+\n\t                \"These will be lost if you leave the page\";\n\n\t  ev = ev||window.event;\n\t  if ( ev )\n\t    ev.returnValue = message;\n\n\t  return message;\n\t} else {\n\t  var message = \"The source editor has unsaved changes.\\n\"+\n\t                \"These will be lost\"+\n\t\t\t( why == \"setSource\" ? \" if you load a new program\" :\n\t\t\t  why == \"closetab\"  ? \" close this tab\" : \"\"\n\t\t\t);\n\n\t  return confirm(message);\n\t}\n      }\n\n      return undefined;\n    },\n\n    /**\n     * Called if this element is inside a tab this is being closed\n     */\n    close: function() {\n    },\n\n    /**\n     * maintain `data.is_clean`\n     */\n    markClean: function(clean) {\n      var data = this.data(pluginName);\n\n      data.is_clean = clean;\n    },\n\n    /**\n     * Broadcast all open (gitty) files. This is used to synchronise\n     * state.  Each state object has the property `file`.  If the file\n     * is locally modified, `state.modified` is `true` and if the file\n     * is the visible one, `state.visible` is true\n     * @param {Bool} [always] if `true`, also report if no files are\n     * open.\n     */\n    chat_status: function(always) {\n      var opened = [];\n\n      this.each(function() {\n\tvar data = $(this).data(pluginName);\n\n\tif ( data.st_type == \"gitty\" && data.meta && data.meta.name ) {\n\t  var state = { file:  data.meta.name };\n\n\t  if ( !data.is_clean ) state.modified = true;\n\t  if ( $(this).is(\":visible\") ) state.visible = true;\n\t  opened.push(state);\n\t}\n      });\n\n      if ( always || opened.length > 0 )\n\t$(\"#chat\").trigger('send',\n\t\t\t   { type:'has-open-files',\n\t\t\t     files:opened\n\t\t\t   });\n    }\n  }; // methods\n\n  function capitalizeFirstLetter(string) {\n    return string.charAt(0).toUpperCase() + string.slice(1);\n  }\n\n  function filesysInfo(form, meta) {\n    var table = $.el.table({class:\"table table-striped\"});\n\n    $(table).append($.el.tr($.el.th(\"Path\"),\n\t\t\t    $.el.td(meta.path)));\n    $(table).append($.el.tr($.el.th(\"Modified\"),\n\t\t\t    $.el.td(new Date(meta.last_modified*1000)\n\t\t\t\t    .toLocaleString())));\n    $(table).append($.el.tr($.el.th(\"Loaded\"),\n\t\t\t    $.el.td(meta.modified_since_loaded ? \"yes (modified)\":\n\t\t\t\t    meta.loaded ? \"yes\" : \"no\")));\n\n    form.append(table);\n  }\n\n  function errorString(action, error) {\n    if ( error.error == \"file_exists\" ) {\n      return action + \": file exists: \" + error.file;\n    }\n\n    return JSON.stringify(error);\n  }\n\n\n  /**\n   * <Class description>\n   *\n   * @class storage\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.storage = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n  function filebase(file) {\n    return file ? file.split('.').slice(0,-1).join(\".\") : null;\n  }\n\n  function udiff(diff) {\n    if ( diff ) {\n      var lines = diff.split(\"\\n\");\n      var pre = $($.el.pre({class:\"udiff\"}));\n\n      for(var i=0; i<lines.length; i++) {\n\tvar line = lines[i];\n\tvar classmap = { '@': 'udiff-hdr',\n\t\t\t ' ': 'udiff-ctx',\n\t\t\t '+': 'udiff-add',\n\t\t\t '-': 'udiff-del'\n\t\t       };\n\tpre.append($.el.span({class:classmap[line.charAt(0)]}, line),\n\t\t   $.el.br());\n      }\n      return pre;\n    } else {\n      return $($.el.div({class:\"udiff\"}, \"No changes\"));\n    }\n  }\n\n  function editConflicts(merged) {\n    var lines = merged.split(\"\\n\");\n    var pre = $($.el.pre({class:\"udiff\"}));\n    var cls = null;\n\n    function addLine(line, cls) {\n      pre.append($.el.span({class:cls}, line),\n\t\t $.el.br());\n    }\n\n    for(var i=0; i<lines.length; i++) {\n      var line = lines[i];\n\n      if ( line == \"<<<<<<<\" ) {\n\taddLine(line, \"edit-conflict-sep\");\n\tcls = \"edit-conflict-me\";\n      } else if ( cls == \"edit-conflict-me\" && line == \"=======\" ) {\n\taddLine(line, \"edit-conflict-sep\");\n\tcls = \"edit-conflict-them\";\n      } else if ( cls == \"edit-conflict-them\" && line == \">>>>>>>\" ) {\n\taddLine(line, \"edit-conflict-sep\");\n\tcls = null;\n      } else if ( cls ) {\n\taddLine(line, cls);\n     }\n   }\n\n   return pre;\n  }\n});\n\n","/*  Generated file.  Do not edit!\n    Generated by Unicode/prolog_syntax_map.pl\n*/\n\ndefine('cm/mode/prolog/prolog-ctype',[], function() {\nvar UNICODE_MAP_SIZE     = 4353;\nvar U_ID_START            = 0x1;\nvar U_ID_CONTINUE         = 0x2;\nvar U_UPPERCASE           = 0x4;\nvar U_SEPARATOR           = 0x8;\nvar U_SYMBOL             = 0x10;\nvar U_OTHER              = 0x20;\nvar U_CONTROL            = 0x40;\n\n\nvar ucp0x00 = \"\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x00\\x00\\x00\\x10\\x10\\x00\\x10\\x00\\x00\\x00\\x10\\x10\\x00\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x10\\x00\\x10\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x10\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x10\\x10\\x40\\x10\\x10\\x10\\x10\\x20\\x20\\x10\\x03\\x10\\x10\\x10\\x20\\x03\\x10\\x20\\x20\\x20\\x10\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x10\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0x01 = \"\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x03\\x07\\x07\\x03\\x07\\x03\\x07\\x07\\x03\\x07\\x07\\x07\\x03\\x03\\x07\\x07\\x07\\x07\\x03\\x07\\x07\\x03\\x07\\x07\\x07\\x03\\x03\\x03\\x07\\x07\\x03\\x07\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x07\\x03\\x07\\x03\\x03\\x07\\x03\\x07\\x07\\x03\\x07\\x07\\x07\\x03\\x07\\x03\\x07\\x07\\x03\\x03\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x03\\x07\\x03\\x03\\x07\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x07\\x03\\x03\\x07\\x03\\x07\\x07\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\";\nvar ucp0x02 = \"\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x03\\x07\\x07\\x03\\x03\\x07\\x03\\x07\\x07\\x07\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x10\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\";\nvar ucp0x03 = \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x07\\x03\\x07\\x03\\x03\\x10\\x07\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x10\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x07\\x12\\x07\\x07\\x07\\x00\\x07\\x00\\x07\\x07\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x03\\x07\\x07\\x07\\x03\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x10\\x07\\x03\\x07\\x07\\x03\\x03\\x07\\x07\\x07\";\nvar ucp0x04 = \"\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x10\\x02\\x02\\x02\\x02\\x02\\x20\\x20\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\";\nvar ucp0x05 = \"\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x00\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x10\\x10\\x00\\x00\\x00\\x00\\x10\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x02\\x10\\x02\\x02\\x10\\x02\\x02\\x10\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x06 = \"\\x40\\x40\\x40\\x40\\x40\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x40\\x00\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x03\\x03\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x40\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x02\\x02\\x10\\x02\\x02\\x02\\x02\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x10\\x10\\x03\";\nvar ucp0x07 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x40\\x03\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x10\\x10\\x10\\x10\\x03\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x08 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x00\\x00\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\";\nvar ucp0x09 = \"\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x02\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x03\\x03\\x00\\x03\\x03\\x03\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x10\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x00\\x00\\x00\\x00\";\nvar ucp0x0a = \"\\x00\\x02\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x03\\x00\\x00\\x02\\x00\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x00\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x0b = \"\\x00\\x02\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x00\\x00\\x00\\x00\\x03\\x03\\x00\\x03\\x03\\x03\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x03\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x00\\x03\\x00\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x02\\x00\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x0c = \"\\x00\\x02\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x00\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x00\\x00\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\x03\\x03\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x0d = \"\\x00\\x00\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x02\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x02\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x0e = \"\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x00\\x03\\x00\\x00\\x03\\x03\\x00\\x03\\x00\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x00\\x03\\x00\\x03\\x00\\x00\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x02\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x0f = \"\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x02\\x10\\x02\\x10\\x02\\x10\\x10\\x10\\x10\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x10 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x07\\x00\\x00\\x00\\x00\\x00\\x07\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\";\nvar ucp0x12 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0x13 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x22\\x22\\x22\\x22\\x22\\x22\\x22\\x22\\x22\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x14 = \"\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0x16 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x08\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x17 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x00\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x03\\x10\\x10\\x10\\x10\\x03\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x18 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x40\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x03\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x19 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x10\\x00\\x00\\x00\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x22\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\";\nvar ucp0x1a = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1b = \"\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\";\nvar ucp0x1c = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1d = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\";\nvar ucp0x1e = \"\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\";\nvar ucp0x1f = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x07\\x00\\x07\\x00\\x07\\x00\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x07\\x07\\x07\\x07\\x03\\x10\\x03\\x10\\x10\\x10\\x03\\x03\\x03\\x00\\x03\\x03\\x07\\x07\\x07\\x07\\x03\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x07\\x07\\x07\\x07\\x00\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x10\\x10\\x10\\x00\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x07\\x07\\x07\\x07\\x03\\x10\\x10\\x00\";\nvar ucp0x20 = \"\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x40\\x40\\x40\\x40\\x40\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x08\\x08\\x40\\x40\\x40\\x40\\x40\\x08\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x12\\x12\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x12\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x08\\x40\\x40\\x40\\x40\\x40\\x00\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x20\\x03\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x03\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x20\\x20\\x20\\x20\\x02\\x20\\x20\\x20\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x21 = \"\\x10\\x10\\x07\\x10\\x10\\x10\\x10\\x07\\x10\\x10\\x03\\x07\\x07\\x07\\x03\\x03\\x07\\x07\\x07\\x03\\x10\\x07\\x10\\x10\\x13\\x07\\x07\\x07\\x07\\x07\\x10\\x10\\x10\\x10\\x10\\x10\\x07\\x10\\x07\\x10\\x07\\x10\\x07\\x07\\x07\\x07\\x13\\x03\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x03\\x03\\x07\\x07\\x10\\x10\\x10\\x10\\x10\\x07\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x03\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\";\nvar ucp0x23 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x24 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\";\nvar ucp0x27 = \"\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\";\nvar ucp0x2b = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x2c = \"\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x07\\x03\\x07\\x07\\x07\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x07\\x07\\x07\\x03\\x07\\x03\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x07\\x03\\x07\\x03\\x02\\x02\\x02\\x07\\x03\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x20\\x10\\x10\";\nvar ucp0x2d = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\";\nvar ucp0x2e = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x2f = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\";\nvar ucp0x30 = \"\\x08\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x02\\x13\\x13\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\";\nvar ucp0x31 = \"\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x10\\x10\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0x32 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\";\nvar ucp0x4d = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\";\nvar ucp0x9f = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xa4 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\";\nvar ucp0xa6 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x02\\x20\\x20\\x20\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xa7 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x07\\x03\\x07\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x10\\x10\\x07\\x03\\x07\\x03\\x00\\x07\\x03\\x07\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0xa8 = \"\\x03\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x03\\x00\\x00\\x00\\x00\";\nvar ucp0xa9 = \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xaa = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x03\\x02\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x03\\x02\\x02\\x02\\x03\\x03\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x03\\x02\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x03\\x03\\x03\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xab = \"\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x02\\x02\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xd7 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\";\nvar ucp0xd8 = \"\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xdb = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\";\nvar ucp0xdc = \"\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xdf = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\";\nvar ucp0xe0 = \"\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xf8 = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\";\nvar ucp0xfa = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xfb = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x03\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0xfd = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x00\\x00\";\nvar ucp0xfe = \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x12\\x12\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x12\\x12\\x12\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x40\";\nvar ucp0xff = \"\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x10\\x10\\x10\\x10\\x12\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\\x40\\x40\\x10\\x10\\x00\\x00\";\nvar ucp0x100 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x101 = \"\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x20\\x20\\x20\\x20\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x20\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x00\\x00\";\nvar ucp0x102 = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x103 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x104 = \"\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x108 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x00\\x00\\x00\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x10\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x109 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x10a = \"\\x03\\x02\\x02\\x02\\x00\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x02\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x20\\x20\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x10b = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x10c = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x10e = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x110 = \"\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x40\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x111 = \"\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x116 = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x123 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x124 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x134 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x16a = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x16f = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x02\\x02\\x02\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1b0 = \"\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1d0 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1d1 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x02\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1d2 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x02\\x02\\x02\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1d3 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1d4 = \"\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x00\\x07\\x07\\x00\\x00\\x07\\x00\\x00\\x07\\x07\\x00\\x00\\x07\\x07\\x07\\x07\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0x1d5 = \"\\x03\\x03\\x03\\x03\\x07\\x07\\x00\\x07\\x07\\x07\\x07\\x00\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x00\\x07\\x07\\x07\\x07\\x00\\x07\\x07\\x07\\x07\\x07\\x00\\x07\\x00\\x00\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0x1d6 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x10\\x03\\x03\\x03\\x03\";\nvar ucp0x1d7 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x07\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x10\\x03\\x03\\x03\\x03\\x03\\x03\\x07\\x03\\x00\\x00\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\";\nvar ucp0x1ee = \"\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x00\\x00\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x00\\x03\\x00\\x03\\x00\\x03\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x00\\x03\\x00\\x00\\x03\\x00\\x03\\x00\\x03\\x00\\x03\\x00\\x03\\x00\\x03\\x03\\x00\\x03\\x00\\x00\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x00\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1f0 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1f1 = \"\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\";\nvar ucp0x1f2 = \"\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1f3 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1f4 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x10\\x10\\x10\\x10\\x00\\x00\\x00\";\nvar ucp0x1f5 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\";\nvar ucp0x1f6 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x1f7 = \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x2a6 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x2b7 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\";\nvar ucp0x2b8 = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x2fa = \"\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xe00 = \"\\x00\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xe01 = \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xf00 = \"\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0xfff = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\\x00\\x00\";\nvar ucp0x1000 = \"\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\nvar ucp0x10ff = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\\x00\\x00\";\nvar uflags_map = [ucp0x00, ucp0x01, ucp0x02, ucp0x03, ucp0x04, ucp0x05, ucp0x06, ucp0x07,\n  ucp0x08, ucp0x09, ucp0x0a, ucp0x0b, ucp0x0c, ucp0x0d, ucp0x0e, ucp0x0f,\n  ucp0x10, 0x3, ucp0x12, ucp0x13, ucp0x14, 0x3, ucp0x16, ucp0x17,\n  ucp0x18, ucp0x19, ucp0x1a, ucp0x1b, ucp0x1c, ucp0x1d, ucp0x1e, ucp0x1f,\n  ucp0x20, ucp0x21, 0x10, ucp0x23, ucp0x24, 0x10, 0x10, ucp0x27,\n  0x10, 0x10, 0x10, ucp0x2b, ucp0x2c, ucp0x2d, ucp0x2e, ucp0x2f,\n  ucp0x30, ucp0x31, ucp0x32, 0x10, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, ucp0x4d, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, ucp0x9f,\n  0x3, 0x3, 0x3, 0x3, ucp0xa4, 0x3, ucp0xa6, ucp0xa7,\n  ucp0xa8, ucp0xa9, ucp0xaa, ucp0xab, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, ucp0xd7,\n  ucp0xd8, 0x0, 0x0, ucp0xdb, ucp0xdc, 0x0, 0x0, ucp0xdf,\n  ucp0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  ucp0xf8, 0x3, ucp0xfa, ucp0xfb, 0x3, ucp0xfd, ucp0xfe, ucp0xff,\n  ucp0x100, ucp0x101, ucp0x102, ucp0x103, ucp0x104, 0x0, 0x0, 0x0,\n  ucp0x108, ucp0x109, ucp0x10a, ucp0x10b, ucp0x10c, 0x0, ucp0x10e, 0x0,\n  ucp0x110, ucp0x111, 0x0, 0x0, 0x0, 0x0, ucp0x116, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x3, 0x3, 0x3, ucp0x123, ucp0x124, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x3, 0x3, 0x3, 0x3, ucp0x134, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x3, 0x3, ucp0x16a, 0x0, 0x0, 0x0, 0x0, ucp0x16f,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  ucp0x1b0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  ucp0x1d0, ucp0x1d1, ucp0x1d2, ucp0x1d3, ucp0x1d4, ucp0x1d5, ucp0x1d6, ucp0x1d7,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ucp0x1ee, 0x0,\n  ucp0x1f0, ucp0x1f1, ucp0x1f2, ucp0x1f3, ucp0x1f4, ucp0x1f5, ucp0x1f6, ucp0x1f7,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, ucp0x2a6, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3,\n  0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, ucp0x2b7,\n  ucp0x2b8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x3, 0x3, ucp0x2fa, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  ucp0xe00, ucp0xe01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  ucp0xf00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ucp0xfff,\n  ucp0x1000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n  0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ucp0x10ff,\n  0x0];\n\nfunction uflagsW(chr) {\n  var code = chr.charCodeAt(0);\n  var cp = Math.floor(code/0x100);\n  if ( cp < UNICODE_MAP_SIZE ) {\n    var map = uflags_map[cp];\n\n    if ( typeof(map) == \"number\" ) {\n      return map;\n    } else {\n      return map.charCodeAt(code&0xff);\n    }\n  }\n  return 0;\n}\n\nreturn {\n  flags:       uflagsW,\n  id_start:    function(chr) { return (uflagsW(chr) & U_ID_START)    != 0 },\n  id_continue: function(chr) { return (uflagsW(chr) & U_ID_CONTINUE) != 0 },\n  uppercase:   function(chr) { return (uflagsW(chr) & U_UPPERCASE)   != 0 },\n  separator:   function(chr) { return (uflagsW(chr) & U_SEPARATOR)   != 0 },\n  symbol:      function(chr) { return (uflagsW(chr) & U_SYMBOL)      != 0 },\n  other:       function(chr) { return (uflagsW(chr) & U_OTHER)       != 0 },\n  control:     function(chr) { return (uflagsW(chr) & U_CONTROL)     != 0 }\n}\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/prolog/prolog',[\"../../lib/codemirror\", \"./prolog-ctype\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror, ctype) {\n\"use strict\";\n\n  CodeMirror.defineMode(\"prolog\", function(cmConfig, parserConfig) {\n\n  function chain(stream, state, f) {\n    state.tokenize = f;\n    return f(stream, state);\n  }\n\n\t\t /*******************************\n\t\t *\t   CONFIG DATA\t\t*\n\t\t *******************************/\n\n  var config = { quasiQuotations: true,\t\t/* {|Syntax||Quotation|} */\n\t         dicts: true,\t\t\t/* tag{k:v, ...} */\n\t\t unicodeEscape: true,\t\t/* \\uXXXX and \\UXXXXXXXX */\n\t\t multiLineQuoted: true,\t\t/* \"...\\n...\" */\n\t\t groupedIntegers: true\t\t/* 10 000 or 10_000 */\n\t       };\n\n  var quoteType = { '\"': \"string\",\n\t\t    \"'\": \"qatom\",\n\t\t    \"`\": \"bqstring\"\n\t\t  };\n\n  var isSingleEscChar = /[abref\\\\'\"nrtsv]/;\n  var isOctalDigit    = /[0-7]/;\n  var isHexDigit      = /[0-9a-fA-F]/;\n\n  var isSymbolChar = /[-#$&*+./:<=>?@\\\\^~]/;\t/* Prolog glueing symbols chars */\n  var isSoloChar   = /[[\\]{}(),;|!]/;\t\t/* Prolog solo chars */\n  var isNeck       = /^(:-|-->)$/;\n  var isControlOp  = /^(,|;|->|\\*->|\\\\+|\\|)$/;\n\n\n\t\t /*******************************\n\t\t *\t CHARACTER ESCAPES\t*\n\t\t *******************************/\n\n  function readDigits(stream, re, count) {\n    if ( count > 0 ) {\n      while( count-- > 0 ) {\n\tif ( !re.test(stream.next()) )\n\t  return false;\n      }\n    } else {\n      while ( re.test(stream.peek()) )\n\tstream.next();\n    }\n    return true;\n  }\n\n  function readEsc(stream) {\n    var next = stream.next();\n    if ( isSingleEscChar.test(next) )\n      return true;\n    switch( next )\n    { case \"u\":\n\tif ( config.unicodeEscape )\n\t  return readDigits(stream, isHexDigit, 4); /* SWI */\n        return false;\n      case \"U\":\n\tif ( config.unicodeEscape )\n\t  return readDigits(stream, isHexDigit, 8); /* SWI */\n        return false;\n      case null: return true;\t\t\t/* end of line */\n      case \"c\": stream.eatSpace(); return true;\n      case \"x\": return readDigits(stream, isHexDigit, 2);\n    }\n    if ( isOctalDigit.test(next) ) {\n      if ( !readDigits(stream, isOctalDigit, -1) )\n\treturn false;\n      if ( stream.peek() == \"\\\\\" )\t\t/* SWI: optional closing \\ */\n\tstream.next();\n      return true;\n    }\n    return false;\n  }\n\n  function nextUntilUnescaped(stream, state, end) {\n    var next;\n    while ((next = stream.next()) != null) {\n      if ( next == end && end != stream.peek() )\n      { state.nesting.pop();\n        return false;\n      }\n      if ( next == \"\\\\\" )\n      { if ( !readEsc(stream) )\n\t  return false;\n      }\n    }\n    return config.multiLineQuoted;\n  }\n\n\t\t /*******************************\n\t\t *\tCONTEXT NESTING\t\t*\n\t\t *******************************/\n\n  function nesting(state) {\n    return state.nesting.slice(-1)[0];\n  }\n\n  /* Called on every non-comment token */\n  function setArg1(state) {\n    var nest = nesting(state);\n    if ( nest ) {\n      if ( nest.arg == 0 )\t\t/* nested in a compound */\n\tnest.arg = 1;\n      else if ( nest.type == \"control\" )\n\tstate.goalStart = false;\n    } else\n      state.goalStart = false;\n  }\n\n  function setArgAlignment(state) {\n    var nest = nesting(state);\n    if ( nest && !nest.alignment && nest.arg != undefined ) {\n      if ( nest.arg == 0 )\n\tnest.alignment = nest.leftCol ? nest.leftCol+4 : nest.column+4;\n      else\n\tnest.alignment = nest.column+1;\n    }\n  }\n\n  function nextArg(state) {\n    var nest = nesting(state);\n    if ( nest ) {\n      if ( nest.arg )\t\t\t/* nested in a compound */\n\tnest.arg++;\n      else if ( nest.type == \"control\" )\n\tstate.goalStart = true;\t\t/* FIXME: also needed for ; and -> */\n    } else\n      state.goalStart = true;\n  }\n\n  function isControl(state) {\t\t/* our terms are goals */\n    var nest = nesting(state);\n    if ( nest ) {\n      if ( nest.type == \"control\" ) {\n\treturn true;\n      }\n      return false;\n    } else\n      return state.inBody;\n  }\n\n  // Used as scratch variables to communicate multiple values without\n  // consing up tons of objects.\n  var type, content;\n  function ret(tp, style, cont) {\n    type = tp; content = cont;\n    return style;\n  }\n\n  function peekSpace(stream) {\t\t/* TBD: handle block comment as space */\n    if ( stream.eol() ||\n\t /[\\s%]/.test(stream.peek()) )\n      return true;\n    return false;\n  }\n\n\n\t\t /*******************************\n\t\t *\t   SUB TOKENISERS\t*\n\t\t *******************************/\n\n  function plTokenBase(stream, state) {\n    var ch = stream.next();\n\n    if ( ch == \"(\" ) {\n      if ( state.lastType == \"functor\" ) {\n\tstate.nesting.push({ functor: state.functorName,\n\t\t\t     column: stream.column(),\n\t\t\t     leftCol: state.functorColumn,\n\t\t\t     arg: 0\n\t\t\t   });\n\tdelete state.functorName;\n\tdelete state.functorColumn;\n      } else {\n\tstate.nesting.push({ type: \"control\",\n\t\t\t     closeColumn: stream.column(),\n\t\t\t     alignment: stream.column()+4\n\t\t\t   });\n      }\n      return ret(\"solo\", null, \"(\");\n    }\n\n    if ( ch == \"{\" && state.lastType == \"tag\" ) {\n      state.nesting.push({ tag: state.tagName,\n\t\t\t   column: stream.column(),\n\t\t\t   leftCol: state.tagColumn,\n\t\t\t   arg: 0\n\t\t\t });\n      delete state.tagName;\n      delete state.tagColumn;\n      return ret(\"dict_open\", null);\n    }\n\n    if ( ch == \"/\" && stream.eat(\"*\") )\n      return chain(stream, state, plTokenComment);\n\n    if ( ch == \"%\" ) {\n      stream.skipToEnd();\n      return ret(\"comment\", \"comment\");\n    }\n\n    setArg1(state);\n\n    if ( isSoloChar.test(ch) ) {\n      switch ( ch )\n      { case \")\":\n\t  state.nesting.pop();\n\t  break;\n\tcase \"]\":\n\t  state.nesting.pop();\n\t  return ret(\"list_close\", null, \"]\");\n\tcase \"}\":\n\t{ var nest = nesting(state);\n\t  var type = (nest && nest.tag) ? \"dict_close\" : \"brace_term_close\";\n\n\t  state.nesting.pop();\n\t  return ret(type, null);\n\t}\n\tcase \",\":\n\t  if ( stream.eol() )\n\t    state.commaAtEOL = true;\n\t  nextArg(state);\n          /*FALLTHROUGH*/\n\tcase \";\":\n\t  if ( isControl(state) )\n\t    state.goalStart = true;\n\t  break;\n\tcase \"[\":\n\t  state.nesting.push({ type: \"list\",\n\t\t\t       closeColumn: stream.column(),\n\t\t\t       alignment: stream.column()+2\n\t\t\t     });\n\t  return ret(\"list_open\", null, \"[\");\n\t  break;\n\tcase \"{\":\n\t  if ( config.quasiQuotations && stream.eat(\"|\") ) {\n\t    state.nesting.push({ type: \"quasi-quotation\",\n\t\t\t         alignment: stream.column()+1\n\t\t\t       });\n\t    return ret(\"qq_open\", \"qq_open\");\n\t  } else {\n\t    state.nesting.push({ type: \"curly\",\n\t\t\t         closeColumn: stream.column(),\n\t\t\t\t alignment: stream.column()+2\n\t\t\t       });\n\t    return ret(\"brace_term_open\", null);\n\t  }\n\t  break;\n\tcase \"|\":\n\t  if ( config.quasiQuotations ) {\n\t    if ( stream.eat(\"|\") ) {\n\t      state.tokenize = plTokenQuasiQuotation;\n\t      return ret(\"qq_sep\", \"qq_sep\");\n\t    } else if ( stream.eat(\"}\") ) {\n\t      state.nesting.pop();\n\t      return ret(\"qq_close\", \"qq_close\");\n\t    }\n\t  }\n\t  if ( isControl(state) )\n\t    state.goalStart = true;\n\t  break;\n      }\n      return ret(\"solo\", null, ch);\n    }\n\n    if (ch == '\"' || ch == \"'\" || ch == \"`\")\n    { state.nesting.push({ type: \"quoted\",\n\t\t\t   alignment: stream.column()+1\n\t\t\t });\n      return chain(stream, state, plTokenString(ch));\n    }\n\n    if ( ch == \"0\" ) {\n      if ( stream.eat(/x/i)) {\n\tstream.eatWhile(/[\\da-f]/i);\n\treturn ret(\"number\", \"number\");\n      }\n      if ( stream.eat(/o/i)) {\n\tstream.eatWhile(/[0-7]/i);\n\treturn ret(\"number\", \"number\");\n      }\n      if ( stream.eat(/'/) ) {\t\t\t/* 0' */\n\tvar next = stream.next();\n\tif ( next == \"\\\\\" ) {\n\t  if ( !readEsc(stream) )\n\t    return ret(\"error\", \"error\");\n\t}\n\treturn ret(\"code\", \"code\");\n      }\n    }\n\n    if ( /\\d/.test(ch) || /[+-]/.test(ch) && stream.eat(/\\d/)) {\n      if ( config.groupedIntegers )\n\tstream.match(/^\\d*((_|\\s+)\\d+)*(?:\\.\\d+)?(?:[eE][+\\-]?\\d+)?/);\n      else\n\tstream.match(/^\\d*(?:\\.\\d+)?(?:[eE][+\\-]?\\d+)?/);\n      return ret(ch == \"-\" ? \"neg-number\" :\n\t\t ch == \"+\" ? \"pos-number\" :\n\t\t \"number\");\n    }\n\n    if ( ctype.symbol(ch) ) {\n      stream.eatWhile(ctype.symbol);\n      var atom = stream.current();\n      if ( atom == \".\" && peekSpace(stream) ) {\n\tif ( nesting(state) ) {\n\t  return ret(\"fullstop\", \"error\", atom);\n\t} else {\n\t} return ret(\"fullstop\", \"fullstop\", atom);\n      } else if ( isNeck.test(atom) ) {\n\treturn ret(\"neck\", \"neck\", atom);\n      } else if ( isControl(state) && isControlOp.test(atom) ) {\n\tstate.goalStart = true;\n\treturn ret(\"symbol\", \"operator\", atom);\n      } else\n\treturn ret(\"symbol\", \"operator\", atom);\n    }\n\n    stream.eatWhile(ctype.id_continue);\n    var word = stream.current();\n    if ( stream.peek() == \"{\" && config.dicts ) {\n      state.tagName = word;\t\t\t/* tmp state extension */\n      state.tagColumn = stream.column();\n      return ret(\"tag\", \"tag\", word);\n    } else if ( ch == \"_\" ) {\n      if ( word.length == 1 ) {\n\treturn ret(\"var\", \"anon\", word);\n      } else {\n\tvar sec = word.charAt(1);\n\tif ( ctype.uppercase(sec) )\n\t  return ret(\"var\", \"var-2\", word);\n      }\n      return ret(\"var\", \"var\", word);\n    } else if ( ctype.uppercase(ch) ) {\n      return ret(\"var\", \"var\", word);\n    } else if ( stream.peek() == \"(\" ) {\n      state.functorName = word;\t\t\t/* tmp state extension */\n      state.functorColumn = stream.column();\n      return ret(\"functor\", \"functor\", word);\n    } else\n      return ret(\"atom\", \"atom\", word);\n  }\n\n  function plTokenString(quote) {\n    return function(stream, state) {\n      if (!nextUntilUnescaped(stream, state, quote)) {\n        state.tokenize = plTokenBase;\n\tif ( stream.peek() == \"(\" ) {\t\t/* 'quoted functor'() */\n\t  var word = stream.current();\n\t  state.functorName = word;\t\t/* tmp state extension */\n\t  return ret(\"functor\", \"functor\", word);\n\t}\n\tif ( stream.peek() == \"{\" && config.dicts ) { /* 'quoted tag'{} */\n\t  var word = stream.current();\n\t  state.tagName = word;\t\t\t/* tmp state extension */\n\t  return ret(\"tag\", \"tag\", word);\n\t}\n      }\n      return ret(quoteType[quote], quoteType[quote]);\n    };\n  }\n\n  function plTokenQuasiQuotation(stream, state) {\n    var maybeEnd = false, ch;\n    while (ch = stream.next()) {\n      if (ch == \"}\" && maybeEnd) {\n        state.tokenize = plTokenBase;\n\tstream.backUp(2);\n\tbreak;\n      }\n      maybeEnd = (ch == \"|\");\n    }\n    return ret(\"qq_content\", \"qq_content\");\n  }\n\n  function plTokenComment(stream, state) {\n    var maybeEnd = false, ch;\n    while (ch = stream.next()) {\n      if (ch == \"/\" && maybeEnd) {\n        state.tokenize = plTokenBase;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return ret(\"comment\", \"comment\");\n  }\n\n\n\t\t /*******************************\n\t\t *\t   RETURN OBJECT\t*\n\t\t *******************************/\n\n  return {\n    startState: function() {\n      return {\n        tokenize: plTokenBase,\n\tinBody: false,\n\tgoalStart: false,\n\tlastType: null,\n\tnesting: new Array(),\t\t/* ([{}]) nesting FIXME: copy this */\n\tcurTerm: null,\t\t\t/* term index in metainfo */\n\tcurToken: null\t\t\t/* token in term */\n      };\n    },\n\n    token: function(stream, state) {\n      var nest;\n\n      if ( state.curTerm == null && parserConfig.metainfo ) {\n\tstate.curTerm = 0;\n\tstate.curToken = 0;\n      }\n\n      if ( stream.sol() )\n\tdelete state.commaAtEOL;\n\n      if ( state.tokenize == plTokenBase && stream.eatSpace() ) {\n\tif ( stream.eol() )\n\t  setArgAlignment(state);\n\treturn null;\n      }\n\n      var style = state.tokenize(stream, state);\n\n      if ( stream.eol() )\n\tsetArgAlignment(state);\n\n      if ( type == \"neck\" ) {\n\tstate.inBody = true;\n\tstate.goalStart = true;\n      } else if ( type == \"fullstop\" ) {\n\tstate.inBody = false;\n\tstate.goalStart = false;\n      }\n\n      state.lastType = type;\n\n      if ( typeof(parserConfig.enrich) == \"function\" )\n\tstyle = parserConfig.enrich(stream, state, type, content, style);\n\n      return style;\n    },\n\n    indent: function(state, textAfter) {\n      if (state.tokenize == plTokenComment) return CodeMirror.Pass;\n\n      var nest;\n      if ( (nest=nesting(state)) ) {\n\tif ( nest.closeColumn && !state.commaAtEOL )\n\t  return nest.closeColumn;\n\treturn nest.alignment;\n      }\n      if ( !state.inBody )\n\treturn 0;\n\n      return 4;\n    },\n\n    theme: \"prolog\",\n\n    blockCommentStart: \"/*\",\t\t/* continuecomment.js support */\n    blockCommentEnd: \"*/\",\n    blockCommentContinue: \" * \",\n    lineComment: \"%\",\n  };\n});\n\nCodeMirror.defineMIME(\"text/x-prolog\", \"prolog\");\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/prolog/prolog_keys',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\n\n\t\t /*******************************\n\t\t *\t    ACTIVE KEYS\t\t*\n\t\t *******************************/\n\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\nSupport if-then-else layout like this:\n\ngoal :-\n    (\tCondition\n    ->  IfTrue\n    ;   IfFalse\n    ).\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\n\n  CodeMirror.commands.prologStartIfThenElse = function(cm) {\n    var start = cm.getCursor(\"start\");\n    var token = cm.getTokenAt(start, true);\n\n    if ( token.state.goalStart == true )\n    { cm.replaceSelection(\"(   \", \"end\");\n      return;\n    }\n\n    return CodeMirror.Pass;\n  }\n\n  CodeMirror.commands.prologStartThen = function(cm) {\n    var start = cm.getCursor(\"start\");\n    var token = cm.getTokenAt(start, true);\n\n    /* FIXME: These functions are copied from prolog.js.  How\n       can we reuse these?\n    */\n    function nesting(state) {\n      var len = state.nesting.length;\n      if ( len > 0 )\n\treturn state.nesting[len-1];\n      return null;\n    }\n\n    function isControl(state) {\t\t/* our terms are goals */\n      var nest = nesting(state);\n      if ( nest ) {\n\tif ( nest.type == \"control\" ) {\n\t  return true;\n\t}\n\treturn false;\n      } else\n\treturn state.inBody;\n    }\n\n    if ( start.ch == token.end &&\n\t token.type == \"operator\" &&\n\t token.string == \"-\" &&\n\t isControl(token.state) )\n    { cm.replaceSelection(\">  \", \"end\");\n      return;\n    }\n\n    return CodeMirror.Pass;\n  }\n\n  CodeMirror.commands.prologStartElse = function(cm) {\n    var start = cm.getCursor(\"start\");\n    var token = cm.getTokenAt(start, true);\n\n    if ( token.start == 0 && start.ch == token.end &&\n\t !/\\S/.test(token.string) )\n    { cm.replaceSelection(\";   \", \"end\");\n      return;\n    }\n\n    return CodeMirror.Pass;\n  }\n\n  CodeMirror.defineOption(\"prologKeys\", null, function(cm, val, prev) {\n    if (prev && prev != CodeMirror.Init)\n      cm.removeKeyMap(\"prolog\");\n    if ( val ) {\n      var map = { name:     \"prolog\",\n\t\t  \"'('\":    \"prologStartIfThenElse\",\n\t\t  \"'>'\":    \"prologStartThen\",\n\t\t  \"';'\":    \"prologStartElse\",\n\t\t  \"Ctrl-L\": \"refreshHighlight\"\n\t\t};\n      cm.addKeyMap(map);\n    }\n  });\n\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/prolog/prolog_query',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\n  CodeMirror.commands.prologMaybeFireQuery = function(cm) {\n    var lastl  = cm.lineCount()-1;\n\n    while(lastl >= 0 && cm.getLine(lastl).trim() == \"\")\n      lastl--;\n\n    if ( lastl >= 0 ) {\n      var endc  = cm.getLine(lastl).length;\n      var token = cm.getTokenAt({line:lastl, ch:endc}, true);\n\n      if ( token.type == \"fullstop\" ) {\n\tvar c = cm.getCursor();\n\n\tif ( c.line > lastl || (c.line == lastl && c.ch >= token.end) ) {\n\t  $(\".swish-event-receiver\")\n\t     .trigger(\"feedback\",\n\t\t      { html: \"Use <b>Ctrl+Enter</b> to execute the query\",\n\t\t\towner: $(cm.display.wrapper).closest(\".pane-wrapper\")\n\t\t      });\n\t}\n      }\n    }\n\n    return CodeMirror.Pass;\n  }\n\n  CodeMirror.commands.prologFireQuery = function(cm) {\n\n    return cm.prologFireQuery(cm.getValue());\n  }\n\n  CodeMirror.defineOption(\"prologQuery\", null, function(cm, func, prev) {\n    if (prev && prev != CodeMirror.Init)\n      cm.removeKeyMap(\"prologQuery\");\n    if ( typeof(func) == \"function\" ) {\n      var map = { name:         \"prologQuery\",\n\t\t  \"Ctrl-Enter\": \"prologFireQuery\",\n\t\t  \"Enter\":\t\"prologMaybeFireQuery\"\n\t\t};\n      cm.addKeyMap(map);\n      cm.prologFireQuery = func;\n    }\n  });\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\nThis  addon  extends  the  \"prolog\"   mode  to  perform  server-assisted\nhighlighting.   Server-assisted   highlighting   provides   a   semantic\nclassification of tokens.\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/prolog/prolog_server',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var DEFAULT_DELAY = 1000;\n  var USE_CHANGES_IF_LONGER_THEN = 1000;\n\n  function State(options) {\n    if (typeof options == \"object\") {\n      this.enabled = options.enabled || false;\n      this.role    = options.role    || \"source\";\n      if ( options.sourceID )\n\tthis.sourceID = options.sourceID;\n      this.url  = { change: options.url + \"change\",\n\t\t    tokens: options.url + \"tokens\",\n\t\t    leave:  options.url + \"leave\",\n\t\t    info:   options.url + \"info\"\n\t\t  },\n      this.delay = options.delay ? options.delay : DEFAULT_DELAY;\n      this.generationFromServer = -1;\n      this.tmo = null;\t\t\t/* timeout handle */\n    }\n  }\n\n  /**\n   * Trap CodeMirror change events. This asks for\n   * serverAssistedHighlight() after a configured delay.  If there\n   * is a mirror on the server, we collect the changes in an array\n   * and post them when we ask for server tokens.  Earlier versions\n   * posted immediately, but this is a waste of resources.  We might\n   * want to restore that behaviour if we want to forward changes to\n   * other users.\n   */\n  function changeEditor(cm, change) {\n    var state = cm.state.prologHighlightServer;\n\n    if ( state == null || state.url == null || !state.enabled )\n      return;\n\n    if ( state.tmo ) {\t\t\t/* changing: delay refresh */\n      cm.askRefresh();\n    }\n\n    if ( state.changes !== undefined )\n      state.changes.push(change);\n\n    if ( change.origin == \"setValue\" ||\n\t state.generationFromServer == -1 ) {\n      state.changes = undefined;\t/* force a clean start */\n      cm.serverAssistedHighlight();\n    }\n  }\n\n  function leaveEditor(cm) {\n    var state = cm.state.prologHighlightServer;\n\n    if ( state == null || state.url == null || state.uuid == null )\n      return;\n    var uuid = state.uuid;\n    delete state.uuid;\n\n    $.ajax({ url: state.url.leave,\n\t     async: false,  // otherwise it is killed before completion\n\t     contentType: 'application/json',\n\t     type: \"POST\",\n\t     dataType: \"json\",\n\t     data: JSON.stringify({ uuid: uuid\n\t\t\t\t  })\n\t   });\n  }\n\n  /**\n   * control server side highlight support. This can be in three states:\n   * (1) absent, in which case `cm.state.prologHighlightServer` is not\n   * present, (2) disabled and (3) enabled.\n   */\n  CodeMirror.defineOption(\"prologHighlightServer\", false, function(cm, val, old) {\n    function leaveCM() { leaveEditor(cm); }\n\n    if ( cm.state.prologHighlightServer ) {\n      if ( val == null ) {\t\t/* remove the highlight server */\n\tleaveEditor(cm);\n\tcm.off(\"change\", changeEditor);\n\twindow.removeEventListener(\"unload\", leaveCM);\n\tdelete cm.state.prologHighlightServer;\n\tcm.setOption(\"mode\", {name:\"prolog\"});\n      } else {\n\tif ( val.enabled != old.enabled ) {\n\t  cm.state.prologHighlightServer.enabled = val.enabled;\n\t  if ( val.enabled ) {\t\t/* enable the highlight server */\n\t    cm.on(\"change\", changeEditor);\n\t    window.addEventListener(\"unload\", leaveCM);\n\t    if ( cm.lineCount() > 0 ) {\n\t      cm.serverAssistedHighlight(true);\n\t    }\n\t  } else {\t\t\t/* disable */\n\t    leaveEditor(cm);\n\t    cm.off(\"change\", changeEditor);\n\t    window.removeEventListener(\"unload\", leaveCM);\n\t    cm.setOption(\"mode\", {name:\"prolog\"});\n\t  }\n\t}\n      }\n    } else if ( val ) {\t\t\t/* create for the first time */\n      cm.state.prologHighlightServer = new State(val);\n      if ( cm.state.prologHighlightServer.enabled ) {\n\tcm.on(\"change\", changeEditor);\n\twindow.addEventListener(\"unload\", leaveCM);\n\tif ( cm.lineCount() > 0 ) {\n\t  cm.serverAssistedHighlight(true);\n\t}\n      }\n    }\n  });\n\n\n  CodeMirror.prototype.askRefresh = function(time) {\n    var cm = this;\n    var state = cm.state.prologHighlightServer;\n\n    if ( state == null )\n      return;\n\n    if ( time === undefined )\n      time = state.delay;\n\n    if ( state.tmo )\n      clearTimeout(state.tmo);\n\n    state.tmo = setTimeout(function() { cm.serverAssistedHighlight(); },\n\t\t\t   time);\n  };\n\n\n  CodeMirror.prototype.serverAssistedHighlight = function(always) {\n    var cm = this;\n    var state = cm.state.prologHighlightServer;\n    var msg = {};\n\n    state.tmo = null;\n\n    if ( state == null || state.url == null || !state.enabled ||\n\t (cm.isClean(state.generationFromServer) && !always) )\n      return;\n\n    function modeOptions() {\n      var opts = cm.getOption(\"mode\");\n\n      if ( typeof(opts) != \"object\" ) {\n\topts = { name:\"prolog\",\n\t\t enrich:enrichStyle,\n\t\t editor:cm\n\t       };\n      } else if ( !opts.enrich ) {\n\topts.enrich = enrichStyle;\n\topts.editor = cm;\n      }\n      return opts;\n    }\n\n    if ( state.uuid ) {\t\t\t/* server has a mirror */\n      msg.uuid = state.uuid;\n      if ( state.changes == undefined ) {\n\tmsg.text = cm.getValue();\n\tif ( msg.text.length > USE_CHANGES_IF_LONGER_THEN )\n\t  state.changes = [];\n      } else {\n\tmsg.changes = state.changes;\n\tstate.changes = [];\n      }\n    } else {\n      msg.text   = cm.getValue();\n      if ( msg.text.trim() == \"\" )\n\treturn;\n      state.uuid = generateUUID();\n      msg.uuid   = state.uuid;\n    }\n    msg.role = state.role;\n    if ( typeof(state.sourceID) == \"function\" )\n      msg.sourceID = state.sourceID();\n\n    state.generationFromServer = cm.changeGeneration();\n    $.ajax({ url: state.url.tokens,\n\t     dataType: \"json\",\n\t     contentType: 'application/json',\n\t     type: \"POST\",\n\t     data: JSON.stringify(msg),\n\t     success: function(data, status) {\n\t       var opts = modeOptions();\n\t       opts.metainfo = data.tokens;\n\t       cm.setOption(\"mode\", opts);\n\t     },\n\t     error: function(jqXHR) {\n\t       if ( jqXHR.status == 409 ) {\n\t\t delete state.uuid;\n\t\t /* And refresh?  problem is this might get us into\n\t\t  * a loop.  We'd need some info from the server that\n\t\t  * this won't happen again\n\t\t  */\n\t       }\n\t     }\n\t   });\n  }\n\n  CodeMirror.commands.refreshHighlight = function(cm) {\n    cm.serverAssistedHighlight(true);\n  }\n\n  function generateUUID() {\n    var d = new Date().getTime();\n    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n      .replace(/[xy]/g, function(c) {\n        var r = (d + Math.random()*16)%16 | 0;\n        d = Math.floor(d/16);\n        return (c=='x' ? r : (r&0x7|0x8)).toString(16);\n    });\n    return uuid;\n  }\n\n  var syncOnType = { \"var\": \"var\",\t/* JavaScript Types */\n\t\t     \"atom\": \"atom\",\n\t\t     \"qatom\": \"qatom\",\n\t\t     \"bqstring\": \"string\",\n\t\t     \"symbol\": \"atom\",\n\t\t     \"functor\": \"functor\",\n\t\t     \"tag\": \"tag\",\n\t\t     \"number\": \"number\",\n\t\t     \"string\": \"string\",\n\t\t     \"code\": \"number\",\n\t\t     \"neg-number\": \"number\",\n\t\t     \"pos-number\": \"number\",\n\t\t     \"list_open\": \"list_open\",\n\t\t     \"list_close\": \"list_close\",\n\t\t     \"qq_open\": \"qq_open\",\n\t\t     \"qq_sep\": \"qq_sep\",\n\t\t     \"qq_close\": \"qq_close\",\n\t\t     \"dict_open\": \"dict_open\",\n\t\t     \"dict_close\": \"dict_close\",\n\t\t     \"brace_term_open\": \"brace_term_open\",\n\t\t     \"brace_term_close\": \"brace_term_close\",\n\t\t     \"neck\": \"neck\",\n\t\t     \"fullstop\": \"fullstop\"\n\t\t   };\n  var serverSync = { \"var\": \"var\",\t/* Server Types */\n\t\t     \"singleton\": \"var\",\n\t\t     \"uatom\": \"var\",\t/* var_prefix in effect */\n\t\t     \"atom\": \"atom\",\n\t\t     \"qatom\": \"qatom\",\n\t\t     \"string\": \"string\",\n\t\t     \"codes\": \"string\",\n\t\t     \"chars\": \"string\",\n\t\t     \"functor\": \"functor\",\n\t\t     \"tag\": \"tag\",\n\t\t     \"control\": \"atom\",\n\t\t     \"meta\": \"atom\",\t/* or number 0-9 */\n\t\t     \"op_type\": \"atom\",\n\t\t     \"int\": \"number\",\n\t\t     \"float\": \"number\",\n\t\t     \"key\": \"atom\",\t/* TBD: or integer */\n\t\t     \"sep\": \"atom\",\t/* : in dict */\n\t\t     \"ext_quant\": \"atom\", /* setof ^-symbol */\n\n\t\t     \"expanded\": \"expanded\",\n\t\t     \"comment_string\":\"string\",\n\t\t     \"identifier\": \"atom\",\n\t\t     \"delimiter\": \"atom\",\n\t\t     \"module\": \"atom\",\n\n\t\t     \"constraint\": \"atom\",\n\n\t\t     \"head_exported\": \"atom\",\n\t\t     \"head_public\": \"atom\",\n\t\t     \"head_extern\": \"atom\",\n\t\t     \"head_dynamic\": \"atom\",\n\t\t     \"head_multifile\": \"atom\",\n\t\t     \"head_unreferenced\": \"atom\",\n\t\t     \"head_hook\": \"atom\",\n\t\t     \"head_meta\": \"atom\",\n\t\t     \"head_constraint\": \"atom\",\n\t\t     \"head_imported\": \"atom\",\n\t\t     \"head_built_in\": \"atom\",\n\t\t     \"head_iso\": \"atom\",\n\t\t     \"head_def_iso\": \"atom\",\n\t\t     \"head_def_swi\": \"atom\",\n\t\t     \"head\": \"atom\",\n\n\t\t     \"goal_built_in\": \"atom\",\n\t\t     \"goal_imported\": \"atom\",\n\t\t     \"goal_autoload\": \"atom\",\n\t\t     \"goal_global\": \"atom\",\n\t\t     \"goal_undefined\": \"atom\",\n\t\t     \"goal_thread_local\": \"atom\",\n\t\t     \"goal_dynamic\": \"atom\",\n\t\t     \"goal_multifile\": \"atom\",\n\t\t     \"goal_expanded\": \"atom\",\n\t\t     \"goal_extern\": \"atom\",\n\t\t     \"goal_recursion\": \"atom\",\n\t\t     \"goal_meta\": \"atom\",\n\t\t     \"goal_foreign\": \"atom\",\n\t\t     \"goal_local\": \"atom\",\n\t\t     \"goal_constraint\": \"atom\",\n\t\t     \"goal_not_callable\": \"atom\",\n\n\t\t     \"xpce_method\": \"functor\",\n\t\t     \"xpce_class_builtin\":\"atom\",\n\t\t     \"xpce_class_lib\":\"atom\",\n\t\t     \"xpce_class_user\":\"atom\",\n\t\t     \"xpce_class_undef\":\"atom\",\n\n\t\t     \"option_name\": \"atom\",\n\t\t     \"no_option_name\": \"atom\",\n\t\t     \"flag_name\": \"atom\",\n\t\t     \"no_flag_name\": \"atom\",\n\t\t     \"format_string\": \"text\",\n\n\t\t     \"file_no_depends\": \"atom\",\n\t\t     \"file\": \"atom\",\n\t\t     \"nofile\": \"atom\",\n\n\t\t     \"list_open\": \"list_open\",\n\t\t     \"list_close\": \"list_close\",\n\t\t     \"qq_open\": \"qq_open\",\n\t\t     \"qq_sep\": \"qq_sep\",\n\t\t     \"qq_close\": \"qq_close\",\n\t\t     \"qq_type\": \"atom\",\n\t\t     \"dict_open\": \"dict_open\",\n\t\t     \"dict_close\": \"dict_close\",\n\t\t     \"brace_term_open\": \"brace_term_open\",\n\t\t     \"brace_term_close\": \"brace_term_close\",\n\t\t     \"neck\": \"neck\",\n\t\t     \"fullstop\": \"fullstop\",\n\n\t\t     \"string_terminal\": \"string\",\n\n\t\t     \"html\": \"functor\",\n\t\t     \"entity\": \"atom\",\n\t\t     \"html_attribute\": \"functor\",\n\t\t     \"sgml_attr_function\": \"atom\",\n\t\t     \"http_location_for_id\": \"atom\",\n\t\t     \"http_no_location_for_id\": \"atom\"\n\t\t   };\n\n  /* Enrich the style using the token list from the server.\n\n  @param stream  is the CM input stream\n  @param state   is the mode state object\n  @param type    is the syntactic category detected by the mode\n  @param content is the textual content of the token (if any)\n  @param style   is the style determined by the mode.\n  */\n\n  function enrichStyle(stream, state, type, content, style) {\n    var parserConfig = this;\n\n    /* serverToken(state) returns the server token at\n       state.curTerm.curToken or null\n    */\n\n    function serverToken(state) {\n      var term = parserConfig.metainfo[state.curTerm];\n      if ( !term ) return null;\n      var token = term[state.curToken];\n      if ( !token ) return null;\n\n      return token;\n    }\n\n    /* outOfSync() is called whenever we lost synchronization.  It\n       records the position where we lost sync and asks the server\n       for a fresh analysis.\n    */\n\n    function outOfSync() {\n      if ( !state.outOfSync ) {\n\tconsole.log(\"Mismatch: (\"+content+\") \"+type+\"/\"+token.type);\n\tstate.outOfSync = { okToken:       state.curToken,\n\t\t\t    okTerm:        state.curTerm,\n\t\t\t    skippedTerms:  0,\n\t\t\t    skippedTokens: [],\n\t\t\t  };\n      }\n      parserConfig.editor.askRefresh();\n    }\n\n    /* reSync() tries to re-synchronize after we lost synchronization\n       with the server due to local edits.  If successful, it clears\n       state.outOfSync and returns the enriched token.  Else it returns\n       null.\n\n       Data to work from:\n\n\t state.outOfSync.skipped: skipped tokens since out-of-sync or\n\t\tlast term\n\t state.outOfSync.skippedTerms: number of fullstop seen since\n\t\twe lost synchronisation\n    */\n\n    function reSync() {\n      var oos = state.outOfSync;\n      var resyncState = { curToken: oos.okToken,\n\t\t\t  curTerm:  oos.okTerm\n\t\t\t};\n\n      /* TBD */\n      if ( oos.skippedTerms ) {\n\n      } else {\n      }\n\n      return null;\n    }\n\n\n    /* match the next token.  It is possible that the server has combined\n       several tokens into one logical unit.  In that case the token is\n       merely a prefix of what the server returned and we try to eat the\n       remainder.  Examples are files specifications such as\n       library(lists).\n    */\n\n    function matchTokenText(tokenText) {\n      var start;\n\n      if ( content == tokenText )\n\treturn true;\n\n      if ( (start=tokenText.lastIndexOf(content,1)) >= 0 ) {\n\tvar left = tokenText.substring(content.length+start);\n\tfor(var i=0; i<left.length; i++) {\n\t  if ( !stream.eat(left.charAt(i)) ) {\n\t    stream.backUp(i);\n\t    return false;\n\t  }\n\t}\n\treturn true;\n      }\n\n      return false;\n    }\n\n    /**\n     * Test whether we are nested in quoted material.  That happens if\n     * a newline appears in the quoted value, where our CodeMirror\n     * tokeniser gives multiple \"string\", etc. tokens, while the server\n     * only gives one, so we should not increment the server curToken.\n     */\n    function isQuoted(nesting) {\n      var last = nesting.slice(-1)[0];\n      return last && last.type == \"quoted\";\n    }\n\n    /**\n     * Matches the server token `token` to the current token and updates\n     * state.curToken and/or state.curTerm if the two matches.\n     *\n     * @param {Object} token is the next token from the server array\n     * @param {Object} state is the mode state object\n     * @returns {String|undefined} enriched style, the original style\n     * or `undefined` if the mode token does not match the server token.\n    */\n\n    function matchToken(token, state) {\n      if ( token ) {\n\tif ( syncOnType[type] ) {\n\t  if ( token.text && content ) {\n\t    if ( matchTokenText(token.text) ) {\n\t      state.curToken++;\n\t      return token.type;\n\t    }\n\n\t    return undefined;\n\t  } else if ( syncOnType[type] == serverSync[token.type] ) {\n\t    if ( type == \"fullstop\" ) {\n\t      state.curTerm++;\n\t      state.curToken = 0;\n\t    } else if ( !isQuoted(state.nesting) ) {\n\t      state.curToken++;\n\t    }\n\t    return token.type;\n\t  } else if ( syncOnType[type] == token.base ) {\n\t    state.curToken++;\n\t    return token.type;\n\t  } else if ( type == \"qatom\" && serverSync[token.type] == \"atom\" ) {\n\t    state.curToken++;\n\t    return token.type;\n\t  } else if ( type == \"number\" && token.type == \"meta\" ) {\n\t    state.curToken++;\t/* 0-9 as meta_predicate arguments */\n\t    return token.type;\n\t  } else if ( serverSync[token.type] == \"text\" &&\n\t\t      (type == \"atom\" || type == \"qatom\" || type == \"string\") ) {\n\t    state.curToken++;\t/* 0-9 as meta_predicate arguments */\n\t    return token.type;\n\t  } else if ( type == \"neg-number\" &&\n\t\t      token.text && token.text == \"-\" ) {\n\t\t/* HACK: A-1 is tokenised as \"var\" \"neg-number\" */\n\t\t/* But the server says \"var\" \"atom\" \"number\" */\n\t\t/* Needs operator logic to fix at the client */\n\t    state.curToken += 2;\n\t    return \"number\";\n\t  } else if ( type == \"pos-number\" &&\n\t\t      token.text && token.text == \"+\" ) {\n\t\t/* HACK: A+1 is tokenised as \"var\" \"pos-number\" */\n\t\t/* But the server says \"var\" \"atom\" \"number\" */\n\t\t/* Needs operator logic to fix at the client */\n\t    state.curToken += 2;\n\t    return \"number\";\n\t  }\n\t} else if ( content && token.text == content ) {\n\t  state.curToken++;\t\t/* ,; are not synced */\n\t  return token.type;\n\t} else {\n\t  return style;\t\t\t/* not-synced client token */\n\t}\n      }\n\n      return undefined;\n    }\n\n    /* enrichStyle() body */\n\n    if ( state.curTerm != null ) {\n      var token;\n      var serverStyle;\n\n      //console.log(type,style,content,state);\n\n      if ( state.syntax_error ) {\t\t/* error state; recap after . */\n\tif ( type == \"fullstop\" ) {\n\t  parserConfig.editor.askRefresh();\n\t  delete state.syntax_error;\n\t}\n\treturn style;\n      }\n\n      if ( state.outOfSync ) {\t\t\t/* lost synchronization */\n\tvar oos = state.outOfSync;\n\n\tif ( oos.skippedTerms <= 3 ) {\n\t  oos.skippedTokens.push({ type:    type,\n\t\t\t           style:   style,\n\t\t\t\t   content: content\n\t\t\t         });\n\n\t  if ( (serverStyle=reSync()) ) {\n\t    return serverStyle;\t\t\t/* re-synchronized! */\n\t  } else if ( type == \"fullstop\" ) {\n\t    oos.skippedTokens = [];\n\t    oos.skippedTerms++;\n\t  }\n\t}\n\n\treturn style;\n      }\n\n      if ( !(token=serverToken(state)) ) {\n\tparserConfig.editor.askRefresh();\t/* more text added at the end */\n\treturn style;\n      }\n\n      //console.log(\"Enrich: (\"+content+\") \"+type+\"/\"+token.type);\n\n      if ( (serverStyle=matchToken(token, state)) !== undefined ) {\n\treturn serverStyle;\n      } else if ( token.type == \"syntax_error\" ) {\n\tstate.syntax_error = true;\n\tstate.curToken = 0;\n\tstate.curTerm++;\n\treturn style;\n      } else {\n\toutOfSync();\n\treturn style + \" outofsync\";\n      }\n    }\n\n    return style;\n  }\n\n\t\t /*******************************\n\t\t *\t  FETCH ENRICHED\t*\n\t\t *******************************/\n\n  CodeMirror.prototype.getEnrichedToken = function(token) {\n    if ( token.state.curTerm != null && token.state.curToken != null )\n    { var state = this.getOption(\"mode\");\n      var terminfo;\n\n      if ( state.metainfo && (terminfo=state.metainfo[token.state.curTerm]) )\n\treturn terminfo[token.state.curToken-1];\n    }\n\n    return undefined;\n  }\n\n  /**\n   * @param {Object} [elem] is the element that will be filled with\n   * the token information.  If not provided, a `<span>` of class\n   * `token-info` is returned.\n   * @returns {Object} DOM object providing info that will be filled\n   * later from the ajax call.\n   */\n  CodeMirror.prototype.tokenInfo = function(token, elem) {\n    var state = this.state.prologHighlightServer;\n\n    if ( !elem )\n      elem = $($.el.span({class:\"token-info\"}, \"...\"));\n\n    $.ajax({ url: state.url.info,\n\t     data: token,\n\t     success: function(data) {\n\t       elem.html(data);\n\t     }\n           });\n\n    return elem[0];\n  }\n\n  /**\n   * @param {Object} token is an enriched token\n   * @returns {Array(Object)} is an array of source references.\n   */\n\n  CodeMirror.prototype.getTokenReferences = function(token) {\n    var result = [];\n\n    function setFile(obj, from) {\n      if ( from && from.indexOf(\"swish://\") == 0 ) {\n\tobj.file = from.substring(8);\n\treturn true;\n      }\n    }\n\n    switch(token.type) {\n      case \"goal_local\":\n\tvar obj = {\n\t  title: \"Source for \"+token.text+\"/\"+token.arity,\n\t  line:  token.line,\n\t  regex: new RegExp(\"\\\\b\"+RegExp.escape(token.text), \"g\"),\n\t  showAllMatches: true\n\t};\n\tsetFile(obj, token.file);\n\tresult.push(obj);\n\tbreak;\n      case \"file\":\n\tvar obj = {};\n\n\tif ( setFile(obj, token.path) ) {\n\t  obj.title = \"Included file \" + obj.file;\n\t  result.push(obj);\n\t}\n        break;\n    }\n\n    return result;\n  }\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/xml/xml',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n  autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n                    'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n                    'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n                    'track': true, 'wbr': true, 'menuitem': true},\n  implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n                     'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n                     'th': true, 'tr': true},\n  contextGrabbers: {\n    'dd': {'dd': true, 'dt': true},\n    'dt': {'dd': true, 'dt': true},\n    'li': {'li': true},\n    'option': {'option': true, 'optgroup': true},\n    'optgroup': {'optgroup': true},\n    'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n          'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n          'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n          'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n          'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n    'rp': {'rp': true, 'rt': true},\n    'rt': {'rp': true, 'rt': true},\n    'tbody': {'tbody': true, 'tfoot': true},\n    'td': {'td': true, 'th': true},\n    'tfoot': {'tbody': true},\n    'th': {'td': true, 'th': true},\n    'thead': {'tbody': true, 'tfoot': true},\n    'tr': {'tr': true}\n  },\n  doNotIndent: {\"pre\": true},\n  allowUnquoted: true,\n  allowMissing: true,\n  caseFold: true\n}\n\nvar xmlConfig = {\n  autoSelfClosers: {},\n  implicitlyClosed: {},\n  contextGrabbers: {},\n  doNotIndent: {},\n  allowUnquoted: false,\n  allowMissing: false,\n  allowMissingTagName: false,\n  caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n  var indentUnit = editorConf.indentUnit\n  var config = {}\n  var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n  for (var prop in defaults) config[prop] = defaults[prop]\n  for (var prop in config_) config[prop] = config_[prop]\n\n  // Return variables for tokenizers\n  var type, setStyle;\n\n  function inText(stream, state) {\n    function chain(parser) {\n      state.tokenize = parser;\n      return parser(stream, state);\n    }\n\n    var ch = stream.next();\n    if (ch == \"<\") {\n      if (stream.eat(\"!\")) {\n        if (stream.eat(\"[\")) {\n          if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n          else return null;\n        } else if (stream.match(\"--\")) {\n          return chain(inBlock(\"comment\", \"-->\"));\n        } else if (stream.match(\"DOCTYPE\", true, true)) {\n          stream.eatWhile(/[\\w\\._\\-]/);\n          return chain(doctype(1));\n        } else {\n          return null;\n        }\n      } else if (stream.eat(\"?\")) {\n        stream.eatWhile(/[\\w\\._\\-]/);\n        state.tokenize = inBlock(\"meta\", \"?>\");\n        return \"meta\";\n      } else {\n        type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n        state.tokenize = inTag;\n        return \"tag bracket\";\n      }\n    } else if (ch == \"&\") {\n      var ok;\n      if (stream.eat(\"#\")) {\n        if (stream.eat(\"x\")) {\n          ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n        } else {\n          ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n        }\n      } else {\n        ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n      }\n      return ok ? \"atom\" : \"error\";\n    } else {\n      stream.eatWhile(/[^&<]/);\n      return null;\n    }\n  }\n  inText.isInText = true;\n\n  function inTag(stream, state) {\n    var ch = stream.next();\n    if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n      state.tokenize = inText;\n      type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n      return \"tag bracket\";\n    } else if (ch == \"=\") {\n      type = \"equals\";\n      return null;\n    } else if (ch == \"<\") {\n      state.tokenize = inText;\n      state.state = baseState;\n      state.tagName = state.tagStart = null;\n      var next = state.tokenize(stream, state);\n      return next ? next + \" tag error\" : \"tag error\";\n    } else if (/[\\'\\\"]/.test(ch)) {\n      state.tokenize = inAttribute(ch);\n      state.stringStartCol = stream.column();\n      return state.tokenize(stream, state);\n    } else {\n      stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n      return \"word\";\n    }\n  }\n\n  function inAttribute(quote) {\n    var closure = function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.next() == quote) {\n          state.tokenize = inTag;\n          break;\n        }\n      }\n      return \"string\";\n    };\n    closure.isInAttribute = true;\n    return closure;\n  }\n\n  function inBlock(style, terminator) {\n    return function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.match(terminator)) {\n          state.tokenize = inText;\n          break;\n        }\n        stream.next();\n      }\n      return style;\n    }\n  }\n\n  function doctype(depth) {\n    return function(stream, state) {\n      var ch;\n      while ((ch = stream.next()) != null) {\n        if (ch == \"<\") {\n          state.tokenize = doctype(depth + 1);\n          return state.tokenize(stream, state);\n        } else if (ch == \">\") {\n          if (depth == 1) {\n            state.tokenize = inText;\n            break;\n          } else {\n            state.tokenize = doctype(depth - 1);\n            return state.tokenize(stream, state);\n          }\n        }\n      }\n      return \"meta\";\n    };\n  }\n\n  function Context(state, tagName, startOfLine) {\n    this.prev = state.context;\n    this.tagName = tagName;\n    this.indent = state.indented;\n    this.startOfLine = startOfLine;\n    if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n      this.noIndent = true;\n  }\n  function popContext(state) {\n    if (state.context) state.context = state.context.prev;\n  }\n  function maybePopContext(state, nextTagName) {\n    var parentTagName;\n    while (true) {\n      if (!state.context) {\n        return;\n      }\n      parentTagName = state.context.tagName;\n      if (!config.contextGrabbers.hasOwnProperty(parentTagName) ||\n          !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n        return;\n      }\n      popContext(state);\n    }\n  }\n\n  function baseState(type, stream, state) {\n    if (type == \"openTag\") {\n      state.tagStart = stream.column();\n      return tagNameState;\n    } else if (type == \"closeTag\") {\n      return closeTagNameState;\n    } else {\n      return baseState;\n    }\n  }\n  function tagNameState(type, stream, state) {\n    if (type == \"word\") {\n      state.tagName = stream.current();\n      setStyle = \"tag\";\n      return attrState;\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return attrState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return tagNameState;\n    }\n  }\n  function closeTagNameState(type, stream, state) {\n    if (type == \"word\") {\n      var tagName = stream.current();\n      if (state.context && state.context.tagName != tagName &&\n          config.implicitlyClosed.hasOwnProperty(state.context.tagName))\n        popContext(state);\n      if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n        setStyle = \"tag\";\n        return closeState;\n      } else {\n        setStyle = \"tag error\";\n        return closeStateErr;\n      }\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return closeState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return closeStateErr;\n    }\n  }\n\n  function closeState(type, _stream, state) {\n    if (type != \"endTag\") {\n      setStyle = \"error\";\n      return closeState;\n    }\n    popContext(state);\n    return baseState;\n  }\n  function closeStateErr(type, stream, state) {\n    setStyle = \"error\";\n    return closeState(type, stream, state);\n  }\n\n  function attrState(type, _stream, state) {\n    if (type == \"word\") {\n      setStyle = \"attribute\";\n      return attrEqState;\n    } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n      var tagName = state.tagName, tagStart = state.tagStart;\n      state.tagName = state.tagStart = null;\n      if (type == \"selfcloseTag\" ||\n          config.autoSelfClosers.hasOwnProperty(tagName)) {\n        maybePopContext(state, tagName);\n      } else {\n        maybePopContext(state, tagName);\n        state.context = new Context(state, tagName, tagStart == state.indented);\n      }\n      return baseState;\n    }\n    setStyle = \"error\";\n    return attrState;\n  }\n  function attrEqState(type, stream, state) {\n    if (type == \"equals\") return attrValueState;\n    if (!config.allowMissing) setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrValueState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n    setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrContinuedState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    return attrState(type, stream, state);\n  }\n\n  return {\n    startState: function(baseIndent) {\n      var state = {tokenize: inText,\n                   state: baseState,\n                   indented: baseIndent || 0,\n                   tagName: null, tagStart: null,\n                   context: null}\n      if (baseIndent != null) state.baseIndent = baseIndent\n      return state\n    },\n\n    token: function(stream, state) {\n      if (!state.tagName && stream.sol())\n        state.indented = stream.indentation();\n\n      if (stream.eatSpace()) return null;\n      type = null;\n      var style = state.tokenize(stream, state);\n      if ((style || type) && style != \"comment\") {\n        setStyle = null;\n        state.state = state.state(type || style, stream, state);\n        if (setStyle)\n          style = setStyle == \"error\" ? style + \" error\" : setStyle;\n      }\n      return style;\n    },\n\n    indent: function(state, textAfter, fullLine) {\n      var context = state.context;\n      // Indent multi-line strings (e.g. css).\n      if (state.tokenize.isInAttribute) {\n        if (state.tagStart == state.indented)\n          return state.stringStartCol + 1;\n        else\n          return state.indented + indentUnit;\n      }\n      if (context && context.noIndent) return CodeMirror.Pass;\n      if (state.tokenize != inTag && state.tokenize != inText)\n        return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n      // Indent the starts of attribute names.\n      if (state.tagName) {\n        if (config.multilineTagIndentPastTag !== false)\n          return state.tagStart + state.tagName.length + 2;\n        else\n          return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n      }\n      if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n      var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n      if (tagAfter && tagAfter[1]) { // Closing tag spotted\n        while (context) {\n          if (context.tagName == tagAfter[2]) {\n            context = context.prev;\n            break;\n          } else if (config.implicitlyClosed.hasOwnProperty(context.tagName)) {\n            context = context.prev;\n          } else {\n            break;\n          }\n        }\n      } else if (tagAfter) { // Opening tag spotted\n        while (context) {\n          var grabbers = config.contextGrabbers[context.tagName];\n          if (grabbers && grabbers.hasOwnProperty(tagAfter[2]))\n            context = context.prev;\n          else\n            break;\n        }\n      }\n      while (context && context.prev && !context.startOfLine)\n        context = context.prev;\n      if (context) return context.indent + indentUnit;\n      else return state.baseIndent || 0;\n    },\n\n    electricInput: /<\\/[\\s\\w:]+>$/,\n    blockCommentStart: \"<!--\",\n    blockCommentEnd: \"-->\",\n\n    configuration: config.htmlMode ? \"html\" : \"xml\",\n    helperType: config.htmlMode ? \"html\" : \"xml\",\n\n    skipAttribute: function(state) {\n      if (state.state == attrValueState)\n        state.state = attrState\n    }\n  };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n  CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/meta',[\"../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.modeInfo = [\n    {name: \"APL\", mime: \"text/apl\", mode: \"apl\", ext: [\"dyalog\", \"apl\"]},\n    {name: \"PGP\", mimes: [\"application/pgp\", \"application/pgp-encrypted\", \"application/pgp-keys\", \"application/pgp-signature\"], mode: \"asciiarmor\", ext: [\"asc\", \"pgp\", \"sig\"]},\n    {name: \"ASN.1\", mime: \"text/x-ttcn-asn\", mode: \"asn.1\", ext: [\"asn\", \"asn1\"]},\n    {name: \"Asterisk\", mime: \"text/x-asterisk\", mode: \"asterisk\", file: /^extensions\\.conf$/i},\n    {name: \"Brainfuck\", mime: \"text/x-brainfuck\", mode: \"brainfuck\", ext: [\"b\", \"bf\"]},\n    {name: \"C\", mime: \"text/x-csrc\", mode: \"clike\", ext: [\"c\", \"h\", \"ino\"]},\n    {name: \"C++\", mime: \"text/x-c++src\", mode: \"clike\", ext: [\"cpp\", \"c++\", \"cc\", \"cxx\", \"hpp\", \"h++\", \"hh\", \"hxx\"], alias: [\"cpp\"]},\n    {name: \"Cobol\", mime: \"text/x-cobol\", mode: \"cobol\", ext: [\"cob\", \"cpy\"]},\n    {name: \"C#\", mime: \"text/x-csharp\", mode: \"clike\", ext: [\"cs\"], alias: [\"csharp\"]},\n    {name: \"Clojure\", mime: \"text/x-clojure\", mode: \"clojure\", ext: [\"clj\", \"cljc\", \"cljx\"]},\n    {name: \"ClojureScript\", mime: \"text/x-clojurescript\", mode: \"clojure\", ext: [\"cljs\"]},\n    {name: \"Closure Stylesheets (GSS)\", mime: \"text/x-gss\", mode: \"css\", ext: [\"gss\"]},\n    {name: \"CMake\", mime: \"text/x-cmake\", mode: \"cmake\", ext: [\"cmake\", \"cmake.in\"], file: /^CMakeLists.txt$/},\n    {name: \"CoffeeScript\", mimes: [\"application/vnd.coffeescript\", \"text/coffeescript\", \"text/x-coffeescript\"], mode: \"coffeescript\", ext: [\"coffee\"], alias: [\"coffee\", \"coffee-script\"]},\n    {name: \"Common Lisp\", mime: \"text/x-common-lisp\", mode: \"commonlisp\", ext: [\"cl\", \"lisp\", \"el\"], alias: [\"lisp\"]},\n    {name: \"Cypher\", mime: \"application/x-cypher-query\", mode: \"cypher\", ext: [\"cyp\", \"cypher\"]},\n    {name: \"Cython\", mime: \"text/x-cython\", mode: \"python\", ext: [\"pyx\", \"pxd\", \"pxi\"]},\n    {name: \"Crystal\", mime: \"text/x-crystal\", mode: \"crystal\", ext: [\"cr\"]},\n    {name: \"CSS\", mime: \"text/css\", mode: \"css\", ext: [\"css\"]},\n    {name: \"CQL\", mime: \"text/x-cassandra\", mode: \"sql\", ext: [\"cql\"]},\n    {name: \"D\", mime: \"text/x-d\", mode: \"d\", ext: [\"d\"]},\n    {name: \"Dart\", mimes: [\"application/dart\", \"text/x-dart\"], mode: \"dart\", ext: [\"dart\"]},\n    {name: \"diff\", mime: \"text/x-diff\", mode: \"diff\", ext: [\"diff\", \"patch\"]},\n    {name: \"Django\", mime: \"text/x-django\", mode: \"django\"},\n    {name: \"Dockerfile\", mime: \"text/x-dockerfile\", mode: \"dockerfile\", file: /^Dockerfile$/},\n    {name: \"DTD\", mime: \"application/xml-dtd\", mode: \"dtd\", ext: [\"dtd\"]},\n    {name: \"Dylan\", mime: \"text/x-dylan\", mode: \"dylan\", ext: [\"dylan\", \"dyl\", \"intr\"]},\n    {name: \"EBNF\", mime: \"text/x-ebnf\", mode: \"ebnf\"},\n    {name: \"ECL\", mime: \"text/x-ecl\", mode: \"ecl\", ext: [\"ecl\"]},\n    {name: \"edn\", mime: \"application/edn\", mode: \"clojure\", ext: [\"edn\"]},\n    {name: \"Eiffel\", mime: \"text/x-eiffel\", mode: \"eiffel\", ext: [\"e\"]},\n    {name: \"Elm\", mime: \"text/x-elm\", mode: \"elm\", ext: [\"elm\"]},\n    {name: \"Embedded Javascript\", mime: \"application/x-ejs\", mode: \"htmlembedded\", ext: [\"ejs\"]},\n    {name: \"Embedded Ruby\", mime: \"application/x-erb\", mode: \"htmlembedded\", ext: [\"erb\"]},\n    {name: \"Erlang\", mime: \"text/x-erlang\", mode: \"erlang\", ext: [\"erl\"]},\n    {name: \"Esper\", mime: \"text/x-esper\", mode: \"sql\"},\n    {name: \"Factor\", mime: \"text/x-factor\", mode: \"factor\", ext: [\"factor\"]},\n    {name: \"FCL\", mime: \"text/x-fcl\", mode: \"fcl\"},\n    {name: \"Forth\", mime: \"text/x-forth\", mode: \"forth\", ext: [\"forth\", \"fth\", \"4th\"]},\n    {name: \"Fortran\", mime: \"text/x-fortran\", mode: \"fortran\", ext: [\"f\", \"for\", \"f77\", \"f90\", \"f95\"]},\n    {name: \"F#\", mime: \"text/x-fsharp\", mode: \"mllike\", ext: [\"fs\"], alias: [\"fsharp\"]},\n    {name: \"Gas\", mime: \"text/x-gas\", mode: \"gas\", ext: [\"s\"]},\n    {name: \"Gherkin\", mime: \"text/x-feature\", mode: \"gherkin\", ext: [\"feature\"]},\n    {name: \"GitHub Flavored Markdown\", mime: \"text/x-gfm\", mode: \"gfm\", file: /^(readme|contributing|history).md$/i},\n    {name: \"Go\", mime: \"text/x-go\", mode: \"go\", ext: [\"go\"]},\n    {name: \"Groovy\", mime: \"text/x-groovy\", mode: \"groovy\", ext: [\"groovy\", \"gradle\"], file: /^Jenkinsfile$/},\n    {name: \"HAML\", mime: \"text/x-haml\", mode: \"haml\", ext: [\"haml\"]},\n    {name: \"Haskell\", mime: \"text/x-haskell\", mode: \"haskell\", ext: [\"hs\"]},\n    {name: \"Haskell (Literate)\", mime: \"text/x-literate-haskell\", mode: \"haskell-literate\", ext: [\"lhs\"]},\n    {name: \"Haxe\", mime: \"text/x-haxe\", mode: \"haxe\", ext: [\"hx\"]},\n    {name: \"HXML\", mime: \"text/x-hxml\", mode: \"haxe\", ext: [\"hxml\"]},\n    {name: \"ASP.NET\", mime: \"application/x-aspx\", mode: \"htmlembedded\", ext: [\"aspx\"], alias: [\"asp\", \"aspx\"]},\n    {name: \"HTML\", mime: \"text/html\", mode: \"htmlmixed\", ext: [\"html\", \"htm\", \"handlebars\", \"hbs\"], alias: [\"xhtml\"]},\n    {name: \"HTTP\", mime: \"message/http\", mode: \"http\"},\n    {name: \"IDL\", mime: \"text/x-idl\", mode: \"idl\", ext: [\"pro\"]},\n    {name: \"Pug\", mime: \"text/x-pug\", mode: \"pug\", ext: [\"jade\", \"pug\"], alias: [\"jade\"]},\n    {name: \"Java\", mime: \"text/x-java\", mode: \"clike\", ext: [\"java\"]},\n    {name: \"Java Server Pages\", mime: \"application/x-jsp\", mode: \"htmlembedded\", ext: [\"jsp\"], alias: [\"jsp\"]},\n    {name: \"JavaScript\", mimes: [\"text/javascript\", \"text/ecmascript\", \"application/javascript\", \"application/x-javascript\", \"application/ecmascript\"],\n     mode: \"javascript\", ext: [\"js\"], alias: [\"ecmascript\", \"js\", \"node\"]},\n    {name: \"JSON\", mimes: [\"application/json\", \"application/x-json\"], mode: \"javascript\", ext: [\"json\", \"map\"], alias: [\"json5\"]},\n    {name: \"JSON-LD\", mime: \"application/ld+json\", mode: \"javascript\", ext: [\"jsonld\"], alias: [\"jsonld\"]},\n    {name: \"JSX\", mime: \"text/jsx\", mode: \"jsx\", ext: [\"jsx\"]},\n    {name: \"Jinja2\", mime: \"text/jinja2\", mode: \"jinja2\", ext: [\"j2\", \"jinja\", \"jinja2\"]},\n    {name: \"Julia\", mime: \"text/x-julia\", mode: \"julia\", ext: [\"jl\"]},\n    {name: \"Kotlin\", mime: \"text/x-kotlin\", mode: \"clike\", ext: [\"kt\"]},\n    {name: \"LESS\", mime: \"text/x-less\", mode: \"css\", ext: [\"less\"]},\n    {name: \"LiveScript\", mime: \"text/x-livescript\", mode: \"livescript\", ext: [\"ls\"], alias: [\"ls\"]},\n    {name: \"Lua\", mime: \"text/x-lua\", mode: \"lua\", ext: [\"lua\"]},\n    {name: \"Markdown\", mime: \"text/x-markdown\", mode: \"markdown\", ext: [\"markdown\", \"md\", \"mkd\"]},\n    {name: \"mIRC\", mime: \"text/mirc\", mode: \"mirc\"},\n    {name: \"MariaDB SQL\", mime: \"text/x-mariadb\", mode: \"sql\"},\n    {name: \"Mathematica\", mime: \"text/x-mathematica\", mode: \"mathematica\", ext: [\"m\", \"nb\"]},\n    {name: \"Modelica\", mime: \"text/x-modelica\", mode: \"modelica\", ext: [\"mo\"]},\n    {name: \"MUMPS\", mime: \"text/x-mumps\", mode: \"mumps\", ext: [\"mps\"]},\n    {name: \"MS SQL\", mime: \"text/x-mssql\", mode: \"sql\"},\n    {name: \"mbox\", mime: \"application/mbox\", mode: \"mbox\", ext: [\"mbox\"]},\n    {name: \"MySQL\", mime: \"text/x-mysql\", mode: \"sql\"},\n    {name: \"Nginx\", mime: \"text/x-nginx-conf\", mode: \"nginx\", file: /nginx.*\\.conf$/i},\n    {name: \"NSIS\", mime: \"text/x-nsis\", mode: \"nsis\", ext: [\"nsh\", \"nsi\"]},\n    {name: \"NTriples\", mimes: [\"application/n-triples\", \"application/n-quads\", \"text/n-triples\"],\n     mode: \"ntriples\", ext: [\"nt\", \"nq\"]},\n    {name: \"Objective-C\", mime: \"text/x-objectivec\", mode: \"clike\", ext: [\"m\", \"mm\"], alias: [\"objective-c\", \"objc\"]},\n    {name: \"OCaml\", mime: \"text/x-ocaml\", mode: \"mllike\", ext: [\"ml\", \"mli\", \"mll\", \"mly\"]},\n    {name: \"Octave\", mime: \"text/x-octave\", mode: \"octave\", ext: [\"m\"]},\n    {name: \"Oz\", mime: \"text/x-oz\", mode: \"oz\", ext: [\"oz\"]},\n    {name: \"Pascal\", mime: \"text/x-pascal\", mode: \"pascal\", ext: [\"p\", \"pas\"]},\n    {name: \"PEG.js\", mime: \"null\", mode: \"pegjs\", ext: [\"jsonld\"]},\n    {name: \"Perl\", mime: \"text/x-perl\", mode: \"perl\", ext: [\"pl\", \"pm\"]},\n    {name: \"PHP\", mimes: [\"text/x-php\", \"application/x-httpd-php\", \"application/x-httpd-php-open\"], mode: \"php\", ext: [\"php\", \"php3\", \"php4\", \"php5\", \"php7\", \"phtml\"]},\n    {name: \"Pig\", mime: \"text/x-pig\", mode: \"pig\", ext: [\"pig\"]},\n    {name: \"Plain Text\", mime: \"text/plain\", mode: \"null\", ext: [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\"]},\n    {name: \"PLSQL\", mime: \"text/x-plsql\", mode: \"sql\", ext: [\"pls\"]},\n    {name: \"PowerShell\", mime: \"application/x-powershell\", mode: \"powershell\", ext: [\"ps1\", \"psd1\", \"psm1\"]},\n    {name: \"Properties files\", mime: \"text/x-properties\", mode: \"properties\", ext: [\"properties\", \"ini\", \"in\"], alias: [\"ini\", \"properties\"]},\n    {name: \"ProtoBuf\", mime: \"text/x-protobuf\", mode: \"protobuf\", ext: [\"proto\"]},\n    {name: \"Python\", mime: \"text/x-python\", mode: \"python\", ext: [\"BUILD\", \"bzl\", \"py\", \"pyw\"], file: /^(BUCK|BUILD)$/},\n    {name: \"Puppet\", mime: \"text/x-puppet\", mode: \"puppet\", ext: [\"pp\"]},\n    {name: \"Q\", mime: \"text/x-q\", mode: \"q\", ext: [\"q\"]},\n    {name: \"R\", mime: \"text/x-rsrc\", mode: \"r\", ext: [\"r\", \"R\"], alias: [\"rscript\"]},\n    {name: \"reStructuredText\", mime: \"text/x-rst\", mode: \"rst\", ext: [\"rst\"], alias: [\"rst\"]},\n    {name: \"RPM Changes\", mime: \"text/x-rpm-changes\", mode: \"rpm\"},\n    {name: \"RPM Spec\", mime: \"text/x-rpm-spec\", mode: \"rpm\", ext: [\"spec\"]},\n    {name: \"Ruby\", mime: \"text/x-ruby\", mode: \"ruby\", ext: [\"rb\"], alias: [\"jruby\", \"macruby\", \"rake\", \"rb\", \"rbx\"]},\n    {name: \"Rust\", mime: \"text/x-rustsrc\", mode: \"rust\", ext: [\"rs\"]},\n    {name: \"SAS\", mime: \"text/x-sas\", mode: \"sas\", ext: [\"sas\"]},\n    {name: \"Sass\", mime: \"text/x-sass\", mode: \"sass\", ext: [\"sass\"]},\n    {name: \"Scala\", mime: \"text/x-scala\", mode: \"clike\", ext: [\"scala\"]},\n    {name: \"Scheme\", mime: \"text/x-scheme\", mode: \"scheme\", ext: [\"scm\", \"ss\"]},\n    {name: \"SCSS\", mime: \"text/x-scss\", mode: \"css\", ext: [\"scss\"]},\n    {name: \"Shell\", mimes: [\"text/x-sh\", \"application/x-sh\"], mode: \"shell\", ext: [\"sh\", \"ksh\", \"bash\"], alias: [\"bash\", \"sh\", \"zsh\"], file: /^PKGBUILD$/},\n    {name: \"Sieve\", mime: \"application/sieve\", mode: \"sieve\", ext: [\"siv\", \"sieve\"]},\n    {name: \"Slim\", mimes: [\"text/x-slim\", \"application/x-slim\"], mode: \"slim\", ext: [\"slim\"]},\n    {name: \"Smalltalk\", mime: \"text/x-stsrc\", mode: \"smalltalk\", ext: [\"st\"]},\n    {name: \"Smarty\", mime: \"text/x-smarty\", mode: \"smarty\", ext: [\"tpl\"]},\n    {name: \"Solr\", mime: \"text/x-solr\", mode: \"solr\"},\n    {name: \"SML\", mime: \"text/x-sml\", mode: \"mllike\", ext: [\"sml\", \"sig\", \"fun\", \"smackspec\"]},\n    {name: \"Soy\", mime: \"text/x-soy\", mode: \"soy\", ext: [\"soy\"], alias: [\"closure template\"]},\n    {name: \"SPARQL\", mime: \"application/sparql-query\", mode: \"sparql\", ext: [\"rq\", \"sparql\"], alias: [\"sparul\"]},\n    {name: \"Spreadsheet\", mime: \"text/x-spreadsheet\", mode: \"spreadsheet\", alias: [\"excel\", \"formula\"]},\n    {name: \"SQL\", mime: \"text/x-sql\", mode: \"sql\", ext: [\"sql\"]},\n    {name: \"SQLite\", mime: \"text/x-sqlite\", mode: \"sql\"},\n    {name: \"Squirrel\", mime: \"text/x-squirrel\", mode: \"clike\", ext: [\"nut\"]},\n    {name: \"Stylus\", mime: \"text/x-styl\", mode: \"stylus\", ext: [\"styl\"]},\n    {name: \"Swift\", mime: \"text/x-swift\", mode: \"swift\", ext: [\"swift\"]},\n    {name: \"sTeX\", mime: \"text/x-stex\", mode: \"stex\"},\n    {name: \"LaTeX\", mime: \"text/x-latex\", mode: \"stex\", ext: [\"text\", \"ltx\", \"tex\"], alias: [\"tex\"]},\n    {name: \"SystemVerilog\", mime: \"text/x-systemverilog\", mode: \"verilog\", ext: [\"v\", \"sv\", \"svh\"]},\n    {name: \"Tcl\", mime: \"text/x-tcl\", mode: \"tcl\", ext: [\"tcl\"]},\n    {name: \"Textile\", mime: \"text/x-textile\", mode: \"textile\", ext: [\"textile\"]},\n    {name: \"TiddlyWiki \", mime: \"text/x-tiddlywiki\", mode: \"tiddlywiki\"},\n    {name: \"Tiki wiki\", mime: \"text/tiki\", mode: \"tiki\"},\n    {name: \"TOML\", mime: \"text/x-toml\", mode: \"toml\", ext: [\"toml\"]},\n    {name: \"Tornado\", mime: \"text/x-tornado\", mode: \"tornado\"},\n    {name: \"troff\", mime: \"text/troff\", mode: \"troff\", ext: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]},\n    {name: \"TTCN\", mime: \"text/x-ttcn\", mode: \"ttcn\", ext: [\"ttcn\", \"ttcn3\", \"ttcnpp\"]},\n    {name: \"TTCN_CFG\", mime: \"text/x-ttcn-cfg\", mode: \"ttcn-cfg\", ext: [\"cfg\"]},\n    {name: \"Turtle\", mime: \"text/turtle\", mode: \"turtle\", ext: [\"ttl\"]},\n    {name: \"TypeScript\", mime: \"application/typescript\", mode: \"javascript\", ext: [\"ts\"], alias: [\"ts\"]},\n    {name: \"TypeScript-JSX\", mime: \"text/typescript-jsx\", mode: \"jsx\", ext: [\"tsx\"], alias: [\"tsx\"]},\n    {name: \"Twig\", mime: \"text/x-twig\", mode: \"twig\"},\n    {name: \"Web IDL\", mime: \"text/x-webidl\", mode: \"webidl\", ext: [\"webidl\"]},\n    {name: \"VB.NET\", mime: \"text/x-vb\", mode: \"vb\", ext: [\"vb\"]},\n    {name: \"VBScript\", mime: \"text/vbscript\", mode: \"vbscript\", ext: [\"vbs\"]},\n    {name: \"Velocity\", mime: \"text/velocity\", mode: \"velocity\", ext: [\"vtl\"]},\n    {name: \"Verilog\", mime: \"text/x-verilog\", mode: \"verilog\", ext: [\"v\"]},\n    {name: \"VHDL\", mime: \"text/x-vhdl\", mode: \"vhdl\", ext: [\"vhd\", \"vhdl\"]},\n    {name: \"Vue.js Component\", mimes: [\"script/x-vue\", \"text/x-vue\"], mode: \"vue\", ext: [\"vue\"]},\n    {name: \"XML\", mimes: [\"application/xml\", \"text/xml\"], mode: \"xml\", ext: [\"xml\", \"xsl\", \"xsd\", \"svg\"], alias: [\"rss\", \"wsdl\", \"xsd\"]},\n    {name: \"XQuery\", mime: \"application/xquery\", mode: \"xquery\", ext: [\"xy\", \"xquery\"]},\n    {name: \"Yacas\", mime: \"text/x-yacas\", mode: \"yacas\", ext: [\"ys\"]},\n    {name: \"YAML\", mimes: [\"text/x-yaml\", \"text/yaml\"], mode: \"yaml\", ext: [\"yaml\", \"yml\"], alias: [\"yml\"]},\n    {name: \"Z80\", mime: \"text/x-z80\", mode: \"z80\", ext: [\"z80\"]},\n    {name: \"mscgen\", mime: \"text/x-mscgen\", mode: \"mscgen\", ext: [\"mscgen\", \"mscin\", \"msc\"]},\n    {name: \"xu\", mime: \"text/x-xu\", mode: \"mscgen\", ext: [\"xu\"]},\n    {name: \"msgenny\", mime: \"text/x-msgenny\", mode: \"mscgen\", ext: [\"msgenny\"]}\n  ];\n  // Ensure all modes have a mime property for backwards compatibility\n  for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n    var info = CodeMirror.modeInfo[i];\n    if (info.mimes) info.mime = info.mimes[0];\n  }\n\n  CodeMirror.findModeByMIME = function(mime) {\n    mime = mime.toLowerCase();\n    for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n      var info = CodeMirror.modeInfo[i];\n      if (info.mime == mime) return info;\n      if (info.mimes) for (var j = 0; j < info.mimes.length; j++)\n        if (info.mimes[j] == mime) return info;\n    }\n    if (/\\+xml$/.test(mime)) return CodeMirror.findModeByMIME(\"application/xml\")\n    if (/\\+json$/.test(mime)) return CodeMirror.findModeByMIME(\"application/json\")\n  };\n\n  CodeMirror.findModeByExtension = function(ext) {\n    for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n      var info = CodeMirror.modeInfo[i];\n      if (info.ext) for (var j = 0; j < info.ext.length; j++)\n        if (info.ext[j] == ext) return info;\n    }\n  };\n\n  CodeMirror.findModeByFileName = function(filename) {\n    for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n      var info = CodeMirror.modeInfo[i];\n      if (info.file && info.file.test(filename)) return info;\n    }\n    var dot = filename.lastIndexOf(\".\");\n    var ext = dot > -1 && filename.substring(dot + 1, filename.length);\n    if (ext) return CodeMirror.findModeByExtension(ext);\n  };\n\n  CodeMirror.findModeByName = function(name) {\n    name = name.toLowerCase();\n    for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n      var info = CodeMirror.modeInfo[i];\n      if (info.name.toLowerCase() == name) return info;\n      if (info.alias) for (var j = 0; j < info.alias.length; j++)\n        if (info.alias[j].toLowerCase() == name) return info;\n    }\n  };\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../meta\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/mode/markdown/markdown',[\"../../lib/codemirror\", \"../xml/xml\", \"../meta\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"markdown\", function(cmCfg, modeCfg) {\n\n  var htmlMode = CodeMirror.getMode(cmCfg, \"text/html\");\n  var htmlModeMissing = htmlMode.name == \"null\"\n\n  function getMode(name) {\n    if (CodeMirror.findModeByName) {\n      var found = CodeMirror.findModeByName(name);\n      if (found) name = found.mime || found.mimes[0];\n    }\n    var mode = CodeMirror.getMode(cmCfg, name);\n    return mode.name == \"null\" ? null : mode;\n  }\n\n  // Should characters that affect highlighting be highlighted separate?\n  // Does not include characters that will be output (such as `1.` and `-` for lists)\n  if (modeCfg.highlightFormatting === undefined)\n    modeCfg.highlightFormatting = false;\n\n  // Maximum number of nested blockquotes. Set to 0 for infinite nesting.\n  // Excess `>` will emit `error` token.\n  if (modeCfg.maxBlockquoteDepth === undefined)\n    modeCfg.maxBlockquoteDepth = 0;\n\n  // Turn on task lists? (\"- [ ] \" and \"- [x] \")\n  if (modeCfg.taskLists === undefined) modeCfg.taskLists = false;\n\n  // Turn on strikethrough syntax\n  if (modeCfg.strikethrough === undefined)\n    modeCfg.strikethrough = false;\n\n  if (modeCfg.emoji === undefined)\n    modeCfg.emoji = false;\n\n  if (modeCfg.fencedCodeBlockHighlighting === undefined)\n    modeCfg.fencedCodeBlockHighlighting = true;\n\n  if (modeCfg.xml === undefined)\n    modeCfg.xml = true;\n\n  // Allow token types to be overridden by user-provided token types.\n  if (modeCfg.tokenTypeOverrides === undefined)\n    modeCfg.tokenTypeOverrides = {};\n\n  var tokenTypes = {\n    header: \"header\",\n    code: \"comment\",\n    quote: \"quote\",\n    list1: \"variable-2\",\n    list2: \"variable-3\",\n    list3: \"keyword\",\n    hr: \"hr\",\n    image: \"image\",\n    imageAltText: \"image-alt-text\",\n    imageMarker: \"image-marker\",\n    formatting: \"formatting\",\n    linkInline: \"link\",\n    linkEmail: \"link\",\n    linkText: \"link\",\n    linkHref: \"string\",\n    em: \"em\",\n    strong: \"strong\",\n    strikethrough: \"strikethrough\",\n    emoji: \"builtin\"\n  };\n\n  for (var tokenType in tokenTypes) {\n    if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) {\n      tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType];\n    }\n  }\n\n  var hrRE = /^([*\\-_])(?:\\s*\\1){2,}\\s*$/\n  ,   listRE = /^(?:[*\\-+]|^[0-9]+([.)]))\\s+/\n  ,   taskListRE = /^\\[(x| )\\](?=\\s)/i // Must follow listRE\n  ,   atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/\n  ,   setextHeaderRE = /^ *(?:\\={1,}|-{1,})\\s*$/\n  ,   textRE = /^[^#!\\[\\]*_\\\\<>` \"'(~:]+/\n  ,   fencedCodeRE = /^(~~~+|```+)[ \\t]*([\\w+#-]*)[^\\n`]*$/\n  ,   linkDefRE = /^\\s*\\[[^\\]]+?\\]:.*$/ // naive link-definition\n  ,   punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/\n  ,   expandedTab = \"    \" // CommonMark specifies tab as 4 spaces\n\n  function switchInline(stream, state, f) {\n    state.f = state.inline = f;\n    return f(stream, state);\n  }\n\n  function switchBlock(stream, state, f) {\n    state.f = state.block = f;\n    return f(stream, state);\n  }\n\n  function lineIsEmpty(line) {\n    return !line || !/\\S/.test(line.string)\n  }\n\n  // Blocks\n\n  function blankLine(state) {\n    // Reset linkTitle state\n    state.linkTitle = false;\n    state.linkHref = false;\n    state.linkText = false;\n    // Reset EM state\n    state.em = false;\n    // Reset STRONG state\n    state.strong = false;\n    // Reset strikethrough state\n    state.strikethrough = false;\n    // Reset state.quote\n    state.quote = 0;\n    // Reset state.indentedCode\n    state.indentedCode = false;\n    if (state.f == htmlBlock) {\n      var exit = htmlModeMissing\n      if (!exit) {\n        var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n        exit = inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n          (!inner.state.context && inner.state.tokenize.isInText)\n      }\n      if (exit) {\n        state.f = inlineNormal;\n        state.block = blockNormal;\n        state.htmlState = null;\n      }\n    }\n    // Reset state.trailingSpace\n    state.trailingSpace = 0;\n    state.trailingSpaceNewLine = false;\n    // Mark this line as blank\n    state.prevLine = state.thisLine\n    state.thisLine = {stream: null}\n    return null;\n  }\n\n  function blockNormal(stream, state) {\n    var firstTokenOnLine = stream.column() === state.indentation;\n    var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream);\n    var prevLineIsIndentedCode = state.indentedCode;\n    var prevLineIsHr = state.prevLine.hr;\n    var prevLineIsList = state.list !== false;\n    var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3;\n\n    state.indentedCode = false;\n\n    var lineIndentation = state.indentation;\n    // compute once per line (on first token)\n    if (state.indentationDiff === null) {\n      state.indentationDiff = state.indentation;\n      if (prevLineIsList) {\n        // Reset inline styles which shouldn't propagate aross list items\n        state.em = false;\n        state.strong = false;\n        state.code = false;\n        state.strikethrough = false;\n\n        state.list = null;\n        // While this list item's marker's indentation is less than the deepest\n        //  list item's content's indentation,pop the deepest list item\n        //  indentation off the stack, and update block indentation state\n        while (lineIndentation < state.listStack[state.listStack.length - 1]) {\n          state.listStack.pop();\n          if (state.listStack.length) {\n            state.indentation = state.listStack[state.listStack.length - 1];\n          // less than the first list's indent -> the line is no longer a list\n          } else {\n            state.list = false;\n          }\n        }\n        if (state.list !== false) {\n          state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1]\n        }\n      }\n    }\n\n    // not comprehensive (currently only for setext detection purposes)\n    var allowsInlineContinuation = (\n        !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header &&\n        (!prevLineIsList || !prevLineIsIndentedCode) &&\n        !state.prevLine.fencedCodeEnd\n    );\n\n    var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) &&\n      state.indentation <= maxNonCodeIndentation && stream.match(hrRE);\n\n    var match = null;\n    if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd ||\n         state.prevLine.header || prevLineLineIsEmpty)) {\n      stream.skipToEnd();\n      state.indentedCode = true;\n      return tokenTypes.code;\n    } else if (stream.eatSpace()) {\n      return null;\n    } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) {\n      state.quote = 0;\n      state.header = match[1].length;\n      state.thisLine.header = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"header\";\n      state.f = state.inline;\n      return getType(state);\n    } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) {\n      state.quote = firstTokenOnLine ? 1 : state.quote + 1;\n      if (modeCfg.highlightFormatting) state.formatting = \"quote\";\n      stream.eatSpace();\n      return getType(state);\n    } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) {\n      var listType = match[1] ? \"ol\" : \"ul\";\n\n      state.indentation = lineIndentation + stream.current().length;\n      state.list = true;\n      state.quote = 0;\n\n      // Add this list item's content's indentation to the stack\n      state.listStack.push(state.indentation);\n\n      if (modeCfg.taskLists && stream.match(taskListRE, false)) {\n        state.taskList = true;\n      }\n      state.f = state.inline;\n      if (modeCfg.highlightFormatting) state.formatting = [\"list\", \"list-\" + listType];\n      return getType(state);\n    } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) {\n      state.quote = 0;\n      state.fencedEndRE = new RegExp(match[1] + \"+ *$\");\n      // try switching mode\n      state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2]);\n      if (state.localMode) state.localState = CodeMirror.startState(state.localMode);\n      state.f = state.block = local;\n      if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n      state.code = -1\n      return getType(state);\n    // SETEXT has lowest block-scope precedence after HR, so check it after\n    //  the others (code, blockquote, list...)\n    } else if (\n      // if setext set, indicates line after ---/===\n      state.setext || (\n        // line before ---/===\n        (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false &&\n        !state.code && !isHr && !linkDefRE.test(stream.string) &&\n        (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))\n      )\n    ) {\n      if ( !state.setext ) {\n        state.header = match[0].charAt(0) == '=' ? 1 : 2;\n        state.setext = state.header;\n      } else {\n        state.header = state.setext;\n        // has no effect on type so we can reset it now\n        state.setext = 0;\n        stream.skipToEnd();\n        if (modeCfg.highlightFormatting) state.formatting = \"header\";\n      }\n      state.thisLine.header = true;\n      state.f = state.inline;\n      return getType(state);\n    } else if (isHr) {\n      stream.skipToEnd();\n      state.hr = true;\n      state.thisLine.hr = true;\n      return tokenTypes.hr;\n    } else if (stream.peek() === '[') {\n      return switchInline(stream, state, footnoteLink);\n    }\n\n    return switchInline(stream, state, state.inline);\n  }\n\n  function htmlBlock(stream, state) {\n    var style = htmlMode.token(stream, state.htmlState);\n    if (!htmlModeMissing) {\n      var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n      if ((inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n           (!inner.state.context && inner.state.tokenize.isInText)) ||\n          (state.md_inside && stream.current().indexOf(\">\") > -1)) {\n        state.f = inlineNormal;\n        state.block = blockNormal;\n        state.htmlState = null;\n      }\n    }\n    return style;\n  }\n\n  function local(stream, state) {\n    var currListInd = state.listStack[state.listStack.length - 1] || 0;\n    var hasExitedList = state.indentation < currListInd;\n    var maxFencedEndInd = currListInd + 3;\n    if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) {\n      if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n      var returnType;\n      if (!hasExitedList) returnType = getType(state)\n      state.localMode = state.localState = null;\n      state.block = blockNormal;\n      state.f = inlineNormal;\n      state.fencedEndRE = null;\n      state.code = 0\n      state.thisLine.fencedCodeEnd = true;\n      if (hasExitedList) return switchBlock(stream, state, state.block);\n      return returnType;\n    } else if (state.localMode) {\n      return state.localMode.token(stream, state.localState);\n    } else {\n      stream.skipToEnd();\n      return tokenTypes.code;\n    }\n  }\n\n  // Inline\n  function getType(state) {\n    var styles = [];\n\n    if (state.formatting) {\n      styles.push(tokenTypes.formatting);\n\n      if (typeof state.formatting === \"string\") state.formatting = [state.formatting];\n\n      for (var i = 0; i < state.formatting.length; i++) {\n        styles.push(tokenTypes.formatting + \"-\" + state.formatting[i]);\n\n        if (state.formatting[i] === \"header\") {\n          styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.header);\n        }\n\n        // Add `formatting-quote` and `formatting-quote-#` for blockquotes\n        // Add `error` instead if the maximum blockquote nesting depth is passed\n        if (state.formatting[i] === \"quote\") {\n          if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n            styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.quote);\n          } else {\n            styles.push(\"error\");\n          }\n        }\n      }\n    }\n\n    if (state.taskOpen) {\n      styles.push(\"meta\");\n      return styles.length ? styles.join(' ') : null;\n    }\n    if (state.taskClosed) {\n      styles.push(\"property\");\n      return styles.length ? styles.join(' ') : null;\n    }\n\n    if (state.linkHref) {\n      styles.push(tokenTypes.linkHref, \"url\");\n    } else { // Only apply inline styles to non-url text\n      if (state.strong) { styles.push(tokenTypes.strong); }\n      if (state.em) { styles.push(tokenTypes.em); }\n      if (state.strikethrough) { styles.push(tokenTypes.strikethrough); }\n      if (state.emoji) { styles.push(tokenTypes.emoji); }\n      if (state.linkText) { styles.push(tokenTypes.linkText); }\n      if (state.code) { styles.push(tokenTypes.code); }\n      if (state.image) { styles.push(tokenTypes.image); }\n      if (state.imageAltText) { styles.push(tokenTypes.imageAltText, \"link\"); }\n      if (state.imageMarker) { styles.push(tokenTypes.imageMarker); }\n    }\n\n    if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + \"-\" + state.header); }\n\n    if (state.quote) {\n      styles.push(tokenTypes.quote);\n\n      // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth\n      if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n        styles.push(tokenTypes.quote + \"-\" + state.quote);\n      } else {\n        styles.push(tokenTypes.quote + \"-\" + modeCfg.maxBlockquoteDepth);\n      }\n    }\n\n    if (state.list !== false) {\n      var listMod = (state.listStack.length - 1) % 3;\n      if (!listMod) {\n        styles.push(tokenTypes.list1);\n      } else if (listMod === 1) {\n        styles.push(tokenTypes.list2);\n      } else {\n        styles.push(tokenTypes.list3);\n      }\n    }\n\n    if (state.trailingSpaceNewLine) {\n      styles.push(\"trailing-space-new-line\");\n    } else if (state.trailingSpace) {\n      styles.push(\"trailing-space-\" + (state.trailingSpace % 2 ? \"a\" : \"b\"));\n    }\n\n    return styles.length ? styles.join(' ') : null;\n  }\n\n  function handleText(stream, state) {\n    if (stream.match(textRE, true)) {\n      return getType(state);\n    }\n    return undefined;\n  }\n\n  function inlineNormal(stream, state) {\n    var style = state.text(stream, state);\n    if (typeof style !== 'undefined')\n      return style;\n\n    if (state.list) { // List marker (*, +, -, 1., etc)\n      state.list = null;\n      return getType(state);\n    }\n\n    if (state.taskList) {\n      var taskOpen = stream.match(taskListRE, true)[1] === \" \";\n      if (taskOpen) state.taskOpen = true;\n      else state.taskClosed = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"task\";\n      state.taskList = false;\n      return getType(state);\n    }\n\n    state.taskOpen = false;\n    state.taskClosed = false;\n\n    if (state.header && stream.match(/^#+$/, true)) {\n      if (modeCfg.highlightFormatting) state.formatting = \"header\";\n      return getType(state);\n    }\n\n    var ch = stream.next();\n\n    // Matches link titles present on next line\n    if (state.linkTitle) {\n      state.linkTitle = false;\n      var matchCh = ch;\n      if (ch === '(') {\n        matchCh = ')';\n      }\n      matchCh = (matchCh+'').replace(/([.?*+^\\[\\]\\\\(){}|-])/g, \"\\\\$1\");\n      var regex = '^\\\\s*(?:[^' + matchCh + '\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)' + matchCh;\n      if (stream.match(new RegExp(regex), true)) {\n        return tokenTypes.linkHref;\n      }\n    }\n\n    // If this block is changed, it may need to be updated in GFM mode\n    if (ch === '`') {\n      var previousFormatting = state.formatting;\n      if (modeCfg.highlightFormatting) state.formatting = \"code\";\n      stream.eatWhile('`');\n      var count = stream.current().length\n      if (state.code == 0 && (!state.quote || count == 1)) {\n        state.code = count\n        return getType(state)\n      } else if (count == state.code) { // Must be exact\n        var t = getType(state)\n        state.code = 0\n        return t\n      } else {\n        state.formatting = previousFormatting\n        return getType(state)\n      }\n    } else if (state.code) {\n      return getType(state);\n    }\n\n    if (ch === '\\\\') {\n      stream.next();\n      if (modeCfg.highlightFormatting) {\n        var type = getType(state);\n        var formattingEscape = tokenTypes.formatting + \"-escape\";\n        return type ? type + \" \" + formattingEscape : formattingEscape;\n      }\n    }\n\n    if (ch === '!' && stream.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/, false)) {\n      state.imageMarker = true;\n      state.image = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"image\";\n      return getType(state);\n    }\n\n    if (ch === '[' && state.imageMarker && stream.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/, false)) {\n      state.imageMarker = false;\n      state.imageAltText = true\n      if (modeCfg.highlightFormatting) state.formatting = \"image\";\n      return getType(state);\n    }\n\n    if (ch === ']' && state.imageAltText) {\n      if (modeCfg.highlightFormatting) state.formatting = \"image\";\n      var type = getType(state);\n      state.imageAltText = false;\n      state.image = false;\n      state.inline = state.f = linkHref;\n      return type;\n    }\n\n    if (ch === '[' && !state.image) {\n      if (state.linkText && stream.match(/^.*?\\]/)) return getType(state)\n      state.linkText = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      return getType(state);\n    }\n\n    if (ch === ']' && state.linkText) {\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      state.linkText = false;\n      state.inline = state.f = stream.match(/\\(.*?\\)| ?\\[.*?\\]/, false) ? linkHref : inlineNormal\n      return type;\n    }\n\n    if (ch === '<' && stream.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/, false)) {\n      state.f = state.inline = linkInline;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      if (type){\n        type += \" \";\n      } else {\n        type = \"\";\n      }\n      return type + tokenTypes.linkInline;\n    }\n\n    if (ch === '<' && stream.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/, false)) {\n      state.f = state.inline = linkInline;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      if (type){\n        type += \" \";\n      } else {\n        type = \"\";\n      }\n      return type + tokenTypes.linkEmail;\n    }\n\n    if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i, false)) {\n      var end = stream.string.indexOf(\">\", stream.pos);\n      if (end != -1) {\n        var atts = stream.string.substring(stream.start, end);\n        if (/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(atts)) state.md_inside = true;\n      }\n      stream.backUp(1);\n      state.htmlState = CodeMirror.startState(htmlMode);\n      return switchBlock(stream, state, htmlBlock);\n    }\n\n    if (modeCfg.xml && ch === '<' && stream.match(/^\\/\\w*?>/)) {\n      state.md_inside = false;\n      return \"tag\";\n    } else if (ch === \"*\" || ch === \"_\") {\n      var len = 1, before = stream.pos == 1 ? \" \" : stream.string.charAt(stream.pos - 2)\n      while (len < 3 && stream.eat(ch)) len++\n      var after = stream.peek() || \" \"\n      // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis\n      var leftFlanking = !/\\s/.test(after) && (!punctuation.test(after) || /\\s/.test(before) || punctuation.test(before))\n      var rightFlanking = !/\\s/.test(before) && (!punctuation.test(before) || /\\s/.test(after) || punctuation.test(after))\n      var setEm = null, setStrong = null\n      if (len % 2) { // Em\n        if (!state.em && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n          setEm = true\n        else if (state.em == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n          setEm = false\n      }\n      if (len > 1) { // Strong\n        if (!state.strong && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n          setStrong = true\n        else if (state.strong == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n          setStrong = false\n      }\n      if (setStrong != null || setEm != null) {\n        if (modeCfg.highlightFormatting) state.formatting = setEm == null ? \"strong\" : setStrong == null ? \"em\" : \"strong em\"\n        if (setEm === true) state.em = ch\n        if (setStrong === true) state.strong = ch\n        var t = getType(state)\n        if (setEm === false) state.em = false\n        if (setStrong === false) state.strong = false\n        return t\n      }\n    } else if (ch === ' ') {\n      if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces\n        if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n          return getType(state);\n        } else { // Not surrounded by spaces, back up pointer\n          stream.backUp(1);\n        }\n      }\n    }\n\n    if (modeCfg.strikethrough) {\n      if (ch === '~' && stream.eatWhile(ch)) {\n        if (state.strikethrough) {// Remove strikethrough\n          if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n          var t = getType(state);\n          state.strikethrough = false;\n          return t;\n        } else if (stream.match(/^[^\\s]/, false)) {// Add strikethrough\n          state.strikethrough = true;\n          if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n          return getType(state);\n        }\n      } else if (ch === ' ') {\n        if (stream.match(/^~~/, true)) { // Probably surrounded by space\n          if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n            return getType(state);\n          } else { // Not surrounded by spaces, back up pointer\n            stream.backUp(2);\n          }\n        }\n      }\n    }\n\n    if (modeCfg.emoji && ch === \":\" && stream.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)) {\n      state.emoji = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"emoji\";\n      var retType = getType(state);\n      state.emoji = false;\n      return retType;\n    }\n\n    if (ch === ' ') {\n      if (stream.match(/^ +$/, false)) {\n        state.trailingSpace++;\n      } else if (state.trailingSpace) {\n        state.trailingSpaceNewLine = true;\n      }\n    }\n\n    return getType(state);\n  }\n\n  function linkInline(stream, state) {\n    var ch = stream.next();\n\n    if (ch === \">\") {\n      state.f = state.inline = inlineNormal;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      if (type){\n        type += \" \";\n      } else {\n        type = \"\";\n      }\n      return type + tokenTypes.linkInline;\n    }\n\n    stream.match(/^[^>]+/, true);\n\n    return tokenTypes.linkInline;\n  }\n\n  function linkHref(stream, state) {\n    // Check if space, and return NULL if so (to avoid marking the space)\n    if(stream.eatSpace()){\n      return null;\n    }\n    var ch = stream.next();\n    if (ch === '(' || ch === '[') {\n      state.f = state.inline = getLinkHrefInside(ch === \"(\" ? \")\" : \"]\");\n      if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n      state.linkHref = true;\n      return getType(state);\n    }\n    return 'error';\n  }\n\n  var linkRE = {\n    \")\": /^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\n    \"]\": /^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/\n  }\n\n  function getLinkHrefInside(endChar) {\n    return function(stream, state) {\n      var ch = stream.next();\n\n      if (ch === endChar) {\n        state.f = state.inline = inlineNormal;\n        if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n        var returnState = getType(state);\n        state.linkHref = false;\n        return returnState;\n      }\n\n      stream.match(linkRE[endChar])\n      state.linkHref = true;\n      return getType(state);\n    };\n  }\n\n  function footnoteLink(stream, state) {\n    if (stream.match(/^([^\\]\\\\]|\\\\.)*\\]:/, false)) {\n      state.f = footnoteLinkInside;\n      stream.next(); // Consume [\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      state.linkText = true;\n      return getType(state);\n    }\n    return switchInline(stream, state, inlineNormal);\n  }\n\n  function footnoteLinkInside(stream, state) {\n    if (stream.match(/^\\]:/, true)) {\n      state.f = state.inline = footnoteUrl;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var returnType = getType(state);\n      state.linkText = false;\n      return returnType;\n    }\n\n    stream.match(/^([^\\]\\\\]|\\\\.)+/, true);\n\n    return tokenTypes.linkText;\n  }\n\n  function footnoteUrl(stream, state) {\n    // Check if space, and return NULL if so (to avoid marking the space)\n    if(stream.eatSpace()){\n      return null;\n    }\n    // Match URL\n    stream.match(/^[^\\s]+/, true);\n    // Check for link title\n    if (stream.peek() === undefined) { // End of line, set flag to check next line\n      state.linkTitle = true;\n    } else { // More content on line, check if link title\n      stream.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\\\\\|\\\\.)+\"|'(?:[^'\\\\]|\\\\\\\\|\\\\.)+'|\\((?:[^)\\\\]|\\\\\\\\|\\\\.)+\\)))?/, true);\n    }\n    state.f = state.inline = inlineNormal;\n    return tokenTypes.linkHref + \" url\";\n  }\n\n  var mode = {\n    startState: function() {\n      return {\n        f: blockNormal,\n\n        prevLine: {stream: null},\n        thisLine: {stream: null},\n\n        block: blockNormal,\n        htmlState: null,\n        indentation: 0,\n\n        inline: inlineNormal,\n        text: handleText,\n\n        formatting: false,\n        linkText: false,\n        linkHref: false,\n        linkTitle: false,\n        code: 0,\n        em: false,\n        strong: false,\n        header: 0,\n        setext: 0,\n        hr: false,\n        taskList: false,\n        list: false,\n        listStack: [],\n        quote: 0,\n        trailingSpace: 0,\n        trailingSpaceNewLine: false,\n        strikethrough: false,\n        emoji: false,\n        fencedEndRE: null\n      };\n    },\n\n    copyState: function(s) {\n      return {\n        f: s.f,\n\n        prevLine: s.prevLine,\n        thisLine: s.thisLine,\n\n        block: s.block,\n        htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),\n        indentation: s.indentation,\n\n        localMode: s.localMode,\n        localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,\n\n        inline: s.inline,\n        text: s.text,\n        formatting: false,\n        linkText: s.linkText,\n        linkTitle: s.linkTitle,\n        linkHref: s.linkHref,\n        code: s.code,\n        em: s.em,\n        strong: s.strong,\n        strikethrough: s.strikethrough,\n        emoji: s.emoji,\n        header: s.header,\n        setext: s.setext,\n        hr: s.hr,\n        taskList: s.taskList,\n        list: s.list,\n        listStack: s.listStack.slice(0),\n        quote: s.quote,\n        indentedCode: s.indentedCode,\n        trailingSpace: s.trailingSpace,\n        trailingSpaceNewLine: s.trailingSpaceNewLine,\n        md_inside: s.md_inside,\n        fencedEndRE: s.fencedEndRE\n      };\n    },\n\n    token: function(stream, state) {\n\n      // Reset state.formatting\n      state.formatting = false;\n\n      if (stream != state.thisLine.stream) {\n        state.header = 0;\n        state.hr = false;\n\n        if (stream.match(/^\\s*$/, true)) {\n          blankLine(state);\n          return null;\n        }\n\n        state.prevLine = state.thisLine\n        state.thisLine = {stream: stream}\n\n        // Reset state.taskList\n        state.taskList = false;\n\n        // Reset state.trailingSpace\n        state.trailingSpace = 0;\n        state.trailingSpaceNewLine = false;\n\n        if (!state.localState) {\n          state.f = state.block;\n          if (state.f != htmlBlock) {\n            var indentation = stream.match(/^\\s*/, true)[0].replace(/\\t/g, expandedTab).length;\n            state.indentation = indentation;\n            state.indentationDiff = null;\n            if (indentation > 0) return null;\n          }\n        }\n      }\n      return state.f(stream, state);\n    },\n\n    innerMode: function(state) {\n      if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode};\n      if (state.localState) return {state: state.localState, mode: state.localMode};\n      return {state: state, mode: mode};\n    },\n\n    indent: function(state, textAfter, line) {\n      if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line)\n      if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line)\n      return CodeMirror.Pass\n    },\n\n    blankLine: blankLine,\n\n    getType: getType,\n\n    blockCommentStart: \"<!--\",\n    blockCommentEnd: \"-->\",\n    closeBrackets: \"()[]{}''\\\"\\\"``\",\n    fold: \"markdown\"\n  };\n  return mode;\n}, \"xml\");\n\nCodeMirror.defineMIME(\"text/markdown\", \"markdown\");\n\nCodeMirror.defineMIME(\"text/x-markdown\", \"markdown\");\n\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/edit/matchbrackets',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  var ie_lt8 = /MSIE \\d/.test(navigator.userAgent) &&\n    (document.documentMode == null || document.documentMode < 8);\n\n  var Pos = CodeMirror.Pos;\n\n  var matching = {\"(\": \")>\", \")\": \"(<\", \"[\": \"]>\", \"]\": \"[<\", \"{\": \"}>\", \"}\": \"{<\", \"<\": \">>\", \">\": \"<<\"};\n\n  function bracketRegex(config) {\n    return config && config.bracketRegex || /[(){}[\\]]/\n  }\n\n  function findMatchingBracket(cm, where, config) {\n    var line = cm.getLineHandle(where.line), pos = where.ch - 1;\n    var afterCursor = config && config.afterCursor\n    if (afterCursor == null)\n      afterCursor = /(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className)\n    var re = bracketRegex(config)\n\n    // A cursor is defined as between two characters, but in in vim command mode\n    // (i.e. not insert mode), the cursor is visually represented as a\n    // highlighted box on top of the 2nd character. Otherwise, we allow matches\n    // from before or after the cursor.\n    var match = (!afterCursor && pos >= 0 && re.test(line.text.charAt(pos)) && matching[line.text.charAt(pos)]) ||\n        re.test(line.text.charAt(pos + 1)) && matching[line.text.charAt(++pos)];\n    if (!match) return null;\n    var dir = match.charAt(1) == \">\" ? 1 : -1;\n    if (config && config.strict && (dir > 0) != (pos == where.ch)) return null;\n    var style = cm.getTokenTypeAt(Pos(where.line, pos + 1));\n\n    var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config);\n    if (found == null) return null;\n    return {from: Pos(where.line, pos), to: found && found.pos,\n            match: found && found.ch == match.charAt(0), forward: dir > 0};\n  }\n\n  // bracketRegex is used to specify which type of bracket to scan\n  // should be a regexp, e.g. /[[\\]]/\n  //\n  // Note: If \"where\" is on an open bracket, then this bracket is ignored.\n  //\n  // Returns false when no bracket was found, null when it reached\n  // maxScanLines and gave up\n  function scanForBracket(cm, where, dir, style, config) {\n    var maxScanLen = (config && config.maxScanLineLength) || 10000;\n    var maxScanLines = (config && config.maxScanLines) || 1000;\n\n    var stack = [];\n    var re = bracketRegex(config)\n    var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1)\n                          : Math.max(cm.firstLine() - 1, where.line - maxScanLines);\n    for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) {\n      var line = cm.getLine(lineNo);\n      if (!line) continue;\n      var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1;\n      if (line.length > maxScanLen) continue;\n      if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0);\n      for (; pos != end; pos += dir) {\n        var ch = line.charAt(pos);\n        if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) {\n          var match = matching[ch];\n          if ((match.charAt(1) == \">\") == (dir > 0)) stack.push(ch);\n          else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch};\n          else stack.pop();\n        }\n      }\n    }\n    return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null;\n  }\n\n  function matchBrackets(cm, autoclear, config) {\n    // Disable brace matching in long lines, since it'll cause hugely slow updates\n    var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000;\n    var marks = [], ranges = cm.listSelections();\n    for (var i = 0; i < ranges.length; i++) {\n      var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, config);\n      if (match && cm.getLine(match.from.line).length <= maxHighlightLen) {\n        var style = match.match ? \"CodeMirror-matchingbracket\" : \"CodeMirror-nonmatchingbracket\";\n        marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style}));\n        if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen)\n          marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style}));\n      }\n    }\n\n    if (marks.length) {\n      // Kludge to work around the IE bug from issue #1193, where text\n      // input stops going to the textare whever this fires.\n      if (ie_lt8 && cm.state.focused) cm.focus();\n\n      var clear = function() {\n        cm.operation(function() {\n          for (var i = 0; i < marks.length; i++) marks[i].clear();\n        });\n      };\n      if (autoclear) setTimeout(clear, 800);\n      else return clear;\n    }\n  }\n\n  function doMatchBrackets(cm) {\n    cm.operation(function() {\n      if (cm.state.matchBrackets.currentlyHighlighted) {\n        cm.state.matchBrackets.currentlyHighlighted();\n        cm.state.matchBrackets.currentlyHighlighted = null;\n      }\n      cm.state.matchBrackets.currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets);\n    });\n  }\n\n  CodeMirror.defineOption(\"matchBrackets\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      cm.off(\"cursorActivity\", doMatchBrackets);\n      if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) {\n        cm.state.matchBrackets.currentlyHighlighted();\n        cm.state.matchBrackets.currentlyHighlighted = null;\n      }\n    }\n    if (val) {\n      cm.state.matchBrackets = typeof val == \"object\" ? val : {};\n      cm.on(\"cursorActivity\", doMatchBrackets);\n    }\n  });\n\n  CodeMirror.defineExtension(\"matchBrackets\", function() {matchBrackets(this, true);});\n  CodeMirror.defineExtension(\"findMatchingBracket\", function(pos, config, oldConfig){\n    // Backwards-compatibility kludge\n    if (oldConfig || typeof config == \"boolean\") {\n      if (!oldConfig) {\n        config = config ? {strict: true} : null\n      } else {\n        oldConfig.strict = config\n        config = oldConfig\n      }\n    }\n    return findMatchingBracket(this, pos, config)\n  });\n  CodeMirror.defineExtension(\"scanForBracket\", function(pos, dir, style, config){\n    return scanForBracket(this, pos, dir, style, config);\n  });\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/comment/continuecomment',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  function continueComment(cm) {\n    if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n    var ranges = cm.listSelections(), mode, inserts = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var pos = ranges[i].head\n      if (!/\\bcomment\\b/.test(cm.getTokenTypeAt(pos))) return CodeMirror.Pass;\n      var modeHere = cm.getModeAt(pos)\n      if (!mode) mode = modeHere;\n      else if (mode != modeHere) return CodeMirror.Pass;\n\n      var insert = null;\n      if (mode.blockCommentStart && mode.blockCommentContinue) {\n        var line = cm.getLine(pos.line).slice(0, pos.ch)\n        var end = line.lastIndexOf(mode.blockCommentEnd), found\n        if (end != -1 && end == pos.ch - mode.blockCommentEnd.length) {\n          // Comment ended, don't continue it\n        } else if ((found = line.lastIndexOf(mode.blockCommentStart)) > -1 && found > end) {\n          insert = line.slice(0, found)\n          if (/\\S/.test(insert)) {\n            insert = \"\"\n            for (var j = 0; j < found; ++j) insert += \" \"\n          }\n        } else if ((found = line.indexOf(mode.blockCommentContinue)) > -1 && !/\\S/.test(line.slice(0, found))) {\n          insert = line.slice(0, found)\n        }\n        if (insert != null) insert += mode.blockCommentContinue\n      }\n      if (insert == null && mode.lineComment && continueLineCommentEnabled(cm)) {\n        var line = cm.getLine(pos.line), found = line.indexOf(mode.lineComment);\n        if (found > -1) {\n          insert = line.slice(0, found);\n          if (/\\S/.test(insert)) insert = null;\n          else insert += mode.lineComment + line.slice(found + mode.lineComment.length).match(/^\\s*/)[0];\n        }\n      }\n      if (insert == null) return CodeMirror.Pass;\n      inserts[i] = \"\\n\" + insert;\n    }\n\n    cm.operation(function() {\n      for (var i = ranges.length - 1; i >= 0; i--)\n        cm.replaceRange(inserts[i], ranges[i].from(), ranges[i].to(), \"+insert\");\n    });\n  }\n\n  function continueLineCommentEnabled(cm) {\n    var opt = cm.getOption(\"continueComments\");\n    if (opt && typeof opt == \"object\")\n      return opt.continueLineComment !== false;\n    return true;\n  }\n\n  CodeMirror.defineOption(\"continueComments\", null, function(cm, val, prev) {\n    if (prev && prev != CodeMirror.Init)\n      cm.removeKeyMap(\"continueComment\");\n    if (val) {\n      var key = \"Enter\";\n      if (typeof val == \"string\")\n        key = val;\n      else if (typeof val == \"object\" && val.key)\n        key = val.key;\n      var map = {name: \"continueComment\"};\n      map[key] = continueComment;\n      cm.addKeyMap(map);\n    }\n  });\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/comment/comment',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var noOptions = {};\n  var nonWS = /[^\\s\\u00a0]/;\n  var Pos = CodeMirror.Pos;\n\n  function firstNonWS(str) {\n    var found = str.search(nonWS);\n    return found == -1 ? 0 : found;\n  }\n\n  CodeMirror.commands.toggleComment = function(cm) {\n    cm.toggleComment();\n  };\n\n  CodeMirror.defineExtension(\"toggleComment\", function(options) {\n    if (!options) options = noOptions;\n    var cm = this;\n    var minLine = Infinity, ranges = this.listSelections(), mode = null;\n    for (var i = ranges.length - 1; i >= 0; i--) {\n      var from = ranges[i].from(), to = ranges[i].to();\n      if (from.line >= minLine) continue;\n      if (to.line >= minLine) to = Pos(minLine, 0);\n      minLine = from.line;\n      if (mode == null) {\n        if (cm.uncomment(from, to, options)) mode = \"un\";\n        else { cm.lineComment(from, to, options); mode = \"line\"; }\n      } else if (mode == \"un\") {\n        cm.uncomment(from, to, options);\n      } else {\n        cm.lineComment(from, to, options);\n      }\n    }\n  });\n\n  // Rough heuristic to try and detect lines that are part of multi-line string\n  function probablyInsideString(cm, pos, line) {\n    return /\\bstring\\b/.test(cm.getTokenTypeAt(Pos(pos.line, 0))) && !/^[\\'\\\"\\`]/.test(line)\n  }\n\n  function getMode(cm, pos) {\n    var mode = cm.getMode()\n    return mode.useInnerComments === false || !mode.innerMode ? mode : cm.getModeAt(pos)\n  }\n\n  CodeMirror.defineExtension(\"lineComment\", function(from, to, options) {\n    if (!options) options = noOptions;\n    var self = this, mode = getMode(self, from);\n    var firstLine = self.getLine(from.line);\n    if (firstLine == null || probablyInsideString(self, from, firstLine)) return;\n\n    var commentString = options.lineComment || mode.lineComment;\n    if (!commentString) {\n      if (options.blockCommentStart || mode.blockCommentStart) {\n        options.fullLines = true;\n        self.blockComment(from, to, options);\n      }\n      return;\n    }\n\n    var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1);\n    var pad = options.padding == null ? \" \" : options.padding;\n    var blankLines = options.commentBlankLines || from.line == to.line;\n\n    self.operation(function() {\n      if (options.indent) {\n        var baseString = null;\n        for (var i = from.line; i < end; ++i) {\n          var line = self.getLine(i);\n          var whitespace = line.slice(0, firstNonWS(line));\n          if (baseString == null || baseString.length > whitespace.length) {\n            baseString = whitespace;\n          }\n        }\n        for (var i = from.line; i < end; ++i) {\n          var line = self.getLine(i), cut = baseString.length;\n          if (!blankLines && !nonWS.test(line)) continue;\n          if (line.slice(0, cut) != baseString) cut = firstNonWS(line);\n          self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut));\n        }\n      } else {\n        for (var i = from.line; i < end; ++i) {\n          if (blankLines || nonWS.test(self.getLine(i)))\n            self.replaceRange(commentString + pad, Pos(i, 0));\n        }\n      }\n    });\n  });\n\n  CodeMirror.defineExtension(\"blockComment\", function(from, to, options) {\n    if (!options) options = noOptions;\n    var self = this, mode = getMode(self, from);\n    var startString = options.blockCommentStart || mode.blockCommentStart;\n    var endString = options.blockCommentEnd || mode.blockCommentEnd;\n    if (!startString || !endString) {\n      if ((options.lineComment || mode.lineComment) && options.fullLines != false)\n        self.lineComment(from, to, options);\n      return;\n    }\n    if (/\\bcomment\\b/.test(self.getTokenTypeAt(Pos(from.line, 0)))) return\n\n    var end = Math.min(to.line, self.lastLine());\n    if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end;\n\n    var pad = options.padding == null ? \" \" : options.padding;\n    if (from.line > end) return;\n\n    self.operation(function() {\n      if (options.fullLines != false) {\n        var lastLineHasText = nonWS.test(self.getLine(end));\n        self.replaceRange(pad + endString, Pos(end));\n        self.replaceRange(startString + pad, Pos(from.line, 0));\n        var lead = options.blockCommentLead || mode.blockCommentLead;\n        if (lead != null) for (var i = from.line + 1; i <= end; ++i)\n          if (i != end || lastLineHasText)\n            self.replaceRange(lead + pad, Pos(i, 0));\n      } else {\n        self.replaceRange(endString, to);\n        self.replaceRange(startString, from);\n      }\n    });\n  });\n\n  CodeMirror.defineExtension(\"uncomment\", function(from, to, options) {\n    if (!options) options = noOptions;\n    var self = this, mode = getMode(self, from);\n    var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), start = Math.min(from.line, end);\n\n    // Try finding line comments\n    var lineString = options.lineComment || mode.lineComment, lines = [];\n    var pad = options.padding == null ? \" \" : options.padding, didSomething;\n    lineComment: {\n      if (!lineString) break lineComment;\n      for (var i = start; i <= end; ++i) {\n        var line = self.getLine(i);\n        var found = line.indexOf(lineString);\n        if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1;\n        if (found == -1 && nonWS.test(line)) break lineComment;\n        if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment;\n        lines.push(line);\n      }\n      self.operation(function() {\n        for (var i = start; i <= end; ++i) {\n          var line = lines[i - start];\n          var pos = line.indexOf(lineString), endPos = pos + lineString.length;\n          if (pos < 0) continue;\n          if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length;\n          didSomething = true;\n          self.replaceRange(\"\", Pos(i, pos), Pos(i, endPos));\n        }\n      });\n      if (didSomething) return true;\n    }\n\n    // Try block comments\n    var startString = options.blockCommentStart || mode.blockCommentStart;\n    var endString = options.blockCommentEnd || mode.blockCommentEnd;\n    if (!startString || !endString) return false;\n    var lead = options.blockCommentLead || mode.blockCommentLead;\n    var startLine = self.getLine(start), open = startLine.indexOf(startString)\n    if (open == -1) return false\n    var endLine = end == start ? startLine : self.getLine(end)\n    var close = endLine.indexOf(endString, end == start ? open + startString.length : 0);\n    var insideStart = Pos(start, open + 1), insideEnd = Pos(end, close + 1)\n    if (close == -1 ||\n        !/comment/.test(self.getTokenTypeAt(insideStart)) ||\n        !/comment/.test(self.getTokenTypeAt(insideEnd)) ||\n        self.getRange(insideStart, insideEnd, \"\\n\").indexOf(endString) > -1)\n      return false;\n\n    // Avoid killing block comments completely outside the selection.\n    // Positions of the last startString before the start of the selection, and the first endString after it.\n    var lastStart = startLine.lastIndexOf(startString, from.ch);\n    var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length);\n    if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false;\n    // Positions of the first endString after the end of the selection, and the last startString before it.\n    firstEnd = endLine.indexOf(endString, to.ch);\n    var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch);\n    lastStart = (firstEnd == -1 || almostLastStart == -1) ? -1 : to.ch + almostLastStart;\n    if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false;\n\n    self.operation(function() {\n      self.replaceRange(\"\", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)),\n                        Pos(end, close + endString.length));\n      var openEnd = open + startString.length;\n      if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length;\n      self.replaceRange(\"\", Pos(start, open), Pos(start, openEnd));\n      if (lead) for (var i = start + 1; i <= end; ++i) {\n        var line = self.getLine(i), found = line.indexOf(lead);\n        if (found == -1 || nonWS.test(line.slice(0, found))) continue;\n        var foundEnd = found + lead.length;\n        if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length;\n        self.replaceRange(\"\", Pos(i, found), Pos(i, foundEnd));\n      }\n    });\n    return true;\n  });\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/hint/show-hint',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var HINT_ELEMENT_CLASS        = \"CodeMirror-hint\";\n  var ACTIVE_HINT_ELEMENT_CLASS = \"CodeMirror-hint-active\";\n\n  // This is the old interface, kept around for now to stay\n  // backwards-compatible.\n  CodeMirror.showHint = function(cm, getHints, options) {\n    if (!getHints) return cm.showHint(options);\n    if (options && options.async) getHints.async = true;\n    var newOpts = {hint: getHints};\n    if (options) for (var prop in options) newOpts[prop] = options[prop];\n    return cm.showHint(newOpts);\n  };\n\n  CodeMirror.defineExtension(\"showHint\", function(options) {\n    options = parseOptions(this, this.getCursor(\"start\"), options);\n    var selections = this.listSelections()\n    if (selections.length > 1) return;\n    // By default, don't allow completion when something is selected.\n    // A hint function can have a `supportsSelection` property to\n    // indicate that it can handle selections.\n    if (this.somethingSelected()) {\n      if (!options.hint.supportsSelection) return;\n      // Don't try with cross-line selections\n      for (var i = 0; i < selections.length; i++)\n        if (selections[i].head.line != selections[i].anchor.line) return;\n    }\n\n    if (this.state.completionActive) this.state.completionActive.close();\n    var completion = this.state.completionActive = new Completion(this, options);\n    if (!completion.options.hint) return;\n\n    CodeMirror.signal(this, \"startCompletion\", this);\n    completion.update(true);\n  });\n\n  CodeMirror.defineExtension(\"closeHint\", function() {\n    if (this.state.completionActive) this.state.completionActive.close()\n  })\n\n  function Completion(cm, options) {\n    this.cm = cm;\n    this.options = options;\n    this.widget = null;\n    this.debounce = 0;\n    this.tick = 0;\n    this.startPos = this.cm.getCursor(\"start\");\n    this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length;\n\n    var self = this;\n    cm.on(\"cursorActivity\", this.activityFunc = function() { self.cursorActivity(); });\n  }\n\n  var requestAnimationFrame = window.requestAnimationFrame || function(fn) {\n    return setTimeout(fn, 1000/60);\n  };\n  var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout;\n\n  Completion.prototype = {\n    close: function() {\n      if (!this.active()) return;\n      this.cm.state.completionActive = null;\n      this.tick = null;\n      this.cm.off(\"cursorActivity\", this.activityFunc);\n\n      if (this.widget && this.data) CodeMirror.signal(this.data, \"close\");\n      if (this.widget) this.widget.close();\n      CodeMirror.signal(this.cm, \"endCompletion\", this.cm);\n    },\n\n    active: function() {\n      return this.cm.state.completionActive == this;\n    },\n\n    pick: function(data, i) {\n      var completion = data.list[i];\n      if (completion.hint) completion.hint(this.cm, data, completion);\n      else this.cm.replaceRange(getText(completion), completion.from || data.from,\n                                completion.to || data.to, \"complete\");\n      CodeMirror.signal(data, \"pick\", completion);\n      this.close();\n    },\n\n    cursorActivity: function() {\n      if (this.debounce) {\n        cancelAnimationFrame(this.debounce);\n        this.debounce = 0;\n      }\n\n      var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line);\n      if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch ||\n          pos.ch < this.startPos.ch || this.cm.somethingSelected() ||\n          (!pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) {\n        this.close();\n      } else {\n        var self = this;\n        this.debounce = requestAnimationFrame(function() {self.update();});\n        if (this.widget) this.widget.disable();\n      }\n    },\n\n    update: function(first) {\n      if (this.tick == null) return\n      var self = this, myTick = ++this.tick\n      fetchHints(this.options.hint, this.cm, this.options, function(data) {\n        if (self.tick == myTick) self.finishUpdate(data, first)\n      })\n    },\n\n    finishUpdate: function(data, first) {\n      if (this.data) CodeMirror.signal(this.data, \"update\");\n\n      var picked = (this.widget && this.widget.picked) || (first && this.options.completeSingle);\n      if (this.widget) this.widget.close();\n\n      this.data = data;\n\n      if (data && data.list.length) {\n        if (picked && data.list.length == 1) {\n          this.pick(data, 0);\n        } else {\n          this.widget = new Widget(this, data);\n          CodeMirror.signal(data, \"shown\");\n        }\n      }\n    }\n  };\n\n  function parseOptions(cm, pos, options) {\n    var editor = cm.options.hintOptions;\n    var out = {};\n    for (var prop in defaultOptions) out[prop] = defaultOptions[prop];\n    if (editor) for (var prop in editor)\n      if (editor[prop] !== undefined) out[prop] = editor[prop];\n    if (options) for (var prop in options)\n      if (options[prop] !== undefined) out[prop] = options[prop];\n    if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos)\n    return out;\n  }\n\n  function getText(completion) {\n    if (typeof completion == \"string\") return completion;\n    else return completion.text;\n  }\n\n  function buildKeyMap(completion, handle) {\n    var baseMap = {\n      Up: function() {handle.moveFocus(-1);},\n      Down: function() {handle.moveFocus(1);},\n      PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);},\n      PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);},\n      Home: function() {handle.setFocus(0);},\n      End: function() {handle.setFocus(handle.length - 1);},\n      Enter: handle.pick,\n      Tab: handle.pick,\n      Esc: handle.close\n    };\n\n    var mac = /Mac/.test(navigator.platform);\n\n    if (mac) {\n      baseMap[\"Ctrl-P\"] = function() {handle.moveFocus(-1);};\n      baseMap[\"Ctrl-N\"] = function() {handle.moveFocus(1);};\n    }\n\n    var custom = completion.options.customKeys;\n    var ourMap = custom ? {} : baseMap;\n    function addBinding(key, val) {\n      var bound;\n      if (typeof val != \"string\")\n        bound = function(cm) { return val(cm, handle); };\n      // This mechanism is deprecated\n      else if (baseMap.hasOwnProperty(val))\n        bound = baseMap[val];\n      else\n        bound = val;\n      ourMap[key] = bound;\n    }\n    if (custom)\n      for (var key in custom) if (custom.hasOwnProperty(key))\n        addBinding(key, custom[key]);\n    var extra = completion.options.extraKeys;\n    if (extra)\n      for (var key in extra) if (extra.hasOwnProperty(key))\n        addBinding(key, extra[key]);\n    return ourMap;\n  }\n\n  function getHintElement(hintsElement, el) {\n    while (el && el != hintsElement) {\n      if (el.nodeName.toUpperCase() === \"LI\" && el.parentNode == hintsElement) return el;\n      el = el.parentNode;\n    }\n  }\n\n  function Widget(completion, data) {\n    this.completion = completion;\n    this.data = data;\n    this.picked = false;\n    var widget = this, cm = completion.cm;\n    var ownerDocument = cm.getInputField().ownerDocument;\n    var parentWindow = ownerDocument.defaultView || ownerDocument.parentWindow;\n\n    var hints = this.hints = ownerDocument.createElement(\"ul\");\n    var theme = completion.cm.options.theme;\n    hints.className = \"CodeMirror-hints \" + theme;\n    this.selectedHint = data.selectedHint || 0;\n\n    var completions = data.list;\n    for (var i = 0; i < completions.length; ++i) {\n      var elt = hints.appendChild(ownerDocument.createElement(\"li\")), cur = completions[i];\n      var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? \"\" : \" \" + ACTIVE_HINT_ELEMENT_CLASS);\n      if (cur.className != null) className = cur.className + \" \" + className;\n      elt.className = className;\n      if (cur.render) cur.render(elt, data, cur);\n      else elt.appendChild(ownerDocument.createTextNode(cur.displayText || getText(cur)));\n      elt.hintId = i;\n    }\n\n    var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null);\n    var left = pos.left, top = pos.bottom, below = true;\n    hints.style.left = left + \"px\";\n    hints.style.top = top + \"px\";\n    // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.\n    var winW = parentWindow.innerWidth || Math.max(ownerDocument.body.offsetWidth, ownerDocument.documentElement.offsetWidth);\n    var winH = parentWindow.innerHeight || Math.max(ownerDocument.body.offsetHeight, ownerDocument.documentElement.offsetHeight);\n    (completion.options.container || ownerDocument.body).appendChild(hints);\n    var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH;\n    var scrolls = hints.scrollHeight > hints.clientHeight + 1\n    var startScroll = cm.getScrollInfo();\n\n    if (overlapY > 0) {\n      var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top);\n      if (curTop - height > 0) { // Fits above cursor\n        hints.style.top = (top = pos.top - height) + \"px\";\n        below = false;\n      } else if (height > winH) {\n        hints.style.height = (winH - 5) + \"px\";\n        hints.style.top = (top = pos.bottom - box.top) + \"px\";\n        var cursor = cm.getCursor();\n        if (data.from.ch != cursor.ch) {\n          pos = cm.cursorCoords(cursor);\n          hints.style.left = (left = pos.left) + \"px\";\n          box = hints.getBoundingClientRect();\n        }\n      }\n    }\n    var overlapX = box.right - winW;\n    if (overlapX > 0) {\n      if (box.right - box.left > winW) {\n        hints.style.width = (winW - 5) + \"px\";\n        overlapX -= (box.right - box.left) - winW;\n      }\n      hints.style.left = (left = pos.left - overlapX) + \"px\";\n    }\n    if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling)\n      node.style.paddingRight = cm.display.nativeBarWidth + \"px\"\n\n    cm.addKeyMap(this.keyMap = buildKeyMap(completion, {\n      moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); },\n      setFocus: function(n) { widget.changeActive(n); },\n      menuSize: function() { return widget.screenAmount(); },\n      length: completions.length,\n      close: function() { completion.close(); },\n      pick: function() { widget.pick(); },\n      data: data\n    }));\n\n    if (completion.options.closeOnUnfocus) {\n      var closingOnBlur;\n      cm.on(\"blur\", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); });\n      cm.on(\"focus\", this.onFocus = function() { clearTimeout(closingOnBlur); });\n    }\n\n    cm.on(\"scroll\", this.onScroll = function() {\n      var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect();\n      var newTop = top + startScroll.top - curScroll.top;\n      var point = newTop - (parentWindow.pageYOffset || (ownerDocument.documentElement || ownerDocument.body).scrollTop);\n      if (!below) point += hints.offsetHeight;\n      if (point <= editor.top || point >= editor.bottom) return completion.close();\n      hints.style.top = newTop + \"px\";\n      hints.style.left = (left + startScroll.left - curScroll.left) + \"px\";\n    });\n\n    CodeMirror.on(hints, \"dblclick\", function(e) {\n      var t = getHintElement(hints, e.target || e.srcElement);\n      if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();}\n    });\n\n    CodeMirror.on(hints, \"click\", function(e) {\n      var t = getHintElement(hints, e.target || e.srcElement);\n      if (t && t.hintId != null) {\n        widget.changeActive(t.hintId);\n        if (completion.options.completeOnSingleClick) widget.pick();\n      }\n    });\n\n    CodeMirror.on(hints, \"mousedown\", function() {\n      setTimeout(function(){cm.focus();}, 20);\n    });\n\n    CodeMirror.signal(data, \"select\", completions[this.selectedHint], hints.childNodes[this.selectedHint]);\n    return true;\n  }\n\n  Widget.prototype = {\n    close: function() {\n      if (this.completion.widget != this) return;\n      this.completion.widget = null;\n      this.hints.parentNode.removeChild(this.hints);\n      this.completion.cm.removeKeyMap(this.keyMap);\n\n      var cm = this.completion.cm;\n      if (this.completion.options.closeOnUnfocus) {\n        cm.off(\"blur\", this.onBlur);\n        cm.off(\"focus\", this.onFocus);\n      }\n      cm.off(\"scroll\", this.onScroll);\n    },\n\n    disable: function() {\n      this.completion.cm.removeKeyMap(this.keyMap);\n      var widget = this;\n      this.keyMap = {Enter: function() { widget.picked = true; }};\n      this.completion.cm.addKeyMap(this.keyMap);\n    },\n\n    pick: function() {\n      this.completion.pick(this.data, this.selectedHint);\n    },\n\n    changeActive: function(i, avoidWrap) {\n      if (i >= this.data.list.length)\n        i = avoidWrap ? this.data.list.length - 1 : 0;\n      else if (i < 0)\n        i = avoidWrap ? 0  : this.data.list.length - 1;\n      if (this.selectedHint == i) return;\n      var node = this.hints.childNodes[this.selectedHint];\n      if (node) node.className = node.className.replace(\" \" + ACTIVE_HINT_ELEMENT_CLASS, \"\");\n      node = this.hints.childNodes[this.selectedHint = i];\n      node.className += \" \" + ACTIVE_HINT_ELEMENT_CLASS;\n      if (node.offsetTop < this.hints.scrollTop)\n        this.hints.scrollTop = node.offsetTop - 3;\n      else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight)\n        this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3;\n      CodeMirror.signal(this.data, \"select\", this.data.list[this.selectedHint], node);\n    },\n\n    screenAmount: function() {\n      return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;\n    }\n  };\n\n  function applicableHelpers(cm, helpers) {\n    if (!cm.somethingSelected()) return helpers\n    var result = []\n    for (var i = 0; i < helpers.length; i++)\n      if (helpers[i].supportsSelection) result.push(helpers[i])\n    return result\n  }\n\n  function fetchHints(hint, cm, options, callback) {\n    if (hint.async) {\n      hint(cm, callback, options)\n    } else {\n      var result = hint(cm, options)\n      if (result && result.then) result.then(callback)\n      else callback(result)\n    }\n  }\n\n  function resolveAutoHints(cm, pos) {\n    var helpers = cm.getHelpers(pos, \"hint\"), words\n    if (helpers.length) {\n      var resolved = function(cm, callback, options) {\n        var app = applicableHelpers(cm, helpers);\n        function run(i) {\n          if (i == app.length) return callback(null)\n          fetchHints(app[i], cm, options, function(result) {\n            if (result && result.list.length > 0) callback(result)\n            else run(i + 1)\n          })\n        }\n        run(0)\n      }\n      resolved.async = true\n      resolved.supportsSelection = true\n      return resolved\n    } else if (words = cm.getHelper(cm.getCursor(), \"hintWords\")) {\n      return function(cm) { return CodeMirror.hint.fromList(cm, {words: words}) }\n    } else if (CodeMirror.hint.anyword) {\n      return function(cm, options) { return CodeMirror.hint.anyword(cm, options) }\n    } else {\n      return function() {}\n    }\n  }\n\n  CodeMirror.registerHelper(\"hint\", \"auto\", {\n    resolve: resolveAutoHints\n  });\n\n  CodeMirror.registerHelper(\"hint\", \"fromList\", function(cm, options) {\n    var cur = cm.getCursor(), token = cm.getTokenAt(cur)\n    var term, from = CodeMirror.Pos(cur.line, token.start), to = cur\n    if (token.start < cur.ch && /\\w/.test(token.string.charAt(cur.ch - token.start - 1))) {\n      term = token.string.substr(0, cur.ch - token.start)\n    } else {\n      term = \"\"\n      from = cur\n    }\n    var found = [];\n    for (var i = 0; i < options.words.length; i++) {\n      var word = options.words[i];\n      if (word.slice(0, term.length) == term)\n        found.push(word);\n    }\n\n    if (found.length) return {list: found, from: from, to: to};\n  });\n\n  CodeMirror.commands.autocomplete = CodeMirror.showHint;\n\n  var defaultOptions = {\n    hint: CodeMirror.hint.auto,\n    completeSingle: true,\n    alignWithWord: true,\n    closeCharacters: /[\\s()\\[\\]{};:>,]/,\n    closeOnUnfocus: true,\n    completeOnSingleClick: true,\n    container: null,\n    customKeys: null,\n    extraKeys: null\n  };\n\n  CodeMirror.defineOption(\"hintOptions\", null);\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/hint/anyword-hint',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var WORD = /[\\w$]+/, RANGE = 500;\n\n  CodeMirror.registerHelper(\"hint\", \"anyword\", function(editor, options) {\n    var word = options && options.word || WORD;\n    var range = options && options.range || RANGE;\n    var cur = editor.getCursor(), curLine = editor.getLine(cur.line);\n    var end = cur.ch, start = end;\n    while (start && word.test(curLine.charAt(start - 1))) --start;\n    var curWord = start != end && curLine.slice(start, end);\n\n    var list = options && options.list || [], seen = {};\n    var re = new RegExp(word.source, \"g\");\n    for (var dir = -1; dir <= 1; dir += 2) {\n      var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir;\n      for (; line != endLine; line += dir) {\n        var text = editor.getLine(line), m;\n        while (m = re.exec(text)) {\n          if (line == cur.line && m[0] === curWord) continue;\n          if ((!curWord || m[0].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[0])) {\n            seen[m[0]] = true;\n            list.push(m[0]);\n          }\n        }\n      }\n    }\n    return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)};\n  });\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/display/placeholder',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  CodeMirror.defineOption(\"placeholder\", \"\", function(cm, val, old) {\n    var prev = old && old != CodeMirror.Init;\n    if (val && !prev) {\n      cm.on(\"blur\", onBlur);\n      cm.on(\"change\", onChange);\n      cm.on(\"swapDoc\", onChange);\n      onChange(cm);\n    } else if (!val && prev) {\n      cm.off(\"blur\", onBlur);\n      cm.off(\"change\", onChange);\n      cm.off(\"swapDoc\", onChange);\n      clearPlaceholder(cm);\n      var wrapper = cm.getWrapperElement();\n      wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\");\n    }\n\n    if (val && !cm.hasFocus()) onBlur(cm);\n  });\n\n  function clearPlaceholder(cm) {\n    if (cm.state.placeholder) {\n      cm.state.placeholder.parentNode.removeChild(cm.state.placeholder);\n      cm.state.placeholder = null;\n    }\n  }\n  function setPlaceholder(cm) {\n    clearPlaceholder(cm);\n    var elt = cm.state.placeholder = document.createElement(\"pre\");\n    elt.style.cssText = \"height: 0; overflow: visible\";\n    elt.style.direction = cm.getOption(\"direction\");\n    elt.className = \"CodeMirror-placeholder\";\n    var placeHolder = cm.getOption(\"placeholder\")\n    if (typeof placeHolder == \"string\") placeHolder = document.createTextNode(placeHolder)\n    elt.appendChild(placeHolder)\n    cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);\n  }\n\n  function onBlur(cm) {\n    if (isEmpty(cm)) setPlaceholder(cm);\n  }\n  function onChange(cm) {\n    var wrapper = cm.getWrapperElement(), empty = isEmpty(cm);\n    wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\") + (empty ? \" CodeMirror-empty\" : \"\");\n\n    if (empty) setPlaceholder(cm);\n    else clearPlaceholder(cm);\n  }\n\n  function isEmpty(cm) {\n    return (cm.lineCount() === 1) && (cm.getLine(0) === \"\");\n  }\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/runmode/runmode',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.runMode = function(string, modespec, callback, options) {\n  var mode = CodeMirror.getMode(CodeMirror.defaults, modespec);\n  var ie = /MSIE \\d/.test(navigator.userAgent);\n  var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9);\n\n  if (callback.appendChild) {\n    var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize;\n    var node = callback, col = 0;\n    node.innerHTML = \"\";\n    callback = function(text, style) {\n      if (text == \"\\n\") {\n        // Emitting LF or CRLF on IE8 or earlier results in an incorrect display.\n        // Emitting a carriage return makes everything ok.\n        node.appendChild(document.createTextNode(ie_lt9 ? '\\r' : text));\n        col = 0;\n        return;\n      }\n      var content = \"\";\n      // replace tabs\n      for (var pos = 0;;) {\n        var idx = text.indexOf(\"\\t\", pos);\n        if (idx == -1) {\n          content += text.slice(pos);\n          col += text.length - pos;\n          break;\n        } else {\n          col += idx - pos;\n          content += text.slice(pos, idx);\n          var size = tabSize - col % tabSize;\n          col += size;\n          for (var i = 0; i < size; ++i) content += \" \";\n          pos = idx + 1;\n        }\n      }\n\n      if (style) {\n        var sp = node.appendChild(document.createElement(\"span\"));\n        sp.className = \"cm-\" + style.replace(/ +/g, \" cm-\");\n        sp.appendChild(document.createTextNode(content));\n      } else {\n        node.appendChild(document.createTextNode(content));\n      }\n    };\n  }\n\n  var lines = CodeMirror.splitLines(string), state = (options && options.state) || CodeMirror.startState(mode);\n  for (var i = 0, e = lines.length; i < e; ++i) {\n    if (i) callback(\"\\n\");\n    var stream = new CodeMirror.StringStream(lines[i]);\n    if (!stream.string && mode.blankLine) mode.blankLine(state);\n    while (!stream.eol()) {\n      var style = mode.token(stream, state);\n      callback(stream.current(), style, i, stream.start, state);\n      stream.start = stream.pos;\n    }\n  }\n};\n\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"))\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/search/searchcursor',[\"../../lib/codemirror\"], mod)\n  else // Plain browser env\n    mod(CodeMirror)\n})(function(CodeMirror) {\n  \"use strict\"\n  var Pos = CodeMirror.Pos\n\n  function regexpFlags(regexp) {\n    var flags = regexp.flags\n    return flags != null ? flags : (regexp.ignoreCase ? \"i\" : \"\")\n      + (regexp.global ? \"g\" : \"\")\n      + (regexp.multiline ? \"m\" : \"\")\n  }\n\n  function ensureFlags(regexp, flags) {\n    var current = regexpFlags(regexp), target = current\n    for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1)\n      target += flags.charAt(i)\n    return current == target ? regexp : new RegExp(regexp.source, target)\n  }\n\n  function maybeMultiline(regexp) {\n    return /\\\\s|\\\\n|\\n|\\\\W|\\\\D|\\[\\^/.test(regexp.source)\n  }\n\n  function searchRegexpForward(doc, regexp, start) {\n    regexp = ensureFlags(regexp, \"g\")\n    for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) {\n      regexp.lastIndex = ch\n      var string = doc.getLine(line), match = regexp.exec(string)\n      if (match)\n        return {from: Pos(line, match.index),\n                to: Pos(line, match.index + match[0].length),\n                match: match}\n    }\n  }\n\n  function searchRegexpForwardMultiline(doc, regexp, start) {\n    if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start)\n\n    regexp = ensureFlags(regexp, \"gm\")\n    var string, chunk = 1\n    for (var line = start.line, last = doc.lastLine(); line <= last;) {\n      // This grows the search buffer in exponentially-sized chunks\n      // between matches, so that nearby matches are fast and don't\n      // require concatenating the whole document (in case we're\n      // searching for something that has tons of matches), but at the\n      // same time, the amount of retries is limited.\n      for (var i = 0; i < chunk; i++) {\n        if (line > last) break\n        var curLine = doc.getLine(line++)\n        string = string == null ? curLine : string + \"\\n\" + curLine\n      }\n      chunk = chunk * 2\n      regexp.lastIndex = start.ch\n      var match = regexp.exec(string)\n      if (match) {\n        var before = string.slice(0, match.index).split(\"\\n\"), inside = match[0].split(\"\\n\")\n        var startLine = start.line + before.length - 1, startCh = before[before.length - 1].length\n        return {from: Pos(startLine, startCh),\n                to: Pos(startLine + inside.length - 1,\n                        inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),\n                match: match}\n      }\n    }\n  }\n\n  function lastMatchIn(string, regexp) {\n    var cutOff = 0, match\n    for (;;) {\n      regexp.lastIndex = cutOff\n      var newMatch = regexp.exec(string)\n      if (!newMatch) return match\n      match = newMatch\n      cutOff = match.index + (match[0].length || 1)\n      if (cutOff == string.length) return match\n    }\n  }\n\n  function searchRegexpBackward(doc, regexp, start) {\n    regexp = ensureFlags(regexp, \"g\")\n    for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) {\n      var string = doc.getLine(line)\n      if (ch > -1) string = string.slice(0, ch)\n      var match = lastMatchIn(string, regexp)\n      if (match)\n        return {from: Pos(line, match.index),\n                to: Pos(line, match.index + match[0].length),\n                match: match}\n    }\n  }\n\n  function searchRegexpBackwardMultiline(doc, regexp, start) {\n    regexp = ensureFlags(regexp, \"gm\")\n    var string, chunk = 1\n    for (var line = start.line, first = doc.firstLine(); line >= first;) {\n      for (var i = 0; i < chunk; i++) {\n        var curLine = doc.getLine(line--)\n        string = string == null ? curLine.slice(0, start.ch) : curLine + \"\\n\" + string\n      }\n      chunk *= 2\n\n      var match = lastMatchIn(string, regexp)\n      if (match) {\n        var before = string.slice(0, match.index).split(\"\\n\"), inside = match[0].split(\"\\n\")\n        var startLine = line + before.length, startCh = before[before.length - 1].length\n        return {from: Pos(startLine, startCh),\n                to: Pos(startLine + inside.length - 1,\n                        inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),\n                match: match}\n      }\n    }\n  }\n\n  var doFold, noFold\n  if (String.prototype.normalize) {\n    doFold = function(str) { return str.normalize(\"NFD\").toLowerCase() }\n    noFold = function(str) { return str.normalize(\"NFD\") }\n  } else {\n    doFold = function(str) { return str.toLowerCase() }\n    noFold = function(str) { return str }\n  }\n\n  // Maps a position in a case-folded line back to a position in the original line\n  // (compensating for codepoints increasing in number during folding)\n  function adjustPos(orig, folded, pos, foldFunc) {\n    if (orig.length == folded.length) return pos\n    for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) {\n      if (min == max) return min\n      var mid = (min + max) >> 1\n      var len = foldFunc(orig.slice(0, mid)).length\n      if (len == pos) return mid\n      else if (len > pos) max = mid\n      else min = mid + 1\n    }\n  }\n\n  function searchStringForward(doc, query, start, caseFold) {\n    // Empty string would match anything and never progress, so we\n    // define it to match nothing instead.\n    if (!query.length) return null\n    var fold = caseFold ? doFold : noFold\n    var lines = fold(query).split(/\\r|\\n\\r?/)\n\n    search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) {\n      var orig = doc.getLine(line).slice(ch), string = fold(orig)\n      if (lines.length == 1) {\n        var found = string.indexOf(lines[0])\n        if (found == -1) continue search\n        var start = adjustPos(orig, string, found, fold) + ch\n        return {from: Pos(line, adjustPos(orig, string, found, fold) + ch),\n                to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch)}\n      } else {\n        var cutFrom = string.length - lines[0].length\n        if (string.slice(cutFrom) != lines[0]) continue search\n        for (var i = 1; i < lines.length - 1; i++)\n          if (fold(doc.getLine(line + i)) != lines[i]) continue search\n        var end = doc.getLine(line + lines.length - 1), endString = fold(end), lastLine = lines[lines.length - 1]\n        if (endString.slice(0, lastLine.length) != lastLine) continue search\n        return {from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch),\n                to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold))}\n      }\n    }\n  }\n\n  function searchStringBackward(doc, query, start, caseFold) {\n    if (!query.length) return null\n    var fold = caseFold ? doFold : noFold\n    var lines = fold(query).split(/\\r|\\n\\r?/)\n\n    search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) {\n      var orig = doc.getLine(line)\n      if (ch > -1) orig = orig.slice(0, ch)\n      var string = fold(orig)\n      if (lines.length == 1) {\n        var found = string.lastIndexOf(lines[0])\n        if (found == -1) continue search\n        return {from: Pos(line, adjustPos(orig, string, found, fold)),\n                to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold))}\n      } else {\n        var lastLine = lines[lines.length - 1]\n        if (string.slice(0, lastLine.length) != lastLine) continue search\n        for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++)\n          if (fold(doc.getLine(start + i)) != lines[i]) continue search\n        var top = doc.getLine(line + 1 - lines.length), topString = fold(top)\n        if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search\n        return {from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)),\n                to: Pos(line, adjustPos(orig, string, lastLine.length, fold))}\n      }\n    }\n  }\n\n  function SearchCursor(doc, query, pos, options) {\n    this.atOccurrence = false\n    this.doc = doc\n    pos = pos ? doc.clipPos(pos) : Pos(0, 0)\n    this.pos = {from: pos, to: pos}\n\n    var caseFold\n    if (typeof options == \"object\") {\n      caseFold = options.caseFold\n    } else { // Backwards compat for when caseFold was the 4th argument\n      caseFold = options\n      options = null\n    }\n\n    if (typeof query == \"string\") {\n      if (caseFold == null) caseFold = false\n      this.matches = function(reverse, pos) {\n        return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold)\n      }\n    } else {\n      query = ensureFlags(query, \"gm\")\n      if (!options || options.multiline !== false)\n        this.matches = function(reverse, pos) {\n          return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos)\n        }\n      else\n        this.matches = function(reverse, pos) {\n          return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos)\n        }\n    }\n  }\n\n  SearchCursor.prototype = {\n    findNext: function() {return this.find(false)},\n    findPrevious: function() {return this.find(true)},\n\n    find: function(reverse) {\n      var result = this.matches(reverse, this.doc.clipPos(reverse ? this.pos.from : this.pos.to))\n\n      // Implements weird auto-growing behavior on null-matches for\n      // backwards-compatiblity with the vim code (unfortunately)\n      while (result && CodeMirror.cmpPos(result.from, result.to) == 0) {\n        if (reverse) {\n          if (result.from.ch) result.from = Pos(result.from.line, result.from.ch - 1)\n          else if (result.from.line == this.doc.firstLine()) result = null\n          else result = this.matches(reverse, this.doc.clipPos(Pos(result.from.line - 1)))\n        } else {\n          if (result.to.ch < this.doc.getLine(result.to.line).length) result.to = Pos(result.to.line, result.to.ch + 1)\n          else if (result.to.line == this.doc.lastLine()) result = null\n          else result = this.matches(reverse, Pos(result.to.line + 1, 0))\n        }\n      }\n\n      if (result) {\n        this.pos = result\n        this.atOccurrence = true\n        return this.pos.match || true\n      } else {\n        var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0)\n        this.pos = {from: end, to: end}\n        return this.atOccurrence = false\n      }\n    },\n\n    from: function() {if (this.atOccurrence) return this.pos.from},\n    to: function() {if (this.atOccurrence) return this.pos.to},\n\n    replace: function(newText, origin) {\n      if (!this.atOccurrence) return\n      var lines = CodeMirror.splitLines(newText)\n      this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin)\n      this.pos.to = Pos(this.pos.from.line + lines.length - 1,\n                        lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0))\n    }\n  }\n\n  CodeMirror.defineExtension(\"getSearchCursor\", function(query, pos, caseFold) {\n    return new SearchCursor(this.doc, query, pos, caseFold)\n  })\n  CodeMirror.defineDocExtension(\"getSearchCursor\", function(query, pos, caseFold) {\n    return new SearchCursor(this, query, pos, caseFold)\n  })\n\n  CodeMirror.defineExtension(\"selectMatches\", function(query, caseFold) {\n    var ranges = []\n    var cur = this.getSearchCursor(query, this.getCursor(\"from\"), caseFold)\n    while (cur.findNext()) {\n      if (CodeMirror.cmpPos(cur.to(), this.getCursor(\"to\")) > 0) break\n      ranges.push({anchor: cur.from(), head: cur.to()})\n    }\n    if (ranges.length)\n      this.setSelections(ranges, 0)\n  })\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Open simple dialogs on top of an editor. Relies on dialog.css.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/dialog/dialog',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  function dialogDiv(cm, template, bottom) {\n    var wrap = cm.getWrapperElement();\n    var dialog;\n    dialog = wrap.appendChild(document.createElement(\"div\"));\n    if (bottom)\n      dialog.className = \"CodeMirror-dialog CodeMirror-dialog-bottom\";\n    else\n      dialog.className = \"CodeMirror-dialog CodeMirror-dialog-top\";\n\n    if (typeof template == \"string\") {\n      dialog.innerHTML = template;\n    } else { // Assuming it's a detached DOM element.\n      dialog.appendChild(template);\n    }\n    CodeMirror.addClass(wrap, 'dialog-opened');\n    return dialog;\n  }\n\n  function closeNotification(cm, newVal) {\n    if (cm.state.currentNotificationClose)\n      cm.state.currentNotificationClose();\n    cm.state.currentNotificationClose = newVal;\n  }\n\n  CodeMirror.defineExtension(\"openDialog\", function(template, callback, options) {\n    if (!options) options = {};\n\n    closeNotification(this, null);\n\n    var dialog = dialogDiv(this, template, options.bottom);\n    var closed = false, me = this;\n    function close(newVal) {\n      if (typeof newVal == 'string') {\n        inp.value = newVal;\n      } else {\n        if (closed) return;\n        closed = true;\n        CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');\n        dialog.parentNode.removeChild(dialog);\n        me.focus();\n\n        if (options.onClose) options.onClose(dialog);\n      }\n    }\n\n    var inp = dialog.getElementsByTagName(\"input\")[0], button;\n    if (inp) {\n      inp.focus();\n\n      if (options.value) {\n        inp.value = options.value;\n        if (options.selectValueOnOpen !== false) {\n          inp.select();\n        }\n      }\n\n      if (options.onInput)\n        CodeMirror.on(inp, \"input\", function(e) { options.onInput(e, inp.value, close);});\n      if (options.onKeyUp)\n        CodeMirror.on(inp, \"keyup\", function(e) {options.onKeyUp(e, inp.value, close);});\n\n      CodeMirror.on(inp, \"keydown\", function(e) {\n        if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; }\n        if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) {\n          inp.blur();\n          CodeMirror.e_stop(e);\n          close();\n        }\n        if (e.keyCode == 13) callback(inp.value, e);\n      });\n\n      if (options.closeOnBlur !== false) CodeMirror.on(inp, \"blur\", close);\n    } else if (button = dialog.getElementsByTagName(\"button\")[0]) {\n      CodeMirror.on(button, \"click\", function() {\n        close();\n        me.focus();\n      });\n\n      if (options.closeOnBlur !== false) CodeMirror.on(button, \"blur\", close);\n\n      button.focus();\n    }\n    return close;\n  });\n\n  CodeMirror.defineExtension(\"openConfirm\", function(template, callbacks, options) {\n    closeNotification(this, null);\n    var dialog = dialogDiv(this, template, options && options.bottom);\n    var buttons = dialog.getElementsByTagName(\"button\");\n    var closed = false, me = this, blurring = 1;\n    function close() {\n      if (closed) return;\n      closed = true;\n      CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');\n      dialog.parentNode.removeChild(dialog);\n      me.focus();\n    }\n    buttons[0].focus();\n    for (var i = 0; i < buttons.length; ++i) {\n      var b = buttons[i];\n      (function(callback) {\n        CodeMirror.on(b, \"click\", function(e) {\n          CodeMirror.e_preventDefault(e);\n          close();\n          if (callback) callback(me);\n        });\n      })(callbacks[i]);\n      CodeMirror.on(b, \"blur\", function() {\n        --blurring;\n        setTimeout(function() { if (blurring <= 0) close(); }, 200);\n      });\n      CodeMirror.on(b, \"focus\", function() { ++blurring; });\n    }\n  });\n\n  /*\n   * openNotification\n   * Opens a notification, that can be closed with an optional timer\n   * (default 5000ms timer) and always closes on click.\n   *\n   * If a notification is opened while another is opened, it will close the\n   * currently opened one and open the new one immediately.\n   */\n  CodeMirror.defineExtension(\"openNotification\", function(template, options) {\n    closeNotification(this, close);\n    var dialog = dialogDiv(this, template, options && options.bottom);\n    var closed = false, doneTimer;\n    var duration = options && typeof options.duration !== \"undefined\" ? options.duration : 5000;\n\n    function close() {\n      if (closed) return;\n      closed = true;\n      clearTimeout(doneTimer);\n      CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');\n      dialog.parentNode.removeChild(dialog);\n    }\n\n    CodeMirror.on(dialog, 'click', function(e) {\n      CodeMirror.e_preventDefault(e);\n      close();\n    });\n\n    if (duration)\n      doneTimer = setTimeout(close, duration);\n\n    return close;\n  });\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Define search commands. Depends on dialog.js or another\n// implementation of the openDialog method.\n\n// Replace works a little oddly -- it will do the replace on the next\n// Ctrl-G (or whatever is bound to findNext) press. You prevent a\n// replace by making sure the match is no longer selected when hitting\n// Ctrl-G.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"./searchcursor\"), require(\"../dialog/dialog\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/search/search',[\"../../lib/codemirror\", \"./searchcursor\", \"../dialog/dialog\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  function searchOverlay(query, caseInsensitive) {\n    if (typeof query == \"string\")\n      query = new RegExp(query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\"), caseInsensitive ? \"gi\" : \"g\");\n    else if (!query.global)\n      query = new RegExp(query.source, query.ignoreCase ? \"gi\" : \"g\");\n\n    return {token: function(stream) {\n      query.lastIndex = stream.pos;\n      var match = query.exec(stream.string);\n      if (match && match.index == stream.pos) {\n        stream.pos += match[0].length || 1;\n        return \"searching\";\n      } else if (match) {\n        stream.pos = match.index;\n      } else {\n        stream.skipToEnd();\n      }\n    }};\n  }\n\n  function SearchState() {\n    this.posFrom = this.posTo = this.lastQuery = this.query = null;\n    this.overlay = null;\n  }\n\n  function getSearchState(cm) {\n    return cm.state.search || (cm.state.search = new SearchState());\n  }\n\n  function queryCaseInsensitive(query) {\n    return typeof query == \"string\" && query == query.toLowerCase();\n  }\n\n  function getSearchCursor(cm, query, pos) {\n    // Heuristic: if the query string is all lowercase, do a case insensitive search.\n    return cm.getSearchCursor(query, pos, {caseFold: queryCaseInsensitive(query), multiline: true});\n  }\n\n  function persistentDialog(cm, text, deflt, onEnter, onKeyDown) {\n    cm.openDialog(text, onEnter, {\n      value: deflt,\n      selectValueOnOpen: true,\n      closeOnEnter: false,\n      onClose: function() { clearSearch(cm); },\n      onKeyDown: onKeyDown\n    });\n  }\n\n  function dialog(cm, text, shortText, deflt, f) {\n    if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true});\n    else f(prompt(shortText, deflt));\n  }\n\n  function confirmDialog(cm, text, shortText, fs) {\n    if (cm.openConfirm) cm.openConfirm(text, fs);\n    else if (confirm(shortText)) fs[0]();\n  }\n\n  function parseString(string) {\n    return string.replace(/\\\\(.)/g, function(_, ch) {\n      if (ch == \"n\") return \"\\n\"\n      if (ch == \"r\") return \"\\r\"\n      return ch\n    })\n  }\n\n  function parseQuery(query) {\n    var isRE = query.match(/^\\/(.*)\\/([a-z]*)$/);\n    if (isRE) {\n      try { query = new RegExp(isRE[1], isRE[2].indexOf(\"i\") == -1 ? \"\" : \"i\"); }\n      catch(e) {} // Not a regular expression after all, do a string search\n    } else {\n      query = parseString(query)\n    }\n    if (typeof query == \"string\" ? query == \"\" : query.test(\"\"))\n      query = /x^/;\n    return query;\n  }\n\n  function startSearch(cm, state, query) {\n    state.queryText = query;\n    state.query = parseQuery(query);\n    cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query));\n    state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query));\n    cm.addOverlay(state.overlay);\n    if (cm.showMatchesOnScrollbar) {\n      if (state.annotate) { state.annotate.clear(); state.annotate = null; }\n      state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query));\n    }\n  }\n\n  function doSearch(cm, rev, persistent, immediate) {\n    var state = getSearchState(cm);\n    if (state.query) return findNext(cm, rev);\n    var q = cm.getSelection() || state.lastQuery;\n    if (q instanceof RegExp && q.source == \"x^\") q = null\n    if (persistent && cm.openDialog) {\n      var hiding = null\n      var searchNext = function(query, event) {\n        CodeMirror.e_stop(event);\n        if (!query) return;\n        if (query != state.queryText) {\n          startSearch(cm, state, query);\n          state.posFrom = state.posTo = cm.getCursor();\n        }\n        if (hiding) hiding.style.opacity = 1\n        findNext(cm, event.shiftKey, function(_, to) {\n          var dialog\n          if (to.line < 3 && document.querySelector &&\n              (dialog = cm.display.wrapper.querySelector(\".CodeMirror-dialog\")) &&\n              dialog.getBoundingClientRect().bottom - 4 > cm.cursorCoords(to, \"window\").top)\n            (hiding = dialog).style.opacity = .4\n        })\n      };\n      persistentDialog(cm, getQueryDialog(cm), q, searchNext, function(event, query) {\n        var keyName = CodeMirror.keyName(event)\n        var extra = cm.getOption('extraKeys'), cmd = (extra && extra[keyName]) || CodeMirror.keyMap[cm.getOption(\"keyMap\")][keyName]\n        if (cmd == \"findNext\" || cmd == \"findPrev\" ||\n          cmd == \"findPersistentNext\" || cmd == \"findPersistentPrev\") {\n          CodeMirror.e_stop(event);\n          startSearch(cm, getSearchState(cm), query);\n          cm.execCommand(cmd);\n        } else if (cmd == \"find\" || cmd == \"findPersistent\") {\n          CodeMirror.e_stop(event);\n          searchNext(query, event);\n        }\n      });\n      if (immediate && q) {\n        startSearch(cm, state, q);\n        findNext(cm, rev);\n      }\n    } else {\n      dialog(cm, getQueryDialog(cm), \"Search for:\", q, function(query) {\n        if (query && !state.query) cm.operation(function() {\n          startSearch(cm, state, query);\n          state.posFrom = state.posTo = cm.getCursor();\n          findNext(cm, rev);\n        });\n      });\n    }\n  }\n\n  function findNext(cm, rev, callback) {cm.operation(function() {\n    var state = getSearchState(cm);\n    var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo);\n    if (!cursor.find(rev)) {\n      cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0));\n      if (!cursor.find(rev)) return;\n    }\n    cm.setSelection(cursor.from(), cursor.to());\n    cm.scrollIntoView({from: cursor.from(), to: cursor.to()}, 20);\n    state.posFrom = cursor.from(); state.posTo = cursor.to();\n    if (callback) callback(cursor.from(), cursor.to())\n  });}\n\n  function clearSearch(cm) {cm.operation(function() {\n    var state = getSearchState(cm);\n    state.lastQuery = state.query;\n    if (!state.query) return;\n    state.query = state.queryText = null;\n    cm.removeOverlay(state.overlay);\n    if (state.annotate) { state.annotate.clear(); state.annotate = null; }\n  });}\n\n\n  function getQueryDialog(cm)  {\n    return '<span class=\"CodeMirror-search-label\">' + cm.phrase(\"Search:\") + '</span> <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">' + cm.phrase(\"(Use /re/ syntax for regexp search)\") + '</span>';\n  }\n  function getReplaceQueryDialog(cm) {\n    return ' <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">' + cm.phrase(\"(Use /re/ syntax for regexp search)\") + '</span>';\n  }\n  function getReplacementQueryDialog(cm) {\n    return '<span class=\"CodeMirror-search-label\">' + cm.phrase(\"With:\") + '</span> <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/>';\n  }\n  function getDoReplaceConfirm(cm) {\n    return '<span class=\"CodeMirror-search-label\">' + cm.phrase(\"Replace?\") + '</span> <button>' + cm.phrase(\"Yes\") + '</button> <button>' + cm.phrase(\"No\") + '</button> <button>' + cm.phrase(\"All\") + '</button> <button>' + cm.phrase(\"Stop\") + '</button> ';\n  }\n\n  function replaceAll(cm, query, text) {\n    cm.operation(function() {\n      for (var cursor = getSearchCursor(cm, query); cursor.findNext();) {\n        if (typeof query != \"string\") {\n          var match = cm.getRange(cursor.from(), cursor.to()).match(query);\n          cursor.replace(text.replace(/\\$(\\d)/g, function(_, i) {return match[i];}));\n        } else cursor.replace(text);\n      }\n    });\n  }\n\n  function replace(cm, all) {\n    if (cm.getOption(\"readOnly\")) return;\n    var query = cm.getSelection() || getSearchState(cm).lastQuery;\n    var dialogText = '<span class=\"CodeMirror-search-label\">' + (all ? cm.phrase(\"Replace all:\") : cm.phrase(\"Replace:\")) + '</span>';\n    dialog(cm, dialogText + getReplaceQueryDialog(cm), dialogText, query, function(query) {\n      if (!query) return;\n      query = parseQuery(query);\n      dialog(cm, getReplacementQueryDialog(cm), cm.phrase(\"Replace with:\"), \"\", function(text) {\n        text = parseString(text)\n        if (all) {\n          replaceAll(cm, query, text)\n        } else {\n          clearSearch(cm);\n          var cursor = getSearchCursor(cm, query, cm.getCursor(\"from\"));\n          var advance = function() {\n            var start = cursor.from(), match;\n            if (!(match = cursor.findNext())) {\n              cursor = getSearchCursor(cm, query);\n              if (!(match = cursor.findNext()) ||\n                  (start && cursor.from().line == start.line && cursor.from().ch == start.ch)) return;\n            }\n            cm.setSelection(cursor.from(), cursor.to());\n            cm.scrollIntoView({from: cursor.from(), to: cursor.to()});\n            confirmDialog(cm, getDoReplaceConfirm(cm), cm.phrase(\"Replace?\"),\n                          [function() {doReplace(match);}, advance,\n                           function() {replaceAll(cm, query, text)}]);\n          };\n          var doReplace = function(match) {\n            cursor.replace(typeof query == \"string\" ? text :\n                           text.replace(/\\$(\\d)/g, function(_, i) {return match[i];}));\n            advance();\n          };\n          advance();\n        }\n      });\n    });\n  }\n\n  CodeMirror.commands.find = function(cm) {clearSearch(cm); doSearch(cm);};\n  CodeMirror.commands.findPersistent = function(cm) {clearSearch(cm); doSearch(cm, false, true);};\n  CodeMirror.commands.findPersistentNext = function(cm) {doSearch(cm, false, true, true);};\n  CodeMirror.commands.findPersistentPrev = function(cm) {doSearch(cm, true, true, true);};\n  CodeMirror.commands.findNext = doSearch;\n  CodeMirror.commands.findPrev = function(cm) {doSearch(cm, true);};\n  CodeMirror.commands.clearSearch = clearSearch;\n  CodeMirror.commands.replace = replace;\n  CodeMirror.commands.replaceAll = function(cm) {replace(cm, true);};\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Defines jumpToLine command. Uses dialog.js if present.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../dialog/dialog\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/search/jump-to-line',[\"../../lib/codemirror\", \"../dialog/dialog\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  function dialog(cm, text, shortText, deflt, f) {\n    if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true});\n    else f(prompt(shortText, deflt));\n  }\n\n  function getJumpDialog(cm) {\n    return cm.phrase(\"Jump to line:\") + ' <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">' + cm.phrase(\"(Use line:column or scroll% syntax)\") + '</span>';\n  }\n\n  function interpretLine(cm, string) {\n    var num = Number(string)\n    if (/^[-+]/.test(string)) return cm.getCursor().line + num\n    else return num - 1\n  }\n\n  CodeMirror.commands.jumpToLine = function(cm) {\n    var cur = cm.getCursor();\n    dialog(cm, getJumpDialog(cm), cm.phrase(\"Jump to line:\"), (cur.line + 1) + \":\" + cur.ch, function(posStr) {\n      if (!posStr) return;\n\n      var match;\n      if (match = /^\\s*([\\+\\-]?\\d+)\\s*\\:\\s*(\\d+)\\s*$/.exec(posStr)) {\n        cm.setCursor(interpretLine(cm, match[1]), Number(match[2]))\n      } else if (match = /^\\s*([\\+\\-]?\\d+(\\.\\d+)?)\\%\\s*/.exec(posStr)) {\n        var line = Math.round(cm.lineCount() * Number(match[1]) / 100);\n        if (/^[-+]/.test(match[1])) line = cur.line + line + 1;\n        cm.setCursor(line - 1, cur.ch);\n      } else if (match = /^\\s*\\:?\\s*([\\+\\-]?\\d+)\\s*/.exec(posStr)) {\n        cm.setCursor(interpretLine(cm, match[1]), cur.ch);\n      }\n    });\n  };\n\n  CodeMirror.keyMap[\"default\"][\"Alt-G\"] = \"jumpToLine\";\n});\n\n","(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/hover/text-hover',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\n(function() {\n  \"use strict\";\n\n  var HOVER_CLASS = \" CodeMirror-hover\";\n\n  function showTooltip(e, content) {\n    var tt = document.createElement(\"div\");\n    tt.className = \"CodeMirror-hover-tooltip\";\n    if (typeof content == \"string\") {\n      content = document.createTextNode(content);\n    }\n    tt.appendChild(content);\n    document.body.appendChild(tt);\n\n    function position(e) {\n      if (!tt.parentNode)\n        return CodeMirror.off(document, \"mousemove\", position);\n      tt.style.top = Math.max(0, e.clientY - tt.offsetHeight - 5) + \"px\";\n      tt.style.left = (e.clientX + 5) + \"px\";\n    }\n    CodeMirror.on(document, \"mousemove\", position);\n    position(e);\n    if (tt.style.opacity != null)\n      tt.style.opacity = 1;\n    return tt;\n  }\n  function rm(elt) {\n    if (elt.parentNode)\n      elt.parentNode.removeChild(elt);\n  }\n  function hideTooltip(tt) {\n    if (!tt.parentNode)\n      return;\n    if (tt.style.opacity == null)\n      rm(tt);\n    tt.style.opacity = 0;\n    setTimeout(function() {\n      rm(tt);\n    }, 600);\n  }\n\n  function showTooltipFor(e, content, node, state, cm) {\n    var tooltip = showTooltip(e, content);\n    function hide() {\n      CodeMirror.off(node, \"mouseout\", hide);\n      CodeMirror.off(node, \"click\", hide);\n      node.className = node.className.replace(HOVER_CLASS, \"\");\n      if (tooltip) {\n        hideTooltip(tooltip);\n        tooltip = null;\n      }\n      cm.removeKeyMap(state.keyMap);\n    }\n    var poll = setInterval(function() {\n      if (tooltip)\n        for ( var n = node;; n = n.parentNode) {\n          if (n == document.body)\n            return;\n          if (!n) {\n            hide();\n            break;\n          }\n        }\n      if (!tooltip)\n        return clearInterval(poll);\n    }, 400);\n    CodeMirror.on(node, \"mouseout\", hide);\n    CodeMirror.on(node, \"click\", hide);\n    state.keyMap = {Esc: hide};\n    cm.addKeyMap(state.keyMap);\n  }\n\n  function TextHoverState(cm, options) {\n    this.options = options;\n    this.timeout = null;\n    if (options.delay) {\n      this.onMouseOver = function(e) {\n        onMouseOverWithDelay(cm, e);\n      };\n    } else {\n      this.onMouseOver = function(e) {\n        onMouseOver(cm, e);\n      };\n    }\n    this.keyMap = null;\n  }\n\n  function parseOptions(cm, options) {\n    if (options instanceof Function)\n      return {\n        getTextHover : options\n      };\n    if (!options || options === true)\n      options = {};\n    if (!options.getTextHover)\n      options.getTextHover = cm.getHelper(CodeMirror.Pos(0, 0), \"textHover\");\n    if (!options.getTextHover)\n      throw new Error(\n          \"Required option 'getTextHover' missing (text-hover addon)\");\n    return options;\n  }\n\n  function onMouseOverWithDelay(cm, e) {\n    var state = cm.state.textHover, delay = state.options.delay;\n    clearTimeout(state.timeout);\n    if (e.srcElement) {\n\t// hack for IE, because e.srcElement failed when it is used in the tiemout function\n\tvar newE = {srcElement: e.srcElement, clientX : e.clientX, clientY: e.clientY};\n\te = newE;\n    }\n    state.timeout = setTimeout(function() {onMouseOver(cm, e);}, delay);\n  }\n\n  function onMouseOver(cm, e) {\n    var node = e.target || e.srcElement;\n    if (node) {\n      var state = cm.state.textHover, data = getTokenAndPosAt(cm, e);\n      var content = state.options.getTextHover(cm, data, e);\n      if (content) {\n        node.className += HOVER_CLASS;\n        if (typeof content == 'function')\n\t      content(showTooltipFor, data, e, node, state, cm);\n        else\n          showTooltipFor(e, content, node, state, cm);\n      }\n    }\n  }\n\n  function optionHandler(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      CodeMirror.off(cm.getWrapperElement(), \"mouseover\",\n          cm.state.textHover.onMouseOver);\n      delete cm.state.textHover;\n    }\n\n    if (val) {\n      var state = cm.state.textHover = new TextHoverState(cm, parseOptions(cm,\n          val));\n      CodeMirror.on(cm.getWrapperElement(), \"mouseover\", state.onMouseOver);\n    }\n  }\n\n  // When the mouseover fires, the cursor might not actually be over\n  // the character itself yet. These pairs of x,y offsets are used to\n  // probe a few nearby points when no suitable marked range is found.\n  var nearby = [ 0, 0, 0, 5, 0, -5, 5, 0, -5, 0 ];\n\n  function getTokenAndPosAt(cm, e) {\n    var node = e.target || e.srcElement, text = node.innerText\n        || node.textContent;\n    for ( var i = 0; i < nearby.length; i += 2) {\n      var pos = cm.coordsChar({\n        left : e.clientX + nearby[i],\n        top : e.clientY + nearby[i + 1]\n      });\n      var token = cm.getTokenAt(pos);\n      if (token && token.string === text) {\n        return {\n          token : token,\n          pos : pos\n        };\n      }\n    }\n  }\n\n  CodeMirror.defineOption(\"textHover\", false, optionHandler); // deprecated\n\n})();\n\n});\n\n","define('cm/addon/hover/prolog-hover',[ \"../../lib/codemirror\",\n\t \"jquery\",\n\t \"laconic\"\n       ],\n       function(CodeMirror, $) {\n\"use strict\";\n\nvar pathTranslations = {};\n\nvar tokenHelp = {\n  \"goal_built_in\":  function(data, cm) {\n    if ( data ) {\n      return $.el.div(predName(data),\n\t\t      cm.tokenInfo(data));\n    } else {\n      return \"Built-in predicate\";\n    }\n  },\n\n  \"goal_global\":  function(data, cm) {\n    if ( data ) {\n      return $.el.div(predName(data),\n\t\t      cm.tokenInfo(data));\n    } else {\n      return \"Global predicate\";\n    }\n  },\n\n  \"goal_autoload\":  function(data, cm) {\n    if ( data ) {\n      return $.el.div(predName(data), \" (autoload from \",\n\t\t      fileName(data, cm), \"): \",\n\t\t      cm.tokenInfo(data));\n    } else {\n      return \"Autoloaded predicate\";\n    }\n  },\n\n  \"goal_imported\":  function(data, cm) {\n    if ( data ) {\n      return $.el.div(predName(data), \" (imported from \",\n\t\t      fileName(data, cm), \"): \",\n\t\t      cm.tokenInfo(data));\n    } else {\n      return \"Imported predicate\";\n    }\n  },\n\n  \"goal_recursion\":    \"Recursive call\",\n  \"goal_dynamic\":      \"Dynamic predicate\",\n  \"goal_undefined\":    \"Undefined predicate\",\n  \"goal_local\":        function(data, cm) {\n\t\t\t return localDef(\"predicate\",data,cm)\n\t\t       },\n  \"goal_constraint\":   function(data, cm) {\n\t\t\t return localDef(\"CHR constraint\",data,cm)\n\t\t       },\n  \"head_unreferenced\": \"Predicate is not called\",\n  \"unused_import\":     \"Imported predicate is not used\",\n  \"undefined_import\":  \"Imported predicate is not defined\",\n  \"head_constraint\":   \"CHR constraint\",\n\n  \"file\": function(data, cm) {\n    if ( data ) {\n      addFileTranslation(cm, data.text, data.path);\n      return $.el.div(\"File: \",\n\t\t      $.el.span({class:\"file-path\"},\n\t\t\t\tdata.path));\n    } else {\n      return \"File name\";\n    }\n  },\n\n  \"file_no_depends\": function(data, cm) {\n    if ( data ) {\n      addFileTranslation(cm, data.text, data.path);\n      return $.el.div(\"File: \",\n\t\t      $.el.span({class:\"file-path\"},\n\t\t\t\tdata.path),\n\t\t      $.el.div({class:\"hover-remark\"},\n\t\t\t       \"does not resolve any dependencies\")\n\t\t     );\n    } else {\n      return \"File name (does not resolve any dependencies)\";\n    }\n  },\n\n  \"error\": function(data, cm) {\n    if ( data ) {\n      if ( data.expected )\n\treturn $.el.div(\"error: \", $.el.strong(data.expected), \" expected\");\n    }\n\n    return \"error\";\n  },\n\n  \"singleton\": \"Variable appearing only once\",\n  \"codes\":     \"List of Unicode code points (integers)\",\n  \"chars\":     \"List of one-character atoms\",\n  \"string\":    \"Packed string (SWI7, use `text` for a list of codes)\",\n  \"qatom\":     \"Quoted atom\",\n  \"uatom\":     \"Uppercase atom due to var_prefix flag\",\n  \"tag\":       \"Tag of a SWI7 dict\",\n  \"ext_quant\": \"Existential quantification operator\",\n  \"instantiation_error\": \"No variable allowed here\",\n\n  \"string_terminal\": \"Terminal (DCG)\",\n  \"format_string\":   \"Format string\",\n  \"html\":\t     \"HTML element\",\n  \"html_attribute\":  \"HTML element attribute\",\n  \"html_call\":       \"Call HTML rule\",\n  \"html_raw\":        \"Include raw HTML\",\n\n  \"head\":       null,\n  \"control\":    null,\n  \"fullstop\":   null,\n  \"var\":        null,\n  \"int\":        null,\n  \"float\":      null,\n  \"number\":     null,\n  \"atom\":       null,\n  \"functor\":    null,\n  \"comment\":    null,\n  \"neck\":       null,\n  \"operator\":   null,\n  \"sep\":        null,\n  \"list_open\":  null,\n  \"list_close\": null,\n  \"dict_open\":  null,\n  \"dict_close\": null\n};\n\nfunction predName(data) {\n  return $.el.span({class:\"pred-name\"},\n\t\t   data.text+\"/\"+data.arity);\n}\n\nfunction addFileTranslation(cm, text, path) {\n  pathTranslations[path] = text;\n}\n\nfunction fileName(data, cm) {\n  var last;\n\n  if ( pathTranslations[data.file] )\n    return pathTranslations[data.file];\n\n  if ( (last=data.file.lastIndexOf(\"/\")) )\n    return data.file.substring(last+1);\n\n  return data.file;\n}\n\nfunction localDef(type, data, cm) {\n  if ( data && data.file ) {\n    return $.el.div(capitalizeFirstLetter(type)+\n\t\t    \" included from \",\n\t\t    $.el.span({class:\"file-path\"},\n\t\t\t      data.file));\n  } else if ( data && data.line ) {\n    return capitalizeFirstLetter(type) + \" defined in line \"+data.line;\n  } else {\n    return \"Locally defined \" + type;\n  }\n}\n\nfunction capitalizeFirstLetter(string) {\n    return string[0].toUpperCase() + string.slice(1);\n}\n\nCodeMirror.registerHelper(\"textHover\", \"prolog\", function(cm, data, node) {\n  if ( data ) {\n    var token = data.token;\n    var help  = tokenHelp[token.type];\n    var et;\n\n    if ( help !== undefined ) {\n      if ( typeof(help) === \"function\" ) {\n\tvar r = help(cm.getEnrichedToken(token), cm);\n\n\tif ( typeof(r) === \"string\" )\n\t  return $.el.div(r);\n\telse\n\t  return r;\n      } else if ( typeof(help) === \"string\" ) {\n\treturn $.el.div(help);\n      }\n    } else if ( (et=cm.getEnrichedToken(token)) ) {\n      if ( et.summary && et.info === \"ask\" )\n\treturn $.el.div(et.summary, cm.tokenInfo(et));\n      else if ( et.summary )\n\treturn $.el.div(et.summary);\n      else\n\treturn $.el.div(token.type);\n    } else {\n      return $.el.div(token.type);\n    }\n  }\n\n  return null;\n});\n\n});\n\n","(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/addon/hint/show-context-info',[\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  var contextInfo = null;\n\n  CodeMirror.attachContextInfo = function(data) {\n    CodeMirror.on(data, 'select', function(completion, hints) {\n      hints = hints.parentNode;\n      var information = null;\n      if (completion.info) {\n        information = completion.info(completion);\n      }\n      if (information) {\n        var box = hints.getBoundingClientRect();\n        if (contextInfo == null) {\n          contextInfo = document.createElement('div');\n          contextInfo.className = 'CodeMirror-hints-contextInfo'\n          document.body.appendChild(contextInfo);\n        }\n        contextInfo.innerHTML = '';\n        contextInfo.style.top = hints.style.top;\n        contextInfo.style.left = box.right + 'px';\n        if(typeof information == \"string\") {\n          contextInfo.innerHTML = information;\n        } else {\n          contextInfo.appendChild(information);\n        }\n        contextInfo.style.display = 'block';\n      } else {\n        if (contextInfo != null) {\n          contextInfo.innerHTML = '';\n          contextInfo.style.display = 'none';\n        }\n      }\n    });\n\n    CodeMirror.on(data, 'close', function() {\n      if (contextInfo != null) {\n        contextInfo.parentNode.removeChild(contextInfo);\n      }\n      contextInfo = null;\n    });\n\n  }\n\n  CodeMirror.showContextInfo = function(getHints) {\n    return function(cm, showHints, options) {\n      if (!options)\n        options = showHints;\n      var data = getHints(cm, options);\n      CodeMirror.attachContextInfo(data);\n      return data;\n    }\n  }\n\n});\n\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define('cm/keymap/emacs',[\"../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var Pos = CodeMirror.Pos;\n  function posEq(a, b) { return a.line == b.line && a.ch == b.ch; }\n\n  // Kill 'ring'\n\n  var killRing = [];\n  function addToRing(str) {\n    killRing.push(str);\n    if (killRing.length > 50) killRing.shift();\n  }\n  function growRingTop(str) {\n    if (!killRing.length) return addToRing(str);\n    killRing[killRing.length - 1] += str;\n  }\n  function getFromRing(n) { return killRing[killRing.length - (n ? Math.min(n, 1) : 1)] || \"\"; }\n  function popFromRing() { if (killRing.length > 1) killRing.pop(); return getFromRing(); }\n\n  var lastKill = null;\n\n  function kill(cm, from, to, ring, text) {\n    if (text == null) text = cm.getRange(from, to);\n\n    if (ring == \"grow\" && lastKill && lastKill.cm == cm && posEq(from, lastKill.pos) && cm.isClean(lastKill.gen))\n      growRingTop(text);\n    else if (ring !== false)\n      addToRing(text);\n    cm.replaceRange(\"\", from, to, \"+delete\");\n\n    if (ring == \"grow\") lastKill = {cm: cm, pos: from, gen: cm.changeGeneration()};\n    else lastKill = null;\n  }\n\n  // Boundaries of various units\n\n  function byChar(cm, pos, dir) {\n    return cm.findPosH(pos, dir, \"char\", true);\n  }\n\n  function byWord(cm, pos, dir) {\n    return cm.findPosH(pos, dir, \"word\", true);\n  }\n\n  function byLine(cm, pos, dir) {\n    return cm.findPosV(pos, dir, \"line\", cm.doc.sel.goalColumn);\n  }\n\n  function byPage(cm, pos, dir) {\n    return cm.findPosV(pos, dir, \"page\", cm.doc.sel.goalColumn);\n  }\n\n  function byParagraph(cm, pos, dir) {\n    var no = pos.line, line = cm.getLine(no);\n    var sawText = /\\S/.test(dir < 0 ? line.slice(0, pos.ch) : line.slice(pos.ch));\n    var fst = cm.firstLine(), lst = cm.lastLine();\n    for (;;) {\n      no += dir;\n      if (no < fst || no > lst)\n        return cm.clipPos(Pos(no - dir, dir < 0 ? 0 : null));\n      line = cm.getLine(no);\n      var hasText = /\\S/.test(line);\n      if (hasText) sawText = true;\n      else if (sawText) return Pos(no, 0);\n    }\n  }\n\n  function bySentence(cm, pos, dir) {\n    var line = pos.line, ch = pos.ch;\n    var text = cm.getLine(pos.line), sawWord = false;\n    for (;;) {\n      var next = text.charAt(ch + (dir < 0 ? -1 : 0));\n      if (!next) { // End/beginning of line reached\n        if (line == (dir < 0 ? cm.firstLine() : cm.lastLine())) return Pos(line, ch);\n        text = cm.getLine(line + dir);\n        if (!/\\S/.test(text)) return Pos(line, ch);\n        line += dir;\n        ch = dir < 0 ? text.length : 0;\n        continue;\n      }\n      if (sawWord && /[!?.]/.test(next)) return Pos(line, ch + (dir > 0 ? 1 : 0));\n      if (!sawWord) sawWord = /\\w/.test(next);\n      ch += dir;\n    }\n  }\n\n  function byExpr(cm, pos, dir) {\n    var wrap;\n    if (cm.findMatchingBracket && (wrap = cm.findMatchingBracket(pos, {strict: true}))\n        && wrap.match && (wrap.forward ? 1 : -1) == dir)\n      return dir > 0 ? Pos(wrap.to.line, wrap.to.ch + 1) : wrap.to;\n\n    for (var first = true;; first = false) {\n      var token = cm.getTokenAt(pos);\n      var after = Pos(pos.line, dir < 0 ? token.start : token.end);\n      if (first && dir > 0 && token.end == pos.ch || !/\\w/.test(token.string)) {\n        var newPos = cm.findPosH(after, dir, \"char\");\n        if (posEq(after, newPos)) return pos;\n        else pos = newPos;\n      } else {\n        return after;\n      }\n    }\n  }\n\n  // Prefixes (only crudely supported)\n\n  function getPrefix(cm, precise) {\n    var digits = cm.state.emacsPrefix;\n    if (!digits) return precise ? null : 1;\n    clearPrefix(cm);\n    return digits == \"-\" ? -1 : Number(digits);\n  }\n\n  function repeated(cmd) {\n    var f = typeof cmd == \"string\" ? function(cm) { cm.execCommand(cmd); } : cmd;\n    return function(cm) {\n      var prefix = getPrefix(cm);\n      f(cm);\n      for (var i = 1; i < prefix; ++i) f(cm);\n    };\n  }\n\n  function findEnd(cm, pos, by, dir) {\n    var prefix = getPrefix(cm);\n    if (prefix < 0) { dir = -dir; prefix = -prefix; }\n    for (var i = 0; i < prefix; ++i) {\n      var newPos = by(cm, pos, dir);\n      if (posEq(newPos, pos)) break;\n      pos = newPos;\n    }\n    return pos;\n  }\n\n  function move(by, dir) {\n    var f = function(cm) {\n      cm.extendSelection(findEnd(cm, cm.getCursor(), by, dir));\n    };\n    f.motion = true;\n    return f;\n  }\n\n  function killTo(cm, by, dir, ring) {\n    var selections = cm.listSelections(), cursor;\n    var i = selections.length;\n    while (i--) {\n      cursor = selections[i].head;\n      kill(cm, cursor, findEnd(cm, cursor, by, dir), ring);\n    }\n  }\n\n  function killRegion(cm, ring) {\n    if (cm.somethingSelected()) {\n      var selections = cm.listSelections(), selection;\n      var i = selections.length;\n      while (i--) {\n        selection = selections[i];\n        kill(cm, selection.anchor, selection.head, ring);\n      }\n      return true;\n    }\n  }\n\n  function addPrefix(cm, digit) {\n    if (cm.state.emacsPrefix) {\n      if (digit != \"-\") cm.state.emacsPrefix += digit;\n      return;\n    }\n    // Not active yet\n    cm.state.emacsPrefix = digit;\n    cm.on(\"keyHandled\", maybeClearPrefix);\n    cm.on(\"inputRead\", maybeDuplicateInput);\n  }\n\n  var prefixPreservingKeys = {\"Alt-G\": true, \"Ctrl-X\": true, \"Ctrl-Q\": true, \"Ctrl-U\": true};\n\n  function maybeClearPrefix(cm, arg) {\n    if (!cm.state.emacsPrefixMap && !prefixPreservingKeys.hasOwnProperty(arg))\n      clearPrefix(cm);\n  }\n\n  function clearPrefix(cm) {\n    cm.state.emacsPrefix = null;\n    cm.off(\"keyHandled\", maybeClearPrefix);\n    cm.off(\"inputRead\", maybeDuplicateInput);\n  }\n\n  function maybeDuplicateInput(cm, event) {\n    var dup = getPrefix(cm);\n    if (dup > 1 && event.origin == \"+input\") {\n      var one = event.text.join(\"\\n\"), txt = \"\";\n      for (var i = 1; i < dup; ++i) txt += one;\n      cm.replaceSelection(txt);\n    }\n  }\n\n  function addPrefixMap(cm) {\n    cm.state.emacsPrefixMap = true;\n    cm.addKeyMap(prefixMap);\n    cm.on(\"keyHandled\", maybeRemovePrefixMap);\n    cm.on(\"inputRead\", maybeRemovePrefixMap);\n  }\n\n  function maybeRemovePrefixMap(cm, arg) {\n    if (typeof arg == \"string\" && (/^\\d$/.test(arg) || arg == \"Ctrl-U\")) return;\n    cm.removeKeyMap(prefixMap);\n    cm.state.emacsPrefixMap = false;\n    cm.off(\"keyHandled\", maybeRemovePrefixMap);\n    cm.off(\"inputRead\", maybeRemovePrefixMap);\n  }\n\n  // Utilities\n\n  function setMark(cm) {\n    cm.setCursor(cm.getCursor());\n    cm.setExtending(!cm.getExtending());\n    cm.on(\"change\", function() { cm.setExtending(false); });\n  }\n\n  function clearMark(cm) {\n    cm.setExtending(false);\n    cm.setCursor(cm.getCursor());\n  }\n\n  function getInput(cm, msg, f) {\n    if (cm.openDialog)\n      cm.openDialog(msg + \": <input type=\\\"text\\\" style=\\\"width: 10em\\\"/>\", f, {bottom: true});\n    else\n      f(prompt(msg, \"\"));\n  }\n\n  function operateOnWord(cm, op) {\n    var start = cm.getCursor(), end = cm.findPosH(start, 1, \"word\");\n    cm.replaceRange(op(cm.getRange(start, end)), start, end);\n    cm.setCursor(end);\n  }\n\n  function toEnclosingExpr(cm) {\n    var pos = cm.getCursor(), line = pos.line, ch = pos.ch;\n    var stack = [];\n    while (line >= cm.firstLine()) {\n      var text = cm.getLine(line);\n      for (var i = ch == null ? text.length : ch; i > 0;) {\n        var ch = text.charAt(--i);\n        if (ch == \")\")\n          stack.push(\"(\");\n        else if (ch == \"]\")\n          stack.push(\"[\");\n        else if (ch == \"}\")\n          stack.push(\"{\");\n        else if (/[\\(\\{\\[]/.test(ch) && (!stack.length || stack.pop() != ch))\n          return cm.extendSelection(Pos(line, i));\n      }\n      --line; ch = null;\n    }\n  }\n\n  function quit(cm) {\n    cm.execCommand(\"clearSearch\");\n    clearMark(cm);\n  }\n\n  CodeMirror.emacs = {kill: kill, killRegion: killRegion, repeated: repeated};\n\n  // Actual keymap\n\n  var keyMap = CodeMirror.keyMap.emacs = CodeMirror.normalizeKeyMap({\n    \"Ctrl-W\": function(cm) {kill(cm, cm.getCursor(\"start\"), cm.getCursor(\"end\"), true);},\n    \"Ctrl-K\": repeated(function(cm) {\n      var start = cm.getCursor(), end = cm.clipPos(Pos(start.line));\n      var text = cm.getRange(start, end);\n      if (!/\\S/.test(text)) {\n        text += \"\\n\";\n        end = Pos(start.line + 1, 0);\n      }\n      kill(cm, start, end, \"grow\", text);\n    }),\n    \"Alt-W\": function(cm) {\n      addToRing(cm.getSelection());\n      clearMark(cm);\n    },\n    \"Ctrl-Y\": function(cm) {\n      var start = cm.getCursor();\n      cm.replaceRange(getFromRing(getPrefix(cm)), start, start, \"paste\");\n      cm.setSelection(start, cm.getCursor());\n    },\n    \"Alt-Y\": function(cm) {cm.replaceSelection(popFromRing(), \"around\", \"paste\");},\n\n    \"Ctrl-Space\": setMark, \"Ctrl-Shift-2\": setMark,\n\n    \"Ctrl-F\": move(byChar, 1), \"Ctrl-B\": move(byChar, -1),\n    \"Right\": move(byChar, 1), \"Left\": move(byChar, -1),\n    \"Ctrl-D\": function(cm) { killTo(cm, byChar, 1, false); },\n    \"Delete\": function(cm) { killRegion(cm, false) || killTo(cm, byChar, 1, false); },\n    \"Ctrl-H\": function(cm) { killTo(cm, byChar, -1, false); },\n    \"Backspace\": function(cm) { killRegion(cm, false) || killTo(cm, byChar, -1, false); },\n\n    \"Alt-F\": move(byWord, 1), \"Alt-B\": move(byWord, -1),\n    \"Alt-Right\": move(byWord, 1), \"Alt-Left\": move(byWord, -1),\n    \"Alt-D\": function(cm) { killTo(cm, byWord, 1, \"grow\"); },\n    \"Alt-Backspace\": function(cm) { killTo(cm, byWord, -1, \"grow\"); },\n\n    \"Ctrl-N\": move(byLine, 1), \"Ctrl-P\": move(byLine, -1),\n    \"Down\": move(byLine, 1), \"Up\": move(byLine, -1),\n    \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStart\",\n\n    \"Alt-V\": move(byPage, -1), \"Ctrl-V\": move(byPage, 1),\n    \"PageUp\": move(byPage, -1), \"PageDown\": move(byPage, 1),\n\n    \"Ctrl-Up\": move(byParagraph, -1), \"Ctrl-Down\": move(byParagraph, 1),\n\n    \"Alt-A\": move(bySentence, -1), \"Alt-E\": move(bySentence, 1),\n    \"Alt-K\": function(cm) { killTo(cm, bySentence, 1, \"grow\"); },\n\n    \"Ctrl-Alt-K\": function(cm) { killTo(cm, byExpr, 1, \"grow\"); },\n    \"Ctrl-Alt-Backspace\": function(cm) { killTo(cm, byExpr, -1, \"grow\"); },\n    \"Ctrl-Alt-F\": move(byExpr, 1), \"Ctrl-Alt-B\": move(byExpr, -1, \"grow\"),\n\n    \"Shift-Ctrl-Alt-2\": function(cm) {\n      var cursor = cm.getCursor();\n      cm.setSelection(findEnd(cm, cursor, byExpr, 1), cursor);\n    },\n    \"Ctrl-Alt-T\": function(cm) {\n      var leftStart = byExpr(cm, cm.getCursor(), -1), leftEnd = byExpr(cm, leftStart, 1);\n      var rightEnd = byExpr(cm, leftEnd, 1), rightStart = byExpr(cm, rightEnd, -1);\n      cm.replaceRange(cm.getRange(rightStart, rightEnd) + cm.getRange(leftEnd, rightStart) +\n                      cm.getRange(leftStart, leftEnd), leftStart, rightEnd);\n    },\n    \"Ctrl-Alt-U\": repeated(toEnclosingExpr),\n\n    \"Alt-Space\": function(cm) {\n      var pos = cm.getCursor(), from = pos.ch, to = pos.ch, text = cm.getLine(pos.line);\n      while (from && /\\s/.test(text.charAt(from - 1))) --from;\n      while (to < text.length && /\\s/.test(text.charAt(to))) ++to;\n      cm.replaceRange(\" \", Pos(pos.line, from), Pos(pos.line, to));\n    },\n    \"Ctrl-O\": repeated(function(cm) { cm.replaceSelection(\"\\n\", \"start\"); }),\n    \"Ctrl-T\": repeated(function(cm) {\n      cm.execCommand(\"transposeChars\");\n    }),\n\n    \"Alt-C\": repeated(function(cm) {\n      operateOnWord(cm, function(w) {\n        var letter = w.search(/\\w/);\n        if (letter == -1) return w;\n        return w.slice(0, letter) + w.charAt(letter).toUpperCase() + w.slice(letter + 1).toLowerCase();\n      });\n    }),\n    \"Alt-U\": repeated(function(cm) {\n      operateOnWord(cm, function(w) { return w.toUpperCase(); });\n    }),\n    \"Alt-L\": repeated(function(cm) {\n      operateOnWord(cm, function(w) { return w.toLowerCase(); });\n    }),\n\n    \"Alt-;\": \"toggleComment\",\n\n    \"Ctrl-/\": repeated(\"undo\"), \"Shift-Ctrl--\": repeated(\"undo\"),\n    \"Ctrl-Z\": repeated(\"undo\"), \"Cmd-Z\": repeated(\"undo\"),\n    \"Shift-Alt-,\": \"goDocStart\", \"Shift-Alt-.\": \"goDocEnd\",\n    \"Ctrl-S\": \"findPersistentNext\", \"Ctrl-R\": \"findPersistentPrev\", \"Ctrl-G\": quit, \"Shift-Alt-5\": \"replace\",\n    \"Alt-/\": \"autocomplete\",\n    \"Enter\": \"newlineAndIndent\",\n    \"Ctrl-J\": repeated(function(cm) { cm.replaceSelection(\"\\n\", \"end\"); }),\n    \"Tab\": \"indentAuto\",\n\n    \"Alt-G G\": function(cm) {\n      var prefix = getPrefix(cm, true);\n      if (prefix != null && prefix > 0) return cm.setCursor(prefix - 1);\n\n      getInput(cm, \"Goto line\", function(str) {\n        var num;\n        if (str && !isNaN(num = Number(str)) && num == (num|0) && num > 0)\n          cm.setCursor(num - 1);\n      });\n    },\n\n    \"Ctrl-X Tab\": function(cm) {\n      cm.indentSelection(getPrefix(cm, true) || cm.getOption(\"indentUnit\"));\n    },\n    \"Ctrl-X Ctrl-X\": function(cm) {\n      cm.setSelection(cm.getCursor(\"head\"), cm.getCursor(\"anchor\"));\n    },\n    \"Ctrl-X Ctrl-S\": \"save\",\n    \"Ctrl-X Ctrl-W\": \"save\",\n    \"Ctrl-X S\": \"saveAll\",\n    \"Ctrl-X F\": \"open\",\n    \"Ctrl-X U\": repeated(\"undo\"),\n    \"Ctrl-X K\": \"close\",\n    \"Ctrl-X Delete\": function(cm) { kill(cm, cm.getCursor(), bySentence(cm, cm.getCursor(), 1), \"grow\"); },\n    \"Ctrl-X H\": \"selectAll\",\n\n    \"Ctrl-Q Tab\": repeated(\"insertTab\"),\n    \"Ctrl-U\": addPrefixMap\n  });\n\n  var prefixMap = {\"Ctrl-G\": clearPrefix};\n  function regPrefix(d) {\n    prefixMap[d] = function(cm) { addPrefix(cm, d); };\n    keyMap[\"Ctrl-\" + d] = function(cm) { addPrefix(cm, d); };\n    prefixPreservingKeys[\"Ctrl-\" + d] = true;\n  }\n  for (var i = 0; i < 10; ++i) regPrefix(String(i));\n  regPrefix(\"-\");\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2017, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Prolog editor plugin based on [CodeMirror](http://codemirror.net)\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n * @requires codemirror\n */\n\ndefine('editor',[ \"cm/lib/codemirror\",\n\t \"config\",\n\t \"preferences\",\n\t \"form\",\n\t \"cm/mode/prolog/prolog-template-hint\",\n\t \"modal\",\n\t \"tabbed\",\n\t \"prolog\",\n\n\t \"storage\",\n\n\t \"cm/mode/prolog/prolog\",\n\t \"cm/mode/prolog/prolog_keys\",\n\t \"cm/mode/prolog/prolog_query\",\n\t \"cm/mode/prolog/prolog_server\",\n\n\t \"cm/mode/markdown/markdown\",\n\n\t \"cm/addon/edit/matchbrackets\",\n\t \"cm/addon/comment/continuecomment\",\n\t \"cm/addon/comment/comment\",\n\t \"cm/addon/hint/show-hint\",\n\t \"cm/addon/hint/anyword-hint\",\n\t \"cm/addon/display/placeholder\",\n\t \"cm/addon/runmode/runmode\",\n\t \"cm/addon/search/search\",\n\t \"cm/addon/search/searchcursor\",\n\t \"cm/addon/search/jump-to-line\",\n\t \"cm/addon/dialog/dialog\",\n\n\t \"cm/addon/hover/text-hover\",\n\t \"cm/addon/hover/prolog-hover\",\n\n\t \"cm/addon/hint/templates-hint\",\n\t \"cm/addon/hint/show-context-info\",\n\n         \"jquery\", \"laconic\",\n\n\t \"cm/keymap/emacs\",\n       ],\n       function(CodeMirror, config, preferences, form, templateHint,\n\t\tmodal, tabbed, prolog) {\n\n(function($) {\n  var pluginName = 'prologEditor';\n\n  var modeDefaults = {\n    prolog: {\n      mode: \"prolog\",\n      role: \"source\",\n      placeholder: \"Your Prolog rules and facts go here ...\",\n      lineNumbers: true,\n      autoCurrent: true,\n      save: false,\n      theme: \"prolog\",\n      matchBrackets: true,\n      textHover: true,\n      prologKeys: true,\n      extraKeys: {\n\t\"Ctrl-Space\": \"autocomplete\",\n\t\"Alt-/\": \"autocomplete\",\n      },\n      hintOptions: {\n      hint: templateHint.getHints,\n      completeSingle: false\n      }\n    },\n\n    markdown: {\n      mode: \"markdown\",\n      placeholder: \"Your markdown block goes here ...\",\n      lineWrapping: true,\n      save: false\n    }\n  };\n\n  var roleDefaults = {\n    query: {\n      mode: \"prolog\",\n      role: \"query\",\n      placeholder: \"Your query goes here ...\",\n      lineNumbers: false,\n      lineWrapping: true,\n      save: false\n    }\n  };\n\n  var lastEditor;\n\n  /** @lends $.fn.prologEditor */\n  var methods = {\n    /**\n     * Initialize a Prolog editor.\n     * @param {Object} [options]\n     * @param {String} [options.role=\"source\"] determines the role of\n     * the editor. It is one of `source` or `query`.\n     * @param {String} [options.placeholder=\"Your Prolog program goes here ...\"]\n     * sets the placeholder for the editor.\n     * @param {Boolean} [options.lineNumbers=true] defines whether or\n     * not a left-gutter with line numbers is displayed.\n     * @param {Boolean} [options.save=false] defines whether the\n     * editor responds to storage events.\n     * @param {String} [options.mode=\"prolog\"] defines the mode used by\n     * CodeMirror.\n     * @param {String} [options.theme=\"prolog\"] defines the CSS used for\n     * highlighting.\n     * @param {Boolean} [options.matchBrackets=true] defines whether the\n     * matching bracket is highlighted.\n     * @param {Boolean} [options.prologKeys=true] defines whether \"(\",\n     * \">\" and \";\" act as active keys to support if-then-else layout.\n     * @param {Object} [options.extraKeys] specifies additional key\n     * bindings.  Default is to bind \"Ctrl-Space\" and \"Alt-/\" to\n     * \"autocomplete\".\n     *\n     */\n    _init: function(opts) {\n\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar storage = {};\t\t/* storage meta-data */\n\tvar data = {};\t\t\t/* our data */\n\tvar ta;\t\t\t\t/* textarea */\n\n\topts      = opts||{};\n\topts.mode = opts.mode||\"prolog\";\n\n\tvar options = $.extend({}, modeDefaults[opts.mode]);\n\tif ( opts.role && roleDefaults[opts.role] )\n\t  options = $.extend(options, roleDefaults[opts.role]);\n\toptions = $.extend(options, opts);\n\n\tif ( preferences.getVal(\"emacs-keybinding\") )\n\t  options.keyMap = \"emacs\";\n\n\tif ( options.mode == \"prolog\" ) {\n\t  data.role = options.role;\n\t  if ( options.getSource )\n\t    data.getSource = options.getSource;\n\n\t  if ( config.http.locations.cm_highlight ) {\n\t    options.prologHighlightServer =\n\t    { url:  config.http.locations.cm_highlight,\n\t      role: options.role,\n\t      enabled: preferences.getVal(\"semantic-highlighting\")\n\t    };\n\t    if ( options.sourceID )\n\t      options.prologHighlightServer.sourceID = options.sourceID;\n\t    options.extraKeys[\"Ctrl-R\"] = \"refreshHighlight\";\n\t  }\n\n\t  if ( options.role == \"source\" ) {\n\t    options.continueComments = \"Enter\";\n\t    options.gutters = [\"Prolog-breakpoints\"]\n\t  }\n\n\t  /*\n\t   * Long click detection and handling.\n\t   */\n\t  data.long_click = {};\n\t  function moveLongClick(ev) {\n\t    var lc = data.long_click;\n\t    var dx = ev.clientX - lc.clientX;\n\t    var dy = ev.clientY - lc.clientY;\n\t    if ( Math.sqrt(dx*dx+dy*dy) > 5 )\n\t      cancelLongClick();\n\t  }\n\t  function cancelLongClick() {\n\t    elem.off(\"mousemove\", moveLongClick);\n\t    var lc = data.long_click;\n\t    if ( lc.timeout ) {\n\t      clearTimeout(lc.timeout);\n\t      lc.target  = undefined;\n\t      lc.timeout = undefined;\n\t    }\n\t  }\n\n\t  elem.on(\"mousedown\", \".CodeMirror-code\", function(ev) {\n\t    var lc = data.long_click;\n\n\t    lc.clientX = ev.clientX;\n\t    lc.clientY = ev.clientY;\n\t    elem.on(\"mousemove\", moveLongClick);\n\t    data.long_click.timeout = setTimeout(function() {\n\t      cancelLongClick();\n\t      elem.prologEditor('contextAction');\n\t    }, 500);\n\t  });\n\t  elem.on(\"mouseup\", function(ev) {\n\t    cancelLongClick();\n\t  });\n\t}\n\n\t/*\n\t * Create CodeMirror\n\t */\n\tif ( (ta=elem.children(\"textarea\")[0]) ) {\n\t  function copyData(name) {\n\t    var value = $(ta).data(name);\n\t    if ( value ) {\n\t      storage[name] = value;\n\t    }\n\t  }\n\n\t  copyData(\"file\");\n\t  copyData(\"url\");\n\t  copyData(\"title\");\n\t  copyData(\"meta\");\n\t  copyData(\"st_type\");\n\t  copyData(\"chats\");\n\n\t  data.cm = CodeMirror.fromTextArea(ta, options);\n\t} else {\n\t  if ( !options.value )\n\t    options.value = elem.text();\n\t  data.cm = CodeMirror(elem[0], options);\n\t}\n\n\telem.data(pluginName, data);\n\telem.prologEditor('loadMode', options.mode);\n\n\telem.addClass(\"swish-event-receiver\");\n\telem.addClass(\"prolog-editor\");\n\telem.on(\"preference\", function(ev, pref) {\n\t  elem.prologEditor('preference', pref);\n\t});\n\telem.on(\"print\", function() {\n\t  if ( data.role != \"query\" )\n\t    elem.prologEditor('print');\n\t});\n\telem.on(\"clearMessages\", function(ev) {\n\t  elem.prologEditor('clearMessages');\n\t});\n\telem.on(\"edit-command\", function(ev, command) {\n\t  elem.prologEditor('execCommand', command);\n\t});\n\tdata.cm.on(\"blur\", function(ev) {\n\t  elem.prologEditor('execCommand', 'prepare');\n\t});\n\n\tif ( options.save ) {\n\t  storage.typeName = options.typeName||\"program\";\n\t  elem.prologEditor('setupStorage', storage);\n\t}\n\n\t// Refresh all editors when opening a tab as they are often\n\t// not shown correctly when created in the background or after\n\t// the window was resized while these editors were hidden.\n\telem.on(\"activate-tab\", function(ev) {\n\t  data.cm.refresh();\n\t});\n\n\tif ( options.mode == \"prolog\" && data.role == \"source\" ) {\n\t  elem.on(\"activate-tab\", function(ev) {\n\t    if ( options.autoCurrent )\n\t      elem.prologEditor('makeCurrent');\n\t  });\n\n\t  elem.on(\"source-error\", function(ev, error) {\n\t    elem.prologEditor('highlightError', error);\n\t  });\n\t  elem.on(\"pengine-died\", function(ev, id) {\n\t    if ( data.pengines ) {\n\t      var i = data.pengines.indexOf(id);\n\t      if ( i >= 0 )\n\t\tdata.pengines.splice(i, 1);\n\t    }\n\t    if ( data.traceMark && data.traceMark.pengine == id ) {\n\t      data.traceMark.clear();\n\t      data.traceMark = null;\n\t    }\n\t  });\n\t  if ( options.save ) {\t\t/* not for notebook cells */\n\t    elem.on('addExample', function(ev, query) {\n\t      elem.prologEditor('addExample', query);\n\t    });\n\t  }\n\t  data.cm.on(\"gutterClick\", function(cm, n) {\n\t    var info = cm.lineInfo(n);\n\n\t    function makeMarker() {\n\t      return $(\"<span class=\\\"breakpoint-marker\\\">&#9679;</span>\")[0];\n\t    }\n\n\t    if ( info.gutterMarkers )\n\t      cm.setGutterMarker(n, \"Prolog-breakpoints\", null);\n\t    else\n\t      cm.setGutterMarker(n, \"Prolog-breakpoints\", makeMarker());\n\t  });\n\t} /* end if prolog source */\n\n\tdata.cm.on(\"change\", function(cm, change) {\n\t  var clean;\n\n\t  if ( change.origin == \"setValue\" ) {\n\t    clean = true;\n\t  } else {\n\t    var store = elem.data(\"storage\");\n\t    var gen = store ? store.cleanGeneration : data.cleanGeneration;\n\n\t    clean = data.cm.isClean(gen);\n\t  }\n\n\t  elem.prologEditor('markClean', clean);\n\t});\n      });\n    },\n\n    /**\n     * @example // Get the CodeMirror instance\n     * $(element).prologEditor('getOption', 'cm');\n     * @param {String} opt Name of option to fetch.\n     * @return {*}\n     */\n\n    getOption: function(opt) {\n      return this.data(pluginName)[opt];\n    },\n\n    /**\n     * @example // Set the keybinding for the editor\n     * $(element).prologEditor('setKeybinding', 'emacs') set\n     * keybinding schema emacs.\n     * @param {String} schema Name of the keybinding\n     * return {*}\n     */\n    setKeybinding: function(schema) {\n      schema = schema || \"default\";\n      this.data(pluginName).cm.options.keyMap = schema;\n    },\n\n    /**\n     * Switch the editor to the requested mode, possibly by dynamically\n     * loading the mode.  It seems that if we use RequireJS, we should\n     * also use this for loading modes dynamically.\n     */\n    loadMode: function(mode) {\n      var data = this.data(pluginName);\n\n      if ( !CodeMirror.modes[mode] ) {\n\trequire([\"cm/mode/\"+mode+\"/\"+mode],\n\t\t  function() {\n\t\t    data.cm.setOption(\"mode\", mode);\n\t\t  });\n      } else if ( mode != data.mode ) {\n\tdata.cm.setOption(\"mode\", mode);\n      }\n\n      return this;\n    },\n\n    /**\n     * True if this source needs to be sent to the pengine.  This is\n     * the case of the source is loaded.  We should also exclude module\n     * files.  How do we detect a module file?  Detecting the module\n     * header without support from Prolog is rather hard: count the\n     * arity and ignore preceeding comments, encoding and conditional\n     * compilation directives.\n     */\n    isPengineSource: function() {\n      var data = $(this).data(pluginName);\n      if ( data && data.role == \"source\" ) {\n\tvar storageData = $(this).data('storage');\n\n\tif ( storageData && storageData.meta ) {\n\t  if ( storageData.meta.loaded ||\n\t       storageData.meta.module )\n\t    return false;\n\t}\n      }\n\n      return this;\n    },\n\n    /**\n     * Get the defined breakpoints.\n     * @param {String} pengineID is the pengine asking for the\n     * breakpoints.\n     * @returns {Array.Object} an array holding one object per source\n     * with breakpoints.  The object contains `file` and `breakpoints`,\n     * where the latter is an array of integers.\n     */\n    getBreakpoints: function(pengineID) {\n      var result = [];\n\n      this.each(function() {\n\tvar data = $(this).data(pluginName);\n\tvar breakpoints = [];\n\tvar offset = 0;\n\tvar cm = data.cm;\n\tvar line = cm.firstLine();\n\tvar last = cm.lastLine();\n\n\tfor( ; line < last; line++ ) {\n\t  var info = cm.lineInfo(line);\n\t  if ( info.gutterMarkers )\n\t    breakpoints.push(offset+line+1);\n\t}\n\n\tif ( breakpoints.length > 0 ) {\n\t  var file;\n\n\t  if ( data.pengines && data.pengines.indexOf(pengineID) >= 0 ) {\n\t    file = \"pengine://\"+pengineID+\"/src\";\n\t  } else {\n\t    var store = $(this).data(\"storage\");\n\t    if ( store )\n\t      file = \"swish://\"+store.file;\n\t  }\n\n\t  if ( file )\n\t    result.push({ file: file,\n\t\t          breakpoints: breakpoints\n\t\t        });\n\t}\n      });\n\n      return result;\n    },\n\n    /**\n     * Get the source text from a set of editors.  Each source is\n     * preceeded by a line :- '#file'(DocID, Line).\n     *\n     * @param {String} [role] Only return source for editors that\n     * match the given role.\n     * @param {Boolean} [direct] If `true`, do not try to indirect\n     * over the `data.getSource` function.\n     * @returns {String} current contents of the editor.  If\n     * the jQuery object holds multiple editors, we return the\n     * joined content of the editors.\n     */\n    getSource: function(role, direct) {\n      var src = [];\n\n      this.each(function() {\n\tif ( $(this).prologEditor('isPengineSource') ) {\n\t  var data = $(this).data(pluginName);\n\n\t  if ( data ) {\n\t    if ( !role || (role == data.role) ) {\n\t      var mysrc;\n//TBD\t      var docid = $(this).prologEditor('docid');\n\n\t      if ( typeof(data.getSource) == \"function\" && !direct ) {\n\t\tmysrc = data.getSource();\n\t      } else {\n\t\tmysrc = data.cm.getValue();\n\t      }\n//TBD\t      if ( role == \"source\" )\n//TBD\t\tsrc.push(\":- '#file'(\"+Pengine.stringify(docid)+\",1).\");\n\t      src.push(mysrc);\n\t    }\n\t  }\n\t}\n      });\n\n      return src.join(\"\\n\\n\");\n    },\n\n    /**\n     * @returns {Object} holding extended source information\n     */\n    getSourceEx: function() {\n      var obj = { value: this.data(pluginName).cm.getValue()\n\t\t};\n      var bps = this.prologEditor('getBreakpoints');\n      if ( bps.length > 0 )\n\tobj.breakpoints = bps;\n\n      return obj;\n    },\n\n    /*\n     * @returns {String} document identifier relating this editor to\n     * the server side document store.\n     */\n    docid: function() {\n      var st;\n\n      if ( this.hasClass(\"storage\") )\n\treturn this.storage('docid');\n      else if ( (st=this.closest(\".storage\")) && st.length > 0 ) {\n\tstdoc = st.storage('docid');\n\tif ( stdoc )\n\t  return stdoc + \"#\" + this.closest(\".nb-cell\").attr(\"name\");\n      }\n    },\n\n    /**\n     * @return {String[]} UUIDs of the sources used for\n     * server-side analysis.  The array may contain `null`s\n     * for sources that have no server side backup.\n     */\n     getSourceID: function() {\n       var ids = [];\n\n       this.each(function() {\n\t var data = $(this).data(pluginName);\n\n\t if ( data && data.cm && data.cm.state.prologHighlightServer )\n\t   ids.push(data.cm.state.prologHighlightServer.uuid);\n\t else\n\t   ids.push(null);\n       });\n\n       return ids;\n     },\n\n    /**\n     * @param {String} source sets the new content for the editor.  If\n     * the editor is associated with a storage plugin, the call is\n     * forwarded to the storage plugin.\n     * @param {Boolean} [direct=false] if this parameter is `true`, the\n     * message is never delegated to the storage\n     */\n    setSource: function(source, direct) {\n      if ( typeof(source) == \"string\" )\n\tsource = {data:source};\n\n      if ( this.data('storage') && direct != true ) {\n\tthis.storage('setSource', source);\n      } else {\n\tvar data = this.data(pluginName);\n\n\tdata.cm.setValue(source.data);\n\tif ( source.line || source.prompt ) {\n\t  data.cm.refresh();\n\n\t  if ( source.line ) {\n\t    this.prologEditor('gotoLine', source.line, source);\n\t  } else {\n\t    this.prologEditor('showTracePort', source.prompt);\n\t  }\n\t}\n\n\tif ( data.role == \"source\" && !source.noHistory ) {\n\t  $(\".swish-event-receiver\").trigger(\"program-loaded\",\n\t\t\t\t\t     { editor: this,\n\t\t\t\t\t       query: source.query\n\t\t\t\t\t     });\n\t}\n      }\n      return this;\n    },\n\n    /**\n     * Advertise this editor as the current editor.  This is the\n     * one used by the default query editor.\n     */\n    makeCurrent: function(options) {\n      if ( !options || !options.noHistory ) {\n\t$(\".swish-event-receiver\").trigger(\"current-program\", this);\n      }\n      return this;\n    },\n\n    /**\n     * Grab the focus\n     */\n    focus: function() {\n      var data = this.data(pluginName);\n      if ( data )\n\tdata.cm.focus();\n      return this;\n    },\n\n    /**\n     * Called if the editor changes from clean to dirty or visa versa.\n     * This triggers `data-is-clean`, which is trapped by the tab to\n     * indicate the changed state of the editor.\n     */\n    markClean: function(clean) {\n      var data = this.data(pluginName);\n\n      if ( data.clean_signalled != clean )\n      { data.clean_signalled = clean;\n\tthis.trigger(\"data-is-clean\", clean);\n      }\n    },\n\n    /**\n     * Set notion of clean for editors that are not associated with a\n     * storage\n     */\n    setIsClean: function() {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName);\n\tdata.cleanGeneration = data.cm.changeGeneration();\n\tdata.clean_signalled = true;\n      });\n    },\n\n    /**\n     * @param {Object} options\n     * @param {String} [options.add] Id of pengine to add\n     * @param {String} [options.has] Match pengine, returning boolean\n     */\n    pengine: function(options) {\n      var data = this.data(pluginName);\n\n      if ( data ) {\n\tif ( options.add ) {\n\t  data.pengines = data.pengines || [];\n\t  if ( data.pengines.indexOf(options.add) < 0 )\n\t    data.pengines.push(options.add);\n\n\t  return this;\n\t} else if ( options.has ) {\n\t  return (data.pengines &&\n\t\t  data.pengines.indexOf(options.has) >= 0);\n\t}\n      }\n    },\n\n    /**\n     * print the current content of the editor after applying the\n     * the CodeMirror mode to it.\n     * @param {String} [src] Prolog source to print. Default is to print\n     * the content of the editor.\n     */\n    print: function(src) {\n      var pre = $.el.pre({class:\"cm-s-prolog\"});\n\n      if ( !src ) src = this.prologEditor('getSource');\n\n      CodeMirror.runMode(src, \"prolog\", pre);\n\n      function printWithIframe(elem) {\n\tvar iframe = $.el.iframe({src:\"about:blank\"});\n\t$(\"body\").append(iframe);\n\t$(\"body\", iframe.contentWindow.document).append(elem);\n\tiframe.contentWindow.print();\n      }\n\n      $.ajax({ url: config.http.locations.swish+\"js/codemirror/theme/prolog.css\",\n\t       dataType: \"text\",\n\t       success: function(data) {\n\t\t printWithIframe($.el.div($.el.style(data),\n\t\t\t\t\t  pre));\n\t       },\n\t       error: function(jqXHDR) {\n\t\t modal.ajaxError(jqXHDR);\n\t       }\n             });\n\n      return this;\n    },\n\n    /**\n     * Manage user preference changes.  Defines preferences are:\n     *\n     *   - \"highlight\" -- one of `semantic` or `syntactic`\n     *\n     * @param {Object} pref describes a preference\n     * @param {String} pref.name name of the preference\n     * @param {Any}    pref.value value of the preference\n     */\n    preference: function(pref) {\n      var data = this.data(pluginName);\n\n      if ( pref.name == \"semantic-highlighting\" ) {\n\tdata.cm.setOption(\"prologHighlightServer\",\n\t\t\t  { enabled: pref.value });\n      }\n\n      if ( pref.name == \"emacs-keybinding\") {\n\tif (pref.value == true) {\n\t  data.cm.setOption(\"keyMap\", \"emacs\");\n\t} else {\n\t  data.cm.setOption(\"keyMap\", \"default\");\n\t}\n      }\n\n      return this;\n    },\n\n    /**\n     * Highlight a (syntax) error in the source.\n     * @param {Object} error\n     * @param {String} error.data contains the error message (HTML\n     * string)\n     * @param {Object} error.location contains the location, providing\n     * `line` and `ch` attributes.\n     */\n    highlightError: function(error) {\n      if ( error.location.file &&\n\t   (error.location.file == true ||\n\t    this.prologEditor('isMyFile', error.location.file)) ) {\n\tvar data = this.data(pluginName);\n\tvar chmark;\n\n\tif ( error.location.ch ) {\n\t  left = data.cm.charCoords({ line: error.location.line-1,\n\t\t\t\t      ch:   error.location.ch-1\n\t\t\t\t    },\n\t\t\t\t    \"local\").left;\n\t  chmark = $.el.div({class:\"source-msg-charmark\"},\n\t\t\t    $.el.span({class:\"glyphicon glyphicon-chevron-up\"}));\n\t  $(chmark).css(\"padding-left\", left+\"px\");\n\t}\n\n\tvar elem = $.el.div({ class:\"source-msg error error-context\",\n\t\t\t      title:\"Error message.  Click to remove\"\n\t\t\t    },\n\t\t\t    chmark,\n\t\t\t    $(error.data)[0],\n\t\t\t    $.el.span({class:\"glyphicon glyphicon-remove-circle\"}));\n\tvar widget = data.cm.addLineWidget(error.location.line-1, elem);\n\n\tif ( error.error_context )\n\t  $(elem).data(\"error_context\", error.error_context);\n\t$(elem).on(\"click\", function(ev) {\n\t  if ( error.error_handler &&\n\t       error.error_handler(ev) == false )\n\t    return;\n\t  widget.clear();\n\t});\n\t$(elem).data(\"cm-widget\", widget);\n      }\n\n      return this;\n    },\n\n    /**\n     * Re-run the highlighting.  Used for query editors if the\n     * associated editor has changed.\n     */\n    refreshHighlight: function() {\n      var data = this.data(pluginName);\n      data.cm.serverAssistedHighlight(true);\n      return this;\n    },\n\n    /**\n     * Refresh the editor.  This is often needed if it is resized.\n     */\n    refresh: function() {\n      var data = this.data(pluginName);\n      if ( data )\n\tdata.cm.refresh();\n      return this;\n    },\n\n    /**\n     * Remove all inline messages from the editor\n     */\n    clearMessages: function() {\n      this.find(\".source-msg\").each(function() {\n\t$(this).data(\"cm-widget\").clear();\n      });\n\n      this.prologEditor('showTracePort', null);\n\n      return this;\n    },\n\n    /**\n     * Execute a command on the editor from the menu.  The trick is to\n     * find the current editor.  For that purpose we make \"blur\" trigger\n     * the 'prepare' command that sets the last editor.  On the\n     * following menu action we execute on the last editor.\n     */\n   execCommand: function(command) {\n     if ( command == 'prepare' ) {\n       lastEditor = this[0];\n     } else if ( lastEditor == this[0] ) {\n       elem = $(lastEditor);\n       var data = elem.data(pluginName);\n       data.cm.execCommand(command);\n       elem.find(\".Codemirror-dialog input\").focus();\n     }\n\n     return this;\n   },\n\n    /**\n     * @param {String} file is the file as known to Prolog,\n     * which is `pengine://<pengine>/src/` for the pengine main file\n     * and `swish://store.pl` for included files.\n     * @return {Boolean} whether or not this is my file.\n     */\n    isMyFile: function(file) {\n      var prefix = \"swish://\";\n\n      if ( file.startsWith(\"pengine://\") ) {\n\tvar data = this.data(pluginName);\n\n\tif ( data.pengines &&\n\t     (id = file.split(\"/\")[2]) &&\n\t     data.pengines.indexOf(id) >= 0 )\n\t  return true;\n      }\n\n      if ( file.startsWith(prefix) ) {\n\tvar store = this.data(\"storage\");\n\n\tif ( store && file.slice(prefix.length) == store.file )\n\t  return true;\n      }\n\n      return false;\n    },\n\n    /**\n     * Highlight source events.  The source pengine gets a prompt\n     * with `prompt.file` set to `pengine://<id>/src`.\n     * @param {Object|null} prompt for a tracer action.  Use `null`\n     * to clear.\n     * @return {jQuery|undefined} `this` if successful.  `undefined`\n     * if this is a valid trace event, but I cannot process it.\n     */\n    showTracePort: function(prompt) {\n      if ( this.length == 0 )\n\treturn this;\n\n      var data  = this.data(pluginName);\n\n      if ( data.traceMark ) {\n\tdata.traceMark.clear();\n\tdata.traceMark = null;\n      }\n\n      if ( prompt && prompt.source && prompt.source.file ) {\n\tvar file  = prompt.source.file;\n\n\tif ( this.prologEditor('isMyFile', file) ) {\n\t  if ( prompt.source.from && prompt.source.to ) {\n\t    var from = data.cm.charOffsetToPos(prompt.source.from);\n\t    var to   = data.cm.charOffsetToPos(prompt.source.to);\n\n\t    if ( !this.is(\":visible\") )\n\t      this.storage('expose', \"trace\");\n\n\t    if ( from && to ) {\n\t      data.traceMark = data.cm.markText(from, to,\n\t\t\t\t\t\t{ className: \"trace \"+prompt.port\n\t\t\t\t\t\t});\n\t      data.traceMark.pengine = prompt.pengine;\n\t      data.cm.scrollIntoView(from, 50);\n\t    }\n\t  }\n\n\t  return this;\n\t}\n      } else {\n\treturn this;\n      }\n    },\n\n    /**\n     * Get the selection for later reuse.\n     * @returns {null|Array} Array of selection descriptions for each\n     * editor in the jQuery object that has a selection.  Each editor\n     * selection contains `editor` and `selections`, where `selections`\n     * is an array of objects with `from`, `to` (line,ch), `string` and\n     * `context`.  The latter two allow for fuzzy restoration of the\n     * selection.\n     */\n    getSelection: function() {\n      var selection = [];\n\n      this.each(function() {\n\tvar ed   = $(this);\n\tvar data = ed.data(pluginName);\n\n\tif ( data.cm.somethingSelected() == true ) {\n\t  var sel    = data.cm.listSelections();\n\t  var esel   = {selections:[]};\n\n\t\t\t\t\t\t/* Hack */\n\t  var cell_name = ed.closest(\".nb-cell\").attr(\"name\");\n\t  if ( cell_name )\n\t    esel.cell = cell_name;\n\n\t  for(var i=0; i<sel.length; i++) {\n\t    var s = sel[i];\n\t    var sr = {};\n\n\t    function cmploc(l1, l2) {\n\t      if ( l1.line < l2.line ) return -1;\n\t      if ( l1.line > l2.line ) return  1;\n\t      if ( l1.ch   < l2.ch   ) return -1;\n\t      if ( l1.ch   > l2.ch   ) return  1;\n\t      return 0;\n\t    }\n\t    function sol(pos) {\n\t      return {line:pos.line, ch:0};\n\t    }\n\t    function eol(pos) {\n\t      return {line:pos.line, ch:data.cm.getLine(pos.line).length};\n\t    }\n\t    function cppos(pos) {\n\t      return {line:pos.line, ch:pos.ch};\n\t    }\n\n\t    switch ( cmploc(s.anchor, s.head) )\n\t    { case -1:\n\t\tsr.from = cppos(s.anchor);\n\t        sr.to   = cppos(s.head);\n\t\tbreak;\n\t      case 1:\n\t\tsr.to   = cppos(s.anchor);\n\t        sr.from = cppos(s.head);\n\t\tbreak;\n\t      case 0:\n\t\tcontinue;\n\t    }\n\n\t    sr.string  = data.cm.getRange(sr.from, sr.to);\n\t    sr.context = data.cm.getRange(sol(sr.from), eol(sr.to));\n\n\t    esel.selections.push(sr);\n\t  }\n\n\t  selection.push(esel);\n\t}\n      });\n\n      return selection.length > 0 ? selection : null;\n    },\n\n    /**\n     * @param {Array} sel is the selection to restore\n     * @fixme deal with notebook selections\n     */\n    restoreSelection: function(selection) {\n      function restoreEditorSelection(ed, sel) {\n\tvar data    = ed.data(pluginName);\n\tvar cm      = data.cm;\n\tvar cmsel   = [];\n\tvar loffset = \"\";\n\n\tfunction findsel(s) {\n\t  if ( cm.getRange(s.from, s.to) == s.string ) {\n\t    return {anchor:s.from, head: s.to};\n\t  } else {\n\t    var start   = cm.firstLine();\n\t    var end     = cm.lastLine();\n\t    var offset  = 0;\n\t    var goffset = 1;\n\n\t    function contextMatch(l0, s) {\n\t      var lines = s.split(\"\\n\");\n\t      for(var i=0; i<lines.length; i++) {\n\t\tif ( cm.getLine(l0+i) != lines[i] )\n\t\t  return false;\n\t      }\n\t      return true;\n\t    }\n\n\t    function stringMatch(l0, s) {\n\t      var lines = s.split(\"\\n\");\n\t      for(var i=0; i<lines.length; i++) {\n\t\tvar cml = cm.getLine(l0);\n\t\tvar   l = lines[i];\n\t\tvar choff;\n\n\t\tif ( i == 0 ) {\n\t\t  if ( i == lines.length-1 ) {\n\t\t    return cml.indexOf(l);\n\t\t  } else {\n\t\t    choff = cml.indexOf(l);\n\n\t\t    if ( !(choff >= 0 && l.length+choff == cml.length) )\n\t\t      return -1;\n\t\t  }\n\t\t} else if ( i == lines.length-1 ) {\n\t\t  if ( cml.indexOf(l) != 0 )\n\t\t    return -1;\n\t\t} else {\n\t\t  if ( cm.getLine(l0+i) != lines[i] )\n\t\t    return -1;\n\t\t}\n\t      }\n\t      return choff;\t\t\t/* ch of selection start */\n\t    }\n\n\t    function poff(p, l, ch) {\n\t      ch = ch||0;\n\t      return {line:p.line+l, ch:p.ch+ch};\n\t    }\n\n\t    while( s.from.line+offset >= start &&\n\t\t   s.to.line+offset <= end ) {\n\t      var ch;\n\n\t      if ( contextMatch(s.from.line+offset, s.context) )\n\t\treturn { anchor:poff(s.from, offset),\n\t\t\t head:  poff(s.to,   offset),\n\t\t\t offset:offset\n\t\t       };\n\t      if ( (ch=stringMatch(s.from.line+offset, s.string)) >= 0 ) {\n\t\tvar soff = ch-s.from.ch;\n\t\tvar toff = s.to.line != s.from.line ? 0 : soff;\n\n\t\treturn { anchor:poff(s.from, offset, soff),\n\t\t\t head:  poff(s.to,   offset, toff),\n\t\t\t offset:offset\n\t\t       };\n\t      }\n\n\t      goffset++;\n\t      offset = Math.floor(goffset/2);\n\t      if ( goffset%2 == 1 )\n\t\toffset = -offset;\n\t    }\n\t  }\n\t}\n\n\tfor(var i=0; i<sel.length; i++) {\n\t  var r = findsel(sel[i]);\n\t  if ( r ) {\n\t    cmsel.push(r);\n\t    if ( r.offset ) {\n\t      if ( loffset != \"\" )\n\t\tloffset += \";\";\n\t      loffset += r.offset\n\t    }\n\t  }\n\t}\n\n\tif ( cmsel.length > 0 )\n\t  cm.setSelections(cmsel, 0);\n\tif ( loffset != \"\" || cmsel.length < sel.length ) {\n\t  var msg;\n\n\t  if ( cmsel.length == sel.length )\n\t    msg = \"Found selections at offset \"+loffset;\n\t  else if ( loffset == \"\" )\n\t    msg = \"Could not restore all selections\";\n\t  else\n\t    msg = \"Only found some selections at offsets \" + loffset;\n\n\t  modal.feedback({ html: msg, owner: ed });\n\t}\n      }\n\n      // Our body\n      if ( selection[0].cell ) {\t/* notebook style */\n\tvar editors = this;\n\n\tfor(var i=0; i<selection.length; i++) {\n\t  var s = selection[i];\n\n\t  function findEditor(name) {\n\t    for(var i=0; i<editors.length; i++) {\n\t      if ( $(editors[i]).closest(\".nb-cell\").attr(\"name\") == name )\n\t\treturn $(editors[i]);\n\t    }\n\t  }\n\n\t  var ed = findEditor(s.cell);\n\t  if ( ed )\n\t    restoreEditorSelection(ed, s.selections);\n\t}\n      } else {\t\t\t\t/* plain editor */\n\trestoreEditorSelection(this, selection);\n      }\n\n      return this;\n    },\n\n    /**\n     * Extract example queries from text.  By   default,  this looks for\n     * structured  comment  blocks  labelled   *examples*  and  extracts\n     * fragments between `^ *?-` and `.`\n     *\n     * @param {String} [src] Source to parse. Default is the editor\n     * content.\n     * @param {Boolean} [inComment=true] if `true`, only process text\n     * that is in an *examples* structured comment block\n     * @returns {null|Array} Examples extracted from the source code.  If\n     * there is _no source_ code, `null` is returned.\n     */\n    getExamples: function(src, inComment) {\n      var source = src ? src : this.prologEditor('getSource');\n      var comments;\n      var exlist = [];\n\n      if ( $.trim(source) == \"\" )\n\treturn null;\n\n      if ( inComment == false )\n\tcomments = [src];\n      else\n\tcomments = source.match(/\\/\\*\\* *<?examples>?[\\s\\S]*?\\*\\//igm);\n\n      if ( comments ) {\n\tfor(var i=0; i<comments.length; i++) {\n\t  var exl = comments[i].match(/^ *\\?-[\\s\\S]*?[^-#$&*+./:<=>?@\\\\^~]\\.\\s/gm);\n\n\t  if ( exl ) {\n\t    for(var j=0; j<exl.length; j++) {\n\t      var ex = exl[j].replace(/^ *\\?-\\s*/, \"\")\n\t\t\t     .replace(/\\s*$/, \"\");\n\t      exlist.push(ex);\n\t    }\n\t  }\n\t}\n      }\n\n      return exlist;\n    },\n\n    /**\n     * Add an example to the examples comment block or create such a\n     * block.\n     */\n    addExample: function(query) {\n      var cm      = this.data(pluginName).cm;\n      var source = this.prologEditor('getSource');\n      var start  = this.prologEditor('search',\n\t\t\t\t     /\\/\\*\\* *<?examples>?/igm, {dir:-1,max:1});\n      var end    = this.prologEditor('search', /\\*\\//, {start:start.line,max:1});\n\n      if ( start.length == 1 )\n      { var end = this.prologEditor('search', /\\*\\//,\n\t\t\t\t    {start:start[0].line, max:1});\n\tvar current = this.prologEditor('getExamples', source);\n\n\tif ( current && current.indexOf(query) != -1 )\n\t{ modal.alert(\"Query is already in examples\");\n\t  return this;\n\t}\n\tif ( end.length != 1 )\n\t{ modal.alert(\"/** <examples> block is not terminated with */\");\n\t  return this;\n\t}\n\n\tquery = query.split(\"\\n\").join(\"\\n   \");\n\tcm.setSelection({line:end[0].line-1, ch:0});\n\tcm.replaceSelection(\"?- \"+query+\"\\n\");\n      } else\t\t\t\t/* add to the end of the file */\n      { var lineno = cm.lastLine();\n\tvar line   = cm.getLine(lineno);\n\n\tcm.replaceRange(\"\\n\\n/** <examples>\\n\" +\n\t\t        \"?- \"+query+\"\\n\" +\n\t\t\t\"*/\\n\", {line:lineno, ch:line.length});\n      }\n\n      return this;\n    },\n\n    /**\n     * @param {RegExp} re is the regular expression to search for\n     * @param {Object} [options]\n     * @param {number} [options.max] is the max number of hits to return\n     * @param {number} [options.dir=1] is -1 to search backwards\n     * @param {number} [options.start] to start at a given line\n     * @param {number} [options.end] to end at a given line\n     * @returns {Array.object} list of objects holding the matching line\n     * content and line number.\n     */\n    search: function(re, options) {\n      var cm      = this.data(pluginName).cm;\n      var dir     = options.dir||1;\n      var start   = options.start == undefined ? cm.firstLine() : options.start;\n      var end     = options.end   == undefined ? cm.lastLine()  : options.end;\n      var matches = [];\n\n      if ( (dir == -1 && end > start) ||\n\t   (dir == 1 && start > end) )\n      { var tmp = start;\n\tstart = end;\n\tend = tmp;\n      }\n\n      if ( (dir > 0 && start > end) ||\n\t   (dir < 0 && start < end) )\n\treturn matches;\n      end += dir;\n\n      for(var i=start; i!=end; i+=dir) {\n\tvar line = cm.getLine(i);\n\tif ( line.search(re) >= 0 ) {\n\t  matches.push({line:i+1, text:line});\n\t  if ( options.max && options.max === matches.length )\n\t    return matches;\n\t}\n      }\n\n      return matches;\n    },\n\n    /**\n     * Go to a given 1-based line number and optionally highlight the\n     * match(es).\n     *\n     * @param {number} line\n     * @param {Object} [options]\n     * @param {RegExp} [options.regex] If provided, highlight the\n     * matches.\n     * @param {Boolean} [options.showAllMatches] if `true`, show all\n     * matches in the viewport.\n     */\n    gotoLine: function(line, options) {\n      var data = this.data(pluginName);\n      var cm   = data.cm;\n      var ch   = 0;\n      var re;\n\n      function clearSearchMarkers(cm) {\n\tif ( cm._searchMarkers !== undefined ) {\n\t  for(var i=0; i<cm._searchMarkers.length; i++)\n\t    cm._searchMarkers[i].clear();\n\t  cm.off(\"cursorActivity\", clearSearchMarkers);\n\t}\n\tcm._searchMarkers = [];\n      }\n\n      clearSearchMarkers(cm);\n      options = options||{};\n      re      = options.regex;\n      line    = line-1;\n\n      if ( re ) {\n\tch = cm.getLine(line).search(re);\n\tif ( ch < 0 )\n\t  ch = 0;\n      }\n\n      cm.setCursor({line:line,ch:ch});\n      var myHeight = cm.getScrollInfo().clientHeight;\n      var coords = cm.charCoords({line: line, ch: 0}, \"local\");\n      cm.scrollTo(null, (coords.top + coords.bottom - myHeight) / 2);\n\n      if ( re ) {\n\tfunction markMatches(line, className) {\n\t  var match;\n\n\t  while( (match=re.exec(cm.getLine(line))) ) {\n\t    cm._searchMarkers.push(\n\t      cm.markText({line:line,ch:match.index},\n\t\t\t  {line:line,ch:match.index+match[0].length},\n\t\t\t  {className:className,\n\t\t\t   clearOnEnter: true,\n\t\t\t   clearWhenEmpty: true,\n\t\t\t   title: \"Search match\"\n\t\t\t  }));\n\t  }\n\t}\n\n\tmarkMatches(line, \"CodeMirror-search-match\");\n\tif ( options.showAllMatches ) {\n\t  var vp = cm.getViewport();\n\n\t  for(var i=vp.from; i<vp.to; i++) {\n\t    if ( i != line ) {\n\t      markMatches(i, \"CodeMirror-search-alt-match\");\n\t    }\n\t  }\n\t}\n\n\tif ( cm._searchMarkers.length > 0 )\n\t  cm.on(\"cursorActivity\", clearSearchMarkers);\n      } else {\t\t\t\t\t/* mark entire line */\n\tcm._searchMarkers.push(\n\t      cm.markText({line:line, ch:0},\n\t\t\t  {line:line, ch:cm.getLine(line).length},\n\t\t\t  {className:\"CodeMirror-search-match\",\n\t\t\t   clearOnEnter: true,\n\t\t\t   clearWhenEmpty: true,\n\t\t\t   title: \"Target line\"\n\t\t\t  }));\n      }\n\n      return this;\n    },\n\n    /**\n     * @return {Integer} change generation for this editor\n     */\n    changeGen: function() {\n      return this.data(pluginName).cm.changeGeneration();\n    },\n\n    isClean: function(gen) {\n      return this.data(pluginName).cm.isClean(gen);\n    },\n\n    /**\n     * Associate the editor with the server side (gitty) source\n     */\n    setupStorage: function(storage) {\n      var data = this.data(pluginName);\n      var elem = this;\n\n      storage.setValue = function(source) {\n\telem.prologEditor('setSource', source, true);\n      };\n      storage.getValue = function() {\n\treturn data.cm.getValue();\n      };\n      storage.changeGen = function() {\n\treturn data.cm.changeGeneration();\n      };\n      storage.isClean = function(generation) {\n\treturn data.cm.isClean(generation);\n      };\n      storage.markClean = function(clean) {\n\telem.prologEditor('markClean', clean);\n      };\n\n      storage.cleanGeneration = data.cm.changeGeneration();\n      storage.cleanData       = data.cm.getValue();\n      storage.cleanCheckpoint = \"load\";\n\n      this.storage(storage);\n      return this;\n    },\n\n    /**\n     * Act on the current token.  Normally invoked after a long click.\n     */\n    contextAction: function() {\n      var elem  = this;\n      var data  = this.data(pluginName);\n      var here  = data.cm.getCursor();\n      var token = data.cm.getTokenAt(here, true);\n      var et    = data.cm.getEnrichedToken(token);\n      var locations = data.cm.getTokenReferences(et);\n\n      if ( locations && locations.length > 0 ) {\n\tvar ul = $.el.ul();\n\tvar select  = $.el.div({class: \"goto-source\"}, $.el.div(\"Go to\"), ul);\n\tvar modalel = $.el.div({class: \"edit-modal\"},\n\t\t\t       $.el.div({class: \"mask\"}),\n\t\t\t       select)\n\n\tfor(var i=0; i<locations.length; i++) {\n\t  var loc = locations[i];\n\t  $(ul).append($.el.li($.el.a({'data-locindex':i}, loc.title)));\n\t}\n\n\tvar coord = data.cm.cursorCoords(true);\n\t$(select).css({top: coord.bottom, left: coord.left});\n\n\t$(\"body\").append(modalel);\n\t$(modalel).on(\"click\", function(ev) {\n\t  var i = $(ev.target).data('locindex');\n\t  $(modalel).remove();\n\n\t  if ( i !== undefined ) {\n\t    var loc = locations[i];\n\n\t    if ( loc.file ) {\n\t      elem.closest(\".swish\").swish('playFile', loc);\n\t    } else {\n\t      var editor;\n\n\t      // If we are the query editor, we must find the related\n\t      // program editor.\n\t      if ( data.role == \"query\" ) {\n\t\teditor = elem.closest(\".prolog-query-editor\")\n\t\t\t     .queryEditor('getProgramEditor');\n\n\t\tif ( !editor[0] )\n\t\t  modal.alert(\"No related program editor\");\n\t      } else\n\t      { editor = elem;\n\t      }\n\n\t      if ( editor && editor[0] )\n\t\teditor.prologEditor('gotoLine', loc.line, loc).focus();\n\t    }\n\n\t  }\n\t});\n\n\t$(modalel).show();\n      }\n\n      return this;\n    },\n\n\t\t /*******************************\n\t\t *\tQUERY MANIPULATION\t*\n\t\t *******************************/\n\n    /**\n     * @param {String} [query] query to get the variables from\n     * @param {Object} [options]\n     * @param {Boolean} [options.anon] if `true`, also include _X\n     * variables.\n     * @param {Boolean} [options.projection] if `true` and there is\n     * a projection, only include the variables from the projection.\n     * @return {List.string} is a list of Prolog variables\n     * without duplicates\n     */\n\n    variables: function(query, options) {\n      var qspan = $.el.span({class:\"query cm-s-prolog\"});\n      var vars = [];\n\n      options = options||{};\n\n      CodeMirror.runMode(query, \"prolog\", qspan);\n\n      function addVars(selector) {\n\tvar incl = true;\n\tvar use_proj = false;\n\n\t$(qspan).find(selector).each(function() {\n\t  var elem = $(this);\n\t  var name = elem.text();\n\n\t  if ( elem.hasClass(\"cm-functor\") ) {\n\t    if ( name == \"projection\" ) { use_proj = true;\n\t    } else if ( use_proj ) {\n\t      incl = false;\n\t    }\n\t  } else {\n\t    if ( incl && vars.indexOf(name) < 0 )\n\t      vars.push(name);\n\t  }\n\t});\n      }\n\n      if ( options.projection ) {\n\taddVars(\"span.cm-var,span.cm-var-2,span.cm-functor\");\n      } else {\n\taddVars(\"span.cm-var\");\n\tif ( options.anon )\n\t  addVars(\"span.cm-var-2\");\n      }\n\n      return vars;\n    },\n\n    /**\n     * Wrap current query in a solution modifier.\n     * TBD: If there is a selection, only wrap the selection\n     *\n     * @param {String} wrapper defines the type of wrapper to use.\n     */\n    wrapSolution: function(wrapper) {\n      var query = prolog.trimFullStop(this.prologEditor('getSource', \"query\"));\n      var that = this;\n      var vars = this.prologEditor('variables', query);\n\n      function wrapQuery(pre, post) {\n\tthat.prologEditor('setSource', pre + \"(\"+query+\")\" + post + \".\")\n\t    .focus();\n\treturn that;\n      }\n\n      function prefixQuery(pre) {\n\tthat.prologEditor('setSource', pre + query + \".\")\n\t    .focus();\n\treturn that;\n      }\n\n      function order(l) {\n\tvar order = [];\n\tfor(var i=0; i<vars.length; i++)\n\t  order.push(\"asc(\"+vars[i]+\")\");\n\treturn order.join(\",\");\n      }\n\n      switch ( wrapper ) {\n        case \"Aggregate (count all)\":\n\t  return wrapQuery(\"aggregate_all(count, \", \", Count)\");\n\tcase \"Projection\":\n\t  return prefixQuery(\"projection([\"+vars.join(\",\")+\"]),\\n\");\n        case \"Order by\":\n\t  return wrapQuery(\"order_by([\"+order(vars)+\"], \", \")\");\n        case \"Distinct\":\n\t  return wrapQuery(\"distinct([\"+vars.join(\",\")+\"], \", \")\");\n        case \"Limit\":\n\t  return wrapQuery(\"limit(10, \", \")\");\n        case \"Time\":\n\t  return wrapQuery(\"time(\", \")\");\n        case \"Debug (trace)\":\n\t  return wrapQuery(\"trace, \", \"\");\n\tdefault:\n\t  alert(\"Unknown wrapper: \\\"\"+wrapper+\"\\\"\");\n      }\n    }\n  }; // methods\n\n  tabbed.tabTypes.program = {\n    dataType: \"pl\",\n    typeName: \"program\",\n    label: \"Program\",\n    contentType: \"text/x-prolog\",\n    order: 100,\n    create: function(dom, options) {\n      $(dom).addClass(\"prolog-editor\")\n            .prologEditor($.extend({save:true}, options))\n\t    .prologEditor('makeCurrent', options);\n    }\n  };\n\n  if ( config.swish.tab_types ) {\n    var editDefaults = {\n      save: true,\n      lineNumbers: true\n    };\n\n    for(var i=0; i<config.swish.tab_types.length; i++) {\n      var tabType = config.swish.tab_types[i];\n      if ( tabType.editor ) {\n\tvar options = $.extend({typeName:tabType.typeName},\n\t\t\t       editDefaults,\n\t\t\t       tabType.editor);\n\n\ttabType.create = function(dom) {\n\t  $(dom).addClass(\"prolog-editor\")\n\t        .prologEditor(options);\n\t};\n\n\ttabbed.tabTypes[tabType.typeName] = tabType;\n      }\n    }\n  }\n\n\n  /**\n   * The prologEditor jQuery plugin converts a `<div>` into an code\n   * editor based on [CodeMirror](http://codemirror.net)\n   *\n   * @class prologEditor\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @example // Create a default Prolog editor\n   * $(\"#editor\").prologEditor();\n   * @example // Extract embedded examples\n   * $(\"#editor\").prologEditor('getExamples');\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.prologEditor = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n\t\t /*******************************\n\t\t *\t     FUNCTIONS\t\t*\n\t\t *******************************/\n\nCodeMirror.prototype.charOffsetToPos = function(offset) {\n  var line = this.firstLine();\n  var last = this.lastLine();\n  var charno = 0;\n\n  for( ; line < last; line++ ) {\n    var text = this.getLine(line);\n\n    if ( charno <= offset && charno+text.length >= offset )\n      return {line:line, ch:offset-charno};\n\n    charno += text.length + 1;\t\t/* one extra for the newline */\n  }\n};\n\n\n\t\t /*******************************\n\t\t *\t      EMACS\t\t*\n\t\t *******************************/\n\nCodeMirror.keyMap.emacs.Enter = \"newlineAndIndent\";\n\n\n\t\t /*******************************\n\t\t *\tSTYLE CONFIGURATION\t*\n\t\t *******************************/\n\n/**\n * Include styles provided through the configuration object.\n *\n * @param {Object} style is an object mapping style names into style\n * properties.  The properties are also in an object, linking style\n * names to values.  For example:\n *\n *    ```\n *    { column: {color: \"#8b008b},\n *      table:  {color: \"#8b008b, \"font-weight\":\"bold\"}\n *    }\n *    ```\n */\n\nfunction loadStyleExtensions(style, prefix)\n{ var parts=[];\n\n  prefix = prefix || \"\";\n\n  parts.push(\"<style>\\n\");\n  for(var sname in style) {\n    if ( style.hasOwnProperty(sname) ) {\n      var attrs = style[sname];\n\n      parts.push(prefix, sname, \"{\");\n\n      for(var a in attrs) {\n\tif ( attrs.hasOwnProperty(a) ) {\n\t  parts.push(a, \":\", attrs[a], \";\");\n\t}\n      }\n\n      parts.push(\"}\\n\");\n    }\n  }\n  parts.push(\"</style>\\n\");\n\n  $(\"body\").append(parts.join(\"\"));\n}\n\nif ( config.swish.cm_style )\n  loadStyleExtensions(config.swish.cm_style,\n\t\t      \".cm-s-prolog span.cm-\");\nif ( config.swish.cm_hover_style )\n  loadStyleExtensions(config.swish.cm_hover_style,\n\t\t      \".CodeMirror-hover-tooltip \");\n\n}); // define\n;\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Render a single Prolog answer.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('answer',[ \"jquery\", \"laconic\" ],\n       function() {\n\n\t\t /*******************************\n\t\t *\tRENDER AN ANSWER\t*\n\t\t *******************************/\n\n(function($) {\n  var pluginName = 'prologAnswer';\n\n  /** @lends $.fn.prologAnswer */\n  var methods = {\n    /**\n     * Represent the binding of one or more variables to exactly the\n     * same (==) Prolog term.\n     *\n     * @typedef {Object} Binding\n     * @property {Array.String} variables represents the names of the\n     * variables.  This array is at least one long.\n     * @property {String} value contains the HTML that describes the\n     * binding of the variable.\n     */\n\n    /**\n     * Represent the binding of a single variable used to represent\n     * sharing, an in particular cyclic terms\n     *\n     * @typedef {Object} Subsitution\n     * @property {String} var name of the variable\n     * @property {String} value contains the HTML that describes the\n     * binding of the variable.\n     */\n\n    /**\n     * Represent an answer as represented by the pengines `json-html`\n     * format.\n     * @typedef {Object} Answer\n     * @property {Array.Binding} variables represents the variable\n     * bindings.\n     * @property {Array.Subsitution} [substitutions] represents substitutions\n     * needed to break cyclic terms.\n     * @property {Array.String} [residuals] represents residual goals as HTML\n     * strings.\n     */\n\n    /**\n     * Render a single answer as returned by pengines `json-html` format\n     * as an HTML string.\n     *\n     * to HTML escaping issues\n     * @param {Answer} answer represents an answer to a Prolog query\n     */\n  _init: function(answer) {\n      return this.each(function() {\n\tvar elem = $(this);\n\n\tif ( answerHasOutput(answer) ) {\n\t  if ( elem.is(\"table\") ) {\n\t    var row = $.el.tr();\n\t    elem.append(row);\n\t    row.innerHTML = renderTabledAnswer(answer, elem);\n\t    evalScripts($(row));\n\t    $(row).find(\".render-multi\").renderMulti();\n\t  } else {\n\t    elem[0].innerHTML = renderAnswer(answer);\n\t    evalScripts(elem);\n\t    elem.find(\".render-multi\").renderMulti();\n\t  }\n\t} else\n\t  elem.append($.el.span({class: \"prolog-true\"}, \"true\"));\n      });\n    }\n  };\n\n  function answerHasOutput(answer) {\n    return answer.variables.length > 0 || answer.residuals;\n  }\n\n  function renderSubstitutions(substs, html) {\n    html.push(', <span class=\"pl-comment\">% where</span><br/>');\n    for (var s = 0; s < substs.length; s++) {\n      html.push('<span class=\"where-binding\">',\n\t\t\"<span class='pl-var'>\", substs[s].var+\"</span> = \",\n\t\tsubsts[s].value, '</span>');\n      if (s < substs.length - 1)\n\thtml.push(\",<br/>\");\n    }\n  }\n\n  function renderAnswer(answer) {\n    var html = [];\n    var bindings = answer.variables;\n    for (var i = 0; i < bindings.length; i++) {\n      var vars = bindings[i].variables;\n      for (var v = 0; v < vars.length - 1; v++) {\n\thtml.push(\"<span class='pl-ovar'>\", vars[v], \"</span> = \",\n\t\t  \"<span class='pl-var'>\", vars[v + 1], \"</span>, \");\n      }\n      html.push(\"<span class='pl-ovar'>\", vars[vars.length - 1],\n\t\t\"</span> = \", bindings[i].value);\n      if (bindings[i].substitutions) {\n\trenderSubstitutions(bindings[i].substitutions, html);\n      }\n      if (i < bindings.length - 1 || answer.residuals)\n\thtml.push(\",<br/>\");\n    }\n\n    var residuals;\n    if ((residuals = answer.residuals)) {\n      for (var i = 0; i < residuals.length; i++) {\n\thtml.push(residuals[i]);\n\tif (i < residuals.length - 1)\n\t  html.push(\",<br/>\");\n      }\n    }\n    return html.join(\"\");\n  }\n\n  /**\n   * Render answer as a new row to the answer table.\n   * @param {Answer} answer represents an answer to a Prolog query\n   * @param {Table} table is the jQuery table to which the answer must\n   * be added.\n   */\n  function renderTabledAnswer(answer, table) {\n    var html = [];\n\n    function findBinding(name) {\n      var bindings = answer.variables;\n      for (var i = 0; i < bindings.length; i++) {\n\tvar vars = bindings[i].variables;\n\tfor (var v = 0; v < vars.length; v++) {\n\t  if ( vars[v] == name )\n\t    return bindings[i];\n\t}\n      }\n      return null;\n    }\n\n    for(var i = 0; i<answer.projection.length; i++) {\n      var vname  = answer.projection[i];\n      var binding = findBinding(vname);\n\n      html.push(\"<td>\");\n      if ( binding ) {\n\thtml.push(binding.value);\n\tif ( binding.substitutions )\n\t  renderSubstitutions(binding.substitutions, html);\n      } else {\n\thtml.push(\"<span class='pl-var'>\", vname, \"</span>\");\n      }\n      html.push(\"</td>\");\n    }\n\n    function ensureResidualColumn() {\n      if ( table.find(\"tr.projection th.residuals\").length == 0 ) {\n\t$(\"<th class='residuals'>Residual goals</th>\").insertBefore(\n\t   table.find(\"tr.projection th.answer-nth\"));\n\t$(\"<td></td>\").insertBefore(\n\t   table.find(\"tr td.answer-nth\"));\n      }\n    }\n\n    var residuals;\n    if ((residuals = answer.residuals)) {\n      ensureResidualColumn();\n      html.push(\"<td>\");\n      for (var i = 0; i < residuals.length; i++) {\n\thtml.push(residuals[i]);\n\tif (i < residuals.length - 1)\n\t  html.push(\",<br/>\");\n      }\n      html.push(\"</td>\");\n    }\n\n    if ( answer.nth )\n      html.push(\"<td class='answer-nth'>\", answer.nth, \"</td>\");\n\n    return html.join(\"\");\n  }\n\n  /**\n   * Execute scripts that are embedded in the jQuery object elem.\n   * While executing a script, the property `$.ajaxScript` points\n   * to the executing script to enable the script to find elements\n   * in the ajax DOM extension in which the script is embedded.\n   * @param {jQuery} elem is the set in which scripts are searched\n   * and executed.\n   */\n  function evalScripts(elem) {\n    elem.find(\"script\").each(function() {\n      var type = this.getAttribute('type')||\"text/javascript\";\n      if ( type == \"text/javascript\" ) {\n\t$.ajaxScript = $(this);\n\teval(this.textContent);\n      }\n    });\n    if ( $.ajaxScript )\n      delete $.ajaxScript;\n  }\n\n\n  /**\n   * Render a single Prolog answer. This class is the entry point for\n   * more flexible answer rendering.\n   *\n   * @class prologAnswer\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} answer Either a method name or the jQuery\n   * plugin initialization object, which is the answer to a Prolog query\n   * in pengines \"json-html\" format\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.prologAnswer = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n\n}(jQuery));\n\n\t\t /*******************************\n\t\t *\t   RENDER TERMS\t\t*\n\t\t *******************************/\n\n(function($) {\n  var pluginName = 'renderMulti';\n  var timeout = 0;\n  var hovering = false;\n\n  /** @lends $.fn.renderMulti */\n  var methods = {\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {current: 0};\t\t/* private data */\n\tvar display = [];\n\tvar selector = $.el.div({class: \"render-multi-active\"});\n\n\tvar i = 0;\n\telem.children().each(function() {\n\t  var how = $(this).css(\"display\");\n\n\t  display.push(how);\n\t  if ( i++ == 0 ) {\n\t    elem.css(\"display\", how);\n\t    $(this).attr('draggable', false);\n\t  } else {\n\t    $(this).hide();\n\t  }\n\t});\n\tdata.display = display;\n\telem.append(selector);\n\n\t$(selector).hover(function(ev) { elem.renderMulti('showSelect', ev); },\n\t\t\t  function(ev) { elem.renderMulti('hideSelect', ev); });\n\telem.attr('draggable', true)\n            .bind('dragstart', dragStart);\n\n\telem.data(pluginName, data);\t/* store with element */\n      });\n    },\n\n    /**\n     * @returns {String} holding HTML with a radio button to select a\n     * rendering\n     */\n    selectMenu: function() {\n      var data = this.data(pluginName);\n      var select = [\"<label>View as</label><br>\"];\n      var children = this.children();\n\n      function downloadButton(i, name) {\n\tvar title, glyph;\n\n\tif ( name == \"Prolog term\" ) {\n\t  title = \"Copy\";\n\t  glyph = \"copy\";\n\t} else {\n\t  title = \"Download\";\n\t  glyph = \"download\";\n\t}\n\n\tbtn = '<a href=\"#\" class=\"btn btn-style btn-sm\" '+\n\t      'data-nr=\"'+i+'\" data-action=\"'+glyph+'\" title=\"'+title+'\">' +\n\t      '<span class=\"glyphicon glyphicon-'+glyph+'\"></span></a>';\n\n\treturn btn;\n      }\n\n      var i = 0;\n      for(var i=0; i<data.display.length; i++) {\n\tvar r = $(children[i]);\n\tvar name = r.attr(\"data-render\");\n\n\tif ( !name ) {\n\t  if ( i == 0 )\n\t    name = \"Default rendered\";\n\t  else\n\t    name = \"Alt rendered [\"+(i+1)+\"]\";\n\t}\n\n\tselect.push(\"<div class='render-item'>\",\n\t\t    downloadButton(i, name),\n\t\t    \"<input type='radio' name='render' value='\", i, \"'\");\n\tif ( i == data.current ) select.push(\" checked\");\n\tselect.push(\"> \", name, \"</div>\");\n      }\n\n      select.push(\"</form\");\n      return select.join(\"\");\n    },\n\n    showSelect: function(ev) {\n      var elem = this;\n      var menu = selectMenu();\n      var pos  = this.offset();\n      var target;\n\n      hovering = true;\n      if ( timeout ) {\n\tclearTimeout(timeout);\n\ttimeout = 0;\n      }\n\n      if ( (target=menu.data(\"target\")) )\n\ttarget.removeClass(\"render-selecting\");\n      menu.data(\"target\", elem);\n\n      menu.html(this.renderMulti('selectMenu'));\n      menu.css({ top:      pos.top + 5 + \"px\",\n                 left:     pos.left + 5 + \"px\"\n               }).show(400);\n\n      this.addClass(\"render-selecting\");\n    },\n\n    hideSelect: function(ev) {\n      resetHover();\n    },\n\n    /**\n     * Select the i-th (0-based) rendering alternative\n     * @param {Integer} i denotes the alternative\n     */\n    select: function(i) {\n      var data  = this.data(pluginName);\n\n      if ( data.current != i ) {\n\tvar child = this.children();\n\tvar how   = data.display[i];\n\n\t$(child[data.current]).hide(400);\n\t$(child[i]).show(400, function() { $(this).css(\"display\", how); });\n\tthis.css(\"display\", how);\n\tif ( $(child[i]).is(\"span.render-as-prolog\") ) {\n\t  this.attr(\"draggable\", false);\n\t} else {\n\t  this.attr(\"draggable\", true);\n\t}\n\n\tdata.current = i;\n      }\n\n      closeSelectMenu();\n    },\n\n    copy: function(i) {\n      var child = this.children();\n      var data  = this.data(pluginName);\n      var old   = data.current;\n\n      function selectElementText(el) {\n\tvar range = document.createRange();\n\trange.selectNodeContents(el);\n\tvar selection = window.getSelection();\n\tselection.removeAllRanges();\n\tselection.addRange(range);\n      }\n\n      this.renderMulti('select', i);\n      selectElementText(child[i]);\n      try {\n\tdocument.execCommand(\"copy\");\n      } catch(e) {\n\talert(\"Sorry, cannot copy text with this browser\");\n      }\n      this.renderMulti('select', old);\n\n      return this;\n    },\n\n    /**\n     * Download a rendered object.  The renderer can interact with this\n     * code by setting a class `export-dom` and an event-handler for the\n     * event `export-dom`. This handler is passed a plain object, for\n     * which is must set the properties `element`, `extensions` and\n     * `contentType`\n     */\n    download: function(i) {\n      var child = this.children();\n      var node  = $(child[i]);\n      var ext   = \"html\";\n      var data;\n\n      function aSupportsDownload() {\n\treturn $(\"<a>\")[0].download != undefined;\n      }\n\n      if ( node.hasClass(\"export-dom\") ) {\n\tvar r = {};\n\tnode = node.trigger(\"export-dom\", r);\n\tif ( r.element ) {\n\t  data = r.element.outerHTML;\n\t  ext  = r.extension||\"html\";\n\t  type = r.contentType||\"text/html\";\n\t} else {\n\t  alert(\"Failed to export rendered result\");\n\t}\n      } else if ( node.find(\"svg\").length == 1 ) {\n\tvar svg = node.find(\"svg\");\n\tif ( !svg.attr(\"xmlns\") )\n\t  svg.attr(\"xmlns\", \"http://www.w3.org/2000/svg\");\n\tdata = svg[0].outerHTML\n\text  = \"svg\";\n\ttype = \"image/svg+xml\";\n      } else {\n\tdata = node.html();\n\ttype = \"text/html\";\n      }\n\n      if ( !aSupportsDownload() )\n\ttype = \"application/octet-stream\";\n\n      console.log(type);\n\n      var blob = new Blob([data], {type:type});\n      var href = URL.createObjectURL(blob);\n      var filename = \"swish-rendered.\"+ext;\n      var a, input, btn;\n\n      var span = $.el.div({class:\"download\"},\n\t\t\t  btn = $.el.button({ type:\"button\", class:\"close\" }),\n\t\t\t  a = $.el.a({ href:href,\n\t\t\t               target:\"_blank\",\n\t\t\t\t       download:filename\n\t\t\t\t     },\n\t\t\t\t     \"Right click me to download as \"),\n\t\t\t  $.el.br(),\n\t\t\t  input = $.el.input({value:filename}));\n      this.append(span);\n      $(btn)\n\t.html(\"&times;\")\n\t.on(\"click\", function(ev) {\n\t  $(span).remove();\n\t});\n      $(input).on(\"change keyup paste\", function(ev) {\n\t$(a).attr(\"download\", $(input).val());\n\tev.preventDefault();\n\treturn false;\n      });\n\n      return this;\n    },\n\n    /**\n     * @return {String} native Prolog text for a multi-rendered block\n     */\n    prologText: function() {\n      return this.find(\"span.render-as-prolog\").text();\n    }\n  }; // methods\n\n\n  function selectMenu() {\n    var menu = $(\"#render-select\");\n\n    if ( !menu[0] ) {\n      menu = $($.el.form({ id:\"render-select\",\n                           style:\"display:none\"\n\t\t         }));\n\n      menu.on(\"click\", \"a\", function(ev) {\n\tvar a = $(ev.target).closest(\"a\");\n\tvar i = a.data(\"nr\");\n\n\tmenu.data(\"target\").renderMulti(a.data(\"action\"), i);\n\treturn false;\n      });\n      menu.on(\"click\", function() {\n\tvar r = $(\"input[name=render]:checked\", $(this)).val();\n\tmenu.data(\"target\").renderMulti('select', parseInt(r));\n      });\n      menu.hover(function() { hovering = true; startMenuTimeout(); },\n\t\t function() { resetHover(); });\n\n      $(\"body\").append(menu);\n    }\n\n    return menu;\n  }\n\n  function closeSelectMenu() {\n    if ( !hovering ) {\n      var menu = selectMenu();\n      var target = menu.data(\"target\");\n\n      if ( target ) {\n\ttarget.removeClass(\"render-selecting\");\n\tmenu.data(\"target\", null);\n      }\n      menu.hide(400);\n    }\n  }\n\n  function startMenuTimeout() {\n    timeout = setTimeout(function() {\n      closeSelectMenu();\n    }, 400);\n  }\n\n  function resetHover() {\n    hovering = false;\n    startMenuTimeout();\n  }\n\n  function dragStart(ev) {\n    var dt = ev.originalEvent.dataTransfer;\n    dt.setData(\"Text\", $(ev.target).renderMulti('prologText'));\n    return true;\n  }\n\n  /**\n   * <Class description>\n   *\n   * @class renderMulti\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.renderMulti = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n\n\n\n\n});\n\n","/**\n*\n* jquery.sparkline.js\n*\n* v2.1.2\n* (c) Splunk, Inc\n* Contact: Gareth Watts (gareth@splunk.com)\n* http://omnipotent.net/jquery.sparkline/\n*\n* Generates inline sparkline charts from data supplied either to the method\n* or inline in HTML\n*\n* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag\n* (Firefox 2.0+, Safari, Opera, etc)\n*\n* License: New BSD License\n*\n* Copyright (c) 2012, Splunk Inc.\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without modification,\n* are permitted provided that the following conditions are met:\n*\n*     * Redistributions of source code must retain the above copyright notice,\n*       this list of conditions and the following disclaimer.\n*     * Redistributions in binary form must reproduce the above copyright notice,\n*       this list of conditions and the following disclaimer in the documentation\n*       and/or other materials provided with the distribution.\n*     * Neither the name of Splunk Inc nor the names of its contributors may\n*       be used to endorse or promote products derived from this software without\n*       specific prior written permission.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\n* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*\n*\n* Usage:\n*  $(selector).sparkline(values, options)\n*\n* If values is undefined or set to 'html' then the data values are read from the specified tag:\n*   <p>Sparkline: <span class=\"sparkline\">1,4,6,6,8,5,3,5</span></p>\n*   $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*    <p>Sparkline: <span id=\"sparkline1\">This text replaced if the browser is compatible</span></p>\n*    $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n*    $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*    <p>Sparkline: <span class=\"sparkline\"><!--1,4,6,6,8,5,3,5 --></span></p>\n*    <p>Sparkline: <span class=\"sparkline\" values=\"1,4,6,6,8,5,3,5\"></span></p>\n*    $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*   <p>Sparkline: <span class=\"sparkline\">1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5</span></p>\n*    $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as teh second argument to the sparkline function:\n*   $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself.  This feature is disabled by default though\n* as there's a slight performance overhead:\n*   $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*   <p>Sparkline: <span class=\"sparkline\" sparkType=\"bar\" sparkBarColor=\"red\">loading</span></p>\n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionPrefix)\n*\n* Supported options:\n*   lineColor - Color of the line used for the chart\n*   fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n*   width - Width of the chart - Defaults to 3 times the number of values in pixels\n*   height - Height of the chart - Defaults to the height of the containing element\n*   chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n*   chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n*   chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n*   chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n*   chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n*   composite - If true then don't erase any existing chart attached to the tag, but draw\n*           another chart over the top - Note that width and height are ignored if an\n*           existing chart is detected.\n*   tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n*   enableTagOptions - Whether to check tags for sparkline options\n*   tagOptionPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n*   disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n*           hidden dom element, avoding a browser reflow\n*   disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n*       making the plugin perform much like it did in 1.x\n*   disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n*   disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n*       defaults to false (highlights enabled)\n*   highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n*   tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n*   tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n*   tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n*   tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n*   tooltipFormatter  - Optional callback that allows you to override the HTML displayed in the tooltip\n*       callback is given arguments of (sparkline, options, fields)\n*   tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n*   tooltipFormat - A format string or SPFormat object  (or an array thereof for multiple entries)\n*       to control the format of the tooltip\n*   tooltipPrefix - A string to prepend to each field displayed in a tooltip\n*   tooltipSuffix - A string to append to each field displayed in a tooltip\n*   tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n*   tooltipValueLookups - An object or range map to map field values to tooltip strings\n*       (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n*   numberFormatter - Optional callback for formatting numbers in tooltips\n*   numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n*   numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n*   numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n*    line - Line chart.  Options:\n*       spotColor - Set to '' to not end each line in a circular spot\n*       minSpotColor - If set, color of spot at minimum value\n*       maxSpotColor - If set, color of spot at maximum value\n*       spotRadius - Radius in pixels\n*       lineWidth - Width of line in pixels\n*       normalRangeMin\n*       normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n*                      or expected range of values\n*       normalRangeColor - Color to use for the above bar\n*       drawNormalOnTop - Draw the normal range above the chart fill color if true\n*       defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n*       highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n*       highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n*       valueSpots - Specify which points to draw spots on, and in which color.  Accepts a range map\n*\n*   bar - Bar chart.  Options:\n*       barColor - Color of bars for postive values\n*       negBarColor - Color of bars for negative values\n*       zeroColor - Color of bars with zero values\n*       nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n*       barWidth - Width of bars in pixels\n*       colorMap - Optional mappnig of values to colors to override the *BarColor values above\n*                  can be an Array of values to control the color of individual bars or a range map\n*                  to specify colors for individual ranges of values\n*       barSpacing - Gap between bars in pixels\n*       zeroAxis - Centers the y-axis around zero if true\n*\n*   tristate - Charts values of win (>0), lose (<0) or draw (=0)\n*       posBarColor - Color of win values\n*       negBarColor - Color of lose values\n*       zeroBarColor - Color of draw values\n*       barWidth - Width of bars in pixels\n*       barSpacing - Gap between bars in pixels\n*       colorMap - Optional mappnig of values to colors to override the *BarColor values above\n*                  can be an Array of values to control the color of individual bars or a range map\n*                  to specify colors for individual ranges of values\n*\n*   discrete - Options:\n*       lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n*       thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n*       thresholdColor\n*\n*   bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n*       options:\n*       targetColor - The color of the vertical target marker\n*       targetWidth - The width of the target marker in pixels\n*       performanceColor - The color of the performance measure horizontal bar\n*       rangeColors - Colors to use for each qualitative range background color\n*\n*   pie - Pie chart. Options:\n*       sliceColors - An array of colors to use for pie slices\n*       offset - Angle in degrees to offset the first slice - Try -90 or +90\n*       borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n*       borderColor - Color to use for the pie chart border - Defaults to #000\n*\n*   box - Box plot. Options:\n*       raw - Set to true to supply pre-computed plot points as values\n*             values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n*             When set to false you can supply any number of values and the box plot will\n*             be computed for you.  Default is false.\n*       showOutliers - Set to true (default) to display outliers as circles\n*       outlierIQR - Interquartile range used to determine outliers.  Default 1.5\n*       boxLineColor - Outline color of the box\n*       boxFillColor - Fill color for the box\n*       whiskerColor - Line color used for whiskers\n*       outlierLineColor - Outline color of outlier circles\n*       outlierFillColor - Fill color of the outlier circles\n*       spotRadius - Radius of outlier circles\n*       medianColor - Line color of the median line\n*       target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n*   Examples:\n*   $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n*   $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n*   $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n*   $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n*   $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n*   $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n    if(typeof define === 'function' && define.amd) {\n        define('sparkline',['jquery'], factory);\n    } else if (jQuery && !jQuery.fn.sparkline) {\n        factory(jQuery);\n    }\n}\n(function($) {\n    'use strict';\n\n    var UNSET_OPTION = {},\n        getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n        remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n        MouseHandler, Tooltip, barHighlightMixin,\n        line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n        VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n    /**\n     * Default configuration settings\n     */\n    getDefaults = function () {\n        return {\n            // Settings common to most/all chart types\n            common: {\n                type: 'line',\n                lineColor: '#00f',\n                fillColor: '#cdf',\n                defaultPixelsPerValue: 3,\n                width: 'auto',\n                height: 'auto',\n                composite: false,\n                tagValuesAttribute: 'values',\n                tagOptionsPrefix: 'spark',\n                enableTagOptions: false,\n                enableHighlight: true,\n                highlightLighten: 1.4,\n                tooltipSkipNull: true,\n                tooltipPrefix: '',\n                tooltipSuffix: '',\n                disableHiddenCheck: false,\n                numberFormatter: false,\n                numberDigitGroupCount: 3,\n                numberDigitGroupSep: ',',\n                numberDecimalMark: '.',\n                disableTooltips: false,\n                disableInteraction: false\n            },\n            // Defaults for line charts\n            line: {\n                spotColor: '#f80',\n                highlightSpotColor: '#5f5',\n                highlightLineColor: '#f22',\n                spotRadius: 1.5,\n                minSpotColor: '#f80',\n                maxSpotColor: '#f80',\n                lineWidth: 1,\n                normalRangeMin: undefined,\n                normalRangeMax: undefined,\n                normalRangeColor: '#ccc',\n                drawNormalOnTop: false,\n                chartRangeMin: undefined,\n                chartRangeMax: undefined,\n                chartRangeMinX: undefined,\n                chartRangeMaxX: undefined,\n                tooltipFormat: new SPFormat('<span style=\"color: {{color}}\">&#9679;</span> {{prefix}}{{y}}{{suffix}}')\n            },\n            // Defaults for bar charts\n            bar: {\n                barColor: '#3366cc',\n                negBarColor: '#f44',\n                stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n                    '#dd4477', '#0099c6', '#990099'],\n                zeroColor: undefined,\n                nullColor: undefined,\n                zeroAxis: true,\n                barWidth: 4,\n                barSpacing: 1,\n                chartRangeMax: undefined,\n                chartRangeMin: undefined,\n                chartRangeClip: false,\n                colorMap: undefined,\n                tooltipFormat: new SPFormat('<span style=\"color: {{color}}\">&#9679;</span> {{prefix}}{{value}}{{suffix}}')\n            },\n            // Defaults for tristate charts\n            tristate: {\n                barWidth: 4,\n                barSpacing: 1,\n                posBarColor: '#6f6',\n                negBarColor: '#f44',\n                zeroBarColor: '#999',\n                colorMap: {},\n                tooltipFormat: new SPFormat('<span style=\"color: {{color}}\">&#9679;</span> {{value:map}}'),\n                tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n            },\n            // Defaults for discrete charts\n            discrete: {\n                lineHeight: 'auto',\n                thresholdColor: undefined,\n                thresholdValue: 0,\n                chartRangeMax: undefined,\n                chartRangeMin: undefined,\n                chartRangeClip: false,\n                tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n            },\n            // Defaults for bullet charts\n            bullet: {\n                targetColor: '#f33',\n                targetWidth: 3, // width of the target bar in pixels\n                performanceColor: '#33f',\n                rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n                base: undefined, // set this to a number to change the base start number\n                tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n                tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n            },\n            // Defaults for pie charts\n            pie: {\n                offset: 0,\n                sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n                    '#dd4477', '#0099c6', '#990099'],\n                borderWidth: 0,\n                borderColor: '#000',\n                tooltipFormat: new SPFormat('<span style=\"color: {{color}}\">&#9679;</span> {{value}} ({{percent.1}}%)')\n            },\n            // Defaults for box plots\n            box: {\n                raw: false,\n                boxLineColor: '#000',\n                boxFillColor: '#cdf',\n                whiskerColor: '#000',\n                outlierLineColor: '#333',\n                outlierFillColor: '#fff',\n                medianColor: '#f00',\n                showOutliers: true,\n                outlierIQR: 1.5,\n                spotRadius: 1.5,\n                target: undefined,\n                targetColor: '#4a2',\n                chartRangeMax: undefined,\n                chartRangeMin: undefined,\n                tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n                tooltipFormatFieldlistKey: 'field',\n                tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n                    uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n                    lw: 'Left Whisker', rw: 'Right Whisker'} }\n            }\n        };\n    };\n\n    // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n    defaultStyles = '.jqstooltip { ' +\n            'position: absolute;' +\n            'left: 0px;' +\n            'top: 0px;' +\n            'visibility: hidden;' +\n            'background: rgb(0, 0, 0) transparent;' +\n            'background-color: rgba(0,0,0,0.6);' +\n            'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n            '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n            'color: white;' +\n            'font: 10px arial, san serif;' +\n            'text-align: left;' +\n            'white-space: nowrap;' +\n            'padding: 5px;' +\n            'border: 1px solid white;' +\n            'z-index: 10000;' +\n            '}' +\n            '.jqsfield { ' +\n            'color: white;' +\n            'font: 10px arial, san serif;' +\n            'text-align: left;' +\n            '}';\n\n    /**\n     * Utilities\n     */\n\n    createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n        var Class, args;\n        Class = function () {\n            this.init.apply(this, arguments);\n        };\n        if (arguments.length > 1) {\n            if (arguments[0]) {\n                Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n                Class._super = arguments[0].prototype;\n            } else {\n                Class.prototype = arguments[arguments.length - 1];\n            }\n            if (arguments.length > 2) {\n                args = Array.prototype.slice.call(arguments, 1, -1);\n                args.unshift(Class.prototype);\n                $.extend.apply($, args);\n            }\n        } else {\n            Class.prototype = arguments[0];\n        }\n        Class.prototype.cls = Class;\n        return Class;\n    };\n\n    /**\n     * Wraps a format string for tooltips\n     * {{x}}\n     * {{x.2}\n     * {{x:months}}\n     */\n    $.SPFormatClass = SPFormat = createClass({\n        fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n        precre: /(\\w+)\\.(\\d+)/,\n\n        init: function (format, fclass) {\n            this.format = format;\n            this.fclass = fclass;\n        },\n\n        render: function (fieldset, lookups, options) {\n            var self = this,\n                fields = fieldset,\n                match, token, lookupkey, fieldvalue, prec;\n            return this.format.replace(this.fre, function () {\n                var lookup;\n                token = arguments[1];\n                lookupkey = arguments[3];\n                match = self.precre.exec(token);\n                if (match) {\n                    prec = match[2];\n                    token = match[1];\n                } else {\n                    prec = false;\n                }\n                fieldvalue = fields[token];\n                if (fieldvalue === undefined) {\n                    return '';\n                }\n                if (lookupkey && lookups && lookups[lookupkey]) {\n                    lookup = lookups[lookupkey];\n                    if (lookup.get) { // RangeMap\n                        return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n                    } else {\n                        return lookups[lookupkey][fieldvalue] || fieldvalue;\n                    }\n                }\n                if (isNumber(fieldvalue)) {\n                    if (options.get('numberFormatter')) {\n                        fieldvalue = options.get('numberFormatter')(fieldvalue);\n                    } else {\n                        fieldvalue = formatNumber(fieldvalue, prec,\n                            options.get('numberDigitGroupCount'),\n                            options.get('numberDigitGroupSep'),\n                            options.get('numberDecimalMark'));\n                    }\n                }\n                return fieldvalue;\n            });\n        }\n    });\n\n    // convience method to avoid needing the new operator\n    $.spformat = function(format, fclass) {\n        return new SPFormat(format, fclass);\n    };\n\n    clipval = function (val, min, max) {\n        if (val < min) {\n            return min;\n        }\n        if (val > max) {\n            return max;\n        }\n        return val;\n    };\n\n    quartile = function (values, q) {\n        var vl;\n        if (q === 2) {\n            vl = Math.floor(values.length / 2);\n            return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n        } else {\n            if (values.length % 2 ) { // odd\n                vl = (values.length * q + q) / 4;\n                return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n            } else { //even\n                vl = (values.length * q + 2) / 4;\n                return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 :  values[vl-1];\n\n            }\n        }\n    };\n\n    normalizeValue = function (val) {\n        var nf;\n        switch (val) {\n            case 'undefined':\n                val = undefined;\n                break;\n            case 'null':\n                val = null;\n                break;\n            case 'true':\n                val = true;\n                break;\n            case 'false':\n                val = false;\n                break;\n            default:\n                nf = parseFloat(val);\n                if (val == nf) {\n                    val = nf;\n                }\n        }\n        return val;\n    };\n\n    normalizeValues = function (vals) {\n        var i, result = [];\n        for (i = vals.length; i--;) {\n            result[i] = normalizeValue(vals[i]);\n        }\n        return result;\n    };\n\n    remove = function (vals, filter) {\n        var i, vl, result = [];\n        for (i = 0, vl = vals.length; i < vl; i++) {\n            if (vals[i] !== filter) {\n                result.push(vals[i]);\n            }\n        }\n        return result;\n    };\n\n    isNumber = function (num) {\n        return !isNaN(parseFloat(num)) && isFinite(num);\n    };\n\n    formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n        var p, i;\n        num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n        p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n        if (p < num.length) {\n            num[p] = decsep;\n        }\n        for (i = p - groupsize; i > 0; i -= groupsize) {\n            num.splice(i, 0, groupsep);\n        }\n        return num.join('');\n    };\n\n    // determine if all values of an array match a value\n    // returns true if the array is empty\n    all = function (val, arr, ignoreNull) {\n        var i;\n        for (i = arr.length; i--; ) {\n            if (ignoreNull && arr[i] === null) continue;\n            if (arr[i] !== val) {\n                return false;\n            }\n        }\n        return true;\n    };\n\n    // sums the numeric values in an array, ignoring other values\n    sum = function (vals) {\n        var total = 0, i;\n        for (i = vals.length; i--;) {\n            total += typeof vals[i] === 'number' ? vals[i] : 0;\n        }\n        return total;\n    };\n\n    ensureArray = function (val) {\n        return $.isArray(val) ? val : [val];\n    };\n\n    // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n    addCSS = function(css) {\n        var tag;\n        //if ('\\v' == 'v') /* ie only */ {\n        if (document.createStyleSheet) {\n            document.createStyleSheet().cssText = css;\n        } else {\n            tag = document.createElement('style');\n            tag.type = 'text/css';\n            document.getElementsByTagName('head')[0].appendChild(tag);\n            tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n        }\n    };\n\n    // Provide a cross-browser interface to a few simple drawing primitives\n    $.fn.simpledraw = function (width, height, useExisting, interact) {\n        var target, mhandler;\n        if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n            return target;\n        }\n\n        if ($.fn.sparkline.canvas === false) {\n            // We've already determined that neither Canvas nor VML are available\n            return false;\n\n        } else if ($.fn.sparkline.canvas === undefined) {\n            // No function defined yet -- need to see if we support Canvas or VML\n            var el = document.createElement('canvas');\n            if (!!(el.getContext && el.getContext('2d'))) {\n                // Canvas is available\n                $.fn.sparkline.canvas = function(width, height, target, interact) {\n                    return new VCanvas_canvas(width, height, target, interact);\n                };\n            } else if (document.namespaces && !document.namespaces.v) {\n                // VML is available\n                document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n                $.fn.sparkline.canvas = function(width, height, target, interact) {\n                    return new VCanvas_vml(width, height, target);\n                };\n            } else {\n                // Neither Canvas nor VML are available\n                $.fn.sparkline.canvas = false;\n                return false;\n            }\n        }\n\n        if (width === undefined) {\n            width = $(this).innerWidth();\n        }\n        if (height === undefined) {\n            height = $(this).innerHeight();\n        }\n\n        target = $.fn.sparkline.canvas(width, height, this, interact);\n\n        mhandler = $(this).data('_jqs_mhandler');\n        if (mhandler) {\n            mhandler.registerCanvas(target);\n        }\n        return target;\n    };\n\n    $.fn.cleardraw = function () {\n        var target = this.data('_jqs_vcanvas');\n        if (target) {\n            target.reset();\n        }\n    };\n\n    $.RangeMapClass = RangeMap = createClass({\n        init: function (map) {\n            var key, range, rangelist = [];\n            for (key in map) {\n                if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n                    range = key.split(':');\n                    range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n                    range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n                    range[2] = map[key];\n                    rangelist.push(range);\n                }\n            }\n            this.map = map;\n            this.rangelist = rangelist || false;\n        },\n\n        get: function (value) {\n            var rangelist = this.rangelist,\n                i, range, result;\n            if ((result = this.map[value]) !== undefined) {\n                return result;\n            }\n            if (rangelist) {\n                for (i = rangelist.length; i--;) {\n                    range = rangelist[i];\n                    if (range[0] <= value && range[1] >= value) {\n                        return range[2];\n                    }\n                }\n            }\n            return undefined;\n        }\n    });\n\n    // Convenience function\n    $.range_map = function(map) {\n        return new RangeMap(map);\n    };\n\n    MouseHandler = createClass({\n        init: function (el, options) {\n            var $el = $(el);\n            this.$el = $el;\n            this.options = options;\n            this.currentPageX = 0;\n            this.currentPageY = 0;\n            this.el = el;\n            this.splist = [];\n            this.tooltip = null;\n            this.over = false;\n            this.displayTooltips = !options.get('disableTooltips');\n            this.highlightEnabled = !options.get('disableHighlight');\n        },\n\n        registerSparkline: function (sp) {\n            this.splist.push(sp);\n            if (this.over) {\n                this.updateDisplay();\n            }\n        },\n\n        registerCanvas: function (canvas) {\n            var $canvas = $(canvas.canvas);\n            this.canvas = canvas;\n            this.$canvas = $canvas;\n            $canvas.mouseenter($.proxy(this.mouseenter, this));\n            $canvas.mouseleave($.proxy(this.mouseleave, this));\n            $canvas.click($.proxy(this.mouseclick, this));\n        },\n\n        reset: function (removeTooltip) {\n            this.splist = [];\n            if (this.tooltip && removeTooltip) {\n                this.tooltip.remove();\n                this.tooltip = undefined;\n            }\n        },\n\n        mouseclick: function (e) {\n            var clickEvent = $.Event('sparklineClick');\n            clickEvent.originalEvent = e;\n            clickEvent.sparklines = this.splist;\n            this.$el.trigger(clickEvent);\n        },\n\n        mouseenter: function (e) {\n            $(document.body).unbind('mousemove.jqs');\n            $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n            this.over = true;\n            this.currentPageX = e.pageX;\n            this.currentPageY = e.pageY;\n            this.currentEl = e.target;\n            if (!this.tooltip && this.displayTooltips) {\n                this.tooltip = new Tooltip(this.options);\n                this.tooltip.updatePosition(e.pageX, e.pageY);\n            }\n            this.updateDisplay();\n        },\n\n        mouseleave: function () {\n            $(document.body).unbind('mousemove.jqs');\n            var splist = this.splist,\n                 spcount = splist.length,\n                 needsRefresh = false,\n                 sp, i;\n            this.over = false;\n            this.currentEl = null;\n\n            if (this.tooltip) {\n                this.tooltip.remove();\n                this.tooltip = null;\n            }\n\n            for (i = 0; i < spcount; i++) {\n                sp = splist[i];\n                if (sp.clearRegionHighlight()) {\n                    needsRefresh = true;\n                }\n            }\n\n            if (needsRefresh) {\n                this.canvas.render();\n            }\n        },\n\n        mousemove: function (e) {\n            this.currentPageX = e.pageX;\n            this.currentPageY = e.pageY;\n            this.currentEl = e.target;\n            if (this.tooltip) {\n                this.tooltip.updatePosition(e.pageX, e.pageY);\n            }\n            this.updateDisplay();\n        },\n\n        updateDisplay: function () {\n            var splist = this.splist,\n                 spcount = splist.length,\n                 needsRefresh = false,\n                 offset = this.$canvas.offset(),\n                 localX = this.currentPageX - offset.left,\n                 localY = this.currentPageY - offset.top,\n                 tooltiphtml, sp, i, result, changeEvent;\n            if (!this.over) {\n                return;\n            }\n            for (i = 0; i < spcount; i++) {\n                sp = splist[i];\n                result = sp.setRegionHighlight(this.currentEl, localX, localY);\n                if (result) {\n                    needsRefresh = true;\n                }\n            }\n            if (needsRefresh) {\n                changeEvent = $.Event('sparklineRegionChange');\n                changeEvent.sparklines = this.splist;\n                this.$el.trigger(changeEvent);\n                if (this.tooltip) {\n                    tooltiphtml = '';\n                    for (i = 0; i < spcount; i++) {\n                        sp = splist[i];\n                        tooltiphtml += sp.getCurrentRegionTooltip();\n                    }\n                    this.tooltip.setContent(tooltiphtml);\n                }\n                if (!this.disableHighlight) {\n                    this.canvas.render();\n                }\n            }\n            if (result === null) {\n                this.mouseleave();\n            }\n        }\n    });\n\n\n    Tooltip = createClass({\n        sizeStyle: 'position: static !important;' +\n            'display: block !important;' +\n            'visibility: hidden !important;' +\n            'float: left !important;',\n\n        init: function (options) {\n            var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n                sizetipStyle = this.sizeStyle,\n                offset;\n            this.container = options.get('tooltipContainer') || document.body;\n            this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n            this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n            // remove any previous lingering tooltip\n            $('#jqssizetip').remove();\n            $('#jqstooltip').remove();\n            this.sizetip = $('<div/>', {\n                id: 'jqssizetip',\n                style: sizetipStyle,\n                'class': tooltipClassname\n            });\n            this.tooltip = $('<div/>', {\n                id: 'jqstooltip',\n                'class': tooltipClassname\n            }).appendTo(this.container);\n            // account for the container's location\n            offset = this.tooltip.offset();\n            this.offsetLeft = offset.left;\n            this.offsetTop = offset.top;\n            this.hidden = true;\n            $(window).unbind('resize.jqs scroll.jqs');\n            $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n            this.updateWindowDims();\n        },\n\n        updateWindowDims: function () {\n            this.scrollTop = $(window).scrollTop();\n            this.scrollLeft = $(window).scrollLeft();\n            this.scrollRight = this.scrollLeft + $(window).width();\n            this.updatePosition();\n        },\n\n        getSize: function (content) {\n            this.sizetip.html(content).appendTo(this.container);\n            this.width = this.sizetip.width() + 1;\n            this.height = this.sizetip.height();\n            this.sizetip.remove();\n        },\n\n        setContent: function (content) {\n            if (!content) {\n                this.tooltip.css('visibility', 'hidden');\n                this.hidden = true;\n                return;\n            }\n            this.getSize(content);\n            this.tooltip.html(content)\n                .css({\n                    'width': this.width,\n                    'height': this.height,\n                    'visibility': 'visible'\n                });\n            if (this.hidden) {\n                this.hidden = false;\n                this.updatePosition();\n            }\n        },\n\n        updatePosition: function (x, y) {\n            if (x === undefined) {\n                if (this.mousex === undefined) {\n                    return;\n                }\n                x = this.mousex - this.offsetLeft;\n                y = this.mousey - this.offsetTop;\n\n            } else {\n                this.mousex = x = x - this.offsetLeft;\n                this.mousey = y = y - this.offsetTop;\n            }\n            if (!this.height || !this.width || this.hidden) {\n                return;\n            }\n\n            y -= this.height + this.tooltipOffsetY;\n            x += this.tooltipOffsetX;\n\n            if (y < this.scrollTop) {\n                y = this.scrollTop;\n            }\n            if (x < this.scrollLeft) {\n                x = this.scrollLeft;\n            } else if (x + this.width > this.scrollRight) {\n                x = this.scrollRight - this.width;\n            }\n\n            this.tooltip.css({\n                'left': x,\n                'top': y\n            });\n        },\n\n        remove: function () {\n            this.tooltip.remove();\n            this.sizetip.remove();\n            this.sizetip = this.tooltip = undefined;\n            $(window).unbind('resize.jqs scroll.jqs');\n        }\n    });\n\n    initStyles = function() {\n        addCSS(defaultStyles);\n    };\n\n    $(initStyles);\n\n    pending = [];\n    $.fn.sparkline = function (userValues, userOptions) {\n        return this.each(function () {\n            var options = new $.fn.sparkline.options(this, userOptions),\n                 $this = $(this),\n                 render, i;\n            render = function () {\n                var values, width, height, tmp, mhandler, sp, vals;\n                if (userValues === 'html' || userValues === undefined) {\n                    vals = this.getAttribute(options.get('tagValuesAttribute'));\n                    if (vals === undefined || vals === null) {\n                        vals = $this.html();\n                    }\n                    values = vals.replace(/(^\\s*<!--)|(-->\\s*$)|\\s+/g, '').split(',');\n                } else {\n                    values = userValues;\n                }\n\n                width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n                if (options.get('height') === 'auto') {\n                    if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n                        // must be a better way to get the line height\n                        tmp = document.createElement('span');\n                        tmp.innerHTML = 'a';\n                        $this.html(tmp);\n                        height = $(tmp).innerHeight() || $(tmp).height();\n                        $(tmp).remove();\n                        tmp = null;\n                    }\n                } else {\n                    height = options.get('height');\n                }\n\n                if (!options.get('disableInteraction')) {\n                    mhandler = $.data(this, '_jqs_mhandler');\n                    if (!mhandler) {\n                        mhandler = new MouseHandler(this, options);\n                        $.data(this, '_jqs_mhandler', mhandler);\n                    } else if (!options.get('composite')) {\n                        mhandler.reset();\n                    }\n                } else {\n                    mhandler = false;\n                }\n\n                if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n                    if (!$.data(this, '_jqs_errnotify')) {\n                        alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n                        $.data(this, '_jqs_errnotify', true);\n                    }\n                    return;\n                }\n\n                sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n                sp.render();\n\n                if (mhandler) {\n                    mhandler.registerSparkline(sp);\n                }\n            };\n            if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n                if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n                    // remove any existing references to the element\n                    for (i = pending.length; i; i--) {\n                        if (pending[i - 1][0] == this) {\n                            pending.splice(i - 1, 1);\n                        }\n                    }\n                }\n                pending.push([this, render]);\n                $.data(this, '_jqs_pending', true);\n            } else {\n                render.call(this);\n            }\n        });\n    };\n\n    $.fn.sparkline.defaults = getDefaults();\n\n\n    $.sparkline_display_visible = function () {\n        var el, i, pl;\n        var done = [];\n        for (i = 0, pl = pending.length; i < pl; i++) {\n            el = pending[i][0];\n            if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n                pending[i][1].call(el);\n                $.data(pending[i][0], '_jqs_pending', false);\n                done.push(i);\n            } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n                // element has been inserted and removed from the DOM\n                // If it was not yet inserted into the dom then the .data request\n                // will return true.\n                // removing from the dom causes the data to be removed.\n                $.data(pending[i][0], '_jqs_pending', false);\n                done.push(i);\n            }\n        }\n        for (i = done.length; i; i--) {\n            pending.splice(done[i - 1], 1);\n        }\n    };\n\n\n    /**\n     * User option handler\n     */\n    $.fn.sparkline.options = createClass({\n        init: function (tag, userOptions) {\n            var extendedOptions, defaults, base, tagOptionType;\n            this.userOptions = userOptions = userOptions || {};\n            this.tag = tag;\n            this.tagValCache = {};\n            defaults = $.fn.sparkline.defaults;\n            base = defaults.common;\n            this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n            tagOptionType = this.getTagSetting('type');\n            if (tagOptionType === UNSET_OPTION) {\n                extendedOptions = defaults[userOptions.type || base.type];\n            } else {\n                extendedOptions = defaults[tagOptionType];\n            }\n            this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n        },\n\n\n        getTagSetting: function (key) {\n            var prefix = this.tagOptionsPrefix,\n                val, i, pairs, keyval;\n            if (prefix === false || prefix === undefined) {\n                return UNSET_OPTION;\n            }\n            if (this.tagValCache.hasOwnProperty(key)) {\n                val = this.tagValCache.key;\n            } else {\n                val = this.tag.getAttribute(prefix + key);\n                if (val === undefined || val === null) {\n                    val = UNSET_OPTION;\n                } else if (val.substr(0, 1) === '[') {\n                    val = val.substr(1, val.length - 2).split(',');\n                    for (i = val.length; i--;) {\n                        val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n                    }\n                } else if (val.substr(0, 1) === '{') {\n                    pairs = val.substr(1, val.length - 2).split(',');\n                    val = {};\n                    for (i = pairs.length; i--;) {\n                        keyval = pairs[i].split(':', 2);\n                        val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n                    }\n                } else {\n                    val = normalizeValue(val);\n                }\n                this.tagValCache.key = val;\n            }\n            return val;\n        },\n\n        get: function (key, defaultval) {\n            var tagOption = this.getTagSetting(key),\n                result;\n            if (tagOption !== UNSET_OPTION) {\n                return tagOption;\n            }\n            return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n        }\n    });\n\n\n    $.fn.sparkline._base = createClass({\n        disabled: false,\n\n        init: function (el, values, options, width, height) {\n            this.el = el;\n            this.$el = $(el);\n            this.values = values;\n            this.options = options;\n            this.width = width;\n            this.height = height;\n            this.currentRegion = undefined;\n        },\n\n        /**\n         * Setup the canvas\n         */\n        initTarget: function () {\n            var interactive = !this.options.get('disableInteraction');\n            if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n                this.disabled = true;\n            } else {\n                this.canvasWidth = this.target.pixelWidth;\n                this.canvasHeight = this.target.pixelHeight;\n            }\n        },\n\n        /**\n         * Actually render the chart to the canvas\n         */\n        render: function () {\n            if (this.disabled) {\n                this.el.innerHTML = '';\n                return false;\n            }\n            return true;\n        },\n\n        /**\n         * Return a region id for a given x/y co-ordinate\n         */\n        getRegion: function (x, y) {\n        },\n\n        /**\n         * Highlight an item based on the moused-over x,y co-ordinate\n         */\n        setRegionHighlight: function (el, x, y) {\n            var currentRegion = this.currentRegion,\n                highlightEnabled = !this.options.get('disableHighlight'),\n                newRegion;\n            if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n                return null;\n            }\n            newRegion = this.getRegion(el, x, y);\n            if (currentRegion !== newRegion) {\n                if (currentRegion !== undefined && highlightEnabled) {\n                    this.removeHighlight();\n                }\n                this.currentRegion = newRegion;\n                if (newRegion !== undefined && highlightEnabled) {\n                    this.renderHighlight();\n                }\n                return true;\n            }\n            return false;\n        },\n\n        /**\n         * Reset any currently highlighted item\n         */\n        clearRegionHighlight: function () {\n            if (this.currentRegion !== undefined) {\n                this.removeHighlight();\n                this.currentRegion = undefined;\n                return true;\n            }\n            return false;\n        },\n\n        renderHighlight: function () {\n            this.changeHighlight(true);\n        },\n\n        removeHighlight: function () {\n            this.changeHighlight(false);\n        },\n\n        changeHighlight: function (highlight)  {},\n\n        /**\n         * Fetch the HTML to display as a tooltip\n         */\n        getCurrentRegionTooltip: function () {\n            var options = this.options,\n                header = '',\n                entries = [],\n                fields, formats, formatlen, fclass, text, i,\n                showFields, showFieldsKey, newFields, fv,\n                formatter, format, fieldlen, j;\n            if (this.currentRegion === undefined) {\n                return '';\n            }\n            fields = this.getCurrentRegionFields();\n            formatter = options.get('tooltipFormatter');\n            if (formatter) {\n                return formatter(this, options, fields);\n            }\n            if (options.get('tooltipChartTitle')) {\n                header += '<div class=\"jqs jqstitle\">' + options.get('tooltipChartTitle') + '</div>\\n';\n            }\n            formats = this.options.get('tooltipFormat');\n            if (!formats) {\n                return '';\n            }\n            if (!$.isArray(formats)) {\n                formats = [formats];\n            }\n            if (!$.isArray(fields)) {\n                fields = [fields];\n            }\n            showFields = this.options.get('tooltipFormatFieldlist');\n            showFieldsKey = this.options.get('tooltipFormatFieldlistKey');\n            if (showFields && showFieldsKey) {\n                // user-selected ordering of fields\n                newFields = [];\n                for (i = fields.length; i--;) {\n                    fv = fields[i][showFieldsKey];\n                    if ((j = $.inArray(fv, showFields)) != -1) {\n                        newFields[j] = fields[i];\n                    }\n                }\n                fields = newFields;\n            }\n            formatlen = formats.length;\n            fieldlen = fields.length;\n            for (i = 0; i < formatlen; i++) {\n                format = formats[i];\n                if (typeof format === 'string') {\n                    format = new SPFormat(format);\n                }\n                fclass = format.fclass || 'jqsfield';\n                for (j = 0; j < fieldlen; j++) {\n                    if (!fields[j].isNull || !options.get('tooltipSkipNull')) {\n                        $.extend(fields[j], {\n                            prefix: options.get('tooltipPrefix'),\n                            suffix: options.get('tooltipSuffix')\n                        });\n                        text = format.render(fields[j], options.get('tooltipValueLookups'), options);\n                        entries.push('<div class=\"' + fclass + '\">' + text + '</div>');\n                    }\n                }\n            }\n            if (entries.length) {\n                return header + entries.join('\\n');\n            }\n            return '';\n        },\n\n        getCurrentRegionFields: function () {},\n\n        calcHighlightColor: function (color, options) {\n            var highlightColor = options.get('highlightColor'),\n                lighten = options.get('highlightLighten'),\n                parse, mult, rgbnew, i;\n            if (highlightColor) {\n                return highlightColor;\n            }\n            if (lighten) {\n                // extract RGB values\n                parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n                if (parse) {\n                    rgbnew = [];\n                    mult = color.length === 4 ? 16 : 1;\n                    for (i = 0; i < 3; i++) {\n                        rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);\n                    }\n                    return 'rgb(' + rgbnew.join(',') + ')';\n                }\n\n            }\n            return color;\n        }\n\n    });\n\n    barHighlightMixin = {\n        changeHighlight: function (highlight) {\n            var currentRegion = this.currentRegion,\n                target = this.target,\n                shapeids = this.regionShapes[currentRegion],\n                newShapes;\n            // will be null if the region value was null\n            if (shapeids) {\n                newShapes = this.renderRegion(currentRegion, highlight);\n                if ($.isArray(newShapes) || $.isArray(shapeids)) {\n                    target.replaceWithShapes(shapeids, newShapes);\n                    this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {\n                        return newShape.id;\n                    });\n                } else {\n                    target.replaceWithShape(shapeids, newShapes);\n                    this.regionShapes[currentRegion] = newShapes.id;\n                }\n            }\n        },\n\n        render: function () {\n            var values = this.values,\n                target = this.target,\n                regionShapes = this.regionShapes,\n                shapes, ids, i, j;\n\n            if (!this.cls._super.render.call(this)) {\n                return;\n            }\n            for (i = values.length; i--;) {\n                shapes = this.renderRegion(i);\n                if (shapes) {\n                    if ($.isArray(shapes)) {\n                        ids = [];\n                        for (j = shapes.length; j--;) {\n                            shapes[j].append();\n                            ids.push(shapes[j].id);\n                        }\n                        regionShapes[i] = ids;\n                    } else {\n                        shapes.append();\n                        regionShapes[i] = shapes.id; // store just the shapeid\n                    }\n                } else {\n                    // null value\n                    regionShapes[i] = null;\n                }\n            }\n            target.render();\n        }\n    };\n\n    /**\n     * Line charts\n     */\n    $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {\n        type: 'line',\n\n        init: function (el, values, options, width, height) {\n            line._super.init.call(this, el, values, options, width, height);\n            this.vertices = [];\n            this.regionMap = [];\n            this.xvalues = [];\n            this.yvalues = [];\n            this.yminmax = [];\n            this.hightlightSpotId = null;\n            this.lastShapeId = null;\n            this.initTarget();\n        },\n\n        getRegion: function (el, x, y) {\n            var i,\n                regionMap = this.regionMap; // maps regions to value positions\n            for (i = regionMap.length; i--;) {\n                if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {\n                    return regionMap[i][2];\n                }\n            }\n            return undefined;\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                isNull: this.yvalues[currentRegion] === null,\n                x: this.xvalues[currentRegion],\n                y: this.yvalues[currentRegion],\n                color: this.options.get('lineColor'),\n                fillColor: this.options.get('fillColor'),\n                offset: currentRegion\n            };\n        },\n\n        renderHighlight: function () {\n            var currentRegion = this.currentRegion,\n                target = this.target,\n                vertex = this.vertices[currentRegion],\n                options = this.options,\n                spotRadius = options.get('spotRadius'),\n                highlightSpotColor = options.get('highlightSpotColor'),\n                highlightLineColor = options.get('highlightLineColor'),\n                highlightSpot, highlightLine;\n\n            if (!vertex) {\n                return;\n            }\n            if (spotRadius && highlightSpotColor) {\n                highlightSpot = target.drawCircle(vertex[0], vertex[1],\n                    spotRadius, undefined, highlightSpotColor);\n                this.highlightSpotId = highlightSpot.id;\n                target.insertAfterShape(this.lastShapeId, highlightSpot);\n            }\n            if (highlightLineColor) {\n                highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],\n                    this.canvasTop + this.canvasHeight, highlightLineColor);\n                this.highlightLineId = highlightLine.id;\n                target.insertAfterShape(this.lastShapeId, highlightLine);\n            }\n        },\n\n        removeHighlight: function () {\n            var target = this.target;\n            if (this.highlightSpotId) {\n                target.removeShapeId(this.highlightSpotId);\n                this.highlightSpotId = null;\n            }\n            if (this.highlightLineId) {\n                target.removeShapeId(this.highlightLineId);\n                this.highlightLineId = null;\n            }\n        },\n\n        scanValues: function () {\n            var values = this.values,\n                valcount = values.length,\n                xvalues = this.xvalues,\n                yvalues = this.yvalues,\n                yminmax = this.yminmax,\n                i, val, isStr, isArray, sp;\n            for (i = 0; i < valcount; i++) {\n                val = values[i];\n                isStr = typeof(values[i]) === 'string';\n                isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;\n                sp = isStr && values[i].split(':');\n                if (isStr && sp.length === 2) { // x:y\n                    xvalues.push(Number(sp[0]));\n                    yvalues.push(Number(sp[1]));\n                    yminmax.push(Number(sp[1]));\n                } else if (isArray) {\n                    xvalues.push(val[0]);\n                    yvalues.push(val[1]);\n                    yminmax.push(val[1]);\n                } else {\n                    xvalues.push(i);\n                    if (values[i] === null || values[i] === 'null') {\n                        yvalues.push(null);\n                    } else {\n                        yvalues.push(Number(val));\n                        yminmax.push(Number(val));\n                    }\n                }\n            }\n            if (this.options.get('xvalues')) {\n                xvalues = this.options.get('xvalues');\n            }\n\n            this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);\n            this.miny = this.minyorg = Math.min.apply(Math, yminmax);\n\n            this.maxx = Math.max.apply(Math, xvalues);\n            this.minx = Math.min.apply(Math, xvalues);\n\n            this.xvalues = xvalues;\n            this.yvalues = yvalues;\n            this.yminmax = yminmax;\n\n        },\n\n        processRangeOptions: function () {\n            var options = this.options,\n                normalRangeMin = options.get('normalRangeMin'),\n                normalRangeMax = options.get('normalRangeMax');\n\n            if (normalRangeMin !== undefined) {\n                if (normalRangeMin < this.miny) {\n                    this.miny = normalRangeMin;\n                }\n                if (normalRangeMax > this.maxy) {\n                    this.maxy = normalRangeMax;\n                }\n            }\n            if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {\n                this.miny = options.get('chartRangeMin');\n            }\n            if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {\n                this.maxy = options.get('chartRangeMax');\n            }\n            if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {\n                this.minx = options.get('chartRangeMinX');\n            }\n            if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {\n                this.maxx = options.get('chartRangeMaxX');\n            }\n\n        },\n\n        drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {\n            var normalRangeMin = this.options.get('normalRangeMin'),\n                normalRangeMax = this.options.get('normalRangeMax'),\n                ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),\n                height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);\n            this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();\n        },\n\n        render: function () {\n            var options = this.options,\n                target = this.target,\n                canvasWidth = this.canvasWidth,\n                canvasHeight = this.canvasHeight,\n                vertices = this.vertices,\n                spotRadius = options.get('spotRadius'),\n                regionMap = this.regionMap,\n                rangex, rangey, yvallast,\n                canvasTop, canvasLeft,\n                vertex, path, paths, x, y, xnext, xpos, xposnext,\n                last, next, yvalcount, lineShapes, fillShapes, plen,\n                valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;\n\n            if (!line._super.render.call(this)) {\n                return;\n            }\n\n            this.scanValues();\n            this.processRangeOptions();\n\n            xvalues = this.xvalues;\n            yvalues = this.yvalues;\n\n            if (!this.yminmax.length || this.yvalues.length < 2) {\n                // empty or all null valuess\n                return;\n            }\n\n            canvasTop = canvasLeft = 0;\n\n            rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;\n            rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;\n            yvallast = this.yvalues.length - 1;\n\n            if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {\n                spotRadius = 0;\n            }\n            if (spotRadius) {\n                // adjust the canvas size as required so that spots will fit\n                hlSpotsEnabled = options.get('highlightSpotColor') &&  !options.get('disableInteraction');\n                if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {\n                    canvasHeight -= Math.ceil(spotRadius);\n                }\n                if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {\n                    canvasHeight -= Math.ceil(spotRadius);\n                    canvasTop += Math.ceil(spotRadius);\n                }\n                if (hlSpotsEnabled ||\n                     ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {\n                    canvasLeft += Math.ceil(spotRadius);\n                    canvasWidth -= Math.ceil(spotRadius);\n                }\n                if (hlSpotsEnabled || options.get('spotColor') ||\n                    (options.get('minSpotColor') || options.get('maxSpotColor') &&\n                        (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {\n                    canvasWidth -= Math.ceil(spotRadius);\n                }\n            }\n\n\n            canvasHeight--;\n\n            if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {\n                this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n            }\n\n            path = [];\n            paths = [path];\n            last = next = null;\n            yvalcount = yvalues.length;\n            for (i = 0; i < yvalcount; i++) {\n                x = xvalues[i];\n                xnext = xvalues[i + 1];\n                y = yvalues[i];\n                xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));\n                xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;\n                next = xpos + ((xposnext - xpos) / 2);\n                regionMap[i] = [last || 0, next, i];\n                last = next;\n                if (y === null) {\n                    if (i) {\n                        if (yvalues[i - 1] !== null) {\n                            path = [];\n                            paths.push(path);\n                        }\n                        vertices.push(null);\n                    }\n                } else {\n                    if (y < this.miny) {\n                        y = this.miny;\n                    }\n                    if (y > this.maxy) {\n                        y = this.maxy;\n                    }\n                    if (!path.length) {\n                        // previous value was null\n                        path.push([xpos, canvasTop + canvasHeight]);\n                    }\n                    vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];\n                    path.push(vertex);\n                    vertices.push(vertex);\n                }\n            }\n\n            lineShapes = [];\n            fillShapes = [];\n            plen = paths.length;\n            for (i = 0; i < plen; i++) {\n                path = paths[i];\n                if (path.length) {\n                    if (options.get('fillColor')) {\n                        path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);\n                        fillShapes.push(path.slice(0));\n                        path.pop();\n                    }\n                    // if there's only a single point in this path, then we want to display it\n                    // as a vertical line which means we keep path[0]  as is\n                    if (path.length > 2) {\n                        // else we want the first value\n                        path[0] = [path[0][0], path[1][1]];\n                    }\n                    lineShapes.push(path);\n                }\n            }\n\n            // draw the fill first, then optionally the normal range, then the line on top of that\n            plen = fillShapes.length;\n            for (i = 0; i < plen; i++) {\n                target.drawShape(fillShapes[i],\n                    options.get('fillColor'), options.get('fillColor')).append();\n            }\n\n            if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {\n                this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);\n            }\n\n            plen = lineShapes.length;\n            for (i = 0; i < plen; i++) {\n                target.drawShape(lineShapes[i], options.get('lineColor'), undefined,\n                    options.get('lineWidth')).append();\n            }\n\n            if (spotRadius && options.get('valueSpots')) {\n                valueSpots = options.get('valueSpots');\n                if (valueSpots.get === undefined) {\n                    valueSpots = new RangeMap(valueSpots);\n                }\n                for (i = 0; i < yvalcount; i++) {\n                    color = valueSpots.get(yvalues[i]);\n                    if (color) {\n                        target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),\n                            canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),\n                            spotRadius, undefined,\n                            color).append();\n                    }\n                }\n\n            }\n            if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {\n                target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),\n                    canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),\n                    spotRadius, undefined,\n                    options.get('spotColor')).append();\n            }\n            if (this.maxy !== this.minyorg) {\n                if (spotRadius && options.get('minSpotColor')) {\n                    x = xvalues[$.inArray(this.minyorg, yvalues)];\n                    target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n                        canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),\n                        spotRadius, undefined,\n                        options.get('minSpotColor')).append();\n                }\n                if (spotRadius && options.get('maxSpotColor')) {\n                    x = xvalues[$.inArray(this.maxyorg, yvalues)];\n                    target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),\n                        canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),\n                        spotRadius, undefined,\n                        options.get('maxSpotColor')).append();\n                }\n            }\n\n            this.lastShapeId = target.getLastShapeId();\n            this.canvasTop = canvasTop;\n            target.render();\n        }\n    });\n\n    /**\n     * Bar charts\n     */\n    $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {\n        type: 'bar',\n\n        init: function (el, values, options, width, height) {\n            var barWidth = parseInt(options.get('barWidth'), 10),\n                barSpacing = parseInt(options.get('barSpacing'), 10),\n                chartRangeMin = options.get('chartRangeMin'),\n                chartRangeMax = options.get('chartRangeMax'),\n                chartRangeClip = options.get('chartRangeClip'),\n                stackMin = Infinity,\n                stackMax = -Infinity,\n                isStackString, groupMin, groupMax, stackRanges,\n                numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,\n                stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;\n            bar._super.init.call(this, el, values, options, width, height);\n\n            // scan values to determine whether to stack bars\n            for (i = 0, vlen = values.length; i < vlen; i++) {\n                val = values[i];\n                isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;\n                if (isStackString || $.isArray(val)) {\n                    stacked = true;\n                    if (isStackString) {\n                        val = values[i] = normalizeValues(val.split(':'));\n                    }\n                    val = remove(val, null); // min/max will treat null as zero\n                    groupMin = Math.min.apply(Math, val);\n                    groupMax = Math.max.apply(Math, val);\n                    if (groupMin < stackMin) {\n                        stackMin = groupMin;\n                    }\n                    if (groupMax > stackMax) {\n                        stackMax = groupMax;\n                    }\n                }\n            }\n\n            this.stacked = stacked;\n            this.regionShapes = {};\n            this.barWidth = barWidth;\n            this.barSpacing = barSpacing;\n            this.totalBarWidth = barWidth + barSpacing;\n            this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n            this.initTarget();\n\n            if (chartRangeClip) {\n                clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;\n                clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;\n            }\n\n            numValues = [];\n            stackRanges = stacked ? [] : numValues;\n            var stackTotals = [];\n            var stackRangesNeg = [];\n            for (i = 0, vlen = values.length; i < vlen; i++) {\n                if (stacked) {\n                    vlist = values[i];\n                    values[i] = svals = [];\n                    stackTotals[i] = 0;\n                    stackRanges[i] = stackRangesNeg[i] = 0;\n                    for (j = 0, slen = vlist.length; j < slen; j++) {\n                        val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];\n                        if (val !== null) {\n                            if (val > 0) {\n                                stackTotals[i] += val;\n                            }\n                            if (stackMin < 0 && stackMax > 0) {\n                                if (val < 0) {\n                                    stackRangesNeg[i] += Math.abs(val);\n                                } else {\n                                    stackRanges[i] += val;\n                                }\n                            } else {\n                                stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));\n                            }\n                            numValues.push(val);\n                        }\n                    }\n                } else {\n                    val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];\n                    val = values[i] = normalizeValue(val);\n                    if (val !== null) {\n                        numValues.push(val);\n                    }\n                }\n            }\n            this.max = max = Math.max.apply(Math, numValues);\n            this.min = min = Math.min.apply(Math, numValues);\n            this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;\n            this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;\n\n            if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {\n                min = options.get('chartRangeMin');\n            }\n            if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {\n                max = options.get('chartRangeMax');\n            }\n\n            this.zeroAxis = zeroAxis = options.get('zeroAxis', true);\n            if (min <= 0 && max >= 0 && zeroAxis) {\n                xaxisOffset = 0;\n            } else if (zeroAxis == false) {\n                xaxisOffset = min;\n            } else if (min > 0) {\n                xaxisOffset = min;\n            } else {\n                xaxisOffset = max;\n            }\n            this.xaxisOffset = xaxisOffset;\n\n            range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;\n\n            // as we plot zero/min values a single pixel line, we add a pixel to all other\n            // values - Reduce the effective canvas size to suit\n            this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;\n\n            if (min < xaxisOffset) {\n                yMaxCalc = (stacked && max >= 0) ? stackMax : max;\n                yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;\n                if (yoffset !== Math.ceil(yoffset)) {\n                    this.canvasHeightEf -= 2;\n                    yoffset = Math.ceil(yoffset);\n                }\n            } else {\n                yoffset = this.canvasHeight;\n            }\n            this.yoffset = yoffset;\n\n            if ($.isArray(options.get('colorMap'))) {\n                this.colorMapByIndex = options.get('colorMap');\n                this.colorMapByValue = null;\n            } else {\n                this.colorMapByIndex = null;\n                this.colorMapByValue = options.get('colorMap');\n                if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n                    this.colorMapByValue = new RangeMap(this.colorMapByValue);\n                }\n            }\n\n            this.range = range;\n        },\n\n        getRegion: function (el, x, y) {\n            var result = Math.floor(x / this.totalBarWidth);\n            return (result < 0 || result >= this.values.length) ? undefined : result;\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion,\n                values = ensureArray(this.values[currentRegion]),\n                result = [],\n                value, i;\n            for (i = values.length; i--;) {\n                value = values[i];\n                result.push({\n                    isNull: value === null,\n                    value: value,\n                    color: this.calcColor(i, value, currentRegion),\n                    offset: currentRegion\n                });\n            }\n            return result;\n        },\n\n        calcColor: function (stacknum, value, valuenum) {\n            var colorMapByIndex = this.colorMapByIndex,\n                colorMapByValue = this.colorMapByValue,\n                options = this.options,\n                color, newColor;\n            if (this.stacked) {\n                color = options.get('stackedBarColor');\n            } else {\n                color = (value < 0) ? options.get('negBarColor') : options.get('barColor');\n            }\n            if (value === 0 && options.get('zeroColor') !== undefined) {\n                color = options.get('zeroColor');\n            }\n            if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n                color = newColor;\n            } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n                color = colorMapByIndex[valuenum];\n            }\n            return $.isArray(color) ? color[stacknum % color.length] : color;\n        },\n\n        /**\n         * Render bar(s) for a region\n         */\n        renderRegion: function (valuenum, highlight) {\n            var vals = this.values[valuenum],\n                options = this.options,\n                xaxisOffset = this.xaxisOffset,\n                result = [],\n                range = this.range,\n                stacked = this.stacked,\n                target = this.target,\n                x = valuenum * this.totalBarWidth,\n                canvasHeightEf = this.canvasHeightEf,\n                yoffset = this.yoffset,\n                y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;\n\n            vals = $.isArray(vals) ? vals : [vals];\n            valcount = vals.length;\n            val = vals[0];\n            isNull = all(null, vals);\n            allMin = all(xaxisOffset, vals, true);\n\n            if (isNull) {\n                if (options.get('nullColor')) {\n                    color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);\n                    y = (yoffset > 0) ? yoffset - 1 : yoffset;\n                    return target.drawRect(x, y, this.barWidth - 1, 0, color, color);\n                } else {\n                    return undefined;\n                }\n            }\n            yoffsetNeg = yoffset;\n            for (i = 0; i < valcount; i++) {\n                val = vals[i];\n\n                if (stacked && val === xaxisOffset) {\n                    if (!allMin || minPlotted) {\n                        continue;\n                    }\n                    minPlotted = true;\n                }\n\n                if (range > 0) {\n                    height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;\n                } else {\n                    height = 1;\n                }\n                if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {\n                    y = yoffsetNeg;\n                    yoffsetNeg += height;\n                } else {\n                    y = yoffset - height;\n                    yoffset -= height;\n                }\n                color = this.calcColor(i, val, valuenum);\n                if (highlight) {\n                    color = this.calcHighlightColor(color, options);\n                }\n                result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));\n            }\n            if (result.length === 1) {\n                return result[0];\n            }\n            return result;\n        }\n    });\n\n    /**\n     * Tristate charts\n     */\n    $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {\n        type: 'tristate',\n\n        init: function (el, values, options, width, height) {\n            var barWidth = parseInt(options.get('barWidth'), 10),\n                barSpacing = parseInt(options.get('barSpacing'), 10);\n            tristate._super.init.call(this, el, values, options, width, height);\n\n            this.regionShapes = {};\n            this.barWidth = barWidth;\n            this.barSpacing = barSpacing;\n            this.totalBarWidth = barWidth + barSpacing;\n            this.values = $.map(values, Number);\n            this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);\n\n            if ($.isArray(options.get('colorMap'))) {\n                this.colorMapByIndex = options.get('colorMap');\n                this.colorMapByValue = null;\n            } else {\n                this.colorMapByIndex = null;\n                this.colorMapByValue = options.get('colorMap');\n                if (this.colorMapByValue && this.colorMapByValue.get === undefined) {\n                    this.colorMapByValue = new RangeMap(this.colorMapByValue);\n                }\n            }\n            this.initTarget();\n        },\n\n        getRegion: function (el, x, y) {\n            return Math.floor(x / this.totalBarWidth);\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                isNull: this.values[currentRegion] === undefined,\n                value: this.values[currentRegion],\n                color: this.calcColor(this.values[currentRegion], currentRegion),\n                offset: currentRegion\n            };\n        },\n\n        calcColor: function (value, valuenum) {\n            var values = this.values,\n                options = this.options,\n                colorMapByIndex = this.colorMapByIndex,\n                colorMapByValue = this.colorMapByValue,\n                color, newColor;\n\n            if (colorMapByValue && (newColor = colorMapByValue.get(value))) {\n                color = newColor;\n            } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {\n                color = colorMapByIndex[valuenum];\n            } else if (values[valuenum] < 0) {\n                color = options.get('negBarColor');\n            } else if (values[valuenum] > 0) {\n                color = options.get('posBarColor');\n            } else {\n                color = options.get('zeroBarColor');\n            }\n            return color;\n        },\n\n        renderRegion: function (valuenum, highlight) {\n            var values = this.values,\n                options = this.options,\n                target = this.target,\n                canvasHeight, height, halfHeight,\n                x, y, color;\n\n            canvasHeight = target.pixelHeight;\n            halfHeight = Math.round(canvasHeight / 2);\n\n            x = valuenum * this.totalBarWidth;\n            if (values[valuenum] < 0) {\n                y = halfHeight;\n                height = halfHeight - 1;\n            } else if (values[valuenum] > 0) {\n                y = 0;\n                height = halfHeight - 1;\n            } else {\n                y = halfHeight - 1;\n                height = 2;\n            }\n            color = this.calcColor(values[valuenum], valuenum);\n            if (color === null) {\n                return;\n            }\n            if (highlight) {\n                color = this.calcHighlightColor(color, options);\n            }\n            return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);\n        }\n    });\n\n    /**\n     * Discrete charts\n     */\n    $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {\n        type: 'discrete',\n\n        init: function (el, values, options, width, height) {\n            discrete._super.init.call(this, el, values, options, width, height);\n\n            this.regionShapes = {};\n            this.values = values = $.map(values, Number);\n            this.min = Math.min.apply(Math, values);\n            this.max = Math.max.apply(Math, values);\n            this.range = this.max - this.min;\n            this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;\n            this.interval = Math.floor(width / values.length);\n            this.itemWidth = width / values.length;\n            if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {\n                this.min = options.get('chartRangeMin');\n            }\n            if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {\n                this.max = options.get('chartRangeMax');\n            }\n            this.initTarget();\n            if (this.target) {\n                this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');\n            }\n        },\n\n        getRegion: function (el, x, y) {\n            return Math.floor(x / this.itemWidth);\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                isNull: this.values[currentRegion] === undefined,\n                value: this.values[currentRegion],\n                offset: currentRegion\n            };\n        },\n\n        renderRegion: function (valuenum, highlight) {\n            var values = this.values,\n                options = this.options,\n                min = this.min,\n                max = this.max,\n                range = this.range,\n                interval = this.interval,\n                target = this.target,\n                canvasHeight = this.canvasHeight,\n                lineHeight = this.lineHeight,\n                pheight = canvasHeight - lineHeight,\n                ytop, val, color, x;\n\n            val = clipval(values[valuenum], min, max);\n            x = valuenum * interval;\n            ytop = Math.round(pheight - pheight * ((val - min) / range));\n            color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');\n            if (highlight) {\n                color = this.calcHighlightColor(color, options);\n            }\n            return target.drawLine(x, ytop, x, ytop + lineHeight, color);\n        }\n    });\n\n    /**\n     * Bullet charts\n     */\n    $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {\n        type: 'bullet',\n\n        init: function (el, values, options, width, height) {\n            var min, max, vals;\n            bullet._super.init.call(this, el, values, options, width, height);\n\n            // values: target, performance, range1, range2, range3\n            this.values = values = normalizeValues(values);\n            // target or performance could be null\n            vals = values.slice();\n            vals[0] = vals[0] === null ? vals[2] : vals[0];\n            vals[1] = values[1] === null ? vals[2] : vals[1];\n            min = Math.min.apply(Math, values);\n            max = Math.max.apply(Math, values);\n            if (options.get('base') === undefined) {\n                min = min < 0 ? min : 0;\n            } else {\n                min = options.get('base');\n            }\n            this.min = min;\n            this.max = max;\n            this.range = max - min;\n            this.shapes = {};\n            this.valueShapes = {};\n            this.regiondata = {};\n            this.width = width = options.get('width') === 'auto' ? '4.0em' : width;\n            this.target = this.$el.simpledraw(width, height, options.get('composite'));\n            if (!values.length) {\n                this.disabled = true;\n            }\n            this.initTarget();\n        },\n\n        getRegion: function (el, x, y) {\n            var shapeid = this.target.getShapeAt(el, x, y);\n            return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                fieldkey: currentRegion.substr(0, 1),\n                value: this.values[currentRegion.substr(1)],\n                region: currentRegion\n            };\n        },\n\n        changeHighlight: function (highlight) {\n            var currentRegion = this.currentRegion,\n                shapeid = this.valueShapes[currentRegion],\n                shape;\n            delete this.shapes[shapeid];\n            switch (currentRegion.substr(0, 1)) {\n                case 'r':\n                    shape = this.renderRange(currentRegion.substr(1), highlight);\n                    break;\n                case 'p':\n                    shape = this.renderPerformance(highlight);\n                    break;\n                case 't':\n                    shape = this.renderTarget(highlight);\n                    break;\n            }\n            this.valueShapes[currentRegion] = shape.id;\n            this.shapes[shape.id] = currentRegion;\n            this.target.replaceWithShape(shapeid, shape);\n        },\n\n        renderRange: function (rn, highlight) {\n            var rangeval = this.values[rn],\n                rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),\n                color = this.options.get('rangeColors')[rn - 2];\n            if (highlight) {\n                color = this.calcHighlightColor(color, this.options);\n            }\n            return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);\n        },\n\n        renderPerformance: function (highlight) {\n            var perfval = this.values[1],\n                perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),\n                color = this.options.get('performanceColor');\n            if (highlight) {\n                color = this.calcHighlightColor(color, this.options);\n            }\n            return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,\n                Math.round(this.canvasHeight * 0.4) - 1, color, color);\n        },\n\n        renderTarget: function (highlight) {\n            var targetval = this.values[0],\n                x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),\n                targettop = Math.round(this.canvasHeight * 0.10),\n                targetheight = this.canvasHeight - (targettop * 2),\n                color = this.options.get('targetColor');\n            if (highlight) {\n                color = this.calcHighlightColor(color, this.options);\n            }\n            return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);\n        },\n\n        render: function () {\n            var vlen = this.values.length,\n                target = this.target,\n                i, shape;\n            if (!bullet._super.render.call(this)) {\n                return;\n            }\n            for (i = 2; i < vlen; i++) {\n                shape = this.renderRange(i).append();\n                this.shapes[shape.id] = 'r' + i;\n                this.valueShapes['r' + i] = shape.id;\n            }\n            if (this.values[1] !== null) {\n                shape = this.renderPerformance().append();\n                this.shapes[shape.id] = 'p1';\n                this.valueShapes.p1 = shape.id;\n            }\n            if (this.values[0] !== null) {\n                shape = this.renderTarget().append();\n                this.shapes[shape.id] = 't0';\n                this.valueShapes.t0 = shape.id;\n            }\n            target.render();\n        }\n    });\n\n    /**\n     * Pie charts\n     */\n    $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {\n        type: 'pie',\n\n        init: function (el, values, options, width, height) {\n            var total = 0, i;\n\n            pie._super.init.call(this, el, values, options, width, height);\n\n            this.shapes = {}; // map shape ids to value offsets\n            this.valueShapes = {}; // maps value offsets to shape ids\n            this.values = values = $.map(values, Number);\n\n            if (options.get('width') === 'auto') {\n                this.width = this.height;\n            }\n\n            if (values.length > 0) {\n                for (i = values.length; i--;) {\n                    total += values[i];\n                }\n            }\n            this.total = total;\n            this.initTarget();\n            this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);\n        },\n\n        getRegion: function (el, x, y) {\n            var shapeid = this.target.getShapeAt(el, x, y);\n            return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;\n        },\n\n        getCurrentRegionFields: function () {\n            var currentRegion = this.currentRegion;\n            return {\n                isNull: this.values[currentRegion] === undefined,\n                value: this.values[currentRegion],\n                percent: this.values[currentRegion] / this.total * 100,\n                color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],\n                offset: currentRegion\n            };\n        },\n\n        changeHighlight: function (highlight) {\n            var currentRegion = this.currentRegion,\n                 newslice = this.renderSlice(currentRegion, highlight),\n                 shapeid = this.valueShapes[currentRegion];\n            delete this.shapes[shapeid];\n            this.target.replaceWithShape(shapeid, newslice);\n            this.valueShapes[currentRegion] = newslice.id;\n            this.shapes[newslice.id] = currentRegion;\n        },\n\n        renderSlice: function (valuenum, highlight) {\n            var target = this.target,\n                options = this.options,\n                radius = this.radius,\n                borderWidth = options.get('borderWidth'),\n                offset = options.get('offset'),\n                circle = 2 * Math.PI,\n                values = this.values,\n                total = this.total,\n                next = offset ? (2*Math.PI)*(offset/360) : 0,\n                start, end, i, vlen, color;\n\n            vlen = values.length;\n            for (i = 0; i < vlen; i++) {\n                start = next;\n                end = next;\n                if (total > 0) {  // avoid divide by zero\n                    end = next + (circle * (values[i] / total));\n                }\n                if (valuenum === i) {\n                    color = options.get('sliceColors')[i % options.get('sliceColors').length];\n                    if (highlight) {\n                        color = this.calcHighlightColor(color, options);\n                    }\n\n                    return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);\n                }\n                next = end;\n            }\n        },\n\n        render: function () {\n            var target = this.target,\n                values = this.values,\n                options = this.options,\n                radius = this.radius,\n                borderWidth = options.get('borderWidth'),\n                shape, i;\n\n            if (!pie._super.render.call(this)) {\n                return;\n            }\n            if (borderWidth) {\n                target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),\n                    options.get('borderColor'), undefined, borderWidth).append();\n            }\n            for (i = values.length; i--;) {\n                if (values[i]) { // don't render zero values\n                    shape = this.renderSlice(i).append();\n                    this.valueShapes[i] = shape.id; // store just the shapeid\n                    this.shapes[shape.id] = i;\n                }\n            }\n            target.render();\n        }\n    });\n\n    /**\n     * Box plots\n     */\n    $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {\n        type: 'box',\n\n        init: function (el, values, options, width, height) {\n            box._super.init.call(this, el, values, options, width, height);\n            this.values = $.map(values, Number);\n            this.width = options.get('width') === 'auto' ? '4.0em' : width;\n            this.initTarget();\n            if (!this.values.length) {\n                this.disabled = 1;\n            }\n        },\n\n        /**\n         * Simulate a single region\n         */\n        getRegion: function () {\n            return 1;\n        },\n\n        getCurrentRegionFields: function () {\n            var result = [\n                { field: 'lq', value: this.quartiles[0] },\n                { field: 'med', value: this.quartiles[1] },\n                { field: 'uq', value: this.quartiles[2] }\n            ];\n            if (this.loutlier !== undefined) {\n                result.push({ field: 'lo', value: this.loutlier});\n            }\n            if (this.routlier !== undefined) {\n                result.push({ field: 'ro', value: this.routlier});\n            }\n            if (this.lwhisker !== undefined) {\n                result.push({ field: 'lw', value: this.lwhisker});\n            }\n            if (this.rwhisker !== undefined) {\n                result.push({ field: 'rw', value: this.rwhisker});\n            }\n            return result;\n        },\n\n        render: function () {\n            var target = this.target,\n                values = this.values,\n                vlen = values.length,\n                options = this.options,\n                canvasWidth = this.canvasWidth,\n                canvasHeight = this.canvasHeight,\n                minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),\n                maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),\n                canvasLeft = 0,\n                lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,\n                size, unitSize;\n\n            if (!box._super.render.call(this)) {\n                return;\n            }\n\n            if (options.get('raw')) {\n                if (options.get('showOutliers') && values.length > 5) {\n                    loutlier = values[0];\n                    lwhisker = values[1];\n                    q1 = values[2];\n                    q2 = values[3];\n                    q3 = values[4];\n                    rwhisker = values[5];\n                    routlier = values[6];\n                } else {\n                    lwhisker = values[0];\n                    q1 = values[1];\n                    q2 = values[2];\n                    q3 = values[3];\n                    rwhisker = values[4];\n                }\n            } else {\n                values.sort(function (a, b) { return a - b; });\n                q1 = quartile(values, 1);\n                q2 = quartile(values, 2);\n                q3 = quartile(values, 3);\n                iqr = q3 - q1;\n                if (options.get('showOutliers')) {\n                    lwhisker = rwhisker = undefined;\n                    for (i = 0; i < vlen; i++) {\n                        if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {\n                            lwhisker = values[i];\n                        }\n                        if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {\n                            rwhisker = values[i];\n                        }\n                    }\n                    loutlier = values[0];\n                    routlier = values[vlen - 1];\n                } else {\n                    lwhisker = values[0];\n                    rwhisker = values[vlen - 1];\n                }\n            }\n            this.quartiles = [q1, q2, q3];\n            this.lwhisker = lwhisker;\n            this.rwhisker = rwhisker;\n            this.loutlier = loutlier;\n            this.routlier = routlier;\n\n            unitSize = canvasWidth / (maxValue - minValue + 1);\n            if (options.get('showOutliers')) {\n                canvasLeft = Math.ceil(options.get('spotRadius'));\n                canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));\n                unitSize = canvasWidth / (maxValue - minValue + 1);\n                if (loutlier < lwhisker) {\n                    target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,\n                        canvasHeight / 2,\n                        options.get('spotRadius'),\n                        options.get('outlierLineColor'),\n                        options.get('outlierFillColor')).append();\n                }\n                if (routlier > rwhisker) {\n                    target.drawCircle((routlier - minValue) * unitSize + canvasLeft,\n                        canvasHeight / 2,\n                        options.get('spotRadius'),\n                        options.get('outlierLineColor'),\n                        options.get('outlierFillColor')).append();\n                }\n            }\n\n            // box\n            target.drawRect(\n                Math.round((q1 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight * 0.1),\n                Math.round((q3 - q1) * unitSize),\n                Math.round(canvasHeight * 0.8),\n                options.get('boxLineColor'),\n                options.get('boxFillColor')).append();\n            // left whisker\n            target.drawLine(\n                Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 2),\n                Math.round((q1 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 2),\n                options.get('lineColor')).append();\n            target.drawLine(\n                Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 4),\n                Math.round((lwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight - canvasHeight / 4),\n                options.get('whiskerColor')).append();\n            // right whisker\n            target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 2),\n                Math.round((q3 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 2),\n                options.get('lineColor')).append();\n            target.drawLine(\n                Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight / 4),\n                Math.round((rwhisker - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight - canvasHeight / 4),\n                options.get('whiskerColor')).append();\n            // median line\n            target.drawLine(\n                Math.round((q2 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight * 0.1),\n                Math.round((q2 - minValue) * unitSize + canvasLeft),\n                Math.round(canvasHeight * 0.9),\n                options.get('medianColor')).append();\n            if (options.get('target')) {\n                size = Math.ceil(options.get('spotRadius'));\n                target.drawLine(\n                    Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n                    Math.round((canvasHeight / 2) - size),\n                    Math.round((options.get('target') - minValue) * unitSize + canvasLeft),\n                    Math.round((canvasHeight / 2) + size),\n                    options.get('targetColor')).append();\n                target.drawLine(\n                    Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),\n                    Math.round(canvasHeight / 2),\n                    Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),\n                    Math.round(canvasHeight / 2),\n                    options.get('targetColor')).append();\n            }\n            target.render();\n        }\n    });\n\n    // Setup a very simple \"virtual canvas\" to make drawing the few shapes we need easier\n    // This is accessible as $(foo).simpledraw()\n\n    VShape = createClass({\n        init: function (target, id, type, args) {\n            this.target = target;\n            this.id = id;\n            this.type = type;\n            this.args = args;\n        },\n        append: function () {\n            this.target.appendShape(this);\n            return this;\n        }\n    });\n\n    VCanvas_base = createClass({\n        _pxregex: /(\\d+)(px)?\\s*$/i,\n\n        init: function (width, height, target) {\n            if (!width) {\n                return;\n            }\n            this.width = width;\n            this.height = height;\n            this.target = target;\n            this.lastShapeId = null;\n            if (target[0]) {\n                target = target[0];\n            }\n            $.data(target, '_jqs_vcanvas', this);\n        },\n\n        drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {\n            return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);\n        },\n\n        drawShape: function (path, lineColor, fillColor, lineWidth) {\n            return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);\n        },\n\n        drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {\n            return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);\n        },\n\n        drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n            return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);\n        },\n\n        drawRect: function (x, y, width, height, lineColor, fillColor) {\n            return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);\n        },\n\n        getElement: function () {\n            return this.canvas;\n        },\n\n        /**\n         * Return the most recently inserted shape id\n         */\n        getLastShapeId: function () {\n            return this.lastShapeId;\n        },\n\n        /**\n         * Clear and reset the canvas\n         */\n        reset: function () {\n            alert('reset not implemented');\n        },\n\n        _insert: function (el, target) {\n            $(target).html(el);\n        },\n\n        /**\n         * Calculate the pixel dimensions of the canvas\n         */\n        _calculatePixelDims: function (width, height, canvas) {\n            // XXX This should probably be a configurable option\n            var match;\n            match = this._pxregex.exec(height);\n            if (match) {\n                this.pixelHeight = match[1];\n            } else {\n                this.pixelHeight = $(canvas).height();\n            }\n            match = this._pxregex.exec(width);\n            if (match) {\n                this.pixelWidth = match[1];\n            } else {\n                this.pixelWidth = $(canvas).width();\n            }\n        },\n\n        /**\n         * Generate a shape object and id for later rendering\n         */\n        _genShape: function (shapetype, shapeargs) {\n            var id = shapeCount++;\n            shapeargs.unshift(id);\n            return new VShape(this, id, shapetype, shapeargs);\n        },\n\n        /**\n         * Add a shape to the end of the render queue\n         */\n        appendShape: function (shape) {\n            alert('appendShape not implemented');\n        },\n\n        /**\n         * Replace one shape with another\n         */\n        replaceWithShape: function (shapeid, shape) {\n            alert('replaceWithShape not implemented');\n        },\n\n        /**\n         * Insert one shape after another in the render queue\n         */\n        insertAfterShape: function (shapeid, shape) {\n            alert('insertAfterShape not implemented');\n        },\n\n        /**\n         * Remove a shape from the queue\n         */\n        removeShapeId: function (shapeid) {\n            alert('removeShapeId not implemented');\n        },\n\n        /**\n         * Find a shape at the specified x/y co-ordinates\n         */\n        getShapeAt: function (el, x, y) {\n            alert('getShapeAt not implemented');\n        },\n\n        /**\n         * Render all queued shapes onto the canvas\n         */\n        render: function () {\n            alert('render not implemented');\n        }\n    });\n\n    VCanvas_canvas = createClass(VCanvas_base, {\n        init: function (width, height, target, interact) {\n            VCanvas_canvas._super.init.call(this, width, height, target);\n            this.canvas = document.createElement('canvas');\n            if (target[0]) {\n                target = target[0];\n            }\n            $.data(target, '_jqs_vcanvas', this);\n            $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });\n            this._insert(this.canvas, target);\n            this._calculatePixelDims(width, height, this.canvas);\n            this.canvas.width = this.pixelWidth;\n            this.canvas.height = this.pixelHeight;\n            this.interact = interact;\n            this.shapes = {};\n            this.shapeseq = [];\n            this.currentTargetShapeId = undefined;\n            $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});\n        },\n\n        _getContext: function (lineColor, fillColor, lineWidth) {\n            var context = this.canvas.getContext('2d');\n            if (lineColor !== undefined) {\n                context.strokeStyle = lineColor;\n            }\n            context.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n            if (fillColor !== undefined) {\n                context.fillStyle = fillColor;\n            }\n            return context;\n        },\n\n        reset: function () {\n            var context = this._getContext();\n            context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n            this.shapes = {};\n            this.shapeseq = [];\n            this.currentTargetShapeId = undefined;\n        },\n\n        _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n            var context = this._getContext(lineColor, fillColor, lineWidth),\n                i, plen;\n            context.beginPath();\n            context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);\n            for (i = 1, plen = path.length; i < plen; i++) {\n                context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines\n            }\n            if (lineColor !== undefined) {\n                context.stroke();\n            }\n            if (fillColor !== undefined) {\n                context.fill();\n            }\n            if (this.targetX !== undefined && this.targetY !== undefined &&\n                context.isPointInPath(this.targetX, this.targetY)) {\n                this.currentTargetShapeId = shapeid;\n            }\n        },\n\n        _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n            var context = this._getContext(lineColor, fillColor, lineWidth);\n            context.beginPath();\n            context.arc(x, y, radius, 0, 2 * Math.PI, false);\n            if (this.targetX !== undefined && this.targetY !== undefined &&\n                context.isPointInPath(this.targetX, this.targetY)) {\n                this.currentTargetShapeId = shapeid;\n            }\n            if (lineColor !== undefined) {\n                context.stroke();\n            }\n            if (fillColor !== undefined) {\n                context.fill();\n            }\n        },\n\n        _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n            var context = this._getContext(lineColor, fillColor);\n            context.beginPath();\n            context.moveTo(x, y);\n            context.arc(x, y, radius, startAngle, endAngle, false);\n            context.lineTo(x, y);\n            context.closePath();\n            if (lineColor !== undefined) {\n                context.stroke();\n            }\n            if (fillColor) {\n                context.fill();\n            }\n            if (this.targetX !== undefined && this.targetY !== undefined &&\n                context.isPointInPath(this.targetX, this.targetY)) {\n                this.currentTargetShapeId = shapeid;\n            }\n        },\n\n        _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n            return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);\n        },\n\n        appendShape: function (shape) {\n            this.shapes[shape.id] = shape;\n            this.shapeseq.push(shape.id);\n            this.lastShapeId = shape.id;\n            return shape.id;\n        },\n\n        replaceWithShape: function (shapeid, shape) {\n            var shapeseq = this.shapeseq,\n                i;\n            this.shapes[shape.id] = shape;\n            for (i = shapeseq.length; i--;) {\n                if (shapeseq[i] == shapeid) {\n                    shapeseq[i] = shape.id;\n                }\n            }\n            delete this.shapes[shapeid];\n        },\n\n        replaceWithShapes: function (shapeids, shapes) {\n            var shapeseq = this.shapeseq,\n                shapemap = {},\n                sid, i, first;\n\n            for (i = shapeids.length; i--;) {\n                shapemap[shapeids[i]] = true;\n            }\n            for (i = shapeseq.length; i--;) {\n                sid = shapeseq[i];\n                if (shapemap[sid]) {\n                    shapeseq.splice(i, 1);\n                    delete this.shapes[sid];\n                    first = i;\n                }\n            }\n            for (i = shapes.length; i--;) {\n                shapeseq.splice(first, 0, shapes[i].id);\n                this.shapes[shapes[i].id] = shapes[i];\n            }\n\n        },\n\n        insertAfterShape: function (shapeid, shape) {\n            var shapeseq = this.shapeseq,\n                i;\n            for (i = shapeseq.length; i--;) {\n                if (shapeseq[i] === shapeid) {\n                    shapeseq.splice(i + 1, 0, shape.id);\n                    this.shapes[shape.id] = shape;\n                    return;\n                }\n            }\n        },\n\n        removeShapeId: function (shapeid) {\n            var shapeseq = this.shapeseq,\n                i;\n            for (i = shapeseq.length; i--;) {\n                if (shapeseq[i] === shapeid) {\n                    shapeseq.splice(i, 1);\n                    break;\n                }\n            }\n            delete this.shapes[shapeid];\n        },\n\n        getShapeAt: function (el, x, y) {\n            this.targetX = x;\n            this.targetY = y;\n            this.render();\n            return this.currentTargetShapeId;\n        },\n\n        render: function () {\n            var shapeseq = this.shapeseq,\n                shapes = this.shapes,\n                shapeCount = shapeseq.length,\n                context = this._getContext(),\n                shapeid, shape, i;\n            context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);\n            for (i = 0; i < shapeCount; i++) {\n                shapeid = shapeseq[i];\n                shape = shapes[shapeid];\n                this['_draw' + shape.type].apply(this, shape.args);\n            }\n            if (!this.interact) {\n                // not interactive so no need to keep the shapes array\n                this.shapes = {};\n                this.shapeseq = [];\n            }\n        }\n\n    });\n\n    VCanvas_vml = createClass(VCanvas_base, {\n        init: function (width, height, target) {\n            var groupel;\n            VCanvas_vml._super.init.call(this, width, height, target);\n            if (target[0]) {\n                target = target[0];\n            }\n            $.data(target, '_jqs_vcanvas', this);\n            this.canvas = document.createElement('span');\n            $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});\n            this._insert(this.canvas, target);\n            this._calculatePixelDims(width, height, this.canvas);\n            this.canvas.width = this.pixelWidth;\n            this.canvas.height = this.pixelHeight;\n            groupel = '<v:group coordorigin=\"0 0\" coordsize=\"' + this.pixelWidth + ' ' + this.pixelHeight + '\"' +\n                    ' style=\"position:absolute;top:0;left:0;width:' + this.pixelWidth + 'px;height=' + this.pixelHeight + 'px;\"></v:group>';\n            this.canvas.insertAdjacentHTML('beforeEnd', groupel);\n            this.group = $(this.canvas).children()[0];\n            this.rendered = false;\n            this.prerender = '';\n        },\n\n        _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {\n            var vpath = [],\n                initial, stroke, fill, closed, vel, plen, i;\n            for (i = 0, plen = path.length; i < plen; i++) {\n                vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);\n            }\n            initial = vpath.splice(0, 1);\n            lineWidth = lineWidth === undefined ? 1 : lineWidth;\n            stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n            fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n            closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';\n            vel = '<v:shape coordorigin=\"0 0\" coordsize=\"' + this.pixelWidth + ' ' + this.pixelHeight + '\" ' +\n                 ' id=\"jqsshape' + shapeid + '\" ' +\n                 stroke +\n                 fill +\n                ' style=\"position:absolute;left:0px;top:0px;height:' + this.pixelHeight + 'px;width:' + this.pixelWidth + 'px;padding:0px;margin:0px;\" ' +\n                ' path=\"m ' + initial + ' l ' + vpath.join(', ') + ' ' + closed + 'e\">' +\n                ' </v:shape>';\n            return vel;\n        },\n\n        _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {\n            var stroke, fill, vel;\n            x -= radius;\n            y -= radius;\n            stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"' + lineWidth + 'px\" strokeColor=\"' + lineColor + '\" ';\n            fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n            vel = '<v:oval ' +\n                 ' id=\"jqsshape' + shapeid + '\" ' +\n                stroke +\n                fill +\n                ' style=\"position:absolute;top:' + y + 'px; left:' + x + 'px; width:' + (radius * 2) + 'px; height:' + (radius * 2) + 'px\"></v:oval>';\n            return vel;\n\n        },\n\n        _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {\n            var vpath, startx, starty, endx, endy, stroke, fill, vel;\n            if (startAngle === endAngle) {\n                return '';  // VML seems to have problem when start angle equals end angle.\n            }\n            if ((endAngle - startAngle) === (2 * Math.PI)) {\n                startAngle = 0.0;  // VML seems to have a problem when drawing a full circle that doesn't start 0\n                endAngle = (2 * Math.PI);\n            }\n\n            startx = x + Math.round(Math.cos(startAngle) * radius);\n            starty = y + Math.round(Math.sin(startAngle) * radius);\n            endx = x + Math.round(Math.cos(endAngle) * radius);\n            endy = y + Math.round(Math.sin(endAngle) * radius);\n\n            if (startx === endx && starty === endy) {\n                if ((endAngle - startAngle) < Math.PI) {\n                    // Prevent very small slices from being mistaken as a whole pie\n                    return '';\n                }\n                // essentially going to be the entire circle, so ignore startAngle\n                startx = endx = x + radius;\n                starty = endy = y;\n            }\n\n            if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {\n                return '';\n            }\n\n            vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];\n            stroke = lineColor === undefined ? ' stroked=\"false\" ' : ' strokeWeight=\"1px\" strokeColor=\"' + lineColor + '\" ';\n            fill = fillColor === undefined ? ' filled=\"false\"' : ' fillColor=\"' + fillColor + '\" filled=\"true\" ';\n            vel = '<v:shape coordorigin=\"0 0\" coordsize=\"' + this.pixelWidth + ' ' + this.pixelHeight + '\" ' +\n                 ' id=\"jqsshape' + shapeid + '\" ' +\n                 stroke +\n                 fill +\n                ' style=\"position:absolute;left:0px;top:0px;height:' + this.pixelHeight + 'px;width:' + this.pixelWidth + 'px;padding:0px;margin:0px;\" ' +\n                ' path=\"m ' + x + ',' + y + ' wa ' + vpath.join(', ') + ' x e\">' +\n                ' </v:shape>';\n            return vel;\n        },\n\n        _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {\n            return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);\n        },\n\n        reset: function () {\n            this.group.innerHTML = '';\n        },\n\n        appendShape: function (shape) {\n            var vel = this['_draw' + shape.type].apply(this, shape.args);\n            if (this.rendered) {\n                this.group.insertAdjacentHTML('beforeEnd', vel);\n            } else {\n                this.prerender += vel;\n            }\n            this.lastShapeId = shape.id;\n            return shape.id;\n        },\n\n        replaceWithShape: function (shapeid, shape) {\n            var existing = $('#jqsshape' + shapeid),\n                vel = this['_draw' + shape.type].apply(this, shape.args);\n            existing[0].outerHTML = vel;\n        },\n\n        replaceWithShapes: function (shapeids, shapes) {\n            // replace the first shapeid with all the new shapes then toast the remaining old shapes\n            var existing = $('#jqsshape' + shapeids[0]),\n                replace = '',\n                slen = shapes.length,\n                i;\n            for (i = 0; i < slen; i++) {\n                replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);\n            }\n            existing[0].outerHTML = replace;\n            for (i = 1; i < shapeids.length; i++) {\n                $('#jqsshape' + shapeids[i]).remove();\n            }\n        },\n\n        insertAfterShape: function (shapeid, shape) {\n            var existing = $('#jqsshape' + shapeid),\n                 vel = this['_draw' + shape.type].apply(this, shape.args);\n            existing[0].insertAdjacentHTML('afterEnd', vel);\n        },\n\n        removeShapeId: function (shapeid) {\n            var existing = $('#jqsshape' + shapeid);\n            this.group.removeChild(existing[0]);\n        },\n\n        getShapeAt: function (el, x, y) {\n            var shapeid = el.id.substr(8);\n            return shapeid;\n        },\n\n        render: function () {\n            if (!this.rendered) {\n                // batch the intial render into a single repaint\n                this.group.innerHTML = this.prerender;\n                this.rendered = true;\n            }\n        }\n    });\n\n}))}(document, Math));\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2016, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Provide download from the application\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('download',[ \"jquery\", \"config\", \"laconic\" ],\n       function($, config) {\n\n(function($) {\n  var pluginName = 'downloader';\n\n  /** @lends $.fn.downloader */\n  var methods = {\n    /**\n     * @param {Object} options\n     * @param {String} options.data Content to be sent.\n     * @param {String} [options.filename] (base) name of the downloaded\n     * file.\n     * @param {String} [options.type] MIME type (default\n     * `application/octet-stream`)\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\n\tvar uuid = options.uuid;\n\tvar type = options.content_type || \"application/octet-stream\";\n\tvar name = options.filename || \"swish-download.dat\";\n\n\tfunction aSupportsDownload() {\n\t  return $(\"<a>\")[0].download != undefined;\n\t}\n\n\tif ( !aSupportsDownload() || !type )\n\t  type = \"application/octet-stream\";\n\n\tvar href      = config.http.locations.download + \"/\" +\n\t\t\tencodeURIComponent(name) +\n \t                \"?content_type=\" + encodeURIComponent(type) +\n\t\t\t\"&uuid=\" + uuid;\n\n\telem.attr(\"download\", name);\n\telem.attr(\"href\", href);\n\telem.attr(\"title\", \"Download (use menu for save link as)\");\n\telem.text(name);\n\n\telem.addClass(\"btn btn-primary download\");\n\telem.append($.el.span({class:\"glyphicon glyphicon-download\"}));\n      });\n    }\n  }; // methods\n\n  /**\n   * <Class description>\n   *\n   * @class downloader\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.downloader = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2017, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Run an manage Prolog queries and their output\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n * @requires laconic\n * @requires editor\n */\n\ndefine('runner',[ \"jquery\", \"config\", \"preferences\",\n\t \"cm/lib/codemirror\", \"form\", \"prolog\", \"links\", \"modal\",\n\t \"answer\", \"laconic\", \"sparkline\", \"download\", \"search\"\n       ],\n       function($, config, preferences,\n\t\tCodeMirror, form, prolog, links, modal) {\n\n\t\t /*******************************\n\t\t *\t  THE COLLECTION\t*\n\t\t *******************************/\n\n(function($) {\n  var pluginName = 'prologRunners';\n\n  /** @lends $.fn.prologRunners */\n  var methods = {\n    /**\n     * Initialize the container for Prolog queries.\n     * @example $(\".prolog-runners\").prologRunners();\n     * @param {Object} [options] currently ignored\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\n\n\tfunction runnerMenu() {\n\t  var icon = $.el.span({class:\"glyphicon glyphicon-menu-hamburger\"});\n\t  var menu = form.widgets.dropdownButton(\n\t    icon,\n\t    { divClass:\"runners-menu btn-transparent\",\n\t      ulClass:\"pull-right\",\n\t      client:elem,\n\t      actions:\n\t      { \"Collapse all\": function() {\n\t\t  this.find(\".prolog-runner\").prologRunner('toggleIconic', true);\n\t        },\n\t\t\"Expand all\": function() {\n\t\t  this.find(\".prolog-runner\").prologRunner('toggleIconic', false);\n\t\t},\n\t\t\"Stop all\": function() {\n\t\t  this.find(\".prolog-runner\").prologRunner('stop');\n\t\t},\n\t\t\"Clear\": function() { this.prologRunners('clear'); }\n\t      }\n\t    });\n\n\t  return menu;\n\t}\n\n\tdata.stretch = $($.el.div({class:\"stretch\"}));\n\tdata.inner   = $($.el.div({class:\"inner\"}));\n\n\telem.append(runnerMenu());\n\telem.append(data.stretch);\n\telem.append(data.inner);\n\n\telem.on(\"pane.resize\", function() {\n\t  elem.prologRunners('scrollToBottom', true);\n\t});\n\telem.on(\"scroll-to-bottom\", function(ev, arg) {\n\t  elem.prologRunners('scrollToBottom', arg);\n\t});\n\n\telem.data(pluginName, data);\n      });\n    },\n\n    /**\n     * Run a Prolog query.  The methods appends a `<div>` and runs the\n     * plugin `prologRunner` on the new div.\n     * @param {Object} query\n     * @param {String} query.query the Prolog query to prove\n     * @param {String} [query.source] the Prolog program\n     * @param {prologEditor} [query.editor] the source editor\n     * @param {Boolean} [query.iconifyLast=true] define whether or not\n     * to iconify the previous runner.\n     * @param {Boolean} [query.tabled=false] if `true`, make a table with\n     * the results.\n     */\n    run: function(query) {\n      var data = this.data('prologRunners');\n\n      if ( query.iconifyLast )\n\tthis.prologRunners('iconifyLast');\n\n      var runner = $.el.div({class: \"prolog-runner\"});\n\n      data.inner.append(runner);\n      $(runner).prologRunner(query);\n      this.trigger('scroll-to-bottom');\n\n      return this;\n    },\n\n    /**\n     * Destroy all runners and, if applicable, their associated\n     * pengines.\n     */\n    clear: function() {\n      this.find(\".prolog-runner\").prologRunner('close');\n    },\n\n    /**\n     * Iconify the last runner if it is not associated to an open\n     * query.\n     */\n    iconifyLast: function() {\n      var jrunner = $(this.inner).children().last();\n\n      if ( jrunner.length == 1 )\n      { var runner = jrunner.prologRunner();\n\n\tif ( !runner.alive() )\n\t  runner.toggleIconic(true);\n      }\n\n      return this;\n    },\n\n    /**\n     * Keep the content at the bottom of the window, such that the\n     * buttons remain in the same position.  The only way to achieve\n     * this is by putting something on top of the content as long as\n     * the content is lower than the window.\n     *\n     * @param {Boolean} [onlydown=false] only scroll down if we are\n     * not at the bottom.\n     */\n    // the \"- 4\" compensates for the prolog-runner top&bottom margin.\n    scrollToBottom: function(onlydown) {\n      this.each(function() {\n\tvar elem = $(this);\n\tvar data   = elem.data('prologRunners');\n\tvar height = data.inner.height();\n\tvar room   = elem.height() - height - 4 - 2;\n\n\tif ( room > 0 || onlydown !== true ) {\n\t  data.stretch.height(room > 0 ? room : 0);\n\t  elem.scrollTop(height);\n\t}\n      });\n\n      return this;\n    }\n  }; // methods\n\n  /**\n   * Manage a subwindow (`<div>`) that acts as a collection of runner\n   * items.  Each runner represents a Prolog query, either active or\n   * terminated.  The collection keeps the runners properly stacked and\n   * provides a menu to control the collection, such as _clear_,\n   * _iconify all_, etc.\n   *\n   * @class prologRunners\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n  $.fn.prologRunners = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n\n\t\t /*******************************\n\t\t *\tINDIVIDUAL RUNNER\t*\n\t\t *******************************/\n\n(function($) {\n  var pluginName = 'prologRunner';\n\n  // keyBindings rely on the jQuery normalized `which` field\n  var keyBindings = { 59:      'next',\t\t/* ; (FF) */\n\t\t      186:     'next',\t\t/* ; (Chromium) */\n\t\t      32:      'next',\t\t/* space */\n\t\t      190:     'stop',\t\t/* . */\n\t\t      13:      'stop',\t\t/* Enter */\n\t\t      65:      'stopOrAbort',\t/* a */\n\t\t      27:      'stopOrAbort',\t/* Esc */\n\t\t      46:      'close',\t\t/* Del */\n\t\t      112:     'help'\t\t/* F1 */\n                    };\n\n  /** @lends $.fn.prologRunner */\n  var methods = {\n    /**\n     * Initialize a runner for a Prolog query\n     * @param {Object} query\n     * @param {String} query.query the Prolog query to prove\n     * @param {String} [query.source] the Prolog program\n     * @param {Boolean} [query.tabled=false]  If `true`, represent the\n     * results as a table.\n     * @param {Boolean} [query.title=true] If `false`, suppress the\n     * title.\n     * @param {Function} [query.success] Called when the query completed\n     * with success (`true`).  `this` is the runner, the first argument\n     * is the Pengine.\n     * @param {Function} [query.complete] Called when the query\n     * completed, regardless of the result. Passes the same arguments as\n     * `query.success`. The `state` property of the Pengine contains the\n     * result state.  See `this.setState()`.\n     */\n    _init: function(query) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\n\n\tfunction titleBarButton(glyph, title, action, display) {\n\t  var btn = $.el.button({title:title, class:\"rtb-\"+action},\n\t\t\t\t$.el.span({class:\"glyphicon glyphicon-\"+glyph}));\n\t  $(btn).on(\"click\", function() { elem.prologRunner(action); });\n\t  if ( display == false )\n\t    $(btn).hide();\n\t  return btn;\n\t}\n\n\tfunction stateButton() {\n\t  var icon = $.el.span({class:\"runner-state show-state idle\"});\n\n\t  return form.widgets.dropdownButton(icon);\n\t}\n\n\tfunction controllerDiv() {\n\t  function next()     { elem.prologRunner('next',    1); }\n\t  function next10()   { elem.prologRunner('next',   10); }\n\t  function next100()  { elem.prologRunner('next',  100); }\n\t  function next1000() { elem.prologRunner('next', 1000); }\n\t  function stop()     { data.prolog.stop(); }\n\t  function abort()    { data.prolog.abort(); }\n\n\t  function button(action, label) {\n\t    var btn = $.el.button(label);\n\t    $(btn).on(\"click\", action);\n\t    return btn;\n\t  }\n\n\t  function input() {\n\t    var inp = $.el.input({class:\"prolog-input\"});\n\t    var btn = $.el.button(\"Send\");\n\n\t    $(inp).keypress(function(ev) {\n\t\t\t      if ( ev.which == 13 &&\n\t\t\t\t   elem.prologRunner('respond', $(inp).val()) ) {\n\t\t\t\t$(inp).val(\"\");\n\t\t\t\tev.preventDefault();\n\t\t\t\treturn false;\t\t/* prevent bubbling */\n\t\t\t      } else if ( ev.key != \"Esc\" ) {\n\t\t\t\tev.stopPropagation();   /* prevent bubbling */\n\t\t\t      }\n\t\t\t    });\n\t    $(btn).on(\"click\", function() {\n\t\t\t\t elem.prologRunner('respond', $(inp).val());\n\t\t\t       });\n\n\t    return {input:inp, button:btn};\n\t  }\n\n\t  function statusChart() {\n\t    var spark = $.el.span({class:\"sparklines\"}, \"\");\n\n\t    return spark;\n\t  }\n\n\t  var inp = input();\n\t  var div = $.el.div({class:\"controller show-state\"},\n\t\t\t     $.el.span({class:\"running\"},\n\t\t\t\t       button(abort, \"Abort\")),\n\t\t\t     $.el.span({class:\"wait-next\"},\n\t\t\t\t       button(next, \"Next\"),\n\t\t\t\t       button(next10, \"10\"),\n\t\t\t\t       button(next100, \"100\"),\n\t\t\t\t       button(next1000, \"1,000\"), \" \",\n\t\t\t\t       button(stop, \"Stop\")),\n\t\t\t     $.el.span({class:\"wait-input\"},\n\t\t\t\t       button(abort, \"Abort\"), inp.button,\n\t\t\t\t       $.el.span(inp.input)),\n\t\t\t     statusChart());\n\n\t  return div;\n\t}\n\n\telem.addClass(\"prolog-runner panel panel-default\");\n\tif ( query.tabled )\n\t  elem.addClass(\"tabled\");\n\tif ( query.title != false ) {\n\t  var qspan = $.el.span({class:\"query cm-s-prolog\"});\n\t  CodeMirror.runMode(query.query, \"prolog\", qspan);\n\t  elem.append($.el.div(\n\t    {class:\"runner-title panel-heading\"},\n\t    titleBarButton(\"remove-circle\", \"Close\",        'close'),\n\t    titleBarButton(\"minus\",         \"Iconify\",      'toggleIconic'),\n\t    titleBarButton(\"download\",      \"Download CSV\", 'downloadCSV'),\n\t    titleBarButton(\"link\",          \"Permalink\",    'permalink', false),\n\t    stateButton(),\n\t    qspan,\n            $.el.br({clear:\"all\"})));\n\t} else {\n\t  elem.append($.el.div(\n\t    {class:\"runner-title runner-button-group\"},\n\t    titleBarButton(\"remove-circle\", \"Close\",        'close'),\n\t    titleBarButton(\"minus\",         \"Iconify\",      'toggleIconic'),\n\t    titleBarButton(\"download\",      \"Download CSV\", 'downloadCSV'),\n\t    titleBarButton(\"link\",          \"Permalink\",    'permalink', false)));\n\t}\n\tif ( query.chunk )\n\t  data.chunk = query.chunk;\n\telem.append($.el.div({class:\"runner-results panel-body\"}));\n\telem.append(controllerDiv());\n\n\telem.data('prologRunner', data);\n\n\telem.prologRunner('populateActionMenu');\n\telem.keydown(function(ev) {\n\t  if ( elem.prologRunner('getState') != \"wait-input\" &&\n\t       !$(ev.target).is(\"input\") &&\n\t       !ev.ctrlKey && !ev.altKey ) {\n\n\t    if ( keyBindings[ev.which] ) {\n\t      ev.preventDefault();\n\t      elem.prologRunner(keyBindings[ev.which]);\n\t    }\n\t  }\n\t});\n\telem.on(\"click\", \"a\", links.followLink);\n\n\tdata.savedFocus = document.activeElement;\n\telem.attr('tabindex', -1);\n\telem.focus();\n\n\tdata.query   = query;\n\tdata.answers = 0;\n\n\telem.prologRunner('setScreenDimensions');\n\n\t/* Load pengines.js incrementally because we wish to ask the\n\t   one from the pengine server rather than a packaged one.\n\t*/\n\n\trequire([config.http.locations.pengines+\"/pengines.js\"],\n\t\tfunction() {\n\n\t  data.prolog = new Pengine({\n\t    server: config.http.locations.pengines,\n\t    runner: elem,\n\t    application: \"swish\",\n\t    src: query.source,\n\t    destroy: false,\n\t    format: 'json-html',\n\t    oncreate: handleCreate,\n\t    onsuccess: handleSuccess,\n\t    onfailure: handleFailure,\n\t    onstop: handleStop,\n\t    onprompt: handlePrompt,\n\t    onoutput: handleOutput,\n\t    onping: handlePing,\n\t    onerror: handleError,\n\t    onabort: handleAbort});\n\t  data.prolog.state = \"idle\";\n\t  if ( config.swish.ping && data.prolog.ping != undefined ) {\n\t    data.prolog.ping(config.swish.ping*1000);\n\t  }\n\t});\n\n\treturn this;\n      });\n    }, //_init()\n\n    setScreenDimensions: function() {\n      var data = this.data(pluginName);\n      var pre  = $.el.pre({class: \"measure\"}, \"xxxxxxxxxx\");\n      var sw   = this.width();\n      var sh;\n      var container;\n\n      container = this.closest(\".prolog-runners\");\n      if ( container.length == 0 )\n\tcontainer = this.closest(\".nb-view\");\n      if ( container.length )\n\tsh = container.height();\n\n      this.append(pre);\n      var cw = $(pre).width()/10;\n      var ch = $(pre).height();\n      $(pre).remove();\n\n      data.screen = {\n        width: sw,\n\tcols: Math.floor(sw/cw)\n      };\n      if ( sh !== undefined ) {\n\tdata.screen.height = sh;\n\tdata.screen.rows   = Math.floor(sh/ch);\n      }\n    },\n\n    /**\n     * Add a _positive_ answer to the runner.  The answer is embedded in\n     * a `<div class=\"answer\">` with an additional class `\"even\"` or\n     * `\"odd\"` to simplify styling. Note that using CSS odd/even\n     * selectors is not possible because there are other elements such\n     * as errors.\n     * @param {Answer} answer pengine response in `json-html`\n     */\n    renderAnswer: function(answer) {\n      var data = this.data('prologRunner');\n      var even = (++data.answers % 2 == 0);\n      var obj = removeSpecialBindings(answer);\n\n      function removeSpecialBindings(answer) {\n\tvar obj = {};\n\tvar bindings = answer.variables;\n\tvar projection = answer.projection;\n\tvar prefix = \"_swish__\";\n\n\tfor (var i = 0; i < bindings.length; i++) {\n\t  var vars = bindings[i].variables;\n\n\t  for (var v = 0; v < vars.length; v++) {\n\t    if ( vars[v].startsWith(prefix) ) {\n\t      var name = vars[v].replace(prefix, \"\");\n\t      obj[name] = bindings[i].value;\n\t      bindings.splice(i, 1);\n\t      i--;\n\t    }\n\t  }\n\t}\n\n\tif ( projection ) {\n\t  for(var i = 0; i < projection.length; i++) {\n\t    if ( projection[i].startsWith(prefix) ) {\n\t      projection.splice(i, 1);\n\t      i--;\n\t    }\n\t  }\n\t}\n\n\treturn obj;\n      }\n\n      // Would be better to avoid wrapping in HTML, but that\n      // requires extending pengines_io.pl\n      if ( obj.permahash ) {\n\tdata.permahash = $(obj.permahash).text().replace(/'/g,\"\");\n\tthis.find(\".rtb-permalink\").show({duration:400});\n      }\n\n      if ( data.query.tabled ) {\n\tif ( data.answers == 1 ) {\n\t  if ( answer.projection && answer.projection.length > 0 ) {\n\t    var table = answerTable(answer.projection);\n\t    addAnswer(this, table);\n\t    data.table = table;\n\t    data.projection = answer.projection;\n\t    answer.nth = data.answers;\n\t    $(data.table).prologAnswer(answer);\n\t    return this;\n\t  }\n        } else\n\t{ answer.projection = data.projection;\n\t  answer.nth = data.answers;\n\t  $(data.table).prologAnswer(answer);\n\t  return this;\n\t}\n      }\n\n      var div = $.el.div({class:\"answer \"+(even ? \"even\" : \"odd\")},\n\t\t\t $.el.span({class:\"answer-no\"}, data.answers));\n\n      addAnswer(this, div);\n      $(div).prologAnswer(answer);\n    },\n\n    /**\n     * Add pengine output as `<span class=\"output\">`\n     * @param {String} data HTML that is inserted into the span.\n     * @return {DOM} the added node (a span)\n     */\n    outputHTML: function(data) {\n      var span = $.el.span({class:\"output\"});\n      addAnswer(this, span);\n      span.innerHTML = data;\n      runScripts(span);\n      return span;\n    },\n\n    /**\n     * Handle object output\n     */\n     downloadButton: function(obj) {\n       var button = $.el.a({class:\"download\"});\n       addAnswer(this, button);\n       $(button).downloader(obj);\n     },\n\n    /**\n     * Display a syntax error in the query.\n     * {Object} options\n     * {String} options.message is the message\n     * {Object} options.location contains the `line` and `ch` position\n     */\n     syntaxError: function(options) {\n       var data = this.data(pluginName);\n\n       options.data = \"<pre class=\\\"output msg-error\\\">\" +\n\t\t      options.message +\n\t\t      \"</pre>\";\n       options.location.file = true;\n       $(data.query.query_editor).prologEditor('highlightError', options);\n       return this;\n     },\n\n    /**\n     * Add an error message to the output.  The error is\n     * wrapped in a `<pre class=\"error\">` element.\n     * @param {String|Object} options If `options` is a string, it is a\n     * plain-text error message.  Otherwise it is the Pengine error\n     * object.\n     * @param {String} options.message is the plain error message\n     * @param {String} options.code is the error code\n     */\n    error: function(options) {\n      var msg;\n\n      if ( typeof(options) == 'object' ) {\n\tif ( options.code == \"died\" ) {\n\t  addAnswer(this, $.el.div({\n\t    class:\"RIP\",\n\t    title:\"Remote pengine timed out\"\n\t  }));\n\t  return this;\n\t} else if ( options.code == \"syntax_error\" )\n\t{ var m = options.message.match(/^HTTP:DATA:(\\d+):(\\d+):\\s*(.*)/);\n\n\t  if ( m && m.length == 4 ) {\n\t    this.prologRunner('syntaxError',\n\t\t\t      { location:\n\t\t\t\t{ line: parseInt(m[1])-1,\n\t\t\t\t  ch:\tparseInt(m[2])\n\t\t\t\t},\n\t\t\t\tmessage: m[3]\n\t\t\t      });\n\t    msg = \"Cannot run query due to a syntax error (check query window)\";\n\t  }\n\t}\n\tif ( !msg )\n\t  msg = options.message;\n      } else\n\tmsg = options;\n\n      addAnswer(this, $.el.pre({class:\"prolog-message msg-error\"}, msg));\n      return this;\n    },\n\n    /**\n     * Handle trace events\n     */\n    trace: function(data) {\n      var elem = this;\n      var goal = $.el.span({class:\"goal\"});\n      var prompt = data.data;\n      $(goal).html(prompt.goal);\n\n      function capitalizeFirstLetter(string) {\n\treturn string.charAt(0).toUpperCase() + string.slice(1);\n      }\n\n      function button(label, action, context) {\n\tvar btn = $.el.button({class:action,\n\t\t\t       title:label\n\t\t\t      },\n\t\t\t      $.el.span(label));\n\t$(btn).on(\"click\", function(ev) {\n\t  if ( context !== undefined ) {\n\t    action += \"(\"+Pengine.stringify(context(ev))+\")\";\n\t  }\n\t  data.pengine.respond(action);\n\t  $(ev.target).parent().remove();\n\t});\n\treturn btn;\n      }\n\n      addAnswer(this,\n\t\t$.el.div({class:\"prolog-trace\"},\n\t\t\t $.el.span({ class:\"depth\",\n\t\t\t             style:\"width:\"+(prompt.depth*5-1)+\"px\"\n\t\t\t\t   }, \"\\u00A0\"), /* &nbsp; */\n\t\t\t $.el.span({ class:\"port \"+prompt.port\n\t\t\t           },\n\t\t\t\t   capitalizeFirstLetter(prompt.port),\n\t\t\t\t   \":\"),\n\t\t\t goal));\n      if ( prompt.port == \"exception\" )\n\taddAnswer(this,\n\t\t  $.el.div({class:\"prolog-exception\"},\n\t\t\t   prompt.exception.message));\n      addAnswer(this,\n\t\t$.el.div({class:\"trace-buttons\"},\n\t\t\t button(\"Continue\",  \"nodebug\", function(ev) {\n\t\t\t   return breakpoints($(ev.target)\n\t\t\t\t    .closest(\".prolog-runner\"));\n\t\t\t }),\n\t\t\t button(\"Step into\", \"continue\"),\n\t\t\t button(\"Step over\", \"skip\"),\n\t\t\t button(\"Step out\",  \"up\"),\n\t\t\t button(\"Retry\",     \"retry\"),\n\t\t\t button(\"Abort\",     \"abort\")));\n\n      this.closest(\".swish\")\n          .find(\".tabbed\")\n          .trigger(\"trace-location\", prompt);\n\n      this.prologRunner('setState', \"wait-debug\");\n    },\n\n    /**\n     * set the placeholder of the input field.  This is normally\n     * done from the pengine's onprompt handler\n     * @param {String} p the new placeholder\n     */\n    setPrompt: function(p) {\n      this.find(\".controller input\").attr(\"placeholder\", p);\n    },\n\n    /**\n     * Support arbitrary jQuery requests from Prolog\n     */\n    jQuery: function(prompt) {\n      var request = prompt.data;\n      var receiver;\n\n      console.log(request);\n\n      if ( typeof(request.selector) == \"string\" ) {\n\treceiver = $(request.selector);\n      } else if ( typeof(request.selector) == \"object\" ) {\n\tswitch(request.selector.root) {\n\t  case \"this\":\t   root = this; break;\n\t  case \"cell\":\t   root = this.closest(\".nb-cell\");  break;\n\t  case \"notebook\": root = this.closest(\".notebook\"); break;\n\t  case \"swish\":\t   root = this.closest(\".swish\");    break;\n\t}\n\tif ( request.selector.sub == \"\" ) {\n\t  receiver = root;\n\t} else {\n\t  receiver = root.find(request.selector.sub);\n\t}\n      }\n\n      console.log(receiver);\n      var result = receiver[request.method].apply(receiver, request.arguments);\n      console.log(result);\n\n      prompt.pengine.respond(Pengine.stringify(result));\n    },\n\n    /**\n     * Handle a (dashboard) form.  This opens dialog from the supplied\n     * `html`.\n     * @param {Object} prompt\n     * @param {String} prompt.html contains the HTML content of the form\n     */\n    form: function(prompt) {\n      var data = this.data('prologRunner');\n\n      modal.show({\n\ttitle: \"Please enter parameters\",\n\tbody: function() {\n\t  this.html(prompt.data.html);\n\t  this.find(\"[data-search-in]\").search({search:false});\n\n\t  this.on(\"click\", \"button[data-action]\", function(ev) {\n\t    var button = $(ev.target).closest(\"button\");\n\t    var action = button.data('action');\n\n\t    if ( action == 'run' ) {\n\t      var formel = $(ev.target).closest(\"form\");\n\t      var fdata  = form.serializeAsObject(formel, true);\n\t      var s      = Pengine.stringify(fdata);\n\t      data.prolog.respond(s);\n\t    } else if ( action == 'cancel' ) {\n\t      data.prolog.respond(\"cancel\");\n\t    }\n\t    button.closest(\".modal\").modal('hide');\n\n\t    ev.preventDefault();\n\t    return false;\n\t  });\n\t}\n      });\n    },\n\n\n    /**\n     * send a response (to pengine onprompt handler) to the\n     * pengine and add the response to the dialogue as\n     * `div class=\"response\">`\n     * @param {String} s plain-text response\n     */\n    respond: function(text) {\n      var data = this.data('prologRunner');\n\n      if ( data.wait_for == \"term\" ) {\n\ts = termNoFullStop(text);\n\tif ( s == \"\" )\n\t  return null;\n      } else {\n\ts = Pengine.stringify(text+\"\\n\");\n      }\n\n      addAnswer(this, $.el.div({class:\"response\"}, text));\n      data.prolog.respond(s);\n      return this;\n    },\n\n    /**\n     * Stop the associated Prolog engines.\n     */\n    stop: function() {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data('prologRunner');\n\tdata.prolog.stop();\n      });\n    },\n\n    /**\n     * Stop the pengine if it is waiting for a next solution,\n     * abort it if it is running or waitin for input and ignore\n     * otherwise.\n     */\n    stopOrAbort: function() {\n      return this.each(function() {\n\tvar elem  = $(this);\n\tvar data  = elem.data('prologRunner');\n\tvar state = elem.prologRunner('getState');\n\n\tswitch(state)\n\t{ case \"running\":\n\t  case \"wait-input\":\n\t    data.prolog.abort();\n\t    break;\n\t  case \"wait-next\":\n\t    data.prolog.stop();\n\t}\n      });\n    },\n\n    /**\n     * Ask the associated Prolog engines for the next answer.\n     * @param {Integer} chunk maximum number of answers to return in the\n     * next chunk.\n     */\n    next: function(chunk) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data('prologRunner');\n\tdata.prolog.next(chunk);\n\telem.prologRunner('setState', \"running\");\n      });\n    },\n\n    /**\n     * Abort the associated Prolog engine.\n     */\n    abort: function() {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data('prologRunner');\n\tdata.prolog.abort();\n      });\n    },\n\n    /**\n     * If the associated pengine is alive, send it a `destroy`.  Next,\n     * remove the runner from its container.\n     */\n    close: function() {\n      if ( this.length ) {\n\tvar parents = this.parent();\n\n\tthis.each(function() {\n\t  var elem = $(this);\n\t  var data = elem.data('prologRunner');\n\n\t  if ( elem.prologRunner('alive') ) {\n\t    $(\".prolog-editor\").trigger('pengine-died', data.prolog.id);\n\t    data.prolog.abort();\n\t    elem.prologRunner('setState', 'aborted');\n\t  }\n\t});\n\tthis.remove();\n\n\tparents.trigger('scroll-to-bottom', true);\n      }\n      return this;\n    },\n\n    /**\n     * Provide help on running a query\n     */\n     help: function() {\n       $(\".swish-event-receiver\").trigger(\"help\", {file:\"runner.html\"});\n     },\n\n    /**\n     * Toggle or set the iconic state of the runner.\n     * @param {Boolean} [on] if `true`, make iconify, `false` expanded\n     * and toggle if unspecified\n     */\n    toggleIconic: function(on) {\n      if ( on == undefined ) {\n\tthis.toggleClass(\"iconic\");\n      } else if ( on ) {\n\tthis.addClass(\"iconic\");\n      } else {\n\tthis.removeClass(\"iconic\");\n      }\n\n      this.trigger('scroll-to-bottom', true);\n\n      return this;\n    },\n\n    /**\n     * Populate the menu associated with the pengine icon.\n     * @param {Object} [actions] associates labels with functions.\n     */\n    populateActionMenu: function(actions) {\n      var menu = this.find(\".runner-title .btn-group.dropdown\");\n\n      actions = $.extend({ \"Re-run\": function() { console.log(\"Re-Run \", this); }\n\t\t\t }, actions);\n\n      form.widgets.populateMenu(menu, this, actions);\n\n      return this;\n    },\n\n    /**\n     * Download query results as CSV.\n     */\n    downloadCSV: function(options) {\n      var data = this.data('prologRunner');\n      var query = termNoFullStop(data.query.query);\n\n      prolog.downloadCSV(query, data.query.source, options);\n\n      return this;\n    },\n\n    /**\n     * Save a permalink\n     */\n    permalink: function() {\n      var runner = this;\n      var data = this.data('prologRunner');\n\n      if ( data.permahash ) {\n\tvar href = config.http.locations.permalink + data.permahash;\n\thref = location.protocol + \"//\" + location.host + href;\n\tvar profile = $(\"#login\").login('get_profile',\n\t\t\t\t\t[ \"display_name\", \"avatar\", \"email\",\n\t\t\t\t\t  \"identity\"\n\t\t\t\t\t]);\n\tvar author  = profile.display_name;\n\n\tfunction savePermalink() {\n\t  this.append($.el.form(\n            { class:\"form-horizontal\"},\n\t      form.fields.hidden(\"identity\", profile.identity),\n\t      profile.identity ? undefined :\n\t\t\t       form.fields.hidden(\"avatar\", profile.avatar),\n\t      form.fields.link(href),\n\t      form.fields.fileName(null, false),\n\t      form.fields.title(),\n\t      form.fields.description(),\n\t      form.fields.tags([]),\n\t      form.fields.author(author, profile.identity),\n\t      form.fields.buttons(\n\t      { label: \"Save permalink\",\n\t\taction: function(ev, as) {\n\t\t\t  runner.prologRunner('save_permalink', as);\n\t\t\t  return false;\n\t\t\t}\n\t      })));\n\t}\n\n\tform.showDialog({\n\t  title: \"Save permalink\",\n\t  body:\t savePermalink\n\t});\n      } else {\n\tmodal.alert(\"No permahash\");\n      }\n\n      return this;\n    },\n\n    save_permalink: function(as) {\n      var runner = this;\n      var data = this.data('prologRunner');\n      var post = {\n        data: data.permahash,\n\ttype: \"lnk\",\n\tmeta: as\n      };\n\n      delete post.meta.link;\n\n      $.ajax({ url: config.http.locations.web_storage,\n               dataType: \"json\",\n\t       contentType: \"application/json\",\n\t       type: \"POST\",\n\t       data: JSON.stringify(post),\n\t       success: function(reply) {\n\t\t if ( reply.error ) {\n\t\t   modal.alert(errorString(\"Could not save\", reply));\n\t\t } else {\n\t\t   modal.feedback({ html: \"Saved\",\n\t\t\t\t    owner: runner\n\t\t                  });\n\t\t }\n\t       },\n\t       error: function(jqXHR, textStatus, errorThrown) {\n\t\t if ( jqXHR.status == 403 ) {\n\t\t   modal.alert(\"Permission denied.  Please try a different name\");\n\t\t } else {\n\t\t   alert('Save failed: '+textStatus);\n\t\t }\n\t       }\n             });\n\n      return this;\n    },\n\n  /**\n   * @param {String} state defines the new state of the pengine.\n   * Known states are:\n   *\n   *   - \"idle\"\t      - Pengine is not yet created\n   *   - \"running\"    - Pengine is running\n   *   - \"wait-next\"  - Pengine produced a non-deterministic answer\n   *   - \"wait-input\" - Pengine waits for input\n   *   - \"wait-debug\" - Pengine waits for for debugger reply\n   *   - \"true\"       - Pengine produced the last answer\n   *   - \"false\"      - Pengine failed\n   *   - \"error\"      - Pengine raised an error\n   *   - \"stopped\"    - User selected *stop* after non-det answer\n   *   - \"aborted\"    - User aborted execution\n   *\n   * The widget is brought to the new  state   by  adding the state as a\n   * class to all members of  the   class  `show-state`, which currently\n   * implies the pengines icon at the   top-left  and a _controller_ div\n   * created by controllerDiv().\n   */\n   setState: function(state) {\n     var data = this.data('prologRunner');\n\n     if ( !data )\n       return;\n\n     if ( data.prolog.state != state ) {\n       var stateful = this.find(\".show-state\");\n       var query = data.query;\n\n       stateful.removeClass(data.prolog.state).addClass(state);\n       data.prolog.state = state;\n       if ( !aliveState(state) && data.savedFocus ) {\n\t $(data.savedFocus).focus();\n\t data.savedFocus = null;\n       } else if ( state == \"wait-input\" ) {\n\t this.find(\"input\").focus();\n       }\n\n       if ( state == \"true\" && query.success )\n\t query.success.call(this, data.prolog);\n       if ( !aliveState(state) && query.complete )\n\t query.complete.call(this, data.prolog);\n     }\n\n     var runners = RS(this);\n     if ( !aliveState(state) ) {\n       var elem = this;\n       $(\".prolog-editor\").trigger('pengine-died', data.prolog.id);\n       data.prolog.destroy();\n       setTimeout(function() { elem.trigger('scroll-to-bottom') }, 100);\n     } else if ( state == \"wait-next\" || state == \"true\" ) {\n       var elem = this;\n       setTimeout(function() { elem.trigger('scroll-to-bottom') }, 100);\n     } else {\n       this.trigger('scroll-to-bottom');\n     }\n\n     return this;\n   },\n\n   /** @returns {String} representing the current state of the\n    * query execution.\n    * @see {@link setState}\n    */\n   getState: function() {\n     var data = this.data('prologRunner');\n\n     return data.prolog ? data.prolog.state : \"idle\";\n   },\n\n   /**\n    * @returns {Boolean} true if the related pengine is alive.  That\n    * means it has state `\"running\"`, `\"wait-next\"`, `\"wait-input\"` or\n    * `\"wait-debug\"`\n    */\n   alive: function() {\n     return aliveState(this.prologRunner('getState'));\n   },\n\n   /**\n    * Handle ping data, updating the sparkline status\n    */\n   ping: function(stats) {\n     var data = this.data('prologRunner');\n\n     if ( data && data.prolog && data.prolog.state == \"running\" ) {\n       var spark = this.find(\".sparklines\");\n       var stacks = [\"global\", \"local\", \"trail\"];\n       var colors = [\"red\", \"blue\", \"green\"];\n       var names  = [\"Global \", \"Local \", \"Trail \"];\n       var maxlength = 10;\n\n       if ( !data.stacks )\n\t data.stacks = { global:{usage:[]}, local:{usage:[]}, trail:{usage:[]} };\n\n       for(i=0; i<stacks.length; i++) {\n\t var s = stacks[i];\n\t var limit = stats.stacks[s].limit || stats.stacks.total.limit;\n\t var usage = stats.stacks[s].usage;\n\n\t var u = Math.log10((usage/limit)*10000);\n\t function toBytes(limit, n) {\n\t   var bytes = Math.round((Math.pow(10, n)/10000)*limit);\n\n\t   function numberWithCommas(x) {\n\t     x = x.toString();\n\t     var pattern = /(-?\\d+)(\\d{3})/;\n\t     while (pattern.test(x))\n\t       x = x.replace(pattern, \"$1,$2\");\n\t     return x;\n\t   }\n\n\t   return numberWithCommas(bytes);\n\t }\n\n\t data.stacks[s].limit = limit;\n\t if ( data.stacks[s].usage.length >= maxlength )\n\t   data.stacks[s].usage = data.stacks[s].usage.slice(1);\n\t data.stacks[s].usage.push(u);\n\t spark.sparkline(data.stacks[s].usage,\n\t\t\t { height: \"2em\",\n\t\t\t   composite: i>0,\n\t\t\t   chartRangeMin: 0,\n\t\t\t   chartRangeMax: 4,\n\t\t\t   lineColor: colors[i],\n\t\t\t   tooltipPrefix: names[i],\n\t\t\t   tooltipSuffix: \" bytes\",\n\t\t\t   tooltipChartTitle: i == 0 ? \"Stack usage\" : undefined,\n\t\t\t   numberFormatter: function(n) {\n\t\t\t     return toBytes(limit, n);\n\t\t\t   }\n\t\t\t });\n       }\n     }\n   }\n\n  }; // methods\n\n\n\t\t /*******************************\n\t\t *     PRIVATE FUNCTIONS\t*\n\t\t *******************************/\n\n  function RS(from) {\t\t\t/* find runners from parts */\n    return $(from).closest(\".prolog-runners\");\n  }\n\n  function addAnswer(runner, html) {\n    var results = runner.find(\".runner-results\");\n    results.append(html);\n    return this;\n  }\n\n  function aliveState(state) {\n    switch( state )\n    { case \"running\":\n      case \"wait-next\":\n      case \"wait-input\":\n      case \"wait-debug\":\n\treturn true;\n      default:\n\treturn false;\n    }\n  }\n\n  function answerTable(projection) {\n    var tds = [{class:\"projection\"}];\n\n    for(i=0; i<projection.length; i++)\n      tds.push($.el.th({class:\"pl-pvar\"}, projection[i]));\n    tds.push($.el.th({class:\"answer-nth\"}, \"\"));\n\n    var table = $.el.table({class:\"prolog-answers\"},\n\t\t\t   $.el.tbody($.el.tr.apply(this, tds)));\n\n    return table;\n  }\n\n\t\t /*******************************\n\t\t *\t SCRIPTS IN NODES\t*\n\t\t *******************************/\n\n  var node_id = 1;\n  function runScripts(elem) {\n    var scripts = [];\n    elem = $(elem);\n\n    elem.find(\"script\").each(function() {\n      var type = this.getAttribute('type')||\"text/javascript\";\n      if ( type == \"text/javascript\" )\n\tscripts.push(this.textContent);\n    });\n\n    if ( scripts.length > 0 ) {\n      var script = \"(function(node){\" + scripts.join(\"\\n\") + \"})\";\n      var node = new Node({\n        node: elem[0]\n      });\n\n      try {\n\teval(script)(node);\n      } catch(e) {\n\talert(e);\n      }\n    }\n  }\n\n  function Node(options) {\n    this.my_node = options.node;\n  }\n\n  Node.prototype.node = function() {\n    return $(this.my_node);\n  }\n\n  /**\n   * Provide a unique id for the node.  This can be used as prefix to\n   * avoid conflicts for `id` attributes.\n   */\n  Node.prototype.unique_id = function() {\n    if ( !this.uid )\n      this.uid = node_id++;\n    return this.uid;\n  }\n\n\n\t\t /*******************************\n\t\t *   HANDLE PROLOG CALLBACKS\t*\n\t\t *******************************/\n\n  function breakpoints(runner) {\n    var data = runner.data(pluginName);\n\n    return $(runner).parents(\".swish\").swish('breakpoints', data.prolog.id);\n  }\n\n  function registerSources(pengine) {\n    var runner = pengine.options.runner;\n    var data   = runner.data(pluginName);\n\n    if ( data.query.editor )\n      $(data.query.editor).prologEditor('pengine', {add: pengine.id});\n  }\n\n  function handleCreate() {\n    var elem = this.pengine.options.runner;\n    var data = elem.data(pluginName);\n    if ( data == undefined ) {\n      this.pengine.destroy();\t\t\t/* element already gone */\n    } else\n    { var options = $.extend({}, data.screen);\n      var bps;\n      var resvar = config.swish.residuals_var || \"Residuals\";\n      var hashvar = config.swish.permahash_var;\n\n      if ( hashvar )\n\thashvar = \", \"+hashvar;\n      else\n\thashvar = \"\";\n\n      registerSources(this.pengine);\n\n      if ( (bps = breakpoints(elem)) )\n\toptions.breakpoints = Pengine.stringify(bps);\n      if ( data.chunk )\n\toptions.chunk = data.chunk;\n\n      this.pengine.ask(\"'$swish wrapper'((\\n\" +\n\t\t       termNoFullStop(data.query.query) +\n\t\t       \"\\n), [\"+resvar+hashvar+\"])\", options);\n      elem.prologRunner('setState', \"running\");\n    }\n  }\n\n  function handleSuccess() {\n    var elem = this.pengine.options.runner;\n\n    if ( elem.data(pluginName) == undefined )\n    { this.pengine.destroy();\t\t\t/* element already gone */\n    } else {\n      for(var i=0; i<this.data.length; i++) {\n\tvar answer = this.data[i];\n\tif ( this.projection )\n\t  answer.projection = this.projection;\n\n\telem.prologRunner('renderAnswer', answer);\n      }\n      if ( this.time > 0.1 )\t/* more than 0.1 sec. CPU (TBD: preference) */\n\taddAnswer(elem, $.el.div(\n\t  {class:\"cputime\"},\n\t  $.el.span(this.time.toFixed(3),\n\t\t    \" seconds cpu time\")));\n\n      elem.prologRunner('setState', this.more ? \"wait-next\" : \"true\");\n    }\n  }\n\n  function handleFailure() {\n    var elem = this.pengine.options.runner;\n\n    addAnswer(elem, $.el.span({class: \"prolog-false\"}, \"false\"));\n    elem.prologRunner('setState', \"false\");\n  }\n\n  function handleStop() {\n    var elem = this.pengine.options.runner;\n\n    elem.prologRunner('setState', \"stopped\");\n  }\n\n  function handlePrompt() {\n    var elem   = this.pengine.options.runner;\n    var data   = elem.data('prologRunner');\n    var prompt = this.data || \"Please enter a Prolog term\";\n\n    data.wait_for = \"term\";\n\n    if ( typeof(prompt) == \"object\" ) {\n      if ( prompt.type == \"trace\" ) {\n\treturn elem.prologRunner('trace', this);\n      } else if ( prompt.type == \"form\" ) {\n\treturn elem.prologRunner('form', this);\n      } else if ( prompt.type == \"jQuery\" ) {\n\treturn elem.prologRunner('jQuery', this);\n      } else if ( prompt.type == \"console\" ) {\n\tprompt = prompt.prompt || \"console> \";\n\tdata.wait_for = \"line\";\n      } else {\n\tprompt = JSON.stringify(prompt);\n      }\n    }\n\n    elem.prologRunner('setPrompt', prompt);\n    elem.prologRunner('setState', \"wait-input\");\n  }\n\n  /**\n   * Make indicated source locations clickable.\n   * @param {String} msg is the HTML error message string\n   * @param {DOM} editor is the source editor; the editor for pengine://\n   * source locations\n   */\n  function clickableLocations(msg, editor) {\n    var pattern = /pengine:\\/\\/[-0-9a-f]{36}\\/src:(\\d+)/;\n\n    return msg.replace(pattern, function(matched) {\n      var line = matched.match(pattern)[1];\n      return \"<a class='goto-error' title='Goto location'>\" +\n               \"<span class='glyphicon glyphicon-hand-right'></span> \"+\n\t       \"<b>line <span class='line'>\"+line+\"</span></b></a>\";\n    });\n  }\n\n  function gotoError(ev) {\n    var a        = $(ev.target).closest(\"a.goto-error\");\n    var ctx      = $(ev.target).closest(\".error-context\");\n    var econtext = ctx.data(\"error_context\");\n\n    if ( a[0] ) {\n      var line = parseInt(a.find(\"span.line\").text());\n      var file = a.find(\"span.file\").text();\n\n      ev.preventDefault();\n\n      if ( file ) {\n\tctx.closest(\"body.swish\")\n\t   .swish('playFile', {file:file, line:line});\n      } else {\n\t$(econtext.editor).prologEditor('gotoLine', line);\n      }\n\n      return false;\n    } else if ( econtext && econtext.location.file ) {\n      ctx.closest(\"body.swish\")\n\t .swish('playFile', econtext.location);\n    } else {\n      $(econtext.editor).prologEditor('gotoLine', econtext.location.line);\n    }\n  }\n\n  /**\n   * handle `pengine_output/1`.  Note that compiler warnings and errors\n   * also end up here. If they have a location, this is provided through\n   * this.location, which contains `file`, `line` and `ch`.  We must use\n   * this to indicate the location of the error in CodeMirror.\n   */\n\n  function handleOutput(msg) {\n    var elem = msg.pengine.options.runner;\n    var data = elem.data(pluginName);\n\n    if ( !data )\t\t\t\t/* runner is gone */\n      return;\n\n    if ( typeof(msg.data) == 'string' ) {\n      var econtext = {editor: data.query.editor};\n\n      msg.data = msg.data.replace(/'[-0-9a-f]{36}':/g, \"\")  /* remove module */\n\n      if ( msg.location ) {\n\tvar loc = msg.location;\n\tvar prefix = \"swish://\";\n\tvar span;\n\n\tfunction clickableError() {\n\t  var str = loc.file+\":\"+loc.line+\":\";\n\t  if ( loc.ch ) str += loc.ch+\":\";\n\t  str += \"\\\\s*\";\n\n\t  msg.data = clickableLocations(\n\t\t\t msg.data.replace(new RegExp(str, \"g\"), \"\"),\n\t\t\t econtext.editor);\n\n\t  span = elem.prologRunner('outputHTML', msg.data);\n\n\t  $(span).addClass(\"error-context\");\n\t  $(span).append($.el.span({class:\"glyphicon glyphicon-hand-right\"}));\n\t  $(span).attr(\"title\", \"Error in program.  Click to show in context\");\n\t  $(span).on(\"click\", gotoError);\n\t  $(span).data(\"error_context\", econtext);\n\t}\n\n\tif ( loc.file.startsWith(prefix) ) {\n\t  var file = loc.file.slice(prefix.length);\n\t  econtext.location = {file:file, line:loc.line};\n\t  clickableError();\n\t} else if ( loc.file.startsWith(\"pengine://\") ) {\n\t  econtext.location = {line:loc.line};\n\t  clickableError(data.query.editor);\n\t}\n\tregisterSources(msg.pengine);\n\tmsg.error_context = econtext;\n\tmsg.error_handler = gotoError;\n\t$(\".swish-event-receiver\").trigger(\"source-error\", msg);\n      } else {\n\tvar span = elem.prologRunner('outputHTML',\n\t\t\t\t     clickableLocations(msg.data,\n\t\t\t\t\t\t\tecontext.editor));\n\t$(span).on(\"click\", gotoError);\n\t$(span).data(\"error_context\", econtext);\n      }\n    } else if ( typeof(msg.data) == 'object' ) {\n      elem.prologRunner(msg.data.action, msg.data);\n    } else {\n      console.log(msg.data);\n    }\n    elem.trigger('scroll-to-bottom');\n  }\n\n  function handleError() {\n    var elem = this.pengine.options.runner;\n    var msg;\n\n    if ( this.code == \"too_many_pengines\" ) {\n      this.message = \"Too many open queries.  Please complete some\\n\"+\n\t\t     \"queries by using |Next|, |Stop| or by\\n\"+\n\t\t     \"closing some queries.\";\n    } else if ( typeof(this.data) == 'string' ) {\n      this.message = this.data\n\t\t\t .replace(new RegExp(\"'\"+this.pengine.id+\"':\", 'g'), \"\");\n    } else {\n      this.message = \"Unknown error\";\n    }\n\n    elem.prologRunner('error', this);\n    elem.prologRunner('setState', \"error\");\n  }\n\n  function handleAbort() {\n    var elem = this.pengine.options.runner;\n    var data = elem.data('prologRunner');\n\n    if ( data ) {\n      elem.prologRunner('error', \"** Execution aborted **\");\n      elem.prologRunner('setState', \"aborted\");\n    } else {\n      this.pengine.destroy();\n    }\n  }\n\n  function handlePing() {\n    var elem = this.pengine.options.runner;\n\n    elem.prologRunner('ping', this.data);\n  }\n\n  /**\n   * @param {Object} answer a positive answer from the Pengine\n   * @returns {Boolean} true if the answer has printable part, i.e., no\n   * variable bindings nor residual goals.\n   */\n\n  function answerHasOutput(answer) {\n    return answer.variables.length > 0 || answer.residuals;\n  }\n\n  function termNoFullStop(s) {\n    return String($.trim(s)).replace(/\\.$/, \"\");\n  }\n\n  /**\n   * Run a Prolog query by starting a remote pengine.\n   *\n   * @class prologRunner\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.prologRunner = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n\n\t\t   /*******************************\n\t\t   *\t       UTIL\t\t*\n\t\t   *******************************/\n\n  function glyphButton(glyph, title) {\n    var btn = $.el.a({href:\"#\", class:\"close btn btn-link btn-sm\",\n\t\t      title:title},\n\t\t     $.el.span({class:\"glyphicon glyphicon-\"+glyph}));\n\n    return btn;\n  }\n});\n\n","/*\n * [js-sha1]{@link https://github.com/emn178/js-sha1}\n *\n * @version 0.6.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n/*jslint bitwise: true */\n(function() {\n  'use strict';\n\n  var root = typeof window === 'object' ? window : {};\n  var NODE_JS = !root.JS_SHA1_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n  if (NODE_JS) {\n    root = global;\n  }\n  var COMMON_JS = !root.JS_SHA1_NO_COMMON_JS && typeof module === 'object' && module.exports;\n  var AMD = typeof define === 'function' && define.amd;\n  var HEX_CHARS = '0123456789abcdef'.split('');\n  var EXTRA = [-2147483648, 8388608, 32768, 128];\n  var SHIFT = [24, 16, 8, 0];\n  var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];\n\n  var blocks = [];\n\n  var createOutputMethod = function (outputType) {\n    return function (message) {\n      return new Sha1(true).update(message)[outputType]();\n    };\n  };\n\n  var createMethod = function () {\n    var method = createOutputMethod('hex');\n    if (NODE_JS) {\n      method = nodeWrap(method);\n    }\n    method.create = function () {\n      return new Sha1();\n    };\n    method.update = function (message) {\n      return method.create().update(message);\n    };\n    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n      var type = OUTPUT_TYPES[i];\n      method[type] = createOutputMethod(type);\n    }\n    return method;\n  };\n\n  var nodeWrap = function (method) {\n    var crypto = eval(\"require('crypto')\");\n    var Buffer = eval(\"require('buffer').Buffer\");\n    var nodeMethod = function (message) {\n      if (typeof message === 'string') {\n        return crypto.createHash('sha1').update(message, 'utf8').digest('hex');\n      } else if (message.constructor === ArrayBuffer) {\n        message = new Uint8Array(message);\n      } else if (message.length === undefined) {\n        return method(message);\n      }\n      return crypto.createHash('sha1').update(new Buffer(message)).digest('hex');\n    };\n    return nodeMethod;\n  };\n\n  function Sha1(sharedMemory) {\n    if (sharedMemory) {\n      blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      this.blocks = blocks;\n    } else {\n      this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n    }\n\n    this.h0 = 0x67452301;\n    this.h1 = 0xEFCDAB89;\n    this.h2 = 0x98BADCFE;\n    this.h3 = 0x10325476;\n    this.h4 = 0xC3D2E1F0;\n\n    this.block = this.start = this.bytes = this.hBytes = 0;\n    this.finalized = this.hashed = false;\n    this.first = true;\n  }\n\n  Sha1.prototype.update = function (message) {\n    if (this.finalized) {\n      return;\n    }\n    var notString = typeof(message) !== 'string';\n    if (notString && message.constructor === root.ArrayBuffer) {\n      message = new Uint8Array(message);\n    }\n    var code, index = 0, i, length = message.length || 0, blocks = this.blocks;\n\n    while (index < length) {\n      if (this.hashed) {\n        this.hashed = false;\n        blocks[0] = this.block;\n        blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n        blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n        blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n        blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      }\n\n      if(notString) {\n        for (i = this.start; index < length && i < 64; ++index) {\n          blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n        }\n      } else {\n        for (i = this.start; index < length && i < 64; ++index) {\n          code = message.charCodeAt(index);\n          if (code < 0x80) {\n            blocks[i >> 2] |= code << SHIFT[i++ & 3];\n          } else if (code < 0x800) {\n            blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n          } else if (code < 0xd800 || code >= 0xe000) {\n            blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n          } else {\n            code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n            blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n          }\n        }\n      }\n\n      this.lastByteIndex = i;\n      this.bytes += i - this.start;\n      if (i >= 64) {\n        this.block = blocks[16];\n        this.start = i - 64;\n        this.hash();\n        this.hashed = true;\n      } else {\n        this.start = i;\n      }\n    }\n    if (this.bytes > 4294967295) {\n      this.hBytes += this.bytes / 4294967296 << 0;\n      this.bytes = this.bytes % 4294967296;\n    }\n    return this;\n  };\n\n  Sha1.prototype.finalize = function () {\n    if (this.finalized) {\n      return;\n    }\n    this.finalized = true;\n    var blocks = this.blocks, i = this.lastByteIndex;\n    blocks[16] = this.block;\n    blocks[i >> 2] |= EXTRA[i & 3];\n    this.block = blocks[16];\n    if (i >= 56) {\n      if (!this.hashed) {\n        this.hash();\n      }\n      blocks[0] = this.block;\n      blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n    }\n    blocks[14] = this.hBytes << 3 | this.bytes >>> 29;\n    blocks[15] = this.bytes << 3;\n    this.hash();\n  };\n\n  Sha1.prototype.hash = function () {\n    var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4;\n    var f, j, t, blocks = this.blocks;\n\n    for(j = 16; j < 80; ++j) {\n      t = blocks[j - 3] ^ blocks[j - 8] ^ blocks[j - 14] ^ blocks[j - 16];\n      blocks[j] =  (t << 1) | (t >>> 31);\n    }\n\n    for(j = 0; j < 20; j += 5) {\n      f = (b & c) | ((~b) & d);\n      t = (a << 5) | (a >>> 27);\n      e = t + f + e + 1518500249 + blocks[j] << 0;\n      b = (b << 30) | (b >>> 2);\n\n      f = (a & b) | ((~a) & c);\n      t = (e << 5) | (e >>> 27);\n      d = t + f + d + 1518500249 + blocks[j + 1] << 0;\n      a = (a << 30) | (a >>> 2);\n\n      f = (e & a) | ((~e) & b);\n      t = (d << 5) | (d >>> 27);\n      c = t + f + c + 1518500249 + blocks[j + 2] << 0;\n      e = (e << 30) | (e >>> 2);\n\n      f = (d & e) | ((~d) & a);\n      t = (c << 5) | (c >>> 27);\n      b = t + f + b + 1518500249 + blocks[j + 3] << 0;\n      d = (d << 30) | (d >>> 2);\n\n      f = (c & d) | ((~c) & e);\n      t = (b << 5) | (b >>> 27);\n      a = t + f + a + 1518500249 + blocks[j + 4] << 0;\n      c = (c << 30) | (c >>> 2);\n    }\n\n    for(; j < 40; j += 5) {\n      f = b ^ c ^ d;\n      t = (a << 5) | (a >>> 27);\n      e = t + f + e + 1859775393 + blocks[j] << 0;\n      b = (b << 30) | (b >>> 2);\n\n      f = a ^ b ^ c;\n      t = (e << 5) | (e >>> 27);\n      d = t + f + d + 1859775393 + blocks[j + 1] << 0;\n      a = (a << 30) | (a >>> 2);\n\n      f = e ^ a ^ b;\n      t = (d << 5) | (d >>> 27);\n      c = t + f + c + 1859775393 + blocks[j + 2] << 0;\n      e = (e << 30) | (e >>> 2);\n\n      f = d ^ e ^ a;\n      t = (c << 5) | (c >>> 27);\n      b = t + f + b + 1859775393 + blocks[j + 3] << 0;\n      d = (d << 30) | (d >>> 2);\n\n      f = c ^ d ^ e;\n      t = (b << 5) | (b >>> 27);\n      a = t + f + a + 1859775393 + blocks[j + 4] << 0;\n      c = (c << 30) | (c >>> 2);\n    }\n\n    for(; j < 60; j += 5) {\n      f = (b & c) | (b & d) | (c & d);\n      t = (a << 5) | (a >>> 27);\n      e = t + f + e - 1894007588 + blocks[j] << 0;\n      b = (b << 30) | (b >>> 2);\n\n      f = (a & b) | (a & c) | (b & c);\n      t = (e << 5) | (e >>> 27);\n      d = t + f + d - 1894007588 + blocks[j + 1] << 0;\n      a = (a << 30) | (a >>> 2);\n\n      f = (e & a) | (e & b) | (a & b);\n      t = (d << 5) | (d >>> 27);\n      c = t + f + c - 1894007588 + blocks[j + 2] << 0;\n      e = (e << 30) | (e >>> 2);\n\n      f = (d & e) | (d & a) | (e & a);\n      t = (c << 5) | (c >>> 27);\n      b = t + f + b - 1894007588 + blocks[j + 3] << 0;\n      d = (d << 30) | (d >>> 2);\n\n      f = (c & d) | (c & e) | (d & e);\n      t = (b << 5) | (b >>> 27);\n      a = t + f + a - 1894007588 + blocks[j + 4] << 0;\n      c = (c << 30) | (c >>> 2);\n    }\n\n    for(; j < 80; j += 5) {\n      f = b ^ c ^ d;\n      t = (a << 5) | (a >>> 27);\n      e = t + f + e - 899497514 + blocks[j] << 0;\n      b = (b << 30) | (b >>> 2);\n\n      f = a ^ b ^ c;\n      t = (e << 5) | (e >>> 27);\n      d = t + f + d - 899497514 + blocks[j + 1] << 0;\n      a = (a << 30) | (a >>> 2);\n\n      f = e ^ a ^ b;\n      t = (d << 5) | (d >>> 27);\n      c = t + f + c - 899497514 + blocks[j + 2] << 0;\n      e = (e << 30) | (e >>> 2);\n\n      f = d ^ e ^ a;\n      t = (c << 5) | (c >>> 27);\n      b = t + f + b - 899497514 + blocks[j + 3] << 0;\n      d = (d << 30) | (d >>> 2);\n\n      f = c ^ d ^ e;\n      t = (b << 5) | (b >>> 27);\n      a = t + f + a - 899497514 + blocks[j + 4] << 0;\n      c = (c << 30) | (c >>> 2);\n    }\n\n    this.h0 = this.h0 + a << 0;\n    this.h1 = this.h1 + b << 0;\n    this.h2 = this.h2 + c << 0;\n    this.h3 = this.h3 + d << 0;\n    this.h4 = this.h4 + e << 0;\n  };\n\n  Sha1.prototype.hex = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4;\n\n    return HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n           HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n           HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n           HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n           HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n           HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n           HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n           HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n           HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n           HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n           HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n           HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n           HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +\n           HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n           HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n           HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n           HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +\n           HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +\n           HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +\n           HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F];\n  };\n\n  Sha1.prototype.toString = Sha1.prototype.hex;\n\n  Sha1.prototype.digest = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4;\n\n    return [\n      (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,\n      (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,\n      (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,\n      (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,\n      (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF\n    ];\n  };\n\n  Sha1.prototype.array = Sha1.prototype.digest;\n\n  Sha1.prototype.arrayBuffer = function () {\n    this.finalize();\n\n    var buffer = new ArrayBuffer(20);\n    var dataView = new DataView(buffer);\n    dataView.setUint32(0, this.h0);\n    dataView.setUint32(4, this.h1);\n    dataView.setUint32(8, this.h2);\n    dataView.setUint32(12, this.h3);\n    dataView.setUint32(16, this.h4);\n    return buffer;\n  };\n\n  var exports = createMethod();\n\n  if (COMMON_JS) {\n    module.exports = exports;\n  } else {\n    root.sha1 = exports;\n    if (AMD) {\n      define('sha1',[],function () {\n        return exports;\n      });\n    }\n  }\n})();\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2015-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Manage the cell structure of a notebook modelled after IPython\n * NoteBook.  The nodebook consists of a toolbar with a series of\n * buttons and manages a list of cells.  The file defines two plugins\n * `notebook`, implementing the overall notebook and `nbCell`,\n * implementing a single cell.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n */\n\ndefine('notebook',[ \"jquery\", \"config\", \"tabbed\", \"form\",\n\t \"preferences\", \"modal\", \"prolog\", \"links\", \"utils\",\n\t \"cm/lib/codemirror\", \"editor\", \"laconic\", \"runner\", \"storage\", \"sha1\",\n       ],\n       function($, config, tabbed, form, preferences, modal, prolog, links,\n\t        utils, CodeMirror) {\n\nvar cellTypes = {\n  \"program\":  { label:\"Program\",  prefix:\"p\"   },\n  \"query\":    { label:\"Query\",    prefix:\"q\"   },\n  \"markdown\": { label:\"Markdown\", prefix:\"md\"  },\n  \"html\":     { label:\"HTML\",     prefix:\"htm\" }\n};\n\n/* Support ```eval using Prolog mode */\nCodeMirror.modes.eval = CodeMirror.modes.prolog;\n\n(function($) {\n  var pluginName = 'notebook';\n  var clipboard = null;\n\n  /** @lends $.fn.notebook */\n  var methods = {\n    /**\n     * Initialize a Prolog Notebook.\n     * @param {Object} options\n     * @param {String} [options.value] provides the initial content\n     * @param {Boolean} [options.fullscreen] open notebook in fullscreen\n     * mode.\n     */\n    _init: function(options) {\n      options = options||{};\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar storage = {};\t\t/* storage info */\n\tvar data = {};\t\t\t/* private data */\n\tvar toolbar, content;\n\n\telem.addClass(\"notebook\");\n\telem.addClass(\"swish-event-receiver\");\n\n\tfunction notebookMenu() {\n\t  var icon = $.el.span({class:\"glyphicon glyphicon-menu-hamburger\"});\n\t  var menu = form.widgets.dropdownButton(\n\t    icon,\n\t    { divClass:\"notebook-menu btn-transparent\",\n\t      ulClass:\"pull-right\",\n\t      client:elem,\n\t      actions:\n\t      { \"Delete cell\":     function() { this.notebook('delete'); },\n\t\t\"Copy cell\":       function() { this.notebook('copy'); },\n\t\t\"Paste cell\":      function() { this.notebook('paste'); },\n\t\t\"Move cell up\":    function() { this.notebook('up'); },\n\t\t\"Move cell down\":  function() { this.notebook('down'); },\n\t\t\"Insert cell\":     function() { this.notebook('insertBelow'); },\n\t\t\"--\":\t\t   \"Overall options\",\n\t\t\"Clear all\":       function() { this.notebook('clear_all'); },\n\t\t\"Play\":            function() { this.notebook('run_all'); },\n\t\t\"Settings\":        function() { this.notebook('settings'); },\n\t\t\"---\":\t\t   \"Notebook actions\",\n\t\t\"Exit fullscreen\": function() { this.notebook('fullscreen',false)}\n\t      }\n\t    });\n\n\t  return menu;\n\t}\n\n\telem.append(toolbar = $.el.div(\n            {class:\"nb-toolbar\"},\n\t    glyphButton(\"trash\", \"delete\", \"Delete cell\", \"warning\"),\n\t    sep(),\n\t    glyphButton(\"copy\", \"copy\", \"Copy cell\", \"default\"),\n\t    glyphButton(\"paste\", \"paste\", \"Paste cell below\", \"default\"),\n\t    sep(),\n\t    glyphButton(\"chevron-up\", \"up\", \"Move cell up\", \"default\"),\n\t    glyphButton(\"chevron-down\", \"down\", \"Move cell down\", \"default\"),\n\t    sep(),\n\t    glyphButton(\"plus\", \"insertBelow\", \"Insert cell below\", \"primary\"),\n\t    sep(),\n\t    glyphButton(\"erase\", \"clear_all\", \"Clear all query output\", \"warning\"),\n\t    glyphButton(\"play\", \"run_all\", \"Run all queries\", \"primary\"),\n\t    glyphButton(\"wrench\", \"settings\", \"Settings\", \"default\"),\n\t    glyphButton(\"fullscreen\", \"fullscreen\", \"Full screen\", \"default\")\n\t    ));\n\telem.append(notebookMenu());\n\telem.append($.el.div({class:\"nb-view\", tabIndex:\"-1\"},\n\t\t\t     content=$.el.div({class:\"nb-content\"}),\n\t\t\t     $.el.div({class:\"nb-bottom\"})));\n\n\t$(toolbar).on(\"click\", \"a.btn\", function(ev) {\n\t  var action = $(ev.target).closest(\"a\").data(\"action\");\n\t  elem.notebook(action);\n\t  ev.preventDefault();\n\t  return false;\n\t});\n\n\t$(content).on(\"click\", \".nb-cell-buttons a.btn\", function(ev) {\n\t  var a    = $(ev.target).closest(\"a\");\n\t  var cell = a.closest(\".nb-cell\");\n\n\t  var action = a.data(\"action\");\n\t  cell.nbCell(action);\n\t  ev.preventDefault();\n\t  return false;\n\t});\n\n\t$(content).on(\"mouseenter mouseleave\", \".nb-menu-sense\", function(ev) {\n\t  var mdiv = $(ev.target).closest(\".nb-menu\");\n\n\t  if ( ev.type == \"mouseenter\" ) {\n\t    var select = cell_type_select_div();\n\n\t    mdiv.find(\".nb-menu-line\").css(\"background-color\", \"#333\");\n\n\t    function removeSelector() {\n\t      select.remove();\n\t      mdiv.find(\".nb-menu-line\").css(\"background-color\", \"#fff\");\n\t      data.menu_state = \"idle\";\n\t    }\n\n\t    select.hide();\n\t    mdiv.append(select);\n\t    data.menu_state = \"waiting\";\n\t    setTimeout(function() {\n\t      if ( mdiv.find(\":hover\").length > 0 ) {\n\t\tdata.menu_state = \"showing\";\n\t\tselect.on(\"mouseleave\", removeSelector);\n\t\tselect.fadeIn(400);\n\t      } else {\n\t\tremoveSelector();\n\t      }\n\t    }, 250);\n\t  } else {\n\t    if ( data.menu_state != \"showing\" )\n\t      mdiv.find(\".nb-menu-line\").css(\"background-color\", \"#fff\");\n\t  }\n\t});\n\n\t$(content).on(\"click\", \".nb-menu .btn\", function(ev) {\n\t  ev.preventDefault();\n\t  var type = $(ev.target).data('type');\n\t  var mdiv = $(ev.target).closest(\".nb-menu\");\n\t  var nb   = mdiv.closest(\".notebook\");\n\t  var cell = $.el.div({class:\"nb-cell\"});\n\n\t  if ( mdiv.parent().hasClass(\"nb-placeholder\") ) {\n\t    nb.find(\".nb-content\").empty().append(cell);\n\t  } else {\n\t    mdiv.find(\".nb-type-select\").remove();\n\t    mdiv.after(cell);\n\t  }\n\t  $(cell).nbCell({type: type});\n\t  nb.notebook('organize');\n\t  nb.notebook('active', $(cell), true);\n\n\t  return false;\n\t});\n\n\telem.focusin(function(ev) {\n\t  var cell = $(ev.target).closest(\".nb-cell\");\n\t  if ( cell.length > 0 ) {\n\t    elem.notebook('active', cell);\n\t  } else if ( $(ev.target).closest(\".nb-view\").length > 0 )\n\t  { elem.find(\".nb-content\").children(\".nb-cell.active\")\n\t\t\t\t    .nbCell('active', false);\n\t  }\n\t});\n\telem.focusout(function(ev) {\n\t  if ( $(ev.target).closest(\".notebook\")[0] != elem[0] ) {\n\t    elem.find(\".nb-content\").children(\".nb-cell.active\")\n\t\t\t\t    .nbCell('active', false);\n\t  }\n\t});\n\n\t/* Activate the active source or first source.  If the active\n\t * cell is a query, we could activate the source of the query?\n\t */\n\telem.on(\"activate-tab\", function(ev) {\n\t  if ( ev.target == elem[0] ) {\n\t    var eds = elem.find(\".nb-content\")\n                          .children(\".nb-cell.program\");\n\t    var aeds = eds.filter(\".active\");\n\t    var nc = aeds[0]||eds[0];\n\n\t    if ( nc ) {\n\t      $(nc).find(\".prolog-editor\").prologEditor('makeCurrent');\n\t    }\n\t    ev.stopPropagation();\n\t  }\n\t});\n\n\t/* monitor output on runners */\n\telem.on(\"scroll-to-bottom\", function(ev, arg) {\n\t  if ( arg != true ) {\n\t    $(ev.target).closest(\".nb-cell\").nbCell('ensure_in_view', 'bottom');\n\t  }\n\t});\n\n\telem.data(pluginName, data);\t/* store with element */\n\n\t\t\t\t\t/* restore content */\n\tvar content = elem.find(\".notebook-data\");\n\tif ( options.value ) {\n\t  elem.notebook('value', options.value);\n\t} else if ( content.length > 0 ) {\n\t  function copyData(name) {\n\t    var value = content.data(name);\n\t    if ( value ) {\n\t      storage[name] = value;\n\t    }\n\t  }\n\n\t  copyData(\"file\");\n\t  copyData(\"url\");\n\t  copyData(\"title\");\n\t  copyData(\"meta\");\n\t  copyData(\"st_type\");\n\t  copyData(\"chats\");\n\n\t  var docid      = elem.storage('docid', undefined, storage);\n\t  var fullscreen = preferences.getDocVal(\n\t\t\t\t\t   docid, 'fullscreen',\n\t\t\t\t\t   config.swish.notebook.fullscreen);\n\n\t  elem.notebook('value', content.text(),\n\t\t\t{ fullscreen: fullscreen\n\t\t\t});\n\t  content.remove();\n\t} else {\n\t  elem.notebook('placeHolder');\n\t}\n\n\telem.notebook('setupStorage', storage);\n\telem.on(\"data-is-clean\", function(ev, clean) {\n\t  if ( $(ev.target).hasClass(\"prolog-editor\") )\n\t  { elem.notebook('checkModified');\n\t    ev.stopPropagation();\n\t    return false;\n\t  }\n\t});\n\telem.on(\"fullscreen\", function(ev, val) {\n\t  preferences.setDocVal(docid, 'fullscreen', val);\n\t});\n      }); /* end .each() */\n    },\n\n\t\t /*******************************\n\t\t *\t  BUTTON ACTIONS\t*\n\t\t *******************************/\n\n    delete: function(cell) {\n      cell = cell||currentCell(this);\n      if ( cell ) {\n\tthis.notebook('active',\n\t\t      cell.nbCell('next')||cell.nbCell('prev'));\n\tcell.nbCell('close');\n\tthis.notebook('updatePlaceHolder');\n      }\n      this.notebook('checkModified');\n      return this;\n    },\n\n    copy: function(cell) {\n      cell = cell||currentCell(this);\n      if ( cell ) {\n\tvar dom = $.el.div({class:\"notebook\"});\n\t$(dom).append($(cell).nbCell('saveDOM'));\n\t$(dom).find(\".nb-cell\").removeAttr(\"name\");\n\tclipboard = stringifyNotebookDOM(dom);\n      }\n    },\n\n    paste: function(text) {\n      var nb = this;\n\n      text = text||clipboard;\n      if ( text ) {\n\tvar dom = $.el.div();\n\n\t$(dom).html(text);\n\tvar cells = $(dom).find(\".nb-cell\");\n\tif ( cells.length > 0 ) {\n\t  $(dom).find(\".nb-cell\").each(function() {\n\t    nb.notebook('insert', {\n\t      where: \"below\",\n\t      restore: $(this)\n\t    });\n\t  });\n\t  return this;\n\t} else {\n\t  modal.alert(\"Not a SWISH notebook\");\n\t}\n      } else {\n\tmodal.alert(\"Clipboard is empty\");\n      }\n    },\n\n    up: function(cell) {\n      cell = cell||currentCell(this);\n      if ( cell ) {\n\tcell.insertBefore(cell.nbCell('prev'));\n\tthis.notebook('checkModified');\n      }\n      return this;\n    },\n\n    down: function(cell) {\n      cell = cell||currentCell(this);\n      if ( cell ) {\n\tcell.insertAfter(cell. nbCell('next'));\n\tthis.notebook('checkModified');\n      }\n      return this;\n    },\n\n    insertAbove: function() {\n      return this.notebook('insert', { where:\"above\" });\n    },\n\n    insertBelow: function() {\n      if ( this.notebook('insert', {where:\"below\", if_visible:true}) == false ) {\n\tmodal.alert(\"<p>New cell would appear outside the visible area of the \" +\n\t\t    \"notebook.\" +\n\t\t    \"<p>Please select the cell below which you want the \"+\n\t\t    \"new cell to appear or scroll to the bottom of the \" +\n\t\t    \"notebook.\");\n      }\n\n      return this;\n    },\n\n    getSettings: function() {\n      var settings = { open_fullscreen:\tthis.hasClass('open-fullscreen'),\n\t\t       hide_navbar:     this.hasClass('hide-navbar')\n\t\t     };\n\n      return settings;\n    },\n\n    settings: function() {\n      var that = this;\n      var current = this[pluginName]('getSettings');\n\n      function notebookSettingsBody() {\n\tthis.append($.el.form(\n          { class:\"form-horizontal\"\n\t  },\n\t  form.fields.checkboxes(\n\t\t[ { name: \"open_fullscreen\",\n\t\t    label: \"open in fullscreen mode\",\n\t\t    value: current.open_fullscreen,\n\t\t    title: \"Open in fullscreen mode\"\n\t\t  }\n\t\t], {col:3, label:\"Initial view\"}),\n\t  form.fields.checkboxes(\n\t\t[ { name: \"hide_navbar\",\n\t\t    label: \"hide navigation bar\",\n\t\t    value: current.hide_navbar,\n\t\t    title: \"Hide navigation bar\"\n\t\t  }\n\t\t], {col:3, label:\"Full screen options\"}),\n\t  form.fields.buttons(\n\t  { label: \"Apply\",\n\t    offset: 3,\n\t    action: function(ev, values) {\n\t      function update(field, cls) {\n\t\tif ( values[field] != current[field] ) {\n\t\t  if ( values[field] )\n\t\t    that.addClass(cls);\n\t\t  else\n\t\t    that.removeClass(cls);\n\t\t}\n\t      }\n\n\t      update(\"hide_navbar\",     \"hide-navbar\");\n\t      update(\"open_fullscreen\", \"open-fullscreen\");\n\n\t      that.notebook('checkModified');\n\t    }\n\t  })));\n      }\n\n      form.showDialog({ title: \"Set options for notebook\",\n                        body: notebookSettingsBody\n                      });\n    },\n\n    run: function(cell) {\n      cell = cell||currentCell(this);\n      if ( cell )\n\tcell.nbCell(\"run\");\n    },\n\n    /**\n     * Set the notebook in fullscreen mode.\n     * @arg {Boolean} [val] if `true` or the notebook has the class\n     * `fullscreen`, go to fullscreen mode.\n     * @arg {Boolean} [hide_navbar] if `val = true` and this parameter\n     * is true, also hide the SWISH navigation bar.\n     */\n    fullscreen: function(val, hide_navbar) {\n      if ( val == undefined )\t\t/* default: toggle */\n\tval = !this.hasClass(\"fullscreen\");\n      if ( hide_navbar == undefined )\n\thide_navbar = this.hasClass(\"hide-navbar\");\n\n      if ( val ) {\n\tvar chat_container = this.closest(\".chat-container\");\n\tvar node = chat_container.length == 1 ? chat_container : this;\n\t$(\"body.swish\").swish('fullscreen', node, this, hide_navbar);\n      } else {\n\t$(\"body.swish\").swish('exitFullscreen');\n      }\n\n      return this;\n    },\n\n    cellType: function(cell, type) {\n      cell = cell||currentCell(this);\n      if ( cell )\n\tcell.nbCell('type', type);\n    },\n\n\t\t /*******************************\n\t\t *\t      SELECTION\t\t*\n\t\t *******************************/\n\n    getSelection: function() {\n      return this.notebook('assignCellNames')\n                 .find(\".prolog-editor\")\n\t\t .prologEditor('getSelection');\n    },\n\n    restoreSelection: function(sel) {\n      return this.notebook('assignCellNames')\n                 .find(\".prolog-editor\")\n\t\t .prologEditor('restoreSelection', sel);\n    },\n\n\n\t\t /*******************************\n\t\t *\t    CLEAN/DIRTY\t\t*\n\t\t *******************************/\n\n    checkModified: function() {\n      return this.each(function() {\n\tvar nb = $(this);\n\tvar store = nb.data(\"storage\");\n\tvar clean = store.cleanGeneration == nb.notebook('changeGen');\n\n\tnb.notebook('markClean', clean);\n\tnb.notebook('organize');\n      });\n    },\n\n    /**\n     * Called if the notebook changes from clean to dirty or visa versa.\n     * This triggers `data-is-clean`, which is trapped by the tab to\n     * indicate the changed state of the editor.\n     */\n    markClean: function(clean) {\n      return this.each(function() {\n\tvar nb = $(this);\n\tvar data = nb.data(pluginName);\n\n\tif ( data.clean_signalled != clean )\n\t{ data.clean_signalled = clean;\n\t  nb.trigger(\"data-is-clean\", clean);\n\t}\n\n\tif ( clean ) {\n\t  nb.find(\".prolog-editor\").prologEditor('setIsClean');\n\t}\n      });\n    },\n\n\n\t\t /*******************************\n\t\t *\t CELL MANAGEMENT\t*\n\t\t *******************************/\n\n    /**\n     * @param {jQuery} cell is the cell that must be activated\n     * @param {Boolean} [focus] if `true`, give the cell the focus\n     */\n    active: function(cell, focus) {\n      if ( cell ) {\n\tvar current = this.find(\".nb-content .nb-cell.active\");\n\n\tfunction removeNotForQuery(elem) {\n\t  elem.find(\".nb-content .nb-cell.not-for-query\")\n\t      .removeClass(\"not-for-query\");\n\t}\n\n\tif ( cell.length == 1 )\n\t{ if ( !(current.length == 1 && cell[0] == current[0]) ) {\n\t    removeNotForQuery(this);\n\t    current.nbCell('active', false);\n\t    cell.nbCell('active', true);\n\t    if ( focus ) {\n\t      var editors = cell.find(\".prolog-editor\");\n\n\t      if ( editors.length > 0 )\n\t\teditors.prologEditor('focus');\n\t      else\n\t\tcell.focus();\n\t    }\n\t  }\n\t} else\n\t{ removeNotForQuery(this);\n\t  current.nbCell('active', false);\n\t}\n      }\n    },\n\n    /**\n     * Insert a new cell\n     * @param {Object} [options]\n     * @param {String} [options.where] defines where the cell is\n     * inserted relative to the cell with the current focus.\n     * @param {jQuery} [options.restore] If provided, it must contains\n     * a save/restore node that will be used to fill the new cell.\n     * @param {Bool}   [options.if_visible]  If `true`, only insert is\n     * the insertion point is visible.\n     */\n    insert: function(options) {\n      options   = options||{};\n      var relto = currentCell(this);\n      var cell  = options.cell || $.el.div({class:\"nb-cell\"});\n      var view  = this.find(\".nb-view\")\n      var viewrect;\n\n      if ( options.if_visible ) {\n\tif ( view.find(\".nb-content > div.nb-cell\").length > 0 )\n\t  viewrect = view[0].getBoundingClientRect();\n      }\n\n      if ( relto ) {\n\tif ( options.where == 'above' ) {\n\t  if ( viewrect ) {\n\t    var seltop = relto[0].getBoundingClientRect().top;\n\t    if ( seltop < viewrect.top )\n\t      return false;\n\t  }\n\t  $(cell).insertBefore(relto);\n\t} else {\n\t  if ( viewrect ) {\n\t    var selbottom = relto[0].getBoundingClientRect().bottom;\n\n\t    if ( selbottom > viewrect.bottom - 20 )\n\t      return false;\n\t  }\n\t  $(cell).insertAfter(relto);\n\t}\n      } else {\n\tvar content = this.find(\".nb-content\");\n\n\tif ( viewrect ) {\n\t  var cbottom = content[0].getBoundingClientRect().bottom;\n\n\t  if ( cbottom > viewrect.bottom - 20 )\n\t    return false;\n\t}\n\tcontent.append(cell);\n      }\n\n      if ( !options.cell ) {\n\t$(cell).nbCell(options.restore);\n      }\n      $(cell).nbCell('assignName');\n      this.notebook('updatePlaceHolder');\n      this.notebook('active', $(cell));\n      this.notebook('checkModified');\n\n      return this;\n    },\n\n    /**\n     * Organize the notebook.  This maintains the section hierarchy\n     * and places a hover menu to insert a new cell\n     */\n    organize: function() {\n      var notebook = this;\n      var content  = this.find(\".nb-content\");\n      var cells    = content.children(\".nb-cell\");\n\n      // ensure there is a menu before and after each cell\n      cells.each(function() {\n\tvar cell = $(this);\n\n\tif ( !cell.prev().hasClass(\"nb-menu\") )\n\t  cell.before(notebook_menu());\n\tif ( !cell.next().hasClass(\"nb-menu\") )\n\t  cell.after(notebook_menu());\n      });\n\n      // remove duplicate menus\n      content.children(\".nb-menu\").each(function() {\n\tvar menu = $(this);\n\tif ( menu.next().hasClass(\"nb-menu\") )\n\t  menu.remove();\n      });\n    },\n\n\t\t /*******************************\n\t\t *\t   SAVE/RESTORE\t\t*\n\t\t *******************************/\n\n    /**\n     * Setup connection to the storage manager.\n     */\n    setupStorage: function(storage) {\n      var notebook = this;\n\n      storage = $.extend(storage, {\n        getValue: function() {\n\t  return notebook.notebook('value');\n\t},\n\tsetValue: function(source) {\n\t  return notebook.notebook('setSource', source);\n\t},\n\tchangeGen: function() {\n\t  return notebook.notebook('changeGen');\n\t},\n\tisClean: function(gen) {\n\t  var cgen = notebook.notebook('changeGen');\n\t  return gen == cgen;\n\t},\n\tmarkClean: function(clean) {\n\t  notebook.notebook('markClean', clean);\n\t},\n\tcleanGeneration: this.notebook('changeGen'),\n\tcleanData:       this.notebook('value'),\n\tcleanCheckpoint: \"load\",\n\ttypeName:\t \"notebook\"\n      });\n\n      return this.storage(storage);\n    },\n\n    /**\n     * Set the source\n     */\n    setSource: function(source) {\n      if ( typeof(source) == \"string\" )\n\tsource = {data:source};\n\n      this.notebook('value', source.data);\n    },\n\n    /**\n     * Set or get the state of this notebook as a string.\n     * @param {Object} options\n     * @param {Boolean} [options.skipEmpty=false] if `true`, do not save\n     *\t\t        empty cells.\n     * @param {Boolean} [options.fullscreen] if `true', go fullscreen.\n     * Default is `true` if the toplevel `div.notebook` has a class\n     * `fullscreen`.\n     * @param [String] val is an HTML string that represents\n     * the notebook state.\n     */\n    value: function(val, options) {\n      options = options||{};\n\n      if ( val == undefined ) {\n\tvar classes = this[pluginName]('getClasses');\n\tclasses.unshift(\"notebook\");\n\tvar dom = $.el.div({class: classes.join(\" \")});\n\n\tthis.notebook('assignCellNames', false);\n\tthis.find(\".nb-cell\").each(function() {\n\t  cell = $(this);\n\t  if ( !(options.skipEmpty && cell.nbCell('isEmpty')) )\n\t    $(dom).append(cell.nbCell('saveDOM'));\n\t});\n\n\treturn stringifyNotebookDOM(dom);\n      } else {\n\tvar notebook = this;\n\tvar content  = this.find(\".nb-content\");\n\tvar dom = $.el.div();\n\tvar isnew = content.children(\".nb-cell\").length == 0;\n\n\tcontent.html(\"\");\n\tdom.innerHTML = val;\t\t/* do not execute scripts */\n\tvar outer_div = $(dom).find(\"div.notebook\");\n\n\tthis.removeClass(\"fullscreen hide-navbar\");\n\tif ( outer_div.hasClass(\"open-fullscreen\") ) {\n\t  options.fullscreen = true;\n\t  this.addClass(\"open-fullscreen\");\n\t} else if ( outer_div.hasClass(\"fullscreen\") ) {\n\t  options.fullscreen = true;\n\t  this.removeClass(\"fullscreen\");\n\t}\n\tif ( outer_div.hasClass(\"hide-navbar\") )\n\t{ options.hide_navbar = true;\n\t  this.addClass(\"hide-navbar\");\n\t}\n\n\tif ( isnew && options.fullscreen ) {\n\t  this.notebook('fullscreen', true, options.hide_navbar);\n\t}\n\n\t$(dom).find(\".nb-cell\").each(function() {\n\t  var cell = $.el.div({class:\"nb-cell\"});\n\t  content.append(cell);\n\t  $(cell).nbCell($(this));\n\t});\n\n\tthis.find(\".nb-cell\").nbCell('onload');\n\tthis.notebook('run_all', 'onload');\n\tthis.notebook('updatePlaceHolder');\n\tthis.notebook('assignCellNames', false);\n\tthis.notebook('organize');\n      }\n    },\n\n    /**\n     * @return {Array} of class names that are preserved.\n     */\n    getClasses: function() {\n      var found = this.attr(\"class\").split(\" \");\n      var classes = [];\n      var allowed = [\"open-fullscreen\", \"hide-navbar\"];\n\n      for(var i=0; i<found.length; i++) {\n\tif ( allowed.indexOf(found[i]) >= 0 )\n\t  classes.push(found[i]);\n      }\n\n      return classes.sort();\n    },\n\n    /**\n     * Compute a state fingerprint for the entire notebook\n     * @return {String} SHA1 fingerprint\n     */\n    changeGen: function() {\n      var list = this[pluginName]('getClasses');\n      this.find(\".nb-cell\").each(function() {\n\tvar cg = $(this).nbCell('changeGen');\n\tlist.push(cg);\n      });\n      return sha1(list.join());\n    },\n\n    /**\n     * Assign names to all cells.  This is normally done as the\n     * notebook is created, but needs to be done for old notebooks\n     * if functions are used that require named cells.  Calling this\n     * method has no effect if all cells already have a name.\n     */\n    assignCellNames: function(check) {\n      this.find(\".nb-cell\").nbCell('assignName');\n      if ( check != false )\n\tthis.notebook('checkModified');\n      return this;\n    },\n\n\n\t\t /*******************************\n\t\t *\t       HELP\t\t*\n\t\t *******************************/\n\n    updatePlaceHolder: function() {\n      if ( this.find(\".nb-content\").find(\".nb-cell\").length == 0 )\n\tthis.notebook('placeHolder');\n      else\n\tthis.find(\".nb-placeholder\").remove();\n    },\n\n    placeHolder: function() {\n      var menu\t      = notebook_menu();\n      var select      = cell_type_select_div();\n      var placeholder = $.el.div({class:\"nb-placeholder\"});\n      var a;\n\n      $(menu).append(select);\n      placeholder.append(\n\tmenu,\n\t$.el.div({class:\"nb-help\"},\n\t\t \"New here?  See the notebook \",\n\t\t a=$.el.a(\"help page\"),\n\t\t \".\"));\n      $(a).on(\"click\", function() {\n\t$(\".swish-event-receiver\").trigger(\"help\", {file:\"notebook.html\"});\n      });\n      this.find(\".nb-content\").append(placeholder);\n\n      return this;\n    },\n\n    /**\n     * Run the notebook\n     */\n    run_all: function(why) {\n      var queries = [];\n\n      why = why||'all';\n\n      this.notebook('clear_all');\n\n      this.find(\".nb-cell.query\").each(function() {\n\tif ( why == 'all' || $(this).data('run') == why )\n\t  queries.push(this);\n      });\n\n      function cont(pengine) {\n\tswitch(pengine.state) {\n\t  case 'error':\n\t  case 'aborted':\n\t    return false;\n\t}\n\n\treturn true;\n      }\n\n      if ( queries.length > 0 ) {\n\tqueries.current = 0;\n\tvar complete = function(pengine) {\n\t  if ( cont(pengine) &&\n\t       ++queries.current < queries.length ) {\n\t    $(queries[queries.current]).nbCell('run', {\n\t      complete: complete\n\t    })\n\t  }\n\t};\n\n\t$(queries[0]).nbCell('run', {\n\t  complete: complete\n\t});\n      }\n    },\n\n    /**\n     * Erase all query output, killing possibly running queries\n     */\n    clear_all: function() {\n      this.find(\".prolog-runner\").prologRunner('close');\n    }\n  }; // methods\n\n  // <private functions>\n\n  /**\n   * @returns {Object|null} cell that is focussed and inside our\n   * notebook.\n   * @param {Object} nb is the notebook\n   */\n  function currentCell(nb) {\n    var active = $(nb).find(\".nb-cell.active\");\n\n    if ( active.length == 1 )\n      return active.first();\n\n    return null;\n  }\n\n  function stringifyNotebookDOM(dom) {\n    /*\n     * Attributes from .html() are not ordered.  We need a canonical\n     * representation and therefore we need to reorder the HTML\n     * attributes and map the attribute names to lower case.\n     */\n    function orderAttrs(s) {\n      attrs = s.match(/[-a-z]+=\"[^\"]*\"/g);\n      if ( attrs ) {\n\tvar start = s.match(/^<[a-z]* /);\n\tfor(var i=0; i<attrs.length; i++) {\n\t  var l = attrs[i].split(/=(.*)/);\n\t  attrs[i] = l[0].toLowerCase()+\"=\"+l[1];\n\t}\n\treturn start[0]+attrs.sort().join(\" \")+\">\";\n      } else\n\treturn s;\n    }\n\n    var html = $($.el.div(dom)).html();\n    var nest = [];\n    return html.replace(/(<div [^>]*>|<\\/div>)/g, function(t) {\n      var is_cell;\n      if ( t == \"</div>\" ) {\n\tis_cell = nest.pop();\n\treturn is_cell ? \"\\n\"+t+\"\\n\" : t;\n      } else {\n\tis_cell = (t.match(/(nb-cell|notebook)/) != null);\n\tnest.push(is_cell);\n\treturn is_cell ? \"\\n\"+orderAttrs(t)+\"\\n\" : t;\n      }\n    }).slice(1);\n  }\n\n  tabbed.tabTypes.notebook = {\n    dataType: \"swinb\",\n    typeName: \"notebook\",\n    label: \"Notebook\",\n    contentType: \"text/x-prolog-notebook\",\n    order: 200,\n    create: function(dom, options) {\n      $(dom).notebook(options);\n    }\n  };\n\n  /**\n   * <Class description>\n   *\n   * @class notebook\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.notebook = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n\t\t /*******************************\n\t\t *\t    PLUGIN nbCell\t*\n\t\t *******************************/\n\n(function($) {\n  var pluginName = 'nbCell';\n  var id = 0;\t\t\t\t/* generate unique cell ids */\n\n  /** @lends $.fn.nbCell */\n  var methods = {\n    /**\n     * Create a new notebook cell\n     * @param {options} [jQuery|Object] initialise the new cell from the saved\n     * DOM or Object.\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\t\t\t/* private data */\n\tvar g;\n\n\telem.data(pluginName, data);\t/* store with element */\n\telem.attr(\"tabIndex\", -1);\n\telem.attr(\"id\", \"nbc\"+id++);\n\n\tif ( options instanceof jQuery ) {\n\t  elem.nbCell('restoreDOM', options);\n\t} else if ( options && options.type ) {\n\t  elem.nbCell('type', options.type);\n\t} else {\n\t  var close = glyphButton(\"remove-circle\", \"close\", \"Close\",\n\t\t\t\t  \"default\", \"xs\");\n\t  elem.append(close);\n\t  $(close).addClass(\"close-select\");\n\t  $(close).on(\"click\", function() {\n\t    elem.nbCell('close');\n\t  });\n\n\t  var select = cell_type_select_div();\n\t  elem.append(select);\n\n\t  select.find(\".btn-group\").on(\"click\", \".btn\", function(ev) {\n\t    elem.nbCell('type', $(ev.target).data('type'));\n\t  });\n\n\t  elem.append($.el.div({class:\"nb-type-more\"},\n\t\t\t       typeMore(),\n\t\t\t       typeLess($.el.label(\"Insert notebook from \" +\n\t\t\t\t\t\t   \"local file \"),\n\t\t\t\t\tfileInsertInput()[0])));\n\t}\n      });\n    },\n\n    /**\n     * (de)activate the current cell.\n     */\n    active: function(val) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = elem.data(pluginName);\n\n\tif ( val ) {\n\t  elem.addClass(\"active\");\n\t  switch( data.type ) {\n\t    case \"program\":\n\t      elem.find(\".editor\").prologEditor('makeCurrent');\n\t      break;\n\t    case \"query\":\n\t      var prevprog = elem.nbCell('prev', \".program\");\n\t      if ( prevprog )\n\t\tprevprog.find(\".editor\").prologEditor('makeCurrent');\n\t      elem.closest(\".notebook\")\n\t\t  .find(\".nb-cell.program\")\n\t\t  .not(elem.nbCell(\"program_cells\"))\n\t\t  .addClass(\"not-for-query\");\n\t      break;\n\t  }\n\t} else if ( elem.length > 0 ) {\n\t  elem.removeClass(\"active\");\n\t  switch( data.type ) {\n\t    case \"markdown\":\n\t    case \"html\":\n\t      if ( elem.hasClass(\"runnable\") ) {\n\t\telem.nbCell('run');\n\t      }\n\t      break;\n\t  }\n\t}\n      });\n    },\n\n    /**\n     * Get the next/previous program cell.  Will eventually walk the\n     * hierarchy if we add sections to the notebook.\n     * @param String [selector] Add additional selection\n     */\n\n    next: function(sel) {\n      var next = this.nextAll(\".nb-cell\"+(sel||\"\")).first();\n      return next.length ? next : null;\n    },\n\n    prev: function(sel) {\n      var prev = this.prevAll(\".nb-cell\"+(sel||\"\")).first();\n      return prev.length ? prev : null;\n    },\n\n    ensure_in_view: function(where) {\n      var top  = this.position().top;\n      var view = this.closest(\".nb-view\");\n      var stop = view.scrollTop();\n      var vh   = view.height();\n\n      if ( top > stop &&\n\t   top + this.height() < stop + vh )\n\treturn;\n\n      if ( where != 'top' ) {\n\ttop = top + this.height() - vh + 40;\n      }\n\n      this.nbCell('active', true);\n      view.scrollTop(top);\n    },\n\n    type: function(type) {\n      var data = this.data(pluginName);\n      if ( data.type != type ) {\n\tmethods.type[type].apply(this);\n\tdata.type = type;\n\tthis.addClass(type);\n\tthis.removeAttr(\"name\");\n\tthis.nbCell('assignName');\n      }\n      return this;\n    },\n\n    /**\n     * Give the cells in a jQuery set a unique name inside their\n     * notebook.\n     */\n    assignName: function() {\n      return this.each(function() {\n\tvar cell = $(this);\n\n\tif ( !cell.attr(\"name\") ) {\n\t  var data   = cell.data(pluginName);\n\t  if ( data.type ) {\n\t    var prefix = cellTypes[data.type].prefix;\n\t    var nb     = cell.closest(\".notebook\");\n\n\t    for(i=1; ; i++) {\n\t      var name = prefix+i;\n\t      if ( nb.find(\"*[name=\"+name+\"]\").length == 0 ) {\n\t\tcell.attr(\"name\", name);\n\t\tbreak;\n\t      }\n\t    }\n\t  }\n\t}\n      });\n    },\n\n    /**\n     * Run the current cell\n     */\n    run: function() {\n      var args = arguments;\n\n      return this.each(function() {\n\tvar cell = $(this);\n\tif ( cell.hasClass(\"runnable\") ) {\n\t  var data = cell.data(pluginName);\n\n\t  return methods.run[data.type].apply(cell, args);\n\t} else {\n\t  console.log(\"Cell is not runnable: \", cell);\n\t}\n      });\n    },\n\n    runTabled: function() {\n      return this.nbCell('run', {tabled:true});\n    },\n\n    onload: function() {\n      var args = arguments;\n\n      this.each(function() {\n\tvar cell = $(this);\n\tvar data = cell.data(pluginName);\n\n\tif ( methods.onload[data.type] )\n\t  methods.onload[data.type].apply(cell, args);\n      });\n\n      return this.nbCell('refresh');\n    },\n\n    close: function() {\n      this.find(\".prolog-runner\").prologRunner('close');\n      return this.remove();\n    },\n\n    refresh: function() {\n      if ( this.hasClass(\"program\") ) {\n\tthis.find(\"a[data-action='background']\")\n            .attr('title', this.hasClass(\"background\") ?\n\t\t\t     \"Used for all queries in this notebook\" :\n\t\t             \"Used for queries below this cell\");\n\n      }\n      return this;\n    },\n\n    getSettings: function() {\n      return {\n        tabled: this.data(\"tabled\") == \"true\",\n\trun:    this.data(\"run\")    == \"onload\",\n\tchunk:  parseInt(this.data(\"chunk\")||\"1\"),\n\tname:   this.attr(\"name\")\n      };\n    },\n\n    /**\n     * Present a modal that shows the current query properties and\n     * allows for changing them.\n     */\n    settings: function() {\n      var elem    = this;\n      var current = this.nbCell('getSettings');\n\n      function querySettingsBody() {\n\tthis.append($.el.form(\n          { class:\"form-horizontal\"\n\t  },\n\t  form.fields.checkboxes(\n\t\t[ { name: \"tabled\",\n\t\t    label: \"table results\",\n\t\t    value: current.tabled,\n\t\t    title: \"Table results\"\n\t\t  },\n\t\t  { name: \"run\",\n\t\t    label: \"run on page load\",\n\t\t    value: current.run,\n\t\t    title: \"Run when document is loaded\"\n\t\t  }\n\t\t], {col:3}),\n\t  form.fields.chunk(current.chunk),\n\t  form.fields.name(current.name||\"\"),\n\t  form.fields.buttons(\n\t  { label: \"Apply\",\n\t    offset: 3,\n\t    action: function(ev, values) {\n\t      if ( values.tabled != current.tabled ) {\n\t\tif ( values.tabled )\n\t\t  elem.data(\"tabled\", \"true\");\n\t\telse\n\t\t  elem.removeData(\"tabled\");\n\t      }\n\t      if ( values.run != current.run ) {\n\t\tif ( values.run )\n\t\t  elem.data(\"run\", \"onload\");\n\t\telse\n\t\t  elem.removeData(\"run\");\n\t      }\n\t      if ( values.chunk != current.chunk ) {\n\t\tif ( values.chunk != 1 )\n\t\t  elem.data(\"chunk\",  \"\"+values.chunk);\n\t\telse\n\t\t  elem.removeData(\"chunk\");\n\t      }\n\t      var name = values.name ? values.name.trim() : \"\";\n\t      if (  name != current.name ) {\n\t\tif ( name )\n\t\t  elem.attr(\"name\", name);\n\t\telse\n\t\t  elem.attr(\"name\", null);\n\t      }\n\t      elem.closest(\".notebook\").notebook('checkModified');\n\t    }\n\t  })));\n      }\n\n      form.showDialog({ title: \"Set options for query\",\n                        body: querySettingsBody\n                      });\n    },\n\n    /**\n     * Change the editor of a program cell to fixed (one line) height\n     */\n    singleline: function() {\n      this.toggleClass(\"singleline\");\n      this.find(\".editor\").prologEditor('refresh');\n      glyphButtonGlyph(this, \"singleline\",\n\t\t       this.hasClass(\"singleline\")\n\t\t\t\t? \"triangle-left\"\n\t\t\t\t: \"triangle-bottom\");\n      this.find(\"a[data-action=singleline]\").blur();\n      return this;\n    },\n\n    /**\n     * Toggle a program fragment to be background/non-background\n     */\n    background: function() {\n      this.toggleClass(\"background\");\n      this.find(\"a[data-action=background]\").blur();\n      this.closest(\".notebook\").notebook('checkModified');\n      this.nbCell('refresh');\n      return this;\n    },\n\n    /**\n     * Returns all program cells in current notebook that are loaded\n     * for executing the current cell.  This always starts with the\n     * background programs.  If `this` is a program cell, it is added.\n     * Otherwise the program cell before `this` is added.\n     * @return {jQuery} set of nbCell elements that form the\n     * sources for the receiving query cell.\n     */\n    program_cells: function() {\n      var data = this.data(pluginName);\n      var programs = this.closest(\".notebook\")\n\t                 .find(\".nb-cell.program.background\");\n      if ( this.hasClass(\"program\") ) {\n\tif ( !this.hasClass(\"background\") )\n\t  programs = programs.add(this);\n      } else {\n\tprograms = programs.add(this.nbCell('prev', \".program\"));\n      }\n      return programs;\n    },\n\n    programs: function() {\n      var cells = this.nbCell('program_cells');\n      return cells.find(\".editor\");\n    },\n\n    isEmpty: function() {\n      return methods.isEmpty[this.data(pluginName).type].call(this);\n    },\n\n    saveDOM: function() {\n      return methods.saveDOM[this.data(pluginName).type].call(this);\n    },\n\n    restoreDOM: function(dom) {\n      var data = this.data(pluginName);\n\n      function domCellType(dom) {\n\tfor(var k in cellTypes) {\n\t  if ( cellTypes.hasOwnProperty(k) && dom.hasClass(k) )\n\t    return k;\n\t}\n      }\n\n      data.type = domCellType(dom);\n      methods.restoreDOM[data.type].apply(this, arguments);\n      this.addClass(data.type);\n    },\n\n    /**\n     * Compute a state fingerprint for the current cell.\n     */\n    changeGen: function() {\n      var type = this.data(pluginName).type;\n\n      if ( type )\n\treturn methods.changeGen[type].call(this);\n      else\n\treturn 0;\n    },\n\n    text: function() {\n      return cellText(this);\n    }\n  }; // methods\n\n\t\t /*******************************\n\t\t *\t     SET TYPE\t\t*\n\t\t *******************************/\n\n  methods.type.markdown = function(options) {\t/* markdown */\n    var editor;\n    var cell = this;\n\n    options = options||{};\n    options.mode = \"markdown\";\n    options.fencedCodeBlockHighlighting = true;\n\n    function setAttr(name) {\n      if ( options[name] != undefined ) {\n\tcell.attr(name, \"\"+options[name]);\n\tdelete options[name];\n      }\n    }\n    setAttr(\"name\");\n\n    this.html(\"\");\n    this.append(editor=$.el.div({class:\"editor\"}));\n    $(editor).prologEditor(options);\n    this.addClass(\"runnable\");\n  }\n\n  methods.type.html = function(options) {\t/* HTML */\n    var editor;\n    var cell = this;\n\n    options = options||{};\n    options.mode = \"htmlmixed\";\n\n    function setAttr(name) {\n      if ( options[name] != undefined ) {\n\tcell.attr(name, \"\"+options[name]);\n\tdelete options[name];\n      }\n    }\n    setAttr(\"name\");\n\n    this.html(\"\");\n    this.append(editor=$.el.div({class:\"editor\"}));\n    $(editor).prologEditor(options);\n    this.addClass(\"runnable\");\n  }\n\n  methods.type.program = function(options) {\t/* program */\n    var cell = this;\n    var editor;\n\n    options = options||{};\n    options.autoCurrent = false;\n    options.getSource = function() {\n      var programs = cell.nbCell('programs');\n      return programs.prologEditor('getSource', \"source\", true);\n    };\n\n    this.html(\"\");\n\n    var buttons = $.el.div(\n      {class:\"btn-group nb-cell-buttons\", role:\"group\"},\n      glyphButton(\"triangle-bottom\", \"singleline\", \"Show only first line\",\n\t\t  \"default\", \"xs\"),\n      imageButton(\"background\", \"Use as background program\", \"xs\"));\n    this.append(buttons,\n\t\teditor=$.el.div({class:\"editor with-buttons\"}));\n    if ( options.background )\n    { this.addClass(\"background\");\n    }\n    if ( options.singleline )\n    { this.nbCell('singleline');\n    }\n    $(editor).prologEditor(options);\n  }\n\n  methods.type.query = function(options) {\t/* query */\n    var editor;\n    var cell = this;\n\n    this.html(\"\");\n\n    options = options||{};\n    if ( options.tabled == undefined )\n      options.tabled = preferences.getVal(\"tabled_results\");\n\n    function setData(name) {\n      if ( options[name] != undefined ) {\n\tcell.data(name, \"\"+options[name]);\n\tdelete options[name];\n      }\n    }\n    function setAttr(name) {\n      if ( options[name] != undefined ) {\n\tcell.attr(name, \"\"+options[name]);\n\tdelete options[name];\n      }\n    }\n    setData(\"tabled\");\n    setData(\"chunk\");\n    setData(\"run\");\n    setAttr(\"name\");\n\n    options = $.extend({}, options,\n      { role: \"query\",\n\tsourceID: function() {\n\t  return cell.nbCell('programs').prologEditor('getSourceID');\n\t},\n\tprologQuery: function(q) {\n\t  cell.nbCell('run');\n\t}\n      });\n\n    var buttons = $.el.div(\n      {class:\"btn-group nb-cell-buttons\", role:\"group\"},\n      glyphButton(\"wrench\", \"settings\", \"Settings\",\n\t\t  \"default\", \"xs\"),\n      glyphButton(\"play\", \"run\",       \"Run query\",\n\t\t  \"primary\", \"xs\"));\n\n    function wrapSolution(a)\n    { this.find(\".editor.query\").prologEditor('wrapSolution', $(a).text());\n    }\n\n    var menu = form.widgets.dropdownButton(\n      $.el.span({class:\"glyphicon glyphicon-menu-hamburger\"}),\n      { client: cell,\n\tdivClass: \"nb-query-menu\",\n        actions: {\n\t  \"Aggregate (count all)\": wrapSolution,\n\t  \"--\":\t\t\t   null,\n\t  \"Projection\":\t\t   wrapSolution,\n\t  \"Order by\":              wrapSolution,\n\t  \"Distinct\":              wrapSolution,\n\t  \"Limit\":\t\t   wrapSolution\n        }\n      });\n\n    this.append(buttons,\n\t\t$.el.div({class:\"query with-buttons\"},\n\t\t\t menu,\n\t\t\t $.el.span({class:\"prolog-prompt\"}, \"?-\"),\n\t\t\t editor=$.el.div({class:\"editor query\"})));\n\n    $(editor).prologEditor(options);\n    this.addClass(\"runnable\");\n  }\n\n\n\t\t /*******************************\n\t\t *\t    RUN BY TYPE\t\t*\n\t\t *******************************/\n\n  methods.run.markdown = function(markdownText) {\t/* markdown */\n    var cell = this;\n\n    markdownText = markdownText||cellText(this);\n\n    function makeEditable(ev) {\n      var cell = $(ev.target).closest(\".nb-cell\");\n      var text = cell.data('markdownText');\n      cell.removeData('markdownText');\n      methods.type.markdown.call(cell, {value:text});\n      cell.off(\"dblclick\", makeEditable);\n      cell.off(\"click\", links.followLink);\n    }\n\n\n    function setHTML(data) {\n\n      cell.html(data);\n      cell.removeClass(\"runnable\");\n      cell.data('markdownText', markdownText);\n      cell.on(\"dblclick\", makeEditable);\n      cell.on(\"click\", \"a\", links.followLink);\n\n      // call post rendering hooks\n      var nbdata = cell.closest(\".notebook\").data('notebook');\n      if ( nbdata && nbdata.markdown_post_renderer ) {\n\tfor(var i=0; i<nbdata.markdown_post_renderer.length; i++) {\n\t  nbdata.markdown_post_renderer[i].call(cell);\n\t}\n      }\n    }\n\n    if ( markdownText.trim() != \"\" )\n    { $.ajax({ type: \"POST\",\n\t       url: config.http.locations.markdown,\n\t       data: markdownText,\n\t       contentType: \"text/plain; charset=UTF-8\",\n\t       success: setHTML\n\t     });\n    } else\n    { setHTML(\"<div class='nb-empty-markdown'>\"+\n\t      \"Empty markdown cell.  Double click to edit\"+\n\t      \"</div>\");\n    }\n  };\n\n  methods.run.html = function(htmlText, options) {\n    var cell = this;\n\n    options = options||{};\n    if ( options.html == false )\n    { runScripts();\n      return;\n    }\n\n    htmlText = (htmlText||cellText(this)).trim();\n\n    function makeEditable(ev) {\n      if ( !( $(ev.target).is(\"input\") || /* allow double click inside these */\n\t      $(ev.target).is(\"textarea\")\n\t    ) ) {\n\tvar cell = $(ev.target).closest(\".nb-cell\");\n\tvar text = cell.data('htmlText');\n\tcell.removeData('htmlText');\n\tmethods.type.html.call(cell, {value:text});\n\tcell.off(\"dblclick\", makeEditable);\n\tcell.off(\"click\", links.followLink);\n      }\n    }\n\n    function runScripts() {\n      if ( config.swish.notebook.eval_script == true &&\n\t   options.eval_script != false ) {\n\tvar scripts = [];\n\n\tcell.find(\"script\").each(function() {\n\t  var type = this.getAttribute('type')||\"text/javascript\";\n\t  if ( type == \"text/javascript\" )\n\t    scripts.push(this.textContent);\n\t});\n\n\tif ( scripts.length > 0 ) {\n\t  var script = \"(function(notebook){\" + scripts.join(\"\\n\") + \"})\";\n\t  var nb = new Notebook({\n\t    cell: cell[0]\n\t  });\n\n\t  try {\n\t    eval(script)(nb);\n\t  } catch(e) {\n\t    alert(e);\n\t  }\n\t}\n      }\n    }\n\n    function runHTML(data) {\n      cell[0].innerHTML = data;\n      runScripts();\n    }\n\n    function setHTML(data) {\n      runHTML(data);\n      cell.removeClass(\"runnable\");\n      cell.data('htmlText', htmlText);\n      cell.on(\"dblclick\", makeEditable);\n      cell.on(\"click\", \"a\", links.followLink);\n    }\n\n    if ( htmlText != \"\" )\n    { setHTML(htmlText);\n    } else\n    { setHTML(\"<div class='nb-placeholder'>\"+\n\t      \"Empty HTML cell.  Double click to edit\"+\n\t      \"</div>\");\n    }\n  };\n\n  methods.run.program = function() {\t\t/* program */\n    modal.alert(\"Please define a query to run this program\");\n  };\n\n  /**\n   * Run a query cell.\n   * @param {Object} [options]\n   * @param {Any}    [options.bindings] Initial bindings.  If this is a\n   *\t\t     string, it is simply prepended to the query.  If\n   *\t\t     it is an object, it is translated into a sequence\n   *\t\t     of Prolog unifications to bind the variables.\n   * @param {Function} [options.success] Function run on success.  See\n   *\t\t     `prologRunner._init()`.\n   * @param {Function} [options.complete] Function run on complete.  See\n   *\t\t     `prologRunner._init()`.\n   */\n  methods.run.query = function(options) {\t/* query */\n    var programs = this.nbCell('programs');\n    var settings = this.nbCell('getSettings');\n    var text     = cellText(this);\n\n    options = options||{};\n    if ( options.bindings ) {\n      var pretext = \"\";\n      if ( typeof(options.bindings) === 'string' ) {\n\tpretext = options.bindings;\n      } else {\n\tfor(var k in options.bindings) {\n\t  if ( options.bindings.hasOwnProperty(k) ) {\n\t    if ( pretext )\n\t      pretext += \", \";\n\t    pretext += k + \" = \" + Pengine.stringify(options.bindings[k]);\n\t  }\n\t}\n      }\n      if ( pretext )\n\ttext = pretext + \", (\" + prolog.trimFullStop(text) + \")\";\n    }\n    var query = { source:       programs.prologEditor('getSource',\n\t\t\t\t\t\t      \"source\", true),\n                  query:        text,\n\t\t  tabled:       settings.tabled||false,\n\t\t  chunk:        settings.chunk,\n\t\t  title:        false,\n\t\t  query_editor: this.find(\".prolog-editor.query\")\n                };\n    if ( programs[0]  )     query.editor   = programs[0];\n    if ( options.success  ) query.success  = options.success;\n    if ( options.complete ) query.complete = options.complete;\n\n    var runner = $.el.div({class: \"prolog-runner\"});\n    this.find(\".prolog-runner\").prologRunner('close');\n    this.append(runner);\n    $(runner).prologRunner(query);\n  };\n\n\t\t /*******************************\n\t\t *\t       ONLOAD\t\t*\n\t\t *******************************/\n\n/* These methods are executed after all cells have been initialised */\n\n  methods.onload.html = function() {\n    return methods.run.html.call(this,\n\t\t\t\t undefined,\t/* text */\n\t\t\t\t {html:false, eval_script:true});\n  };\n\n\n\t\t /*******************************\n\t\t *\tSAVE/RESTORE DOM\t*\n\t\t *******************************/\n\n/* ---------------- saveDOM ---------------- */\n\n  methods.saveDOM.markdown = function() {\t/* markdown */\n    var text = this.data('markdownText') || cellText(this);\n    var dom  = $.el.div({class:\"nb-cell markdown\"}, text);\n\n    function copyAttr(name) {\n      var value;\n      if ( (value=cell.attr(name)) && value ) {\n\t$(dom).attr(name, value);\n      }\n    }\n\n    copyAttr(\"name\");\n\n    return dom;\n  };\n\n  methods.saveDOM.html = function() {\t\t/* HTML */\n    var text = this.data('htmlText') || cellText(this);\n    var dom  = $.el.div({class:\"nb-cell html\"});\n\n    // assume scripts are executed when put into the DOM\n    $(dom).html(text);\n\n    function copyAttr(name) {\n      var value;\n      if ( (value=cell.attr(name)) && value ) {\n\t$(dom).attr(name, value);\n      }\n    }\n    copyAttr(\"name\");\n\n    return dom;\n  };\n\n  methods.saveDOM.program = function() {\t/* program */\n    var cell = this;\n    var dom = $.el.div({class:\"nb-cell program\"}, cellText(this));\n\n    function copyClassAttr(name) {\n      if ( cell.hasClass(name) ) {\n\t$(dom).attr(\"data-\"+name, true);\n      }\n    }\n    function copyAttr(name) {\n      var value;\n      if ( (value=cell.attr(name)) && value ) {\n\t$(dom).attr(name, value);\n      }\n    }\n\n    copyClassAttr(\"background\");\n    copyClassAttr(\"singleline\");\n    copyAttr(\"name\");\n\n    return dom;\n  };\n\n  methods.saveDOM.query = function() {\t\t/* query */\n    var cell = this;\n    var dom  = $.el.div({class:\"nb-cell query\"}, cellText(this));\n\n    function isDefault(name, value) {\n      if ( name == 'tabled' && (!value || value == \"false\") ) return true;\n      return false;\n    }\n\n    function copyData(name) {\n      var value;\n      if ( (value=cell.data(name)) && !isDefault(name,value) ) {\n\t$(dom).attr(\"data-\"+name, value);\n      }\n    }\n    function copyAttr(name) {\n      var value;\n      if ( (value=cell.attr(name)) && value ) {\n\t$(dom).attr(name, value);\n      }\n    }\n\n    copyData(\"tabled\");\n    copyData(\"chunk\");\n    copyData(\"run\");\n    copyAttr(\"name\");\n\n    return dom;\n  };\n\n/* ---------------- restoreDOM ---------------- */\n\n  methods.restoreDOM.markdown = function(dom) {\t/* markdown */\n    var cell = this;\n    var text = dom.text().trim();\n\n    cell.data('markdownText', text);\n\n    function copyAttr(name) {\n      var value;\n      if ( (value=dom.attr(name)) && value ) {\n\tcell.attr(name, value);\n      }\n    }\n    copyAttr(\"name\");\n\n    methods.run.markdown.call(this, text);\n  };\n\n  methods.restoreDOM.html = function(dom) {\t/* HTML */\n    var cell = this;\n\n    function copyAttr(name) {\n      var value;\n      if ( (value=dom.attr(name)) && value ) {\n\tcell.attr(name, value);\n      }\n    }\n    copyAttr(\"name\");\n\n    methods.run.html.call(this, dom.html(), {eval_script:false});\n  };\n\n  methods.restoreDOM.program = function(dom) {\t/* program */\n    var cell = this;\n    var opts = { value:dom.text().trim() };\n\n    function getAttr(name) {\n      var value;\n      if ( (value=dom.data(name)) ) {\n\topts[name] = value;\n      }\n    }\n    function copyAttr(name) {\n      var value;\n      if ( (value=dom.attr(name)) && value ) {\n\tcell.attr(name, value);\n      }\n    }\n\n    getAttr(\"background\");\n    getAttr(\"singleline\");\n    copyAttr(\"name\");\n\n    methods.type.program.call(this, opts);\n  };\n\n  methods.restoreDOM.query = function(dom) {\t/* query */\n    var opts = { value:dom.text().trim() };\n\n    function getData(name) {\n      var value;\n      if ( (value=dom.data(name)) ) {\n\tif ( name == \"chunk\" )\n\t  opts.chunk = parseInt(value);\n\telse\n\t  opts[name] = value;\n      }\n    }\n    function getAttr(name) {\n      var value;\n      if ( (value=dom.attr(name)) ) {\n\topts[name] = value;\n      }\n    }\n\n    getData(\"tabled\");\n    getData(\"chunk\");\n    getData(\"run\");\n    getAttr(\"name\");\n    if ( opts.tabled == undefined )\n      opts.tabled = false;\n\n    methods.type.query.call(this, opts);\n  };\n\n/* ---------------- changeGen ---------------- */\n\n  methods.changeGen.markdown = function() {\t/* markdown */\n    var text = this.data('markdownText') || cellText(this);\n\n    return sha1(\"M\"+text.trim());\n  };\n\n  methods.changeGen.html = function() {\t/* HTML */\n    var text = this.data('htmlText') || cellText(this);\n\n    return sha1(\"H\"+text.trim());\n  };\n\n  methods.changeGen.program = function() {\t/* program */\n    var text = \"P\";\n    var cell = this;\n\n    function addClassAttr(name, key) {\n      if ( cell.hasClass(name) )\n\ttext += key;\n    }\n\n    addClassAttr(\"background\", \"B\");\n    addClassAttr(\"singleline\", \"S\");\n\n    text += \"V\"+cellText(this).trim();\n    return sha1(text);\n  };\n\n  methods.changeGen.query = function() {\t/* query */\n    var text = \"Q\";\n    var cell = this;\n\n    function addData(name, key) {\n      var value;\n\n      if ( (value=cell.data(name)) )\n\ttext += key+value;\n    }\n    function addAttr(name, key) {\n      var value;\n\n      if ( (value=cell.attr(name)) )\n\ttext += key+value;\n    }\n\n    addData(\"tabled\", \"T\");\n    addData(\"chunk\", \"C\");\n    addData(\"run\", \"R\");\n    addAttr(\"name\", \"N\");\n    text += \"V\"+cellText(this).trim();\n\n    return sha1(text);\n  };\n\n/* ---------------- isEmpty ---------------- */\n\n  methods.isEmpty.markdown = function() {\t/* markdown */\n    var text = this.data('markdownText') || cellText(this);\n\n    return text.trim() == \"\";\n  };\n\n  methods.isEmpty.html = function() {\t/* HTML */\n    var text = this.data('htmlText') || cellText(this);\n\n    return text.trim() == \"\";\n  };\n\n  methods.isEmpty.program = function() {\t/* program */\n    return cellText(this).trim() == \"\";\n  };\n\n  methods.isEmpty.query = function() {\t\t/* query */\n    return cellText(this).trim() == \"\";\n  };\n\n\t\t /*******************************\n\t\t *\t     UTILITIES\t\t*\n\t\t *******************************/\n\n  function cellText(cell) {\n    return cell.find(\".editor\").prologEditor('getSource', undefined, true);\n  }\n\n  /**\n   * Creates a file input that, after a file is selected, replaces\n   * the cell with the content of the local file.\n   */\n  function fileInsertInput() {\n    var form = $('<input type=\"file\" name=\"file\">');\n\n    form.on(\"change\", function(ev) {\n      var reader = new FileReader();\n      reader.onload = function(theFile) {\n\tvar cell = $(ev.target).closest(\".nb-cell\");\n\tvar nb   = cell.closest(\".notebook\");\n\n\tif ( nb.notebook('paste', reader.result) )\n\t  cell.remove();\n      };\n      reader.readAsText(ev.target.files[0]);\n\n      ev.preventDefault();\n      return false;\n    });\n\n    return form;\n  }\n\n  function typeMore() {\n    var div = $('<div class=\"form-more\">' +\n\t\t' <a href=\"#\">more<a>' +\n\t\t'</div>');\n    div.find(\"a\").on(\"click\", function(ev) {\n      var more = $(ev.target).closest(\".form-more\");\n      more.hide(400);\n      more.next().show(400);\n    });\n    return div[0];\n  }\n\n  function typeLess() {\n    var div = $('<div class=\"form-less\" style=\"display:none\">' +\n\t\t' <div><a href=\"#\" class=\"less\">less<a></div>' +\n\t\t'</div>');\n    for(var i=0; i<arguments.length; i++) {\n      div.append(arguments[i]);\n    }\n    div.find(\"a.less\").on(\"click\", function(ev) {\n      var less = $(ev.target).closest(\".form-less\");\n      less.hide(400);\n      less.prev().show(400);\n    });\n\n    return div[0];\n  }\n\n\n  /**\n   * <Class description>\n   *\n   * @class nbCell\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.nbCell = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\nfunction glyphButton(glyph, action, title, style, size) {\n  size = size||\"sm\";\n  var btn = $.el.a({href:\"#\",\n\t\t    class:\"btn btn-\"+style+\" btn-\"+size+\" action-\"+action,\n\t\t    title:title, \"data-action\":action},\n\t\t   $.el.span({class:\"glyphicon glyphicon-\"+glyph}));\n\n  return btn;\n}\n\nfunction imageButton(action, title, size) {\n  size = size||\"sm\";\n  var btn = $.el.a({href:\"#\",\n\t\t    class:\"btn btn-default btn-image btn-\"+size+\" action-\"+action,\n\t\t    title:title, \"data-action\":action},\n\t\t   $.el.span({class:\"image-icon\"}));\n\n  return btn;\n}\n\nfunction glyphButtonGlyph(elem, action, glyph) {\n  var span = elem.find(\"a[data-action=\"+action+\"] > span.glyphicon\");\n\n  span.removeClass(function(i,s) {\n    return s.match(/glyphicon-[-a-z]*/g).join(\" \");\n  }).addClass(\"glyphicon-\"+glyph);\n}\n\nfunction sep() {\n  return $.el.span({class:\"menu-space\"}, \" \");\n}\n\nfunction notebook_menu() {\n  return $.el.div({class:\"nb-menu\"},\n\t\t  $.el.div({class:\"nb-menu-sense\"},\n\t\t\t   $.el.div({class:\"nb-menu-line\"})));\n}\n\nfunction cell_type_select_div() {\n  var g;\n  var div = $.el.div({class:\"nb-type-select\"},\n\t\t     $.el.label(\"Create a \"),\n\t\t     g=$.el.div({class:\"btn-group\",role:\"group\"}),\n\t\t     $.el.label(\"cell here\"));\n\n  for(var k in cellTypes) {\n    if ( cellTypes.hasOwnProperty(k) )\n      $(g).append($.el.button({ type:\"button\",\n\t\t\t\tclass:\"btn btn-default\",\n\t\t\t\t\"data-type\":k\n\t\t\t      },\n\t\t\t      cellTypes[k].label));\n  }\n\n  return $(div);\n}\n\n\n\t\t /*******************************\n\t\t *\t NOTEBOOK ClASS\t\t*\n\t\t *******************************/\n\nfunction Notebook(options) {\n  this.my_cell = options.cell;\n}\n\n/**\n * Create a Pengine from default arguments\n */\nNotebook.prototype.swish = function(options) {\n  var pcells = this.cell().nbCell(\"programs\");\n  var source = pcells.prologEditor('getSource', \"source\", true);\n\n  if ( source )\n    options.src = source;\n\n  return $.swish(options);\n}\n\n/**\n * @param {String} [name] Return (query) cell with given name.  If\n * name is omitted, return the current cell.\n * @return {jQuery} Notebook cells\n */\nNotebook.prototype.cell = function(name) {\n  if ( name )\n    return this.notebook().find('.nb-cell[name=\"'+name+'\"]');\n  else\n    return $(this.my_cell);\n};\n\n/**\n * @returns {jQuery} the notebook as a whole.\n */\nNotebook.prototype.notebook = function() {\n  return $(this.my_cell).closest(\".notebook\");\n};\n\n/**\n * Run named query cell with bindings\n * @param {String} cell Name of the cell to run\n * @param {Object|String} [bindings] Bindings to pass to the query.\n */\nNotebook.prototype.run = function(cell, bindings) {\n  var options = {};\n  if ( bindings )\n    options.bindings = bindings;\n\n  this.cell(cell).nbCell('run', options);\n};\n\n/**\n * Submit a form, calling a predicate\n * @param {String} formsel is the selector to find the form in the\n * notebook cell.\n * @param {Object} options\n * @param {String} options.predicate predicate to call.  The predicate\n * receives one argument, containing the form data as a dict.\n * @param {Function} options.onsuccess is the function run on successful\n * completion\n */\nNotebook.prototype.submit = function(formsel, options) {\n  var formel = this.$(formsel);\n  var data   = form.serializeAsObject(formel);\n\n  form.formError(formel, null);\n  this.swish({\n    ask: options.predicate+\"((\"+Pengine.stringify(data)+\"))\",\n    onerror: function(data) { form.formError(formel, data); },\n    onsuccess: options.onsuccess\n  });\n};\n\n/**\n  * Bind the query default button to this HTML cell.  The callback\n  * function is passed an object with a method `run(bindings)`, where\n  * `bindings` is an object holding `VarName: Value` keys.\n  */\nNotebook.prototype.bindQuery = function(a1, a2) {\n  var that = this;\n  var q;\n  var func;\n\n  if ( typeof(a1) == \"function\" && a2 == undefined ) {\n    q = this.cell().nbCell('next', \".query\");\n    func = a1;\n  } else {\n    q = this.cell(a1);\n    func = a2;\n  }\n\n  if ( q.length > 0 ) {\n    q.find(\".action-run\").off(\"click\").on(\"click\", function(ev) {\n      var query = {\n        run: function(bindings) {\n\t  q.nbCell('run', {bindings:bindings});\n\t}\n      };\n\n      func.call(that, query);\n      ev.preventDefault();\n      return false;\n    });\n  } else {\n    alert(\"No query named '\"+cell+\"'\");\n  }\n};\n\n/**\n * Hide the query and buttons of a named query cell\n * @param {String} cell is the name of the query cell to hide\n * @param {Boolean} [on] If `true` (default), hide the cell.\n */\nNotebook.prototype.hideQuery = function(cell, on) {\n  var q = this.cell(cell);\n  if ( on == undefined )\n    on = true;\n\n  if ( q.length > 0 ) {\n    if ( on == true ) {\n      q.find(\".nb-cell-buttons\").hide();\n      q.find(\".query\").hide();\n    } else {\n      q.find(\".nb-cell-buttons\").show();\n      q.find(\".query\").show();\n    }\n  } else {\n    alert(\"No query named '\"+cell+\"'\");\n  }\n}\n\nNotebook.prototype.$ = function(selector) {\n  return this.cell().find(selector);\n}\n\nNotebook.prototype.loadCSS = function(url) {\n  return utils.loadCSS(url);\n}\n\n/**\n * Add a hook that is called after a markdown cell is filled with\n * rendered HTML\n */\n\nNotebook.prototype.markdown_post_renderer = function(f) {\n  var data = this.notebook().data('notebook');\n\n  if ( data ) {\n    if ( data.markdown_post_renderer != undefined )\n      data.markdown_post_renderer.push(f);\n    else\n      data.markdown_post_renderer = [f];\n  }\n}\n\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Embed the navigation bar\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\n\ndefine('navbar',[ \"jquery\", \"preferences\", \"form\", \"laconic\" ],\n       function($, preferences, form) {\n\n(function($) {\n  var pluginName = 'navbar';\n\n  /** @lends $.fn.navbar */\n  var methods = {\n    /**\n     * Initialize a navigation bar.  For example:\n     *\n     *     $(\"#navbar\").navbar(\n     *       { \"File\":\n     *         { \"New\": function() { ... },\n     *           \"Save\": function() { ... }\n     *         },\n     *         \"Edit\":\n     *         { \"Undo\": function() { ... }\n     *         }\n     *       });\n     *\n     * @param {Object} actions Nested object mapping menu labels to\n     * submenus or functions.\n     */\n    _init: function(actions) {\n\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\n\n\tfor(var p in actions) {\n\t  if ( actions.hasOwnProperty(p) ) {\n\t    elem.navbar('appendDropdown', p);\n\t    elem.navbar('populateDropdown', p, actions[p]);\n\t  }\n\t}\n\n\telem.on(\"click\", \"a\", function(ev) { runMenu(this, ev); } );\n      });\n    },\n\n    /**\n     * @param {String} label Name of new dropdown to add\n     */\n    appendDropdown: function(label) {\n      var ul1 = this.children(\".nav.navbar-nav.menubar\");\n      var ul2 = $.el.ul({name:label, class:\"dropdown-menu\"});\n      var li  = $.el.li({class:\"dropdown\"},\n\t\t\t$.el.a({class:\"dropdown-toggle\",\n\t\t\t\t\"data-toggle\":\"dropdown\"\n\t\t\t       },\n\t\t\t       label,\n\t\t\t       $.el.b({class:\"caret\"})),\n\t\t\tul2);\n\n      ul1.append(li);\n\n      return this;\n    },\n\n    /**\n     * @param {String} name Name of the dropdown to populate\n     * @param {Object|function} actions Object relating dropdown menu\n     * labels to functions.  If a function is passed, it is called with\n     * two arguments: the navbar and the name of the dropdown to\n     * populate.\n     */\n    populateDropdown: function(name, actions) {\n      if ( typeof(actions) == \"function\" ) {\n\tactions(this, name);\n      } else {\n\tvar ul = dropDownUL(this, name);\n\n\tfor(var p in actions) {\n\t  if ( actions.hasOwnProperty(p) ) {\n\t    appendDropdown(ul, p, actions[p]);\n\t  }\n\t}\n      }\n    },\n\n    /**\n     * @param {String} name is the name of the dropdown to clear\n     */\n    clearDropdown: function(name) {\n      var ul = dropDownUL(this, name);\n\n      ul.html(\"\");\n      return this;\n    },\n\n    /**\n     * @example\n     * $(\"#navbar\").navbar('extendDropdown', 'File',\n     *                     'Save as', function () { ... });\n     * @param {String} name is the dropdown to extend\n     * @param {String} label is the label to add\n     * @param {function} onclick is the action to perform\n     */\n    extendDropdown: function(name, label, onclick) {\n      var ul = dropDownUL(this, name);\n\n      appendDropdown(ul, label, onclick);\n    }\n  }; // methods\n\n  /**\n   * Append something to a navbar dropdown.\n   *\n   * @param {Object} dropdown is the jQuery object representing the\n   * dropdown.\n   * @param {String} label is the label for the menu entry\n   * @param {any} options defines the action.  There are many variations:\n   *   - The string `\"--\"` creates a _divider_\n   *   - A function creates a normal menu entry that calls the function\n   *     when selected\n   *   - An object with `.type == \"checkbox\"` creates a checkbox.  In\n   *     addition\n   *\t - if `.preference` exists, the checkbox is associated with the\n   *\t   named preference, otherwise\n   *\t - if `.action' exists, it is called on change with the new\n   *\t   value as argument.\n   *   - An object with `.type == \"submenu\" creates a submenu.\n   *   - An object with `.typeIcon` gets an icon indicating the type\n   */\n  function appendDropdown(dropdown, label, options) {\n    function glyph(name) {\n      if ( name ) {\n\treturn $.el.span({\n\t  class:\"dropdown-icon glyphicon glyphicon-\" + name});\n      }\n    }\n\n    if ( options == undefined ) {\n      // ignored\n    } else if ( options == \"--\" ) {\n      dropdown.append($.el.li({class:\"divider\"}));\n    } else if ( typeof(options) == \"function\" ) {\t/* Simple action */\n      var a;\n      var i;\n\n      if ( options.typeIcon ) {\n\ta = $.el.a(form.widgets.typeIcon(options.typeIcon),\n\t\t   label);\n      } else if ( options.glyph ) {\n\ta = $.el.a(glyph(options.glyph), label);\n      } else if ( (i=label.indexOf(\"(\")) > 0 ) {\n\tvar accell = label.substr(i);\n\ta = $.el.a({class:\"accelerated\"},\n\t\t   label.substr(0,i).trim(),\n\t\t   $.el.span({class:\"accell-spacer\"},accell),\n\t\t   $.el.span({class:\"accell-text\"},accell));\n      } else {\n\ta = $.el.a(label);\n      }\n\n      $(a).data('navbar-action', options);\n      if ( options.name )\n\t$(a).attr(\"id\", options.name);\n\n      dropdown.append($.el.li(a));\n    } else {\t\t\t\t\t\t/* Checkbox item */\n      if ( options.type == \"checkbox\" ) {\n\tvar cb = $($.el.input({type:\"checkbox\"}));\n\n\tif ( options.preference !== undefined ) {\n\t  cb.addClass(\"swish-event-receiver\");\n\t  if ( preferences.getVal(options.preference) )\n\t    cb.prop(\"checked\", true);\n\t  cb.on(\"click\", function() {\n\t    preferences.setVal(options.preference, $(this).prop(\"checked\"));\n\t  });\n\t  cb.on(\"preference\", function(pref) {\n\t    if ( pref.name == options.preference )\n\t      cb.prop(\"checked\", pref.value);\n\t  });\n\t} else {\n\t  if ( options.checked )\n\t    cb.prop(\"checked\", options.checked);\n\n\t  cb.on(\"click\", function() {\n\t    options.action($(this).prop(\"checked\"));\n\t  });\n\t}\n        dropdown.append($.el.li({class:\"checkbox\"},\n\t\t\t\tcb[0],\n\t\t\t\t$.el.span(label)));\n      } else if ( options.type == \"submenu\" ) {\t\t/* Submenu */\n\tvar submenu = $.el.ul({class:\"dropdown-menu sub-menu\"});\n\n\tdropdown.append($.el.li($.el.a({class:\"trigger right-caret\"},\n\t\t\t\t       glyph(options.glyph),\n\t\t\t\t       label),\n\t\t\t\tsubmenu));\n\tif ( options.action )\n\t  $(submenu).data('navbar-action', options.action);\n\tif ( options.items ) {\n\t  for(var i=0; i<options.items.length; i++) {\n\t    $(submenu).append($.el.li($.el.a(options.items[i])));\n\t  }\n\t}\n\tif ( options.update ) {\n\t  $(submenu).on(\"update\", function(ev) {\n\t    options.update.call(ev.target);\n\t  });\n\t}\n      } else {\n\talert(\"Unknown navbar item\");\n      }\n    }\n  }\n\n  function dropDownUL(nb, name) {\n    return nb.find(\".dropdown-menu\").filter(function() {\n      return $(this).attr(\"name\") == name;\n    });\n  }\n\n  function runMenu(a, ev) {\n    if ( $(a).hasClass(\"trigger\") ) {\n      clickSubMenu.call(a, ev);\n    } else {\n      var action = ($(a).data('navbar-action') ||\n\t\t    $(a).parents(\"ul\").data('navbar-action'));\n\n      clickNotSubMenu.call(a, ev);\n\n      if ( action ) {\n\tev.preventDefault();\n\taction.call(a, ev);\n      } else if ( $(a).hasClass(\"trigger\") ) {\n\tclickSubMenu.call(a, ev);\n      }\n\n      return false;\n    }\n  }\n\n  /**\n   * Bootstrap 3 extension to provide submenus.  Inspired by\n   * http://jsfiddle.net/chirayu45/YXkUT/16/\n   * Triggers an `update` event to the submenu's <ul> just\n   * before opening it.\n   */\n  function clickSubMenu(ev) {\n    var current = $(this).next();\t\t /* the submenu <ul> */\n    var grandparent = $(this).parent().parent(); /* the main menu <ul> */\n\n    if ( $(this).hasClass('left-caret') ||\n\t $(this).hasClass('right-caret') )\n      $(this).toggleClass('right-caret left-caret');\n\n    grandparent.find('.left-caret')\n\t       .not(this)\n\t       .toggleClass('right-caret left-caret');\n    grandparent.find(\".sub-menu:visible\")\n\t       .not(current).hide();\n\n    current.trigger(\"update\");\n    current.toggle();\n    ev.stopPropagation();\n  }\n\n  function clickNotSubMenu(ev) {\n    var root = $(this).closest('.dropdown');\n\n    root.find('.left-caret').toggleClass('right-caret left-caret');\n    root.find('.sub-menu:visible').hide();\n  }\n\n/* invoke is merged in general menu callback above\n  $(function() {\n    $(\".dropdown-menu > li > a.trigger\").on(\"click\", clickSubMenu);\n    $(\".dropdown-menu > li > a:not(.trigger)\").on(\"click\", clickNotSubMenu);\n  });\n*/\n\n  /**\n   * navbar jQuery plugin populates the application navigation bar using\n   * bootstrap styling.  Menu entries are added from JavaScript objects,\n   * which directly assocuate a label with a function.  It also allows\n   * populating a dropdown from a callback.\n   *\n   * @class navbar\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} method Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.navbar = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n});\n\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Provide the query editing facilities.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n * @requires laconic\n * @requires editor\n */\n\ndefine('query',[ \"jquery\", \"config\", \"preferences\", \"cm/lib/codemirror\", \"modal\",\n\t \"utils\",\n\t \"laconic\", \"editor\"\n       ],\n       function($, config, preferences, CodeMirror, modal, utils) {\n\n(function($) {\n  var pluginName = 'queryEditor';\n\n  var defaults = {\n    maxHistoryLength: 50\n  };\n\n  /** @lends $.fn.queryEditor */\n  var methods = {\n    /**\n     * @param {Object} options\n     * @param {Runner} options.runner an object that understands\n     * run(source, query), where source and query are strings.\n     * @param {Array.String|Function} [options.examples] called to\n     * populate the _Examples_ menu. Must return an array of strings.\n     * @param {Integer} [options.maxHistoryLength=50] is the max number\n     * of entries recalled by the history menu.\n     */\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem   = $(this);\n\tvar data   = $.extend({}, defaults, options);\n\tvar qediv  = $.el.div({class:\"query\"});\n\tvar tabled = tableCheckbox(data);\n\n\telem.addClass(\"prolog-query-editor swish-event-receiver reactive-size \" +\n\t\t      \"unloadable\");\n\n\telem.append(qediv,\n\t\t    $.el.div({class:\"prolog-prompt\"}, \"?-\"),\n\t\t    $.el.div({class:\"query-buttons\"},\n\t\t\t     $.el.span({class:\"buttons-left\"},\n\t\t\t\t       examplesButton(data),\n\t\t\t\t       historyButton(data),\n\t\t\t\t       aggregateButton(data)),\n\t\t\t     $.el.span({class:\"buttons-right\"},\n\t\t\t\t       tabled,\n\t\t\t\t       runButton(data))));\n\n\tfunction tableSelected() {\n\t  return $(tabled).find(\"input\").prop(\"checked\");\n\t}\n\n\t$(qediv).append(elem.children(\"textarea\"))\n\t        .prologEditor({ role: \"query\",\n\t\t\t\tsourceID: function() {\n\t\t\t\t  return data.sourceID();\n\t\t\t\t},\n\t\t\t\tprologQuery: function(q) {\n\t\t\t\t  elem.queryEditor('run', q, tableSelected());\n\t\t\t\t}\n\t\t              });\n\n\telem.data(pluginName, data);\n\n\tif ( !$(qediv).prologEditor('getSource', \"query\") )\n\t{ if ( typeof(data.examples) == \"object\" ) {\n\t    if ( data.examples[0] )\n\t      $(qediv).prologEditor('setSource', data.examples[0]);\n\t  } else {\n\t    elem[pluginName]('setProgramEditor', $(data.editor), true);\n\t  }\n\t}\n\n\telem.on(\"current-program\", function(ev, editor) {\n\t  elem[pluginName]('setProgramEditor', $(editor));\n\t});\n\telem.on(\"program-loaded\", function(ev, options) {\n\t  var query = options.query;\n\n\t  if ( query != null ) {\t\t/* null: keep */\n\t    if ( query == undefined ) {\n\t      if ( $(data.editor).data('prologEditor') ==\n\t\t   $(options.editor).data('prologEditor') ) {\n\t\tvar exl = data.examples();\n\t\tquery = exl && exl[0] ? exl[0] : \"\";\n\t      }\n\t    }\n\t    elem.queryEditor('setQuery', query);\n\t  }\n\t});\n\telem.on(\"unload\", function(ev, rc) {\n\t  if ( elem.closest(\".swish\").swish('preserve_state') ) {\n\t    var state = elem[pluginName]('getState');\n\t    if ( state )\n\t      localStorage.setItem(\"query\", JSON.stringify(state));\n\t  }\n\t});\n\telem.on(\"restore\", function(ev, rc) {\n\t  if ( elem[pluginName]('getQuery') == \"\" ) {\n\t    var state;\n\t    // called with explicit query\n\t    // TBD: not save in this case?\n\t    try {\n\t      var str = localStorage.getItem(\"query\");\n\t      if ( str )\n\t\tstate = JSON.parse(str);\n\t    } catch(err) {\n\t    }\n\n\t    if ( state && typeof(state) == \"object\" ) {\n\t      elem[pluginName]('setState', state);\n\t    }\n\t  }\n\t});\n\telem.on(\"preference\", function(ev, pref) {\n\t  if ( pref.name == \"preserve-state\" &&\n\t       pref.value == false ) {\n\t    localStorage.removeItem(\"query\");\n\t  }\n\t});\n      });\n    },\n\n    /**\n     * @param {jQuery} editor has become the new current program\n     * editor.  Update the examples and re-run the query highlighting.\n     */\n    setProgramEditor: function(editor, force) {\n      var data = this.data(pluginName);\n\n      if ( data.editor == editor[0] && !force )\n\treturn this;\n\n      data.editor = editor[0];\n      if ( data.editor ) {\n\tdata.examples = function() {\n\t  var exl    = editor.prologEditor('getExamples')||[];\n\t  var global = editor.parents(\".swish\").swish('examples', true)||[];\n\n\t  if ( $.isArray(global) )\n\t    exl.concat(global);\n\n\t  return exl;\n\t};\n\tif ( editor.prologEditor('isPengineSource') ) {\n\t  data.source = function() {\n\t    var src = editor.prologEditor('getSource', \"source\");\n\t    var bg  = $(\".background.prolog.source\").text();\n\n\t    if ( bg )\n\t      src += '\\n%@background@\\n' + bg;\n\n\t    return src;\n\t  };\n\t} else {\n\t  data.source = \"\";\n\t}\n\tdata.sourceID = function() {\n\t  return editor.prologEditor('getSourceID');\n\t};\n\n\tvar exl = data.examples();\n\tif ( exl && exl[0] && this.queryEditor('isClean') ) {\n\t  this.queryEditor('setQuery', exl[0]);\n\t} else {\n\t  editor.prologEditor('refreshHighlight');\n\t}\n      } else\n      { data.examples = \"\";\n      }\n    },\n\n    /**\n     * @returns {jQuery} the associated program editor\n     */\n    getProgramEditor: function() {\n      var data = this.data(pluginName);\n\n      if ( data.editor )\n\treturn $(data.editor);\n      else\n\treturn $();\n    },\n\n    /**\n     * @param {Array.String} set or extend the contents of the\n     * _Examples_ menu.\n     * @param {Boolean} [clear=true] clear the list before adding the\n     * new examples.\n     */\n    setExamples: function(list, clear) {\n      var ul = this.find(\"ul.examples\");\n\n      if ( !list ) list  = [];\n      if ( clear === undefined ) clear = true;\n\n      if ( clear && sameExamples(list) )\n\treturn this;\t\t\t/* no change */\n\n      function sameExamples(exs) {\n\tvar ex0;\n\n\tif ( (ex0=ul.data('examples')) &&\n\t     ex0.length == exs.length ) {\n\t  for(var i=0; i<ex0.length; i++) {\n\t    if ( ex0[i] != exs[i] )\n\t      return false;\n\t  }\n\t  return true;\n\t}\n\treturn false;\n      }\n\n      if ( clear === true )\n\tul.html(\"\");\n      ul.find(\"li.add-example, li.divider\").remove();\n      for(var i=0; i<list.length; i++) {\n\tul.append($.el.li($.el.a(list[i])));\n      }\n      ul.data('examples', list.slice(0));\n      ul.append($.el.li({class:\"divider\"}));\n      ul.append($.el.li({class:'add-example'},\n\t\t\t$.el.a(\"Add current query to examples\")));\n\n      return this;\n    },\n\n    /**\n     * Add the current query to the examples in the program\n     */\n    addExample: function()\n    { var query\t= this.find(\".query\").prologEditor('getSource');\n\n      if ( query.trim() != \"\" ) {\n\t$(\".swish-event-receiver:visible\")\n\t     .trigger(\"addExample\",\n\t\t      this.find(\".query\").prologEditor('getSource'));\n      } else\n      { modal.alert(\"The query window is empty\");\n      }\n\n      return this;\n    },\n\n    /**\n     * Add a query to the history menu. If it is already part of the\n     * menu, move it to the bottom.  If the menu exceeds the value\n     * of the option `maxHistoryLength`, remove the oldest entry.\n     * @param {String} query query to add to the history menu.\n     */\n    addHistory: function(query) {\n      var ul   = this.find(\"ul.history\");\n      var data = this.data('queryEditor');\n\n      function findInHistory() {\n\treturn ul.children().filter(function() {\n\t  return $(this).text() == query;\n\t});\n      }\n\n      if ( query ) {\n\tvar li;\n\tvar a;\n\n\tif ( (li=findInHistory()) )\n\t  li.remove();\n\tif ( ul.children().length >= data.maxHistoryLength )\n\t  ul.children().first().remove();\n\tul.append($.el.li(a=$.el.a(query)));\n\t$(a).data('time', (new Date().getTime())/1000);\n      }\n\n      return this;\n    },\n\n    /**\n     * @return {Array} An arrayt of strings representing the\n     * current history.\n     */\n    getHistory: function() {\n      var ul   = this.find(\"ul.history\");\n      var h = [];\n\n      ul.children().each(function() {\n\tvar a =\t$(this).find(\"a\");\n\th.push({\n\t  query: a.text(),\n\t  time:  a.data('time')\n\t});\n      });\n\n      return h;\n    },\n\n    restoreHistory: function(h) {\n      var ul   = this.find(\"ul.history\");\n\n      ul.html(\"\");\n      for(var i=0; i<h.length; i++) {\n\tvar a;\n\tul.append($.el.li(a= $.el.a(h[i].query)));\n\t$(a).data('time', h[i].time);\n      }\n    },\n\n    /**\n     * Set the current query and focus the editor.\n     * @param {String} query the new value of the query\n     */\n    setQuery: function(query) {\n      var data = this.data(pluginName);\n\n      data.cleanGen =\n\tthis.find(\".query\")\n\t    .prologEditor('setSource', query)\n\t    .focus()\n\t    .prologEditor('changeGen');\n\n      return this;\n    },\n\n    isClean: function() {\n      var data = this.data(pluginName);\n\n      return ( !this.queryEditor('getQuery') ||\n\t       ( data.cleanGen &&\n\t\t this.find(\".query\").prologEditor('isClean', data.cleanGen)\n\t       )\n\t     );\n    },\n\n    /**\n     * @returns {String} the current query as Prolog text\n     */\n    getQuery: function() {\n      return this.find(\".query\").prologEditor('getSource', \"query\");\n    },\n\n    getState: function() {\n      return {\n        query:   this[pluginName]('getQuery'),\n        history: this[pluginName]('getHistory')\n      };\n    },\n\n    setState: function(state) {\n      this[pluginName]('restoreHistory', state.history||[]);\n      this[pluginName]('setQuery', state.query||\"\");\n    },\n\n    /**\n     * Collect source and query and submit them to the associated\n     * `runner`.\n     *\n     * @param {String} [q] is the query to execute.  Default asks it\n     * from the associated query editor.\n     * @param {Boolean} [tabled=false] when `true`, present the results\n     * as a table.\n     */\n    run: function(q, tabled) {\n      var data  = this.data('queryEditor');\n\n      if ( q === undefined ) q = this.queryEditor('getQuery');\n      q = $.trim(q);\n\n      if ( !q ) {\n\t$(\".swish-event-receiver\").trigger(\"help\", {file:\"query.html\"});\n\treturn this;\n      }\n      $(\".swish-event-receiver\").trigger(\"clearMessages\");\n\n      var query = { query: q,\n\t\t    editor: data.editor,\n\t\t    query_editor: this.find(\".query\")\n\t\t  };\n\n      if ( typeof(data.source) == \"function\" )\n\tquery.source = data.source(q);\n      else if ( typeof(data.source) == \"string\" )\n\tquery.source = data.source;\n      if ( tabled )\n\tquery.tabled = true;\n\n      this.queryEditor('addHistory', q);\n      data.runner.prologRunners('run', query);\n\n      return this;\n    }\n  }; // methods\n\n\n\t\t /*******************************\n\t\t *\tPRIVATE FUNCTIONS\t*\n\t\t *******************************/\n\n  /* Allow for e.g. Q(part).method(...)\n  */\n\n  function Q(from) {\n    return $(from).closest(\".prolog-query-editor\");\n  }\n\n  function dropup(cls, label, options) {\n    var dropup = $.el.div(\n      {class:\"btn-group dropup\"},\n      $.el.button(\n\t{class:\"btn btn-default btn-xs dropdown-toggle \"+cls,\n\t \"data-toggle\":\"dropdown\"},\n\tlabel,\n\t$.el.span({class:\"caret\"})),\n      $.el.ul({class:\"dropdown-menu \"+cls}));\n\n    $(dropup).on(\"click\", \"a\", function() {\n      var li = $(this).closest(\"li\");\n\n      if ( li.hasClass(\"add-example\") )\n\tQ(this).queryEditor('addExample');\n      else\n\tQ(this).queryEditor('setQuery', $(this).text());\n    });\n\n    return dropup;\n  }\n\n  function examplesButton(options) {\n    var el = dropup(\"examples\", \"Examples\", options);\n    var ul = $(el).find(\"ul\");\n\n    function updateExamples(ev) {\n      var qe   = $(ev.target).closest(\".prolog-query-editor\");\n      var data = qe.data(pluginName);\n\n      if ( data && typeof(data.examples) == \"function\" ) {\n\tvar list = data.examples();\n\n\tif ( $.isArray(list) )\n\t  Q(el).queryEditor('setExamples', list, true);\n      }\n    }\n\n    if ( typeof(options.examples) == \"function\" ) {\n      $(el).mousedown(function(ev) {\n\t\t\tif ( ev.which == 1 ) {\n\t\t\t  updateExamples(ev);\n\t\t\t}\n\t\t      });\n    } else if ( options.examples ) {\n      var list = options.examples;\n\n      for(var i=0; i<list.length; i++) {\n\tul.append($.el.li($.el.a(list[i])));\n      }\n    }\n\n    return el;\n  }\n\n  function historyButton(options) {\n    var menu = dropup(\"history\", \"History\", options);\n\n    $(menu).on(\"mouseenter\", \"li\", function(ev) {\n      var a = $(ev.target).closest(\"li\").find(\"a\");\n      a.attr(\"title\", utils.ago(a.data('time')));\n    });\n\n    // FIXME: Make history menu scroll to the end.  There\n    // must be a cleaner way to do so.\n    $(menu).mouseup(function(ev) {\n      setTimeout(function() {\n\tvar ul = $(menu).find(\"ul.history\");\n\tvar h  = ul.prop(\"scrollHeight\");\n\tconsole.log(h);\n\tul.animate({scrollTop: h});\n      }, 100);\n    });\n\n    return menu;\n  }\n\n  function aggregateButton(options) {\n    var cls = \"aggregate\";\n    var list = options.aggregates ||\n      [ \"Aggregate (count all)\",\n\t\"--\",\n\t\"Projection\",\n\t\"Order by\",\n\t\"Distinct\",\n\t\"Limit\",\n\t\"--\",\n\t\"Time\",\n\t\"Debug (trace)\"\n      ];\n    var ul;\n\n    var dropup = $.el.div(\n      {class:\"btn-group dropup\"},\n      $.el.button(\n\t{class:\"btn btn-default btn-xs dropdown-toggle \"+cls,\n\t \"data-toggle\":\"dropdown\"},\n\t\"Solutions\",\n\t$.el.span({class:\"caret\"})),\n      ul=$.el.ul({class:\"dropdown-menu \"+cls}));\n\n    for(var i = 0; i<list.length; i++) {\n      var wrap = list[i];\n\n      if ( wrap == \"--\" )\n\t$(ul).append($.el.li({class:\"divider\"}));\n      else\n\t$(ul).append($.el.li($.el.a(wrap)));\n    }\n\n    $(dropup).on(\"click\", \"a\", function() {\n      Q(this).find(\".query\").prologEditor('wrapSolution', $(this).text());\n    });\n\n    return dropup;\n  }\n\n  function runButton(options) {\n    var button =\n      $.el.button(\n\t{class:\"run-btn-query\",\n\t class:\"btn btn-default btn-primary btn-xs\"\n\t},\n\t\"Run!\");\n\n    $(button).on(\"click\", function() {\n      Q(this).queryEditor('run', undefined, tableSelected(this));\n    });\n\n    return button;\n  }\n\n  function tableSelected(from) {\n    return $(from).parent().find(\"input\").prop(\"checked\");\n  }\n\n  function tableCheckbox(options) {\n    var checked = preferences.getVal(\"tabled_results\");\n    var attr    = {type:\"checkbox\", name:\"table\"};\n\n    if ( checked === undefined ) {\n      checked = config.swish.tabled_results;\n    }\n    if ( checked )\n      attr.checked = \"checked\";\n\n    var input = $.el.input(attr);\n    var checkbox = $.el.span({class:\"run-chk-table\"},\n\t\t\t     input, \" table results\");\n    $(input).on(\"change\", function(ev) {\n      preferences.setVal(\"tabled_results\",\n\t\t\t $(ev.target).prop(\"checked\"));\n    });\n\n    return checkbox;\n  }\n\n  /**\n   * <Class description>\n   *\n   * @class queryEditor\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.queryEditor = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\ndefine('term',[ \"jquery\" ],\n       function() {\n\nfunction unfold() {\n\t$(this).next().toggleClass('fold')\n\t$(this).remove()\n}\n\n$(document).on('click', '.pl-functor, .pl-infix', function() {\n\tvar p = $(this).parent()\n\t$(p).toggleClass('fold')\n\t$(p).before('<span class=\"pl-ellipsis\">...</span>').prev().click(unfold)\n})\n\n}); // define\n;\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2017, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Handle JavaScript based login\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('login',[ \"jquery\", \"modal\", \"config\", \"form\", \"laconic\" ],\n       function($, modal, config, form) {\n\nvar DEFAULT_USER_FIELDS = [\"display_name\", \"email\", \"avatar\"];\n\n(function($) {\n  var pluginName = 'login';\n\n  /** @lends $.fn.login */\n  var methods = {\n    _init: function(options) {\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\n\n\tdata.url = elem.attr(\"href\");\n\telem.removeAttr(\"href\");\n\n\telem.on(\"click\", function(ev) {\n\t  if ( elem.hasClass(\"login\") )\n\t    elem.login('login', ev);\n\t});\n\n\telem.data(pluginName, data);\n\telem.login('update', \"startup\");\n      });\n    },\n\n    /**\n     * Update the status of the login element\n     */\n    update: function(why) {\n      var elem = $(this);\n      $.get(config.http.locations.user_info, {reason:why},\n\t    function(obj) {\n\t      if ( obj ) {\n\t\tconfig.swish.user = obj;\n\t\telem.removeClass(\"login\").addClass(\"logout\");\n\n\t\tvar span = elem.find(\"span.logout span.value\");\n\t\tvar icon;\n\n\t\tif ( obj.avatar ) {\n\t\t  icon = $.el.img({ class: \"profile-picture\",\n\t\t\t\t    src: obj.avatar\n\t\t\t\t  });\n\t\t} else {\n\t\t  icon = $.el.span({class:\"glyphicon glyphicon-user\"});\n\t\t}\n\t\ticon = $.el.span(icon, $.el.b({class: \"caret\"}));\n\t\tspan.html(\"\");\n\t\tspan.append(form.widgets.dropdownButton(icon, {\n\t\t  divClass:\"user-menu btn-transparent\",\n\t\t  ulClass:\"pull-right\",\n\t\t  client: elem,\n\t\t  actions: {\n\t\t    \"Logout\":  elem.hasClass('no-logout') ? undefined :\n\t\t\t       function() {\n\t\t      this.login('logout');\n\t\t    },\n\t\t    \"Profile\": function() {\n\t\t      this.login('profile');\n\t\t    }\n\t\t  }\n\t\t}));\n\n\t\tif ( why == \"logout_by_http\" )\n\t\t  modal.alert(\"Failed to logout from HTTP login.  Logout from HTTP \"+\n\t\t\t      \"is known not to work for Chrome.  For some browsers \"+\n\t\t\t      \"there is a plugin to logout.  Otherwise stopping your \"+\n\t\t\t      \"browser completely (all pages) and restarting is the \"+\n\t\t\t      \"only way to logout.  HTTP logout does work for FireFox \"+\n\t\t\t      \"and IE.\");\n\n\t      } else\n\t      { delete config.swish.user;\n\t\telem.removeClass(\"logout\").addClass(\"login\");\n\t      }\n\t      $(\".sourcelist\").trigger(\"login\");\n\t    },\n\t    \"json\");\n    },\n\n    /**\n     * Perform the login\n     */\n    login: function(ev) {\n      var elem   = $(this);\n      var data   = this.data(pluginName);\n      var target = $(ev.target);\n      var url    = data.url;\n      var server = target.closest(\"[data-server]\").data(\"server\");\n      var frame  = target.closest(\"[data-frame]\").data(\"frame\")||\"iframe\";\n\n      if ( server )\n\turl += \"?server=\"+encodeURIComponent(server);\n\n      if ( frame == \"popup\" ) {\n\topenPopup(url, \"_blank\",\n\t\t  'location=true,status=true,height=400,width=800',\n\t\t  function() {\n\t\t    elem.login('logged_in');\n\t\t  });\n      } else {\n\tmodal.show({\n\t  title: \"Login\",\n\t  body: function() {\n\t    var button = $.el.button({ name:\"ok\",\n\t\t\t\t       class:\"btn btn-primary login-cont\",\n\t\t\t\t       \"data-dismiss\":\"modal\"\n\t\t\t\t     },\n\t\t\t\t     \"Continue\");\n\t    this.append($.el.iframe({class:\"login\", src:url}),\n\t\t\tbutton);\n\t  },\n\t  onclose: function() {\n\t    elem.login('logged_in');\n\t  }\n\t});\n      }\n    },\n\n    /**\n     * User closed the login modal window.  Check the login.\n     */\n    logged_in: function() {\n      this.login('update', \"login\");\n    },\n\n    /**\n     * Examine/edit the user profile.  Opens a modal window that is\n     * filled through an AJAX call on the server.\n     */\n    profile: function() {\n      var login = $(this);\n\n      modal.server_form({\n\ttitle: \"User profile\",\n\turl: config.swish.user.swish_profile_url ||\n\t     config.http.locations.user_profile,\n\tonreply: function() { login.login('update', \"profile\"); }\n      });\n    },\n\n    /**\n     * Get information about the current user. If possible we get this\n     * from the logged in user.  Else we get the name and avatar from\n     * #chat.\n     * @param [fields] is an array with fields we want to have\n     * @return {Object} info about current user\n     */\n    get_profile: function(fields) {\n      var info = {};\n      var obj = config.swish.user||{};\n\n      function set_from_chat(key, chat_key) {\n\tvar chat = $(\"#chat\");\n\tif ( chat.length == 1 ) {\n\t  var v = chat.chat('self', [chat_key]);\n\t  if ( v[chat_key] ) info[key] = v[chat_key];\n\t}\n      }\n\n      fields = fields||DEFAULT_USER_FIELDS;\n      for(var i=0; i<fields.length; i++) {\n\tvar key = fields[i];\n\n\tif ( obj[key] ) {\n\t  info[key] = obj[key];\n\t} else if ( key == 'display_name' ) {\n\t  if ( obj.name )\n\t    info.display_name = obj.name;\n\t  else if ( obj.given_name && obj.family_name )\n\t    info.display_name = obj.given_name + \" \" + obj.family_name;\n\t  else if ( obj.family_name )\n\t    info.display_name = obj.family_name;\n\t  else if ( obj.given_name )\n\t    info.display_name = obj.given_name;\n\t  else if ( obj.nick_name )\n\t    info.display_name = obj.nick_name;\n\t  else\n\t    set_from_chat('display_name', 'name');\n\t} else if ( key == 'identity' ) {\n\t  if ( obj.external_identity && obj.identity_provider )\n\t    info.identity = obj.identity_provider + \":\" + obj.external_identity;\n\t} else if ( key == 'avatar' ) {\n\t  set_from_chat('avatar', 'avatar');\n\t}\n      }\n\n      return info;\n    },\n\n    /**\n     * Logout the current user\n     */\n    logout: function() {\n      var user = config.swish.user;\n      var elem = $(this);\n\n      if ( user ) {\n\tif ( user.logout_url ) {\n\t  $.ajax({ url: user.logout_url,\n\t           success: function() {\n\t\t     elem.login('update', \"logout_by_url\");\n\t\t   },\n\t\t   error: function(jqXHDR) {\n\t\t     modal.ajaxError(jqXHDR);\n\t\t   }\n\t         });\n\t} else if ( user.auth_method == \"basic\" ||\n\t\t    user.auth_method == \"digest\" ) {\n\t  clearAuthenticationCache(config.http.locations.http_logout,\n\t\t\t\t   config.swish.user.auth_method,\n\t\t\t\t   function() {\n\t\t\t\t     elem.login('update', \"logout_by_http\");\n\t\t\t\t   });\n\t} else {\n\t  alert(\"Don't know how to logout\");\n\t}\n      }\n    }\n  }; // methods\n\n  /**\n   * @see https://trac-hacks.org/wiki/TrueHttpLogoutPatch\n   * @see http://stackoverflow.com/questions/233507/how-to-log-out-user-from-web-site-using-basic-authentication\n   */\n  function clearAuthenticationCache(page, method, oncomplete) {\n    // Default to a non-existing page (give error 500).\n    // An empty page is better, here.\n    if (!page) page = '.force_logout';\n    try{\n      var agt=navigator.userAgent.toLowerCase();\n\n      if ( agt.indexOf(\"msie\") != -1 ) {\n\tdocument.execCommand(\"ClearAuthenticationCache\");\n      } else if ( agt.indexOf(\"webkit\") != -1 && method == \"basic\" ) {\n\tvar xmlhttp = createXMLObject(oncomplete);\n\n\tif ( xmlhttp ) {\n\t  xmlhttp.open(\"GET\", page, true);\n\t  xmlhttp.setRequestHeader(\"Authorization\", \"Basic logout\");\n\t  xmlhttp.send();\n\t}\n      } else {\n\tvar xmlhttp = createXMLObject(oncomplete);\n\n\tif ( xmlhttp ) {\n\t  xmlhttp.open(\"GET\", page, true, \"logout\", \"logout\");\n\t  xmlhttp.send(\"\");\n\t  xmlhttp.abort();\n\t}\n      }\n    } catch(e) {\n      // There was an error\n      return;\n    }\n  }\n\n  function createXMLObject(oncomplete) {\n    var xmlhttp;\n\n    try {\n      if (window.XMLHttpRequest) {\n\txmlhttp = new XMLHttpRequest();\n      } else if (window.ActiveXObject) {\n\txmlhttp=new ActiveXObject(\"Microsoft.XMLHTTP\");\n      }\n\n      if ( oncomplete ) {\n\txmlhttp.addEventListener(\"load\",  oncomplete);\n\txmlhttp.addEventListener(\"error\", oncomplete);\n\txmlhttp.addEventListener(\"abort\", oncomplete);\n      }\n    } catch (e) {\n    }\n\n    return xmlhttp;\n  }\n\n  /**\n   * Open a popup window for dealing with the federated login.  We\n   * must check the login status after the user completes the popup.\n   * Unfortunately the code below does not always work as `win.closed`\n   * is not always set.  An example is FF 51.0 using Cinamon.\n   */\n  function openPopup(uri, name, options, closeCallback) {\n    var win = window.open(uri, name, options);\n    var interval = window.setInterval(function() {\n      try {\n\tif (win == null || win.closed) {\n\t  window.clearInterval(interval);\n\t  closeCallback(win);\n\t}\n      }\n      catch (e) {\n      }\n    }, 1000);\n\n    if ( window.focus )\n      win.focus();\n\n    return win;\n  };\n\n\n  /**\n   * <Class description>\n   *\n   * @class login\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.login = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n});\n\n","// https://d3js.org v5.9.1 Copyright 2019 Mike Bostock\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\ntypeof define === 'function' && define.amd ? define('d3',['exports'], factory) :\n(factory((global.d3 = global.d3 || {})));\n}(this, (function (exports) { 'use strict';\n\nvar version = \"5.9.1\";\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\nfunction bisector(compare) {\n  if (compare.length === 1) compare = ascendingComparator(compare);\n  return {\n    left: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      }\n      return lo;\n    },\n    right: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) > 0) hi = mid;\n        else lo = mid + 1;\n      }\n      return lo;\n    }\n  };\n}\n\nfunction ascendingComparator(f) {\n  return function(d, x) {\n    return ascending(f(d), x);\n  };\n}\n\nvar ascendingBisect = bisector(ascending);\nvar bisectRight = ascendingBisect.right;\nvar bisectLeft = ascendingBisect.left;\n\nfunction pairs(array, f) {\n  if (f == null) f = pair;\n  var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n  while (i < n) pairs[i] = f(p, p = array[++i]);\n  return pairs;\n}\n\nfunction pair(a, b) {\n  return [a, b];\n}\n\nfunction cross(values0, values1, reduce) {\n  var n0 = values0.length,\n      n1 = values1.length,\n      values = new Array(n0 * n1),\n      i0,\n      i1,\n      i,\n      value0;\n\n  if (reduce == null) reduce = pair;\n\n  for (i0 = i = 0; i0 < n0; ++i0) {\n    for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n      values[i] = reduce(value0, values1[i1]);\n    }\n  }\n\n  return values;\n}\n\nfunction descending(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n\nfunction number(x) {\n  return x === null ? NaN : +x;\n}\n\nfunction variance(values, valueof) {\n  var n = values.length,\n      m = 0,\n      i = -1,\n      mean = 0,\n      value,\n      delta,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) {\n        delta = value - mean;\n        mean += delta / ++m;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) {\n        delta = value - mean;\n        mean += delta / ++m;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n\n  if (m > 1) return sum / (m - 1);\n}\n\nfunction deviation(array, f) {\n  var v = variance(array, f);\n  return v ? Math.sqrt(v) : v;\n}\n\nfunction extent(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n\nvar array = Array.prototype;\n\nvar slice = array.slice;\nvar map = array.map;\n\nfunction constant(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction identity(x) {\n  return x;\n}\n\nfunction sequence(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n\nvar e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction ticks(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    start = Math.ceil(start / step);\n    stop = Math.floor(stop / step);\n    ticks = new Array(n = Math.ceil(stop - start + 1));\n    while (++i < n) ticks[i] = (start + i) * step;\n  } else {\n    start = Math.floor(start * step);\n    stop = Math.ceil(stop * step);\n    ticks = new Array(n = Math.ceil(start - stop + 1));\n    while (++i < n) ticks[i] = (start - i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nfunction tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nfunction tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n\nfunction thresholdSturges(values) {\n  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n\nfunction histogram() {\n  var value = identity,\n      domain = extent,\n      threshold = thresholdSturges;\n\n  function histogram(data) {\n    var i,\n        n = data.length,\n        x,\n        values = new Array(n);\n\n    for (i = 0; i < n; ++i) {\n      values[i] = value(data[i], i, data);\n    }\n\n    var xz = domain(values),\n        x0 = xz[0],\n        x1 = xz[1],\n        tz = threshold(values, x0, x1);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      tz = tickStep(x0, x1, tz);\n      tz = sequence(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive\n    }\n\n    // Remove any thresholds outside the domain.\n    var m = tz.length;\n    while (tz[0] <= x0) tz.shift(), --m;\n    while (tz[m - 1] > x1) tz.pop(), --m;\n\n    var bins = new Array(m + 1),\n        bin;\n\n    // Initialize bins.\n    for (i = 0; i <= m; ++i) {\n      bin = bins[i] = [];\n      bin.x0 = i > 0 ? tz[i - 1] : x0;\n      bin.x1 = i < m ? tz[i] : x1;\n    }\n\n    // Assign data to bins by value, ignoring any outside the domain.\n    for (i = 0; i < n; ++i) {\n      x = values[i];\n      if (x0 <= x && x <= x1) {\n        bins[bisectRight(tz, x, 0, m)].push(data[i]);\n      }\n    }\n\n    return bins;\n  }\n\n  histogram.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n  };\n\n  histogram.domain = function(_) {\n    return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n  };\n\n  histogram.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n  };\n\n  return histogram;\n}\n\nfunction threshold(values, p, valueof) {\n  if (valueof == null) valueof = number;\n  if (!(n = values.length)) return;\n  if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nfunction freedmanDiaconis(values, min, max) {\n  values = map.call(values, number).sort(ascending);\n  return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n}\n\nfunction scott(values, min, max) {\n  return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n}\n\nfunction max(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return max;\n}\n\nfunction mean(values, valueof) {\n  var n = values.length,\n      m = n,\n      i = -1,\n      value,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) sum += value;\n      else --m;\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value;\n      else --m;\n    }\n  }\n\n  if (m) return sum / m;\n}\n\nfunction median(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      numbers = [];\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) {\n        numbers.push(value);\n      }\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) {\n        numbers.push(value);\n      }\n    }\n  }\n\n  return threshold(numbers.sort(ascending), 0.5);\n}\n\nfunction merge(arrays) {\n  var n = arrays.length,\n      m,\n      i = -1,\n      j = 0,\n      merged,\n      array;\n\n  while (++i < n) j += arrays[i].length;\n  merged = new Array(j);\n\n  while (--n >= 0) {\n    array = arrays[n];\n    m = array.length;\n    while (--m >= 0) {\n      merged[--j] = array[m];\n    }\n  }\n\n  return merged;\n}\n\nfunction min(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && min > value) {\n            min = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && min > value) {\n            min = value;\n          }\n        }\n      }\n    }\n  }\n\n  return min;\n}\n\nfunction permute(array, indexes) {\n  var i = indexes.length, permutes = new Array(i);\n  while (i--) permutes[i] = array[indexes[i]];\n  return permutes;\n}\n\nfunction scan(values, compare) {\n  if (!(n = values.length)) return;\n  var n,\n      i = 0,\n      j = 0,\n      xi,\n      xj = values[j];\n\n  if (compare == null) compare = ascending;\n\n  while (++i < n) {\n    if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {\n      xj = xi, j = i;\n    }\n  }\n\n  if (compare(xj, xj) === 0) return j;\n}\n\nfunction shuffle(array, i0, i1) {\n  var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n      t,\n      i;\n\n  while (m) {\n    i = Math.random() * m-- | 0;\n    t = array[m + i0];\n    array[m + i0] = array[i + i0];\n    array[i + i0] = t;\n  }\n\n  return array;\n}\n\nfunction sum(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (value = +values[i]) sum += value; // Note: zero and null are equivalent.\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (value = +valueof(values[i], i, values)) sum += value;\n    }\n  }\n\n  return sum;\n}\n\nfunction transpose(matrix) {\n  if (!(n = matrix.length)) return [];\n  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n      row[j] = matrix[j][i];\n    }\n  }\n  return transpose;\n}\n\nfunction length(d) {\n  return d.length;\n}\n\nfunction zip() {\n  return transpose(arguments);\n}\n\nvar slice$1 = Array.prototype.slice;\n\nfunction identity$1(x) {\n  return x;\n}\n\nvar top = 1,\n    right = 2,\n    bottom = 3,\n    left = 4,\n    epsilon = 1e-6;\n\nfunction translateX(x) {\n  return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number$1(scale) {\n  return function(d) {\n    return +scale(d);\n  };\n}\n\nfunction center(scale) {\n  var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n  if (scale.round()) offset = Math.round(offset);\n  return function(d) {\n    return +scale(d) + offset;\n  };\n}\n\nfunction entering() {\n  return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n  var tickArguments = [],\n      tickValues = null,\n      tickFormat = null,\n      tickSizeInner = 6,\n      tickSizeOuter = 6,\n      tickPadding = 3,\n      k = orient === top || orient === left ? -1 : 1,\n      x = orient === left || orient === right ? \"x\" : \"y\",\n      transform = orient === top || orient === bottom ? translateX : translateY;\n\n  function axis(context) {\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$1) : tickFormat,\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\n        range = scale.range(),\n        range0 = +range[0] + 0.5,\n        range1 = +range[range.length - 1] + 0.5,\n        position = (scale.bandwidth ? center : number$1)(scale.copy()),\n        selection = context.selection ? context.selection() : context,\n        path = selection.selectAll(\".domain\").data([null]),\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\n        tickExit = tick.exit(),\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n        line = tick.select(\"line\"),\n        text = tick.select(\"text\");\n\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\n        .attr(\"class\", \"domain\")\n        .attr(\"stroke\", \"currentColor\"));\n\n    tick = tick.merge(tickEnter);\n\n    line = line.merge(tickEnter.append(\"line\")\n        .attr(\"stroke\", \"currentColor\")\n        .attr(x + \"2\", k * tickSizeInner));\n\n    text = text.merge(tickEnter.append(\"text\")\n        .attr(\"fill\", \"currentColor\")\n        .attr(x, k * spacing)\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n    if (context !== selection) {\n      path = path.transition(context);\n      tick = tick.transition(context);\n      line = line.transition(context);\n      text = text.transition(context);\n\n      tickExit = tickExit.transition(context)\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n      tickEnter\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient == right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter : \"M0.5,\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",0.5H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d)); });\n\n    line\n        .attr(x + \"2\", k * tickSizeInner);\n\n    text\n        .attr(x, k * spacing)\n        .text(format);\n\n    selection.filter(entering)\n        .attr(\"fill\", \"none\")\n        .attr(\"font-size\", 10)\n        .attr(\"font-family\", \"sans-serif\")\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n    selection\n        .each(function() { this.__axis = position; });\n  }\n\n  axis.scale = function(_) {\n    return arguments.length ? (scale = _, axis) : scale;\n  };\n\n  axis.ticks = function() {\n    return tickArguments = slice$1.call(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : slice$1.call(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : slice$1.call(_), axis) : tickValues && tickValues.slice();\n  };\n\n  axis.tickFormat = function(_) {\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\n  };\n\n  axis.tickSize = function(_) {\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeInner = function(_) {\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeOuter = function(_) {\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n  };\n\n  axis.tickPadding = function(_) {\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n  };\n\n  return axis;\n}\n\nfunction axisTop(scale) {\n  return axis(top, scale);\n}\n\nfunction axisRight(scale) {\n  return axis(right, scale);\n}\n\nfunction axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nfunction axisLeft(scale) {\n  return axis(left, scale);\n}\n\nvar noop = {value: function() {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nvar xhtml = \"http://www.w3.org/1999/xhtml\";\n\nvar namespaces = {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n\nfunction namespace(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nfunction creator(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n\nfunction none() {}\n\nfunction selector(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n\nfunction selection_select(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n\nfunction empty() {\n  return [];\n}\n\nfunction selectorAll(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n\nfunction selection_selectAll(select) {\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n\nfunction matcher(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nfunction selection_filter(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n\nfunction sparse(update) {\n  return new Array(update.length);\n}\n\nfunction selection_enter() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nfunction EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n\nfunction constant$1(x) {\n  return function() {\n    return x;\n  };\n}\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = {},\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n      if (keyValue in nodeByKeyValue) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue[keyValue] = node;\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = keyPrefix + key.call(parent, data[i], i, data);\n    if (node = nodeByKeyValue[keyValue]) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue[keyValue] = null;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction selection_data(value, key) {\n  if (!value) {\n    data = new Array(this.size()), j = -1;\n    this.each(function(d) { data[++j] = d; });\n    return data;\n  }\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant$1(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = value.call(parent, parent && parent.__data__, j, parents),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\nfunction selection_exit() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n\nfunction selection_join(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n  if (onupdate != null) update = onupdate(update);\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n\nfunction selection_merge(selection$$1) {\n\n  for (var groups0 = this._groups, groups1 = selection$$1._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n\nfunction selection_order() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction selection_sort(compare) {\n  if (!compare) compare = ascending$1;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending$1(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\nfunction selection_call() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n\nfunction selection_nodes() {\n  var nodes = new Array(this.size()), i = -1;\n  this.each(function() { nodes[++i] = this; });\n  return nodes;\n}\n\nfunction selection_node() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n\nfunction selection_size() {\n  var size = 0;\n  this.each(function() { ++size; });\n  return size;\n}\n\nfunction selection_empty() {\n  return !this.node();\n}\n\nfunction selection_each(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nfunction selection_attr(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n\nfunction defaultView(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nfunction selection_style(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nfunction styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n\nfunction propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nfunction selection_property(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n\nfunction classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nfunction selection_classed(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n\nfunction textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nfunction selection_text(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n\nfunction htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nfunction selection_html(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n\nfunction raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nfunction selection_raise() {\n  return this.each(raise);\n}\n\nfunction lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nfunction selection_lower() {\n  return this.each(lower);\n}\n\nfunction selection_append(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n\nfunction constantNull() {\n  return null;\n}\n\nfunction selection_insert(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n\nfunction remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nfunction selection_remove() {\n  return this.each(remove);\n}\n\nfunction selection_cloneShallow() {\n  return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n  return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nfunction selection_clone(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n\nfunction selection_datum(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n\nvar filterEvents = {};\n\nexports.event = null;\n\nif (typeof document !== \"undefined\") {\n  var element = document.documentElement;\n  if (!(\"onmouseenter\" in element)) {\n    filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n  }\n}\n\nfunction filterContextListener(listener, index, group) {\n  listener = contextListener(listener, index, group);\n  return function(event) {\n    var related = event.relatedTarget;\n    if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n      listener.call(this, event);\n    }\n  };\n}\n\nfunction contextListener(listener, index, group) {\n  return function(event1) {\n    var event0 = exports.event; // Events can be reentrant (e.g., focus).\n    exports.event = event1;\n    try {\n      listener.call(this, this.__data__, index, group);\n    } finally {\n      exports.event = event0;\n    }\n  };\n}\n\nfunction parseTypenames$1(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, capture) {\n  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n  return function(d, i, group) {\n    var on = this.__on, o, listener = wrap(value, i, group);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n        this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, capture);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nfunction selection_on(typename, value, capture) {\n  var typenames = parseTypenames$1(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  if (capture == null) capture = false;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n  return this;\n}\n\nfunction customEvent(event1, listener, that, args) {\n  var event0 = exports.event;\n  event1.sourceEvent = exports.event;\n  exports.event = event1;\n  try {\n    return listener.apply(that, args);\n  } finally {\n    exports.event = event0;\n  }\n}\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nfunction selection_dispatch(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n\nvar root = [null];\n\nfunction Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch\n};\n\nfunction select(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n\nfunction create(name) {\n  return select(creator(name).call(document.documentElement));\n}\n\nvar nextId = 0;\n\nfunction local() {\n  return new Local;\n}\n\nfunction Local() {\n  this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n  constructor: Local,\n  get: function(node) {\n    var id = this._;\n    while (!(id in node)) if (!(node = node.parentNode)) return;\n    return node[id];\n  },\n  set: function(node, value) {\n    return node[this._] = value;\n  },\n  remove: function(node) {\n    return this._ in node && delete node[this._];\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nfunction sourceEvent() {\n  var current = exports.event, source;\n  while (source = current.sourceEvent) current = source;\n  return current;\n}\n\nfunction point(node, event) {\n  var svg = node.ownerSVGElement || node;\n\n  if (svg.createSVGPoint) {\n    var point = svg.createSVGPoint();\n    point.x = event.clientX, point.y = event.clientY;\n    point = point.matrixTransform(node.getScreenCTM().inverse());\n    return [point.x, point.y];\n  }\n\n  var rect = node.getBoundingClientRect();\n  return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n\nfunction mouse(node) {\n  var event = sourceEvent();\n  if (event.changedTouches) event = event.changedTouches[0];\n  return point(node, event);\n}\n\nfunction selectAll(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n      : new Selection([selector == null ? [] : selector], root);\n}\n\nfunction touch(node, touches, identifier) {\n  if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n  for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n    if ((touch = touches[i]).identifier === identifier) {\n      return point(node, touch);\n    }\n  }\n\n  return null;\n}\n\nfunction touches(node, touches) {\n  if (touches == null) touches = sourceEvent().touches;\n\n  for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {\n    points[i] = point(node, touches[i]);\n  }\n\n  return points;\n}\n\nfunction nopropagation() {\n  exports.event.stopImmediatePropagation();\n}\n\nfunction noevent() {\n  exports.event.preventDefault();\n  exports.event.stopImmediatePropagation();\n}\n\nfunction dragDisable(view) {\n  var root = view.document.documentElement,\n      selection$$1 = select(view).on(\"dragstart.drag\", noevent, true);\n  if (\"onselectstart\" in root) {\n    selection$$1.on(\"selectstart.drag\", noevent, true);\n  } else {\n    root.__noselect = root.style.MozUserSelect;\n    root.style.MozUserSelect = \"none\";\n  }\n}\n\nfunction yesdrag(view, noclick) {\n  var root = view.document.documentElement,\n      selection$$1 = select(view).on(\"dragstart.drag\", null);\n  if (noclick) {\n    selection$$1.on(\"click.drag\", noevent, true);\n    setTimeout(function() { selection$$1.on(\"click.drag\", null); }, 0);\n  }\n  if (\"onselectstart\" in root) {\n    selection$$1.on(\"selectstart.drag\", null);\n  } else {\n    root.style.MozUserSelect = root.__noselect;\n    delete root.__noselect;\n  }\n}\n\nfunction constant$2(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n  this.target = target;\n  this.type = type;\n  this.subject = subject;\n  this.identifier = id;\n  this.active = active;\n  this.x = x;\n  this.y = y;\n  this.dx = dx;\n  this.dy = dy;\n  this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n  var value = this._.on.apply(this._, arguments);\n  return value === this._ ? this : value;\n};\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n  return !exports.event.button;\n}\n\nfunction defaultContainer() {\n  return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n  return d == null ? {x: exports.event.x, y: exports.event.y} : d;\n}\n\nfunction defaultTouchable() {\n  return \"ontouchstart\" in this;\n}\n\nfunction drag() {\n  var filter = defaultFilter,\n      container = defaultContainer,\n      subject = defaultSubject,\n      touchable = defaultTouchable,\n      gestures = {},\n      listeners = dispatch(\"start\", \"drag\", \"end\"),\n      active = 0,\n      mousedownx,\n      mousedowny,\n      mousemoving,\n      touchending,\n      clickDistance2 = 0;\n\n  function drag(selection$$1) {\n    selection$$1\n        .on(\"mousedown.drag\", mousedowned)\n      .filter(touchable)\n        .on(\"touchstart.drag\", touchstarted)\n        .on(\"touchmove.drag\", touchmoved)\n        .on(\"touchend.drag touchcancel.drag\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  function mousedowned() {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n    if (!gesture) return;\n    select(exports.event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n    dragDisable(exports.event.view);\n    nopropagation();\n    mousemoving = false;\n    mousedownx = exports.event.clientX;\n    mousedowny = exports.event.clientY;\n    gesture(\"start\");\n  }\n\n  function mousemoved() {\n    noevent();\n    if (!mousemoving) {\n      var dx = exports.event.clientX - mousedownx, dy = exports.event.clientY - mousedowny;\n      mousemoving = dx * dx + dy * dy > clickDistance2;\n    }\n    gestures.mouse(\"drag\");\n  }\n\n  function mouseupped() {\n    select(exports.event.view).on(\"mousemove.drag mouseup.drag\", null);\n    yesdrag(exports.event.view, mousemoving);\n    noevent();\n    gestures.mouse(\"end\");\n  }\n\n  function touchstarted() {\n    if (!filter.apply(this, arguments)) return;\n    var touches$$1 = exports.event.changedTouches,\n        c = container.apply(this, arguments),\n        n = touches$$1.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = beforestart(touches$$1[i].identifier, c, touch, this, arguments)) {\n        nopropagation();\n        gesture(\"start\");\n      }\n    }\n  }\n\n  function touchmoved() {\n    var touches$$1 = exports.event.changedTouches,\n        n = touches$$1.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches$$1[i].identifier]) {\n        noevent();\n        gesture(\"drag\");\n      }\n    }\n  }\n\n  function touchended() {\n    var touches$$1 = exports.event.changedTouches,\n        n = touches$$1.length, i, gesture;\n\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches$$1[i].identifier]) {\n        nopropagation();\n        gesture(\"end\");\n      }\n    }\n  }\n\n  function beforestart(id, container, point$$1, that, args) {\n    var p = point$$1(container, id), s, dx, dy,\n        sublisteners = listeners.copy();\n\n    if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n      if ((exports.event.subject = s = subject.apply(that, args)) == null) return false;\n      dx = s.x - p[0] || 0;\n      dy = s.y - p[1] || 0;\n      return true;\n    })) return;\n\n    return function gesture(type) {\n      var p0 = p, n;\n      switch (type) {\n        case \"start\": gestures[id] = gesture, n = active++; break;\n        case \"end\": delete gestures[id], --active; // nobreak\n        case \"drag\": p = point$$1(container, id), n = active; break;\n      }\n      customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n    };\n  }\n\n  drag.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$2(!!_), drag) : filter;\n  };\n\n  drag.container = function(_) {\n    return arguments.length ? (container = typeof _ === \"function\" ? _ : constant$2(_), drag) : container;\n  };\n\n  drag.subject = function(_) {\n    return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant$2(_), drag) : subject;\n  };\n\n  drag.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant$2(!!_), drag) : touchable;\n  };\n\n  drag.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? drag : value;\n  };\n\n  drag.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n  };\n\n  return drag;\n}\n\nfunction define(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nfunction extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n\nfunction Color() {}\n\nvar darker = 0.7;\nvar brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex3 = /^#([0-9a-f]{3})$/,\n    reHex6 = /^#([0-9a-f]{6})$/,\n    reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n    reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n    reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n    reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n    reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n    reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  displayable: function() {\n    return this.rgb().displayable();\n  },\n  hex: function() {\n    return this.rgb().hex();\n  },\n  toString: function() {\n    return this.rgb() + \"\";\n  }\n});\n\nfunction color(format) {\n  var m;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n      : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format])\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nfunction rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nfunction rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nfunction Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb: function() {\n    return this;\n  },\n  displayable: function() {\n    return (0 <= this.r && this.r <= 255)\n        && (0 <= this.g && this.g <= 255)\n        && (0 <= this.b && this.b <= 255)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: function() {\n    return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n  },\n  toString: function() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"rgb(\" : \"rgba(\")\n        + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n        + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n        + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n}));\n\nfunction hex(value) {\n  value = Math.max(0, Math.min(255, Math.round(value) || 0));\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nfunction hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nfunction hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  displayable: function() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n\nvar deg2rad = Math.PI / 180;\nvar rad2deg = 180 / Math.PI;\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n    Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n  if (o instanceof Hcl) {\n    if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n    var h = o.h * deg2rad;\n    return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n  }\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = rgb2lrgb(o.r),\n      g = rgb2lrgb(o.g),\n      b = rgb2lrgb(o.b),\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n  if (r === g && g === b) x = z = y; else {\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n  }\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nfunction gray(l, opacity) {\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nfunction lab(l, a, b, opacity) {\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nfunction Lab(l, a, b, opacity) {\n  this.l = +l;\n  this.a = +a;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n  brighter: function(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker: function(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb: function() {\n    var y = (this.l + 16) / 116,\n        x = isNaN(this.a) ? y : y + this.a / 500,\n        z = isNaN(this.b) ? y : y - this.b / 200;\n    x = Xn * lab2xyz(x);\n    y = Yn * lab2xyz(y);\n    z = Zn * lab2xyz(z);\n    return new Rgb(\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n      this.opacity\n    );\n  }\n}));\n\nfunction xyz2lab(t) {\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n  return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n  if (!(o instanceof Lab)) o = labConvert(o);\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * rad2deg;\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nfunction lch(l, c, h, opacity) {\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction hcl(h, c, l, opacity) {\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hcl(h, c, l, opacity) {\n  this.h = +h;\n  this.c = +c;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n  brighter: function(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker: function(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb: function() {\n    return labConvert(this).rgb();\n  }\n}));\n\nvar A = -0.14861,\n    B = +1.78277,\n    C = -0.29227,\n    D = -0.90649,\n    E = +1.97294,\n    ED = E * D,\n    EB = E * B,\n    BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n      bl = b - l,\n      k = (E * (g - l) - C * bl) / D,\n      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n      h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nfunction cubehelix(h, s, l, opacity) {\n  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Cubehelix(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n        l = +this.l,\n        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n        cosh = Math.cos(h),\n        sinh = Math.sin(h);\n    return new Rgb(\n      255 * (l + a * (A * cosh + B * sinh)),\n      255 * (l + a * (C * cosh + D * sinh)),\n      255 * (l + a * (E * cosh)),\n      this.opacity\n    );\n  }\n}));\n\nfunction basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nfunction basis$1(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n\nfunction basisClosed(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n\nfunction constant$3(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nfunction hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a);\n}\n\nfunction gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant$3(isNaN(a) ? b : a);\n  };\n}\n\nfunction nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant$3(isNaN(a) ? b : a);\n}\n\nvar interpolateRgb = (function rgbGamma(y) {\n  var color$$1 = gamma(y);\n\n  function rgb$$1(start, end) {\n    var r = color$$1((start = rgb(start)).r, (end = rgb(end)).r),\n        g = color$$1(start.g, end.g),\n        b = color$$1(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb$$1.gamma = rgbGamma;\n\n  return rgb$$1;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color$$1;\n    for (i = 0; i < n; ++i) {\n      color$$1 = rgb(colors[i]);\n      r[i] = color$$1.r || 0;\n      g[i] = color$$1.g || 0;\n      b[i] = color$$1.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color$$1.opacity = 1;\n    return function(t) {\n      color$$1.r = r(t);\n      color$$1.g = g(t);\n      color$$1.b = b(t);\n      return color$$1 + \"\";\n    };\n  };\n}\n\nvar rgbBasis = rgbSpline(basis$1);\nvar rgbBasisClosed = rgbSpline(basisClosed);\n\nfunction array$1(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = interpolateValue(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n\nfunction date(a, b) {\n  var d = new Date;\n  return a = +a, b -= a, function(t) {\n    return d.setTime(a + b * t), d;\n  };\n}\n\nfunction interpolateNumber(a, b) {\n  return a = +a, b -= a, function(t) {\n    return a + b * t;\n  };\n}\n\nfunction object(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = interpolateValue(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nfunction interpolateString(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: interpolateNumber(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n\nfunction interpolateValue(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant$3(b)\n      : (t === \"number\" ? interpolateNumber\n      : t === \"string\" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString)\n      : b instanceof color ? interpolateRgb\n      : b instanceof Date ? date\n      : Array.isArray(b) ? array$1\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : interpolateNumber)(a, b);\n}\n\nfunction discrete(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n\nfunction hue$1(a, b) {\n  var i = hue(+a, +b);\n  return function(t) {\n    var x = i(t);\n    return x - 360 * Math.floor(x / 360);\n  };\n}\n\nfunction interpolateRound(a, b) {\n  return a = +a, b -= a, function(t) {\n    return Math.round(a + b * t);\n  };\n}\n\nvar degrees = 180 / Math.PI;\n\nvar identity$2 = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nfunction decompose(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n\nvar cssNode,\n    cssRoot,\n    cssView,\n    svgNode;\n\nfunction parseCss(value) {\n  if (value === \"none\") return identity$2;\n  if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n  cssNode.style.transform = value;\n  value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n  cssRoot.removeChild(cssNode);\n  value = value.slice(7, -1).split(\",\");\n  return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nfunction parseSvg(value) {\n  if (value == null) return identity$2;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: interpolateNumber(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: interpolateNumber(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nvar interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nvar interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n\nvar rho = Math.SQRT2,\n    rho2 = 2,\n    rho4 = 4,\n    epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nfunction interpolateZoom(p0, p1) {\n  var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n      ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n      dx = ux1 - ux0,\n      dy = uy1 - uy0,\n      d2 = dx * dx + dy * dy,\n      i,\n      S;\n\n  // Special case for u0 ≅ u1.\n  if (d2 < epsilon2) {\n    S = Math.log(w1 / w0) / rho;\n    i = function(t) {\n      return [\n        ux0 + t * dx,\n        uy0 + t * dy,\n        w0 * Math.exp(rho * t * S)\n      ];\n    };\n  }\n\n  // General case.\n  else {\n    var d1 = Math.sqrt(d2),\n        b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n        b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n        r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n        r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n    S = (r1 - r0) / rho;\n    i = function(t) {\n      var s = t * S,\n          coshr0 = cosh(r0),\n          u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n      return [\n        ux0 + u * dx,\n        uy0 + u * dy,\n        w0 * coshr0 / cosh(rho * s + r0)\n      ];\n    };\n  }\n\n  i.duration = S * 1000;\n\n  return i;\n}\n\nfunction hsl$1(hue$$1) {\n  return function(start, end) {\n    var h = hue$$1((start = hsl(start)).h, (end = hsl(end)).h),\n        s = nogamma(start.s, end.s),\n        l = nogamma(start.l, end.l),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nvar hsl$2 = hsl$1(hue);\nvar hslLong = hsl$1(nogamma);\n\nfunction lab$1(start, end) {\n  var l = nogamma((start = lab(start)).l, (end = lab(end)).l),\n      a = nogamma(start.a, end.a),\n      b = nogamma(start.b, end.b),\n      opacity = nogamma(start.opacity, end.opacity);\n  return function(t) {\n    start.l = l(t);\n    start.a = a(t);\n    start.b = b(t);\n    start.opacity = opacity(t);\n    return start + \"\";\n  };\n}\n\nfunction hcl$1(hue$$1) {\n  return function(start, end) {\n    var h = hue$$1((start = hcl(start)).h, (end = hcl(end)).h),\n        c = nogamma(start.c, end.c),\n        l = nogamma(start.l, end.l),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nvar hcl$2 = hcl$1(hue);\nvar hclLong = hcl$1(nogamma);\n\nfunction cubehelix$1(hue$$1) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix$$1(start, end) {\n      var h = hue$$1((start = cubehelix(start)).h, (end = cubehelix(end)).h),\n          s = nogamma(start.s, end.s),\n          l = nogamma(start.l, end.l),\n          opacity = nogamma(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix$$1.gamma = cubehelixGamma;\n\n    return cubehelix$$1;\n  })(1);\n}\n\nvar cubehelix$2 = cubehelix$1(hue);\nvar cubehelixLong = cubehelix$1(nogamma);\n\nfunction piecewise(interpolate, values) {\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\n  return function(t) {\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n    return I[i](t - i);\n  };\n}\n\nfunction quantize(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n}\n\nvar frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nfunction now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nfunction Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nfunction timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nfunction timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n\nfunction timeout$1(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(function(elapsed) {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n\nfunction interval$1(callback, delay, time) {\n  var t = new Timer, total = delay;\n  if (delay == null) return t.restart(callback, delay, time), t;\n  delay = +delay, time = time == null ? now() : +time;\n  t.restart(function tick(elapsed) {\n    elapsed += total;\n    t.restart(tick, total += delay, time);\n    callback(elapsed);\n  }, delay, time);\n  return t;\n}\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nvar CREATED = 0;\nvar SCHEDULED = 1;\nvar STARTING = 2;\nvar STARTED = 3;\nvar RUNNING = 4;\nvar ENDING = 5;\nvar ENDED = 6;\n\nfunction schedule(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create$1(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nfunction init(node, id) {\n  var schedule = get$1(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nfunction set$1(node, id) {\n  var schedule = get$1(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nfunction get$1(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create$1(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout$1(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout$1(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n\nfunction interrupt(node, name) {\n  var schedules = node.__transition,\n      schedule$$1,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule$$1 = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule$$1.state > STARTING && schedule$$1.state < ENDING;\n    schedule$$1.state = ENDED;\n    schedule$$1.timer.stop();\n    schedule$$1.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule$$1.index, schedule$$1.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n\nfunction selection_interrupt(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule$$1 = set$1(this, id),\n        tween = schedule$$1.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule$$1.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule$$1 = set$1(this, id),\n        tween = schedule$$1.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule$$1.tween = tween1;\n  };\n}\n\nfunction transition_tween(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get$1(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nfunction tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule$$1 = set$1(this, id);\n    (schedule$$1.value || (schedule$$1.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get$1(node, id).value[name];\n  };\n}\n\nfunction interpolate(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n\nfunction attrRemove$1(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS$1(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant$1(name, interpolate$$1, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate$$1(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS$1(fullname, interpolate$$1, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate$$1(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction$1(name, interpolate$$1, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate$$1(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS$1(fullname, interpolate$$1, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate$$1(string00 = string0, value1));\n  };\n}\n\nfunction transition_attr(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransformSvg : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)\n      : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));\n}\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i(t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i(t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction transition_attrTween(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nfunction transition_delay(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get$1(this.node(), id).delay;\n}\n\nfunction durationFunction(id, value) {\n  return function() {\n    set$1(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set$1(this, id).duration = value;\n  };\n}\n\nfunction transition_duration(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get$1(this.node(), id).duration;\n}\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set$1(this, id).ease = value;\n  };\n}\n\nfunction transition_ease(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get$1(this.node(), id).ease;\n}\n\nfunction transition_filter(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n\nfunction transition_merge(transition$$1) {\n  if (transition$$1._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition$$1._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set$1;\n  return function() {\n    var schedule$$1 = sit(this, id),\n        on = schedule$$1.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule$$1.on = on1;\n  };\n}\n\nfunction transition_on(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get$1(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n\nfunction removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nfunction transition_remove() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n\nfunction transition_select(select$$1) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select$$1 !== \"function\") select$$1 = selector(select$$1);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select$$1.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get$1(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n\nfunction transition_selectAll(select$$1) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select$$1 !== \"function\") select$$1 = selectorAll(select$$1);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select$$1.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n\nvar Selection$1 = selection.prototype.constructor;\n\nfunction transition_selection() {\n  return new Selection$1(this._groups, this._parents);\n}\n\nfunction styleNull(name, interpolate$$1) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = styleValue(this, name),\n        string1 = (this.style.removeProperty(name), styleValue(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate$$1(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove$1(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant$1(name, interpolate$$1, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = styleValue(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate$$1(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction$1(name, interpolate$$1, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = styleValue(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate$$1(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule$$1 = set$1(this, id),\n        on = schedule$$1.on,\n        listener = schedule$$1.value[key] == null ? remove || (remove = styleRemove$1(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule$$1.on = on1;\n  };\n}\n\nfunction transition_style(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransformCss : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove$1(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction$1(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant$1(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n\nfunction styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i(t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction transition_styleTween(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n\nfunction textConstant$1(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction$1(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nfunction transition_text(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction$1(tweenValue(this, \"text\", value))\n      : textConstant$1(value == null ? \"\" : value + \"\"));\n}\n\nfunction transition_transition() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get$1(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n\nfunction transition_end() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule$$1 = set$1(this, id),\n          on = schedule$$1.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule$$1.on = on1;\n    });\n  });\n}\n\nvar id = 0;\n\nfunction Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nfunction transition(name) {\n  return selection().transition(name);\n}\n\nfunction newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  end: transition_end\n};\n\nfunction linear$1(t) {\n  return +t;\n}\n\nfunction quadIn(t) {\n  return t * t;\n}\n\nfunction quadOut(t) {\n  return t * (2 - t);\n}\n\nfunction quadInOut(t) {\n  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n\nfunction cubicIn(t) {\n  return t * t * t;\n}\n\nfunction cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nfunction cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n\nvar exponent = 3;\n\nvar polyIn = (function custom(e) {\n  e = +e;\n\n  function polyIn(t) {\n    return Math.pow(t, e);\n  }\n\n  polyIn.exponent = custom;\n\n  return polyIn;\n})(exponent);\n\nvar polyOut = (function custom(e) {\n  e = +e;\n\n  function polyOut(t) {\n    return 1 - Math.pow(1 - t, e);\n  }\n\n  polyOut.exponent = custom;\n\n  return polyOut;\n})(exponent);\n\nvar polyInOut = (function custom(e) {\n  e = +e;\n\n  function polyInOut(t) {\n    return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n  }\n\n  polyInOut.exponent = custom;\n\n  return polyInOut;\n})(exponent);\n\nvar pi = Math.PI,\n    halfPi = pi / 2;\n\nfunction sinIn(t) {\n  return 1 - Math.cos(t * halfPi);\n}\n\nfunction sinOut(t) {\n  return Math.sin(t * halfPi);\n}\n\nfunction sinInOut(t) {\n  return (1 - Math.cos(pi * t)) / 2;\n}\n\nfunction expIn(t) {\n  return Math.pow(2, 10 * t - 10);\n}\n\nfunction expOut(t) {\n  return 1 - Math.pow(2, -10 * t);\n}\n\nfunction expInOut(t) {\n  return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;\n}\n\nfunction circleIn(t) {\n  return 1 - Math.sqrt(1 - t * t);\n}\n\nfunction circleOut(t) {\n  return Math.sqrt(1 - --t * t);\n}\n\nfunction circleInOut(t) {\n  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n\nvar b1 = 4 / 11,\n    b2 = 6 / 11,\n    b3 = 8 / 11,\n    b4 = 3 / 4,\n    b5 = 9 / 11,\n    b6 = 10 / 11,\n    b7 = 15 / 16,\n    b8 = 21 / 22,\n    b9 = 63 / 64,\n    b0 = 1 / b1 / b1;\n\nfunction bounceIn(t) {\n  return 1 - bounceOut(1 - t);\n}\n\nfunction bounceOut(t) {\n  return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nfunction bounceInOut(t) {\n  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n\nvar overshoot = 1.70158;\n\nvar backIn = (function custom(s) {\n  s = +s;\n\n  function backIn(t) {\n    return t * t * ((s + 1) * t - s);\n  }\n\n  backIn.overshoot = custom;\n\n  return backIn;\n})(overshoot);\n\nvar backOut = (function custom(s) {\n  s = +s;\n\n  function backOut(t) {\n    return --t * t * ((s + 1) * t + s) + 1;\n  }\n\n  backOut.overshoot = custom;\n\n  return backOut;\n})(overshoot);\n\nvar backInOut = (function custom(s) {\n  s = +s;\n\n  function backInOut(t) {\n    return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n  }\n\n  backInOut.overshoot = custom;\n\n  return backInOut;\n})(overshoot);\n\nvar tau = 2 * Math.PI,\n    amplitude = 1,\n    period = 0.3;\n\nvar elasticIn = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticIn(t) {\n    return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n  }\n\n  elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n  elasticIn.period = function(p) { return custom(a, p); };\n\n  return elasticIn;\n})(amplitude, period);\n\nvar elasticOut = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticOut(t) {\n    return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n  }\n\n  elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n  elasticOut.period = function(p) { return custom(a, p); };\n\n  return elasticOut;\n})(amplitude, period);\n\nvar elasticInOut = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticInOut(t) {\n    return ((t = t * 2 - 1) < 0\n        ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n        : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n  }\n\n  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n  elasticInOut.period = function(p) { return custom(a, p); };\n\n  return elasticInOut;\n})(amplitude, period);\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: cubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      return defaultTiming.time = now(), defaultTiming;\n    }\n  }\n  return timing;\n}\n\nfunction selection_transition(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n\nvar root$1 = [null];\n\nfunction active(node, name) {\n  var schedules = node.__transition,\n      schedule$$1,\n      i;\n\n  if (schedules) {\n    name = name == null ? null : name + \"\";\n    for (i in schedules) {\n      if ((schedule$$1 = schedules[i]).state > SCHEDULED && schedule$$1.name === name) {\n        return new Transition([[node]], root$1, name, +i);\n      }\n    }\n  }\n\n  return null;\n}\n\nfunction constant$4(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction BrushEvent(target, type, selection) {\n  this.target = target;\n  this.type = type;\n  this.selection = selection;\n}\n\nfunction nopropagation$1() {\n  exports.event.stopImmediatePropagation();\n}\n\nfunction noevent$1() {\n  exports.event.preventDefault();\n  exports.event.stopImmediatePropagation();\n}\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nvar X = {\n  name: \"x\",\n  handles: [\"e\", \"w\"].map(type),\n  input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n  name: \"y\",\n  handles: [\"n\", \"s\"].map(type),\n  input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n  name: \"xy\",\n  handles: [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"].map(type),\n  input: function(xy) { return xy; },\n  output: function(xy) { return xy; }\n};\n\nvar cursors = {\n  overlay: \"crosshair\",\n  selection: \"move\",\n  n: \"ns-resize\",\n  e: \"ew-resize\",\n  s: \"ns-resize\",\n  w: \"ew-resize\",\n  nw: \"nwse-resize\",\n  ne: \"nesw-resize\",\n  se: \"nwse-resize\",\n  sw: \"nesw-resize\"\n};\n\nvar flipX = {\n  e: \"w\",\n  w: \"e\",\n  nw: \"ne\",\n  ne: \"nw\",\n  se: \"sw\",\n  sw: \"se\"\n};\n\nvar flipY = {\n  n: \"s\",\n  s: \"n\",\n  nw: \"sw\",\n  ne: \"se\",\n  se: \"ne\",\n  sw: \"nw\"\n};\n\nvar signsX = {\n  overlay: +1,\n  selection: +1,\n  n: null,\n  e: +1,\n  s: null,\n  w: -1,\n  nw: -1,\n  ne: +1,\n  se: +1,\n  sw: -1\n};\n\nvar signsY = {\n  overlay: +1,\n  selection: +1,\n  n: -1,\n  e: null,\n  s: +1,\n  w: null,\n  nw: -1,\n  ne: -1,\n  se: +1,\n  sw: +1\n};\n\nfunction type(t) {\n  return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter$1() {\n  return !exports.event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local$1(node) {\n  while (!node.__brush) if (!(node = node.parentNode)) return;\n  return node.__brush;\n}\n\nfunction empty$1(extent) {\n  return extent[0][0] === extent[1][0]\n      || extent[0][1] === extent[1][1];\n}\n\nfunction brushSelection(node) {\n  var state = node.__brush;\n  return state ? state.dim.output(state.selection) : null;\n}\n\nfunction brushX() {\n  return brush$1(X);\n}\n\nfunction brushY() {\n  return brush$1(Y);\n}\n\nfunction brush() {\n  return brush$1(XY);\n}\n\nfunction brush$1(dim) {\n  var extent = defaultExtent,\n      filter = defaultFilter$1,\n      listeners = dispatch(brush, \"start\", \"brush\", \"end\"),\n      handleSize = 6,\n      touchending;\n\n  function brush(group) {\n    var overlay = group\n        .property(\"__brush\", initialize)\n      .selectAll(\".overlay\")\n      .data([type(\"overlay\")]);\n\n    overlay.enter().append(\"rect\")\n        .attr(\"class\", \"overlay\")\n        .attr(\"pointer-events\", \"all\")\n        .attr(\"cursor\", cursors.overlay)\n      .merge(overlay)\n        .each(function() {\n          var extent = local$1(this).extent;\n          select(this)\n              .attr(\"x\", extent[0][0])\n              .attr(\"y\", extent[0][1])\n              .attr(\"width\", extent[1][0] - extent[0][0])\n              .attr(\"height\", extent[1][1] - extent[0][1]);\n        });\n\n    group.selectAll(\".selection\")\n      .data([type(\"selection\")])\n      .enter().append(\"rect\")\n        .attr(\"class\", \"selection\")\n        .attr(\"cursor\", cursors.selection)\n        .attr(\"fill\", \"#777\")\n        .attr(\"fill-opacity\", 0.3)\n        .attr(\"stroke\", \"#fff\")\n        .attr(\"shape-rendering\", \"crispEdges\");\n\n    var handle = group.selectAll(\".handle\")\n      .data(dim.handles, function(d) { return d.type; });\n\n    handle.exit().remove();\n\n    handle.enter().append(\"rect\")\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n    group\n        .each(redraw)\n        .attr(\"fill\", \"none\")\n        .attr(\"pointer-events\", \"all\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\")\n        .on(\"mousedown.brush touchstart.brush\", started);\n  }\n\n  brush.move = function(group, selection$$1) {\n    if (group.selection) {\n      group\n          .on(\"start.brush\", function() { emitter(this, arguments).beforestart().start(); })\n          .on(\"interrupt.brush end.brush\", function() { emitter(this, arguments).end(); })\n          .tween(\"brush\", function() {\n            var that = this,\n                state = that.__brush,\n                emit = emitter(that, arguments),\n                selection0 = state.selection,\n                selection1 = dim.input(typeof selection$$1 === \"function\" ? selection$$1.apply(this, arguments) : selection$$1, state.extent),\n                i = interpolateValue(selection0, selection1);\n\n            function tween(t) {\n              state.selection = t === 1 && empty$1(selection1) ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 && selection1 ? tween : tween(1);\n          });\n    } else {\n      group\n          .each(function() {\n            var that = this,\n                args = arguments,\n                state = that.__brush,\n                selection1 = dim.input(typeof selection$$1 === \"function\" ? selection$$1.apply(that, args) : selection$$1, state.extent),\n                emit = emitter(that, args).beforestart();\n\n            interrupt(that);\n            state.selection = selection1 == null || empty$1(selection1) ? null : selection1;\n            redraw.call(that);\n            emit.start().brush().end();\n          });\n    }\n  };\n\n  function redraw() {\n    var group = select(this),\n        selection$$1 = local$1(this).selection;\n\n    if (selection$$1) {\n      group.selectAll(\".selection\")\n          .style(\"display\", null)\n          .attr(\"x\", selection$$1[0][0])\n          .attr(\"y\", selection$$1[0][1])\n          .attr(\"width\", selection$$1[1][0] - selection$$1[0][0])\n          .attr(\"height\", selection$$1[1][1] - selection$$1[0][1]);\n\n      group.selectAll(\".handle\")\n          .style(\"display\", null)\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection$$1[1][0] - handleSize / 2 : selection$$1[0][0] - handleSize / 2; })\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection$$1[1][1] - handleSize / 2 : selection$$1[0][1] - handleSize / 2; })\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection$$1[1][0] - selection$$1[0][0] + handleSize : handleSize; })\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection$$1[1][1] - selection$$1[0][1] + handleSize : handleSize; });\n    }\n\n    else {\n      group.selectAll(\".selection,.handle\")\n          .style(\"display\", \"none\")\n          .attr(\"x\", null)\n          .attr(\"y\", null)\n          .attr(\"width\", null)\n          .attr(\"height\", null);\n    }\n  }\n\n  function emitter(that, args) {\n    return that.__brush.emitter || new Emitter(that, args);\n  }\n\n  function Emitter(that, args) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n  }\n\n  Emitter.prototype = {\n    beforestart: function() {\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\n      return this;\n    },\n    start: function() {\n      if (this.starting) this.starting = false, this.emit(\"start\");\n      return this;\n    },\n    brush: function() {\n      this.emit(\"brush\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\");\n      return this;\n    },\n    emit: function(type) {\n      customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);\n    }\n  };\n\n  function started() {\n    if (exports.event.touches) { if (exports.event.changedTouches.length < exports.event.touches.length) return noevent$1(); }\n    else if (touchending) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = exports.event.target.__data__.type,\n        mode = (exports.event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (exports.event.altKey ? MODE_CENTER : MODE_HANDLE),\n        signX = dim === Y ? null : signsX[type],\n        signY = dim === X ? null : signsY[type],\n        state = local$1(that),\n        extent = state.extent,\n        selection$$1 = state.selection,\n        W = extent[0][0], w0, w1,\n        N = extent[0][1], n0, n1,\n        E = extent[1][0], e0, e1,\n        S = extent[1][1], s0, s1,\n        dx,\n        dy,\n        moving,\n        shifting = signX && signY && exports.event.shiftKey,\n        lockX,\n        lockY,\n        point0 = mouse(that),\n        point$$1 = point0,\n        emit = emitter(that, arguments).beforestart();\n\n    if (type === \"overlay\") {\n      state.selection = selection$$1 = [\n        [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],\n        [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]\n      ];\n    } else {\n      w0 = selection$$1[0][0];\n      n0 = selection$$1[0][1];\n      e0 = selection$$1[1][0];\n      s0 = selection$$1[1][1];\n    }\n\n    w1 = w0;\n    n1 = n0;\n    e1 = e0;\n    s1 = s0;\n\n    var group = select(that)\n        .attr(\"pointer-events\", \"none\");\n\n    var overlay = group.selectAll(\".overlay\")\n        .attr(\"cursor\", cursors[type]);\n\n    if (exports.event.touches) {\n      group\n          .on(\"touchmove.brush\", moved, true)\n          .on(\"touchend.brush touchcancel.brush\", ended, true);\n    } else {\n      var view = select(exports.event.view)\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n\n      dragDisable(exports.event.view);\n    }\n\n    nopropagation$1();\n    interrupt(that);\n    redraw.call(that);\n    emit.start();\n\n    function moved() {\n      var point1 = mouse(that);\n      if (shifting && !lockX && !lockY) {\n        if (Math.abs(point1[0] - point$$1[0]) > Math.abs(point1[1] - point$$1[1])) lockY = true;\n        else lockX = true;\n      }\n      point$$1 = point1;\n      moving = true;\n      noevent$1();\n      move();\n    }\n\n    function move() {\n      var t;\n\n      dx = point$$1[0] - point0[0];\n      dy = point$$1[1] - point0[1];\n\n      switch (mode) {\n        case MODE_SPACE:\n        case MODE_DRAG: {\n          if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n          else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n          if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n          else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));\n          if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));\n          break;\n        }\n      }\n\n      if (e1 < w1) {\n        signX *= -1;\n        t = w0, w0 = e0, e0 = t;\n        t = w1, w1 = e1, e1 = t;\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n      }\n\n      if (s1 < n1) {\n        signY *= -1;\n        t = n0, n0 = s0, s0 = t;\n        t = n1, n1 = s1, s1 = t;\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n      }\n\n      if (state.selection) selection$$1 = state.selection; // May be set by brush.move!\n      if (lockX) w1 = selection$$1[0][0], e1 = selection$$1[1][0];\n      if (lockY) n1 = selection$$1[0][1], s1 = selection$$1[1][1];\n\n      if (selection$$1[0][0] !== w1\n          || selection$$1[0][1] !== n1\n          || selection$$1[1][0] !== e1\n          || selection$$1[1][1] !== s1) {\n        state.selection = [[w1, n1], [e1, s1]];\n        redraw.call(that);\n        emit.brush();\n      }\n    }\n\n    function ended() {\n      nopropagation$1();\n      if (exports.event.touches) {\n        if (exports.event.touches.length) return;\n        if (touchending) clearTimeout(touchending);\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n        group.on(\"touchmove.brush touchend.brush touchcancel.brush\", null);\n      } else {\n        yesdrag(exports.event.view, moving);\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n      }\n      group.attr(\"pointer-events\", \"all\");\n      overlay.attr(\"cursor\", cursors.overlay);\n      if (state.selection) selection$$1 = state.selection; // May be set by brush.move (on start)!\n      if (empty$1(selection$$1)) state.selection = null, redraw.call(that);\n      emit.end();\n    }\n\n    function keydowned() {\n      switch (exports.event.keyCode) {\n        case 16: { // SHIFT\n          shifting = signX && signY;\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_HANDLE) {\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n            mode = MODE_CENTER;\n            move();\n          }\n          break;\n        }\n        case 32: { // SPACE; takes priority over ALT\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n            mode = MODE_SPACE;\n            overlay.attr(\"cursor\", cursors.selection);\n            move();\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent$1();\n    }\n\n    function keyupped() {\n      switch (exports.event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move();\n          }\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n            mode = MODE_HANDLE;\n            move();\n          }\n          break;\n        }\n        case 32: { // SPACE\n          if (mode === MODE_SPACE) {\n            if (exports.event.altKey) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n            } else {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n            }\n            overlay.attr(\"cursor\", cursors[type]);\n            move();\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent$1();\n    }\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = extent.apply(this, arguments);\n    state.dim = dim;\n    return state;\n  }\n\n  brush.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant$4([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$4(!!_), brush) : filter;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? brush : value;\n  };\n\n  return brush;\n}\n\nvar cos = Math.cos;\nvar sin = Math.sin;\nvar pi$1 = Math.PI;\nvar halfPi$1 = pi$1 / 2;\nvar tau$1 = pi$1 * 2;\nvar max$1 = Math.max;\n\nfunction compareValue(compare) {\n  return function(a, b) {\n    return compare(\n      a.source.value + a.target.value,\n      b.source.value + b.target.value\n    );\n  };\n}\n\nfunction chord() {\n  var padAngle = 0,\n      sortGroups = null,\n      sortSubgroups = null,\n      sortChords = null;\n\n  function chord(matrix) {\n    var n = matrix.length,\n        groupSums = [],\n        groupIndex = sequence(n),\n        subgroupIndex = [],\n        chords = [],\n        groups = chords.groups = new Array(n),\n        subgroups = new Array(n * n),\n        k,\n        x,\n        x0,\n        dx,\n        i,\n        j;\n\n    // Compute the sum.\n    k = 0, i = -1; while (++i < n) {\n      x = 0, j = -1; while (++j < n) {\n        x += matrix[i][j];\n      }\n      groupSums.push(x);\n      subgroupIndex.push(sequence(n));\n      k += x;\n    }\n\n    // Sort groups…\n    if (sortGroups) groupIndex.sort(function(a, b) {\n      return sortGroups(groupSums[a], groupSums[b]);\n    });\n\n    // Sort subgroups…\n    if (sortSubgroups) subgroupIndex.forEach(function(d, i) {\n      d.sort(function(a, b) {\n        return sortSubgroups(matrix[i][a], matrix[i][b]);\n      });\n    });\n\n    // Convert the sum to scaling factor for [0, 2pi].\n    // TODO Allow start and end angle to be specified?\n    // TODO Allow padding to be specified as percentage?\n    k = max$1(0, tau$1 - padAngle * n) / k;\n    dx = k ? padAngle : tau$1 / n;\n\n    // Compute the start and end angle for each group and subgroup.\n    // Note: Opera has a bug reordering object literal properties!\n    x = 0, i = -1; while (++i < n) {\n      x0 = x, j = -1; while (++j < n) {\n        var di = groupIndex[i],\n            dj = subgroupIndex[di][j],\n            v = matrix[di][dj],\n            a0 = x,\n            a1 = x += v * k;\n        subgroups[dj * n + di] = {\n          index: di,\n          subindex: dj,\n          startAngle: a0,\n          endAngle: a1,\n          value: v\n        };\n      }\n      groups[di] = {\n        index: di,\n        startAngle: x0,\n        endAngle: x,\n        value: groupSums[di]\n      };\n      x += dx;\n    }\n\n    // Generate chords for each (non-empty) subgroup-subgroup link.\n    i = -1; while (++i < n) {\n      j = i - 1; while (++j < n) {\n        var source = subgroups[j * n + i],\n            target = subgroups[i * n + j];\n        if (source.value || target.value) {\n          chords.push(source.value < target.value\n              ? {source: target, target: source}\n              : {source: source, target: target});\n        }\n      }\n    }\n\n    return sortChords ? chords.sort(sortChords) : chords;\n  }\n\n  chord.padAngle = function(_) {\n    return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle;\n  };\n\n  chord.sortGroups = function(_) {\n    return arguments.length ? (sortGroups = _, chord) : sortGroups;\n  };\n\n  chord.sortSubgroups = function(_) {\n    return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n  };\n\n  chord.sortChords = function(_) {\n    return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n  };\n\n  return chord;\n}\n\nvar slice$2 = Array.prototype.slice;\n\nfunction constant$5(x) {\n  return function() {\n    return x;\n  };\n}\n\nvar pi$2 = Math.PI,\n    tau$2 = 2 * pi$2,\n    epsilon$1 = 1e-6,\n    tauEpsilon = tau$2 - epsilon$1;\n\nfunction Path() {\n  this._x0 = this._y0 = // start of current subpath\n  this._x1 = this._y1 = null; // end of current subpath\n  this._ = \"\";\n}\n\nfunction path() {\n  return new Path;\n}\n\nPath.prototype = path.prototype = {\n  constructor: Path,\n  moveTo: function(x, y) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n  },\n  closePath: function() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  },\n  lineTo: function(x, y) {\n    this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  quadraticCurveTo: function(x1, y1, x, y) {\n    this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n    this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  arcTo: function(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n    var x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon$1));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$1) || !r) {\n      this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      var x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi$2 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon$1) {\n        this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n      }\n\n      this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n    }\n  },\n  arc: function(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r;\n    var dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._ += \"M\" + x0 + \",\" + y0;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon$1 || Math.abs(this._y1 - y0) > epsilon$1) {\n      this._ += \"L\" + x0 + \",\" + y0;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau$2 + tau$2;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon$1) {\n      this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi$2)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n    }\n  },\n  rect: function(x, y, w, h) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nfunction defaultSource(d) {\n  return d.source;\n}\n\nfunction defaultTarget(d) {\n  return d.target;\n}\n\nfunction defaultRadius(d) {\n  return d.radius;\n}\n\nfunction defaultStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction defaultEndAngle(d) {\n  return d.endAngle;\n}\n\nfunction ribbon() {\n  var source = defaultSource,\n      target = defaultTarget,\n      radius = defaultRadius,\n      startAngle = defaultStartAngle,\n      endAngle = defaultEndAngle,\n      context = null;\n\n  function ribbon() {\n    var buffer,\n        argv = slice$2.call(arguments),\n        s = source.apply(this, argv),\n        t = target.apply(this, argv),\n        sr = +radius.apply(this, (argv[0] = s, argv)),\n        sa0 = startAngle.apply(this, argv) - halfPi$1,\n        sa1 = endAngle.apply(this, argv) - halfPi$1,\n        sx0 = sr * cos(sa0),\n        sy0 = sr * sin(sa0),\n        tr = +radius.apply(this, (argv[0] = t, argv)),\n        ta0 = startAngle.apply(this, argv) - halfPi$1,\n        ta1 = endAngle.apply(this, argv) - halfPi$1;\n\n    if (!context) context = buffer = path();\n\n    context.moveTo(sx0, sy0);\n    context.arc(0, 0, sr, sa0, sa1);\n    if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?\n      context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n      context.arc(0, 0, tr, ta0, ta1);\n    }\n    context.quadraticCurveTo(0, 0, sx0, sy0);\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  ribbon.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$5(+_), ribbon) : radius;\n  };\n\n  ribbon.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$5(+_), ribbon) : startAngle;\n  };\n\n  ribbon.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$5(+_), ribbon) : endAngle;\n  };\n\n  ribbon.source = function(_) {\n    return arguments.length ? (source = _, ribbon) : source;\n  };\n\n  ribbon.target = function(_) {\n    return arguments.length ? (target = _, ribbon) : target;\n  };\n\n  ribbon.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n  };\n\n  return ribbon;\n}\n\nvar prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map$1.prototype = {\n  constructor: Map,\n  has: function(key) {\n    return (prefix + key) in this;\n  },\n  get: function(key) {\n    return this[prefix + key];\n  },\n  set: function(key, value) {\n    this[prefix + key] = value;\n    return this;\n  },\n  remove: function(key) {\n    var property = prefix + key;\n    return property in this && delete this[property];\n  },\n  clear: function() {\n    for (var property in this) if (property[0] === prefix) delete this[property];\n  },\n  keys: function() {\n    var keys = [];\n    for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n    return keys;\n  },\n  values: function() {\n    var values = [];\n    for (var property in this) if (property[0] === prefix) values.push(this[property]);\n    return values;\n  },\n  entries: function() {\n    var entries = [];\n    for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n    return entries;\n  },\n  size: function() {\n    var size = 0;\n    for (var property in this) if (property[0] === prefix) ++size;\n    return size;\n  },\n  empty: function() {\n    for (var property in this) if (property[0] === prefix) return false;\n    return true;\n  },\n  each: function(f) {\n    for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n  }\n};\n\nfunction map$1(object, f) {\n  var map = new Map;\n\n  // Copy constructor.\n  if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n  // Index array by numeric index or specified key function.\n  else if (Array.isArray(object)) {\n    var i = -1,\n        n = object.length,\n        o;\n\n    if (f == null) while (++i < n) map.set(i, object[i]);\n    else while (++i < n) map.set(f(o = object[i], i, object), o);\n  }\n\n  // Convert object to map.\n  else if (object) for (var key in object) map.set(key, object[key]);\n\n  return map;\n}\n\nfunction nest() {\n  var keys = [],\n      sortKeys = [],\n      sortValues,\n      rollup,\n      nest;\n\n  function apply(array, depth, createResult, setResult) {\n    if (depth >= keys.length) {\n      if (sortValues != null) array.sort(sortValues);\n      return rollup != null ? rollup(array) : array;\n    }\n\n    var i = -1,\n        n = array.length,\n        key = keys[depth++],\n        keyValue,\n        value,\n        valuesByKey = map$1(),\n        values,\n        result = createResult();\n\n    while (++i < n) {\n      if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n        values.push(value);\n      } else {\n        valuesByKey.set(keyValue, [value]);\n      }\n    }\n\n    valuesByKey.each(function(values, key) {\n      setResult(result, key, apply(values, depth, createResult, setResult));\n    });\n\n    return result;\n  }\n\n  function entries(map, depth) {\n    if (++depth > keys.length) return map;\n    var array, sortKey = sortKeys[depth - 1];\n    if (rollup != null && depth >= keys.length) array = map.entries();\n    else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n    return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n  }\n\n  return nest = {\n    object: function(array) { return apply(array, 0, createObject, setObject); },\n    map: function(array) { return apply(array, 0, createMap, setMap); },\n    entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n    key: function(d) { keys.push(d); return nest; },\n    sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n    sortValues: function(order) { sortValues = order; return nest; },\n    rollup: function(f) { rollup = f; return nest; }\n  };\n}\n\nfunction createObject() {\n  return {};\n}\n\nfunction setObject(object, key, value) {\n  object[key] = value;\n}\n\nfunction createMap() {\n  return map$1();\n}\n\nfunction setMap(map, key, value) {\n  map.set(key, value);\n}\n\nfunction Set() {}\n\nvar proto = map$1.prototype;\n\nSet.prototype = set$2.prototype = {\n  constructor: Set,\n  has: proto.has,\n  add: function(value) {\n    value += \"\";\n    this[prefix + value] = value;\n    return this;\n  },\n  remove: proto.remove,\n  clear: proto.clear,\n  values: proto.keys,\n  size: proto.size,\n  empty: proto.empty,\n  each: proto.each\n};\n\nfunction set$2(object, f) {\n  var set = new Set;\n\n  // Copy constructor.\n  if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n  // Otherwise, assume it’s an array.\n  else if (object) {\n    var i = -1, n = object.length;\n    if (f == null) while (++i < n) set.add(object[i]);\n    else while (++i < n) set.add(f(object[i], i, object));\n  }\n\n  return set;\n}\n\nfunction keys(map) {\n  var keys = [];\n  for (var key in map) keys.push(key);\n  return keys;\n}\n\nfunction values(map) {\n  var values = [];\n  for (var key in map) values.push(map[key]);\n  return values;\n}\n\nfunction entries(map) {\n  var entries = [];\n  for (var key in map) entries.push({key: key, value: map[key]});\n  return entries;\n}\n\nvar array$2 = Array.prototype;\n\nvar slice$3 = array$2.slice;\n\nfunction ascending$2(a, b) {\n  return a - b;\n}\n\nfunction area(ring) {\n  var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n  while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n  return area;\n}\n\nfunction constant$6(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction contains(ring, hole) {\n  var i = -1, n = hole.length, c;\n  while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n  return 0;\n}\n\nfunction ringContains(ring, point) {\n  var x = point[0], y = point[1], contains = -1;\n  for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n    var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n    if (segmentContains(pi, pj, point)) return 0;\n    if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n  }\n  return contains;\n}\n\nfunction segmentContains(a, b, c) {\n  var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n  return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n  return p <= q && q <= r || r <= q && q <= p;\n}\n\nfunction noop$1() {}\n\nvar cases = [\n  [],\n  [[[1.0, 1.5], [0.5, 1.0]]],\n  [[[1.5, 1.0], [1.0, 1.5]]],\n  [[[1.5, 1.0], [0.5, 1.0]]],\n  [[[1.0, 0.5], [1.5, 1.0]]],\n  [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n  [[[1.0, 0.5], [1.0, 1.5]]],\n  [[[1.0, 0.5], [0.5, 1.0]]],\n  [[[0.5, 1.0], [1.0, 0.5]]],\n  [[[1.0, 1.5], [1.0, 0.5]]],\n  [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n  [[[1.5, 1.0], [1.0, 0.5]]],\n  [[[0.5, 1.0], [1.5, 1.0]]],\n  [[[1.0, 1.5], [1.5, 1.0]]],\n  [[[0.5, 1.0], [1.0, 1.5]]],\n  []\n];\n\nfunction contours() {\n  var dx = 1,\n      dy = 1,\n      threshold$$1 = thresholdSturges,\n      smooth = smoothLinear;\n\n  function contours(values) {\n    var tz = threshold$$1(values);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      var domain = extent(values), start = domain[0], stop = domain[1];\n      tz = tickStep(start, stop, tz);\n      tz = sequence(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);\n    } else {\n      tz = tz.slice().sort(ascending$2);\n    }\n\n    return tz.map(function(value) {\n      return contour(values, value);\n    });\n  }\n\n  // Accumulate, smooth contour rings, assign holes to exterior rings.\n  // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n  function contour(values, value) {\n    var polygons = [],\n        holes = [];\n\n    isorings(values, value, function(ring) {\n      smooth(ring, values, value);\n      if (area(ring) > 0) polygons.push([ring]);\n      else holes.push(ring);\n    });\n\n    holes.forEach(function(hole) {\n      for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n        if (contains((polygon = polygons[i])[0], hole) !== -1) {\n          polygon.push(hole);\n          return;\n        }\n      }\n    });\n\n    return {\n      type: \"MultiPolygon\",\n      value: value,\n      coordinates: polygons\n    };\n  }\n\n  // Marching squares with isolines stitched into rings.\n  // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n  function isorings(values, value, callback) {\n    var fragmentByStart = new Array,\n        fragmentByEnd = new Array,\n        x, y, t0, t1, t2, t3;\n\n    // Special case for the first row (y = -1, t2 = t3 = 0).\n    x = y = -1;\n    t1 = values[0] >= value;\n    cases[t1 << 1].forEach(stitch);\n    while (++x < dx - 1) {\n      t0 = t1, t1 = values[x + 1] >= value;\n      cases[t0 | t1 << 1].forEach(stitch);\n    }\n    cases[t1 << 0].forEach(stitch);\n\n    // General case for the intermediate rows.\n    while (++y < dy - 1) {\n      x = -1;\n      t1 = values[y * dx + dx] >= value;\n      t2 = values[y * dx] >= value;\n      cases[t1 << 1 | t2 << 2].forEach(stitch);\n      while (++x < dx - 1) {\n        t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n        t3 = t2, t2 = values[y * dx + x + 1] >= value;\n        cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n      }\n      cases[t1 | t2 << 3].forEach(stitch);\n    }\n\n    // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n    x = -1;\n    t2 = values[y * dx] >= value;\n    cases[t2 << 2].forEach(stitch);\n    while (++x < dx - 1) {\n      t3 = t2, t2 = values[y * dx + x + 1] >= value;\n      cases[t2 << 2 | t3 << 3].forEach(stitch);\n    }\n    cases[t2 << 3].forEach(stitch);\n\n    function stitch(line) {\n      var start = [line[0][0] + x, line[0][1] + y],\n          end = [line[1][0] + x, line[1][1] + y],\n          startIndex = index(start),\n          endIndex = index(end),\n          f, g;\n      if (f = fragmentByEnd[startIndex]) {\n        if (g = fragmentByStart[endIndex]) {\n          delete fragmentByEnd[f.end];\n          delete fragmentByStart[g.start];\n          if (f === g) {\n            f.ring.push(end);\n            callback(f.ring);\n          } else {\n            fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n          }\n        } else {\n          delete fragmentByEnd[f.end];\n          f.ring.push(end);\n          fragmentByEnd[f.end = endIndex] = f;\n        }\n      } else if (f = fragmentByStart[endIndex]) {\n        if (g = fragmentByEnd[startIndex]) {\n          delete fragmentByStart[f.start];\n          delete fragmentByEnd[g.end];\n          if (f === g) {\n            f.ring.push(end);\n            callback(f.ring);\n          } else {\n            fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n          }\n        } else {\n          delete fragmentByStart[f.start];\n          f.ring.unshift(start);\n          fragmentByStart[f.start = startIndex] = f;\n        }\n      } else {\n        fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n      }\n    }\n  }\n\n  function index(point) {\n    return point[0] * 2 + point[1] * (dx + 1) * 4;\n  }\n\n  function smoothLinear(ring, values, value) {\n    ring.forEach(function(point) {\n      var x = point[0],\n          y = point[1],\n          xt = x | 0,\n          yt = y | 0,\n          v0,\n          v1 = values[yt * dx + xt];\n      if (x > 0 && x < dx && xt === x) {\n        v0 = values[yt * dx + xt - 1];\n        point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n      }\n      if (y > 0 && y < dy && yt === y) {\n        v0 = values[(yt - 1) * dx + xt];\n        point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n      }\n    });\n  }\n\n  contours.contour = contour;\n\n  contours.size = function(_) {\n    if (!arguments.length) return [dx, dy];\n    var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n    if (!(_0 > 0) || !(_1 > 0)) throw new Error(\"invalid size\");\n    return dx = _0, dy = _1, contours;\n  };\n\n  contours.thresholds = function(_) {\n    return arguments.length ? (threshold$$1 = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant$6(slice$3.call(_)) : constant$6(_), contours) : threshold$$1;\n  };\n\n  contours.smooth = function(_) {\n    return arguments.length ? (smooth = _ ? smoothLinear : noop$1, contours) : smooth === smoothLinear;\n  };\n\n  return contours;\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nfunction blurX(source, target, r) {\n  var n = source.width,\n      m = source.height,\n      w = (r << 1) + 1;\n  for (var j = 0; j < m; ++j) {\n    for (var i = 0, sr = 0; i < n + r; ++i) {\n      if (i < n) {\n        sr += source.data[i + j * n];\n      }\n      if (i >= r) {\n        if (i >= w) {\n          sr -= source.data[i - w + j * n];\n        }\n        target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n      }\n    }\n  }\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nfunction blurY(source, target, r) {\n  var n = source.width,\n      m = source.height,\n      w = (r << 1) + 1;\n  for (var i = 0; i < n; ++i) {\n    for (var j = 0, sr = 0; j < m + r; ++j) {\n      if (j < m) {\n        sr += source.data[i + j * n];\n      }\n      if (j >= r) {\n        if (j >= w) {\n          sr -= source.data[i + (j - w) * n];\n        }\n        target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n      }\n    }\n  }\n}\n\nfunction defaultX(d) {\n  return d[0];\n}\n\nfunction defaultY(d) {\n  return d[1];\n}\n\nfunction defaultWeight() {\n  return 1;\n}\n\nfunction density() {\n  var x = defaultX,\n      y = defaultY,\n      weight = defaultWeight,\n      dx = 960,\n      dy = 500,\n      r = 20, // blur radius\n      k = 2, // log2(grid cell size)\n      o = r * 3, // grid offset, to pad for blur\n      n = (dx + o * 2) >> k, // grid width\n      m = (dy + o * 2) >> k, // grid height\n      threshold$$1 = constant$6(20);\n\n  function density(data) {\n    var values0 = new Float32Array(n * m),\n        values1 = new Float32Array(n * m);\n\n    data.forEach(function(d, i, data) {\n      var xi = (+x(d, i, data) + o) >> k,\n          yi = (+y(d, i, data) + o) >> k,\n          wi = +weight(d, i, data);\n      if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n        values0[xi + yi * n] += wi;\n      }\n    });\n\n    // TODO Optimize.\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n    var tz = threshold$$1(values0);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      var stop = max(values0);\n      tz = tickStep(0, stop, tz);\n      tz = sequence(0, Math.floor(stop / tz) * tz, tz);\n      tz.shift();\n    }\n\n    return contours()\n        .thresholds(tz)\n        .size([n, m])\n      (values0)\n        .map(transform);\n  }\n\n  function transform(geometry) {\n    geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n    geometry.coordinates.forEach(transformPolygon);\n    return geometry;\n  }\n\n  function transformPolygon(coordinates) {\n    coordinates.forEach(transformRing);\n  }\n\n  function transformRing(coordinates) {\n    coordinates.forEach(transformPoint);\n  }\n\n  // TODO Optimize.\n  function transformPoint(coordinates) {\n    coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n    coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n  }\n\n  function resize() {\n    o = r * 3;\n    n = (dx + o * 2) >> k;\n    m = (dy + o * 2) >> k;\n    return density;\n  }\n\n  density.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant$6(+_), density) : x;\n  };\n\n  density.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant$6(+_), density) : y;\n  };\n\n  density.weight = function(_) {\n    return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant$6(+_), density) : weight;\n  };\n\n  density.size = function(_) {\n    if (!arguments.length) return [dx, dy];\n    var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n    if (!(_0 >= 0) && !(_0 >= 0)) throw new Error(\"invalid size\");\n    return dx = _0, dy = _1, resize();\n  };\n\n  density.cellSize = function(_) {\n    if (!arguments.length) return 1 << k;\n    if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n    return k = Math.floor(Math.log(_) / Math.LN2), resize();\n  };\n\n  density.thresholds = function(_) {\n    return arguments.length ? (threshold$$1 = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant$6(slice$3.call(_)) : constant$6(_), density) : threshold$$1;\n  };\n\n  density.bandwidth = function(_) {\n    if (!arguments.length) return Math.sqrt(r * (r + 1));\n    if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n    return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n  };\n\n  return density;\n}\n\nvar EOL = {},\n    EOF = {},\n    QUOTE = 34,\n    NEWLINE = 10,\n    RETURN = 13;\n\nfunction objectConverter(columns) {\n  return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n    return JSON.stringify(name) + \": d[\" + i + \"]\";\n  }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n  var object = objectConverter(columns);\n  return function(row, i) {\n    return f(object(row), i, columns);\n  };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n  var columnSet = Object.create(null),\n      columns = [];\n\n  rows.forEach(function(row) {\n    for (var column in row) {\n      if (!(column in columnSet)) {\n        columns.push(columnSet[column] = column);\n      }\n    }\n  });\n\n  return columns;\n}\n\nfunction pad(value, width) {\n  var s = value + \"\", length = s.length;\n  return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n  return year < 0 ? \"-\" + pad(-year, 6)\n    : year > 9999 ? \"+\" + pad(year, 6)\n    : pad(year, 4);\n}\n\nfunction formatDate(date) {\n  var hours = date.getUTCHours(),\n      minutes = date.getUTCMinutes(),\n      seconds = date.getUTCSeconds(),\n      milliseconds = date.getUTCMilliseconds();\n  return isNaN(date) ? \"Invalid Date\"\n      : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n      + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n      : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n      : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n      : \"\");\n}\n\nfunction dsvFormat(delimiter) {\n  var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n      DELIMITER = delimiter.charCodeAt(0);\n\n  function parse(text, f) {\n    var convert, columns, rows = parseRows(text, function(row, i) {\n      if (convert) return convert(row, i - 1);\n      columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n    });\n    rows.columns = columns || [];\n    return rows;\n  }\n\n  function parseRows(text, f) {\n    var rows = [], // output rows\n        N = text.length,\n        I = 0, // current character index\n        n = 0, // current line number\n        t, // current token\n        eof = N <= 0, // current token followed by EOF?\n        eol = false; // current token followed by EOL?\n\n    // Strip the trailing newline.\n    if (text.charCodeAt(N - 1) === NEWLINE) --N;\n    if (text.charCodeAt(N - 1) === RETURN) --N;\n\n    function token() {\n      if (eof) return EOF;\n      if (eol) return eol = false, EOL;\n\n      // Unescape quotes.\n      var i, j = I, c;\n      if (text.charCodeAt(j) === QUOTE) {\n        while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n        if ((i = I) >= N) eof = true;\n        else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n      }\n\n      // Find next delimiter or newline.\n      while (I < N) {\n        if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        else if (c !== DELIMITER) continue;\n        return text.slice(j, i);\n      }\n\n      // Return last token before EOF.\n      return eof = true, text.slice(j, N);\n    }\n\n    while ((t = token()) !== EOF) {\n      var row = [];\n      while (t !== EOL && t !== EOF) row.push(t), t = token();\n      if (f && (row = f(row, n++)) == null) continue;\n      rows.push(row);\n    }\n\n    return rows;\n  }\n\n  function preformatBody(rows, columns) {\n    return rows.map(function(row) {\n      return columns.map(function(column) {\n        return formatValue(row[column]);\n      }).join(delimiter);\n    });\n  }\n\n  function format(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n  }\n\n  function formatBody(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return preformatBody(rows, columns).join(\"\\n\");\n  }\n\n  function formatRows(rows) {\n    return rows.map(formatRow).join(\"\\n\");\n  }\n\n  function formatRow(row) {\n    return row.map(formatValue).join(delimiter);\n  }\n\n  function formatValue(value) {\n    return value == null ? \"\"\n        : value instanceof Date ? formatDate(value)\n        : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n        : value;\n  }\n\n  return {\n    parse: parse,\n    parseRows: parseRows,\n    format: format,\n    formatBody: formatBody,\n    formatRows: formatRows\n  };\n}\n\nvar csv = dsvFormat(\",\");\n\nvar csvParse = csv.parse;\nvar csvParseRows = csv.parseRows;\nvar csvFormat = csv.format;\nvar csvFormatBody = csv.formatBody;\nvar csvFormatRows = csv.formatRows;\n\nvar tsv = dsvFormat(\"\\t\");\n\nvar tsvParse = tsv.parse;\nvar tsvParseRows = tsv.parseRows;\nvar tsvFormat = tsv.format;\nvar tsvFormatBody = tsv.formatBody;\nvar tsvFormatRows = tsv.formatRows;\n\nfunction autoType(object) {\n  for (var key in object) {\n    var value = object[key].trim(), number;\n    if (!value) value = null;\n    else if (value === \"true\") value = true;\n    else if (value === \"false\") value = false;\n    else if (value === \"NaN\") value = NaN;\n    else if (!isNaN(number = +value)) value = number;\n    else if (/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/.test(value)) value = new Date(value);\n    else continue;\n    object[key] = value;\n  }\n  return object;\n}\n\nfunction responseBlob(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.blob();\n}\n\nfunction blob(input, init) {\n  return fetch(input, init).then(responseBlob);\n}\n\nfunction responseArrayBuffer(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.arrayBuffer();\n}\n\nfunction buffer(input, init) {\n  return fetch(input, init).then(responseArrayBuffer);\n}\n\nfunction responseText(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.text();\n}\n\nfunction text(input, init) {\n  return fetch(input, init).then(responseText);\n}\n\nfunction dsvParse(parse) {\n  return function(input, init, row) {\n    if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n    return text(input, init).then(function(response) {\n      return parse(response, row);\n    });\n  };\n}\n\nfunction dsv(delimiter, input, init, row) {\n  if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n  var format = dsvFormat(delimiter);\n  return text(input, init).then(function(response) {\n    return format.parse(response, row);\n  });\n}\n\nvar csv$1 = dsvParse(csvParse);\nvar tsv$1 = dsvParse(tsvParse);\n\nfunction image(input, init) {\n  return new Promise(function(resolve, reject) {\n    var image = new Image;\n    for (var key in init) image[key] = init[key];\n    image.onerror = reject;\n    image.onload = function() { resolve(image); };\n    image.src = input;\n  });\n}\n\nfunction responseJson(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.json();\n}\n\nfunction json(input, init) {\n  return fetch(input, init).then(responseJson);\n}\n\nfunction parser(type) {\n  return function(input, init)  {\n    return text(input, init).then(function(text$$1) {\n      return (new DOMParser).parseFromString(text$$1, type);\n    });\n  };\n}\n\nvar xml = parser(\"application/xml\");\n\nvar html = parser(\"text/html\");\n\nvar svg = parser(\"image/svg+xml\");\n\nfunction center$1(x, y) {\n  var nodes;\n\n  if (x == null) x = 0;\n  if (y == null) y = 0;\n\n  function force() {\n    var i,\n        n = nodes.length,\n        node,\n        sx = 0,\n        sy = 0;\n\n    for (i = 0; i < n; ++i) {\n      node = nodes[i], sx += node.x, sy += node.y;\n    }\n\n    for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {\n      node = nodes[i], node.x -= sx, node.y -= sy;\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = +_, force) : x;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = +_, force) : y;\n  };\n\n  return force;\n}\n\nfunction constant$7(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction jiggle() {\n  return (Math.random() - 0.5) * 1e-6;\n}\n\nfunction tree_add(d) {\n  var x = +this._x.call(null, d),\n      y = +this._y.call(null, d);\n  return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n  var parent,\n      node = tree._root,\n      leaf = {data: d},\n      x0 = tree._x0,\n      y0 = tree._y0,\n      x1 = tree._x1,\n      y1 = tree._y1,\n      xm,\n      ym,\n      xp,\n      yp,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return tree._root = leaf, tree;\n\n  // Find the existing leaf for the new point, or add it.\n  while (node.length) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n  }\n\n  // Is the new point is exactly coincident with the existing point?\n  xp = +tree._x.call(null, node.data);\n  yp = +tree._y.call(null, node.data);\n  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n  // Otherwise, split the leaf node until the old and new point are separated.\n  do {\n    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n  return parent[j] = node, parent[i] = leaf, tree;\n}\n\nfunction addAll(data) {\n  var d, i, n = data.length,\n      x,\n      y,\n      xz = new Array(n),\n      yz = new Array(n),\n      x0 = Infinity,\n      y0 = Infinity,\n      x1 = -Infinity,\n      y1 = -Infinity;\n\n  // Compute the points and their extent.\n  for (i = 0; i < n; ++i) {\n    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n    xz[i] = x;\n    yz[i] = y;\n    if (x < x0) x0 = x;\n    if (x > x1) x1 = x;\n    if (y < y0) y0 = y;\n    if (y > y1) y1 = y;\n  }\n\n  // If there were no (valid) points, abort.\n  if (x0 > x1 || y0 > y1) return this;\n\n  // Expand the tree to cover the new points.\n  this.cover(x0, y0).cover(x1, y1);\n\n  // Add the new points.\n  for (i = 0; i < n; ++i) {\n    add(this, xz[i], yz[i], data[i]);\n  }\n\n  return this;\n}\n\nfunction tree_cover(x, y) {\n  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n  var x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1;\n\n  // If the quadtree has no extent, initialize them.\n  // Integer extent are necessary so that if we later double the extent,\n  // the existing quadrant boundaries don’t change due to floating point error!\n  if (isNaN(x0)) {\n    x1 = (x0 = Math.floor(x)) + 1;\n    y1 = (y0 = Math.floor(y)) + 1;\n  }\n\n  // Otherwise, double repeatedly to cover.\n  else {\n    var z = x1 - x0,\n        node = this._root,\n        parent,\n        i;\n\n    while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n      i = (y < y0) << 1 | (x < x0);\n      parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n      switch (i) {\n        case 0: x1 = x0 + z, y1 = y0 + z; break;\n        case 1: x0 = x1 - z, y1 = y0 + z; break;\n        case 2: x1 = x0 + z, y0 = y1 - z; break;\n        case 3: x0 = x1 - z, y0 = y1 - z; break;\n      }\n    }\n\n    if (this._root && this._root.length) this._root = node;\n  }\n\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  return this;\n}\n\nfunction tree_data() {\n  var data = [];\n  this.visit(function(node) {\n    if (!node.length) do data.push(node.data); while (node = node.next)\n  });\n  return data;\n}\n\nfunction tree_extent(_) {\n  return arguments.length\n      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n\nfunction Quad(node, x0, y0, x1, y1) {\n  this.node = node;\n  this.x0 = x0;\n  this.y0 = y0;\n  this.x1 = x1;\n  this.y1 = y1;\n}\n\nfunction tree_find(x, y, radius) {\n  var data,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1,\n      y1,\n      x2,\n      y2,\n      x3 = this._x1,\n      y3 = this._y1,\n      quads = [],\n      node = this._root,\n      q,\n      i;\n\n  if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n  if (radius == null) radius = Infinity;\n  else {\n    x0 = x - radius, y0 = y - radius;\n    x3 = x + radius, y3 = y + radius;\n    radius *= radius;\n  }\n\n  while (q = quads.pop()) {\n\n    // Stop searching if this quadrant can’t contain a closer node.\n    if (!(node = q.node)\n        || (x1 = q.x0) > x3\n        || (y1 = q.y0) > y3\n        || (x2 = q.x1) < x0\n        || (y2 = q.y1) < y0) continue;\n\n    // Bisect the current quadrant.\n    if (node.length) {\n      var xm = (x1 + x2) / 2,\n          ym = (y1 + y2) / 2;\n\n      quads.push(\n        new Quad(node[3], xm, ym, x2, y2),\n        new Quad(node[2], x1, ym, xm, y2),\n        new Quad(node[1], xm, y1, x2, ym),\n        new Quad(node[0], x1, y1, xm, ym)\n      );\n\n      // Visit the closest quadrant first.\n      if (i = (y >= ym) << 1 | (x >= xm)) {\n        q = quads[quads.length - 1];\n        quads[quads.length - 1] = quads[quads.length - 1 - i];\n        quads[quads.length - 1 - i] = q;\n      }\n    }\n\n    // Visit this point. (Visiting coincident points isn’t necessary!)\n    else {\n      var dx = x - +this._x.call(null, node.data),\n          dy = y - +this._y.call(null, node.data),\n          d2 = dx * dx + dy * dy;\n      if (d2 < radius) {\n        var d = Math.sqrt(radius = d2);\n        x0 = x - d, y0 = y - d;\n        x3 = x + d, y3 = y + d;\n        data = node.data;\n      }\n    }\n  }\n\n  return data;\n}\n\nfunction tree_remove(d) {\n  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n  var parent,\n      node = this._root,\n      retainer,\n      previous,\n      next,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1,\n      x,\n      y,\n      xm,\n      ym,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return this;\n\n  // Find the leaf node for the point.\n  // While descending, also retain the deepest parent with a non-removed sibling.\n  if (node.length) while (true) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n    if (!node.length) break;\n    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n  }\n\n  // Find the point to remove.\n  while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n  if (next = node.next) delete node.next;\n\n  // If there are multiple coincident points, remove just the point.\n  if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n  // If this is the root point, remove it.\n  if (!parent) return this._root = next, this;\n\n  // Remove this leaf.\n  next ? parent[i] = next : delete parent[i];\n\n  // If the parent now contains exactly one leaf, collapse superfluous parents.\n  if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n      && node === (parent[3] || parent[2] || parent[1] || parent[0])\n      && !node.length) {\n    if (retainer) retainer[j] = node;\n    else this._root = node;\n  }\n\n  return this;\n}\n\nfunction removeAll(data) {\n  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n  return this;\n}\n\nfunction tree_root() {\n  return this._root;\n}\n\nfunction tree_size() {\n  var size = 0;\n  this.visit(function(node) {\n    if (!node.length) do ++size; while (node = node.next)\n  });\n  return size;\n}\n\nfunction tree_visit(callback) {\n  var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n    }\n  }\n  return this;\n}\n\nfunction tree_visitAfter(callback) {\n  var quads = [], next = [], q;\n  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    var node = q.node;\n    if (node.length) {\n      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n    }\n    next.push(q);\n  }\n  while (q = next.pop()) {\n    callback(q.node, q.x0, q.y0, q.x1, q.y1);\n  }\n  return this;\n}\n\nfunction defaultX$1(d) {\n  return d[0];\n}\n\nfunction tree_x(_) {\n  return arguments.length ? (this._x = _, this) : this._x;\n}\n\nfunction defaultY$1(d) {\n  return d[1];\n}\n\nfunction tree_y(_) {\n  return arguments.length ? (this._y = _, this) : this._y;\n}\n\nfunction quadtree(nodes, x, y) {\n  var tree = new Quadtree(x == null ? defaultX$1 : x, y == null ? defaultY$1 : y, NaN, NaN, NaN, NaN);\n  return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n  this._x = x;\n  this._y = y;\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n  var copy = {data: leaf.data}, next = copy;\n  while (leaf = leaf.next) next = next.next = {data: leaf.data};\n  return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n      node = this._root,\n      nodes,\n      child;\n\n  if (!node) return copy;\n\n  if (!node.length) return copy._root = leaf_copy(node), copy;\n\n  nodes = [{source: node, target: copy._root = new Array(4)}];\n  while (node = nodes.pop()) {\n    for (var i = 0; i < 4; ++i) {\n      if (child = node.source[i]) {\n        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n        else node.target[i] = leaf_copy(child);\n      }\n    }\n  }\n\n  return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n\nfunction x(d) {\n  return d.x + d.vx;\n}\n\nfunction y(d) {\n  return d.y + d.vy;\n}\n\nfunction collide(radius) {\n  var nodes,\n      radii,\n      strength = 1,\n      iterations = 1;\n\n  if (typeof radius !== \"function\") radius = constant$7(radius == null ? 1 : +radius);\n\n  function force() {\n    var i, n = nodes.length,\n        tree,\n        node,\n        xi,\n        yi,\n        ri,\n        ri2;\n\n    for (var k = 0; k < iterations; ++k) {\n      tree = quadtree(nodes, x, y).visitAfter(prepare);\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        ri = radii[node.index], ri2 = ri * ri;\n        xi = node.x + node.vx;\n        yi = node.y + node.vy;\n        tree.visit(apply);\n      }\n    }\n\n    function apply(quad, x0, y0, x1, y1) {\n      var data = quad.data, rj = quad.r, r = ri + rj;\n      if (data) {\n        if (data.index > node.index) {\n          var x = xi - data.x - data.vx,\n              y = yi - data.y - data.vy,\n              l = x * x + y * y;\n          if (l < r * r) {\n            if (x === 0) x = jiggle(), l += x * x;\n            if (y === 0) y = jiggle(), l += y * y;\n            l = (r - (l = Math.sqrt(l))) / l * strength;\n            node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n            node.vy += (y *= l) * r;\n            data.vx -= x * (r = 1 - r);\n            data.vy -= y * r;\n          }\n        }\n        return;\n      }\n      return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n    }\n  }\n\n  function prepare(quad) {\n    if (quad.data) return quad.r = radii[quad.data.index];\n    for (var i = quad.r = 0; i < 4; ++i) {\n      if (quad[i] && quad[i].r > quad.r) {\n        quad.r = quad[i].r;\n      }\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length, node;\n    radii = new Array(n);\n    for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.iterations = function(_) {\n    return arguments.length ? (iterations = +_, force) : iterations;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = +_, force) : strength;\n  };\n\n  force.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : radius;\n  };\n\n  return force;\n}\n\nfunction index(d) {\n  return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n  var node = nodeById.get(nodeId);\n  if (!node) throw new Error(\"missing: \" + nodeId);\n  return node;\n}\n\nfunction link(links) {\n  var id = index,\n      strength = defaultStrength,\n      strengths,\n      distance = constant$7(30),\n      distances,\n      nodes,\n      count,\n      bias,\n      iterations = 1;\n\n  if (links == null) links = [];\n\n  function defaultStrength(link) {\n    return 1 / Math.min(count[link.source.index], count[link.target.index]);\n  }\n\n  function force(alpha) {\n    for (var k = 0, n = links.length; k < iterations; ++k) {\n      for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n        link = links[i], source = link.source, target = link.target;\n        x = target.x + target.vx - source.x - source.vx || jiggle();\n        y = target.y + target.vy - source.y - source.vy || jiggle();\n        l = Math.sqrt(x * x + y * y);\n        l = (l - distances[i]) / l * alpha * strengths[i];\n        x *= l, y *= l;\n        target.vx -= x * (b = bias[i]);\n        target.vy -= y * b;\n        source.vx += x * (b = 1 - b);\n        source.vy += y * b;\n      }\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n\n    var i,\n        n = nodes.length,\n        m = links.length,\n        nodeById = map$1(nodes, id),\n        link;\n\n    for (i = 0, count = new Array(n); i < m; ++i) {\n      link = links[i], link.index = i;\n      if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n      if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n      count[link.source.index] = (count[link.source.index] || 0) + 1;\n      count[link.target.index] = (count[link.target.index] || 0) + 1;\n    }\n\n    for (i = 0, bias = new Array(m); i < m; ++i) {\n      link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n    }\n\n    strengths = new Array(m), initializeStrength();\n    distances = new Array(m), initializeDistance();\n  }\n\n  function initializeStrength() {\n    if (!nodes) return;\n\n    for (var i = 0, n = links.length; i < n; ++i) {\n      strengths[i] = +strength(links[i], i, links);\n    }\n  }\n\n  function initializeDistance() {\n    if (!nodes) return;\n\n    for (var i = 0, n = links.length; i < n; ++i) {\n      distances[i] = +distance(links[i], i, links);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.links = function(_) {\n    return arguments.length ? (links = _, initialize(), force) : links;\n  };\n\n  force.id = function(_) {\n    return arguments.length ? (id = _, force) : id;\n  };\n\n  force.iterations = function(_) {\n    return arguments.length ? (iterations = +_, force) : iterations;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$7(+_), initializeStrength(), force) : strength;\n  };\n\n  force.distance = function(_) {\n    return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant$7(+_), initializeDistance(), force) : distance;\n  };\n\n  return force;\n}\n\nfunction x$1(d) {\n  return d.x;\n}\n\nfunction y$1(d) {\n  return d.y;\n}\n\nvar initialRadius = 10,\n    initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nfunction simulation(nodes) {\n  var simulation,\n      alpha = 1,\n      alphaMin = 0.001,\n      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n      alphaTarget = 0,\n      velocityDecay = 0.6,\n      forces = map$1(),\n      stepper = timer(step),\n      event = dispatch(\"tick\", \"end\");\n\n  if (nodes == null) nodes = [];\n\n  function step() {\n    tick();\n    event.call(\"tick\", simulation);\n    if (alpha < alphaMin) {\n      stepper.stop();\n      event.call(\"end\", simulation);\n    }\n  }\n\n  function tick(iterations) {\n    var i, n = nodes.length, node;\n\n    if (iterations === undefined) iterations = 1;\n\n    for (var k = 0; k < iterations; ++k) {\n      alpha += (alphaTarget - alpha) * alphaDecay;\n\n      forces.each(function (force) {\n        force(alpha);\n      });\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        if (node.fx == null) node.x += node.vx *= velocityDecay;\n        else node.x = node.fx, node.vx = 0;\n        if (node.fy == null) node.y += node.vy *= velocityDecay;\n        else node.y = node.fy, node.vy = 0;\n      }\n    }\n\n    return simulation;\n  }\n\n  function initializeNodes() {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.index = i;\n      if (!isNaN(node.fx)) node.x = node.fx;\n      if (!isNaN(node.fy)) node.y = node.fy;\n      if (isNaN(node.x) || isNaN(node.y)) {\n        var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n        node.x = radius * Math.cos(angle);\n        node.y = radius * Math.sin(angle);\n      }\n      if (isNaN(node.vx) || isNaN(node.vy)) {\n        node.vx = node.vy = 0;\n      }\n    }\n  }\n\n  function initializeForce(force) {\n    if (force.initialize) force.initialize(nodes);\n    return force;\n  }\n\n  initializeNodes();\n\n  return simulation = {\n    tick: tick,\n\n    restart: function() {\n      return stepper.restart(step), simulation;\n    },\n\n    stop: function() {\n      return stepper.stop(), simulation;\n    },\n\n    nodes: function(_) {\n      return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;\n    },\n\n    alpha: function(_) {\n      return arguments.length ? (alpha = +_, simulation) : alpha;\n    },\n\n    alphaMin: function(_) {\n      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n    },\n\n    alphaDecay: function(_) {\n      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n    },\n\n    alphaTarget: function(_) {\n      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n    },\n\n    velocityDecay: function(_) {\n      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n    },\n\n    force: function(name, _) {\n      return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n    },\n\n    find: function(x, y, radius) {\n      var i = 0,\n          n = nodes.length,\n          dx,\n          dy,\n          d2,\n          node,\n          closest;\n\n      if (radius == null) radius = Infinity;\n      else radius *= radius;\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        dx = x - node.x;\n        dy = y - node.y;\n        d2 = dx * dx + dy * dy;\n        if (d2 < radius) closest = node, radius = d2;\n      }\n\n      return closest;\n    },\n\n    on: function(name, _) {\n      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n    }\n  };\n}\n\nfunction manyBody() {\n  var nodes,\n      node,\n      alpha,\n      strength = constant$7(-30),\n      strengths,\n      distanceMin2 = 1,\n      distanceMax2 = Infinity,\n      theta2 = 0.81;\n\n  function force(_) {\n    var i, n = nodes.length, tree = quadtree(nodes, x$1, y$1).visitAfter(accumulate);\n    for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length, node;\n    strengths = new Array(n);\n    for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n  }\n\n  function accumulate(quad) {\n    var strength = 0, q, c, weight = 0, x, y, i;\n\n    // For internal nodes, accumulate forces from child quadrants.\n    if (quad.length) {\n      for (x = y = i = 0; i < 4; ++i) {\n        if ((q = quad[i]) && (c = Math.abs(q.value))) {\n          strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n        }\n      }\n      quad.x = x / weight;\n      quad.y = y / weight;\n    }\n\n    // For leaf nodes, accumulate forces from coincident quadrants.\n    else {\n      q = quad;\n      q.x = q.data.x;\n      q.y = q.data.y;\n      do strength += strengths[q.data.index];\n      while (q = q.next);\n    }\n\n    quad.value = strength;\n  }\n\n  function apply(quad, x1, _, x2) {\n    if (!quad.value) return true;\n\n    var x = quad.x - node.x,\n        y = quad.y - node.y,\n        w = x2 - x1,\n        l = x * x + y * y;\n\n    // Apply the Barnes-Hut approximation if possible.\n    // Limit forces for very close nodes; randomize direction if coincident.\n    if (w * w / theta2 < l) {\n      if (l < distanceMax2) {\n        if (x === 0) x = jiggle(), l += x * x;\n        if (y === 0) y = jiggle(), l += y * y;\n        if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n        node.vx += x * quad.value * alpha / l;\n        node.vy += y * quad.value * alpha / l;\n      }\n      return true;\n    }\n\n    // Otherwise, process points directly.\n    else if (quad.length || l >= distanceMax2) return;\n\n    // Limit forces for very close nodes; randomize direction if coincident.\n    if (quad.data !== node || quad.next) {\n      if (x === 0) x = jiggle(), l += x * x;\n      if (y === 0) y = jiggle(), l += y * y;\n      if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n    }\n\n    do if (quad.data !== node) {\n      w = strengths[quad.data.index] * alpha / l;\n      node.vx += x * w;\n      node.vy += y * w;\n    } while (quad = quad.next);\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : strength;\n  };\n\n  force.distanceMin = function(_) {\n    return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n  };\n\n  force.distanceMax = function(_) {\n    return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n  };\n\n  force.theta = function(_) {\n    return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n  };\n\n  return force;\n}\n\nfunction radial(radius, x, y) {\n  var nodes,\n      strength = constant$7(0.1),\n      strengths,\n      radiuses;\n\n  if (typeof radius !== \"function\") radius = constant$7(+radius);\n  if (x == null) x = 0;\n  if (y == null) y = 0;\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length; i < n; ++i) {\n      var node = nodes[i],\n          dx = node.x - x || 1e-6,\n          dy = node.y - y || 1e-6,\n          r = Math.sqrt(dx * dx + dy * dy),\n          k = (radiuses[i] - r) * strengths[i] * alpha / r;\n      node.vx += dx * k;\n      node.vy += dy * k;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    radiuses = new Array(n);\n    for (i = 0; i < n; ++i) {\n      radiuses[i] = +radius(nodes[i], i, nodes);\n      strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _, initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : strength;\n  };\n\n  force.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : radius;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = +_, force) : x;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = +_, force) : y;\n  };\n\n  return force;\n}\n\nfunction x$2(x) {\n  var strength = constant$7(0.1),\n      nodes,\n      strengths,\n      xz;\n\n  if (typeof x !== \"function\") x = constant$7(x == null ? 0 : +x);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    xz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : strength;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : x;\n  };\n\n  return force;\n}\n\nfunction y$2(y) {\n  var strength = constant$7(0.1),\n      nodes,\n      strengths,\n      yz;\n\n  if (typeof y !== \"function\") y = constant$7(y == null ? 0 : +y);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    yz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : strength;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant$7(+_), initialize(), force) : y;\n  };\n\n  return force;\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nfunction formatDecimal(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n\nfunction exponent$1(x) {\n  return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n\nfunction formatGroup(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n\nfunction formatNumerals(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n\n// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nfunction formatSpecifier(specifier) {\n  return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  this.fill = match[1] || \" \";\n  this.align = match[2] || \">\";\n  this.sign = match[3] || \"-\";\n  this.symbol = match[4] || \"\";\n  this.zero = !!match[5];\n  this.width = match[6] && +match[6];\n  this.comma = !!match[7];\n  this.precision = match[8] && +match[8].slice(1);\n  this.trim = !!match[9];\n  this.type = match[10] || \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n\n// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nfunction formatTrim(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n\nvar prefixExponent;\n\nfunction formatPrefixAuto(x, p) {\n  var d = formatDecimal(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n\nfunction formatRounded(x, p) {\n  var d = formatDecimal(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n\nvar formatTypes = {\n  \"%\": function(x, p) { return (x * 100).toFixed(p); },\n  \"b\": function(x) { return Math.round(x).toString(2); },\n  \"c\": function(x) { return x + \"\"; },\n  \"d\": function(x) { return Math.round(x).toString(10); },\n  \"e\": function(x, p) { return x.toExponential(p); },\n  \"f\": function(x, p) { return x.toFixed(p); },\n  \"g\": function(x, p) { return x.toPrecision(p); },\n  \"o\": function(x) { return Math.round(x).toString(8); },\n  \"p\": function(x, p) { return formatRounded(x * 100, p); },\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n  \"x\": function(x) { return Math.round(x).toString(16); }\n};\n\nfunction identity$3(x) {\n  return x;\n}\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\\xB5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nfunction formatLocale(locale) {\n  var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3,\n      currency = locale.currency,\n      decimal = locale.decimal,\n      numerals = locale.numerals ? formatNumerals(locale.numerals) : identity$3,\n      percent = locale.percent || \"%\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision == null ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Perform the initial formatting.\n        var valueNegative = value < 0;\n        value = formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero during formatting, treat as positive.\n        if (valueNegative && +value === 0) valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n\nvar locale;\n\ndefaultLocale({\n  decimal: \".\",\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nfunction defaultLocale(definition) {\n  locale = formatLocale(definition);\n  exports.format = locale.format;\n  exports.formatPrefix = locale.formatPrefix;\n  return locale;\n}\n\nfunction precisionFixed(step) {\n  return Math.max(0, -exponent$1(Math.abs(step)));\n}\n\nfunction precisionPrefix(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));\n}\n\nfunction precisionRound(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;\n}\n\n// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nfunction adder() {\n  return new Adder;\n}\n\nfunction Adder() {\n  this.reset();\n}\n\nAdder.prototype = {\n  constructor: Adder,\n  reset: function() {\n    this.s = // rounded value\n    this.t = 0; // exact error\n  },\n  add: function(y) {\n    add$1(temp, y, this.t);\n    add$1(this, temp.s, this.s);\n    if (this.s) this.t += temp.t;\n    else this.s = temp.t;\n  },\n  valueOf: function() {\n    return this.s;\n  }\n};\n\nvar temp = new Adder;\n\nfunction add$1(adder, a, b) {\n  var x = adder.s = a + b,\n      bv = x - a,\n      av = x - bv;\n  adder.t = (a - av) + (b - bv);\n}\n\nvar epsilon$2 = 1e-6;\nvar epsilon2$1 = 1e-12;\nvar pi$3 = Math.PI;\nvar halfPi$2 = pi$3 / 2;\nvar quarterPi = pi$3 / 4;\nvar tau$3 = pi$3 * 2;\n\nvar degrees$1 = 180 / pi$3;\nvar radians = pi$3 / 180;\n\nvar abs = Math.abs;\nvar atan = Math.atan;\nvar atan2 = Math.atan2;\nvar cos$1 = Math.cos;\nvar ceil = Math.ceil;\nvar exp = Math.exp;\nvar log = Math.log;\nvar pow = Math.pow;\nvar sin$1 = Math.sin;\nvar sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nvar sqrt = Math.sqrt;\nvar tan = Math.tan;\n\nfunction acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi$3 : Math.acos(x);\n}\n\nfunction asin(x) {\n  return x > 1 ? halfPi$2 : x < -1 ? -halfPi$2 : Math.asin(x);\n}\n\nfunction haversin(x) {\n  return (x = sin$1(x / 2)) * x;\n}\n\nfunction noop$2() {}\n\nfunction streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nfunction geoStream(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n\nvar areaRingSum = adder();\n\nvar areaSum = adder(),\n    lambda00,\n    phi00,\n    lambda0,\n    cosPhi0,\n    sinPhi0;\n\nvar areaStream = {\n  point: noop$2,\n  lineStart: noop$2,\n  lineEnd: noop$2,\n  polygonStart: function() {\n    areaRingSum.reset();\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    var areaRing = +areaRingSum;\n    areaSum.add(areaRing < 0 ? tau$3 + areaRing : areaRing);\n    this.lineStart = this.lineEnd = this.point = noop$2;\n  },\n  sphere: function() {\n    areaSum.add(tau$3);\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n  areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n  areaStream.point = areaPoint;\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n  // Spherical excess E for a spherical triangle with vertices: south pole,\n  // previous point, current point.  Uses a formula derived from Cagnoli’s\n  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n  var dLambda = lambda - lambda0,\n      sdLambda = dLambda >= 0 ? 1 : -1,\n      adLambda = sdLambda * dLambda,\n      cosPhi = cos$1(phi),\n      sinPhi = sin$1(phi),\n      k = sinPhi0 * sinPhi,\n      u = cosPhi0 * cosPhi + k * cos$1(adLambda),\n      v = k * sdLambda * sin$1(adLambda);\n  areaRingSum.add(atan2(v, u));\n\n  // Advance the previous points.\n  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nfunction area$1(object) {\n  areaSum.reset();\n  geoStream(object, areaStream);\n  return areaSum * 2;\n}\n\nfunction spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nfunction cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);\n  return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];\n}\n\nfunction cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nfunction cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nfunction cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nfunction cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nfunction cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n\nvar lambda0$1, phi0, lambda1, phi1, // bounds\n    lambda2, // previous lambda-coordinate\n    lambda00$1, phi00$1, // first point\n    p0, // previous 3D point\n    deltaSum = adder(),\n    ranges,\n    range;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: boundsLineStart,\n  lineEnd: boundsLineEnd,\n  polygonStart: function() {\n    boundsStream.point = boundsRingPoint;\n    boundsStream.lineStart = boundsRingStart;\n    boundsStream.lineEnd = boundsRingEnd;\n    deltaSum.reset();\n    areaStream.polygonStart();\n  },\n  polygonEnd: function() {\n    areaStream.polygonEnd();\n    boundsStream.point = boundsPoint;\n    boundsStream.lineStart = boundsLineStart;\n    boundsStream.lineEnd = boundsLineEnd;\n    if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n    else if (deltaSum > epsilon$2) phi1 = 90;\n    else if (deltaSum < -epsilon$2) phi0 = -90;\n    range[0] = lambda0$1, range[1] = lambda1;\n  }\n};\n\nfunction boundsPoint(lambda, phi) {\n  ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n  var p = cartesian([lambda * radians, phi * radians]);\n  if (p0) {\n    var normal = cartesianCross(p0, p),\n        equatorial = [normal[1], -normal[0], 0],\n        inflection = cartesianCross(equatorial, normal);\n    cartesianNormalizeInPlace(inflection);\n    inflection = spherical(inflection);\n    var delta = lambda - lambda2,\n        sign$$1 = delta > 0 ? 1 : -1,\n        lambdai = inflection[0] * degrees$1 * sign$$1,\n        phii,\n        antimeridian = abs(delta) > 180;\n    if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {\n      phii = inflection[1] * degrees$1;\n      if (phii > phi1) phi1 = phii;\n    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {\n      phii = -inflection[1] * degrees$1;\n      if (phii < phi0) phi0 = phii;\n    } else {\n      if (phi < phi0) phi0 = phi;\n      if (phi > phi1) phi1 = phi;\n    }\n    if (antimeridian) {\n      if (lambda < lambda2) {\n        if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n      } else {\n        if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n      }\n    } else {\n      if (lambda1 >= lambda0$1) {\n        if (lambda < lambda0$1) lambda0$1 = lambda;\n        if (lambda > lambda1) lambda1 = lambda;\n      } else {\n        if (lambda > lambda2) {\n          if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n        } else {\n          if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n        }\n      }\n    }\n  } else {\n    ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);\n  }\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n  p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n  boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n  range[0] = lambda0$1, range[1] = lambda1;\n  boundsStream.point = boundsPoint;\n  p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n  if (p0) {\n    var delta = lambda - lambda2;\n    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n  } else {\n    lambda00$1 = lambda, phi00$1 = phi;\n  }\n  areaStream.point(lambda, phi);\n  linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n  areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n  boundsRingPoint(lambda00$1, phi00$1);\n  areaStream.lineEnd();\n  if (abs(deltaSum) > epsilon$2) lambda0$1 = -(lambda1 = 180);\n  range[0] = lambda0$1, range[1] = lambda1;\n  p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n  return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nfunction bounds(feature) {\n  var i, n, a, b, merged, deltaMax, delta;\n\n  phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);\n  ranges = [];\n  geoStream(feature, boundsStream);\n\n  // First, sort ranges by their minimum longitudes.\n  if (n = ranges.length) {\n    ranges.sort(rangeCompare);\n\n    // Then, merge any ranges that overlap.\n    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n      b = ranges[i];\n      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n      } else {\n        merged.push(a = b);\n      }\n    }\n\n    // Finally, find the largest gap between the merged ranges.\n    // The final bounding box will be the inverse of this gap.\n    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n      b = merged[i];\n      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];\n    }\n  }\n\n  ranges = range = null;\n\n  return lambda0$1 === Infinity || phi0 === Infinity\n      ? [[NaN, NaN], [NaN, NaN]]\n      : [[lambda0$1, phi0], [lambda1, phi1]];\n}\n\nvar W0, W1,\n    X0, Y0, Z0,\n    X1, Y1, Z1,\n    X2, Y2, Z2,\n    lambda00$2, phi00$2, // first point\n    x0, y0, z0; // previous point\n\nvar centroidStream = {\n  sphere: noop$2,\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos$1(phi);\n  centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n  ++W0;\n  X0 += (x - X0) / W0;\n  Y0 += (y - Y0) / W0;\n  Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos$1(phi);\n  x0 = cosPhi * cos$1(lambda);\n  y0 = cosPhi * sin$1(lambda);\n  z0 = sin$1(phi);\n  centroidStream.point = centroidLinePoint;\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos$1(phi),\n      x = cosPhi * cos$1(lambda),\n      y = cosPhi * sin$1(lambda),\n      z = sin$1(phi),\n      w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n  centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n  centroidRingPoint(lambda00$2, phi00$2);\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n  lambda00$2 = lambda, phi00$2 = phi;\n  lambda *= radians, phi *= radians;\n  centroidStream.point = centroidRingPoint;\n  var cosPhi = cos$1(phi);\n  x0 = cosPhi * cos$1(lambda);\n  y0 = cosPhi * sin$1(lambda);\n  z0 = sin$1(phi);\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos$1(phi),\n      x = cosPhi * cos$1(lambda),\n      y = cosPhi * sin$1(lambda),\n      z = sin$1(phi),\n      cx = y0 * z - z0 * y,\n      cy = z0 * x - x0 * z,\n      cz = x0 * y - y0 * x,\n      m = sqrt(cx * cx + cy * cy + cz * cz),\n      w = asin(m), // line weight = angle\n      v = m && -w / m; // area weight multiplier\n  X2 += v * cx;\n  Y2 += v * cy;\n  Z2 += v * cz;\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroid(object) {\n  W0 = W1 =\n  X0 = Y0 = Z0 =\n  X1 = Y1 = Z1 =\n  X2 = Y2 = Z2 = 0;\n  geoStream(object, centroidStream);\n\n  var x = X2,\n      y = Y2,\n      z = Z2,\n      m = x * x + y * y + z * z;\n\n  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n  if (m < epsilon2$1) {\n    x = X1, y = Y1, z = Z1;\n    // If the feature has zero length, fall back to arithmetic mean of point vectors.\n    if (W1 < epsilon$2) x = X0, y = Y0, z = Z0;\n    m = x * x + y * y + z * z;\n    // If the feature still has an undefined ccentroid, then return.\n    if (m < epsilon2$1) return [NaN, NaN];\n  }\n\n  return [atan2(y, x) * degrees$1, asin(z / sqrt(m)) * degrees$1];\n}\n\nfunction constant$8(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction compose(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n\nfunction rotationIdentity(lambda, phi) {\n  return [abs(lambda) > pi$3 ? lambda + Math.round(-lambda / tau$3) * tau$3 : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nfunction rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau$3) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    return lambda += deltaLambda, [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos$1(deltaPhi),\n      sinDeltaPhi = sin$1(deltaPhi),\n      cosDeltaGamma = cos$1(deltaGamma),\n      sinDeltaGamma = sin$1(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos$1(phi),\n        x = cos$1(lambda) * cosPhi,\n        y = sin$1(lambda) * cosPhi,\n        z = sin$1(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos$1(phi),\n        x = cos$1(lambda) * cosPhi,\n        y = sin$1(lambda) * cosPhi,\n        z = sin$1(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nfunction rotation(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;\n  };\n\n  return forward;\n}\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nfunction circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos$1(radius),\n      sinRadius = sin$1(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau$3;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$3;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau$3 - epsilon$2) % tau$3;\n}\n\nfunction circle() {\n  var center = constant$8([0, 0]),\n      radius = constant$8(90),\n      precision = constant$8(6),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees$1, x[1] *= degrees$1;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant$8([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$8(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant$8(+_), circle) : precision;\n  };\n\n  return circle;\n}\n\nfunction clipBuffer() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y) {\n      line.push([x, y]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop$2,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n\nfunction pointEqual(a, b) {\n  return abs(a[0] - b[0]) < epsilon$2 && abs(a[1] - b[1]) < epsilon$2;\n}\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nfunction clipRejoin(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    // If the first and last points of a segment are coincident, then treat as a\n    // closed ring. TODO if all rings are closed, then the winding order of the\n    // exterior ring should be checked.\n    if (pointEqual(p0, p1)) {\n      stream.lineStart();\n      for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n      stream.lineEnd();\n      return;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link$1(subject);\n  link$1(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link$1(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n\nvar sum$1 = adder();\n\nfunction polygonContains(polygon, point) {\n  var lambda = point[0],\n      phi = point[1],\n      sinPhi = sin$1(phi),\n      normal = [sin$1(lambda), -cos$1(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  sum$1.reset();\n\n  if (sinPhi === 1) phi = halfPi$2 + epsilon$2;\n  else if (sinPhi === -1) phi = -halfPi$2 - epsilon$2;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = point0[0],\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin$1(phi0),\n        cosPhi0 = cos$1(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = point1[0],\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin$1(phi1),\n          cosPhi1 = cos$1(phi1),\n          delta = lambda1 - lambda0,\n          sign$$1 = delta >= 0 ? 1 : -1,\n          absDelta = sign$$1 * delta,\n          antimeridian = absDelta > pi$3,\n          k = sinPhi0 * sinPhi1;\n\n      sum$1.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));\n      angle += antimeridian ? delta + sign$$1 * tau$3 : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1);\n}\n\nfunction clip(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi$2 - epsilon$2 : halfPi$2 - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi$2 - epsilon$2 : halfPi$2 - b[1]);\n}\n\nvar clipAntimeridian = clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi$3, -halfPi$2]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi$3 : -pi$3,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi$3) < epsilon$2) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$2 : -halfPi$2);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi$3) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon$2) lambda0 -= sign0 * epsilon$2; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon$2) lambda1 -= sign1 * epsilon$2;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin$1(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon$2\n      ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)\n          - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi$2;\n    stream.point(-pi$3, phi);\n    stream.point(0, phi);\n    stream.point(pi$3, phi);\n    stream.point(pi$3, 0);\n    stream.point(pi$3, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi$3, -phi);\n    stream.point(-pi$3, 0);\n    stream.point(-pi$3, phi);\n  } else if (abs(from[0] - to[0]) > epsilon$2) {\n    var lambda = from[0] < to[0] ? pi$3 : -pi$3;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n\nfunction clipCircle(radius) {\n  var cr = cos$1(radius),\n      delta = 6 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon$2; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos$1(lambda) * cos$1(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi$3 : -pi$3), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        // Handle degeneracies.\n        // TODO ignore if not clipping polygons.\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n            point1[0] += epsilon$2;\n            point1[1] += epsilon$2;\n            v = visible(point1[0], point1[1]);\n          }\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1]);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi$3) < epsilon$2,\n        meridian = polar || delta < epsilon$2;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$2 ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi$3 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi$3 - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$3, radius - pi$3]);\n}\n\nfunction clipLine(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nfunction clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n\nfunction extent$1() {\n  var x0 = 0,\n      y0 = 0,\n      x1 = 960,\n      y1 = 500,\n      cache,\n      cacheStream,\n      clip;\n\n  return clip = {\n    stream: function(stream) {\n      return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);\n    },\n    extent: function(_) {\n      return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n    }\n  };\n}\n\nvar lengthSum = adder(),\n    lambda0$2,\n    sinPhi0$1,\n    cosPhi0$1;\n\nvar lengthStream = {\n  sphere: noop$2,\n  point: noop$2,\n  lineStart: lengthLineStart,\n  lineEnd: noop$2,\n  polygonStart: noop$2,\n  polygonEnd: noop$2\n};\n\nfunction lengthLineStart() {\n  lengthStream.point = lengthPointFirst;\n  lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n  lengthStream.point = lengthStream.lineEnd = noop$2;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);\n  lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var sinPhi = sin$1(phi),\n      cosPhi = cos$1(phi),\n      delta = abs(lambda - lambda0$2),\n      cosDelta = cos$1(delta),\n      sinDelta = sin$1(delta),\n      x = cosPhi * sinDelta,\n      y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,\n      z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;\n  lengthSum.add(atan2(sqrt(x * x + y * y), z));\n  lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;\n}\n\nfunction length$1(object) {\n  lengthSum.reset();\n  geoStream(object, lengthStream);\n  return +lengthSum;\n}\n\nvar coordinates = [null, null],\n    object$1 = {type: \"LineString\", coordinates: coordinates};\n\nfunction distance(a, b) {\n  coordinates[0] = a;\n  coordinates[1] = b;\n  return length$1(object$1);\n}\n\nvar containsObjectType = {\n  Feature: function(object, point) {\n    return containsGeometry(object.geometry, point);\n  },\n  FeatureCollection: function(object, point) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\n    return false;\n  }\n};\n\nvar containsGeometryType = {\n  Sphere: function() {\n    return true;\n  },\n  Point: function(object, point) {\n    return containsPoint(object.coordinates, point);\n  },\n  MultiPoint: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n    return false;\n  },\n  LineString: function(object, point) {\n    return containsLine(object.coordinates, point);\n  },\n  MultiLineString: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsLine(coordinates[i], point)) return true;\n    return false;\n  },\n  Polygon: function(object, point) {\n    return containsPolygon(object.coordinates, point);\n  },\n  MultiPolygon: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n    return false;\n  },\n  GeometryCollection: function(object, point) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n    return false;\n  }\n};\n\nfunction containsGeometry(geometry, point) {\n  return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n      ? containsGeometryType[geometry.type](geometry, point)\n      : false;\n}\n\nfunction containsPoint(coordinates, point) {\n  return distance(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n  var ab = distance(coordinates[0], coordinates[1]),\n      ao = distance(coordinates[0], point),\n      ob = distance(point, coordinates[1]);\n  return ao + ob <= ab + epsilon$2;\n}\n\nfunction containsPolygon(coordinates, point) {\n  return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n  return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n  return [point[0] * radians, point[1] * radians];\n}\n\nfunction contains$1(object, point) {\n  return (object && containsObjectType.hasOwnProperty(object.type)\n      ? containsObjectType[object.type]\n      : containsGeometry)(object, point);\n}\n\nfunction graticuleX(y0, y1, dy) {\n  var y = sequence(y0, y1 - epsilon$2, dy).concat(y1);\n  return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n  var x = sequence(x0, x1 - epsilon$2, dx).concat(x1);\n  return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nfunction graticule() {\n  var x1, x0, X1, X0,\n      y1, y0, Y1, Y0,\n      dx = 10, dy = dx, DX = 90, DY = 360,\n      x, y, X, Y,\n      precision = 2.5;\n\n  function graticule() {\n    return {type: \"MultiLineString\", coordinates: lines()};\n  }\n\n  function lines() {\n    return sequence(ceil(X0 / DX) * DX, X1, DX).map(X)\n        .concat(sequence(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n        .concat(sequence(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$2; }).map(x))\n        .concat(sequence(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$2; }).map(y));\n  }\n\n  graticule.lines = function() {\n    return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n  };\n\n  graticule.outline = function() {\n    return {\n      type: \"Polygon\",\n      coordinates: [\n        X(X0).concat(\n        Y(Y1).slice(1),\n        X(X1).reverse().slice(1),\n        Y(Y0).reverse().slice(1))\n      ]\n    };\n  };\n\n  graticule.extent = function(_) {\n    if (!arguments.length) return graticule.extentMinor();\n    return graticule.extentMajor(_).extentMinor(_);\n  };\n\n  graticule.extentMajor = function(_) {\n    if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n    X0 = +_[0][0], X1 = +_[1][0];\n    Y0 = +_[0][1], Y1 = +_[1][1];\n    if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n    if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.extentMinor = function(_) {\n    if (!arguments.length) return [[x0, y0], [x1, y1]];\n    x0 = +_[0][0], x1 = +_[1][0];\n    y0 = +_[0][1], y1 = +_[1][1];\n    if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n    if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.step = function(_) {\n    if (!arguments.length) return graticule.stepMinor();\n    return graticule.stepMajor(_).stepMinor(_);\n  };\n\n  graticule.stepMajor = function(_) {\n    if (!arguments.length) return [DX, DY];\n    DX = +_[0], DY = +_[1];\n    return graticule;\n  };\n\n  graticule.stepMinor = function(_) {\n    if (!arguments.length) return [dx, dy];\n    dx = +_[0], dy = +_[1];\n    return graticule;\n  };\n\n  graticule.precision = function(_) {\n    if (!arguments.length) return precision;\n    precision = +_;\n    x = graticuleX(y0, y1, 90);\n    y = graticuleY(x0, x1, precision);\n    X = graticuleX(Y0, Y1, 90);\n    Y = graticuleY(X0, X1, precision);\n    return graticule;\n  };\n\n  return graticule\n      .extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]])\n      .extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]);\n}\n\nfunction graticule10() {\n  return graticule()();\n}\n\nfunction interpolate$1(a, b) {\n  var x0 = a[0] * radians,\n      y0 = a[1] * radians,\n      x1 = b[0] * radians,\n      y1 = b[1] * radians,\n      cy0 = cos$1(y0),\n      sy0 = sin$1(y0),\n      cy1 = cos$1(y1),\n      sy1 = sin$1(y1),\n      kx0 = cy0 * cos$1(x0),\n      ky0 = cy0 * sin$1(x0),\n      kx1 = cy1 * cos$1(x1),\n      ky1 = cy1 * sin$1(x1),\n      d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n      k = sin$1(d);\n\n  var interpolate = d ? function(t) {\n    var B = sin$1(t *= d) / k,\n        A = sin$1(d - t) / k,\n        x = A * kx0 + B * kx1,\n        y = A * ky0 + B * ky1,\n        z = A * sy0 + B * sy1;\n    return [\n      atan2(y, x) * degrees$1,\n      atan2(z, sqrt(x * x + y * y)) * degrees$1\n    ];\n  } : function() {\n    return [x0 * degrees$1, y0 * degrees$1];\n  };\n\n  interpolate.distance = d;\n\n  return interpolate;\n}\n\nfunction identity$4(x) {\n  return x;\n}\n\nvar areaSum$1 = adder(),\n    areaRingSum$1 = adder(),\n    x00,\n    y00,\n    x0$1,\n    y0$1;\n\nvar areaStream$1 = {\n  point: noop$2,\n  lineStart: noop$2,\n  lineEnd: noop$2,\n  polygonStart: function() {\n    areaStream$1.lineStart = areaRingStart$1;\n    areaStream$1.lineEnd = areaRingEnd$1;\n  },\n  polygonEnd: function() {\n    areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$2;\n    areaSum$1.add(abs(areaRingSum$1));\n    areaRingSum$1.reset();\n  },\n  result: function() {\n    var area = areaSum$1 / 2;\n    areaSum$1.reset();\n    return area;\n  }\n};\n\nfunction areaRingStart$1() {\n  areaStream$1.point = areaPointFirst$1;\n}\n\nfunction areaPointFirst$1(x, y) {\n  areaStream$1.point = areaPoint$1;\n  x00 = x0$1 = x, y00 = y0$1 = y;\n}\n\nfunction areaPoint$1(x, y) {\n  areaRingSum$1.add(y0$1 * x - x0$1 * y);\n  x0$1 = x, y0$1 = y;\n}\n\nfunction areaRingEnd$1() {\n  areaPoint$1(x00, y00);\n}\n\nvar x0$2 = Infinity,\n    y0$2 = x0$2,\n    x1 = -x0$2,\n    y1 = x1;\n\nvar boundsStream$1 = {\n  point: boundsPoint$1,\n  lineStart: noop$2,\n  lineEnd: noop$2,\n  polygonStart: noop$2,\n  polygonEnd: noop$2,\n  result: function() {\n    var bounds = [[x0$2, y0$2], [x1, y1]];\n    x1 = y1 = -(y0$2 = x0$2 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint$1(x, y) {\n  if (x < x0$2) x0$2 = x;\n  if (x > x1) x1 = x;\n  if (y < y0$2) y0$2 = y;\n  if (y > y1) y1 = y;\n}\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0$1 = 0,\n    Y0$1 = 0,\n    Z0$1 = 0,\n    X1$1 = 0,\n    Y1$1 = 0,\n    Z1$1 = 0,\n    X2$1 = 0,\n    Y2$1 = 0,\n    Z2$1 = 0,\n    x00$1,\n    y00$1,\n    x0$3,\n    y0$3;\n\nvar centroidStream$1 = {\n  point: centroidPoint$1,\n  lineStart: centroidLineStart$1,\n  lineEnd: centroidLineEnd$1,\n  polygonStart: function() {\n    centroidStream$1.lineStart = centroidRingStart$1;\n    centroidStream$1.lineEnd = centroidRingEnd$1;\n  },\n  polygonEnd: function() {\n    centroidStream$1.point = centroidPoint$1;\n    centroidStream$1.lineStart = centroidLineStart$1;\n    centroidStream$1.lineEnd = centroidLineEnd$1;\n  },\n  result: function() {\n    var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]\n        : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]\n        : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]\n        : [NaN, NaN];\n    X0$1 = Y0$1 = Z0$1 =\n    X1$1 = Y1$1 = Z1$1 =\n    X2$1 = Y2$1 = Z2$1 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint$1(x, y) {\n  X0$1 += x;\n  Y0$1 += y;\n  ++Z0$1;\n}\n\nfunction centroidLineStart$1() {\n  centroidStream$1.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream$1.point = centroidPointLine;\n  centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);\n  X1$1 += z * (x0$3 + x) / 2;\n  Y1$1 += z * (y0$3 + y) / 2;\n  Z1$1 += z;\n  centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction centroidLineEnd$1() {\n  centroidStream$1.point = centroidPoint$1;\n}\n\nfunction centroidRingStart$1() {\n  centroidStream$1.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd$1() {\n  centroidPointRing(x00$1, y00$1);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream$1.point = centroidPointRing;\n  centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0$3,\n      dy = y - y0$3,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1$1 += z * (x0$3 + x) / 2;\n  Y1$1 += z * (y0$3 + y) / 2;\n  Z1$1 += z;\n\n  z = y0$3 * x - x0$3 * y;\n  X2$1 += z * (x0$3 + x);\n  Y2$1 += z * (y0$3 + y);\n  Z2$1 += z * 3;\n  centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau$3);\n        break;\n      }\n    }\n  },\n  result: noop$2\n};\n\nvar lengthSum$1 = adder(),\n    lengthRing,\n    x00$2,\n    y00$2,\n    x0$4,\n    y0$4;\n\nvar lengthStream$1 = {\n  point: noop$2,\n  lineStart: function() {\n    lengthStream$1.point = lengthPointFirst$1;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint$1(x00$2, y00$2);\n    lengthStream$1.point = noop$2;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum$1;\n    lengthSum$1.reset();\n    return length;\n  }\n};\n\nfunction lengthPointFirst$1(x, y) {\n  lengthStream$1.point = lengthPoint$1;\n  x00$2 = x0$4 = x, y00$2 = y0$4 = y;\n}\n\nfunction lengthPoint$1(x, y) {\n  x0$4 -= x, y0$4 -= y;\n  lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));\n  x0$4 = x, y0$4 = y;\n}\n\nfunction PathString() {\n  this._string = [];\n}\n\nPathString.prototype = {\n  _radius: 4.5,\n  _circle: circle$1(4.5),\n  pointRadius: function(_) {\n    if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n    return this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._string.push(\"Z\");\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._string.push(\"M\", x, \",\", y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._string.push(\"L\", x, \",\", y);\n        break;\n      }\n      default: {\n        if (this._circle == null) this._circle = circle$1(this._radius);\n        this._string.push(\"M\", x, \",\", y, this._circle);\n        break;\n      }\n    }\n  },\n  result: function() {\n    if (this._string.length) {\n      var result = this._string.join(\"\");\n      this._string = [];\n      return result;\n    } else {\n      return null;\n    }\n  }\n};\n\nfunction circle$1(radius) {\n  return \"m0,\" + radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n      + \"z\";\n}\n\nfunction index$1(projection, context) {\n  var pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      geoStream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    geoStream(object, projectionStream(areaStream$1));\n    return areaStream$1.result();\n  };\n\n  path.measure = function(object) {\n    geoStream(object, projectionStream(lengthStream$1));\n    return lengthStream$1.result();\n  };\n\n  path.bounds = function(object) {\n    geoStream(object, projectionStream(boundsStream$1));\n    return boundsStream$1.result();\n  };\n\n  path.centroid = function(object) {\n    geoStream(object, projectionStream(centroidStream$1));\n    return centroidStream$1.result();\n  };\n\n  path.projection = function(_) {\n    return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$4) : (projection = _).stream, path) : projection;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  return path.projection(projection).context(context);\n}\n\nfunction transform(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nfunction transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream$1));\n  fitBounds(boundsStream$1.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nfunction fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nfunction fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nfunction fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nfunction fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)\n\nfunction resample(project, delta2) {\n  return +delta2 ? resample$1(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample$1(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon$2 || abs(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy) {\n  function transform$$1(x, y) {\n    return [dx + k * x, dy - k * y];\n  }\n  transform$$1.invert = function(x, y) {\n    return [(x - dx) / k, (dy - y) / k];\n  };\n  return transform$$1;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, alpha) {\n  var cosAlpha = cos$1(alpha),\n      sinAlpha = sin$1(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform$$1(x, y) {\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform$$1.invert = function(x, y) {\n    return [ai * x - bi * y + ci, fi - bi * x - ai * y];\n  };\n  return transform$$1;\n}\n\nfunction projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nfunction projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity$4, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees$1, point[1] * degrees$1];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees$1;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),\n        transform$$1 = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform$$1);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n\nfunction conicProjection(projectAt) {\n  var phi0 = 0,\n      phi1 = pi$3 / 3,\n      m = projectionMutator(projectAt),\n      p = m(phi0, phi1);\n\n  p.parallels = function(_) {\n    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];\n  };\n\n  return p;\n}\n\nfunction cylindricalEqualAreaRaw(phi0) {\n  var cosPhi0 = cos$1(phi0);\n\n  function forward(lambda, phi) {\n    return [lambda * cosPhi0, sin$1(phi) / cosPhi0];\n  }\n\n  forward.invert = function(x, y) {\n    return [x / cosPhi0, asin(y * cosPhi0)];\n  };\n\n  return forward;\n}\n\nfunction conicEqualAreaRaw(y0, y1) {\n  var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;\n\n  // Are the parallels symmetrical around the Equator?\n  if (abs(n) < epsilon$2) return cylindricalEqualAreaRaw(y0);\n\n  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n  function project(x, y) {\n    var r = sqrt(c - 2 * n * sin$1(y)) / n;\n    return [r * sin$1(x *= n), r0 - r * cos$1(x)];\n  }\n\n  project.invert = function(x, y) {\n    var r0y = r0 - y;\n    return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n  };\n\n  return project;\n}\n\nfunction conicEqualArea() {\n  return conicProjection(conicEqualAreaRaw)\n      .scale(155.424)\n      .center([0, 33.6442]);\n}\n\nfunction albers() {\n  return conicEqualArea()\n      .parallels([29.5, 45.5])\n      .scale(1070)\n      .translate([480, 250])\n      .rotate([96, 0])\n      .center([-0.6, 38.7]);\n}\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n  var n = streams.length;\n  return {\n    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n  };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nfunction albersUsa() {\n  var cache,\n      cacheStream,\n      lower48 = albers(), lower48Point,\n      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n      point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n  function albersUsa(coordinates) {\n    var x = coordinates[0], y = coordinates[1];\n    return point = null,\n        (lower48Point.point(x, y), point)\n        || (alaskaPoint.point(x, y), point)\n        || (hawaiiPoint.point(x, y), point);\n  }\n\n  albersUsa.invert = function(coordinates) {\n    var k = lower48.scale(),\n        t = lower48.translate(),\n        x = (coordinates[0] - t[0]) / k,\n        y = (coordinates[1] - t[1]) / k;\n    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n        : lower48).invert(coordinates);\n  };\n\n  albersUsa.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n  };\n\n  albersUsa.precision = function(_) {\n    if (!arguments.length) return lower48.precision();\n    lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n    return reset();\n  };\n\n  albersUsa.scale = function(_) {\n    if (!arguments.length) return lower48.scale();\n    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n    return albersUsa.translate(lower48.translate());\n  };\n\n  albersUsa.translate = function(_) {\n    if (!arguments.length) return lower48.translate();\n    var k = lower48.scale(), x = +_[0], y = +_[1];\n\n    lower48Point = lower48\n        .translate(_)\n        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n        .stream(pointStream);\n\n    alaskaPoint = alaska\n        .translate([x - 0.307 * k, y + 0.201 * k])\n        .clipExtent([[x - 0.425 * k + epsilon$2, y + 0.120 * k + epsilon$2], [x - 0.214 * k - epsilon$2, y + 0.234 * k - epsilon$2]])\n        .stream(pointStream);\n\n    hawaiiPoint = hawaii\n        .translate([x - 0.205 * k, y + 0.212 * k])\n        .clipExtent([[x - 0.214 * k + epsilon$2, y + 0.166 * k + epsilon$2], [x - 0.115 * k - epsilon$2, y + 0.234 * k - epsilon$2]])\n        .stream(pointStream);\n\n    return reset();\n  };\n\n  albersUsa.fitExtent = function(extent, object) {\n    return fitExtent(albersUsa, extent, object);\n  };\n\n  albersUsa.fitSize = function(size, object) {\n    return fitSize(albersUsa, size, object);\n  };\n\n  albersUsa.fitWidth = function(width, object) {\n    return fitWidth(albersUsa, width, object);\n  };\n\n  albersUsa.fitHeight = function(height, object) {\n    return fitHeight(albersUsa, height, object);\n  };\n\n  function reset() {\n    cache = cacheStream = null;\n    return albersUsa;\n  }\n\n  return albersUsa.scale(1070);\n}\n\nfunction azimuthalRaw(scale) {\n  return function(x, y) {\n    var cx = cos$1(x),\n        cy = cos$1(y),\n        k = scale(cx * cy);\n    return [\n      k * cy * sin$1(x),\n      k * sin$1(y)\n    ];\n  }\n}\n\nfunction azimuthalInvert(angle) {\n  return function(x, y) {\n    var z = sqrt(x * x + y * y),\n        c = angle(z),\n        sc = sin$1(c),\n        cc = cos$1(c);\n    return [\n      atan2(x * sc, z * cc),\n      asin(z && y * sc / z)\n    ];\n  }\n}\n\nvar azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n  return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n  return 2 * asin(z / 2);\n});\n\nfunction azimuthalEqualArea() {\n  return projection(azimuthalEqualAreaRaw)\n      .scale(124.75)\n      .clipAngle(180 - 1e-3);\n}\n\nvar azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n  return (c = acos(c)) && c / sin$1(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n  return z;\n});\n\nfunction azimuthalEquidistant() {\n  return projection(azimuthalEquidistantRaw)\n      .scale(79.4188)\n      .clipAngle(180 - 1e-3);\n}\n\nfunction mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi$2 + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi$2];\n};\n\nfunction mercator() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau$3);\n}\n\nfunction mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  function reclip() {\n    var k = pi$3 * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n\nfunction tany(y) {\n  return tan((halfPi$2 + y) / 2);\n}\n\nfunction conicConformalRaw(y0, y1) {\n  var cy0 = cos$1(y0),\n      n = y0 === y1 ? sin$1(y0) : log(cy0 / cos$1(y1)) / log(tany(y1) / tany(y0)),\n      f = cy0 * pow(tany(y0), n) / n;\n\n  if (!n) return mercatorRaw;\n\n  function project(x, y) {\n    if (f > 0) { if (y < -halfPi$2 + epsilon$2) y = -halfPi$2 + epsilon$2; }\n    else { if (y > halfPi$2 - epsilon$2) y = halfPi$2 - epsilon$2; }\n    var r = f / pow(tany(y), n);\n    return [r * sin$1(n * x), f - r * cos$1(n * x)];\n  }\n\n  project.invert = function(x, y) {\n    var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy);\n    return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi$2];\n  };\n\n  return project;\n}\n\nfunction conicConformal() {\n  return conicProjection(conicConformalRaw)\n      .scale(109.5)\n      .parallels([30, 30]);\n}\n\nfunction equirectangularRaw(lambda, phi) {\n  return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nfunction equirectangular() {\n  return projection(equirectangularRaw)\n      .scale(152.63);\n}\n\nfunction conicEquidistantRaw(y0, y1) {\n  var cy0 = cos$1(y0),\n      n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),\n      g = cy0 / n + y0;\n\n  if (abs(n) < epsilon$2) return equirectangularRaw;\n\n  function project(x, y) {\n    var gy = g - y, nx = n * x;\n    return [gy * sin$1(nx), g - gy * cos$1(nx)];\n  }\n\n  project.invert = function(x, y) {\n    var gy = g - y;\n    return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];\n  };\n\n  return project;\n}\n\nfunction conicEquidistant() {\n  return conicProjection(conicEquidistantRaw)\n      .scale(131.154)\n      .center([0, 13.9389]);\n}\n\nvar A1 = 1.340264,\n    A2 = -0.081106,\n    A3 = 0.000893,\n    A4 = 0.003796,\n    M = sqrt(3) / 2,\n    iterations = 12;\n\nfunction equalEarthRaw(lambda, phi) {\n  var l = asin(M * sin$1(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n  return [\n    lambda * cos$1(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n    l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n  ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n  var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n  for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n    fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n    fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n    l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n    if (abs(delta) < epsilon2$1) break;\n  }\n  return [\n    M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos$1(l),\n    asin(sin$1(l) / M)\n  ];\n};\n\nfunction equalEarth() {\n  return projection(equalEarthRaw)\n      .scale(177.158);\n}\n\nfunction gnomonicRaw(x, y) {\n  var cy = cos$1(y), k = cos$1(x) * cy;\n  return [cy * sin$1(x) / k, sin$1(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nfunction gnomonic() {\n  return projection(gnomonicRaw)\n      .scale(144.049)\n      .clipAngle(60);\n}\n\nfunction scaleTranslate$1(kx, ky, tx, ty) {\n  return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$4 : transformer({\n    point: function(x, y) {\n      this.stream.point(x * kx + tx, y * ky + ty);\n    }\n  });\n}\n\nfunction identity$5() {\n  var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform$$1 = identity$4, // scale, translate and reflect\n      x0 = null, y0, x1, y1, // clip extent\n      postclip = identity$4,\n      cache,\n      cacheStream,\n      projection;\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return projection = {\n    stream: function(stream) {\n      return cache && cacheStream === stream ? cache : cache = transform$$1(postclip(cacheStream = stream));\n    },\n    postclip: function(_) {\n      return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n    },\n    clipExtent: function(_) {\n      return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n    },\n    scale: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k;\n    },\n    translate: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];\n    },\n    reflectX: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;\n    },\n    reflectY: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;\n    },\n    fitExtent: function(extent, object) {\n      return fitExtent(projection, extent, object);\n    },\n    fitSize: function(size, object) {\n      return fitSize(projection, size, object);\n    },\n    fitWidth: function(width, object) {\n      return fitWidth(projection, width, object);\n    },\n    fitHeight: function(height, object) {\n      return fitHeight(projection, height, object);\n    }\n  };\n}\n\nfunction naturalEarth1Raw(lambda, phi) {\n  var phi2 = phi * phi, phi4 = phi2 * phi2;\n  return [\n    lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n    phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n  ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n  var phi = y, i = 25, delta;\n  do {\n    var phi2 = phi * phi, phi4 = phi2 * phi2;\n    phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n        (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n  } while (abs(delta) > epsilon$2 && --i > 0);\n  return [\n    x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n    phi\n  ];\n};\n\nfunction naturalEarth1() {\n  return projection(naturalEarth1Raw)\n      .scale(175.295);\n}\n\nfunction orthographicRaw(x, y) {\n  return [cos$1(y) * sin$1(x), sin$1(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nfunction orthographic() {\n  return projection(orthographicRaw)\n      .scale(249.5)\n      .clipAngle(90 + epsilon$2);\n}\n\nfunction stereographicRaw(x, y) {\n  var cy = cos$1(y), k = 1 + cos$1(x) * cy;\n  return [cy * sin$1(x) / k, sin$1(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n  return 2 * atan(z);\n});\n\nfunction stereographic() {\n  return projection(stereographicRaw)\n      .scale(250)\n      .clipAngle(142);\n}\n\nfunction transverseMercatorRaw(lambda, phi) {\n  return [log(tan((halfPi$2 + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n  return [-y, 2 * atan(exp(x)) - halfPi$2];\n};\n\nfunction transverseMercator() {\n  var m = mercatorProjection(transverseMercatorRaw),\n      center = m.center,\n      rotate = m.rotate;\n\n  m.center = function(_) {\n    return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n  };\n\n  m.rotate = function(_) {\n    return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n  };\n\n  return rotate([0, 0, 90])\n      .scale(159.155);\n}\n\nfunction defaultSeparation(a, b) {\n  return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n  return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n  return x + c.x;\n}\n\nfunction maxY(children) {\n  return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n  return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n  var children;\n  while (children = node.children) node = children[0];\n  return node;\n}\n\nfunction leafRight(node) {\n  var children;\n  while (children = node.children) node = children[children.length - 1];\n  return node;\n}\n\nfunction cluster() {\n  var separation = defaultSeparation,\n      dx = 1,\n      dy = 1,\n      nodeSize = false;\n\n  function cluster(root) {\n    var previousNode,\n        x = 0;\n\n    // First walk, computing the initial x & y values.\n    root.eachAfter(function(node) {\n      var children = node.children;\n      if (children) {\n        node.x = meanX(children);\n        node.y = maxY(children);\n      } else {\n        node.x = previousNode ? x += separation(node, previousNode) : 0;\n        node.y = 0;\n        previousNode = node;\n      }\n    });\n\n    var left = leafLeft(root),\n        right = leafRight(root),\n        x0 = left.x - separation(left, right) / 2,\n        x1 = right.x + separation(right, left) / 2;\n\n    // Second walk, normalizing x & y to the desired size.\n    return root.eachAfter(nodeSize ? function(node) {\n      node.x = (node.x - root.x) * dx;\n      node.y = (root.y - node.y) * dy;\n    } : function(node) {\n      node.x = (node.x - x0) / (x1 - x0) * dx;\n      node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n    });\n  }\n\n  cluster.separation = function(x) {\n    return arguments.length ? (separation = x, cluster) : separation;\n  };\n\n  cluster.size = function(x) {\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n  };\n\n  cluster.nodeSize = function(x) {\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n  };\n\n  return cluster;\n}\n\nfunction count(node) {\n  var sum = 0,\n      children = node.children,\n      i = children && children.length;\n  if (!i) sum = 1;\n  else while (--i >= 0) sum += children[i].value;\n  node.value = sum;\n}\n\nfunction node_count() {\n  return this.eachAfter(count);\n}\n\nfunction node_each(callback) {\n  var node = this, current, next = [node], children, i, n;\n  do {\n    current = next.reverse(), next = [];\n    while (node = current.pop()) {\n      callback(node), children = node.children;\n      if (children) for (i = 0, n = children.length; i < n; ++i) {\n        next.push(children[i]);\n      }\n    }\n  } while (next.length);\n  return this;\n}\n\nfunction node_eachBefore(callback) {\n  var node = this, nodes = [node], children, i;\n  while (node = nodes.pop()) {\n    callback(node), children = node.children;\n    if (children) for (i = children.length - 1; i >= 0; --i) {\n      nodes.push(children[i]);\n    }\n  }\n  return this;\n}\n\nfunction node_eachAfter(callback) {\n  var node = this, nodes = [node], next = [], children, i, n;\n  while (node = nodes.pop()) {\n    next.push(node), children = node.children;\n    if (children) for (i = 0, n = children.length; i < n; ++i) {\n      nodes.push(children[i]);\n    }\n  }\n  while (node = next.pop()) {\n    callback(node);\n  }\n  return this;\n}\n\nfunction node_sum(value) {\n  return this.eachAfter(function(node) {\n    var sum = +value(node.data) || 0,\n        children = node.children,\n        i = children && children.length;\n    while (--i >= 0) sum += children[i].value;\n    node.value = sum;\n  });\n}\n\nfunction node_sort(compare) {\n  return this.eachBefore(function(node) {\n    if (node.children) {\n      node.children.sort(compare);\n    }\n  });\n}\n\nfunction node_path(end) {\n  var start = this,\n      ancestor = leastCommonAncestor(start, end),\n      nodes = [start];\n  while (start !== ancestor) {\n    start = start.parent;\n    nodes.push(start);\n  }\n  var k = nodes.length;\n  while (end !== ancestor) {\n    nodes.splice(k, 0, end);\n    end = end.parent;\n  }\n  return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n  if (a === b) return a;\n  var aNodes = a.ancestors(),\n      bNodes = b.ancestors(),\n      c = null;\n  a = aNodes.pop();\n  b = bNodes.pop();\n  while (a === b) {\n    c = a;\n    a = aNodes.pop();\n    b = bNodes.pop();\n  }\n  return c;\n}\n\nfunction node_ancestors() {\n  var node = this, nodes = [node];\n  while (node = node.parent) {\n    nodes.push(node);\n  }\n  return nodes;\n}\n\nfunction node_descendants() {\n  var nodes = [];\n  this.each(function(node) {\n    nodes.push(node);\n  });\n  return nodes;\n}\n\nfunction node_leaves() {\n  var leaves = [];\n  this.eachBefore(function(node) {\n    if (!node.children) {\n      leaves.push(node);\n    }\n  });\n  return leaves;\n}\n\nfunction node_links() {\n  var root = this, links = [];\n  root.each(function(node) {\n    if (node !== root) { // Don’t include the root’s parent, if any.\n      links.push({source: node.parent, target: node});\n    }\n  });\n  return links;\n}\n\nfunction hierarchy(data, children) {\n  var root = new Node(data),\n      valued = +data.value && (root.value = data.value),\n      node,\n      nodes = [root],\n      child,\n      childs,\n      i,\n      n;\n\n  if (children == null) children = defaultChildren;\n\n  while (node = nodes.pop()) {\n    if (valued) node.value = +node.data.value;\n    if ((childs = children(node.data)) && (n = childs.length)) {\n      node.children = new Array(n);\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = node.children[i] = new Node(childs[i]));\n        child.parent = node;\n        child.depth = node.depth + 1;\n      }\n    }\n  }\n\n  return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n  return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n  return d.children;\n}\n\nfunction copyData(node) {\n  node.data = node.data.data;\n}\n\nfunction computeHeight(node) {\n  var height = 0;\n  do node.height = height;\n  while ((node = node.parent) && (node.height < ++height));\n}\n\nfunction Node(data) {\n  this.data = data;\n  this.depth =\n  this.height = 0;\n  this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n  constructor: Node,\n  count: node_count,\n  each: node_each,\n  eachAfter: node_eachAfter,\n  eachBefore: node_eachBefore,\n  sum: node_sum,\n  sort: node_sort,\n  path: node_path,\n  ancestors: node_ancestors,\n  descendants: node_descendants,\n  leaves: node_leaves,\n  links: node_links,\n  copy: node_copy\n};\n\nvar slice$4 = Array.prototype.slice;\n\nfunction shuffle$1(array) {\n  var m = array.length,\n      t,\n      i;\n\n  while (m) {\n    i = Math.random() * m-- | 0;\n    t = array[m];\n    array[m] = array[i];\n    array[i] = t;\n  }\n\n  return array;\n}\n\nfunction enclose(circles) {\n  var i = 0, n = (circles = shuffle$1(slice$4.call(circles))).length, B = [], p, e;\n\n  while (i < n) {\n    p = circles[i];\n    if (e && enclosesWeak(e, p)) ++i;\n    else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n  }\n\n  return e;\n}\n\nfunction extendBasis(B, p) {\n  var i, j;\n\n  if (enclosesWeakAll(p, B)) return [p];\n\n  // If we get here then B must have at least one element.\n  for (i = 0; i < B.length; ++i) {\n    if (enclosesNot(p, B[i])\n        && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n      return [B[i], p];\n    }\n  }\n\n  // If we get here then B must have at least two elements.\n  for (i = 0; i < B.length - 1; ++i) {\n    for (j = i + 1; j < B.length; ++j) {\n      if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n          && enclosesNot(encloseBasis2(B[i], p), B[j])\n          && enclosesNot(encloseBasis2(B[j], p), B[i])\n          && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n        return [B[i], B[j], p];\n      }\n    }\n  }\n\n  // If we get here then something is very wrong.\n  throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n  var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n  return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n  var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n  for (var i = 0; i < B.length; ++i) {\n    if (!enclosesWeak(a, B[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction encloseBasis(B) {\n  switch (B.length) {\n    case 1: return encloseBasis1(B[0]);\n    case 2: return encloseBasis2(B[0], B[1]);\n    case 3: return encloseBasis3(B[0], B[1], B[2]);\n  }\n}\n\nfunction encloseBasis1(a) {\n  return {\n    x: a.x,\n    y: a.y,\n    r: a.r\n  };\n}\n\nfunction encloseBasis2(a, b) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n      l = Math.sqrt(x21 * x21 + y21 * y21);\n  return {\n    x: (x1 + x2 + x21 / l * r21) / 2,\n    y: (y1 + y2 + y21 / l * r21) / 2,\n    r: (l + r1 + r2) / 2\n  };\n}\n\nfunction encloseBasis3(a, b, c) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x3 = c.x, y3 = c.y, r3 = c.r,\n      a2 = x1 - x2,\n      a3 = x1 - x3,\n      b2 = y1 - y2,\n      b3 = y1 - y3,\n      c2 = r2 - r1,\n      c3 = r3 - r1,\n      d1 = x1 * x1 + y1 * y1 - r1 * r1,\n      d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n      d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n      ab = a3 * b2 - a2 * b3,\n      xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n      xb = (b3 * c2 - b2 * c3) / ab,\n      ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n      yb = (a2 * c3 - a3 * c2) / ab,\n      A = xb * xb + yb * yb - 1,\n      B = 2 * (r1 + xa * xb + ya * yb),\n      C = xa * xa + ya * ya - r1 * r1,\n      r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n  return {\n    x: x1 + xa + xb * r,\n    y: y1 + ya + yb * r,\n    r: r\n  };\n}\n\nfunction place(b, a, c) {\n  var dx = b.x - a.x, x, a2,\n      dy = b.y - a.y, y, b2,\n      d2 = dx * dx + dy * dy;\n  if (d2) {\n    a2 = a.r + c.r, a2 *= a2;\n    b2 = b.r + c.r, b2 *= b2;\n    if (a2 > b2) {\n      x = (d2 + b2 - a2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n      c.x = b.x - x * dx - y * dy;\n      c.y = b.y - x * dy + y * dx;\n    } else {\n      x = (d2 + a2 - b2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n      c.x = a.x + x * dx - y * dy;\n      c.y = a.y + x * dy + y * dx;\n    }\n  } else {\n    c.x = a.x + c.r;\n    c.y = a.y;\n  }\n}\n\nfunction intersects(a, b) {\n  var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n  var a = node._,\n      b = node.next._,\n      ab = a.r + b.r,\n      dx = (a.x * b.r + b.x * a.r) / ab,\n      dy = (a.y * b.r + b.y * a.r) / ab;\n  return dx * dx + dy * dy;\n}\n\nfunction Node$1(circle) {\n  this._ = circle;\n  this.next = null;\n  this.previous = null;\n}\n\nfunction packEnclose(circles) {\n  if (!(n = circles.length)) return 0;\n\n  var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n  // Place the first circle.\n  a = circles[0], a.x = 0, a.y = 0;\n  if (!(n > 1)) return a.r;\n\n  // Place the second circle.\n  b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n  if (!(n > 2)) return a.r + b.r;\n\n  // Place the third circle.\n  place(b, a, c = circles[2]);\n\n  // Initialize the front-chain using the first three circles a, b and c.\n  a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);\n  a.next = c.previous = b;\n  b.next = a.previous = c;\n  c.next = b.previous = a;\n\n  // Attempt to place each remaining circle…\n  pack: for (i = 3; i < n; ++i) {\n    place(a._, b._, c = circles[i]), c = new Node$1(c);\n\n    // Find the closest intersecting circle on the front-chain, if any.\n    // “Closeness” is determined by linear distance along the front-chain.\n    // “Ahead” or “behind” is likewise determined by linear distance.\n    j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n    do {\n      if (sj <= sk) {\n        if (intersects(j._, c._)) {\n          b = j, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sj += j._.r, j = j.next;\n      } else {\n        if (intersects(k._, c._)) {\n          a = k, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sk += k._.r, k = k.previous;\n      }\n    } while (j !== k.next);\n\n    // Success! Insert the new circle c between a and b.\n    c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n    // Compute the new closest circle pair to the centroid.\n    aa = score(a);\n    while ((c = c.next) !== b) {\n      if ((ca = score(c)) < aa) {\n        a = c, aa = ca;\n      }\n    }\n    b = a.next;\n  }\n\n  // Compute the enclosing circle of the front chain.\n  a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n  // Translate the circles to put the enclosing circle around the origin.\n  for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n  return c.r;\n}\n\nfunction siblings(circles) {\n  packEnclose(circles);\n  return circles;\n}\n\nfunction optional(f) {\n  return f == null ? null : required(f);\n}\n\nfunction required(f) {\n  if (typeof f !== \"function\") throw new Error;\n  return f;\n}\n\nfunction constantZero() {\n  return 0;\n}\n\nfunction constant$9(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction defaultRadius$1(d) {\n  return Math.sqrt(d.value);\n}\n\nfunction index$2() {\n  var radius = null,\n      dx = 1,\n      dy = 1,\n      padding = constantZero;\n\n  function pack(root) {\n    root.x = dx / 2, root.y = dy / 2;\n    if (radius) {\n      root.eachBefore(radiusLeaf(radius))\n          .eachAfter(packChildren(padding, 0.5))\n          .eachBefore(translateChild(1));\n    } else {\n      root.eachBefore(radiusLeaf(defaultRadius$1))\n          .eachAfter(packChildren(constantZero, 1))\n          .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n          .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n    }\n    return root;\n  }\n\n  pack.radius = function(x) {\n    return arguments.length ? (radius = optional(x), pack) : radius;\n  };\n\n  pack.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n  };\n\n  pack.padding = function(x) {\n    return arguments.length ? (padding = typeof x === \"function\" ? x : constant$9(+x), pack) : padding;\n  };\n\n  return pack;\n}\n\nfunction radiusLeaf(radius) {\n  return function(node) {\n    if (!node.children) {\n      node.r = Math.max(0, +radius(node) || 0);\n    }\n  };\n}\n\nfunction packChildren(padding, k) {\n  return function(node) {\n    if (children = node.children) {\n      var children,\n          i,\n          n = children.length,\n          r = padding(node) * k || 0,\n          e;\n\n      if (r) for (i = 0; i < n; ++i) children[i].r += r;\n      e = packEnclose(children);\n      if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n      node.r = e + r;\n    }\n  };\n}\n\nfunction translateChild(k) {\n  return function(node) {\n    var parent = node.parent;\n    node.r *= k;\n    if (parent) {\n      node.x = parent.x + k * node.x;\n      node.y = parent.y + k * node.y;\n    }\n  };\n}\n\nfunction roundNode(node) {\n  node.x0 = Math.round(node.x0);\n  node.y0 = Math.round(node.y0);\n  node.x1 = Math.round(node.x1);\n  node.y1 = Math.round(node.y1);\n}\n\nfunction treemapDice(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      node,\n      i = -1,\n      n = nodes.length,\n      k = parent.value && (x1 - x0) / parent.value;\n\n  while (++i < n) {\n    node = nodes[i], node.y0 = y0, node.y1 = y1;\n    node.x0 = x0, node.x1 = x0 += node.value * k;\n  }\n}\n\nfunction partition() {\n  var dx = 1,\n      dy = 1,\n      padding = 0,\n      round = false;\n\n  function partition(root) {\n    var n = root.height + 1;\n    root.x0 =\n    root.y0 = padding;\n    root.x1 = dx;\n    root.y1 = dy / n;\n    root.eachBefore(positionNode(dy, n));\n    if (round) root.eachBefore(roundNode);\n    return root;\n  }\n\n  function positionNode(dy, n) {\n    return function(node) {\n      if (node.children) {\n        treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n      }\n      var x0 = node.x0,\n          y0 = node.y0,\n          x1 = node.x1 - padding,\n          y1 = node.y1 - padding;\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n      node.x0 = x0;\n      node.y0 = y0;\n      node.x1 = x1;\n      node.y1 = y1;\n    };\n  }\n\n  partition.round = function(x) {\n    return arguments.length ? (round = !!x, partition) : round;\n  };\n\n  partition.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n  };\n\n  partition.padding = function(x) {\n    return arguments.length ? (padding = +x, partition) : padding;\n  };\n\n  return partition;\n}\n\nvar keyPrefix$1 = \"$\", // Protect against keys like “__proto__”.\n    preroot = {depth: -1},\n    ambiguous = {};\n\nfunction defaultId(d) {\n  return d.id;\n}\n\nfunction defaultParentId(d) {\n  return d.parentId;\n}\n\nfunction stratify() {\n  var id = defaultId,\n      parentId = defaultParentId;\n\n  function stratify(data) {\n    var d,\n        i,\n        n = data.length,\n        root,\n        parent,\n        node,\n        nodes = new Array(n),\n        nodeId,\n        nodeKey,\n        nodeByKey = {};\n\n    for (i = 0; i < n; ++i) {\n      d = data[i], node = nodes[i] = new Node(d);\n      if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n        nodeKey = keyPrefix$1 + (node.id = nodeId);\n        nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;\n      }\n    }\n\n    for (i = 0; i < n; ++i) {\n      node = nodes[i], nodeId = parentId(data[i], i, data);\n      if (nodeId == null || !(nodeId += \"\")) {\n        if (root) throw new Error(\"multiple roots\");\n        root = node;\n      } else {\n        parent = nodeByKey[keyPrefix$1 + nodeId];\n        if (!parent) throw new Error(\"missing: \" + nodeId);\n        if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n        if (parent.children) parent.children.push(node);\n        else parent.children = [node];\n        node.parent = parent;\n      }\n    }\n\n    if (!root) throw new Error(\"no root\");\n    root.parent = preroot;\n    root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n    root.parent = null;\n    if (n > 0) throw new Error(\"cycle\");\n\n    return root;\n  }\n\n  stratify.id = function(x) {\n    return arguments.length ? (id = required(x), stratify) : id;\n  };\n\n  stratify.parentId = function(x) {\n    return arguments.length ? (parentId = required(x), stratify) : parentId;\n  };\n\n  return stratify;\n}\n\nfunction defaultSeparation$1(a, b) {\n  return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n//   return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n  var children = v.children;\n  return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n  var children = v.children;\n  return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n  var change = shift / (wp.i - wm.i);\n  wp.c -= change;\n  wp.s += shift;\n  wm.c += change;\n  wp.z += shift;\n  wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n  var shift = 0,\n      change = 0,\n      children = v.children,\n      i = children.length,\n      w;\n  while (--i >= 0) {\n    w = children[i];\n    w.z += shift;\n    w.m += shift;\n    shift += w.s + (change += w.c);\n  }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n  return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n  this._ = node;\n  this.parent = null;\n  this.children = null;\n  this.A = null; // default ancestor\n  this.a = this; // ancestor\n  this.z = 0; // prelim\n  this.m = 0; // mod\n  this.c = 0; // change\n  this.s = 0; // shift\n  this.t = null; // thread\n  this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n  var tree = new TreeNode(root, 0),\n      node,\n      nodes = [tree],\n      child,\n      children,\n      i,\n      n;\n\n  while (node = nodes.pop()) {\n    if (children = node._.children) {\n      node.children = new Array(n = children.length);\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n        child.parent = node;\n      }\n    }\n  }\n\n  (tree.parent = new TreeNode(null, 0)).children = [tree];\n  return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nfunction tree() {\n  var separation = defaultSeparation$1,\n      dx = 1,\n      dy = 1,\n      nodeSize = null;\n\n  function tree(root) {\n    var t = treeRoot(root);\n\n    // Compute the layout using Buchheim et al.’s algorithm.\n    t.eachAfter(firstWalk), t.parent.m = -t.z;\n    t.eachBefore(secondWalk);\n\n    // If a fixed node size is specified, scale x and y.\n    if (nodeSize) root.eachBefore(sizeNode);\n\n    // If a fixed tree size is specified, scale x and y based on the extent.\n    // Compute the left-most, right-most, and depth-most nodes for extents.\n    else {\n      var left = root,\n          right = root,\n          bottom = root;\n      root.eachBefore(function(node) {\n        if (node.x < left.x) left = node;\n        if (node.x > right.x) right = node;\n        if (node.depth > bottom.depth) bottom = node;\n      });\n      var s = left === right ? 1 : separation(left, right) / 2,\n          tx = s - left.x,\n          kx = dx / (right.x + s + tx),\n          ky = dy / (bottom.depth || 1);\n      root.eachBefore(function(node) {\n        node.x = (node.x + tx) * kx;\n        node.y = node.depth * ky;\n      });\n    }\n\n    return root;\n  }\n\n  // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n  // applied recursively to the children of v, as well as the function\n  // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n  // node v is placed to the midpoint of its outermost children.\n  function firstWalk(v) {\n    var children = v.children,\n        siblings = v.parent.children,\n        w = v.i ? siblings[v.i - 1] : null;\n    if (children) {\n      executeShifts(v);\n      var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n      if (w) {\n        v.z = w.z + separation(v._, w._);\n        v.m = v.z - midpoint;\n      } else {\n        v.z = midpoint;\n      }\n    } else if (w) {\n      v.z = w.z + separation(v._, w._);\n    }\n    v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n  }\n\n  // Computes all real x-coordinates by summing up the modifiers recursively.\n  function secondWalk(v) {\n    v._.x = v.z + v.parent.m;\n    v.m += v.parent.m;\n  }\n\n  // The core of the algorithm. Here, a new subtree is combined with the\n  // previous subtrees. Threads are used to traverse the inside and outside\n  // contours of the left and right subtree up to the highest common level. The\n  // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n  // superscript o means outside and i means inside, the subscript - means left\n  // subtree and + means right subtree. For summing up the modifiers along the\n  // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n  // nodes of the inside contours conflict, we compute the left one of the\n  // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n  // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n  // Finally, we add a new thread (if necessary).\n  function apportion(v, w, ancestor) {\n    if (w) {\n      var vip = v,\n          vop = v,\n          vim = w,\n          vom = vip.parent.children[0],\n          sip = vip.m,\n          sop = vop.m,\n          sim = vim.m,\n          som = vom.m,\n          shift;\n      while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n        vom = nextLeft(vom);\n        vop = nextRight(vop);\n        vop.a = v;\n        shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n        if (shift > 0) {\n          moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n          sip += shift;\n          sop += shift;\n        }\n        sim += vim.m;\n        sip += vip.m;\n        som += vom.m;\n        sop += vop.m;\n      }\n      if (vim && !nextRight(vop)) {\n        vop.t = vim;\n        vop.m += sim - sop;\n      }\n      if (vip && !nextLeft(vom)) {\n        vom.t = vip;\n        vom.m += sip - som;\n        ancestor = v;\n      }\n    }\n    return ancestor;\n  }\n\n  function sizeNode(node) {\n    node.x *= dx;\n    node.y = node.depth * dy;\n  }\n\n  tree.separation = function(x) {\n    return arguments.length ? (separation = x, tree) : separation;\n  };\n\n  tree.size = function(x) {\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n  };\n\n  tree.nodeSize = function(x) {\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n  };\n\n  return tree;\n}\n\nfunction treemapSlice(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      node,\n      i = -1,\n      n = nodes.length,\n      k = parent.value && (y1 - y0) / parent.value;\n\n  while (++i < n) {\n    node = nodes[i], node.x0 = x0, node.x1 = x1;\n    node.y0 = y0, node.y1 = y0 += node.value * k;\n  }\n}\n\nvar phi = (1 + Math.sqrt(5)) / 2;\n\nfunction squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n  var rows = [],\n      nodes = parent.children,\n      row,\n      nodeValue,\n      i0 = 0,\n      i1 = 0,\n      n = nodes.length,\n      dx, dy,\n      value = parent.value,\n      sumValue,\n      minValue,\n      maxValue,\n      newRatio,\n      minRatio,\n      alpha,\n      beta;\n\n  while (i0 < n) {\n    dx = x1 - x0, dy = y1 - y0;\n\n    // Find the next non-empty node.\n    do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n    minValue = maxValue = sumValue;\n    alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n    beta = sumValue * sumValue * alpha;\n    minRatio = Math.max(maxValue / beta, beta / minValue);\n\n    // Keep adding nodes while the aspect ratio maintains or improves.\n    for (; i1 < n; ++i1) {\n      sumValue += nodeValue = nodes[i1].value;\n      if (nodeValue < minValue) minValue = nodeValue;\n      if (nodeValue > maxValue) maxValue = nodeValue;\n      beta = sumValue * sumValue * alpha;\n      newRatio = Math.max(maxValue / beta, beta / minValue);\n      if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n      minRatio = newRatio;\n    }\n\n    // Position and record the row orientation.\n    rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n    if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n    else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n    value -= sumValue, i0 = i1;\n  }\n\n  return rows;\n}\n\nvar squarify = (function custom(ratio) {\n\n  function squarify(parent, x0, y0, x1, y1) {\n    squarifyRatio(ratio, parent, x0, y0, x1, y1);\n  }\n\n  squarify.ratio = function(x) {\n    return custom((x = +x) > 1 ? x : 1);\n  };\n\n  return squarify;\n})(phi);\n\nfunction index$3() {\n  var tile = squarify,\n      round = false,\n      dx = 1,\n      dy = 1,\n      paddingStack = [0],\n      paddingInner = constantZero,\n      paddingTop = constantZero,\n      paddingRight = constantZero,\n      paddingBottom = constantZero,\n      paddingLeft = constantZero;\n\n  function treemap(root) {\n    root.x0 =\n    root.y0 = 0;\n    root.x1 = dx;\n    root.y1 = dy;\n    root.eachBefore(positionNode);\n    paddingStack = [0];\n    if (round) root.eachBefore(roundNode);\n    return root;\n  }\n\n  function positionNode(node) {\n    var p = paddingStack[node.depth],\n        x0 = node.x0 + p,\n        y0 = node.y0 + p,\n        x1 = node.x1 - p,\n        y1 = node.y1 - p;\n    if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n    if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n    node.x0 = x0;\n    node.y0 = y0;\n    node.x1 = x1;\n    node.y1 = y1;\n    if (node.children) {\n      p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n      x0 += paddingLeft(node) - p;\n      y0 += paddingTop(node) - p;\n      x1 -= paddingRight(node) - p;\n      y1 -= paddingBottom(node) - p;\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n      tile(node, x0, y0, x1, y1);\n    }\n  }\n\n  treemap.round = function(x) {\n    return arguments.length ? (round = !!x, treemap) : round;\n  };\n\n  treemap.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n  };\n\n  treemap.tile = function(x) {\n    return arguments.length ? (tile = required(x), treemap) : tile;\n  };\n\n  treemap.padding = function(x) {\n    return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n  };\n\n  treemap.paddingInner = function(x) {\n    return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingInner;\n  };\n\n  treemap.paddingOuter = function(x) {\n    return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n  };\n\n  treemap.paddingTop = function(x) {\n    return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingTop;\n  };\n\n  treemap.paddingRight = function(x) {\n    return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingRight;\n  };\n\n  treemap.paddingBottom = function(x) {\n    return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingBottom;\n  };\n\n  treemap.paddingLeft = function(x) {\n    return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingLeft;\n  };\n\n  return treemap;\n}\n\nfunction binary(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      i, n = nodes.length,\n      sum, sums = new Array(n + 1);\n\n  for (sums[0] = sum = i = 0; i < n; ++i) {\n    sums[i + 1] = sum += nodes[i].value;\n  }\n\n  partition(0, n, parent.value, x0, y0, x1, y1);\n\n  function partition(i, j, value, x0, y0, x1, y1) {\n    if (i >= j - 1) {\n      var node = nodes[i];\n      node.x0 = x0, node.y0 = y0;\n      node.x1 = x1, node.y1 = y1;\n      return;\n    }\n\n    var valueOffset = sums[i],\n        valueTarget = (value / 2) + valueOffset,\n        k = i + 1,\n        hi = j - 1;\n\n    while (k < hi) {\n      var mid = k + hi >>> 1;\n      if (sums[mid] < valueTarget) k = mid + 1;\n      else hi = mid;\n    }\n\n    if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n    var valueLeft = sums[k] - valueOffset,\n        valueRight = value - valueLeft;\n\n    if ((x1 - x0) > (y1 - y0)) {\n      var xk = (x0 * valueRight + x1 * valueLeft) / value;\n      partition(i, k, valueLeft, x0, y0, xk, y1);\n      partition(k, j, valueRight, xk, y0, x1, y1);\n    } else {\n      var yk = (y0 * valueRight + y1 * valueLeft) / value;\n      partition(i, k, valueLeft, x0, y0, x1, yk);\n      partition(k, j, valueRight, x0, yk, x1, y1);\n    }\n  }\n}\n\nfunction sliceDice(parent, x0, y0, x1, y1) {\n  (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);\n}\n\nvar resquarify = (function custom(ratio) {\n\n  function resquarify(parent, x0, y0, x1, y1) {\n    if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n      var rows,\n          row,\n          nodes,\n          i,\n          j = -1,\n          n,\n          m = rows.length,\n          value = parent.value;\n\n      while (++j < m) {\n        row = rows[j], nodes = row.children;\n        for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n        if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n        else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n        value -= row.value;\n      }\n    } else {\n      parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n      rows.ratio = ratio;\n    }\n  }\n\n  resquarify.ratio = function(x) {\n    return custom((x = +x) > 1 ? x : 1);\n  };\n\n  return resquarify;\n})(phi);\n\nfunction area$2(polygon) {\n  var i = -1,\n      n = polygon.length,\n      a,\n      b = polygon[n - 1],\n      area = 0;\n\n  while (++i < n) {\n    a = b;\n    b = polygon[i];\n    area += a[1] * b[0] - a[0] * b[1];\n  }\n\n  return area / 2;\n}\n\nfunction centroid$1(polygon) {\n  var i = -1,\n      n = polygon.length,\n      x = 0,\n      y = 0,\n      a,\n      b = polygon[n - 1],\n      c,\n      k = 0;\n\n  while (++i < n) {\n    a = b;\n    b = polygon[i];\n    k += c = a[0] * b[1] - b[0] * a[1];\n    x += (a[0] + b[0]) * c;\n    y += (a[1] + b[1]) * c;\n  }\n\n  return k *= 3, [x / k, y / k];\n}\n\n// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of\n// the 3D cross product in a quadrant I Cartesian coordinate system (+x is\n// right, +y is up). Returns a positive value if ABC is counter-clockwise,\n// negative if clockwise, and zero if the points are collinear.\nfunction cross$1(a, b, c) {\n  return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n}\n\nfunction lexicographicOrder(a, b) {\n  return a[0] - b[0] || a[1] - b[1];\n}\n\n// Computes the upper convex hull per the monotone chain algorithm.\n// Assumes points.length >= 3, is sorted by x, unique in y.\n// Returns an array of indices into points in left-to-right order.\nfunction computeUpperHullIndexes(points) {\n  var n = points.length,\n      indexes = [0, 1],\n      size = 2;\n\n  for (var i = 2; i < n; ++i) {\n    while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;\n    indexes[size++] = i;\n  }\n\n  return indexes.slice(0, size); // remove popped points\n}\n\nfunction hull(points) {\n  if ((n = points.length) < 3) return null;\n\n  var i,\n      n,\n      sortedPoints = new Array(n),\n      flippedPoints = new Array(n);\n\n  for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];\n  sortedPoints.sort(lexicographicOrder);\n  for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];\n\n  var upperIndexes = computeUpperHullIndexes(sortedPoints),\n      lowerIndexes = computeUpperHullIndexes(flippedPoints);\n\n  // Construct the hull polygon, removing possible duplicate endpoints.\n  var skipLeft = lowerIndexes[0] === upperIndexes[0],\n      skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],\n      hull = [];\n\n  // Add upper hull in right-to-l order.\n  // Then add lower hull in left-to-right order.\n  for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);\n  for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);\n\n  return hull;\n}\n\nfunction contains$2(polygon, point) {\n  var n = polygon.length,\n      p = polygon[n - 1],\n      x = point[0], y = point[1],\n      x0 = p[0], y0 = p[1],\n      x1, y1,\n      inside = false;\n\n  for (var i = 0; i < n; ++i) {\n    p = polygon[i], x1 = p[0], y1 = p[1];\n    if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;\n    x0 = x1, y0 = y1;\n  }\n\n  return inside;\n}\n\nfunction length$2(polygon) {\n  var i = -1,\n      n = polygon.length,\n      b = polygon[n - 1],\n      xa,\n      ya,\n      xb = b[0],\n      yb = b[1],\n      perimeter = 0;\n\n  while (++i < n) {\n    xa = xb;\n    ya = yb;\n    b = polygon[i];\n    xb = b[0];\n    yb = b[1];\n    xa -= xb;\n    ya -= yb;\n    perimeter += Math.sqrt(xa * xa + ya * ya);\n  }\n\n  return perimeter;\n}\n\nfunction defaultSource$1() {\n  return Math.random();\n}\n\nvar uniform = (function sourceRandomUniform(source) {\n  function randomUniform(min, max) {\n    min = min == null ? 0 : +min;\n    max = max == null ? 1 : +max;\n    if (arguments.length === 1) max = min, min = 0;\n    else max -= min;\n    return function() {\n      return source() * max + min;\n    };\n  }\n\n  randomUniform.source = sourceRandomUniform;\n\n  return randomUniform;\n})(defaultSource$1);\n\nvar normal = (function sourceRandomNormal(source) {\n  function randomNormal(mu, sigma) {\n    var x, r;\n    mu = mu == null ? 0 : +mu;\n    sigma = sigma == null ? 1 : +sigma;\n    return function() {\n      var y;\n\n      // If available, use the second previously-generated uniform random.\n      if (x != null) y = x, x = null;\n\n      // Otherwise, generate a new x and y.\n      else do {\n        x = source() * 2 - 1;\n        y = source() * 2 - 1;\n        r = x * x + y * y;\n      } while (!r || r > 1);\n\n      return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n    };\n  }\n\n  randomNormal.source = sourceRandomNormal;\n\n  return randomNormal;\n})(defaultSource$1);\n\nvar logNormal = (function sourceRandomLogNormal(source) {\n  function randomLogNormal() {\n    var randomNormal = normal.source(source).apply(this, arguments);\n    return function() {\n      return Math.exp(randomNormal());\n    };\n  }\n\n  randomLogNormal.source = sourceRandomLogNormal;\n\n  return randomLogNormal;\n})(defaultSource$1);\n\nvar irwinHall = (function sourceRandomIrwinHall(source) {\n  function randomIrwinHall(n) {\n    return function() {\n      for (var sum = 0, i = 0; i < n; ++i) sum += source();\n      return sum;\n    };\n  }\n\n  randomIrwinHall.source = sourceRandomIrwinHall;\n\n  return randomIrwinHall;\n})(defaultSource$1);\n\nvar bates = (function sourceRandomBates(source) {\n  function randomBates(n) {\n    var randomIrwinHall = irwinHall.source(source)(n);\n    return function() {\n      return randomIrwinHall() / n;\n    };\n  }\n\n  randomBates.source = sourceRandomBates;\n\n  return randomBates;\n})(defaultSource$1);\n\nvar exponential$1 = (function sourceRandomExponential(source) {\n  function randomExponential(lambda) {\n    return function() {\n      return -Math.log(1 - source()) / lambda;\n    };\n  }\n\n  randomExponential.source = sourceRandomExponential;\n\n  return randomExponential;\n})(defaultSource$1);\n\nfunction initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nfunction initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.interpolator(domain); break;\n    default: this.interpolator(interpolator).domain(domain); break;\n  }\n  return this;\n}\n\nvar array$3 = Array.prototype;\n\nvar map$2 = array$3.map;\nvar slice$5 = array$3.slice;\n\nvar implicit = {name: \"implicit\"};\n\nfunction ordinal() {\n  var index = map$1(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    var key = d + \"\", i = index.get(key);\n    if (!i) {\n      if (unknown !== implicit) return unknown;\n      index.set(key, i = domain.push(d));\n    }\n    return range[(i - 1) % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = map$1();\n    var i = -1, n = _.length, d, key;\n    while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice$5.call(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nfunction band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      range$$1 = [0, 1],\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = range$$1[1] < range$$1[0],\n        start = range$$1[reverse - 0],\n        stop = range$$1[1 - reverse];\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range$$1 = [+_[0], +_[1]], round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), range$$1)\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nfunction point$1() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n\nfunction constant$a(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction number$2(x) {\n  return +x;\n}\n\nvar unit = [0, 1];\n\nfunction identity$6(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant$a(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(domain) {\n  var a = domain[0], b = domain[domain.length - 1], t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate$$1) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate$$1(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate$$1(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate$$1) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate$$1(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisectRight(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nfunction copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nfunction transformer$1() {\n  var domain = unit,\n      range = unit,\n      interpolate$$1 = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity$6,\n      piecewise$$1,\n      output,\n      input;\n\n  function rescale() {\n    piecewise$$1 = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (output || (output = piecewise$$1(domain.map(transform), range, interpolate$$1)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise$$1(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = map$2.call(_, number$2), clamp === identity$6 || (clamp = clamper(domain)), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice$5.call(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = slice$5.call(_), interpolate$$1 = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? clamper(domain) : identity$6, scale) : clamp !== identity$6;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nfunction continuous(transform, untransform) {\n  return transformer$1()(transform, untransform);\n}\n\nfunction tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return exports.formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return exports.format(specifier);\n}\n\nfunction linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain(),\n        i0 = 0,\n        i1 = d.length - 1,\n        start = d[i0],\n        stop = d[i1],\n        step;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n\n    step = tickIncrement(start, stop, count);\n\n    if (step > 0) {\n      start = Math.floor(start / step) * step;\n      stop = Math.ceil(stop / step) * step;\n      step = tickIncrement(start, stop, count);\n    } else if (step < 0) {\n      start = Math.ceil(start * step) / step;\n      stop = Math.floor(stop * step) / step;\n      step = tickIncrement(start, stop, count);\n    }\n\n    if (step > 0) {\n      d[i0] = Math.floor(start / step) * step;\n      d[i1] = Math.ceil(stop / step) * step;\n      domain(d);\n    } else if (step < 0) {\n      d[i0] = Math.ceil(start * step) / step;\n      d[i1] = Math.floor(stop * step) / step;\n      domain(d);\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nfunction linear$2() {\n  var scale = continuous(identity$6, identity$6);\n\n  scale.copy = function() {\n    return copy(scale, linear$2());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n\nfunction identity$7(domain) {\n  var unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : x;\n  }\n\n  scale.invert = scale;\n\n  scale.domain = scale.range = function(_) {\n    return arguments.length ? (domain = map$2.call(_, number$2), scale) : domain.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return identity$7(domain).unknown(unknown);\n  };\n\n  domain = arguments.length ? map$2.call(domain, number$2) : [0, 1];\n\n  return linearish(scale);\n}\n\nfunction nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n  return function(x) {\n    return -f(-x);\n  };\n}\n\nfunction loggish(transform) {\n  var scale = transform(transformLog, transformExp),\n      domain = scale.domain,\n      base = 10,\n      logs,\n      pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = function(count) {\n    var d = domain(),\n        u = d[0],\n        v = d[d.length - 1],\n        r;\n\n    if (r = v < u) i = u, u = v, v = i;\n\n    var i = logs(u),\n        j = logs(v),\n        p,\n        k,\n        t,\n        n = count == null ? 10 : +count,\n        z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.round(i) - 1, j = Math.round(j) + 1;\n      if (u > 0) for (; i < j; ++i) {\n        for (k = 1, p = pows(i); k < base; ++k) {\n          t = p * k;\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i < j; ++i) {\n        for (k = base - 1, p = pows(i); k >= 1; --k) {\n          t = p * k;\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n    if (typeof specifier !== \"function\") specifier = exports.format(specifier);\n    if (count === Infinity) return specifier;\n    if (count == null) count = 10;\n    var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return function(d) {\n      var i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = function() {\n    return domain(nice(domain(), {\n      floor: function(x) { return pows(Math.floor(logs(x))); },\n      ceil: function(x) { return pows(Math.ceil(logs(x))); }\n    }));\n  };\n\n  return scale;\n}\n\nfunction log$1() {\n  var scale = loggish(transformer$1()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, log$1()).base(scale.base());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nfunction transformSymlog(c) {\n  return function(x) {\n    return Math.sign(x) * Math.log1p(Math.abs(x / c));\n  };\n}\n\nfunction transformSymexp(c) {\n  return function(x) {\n    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n  };\n}\n\nfunction symlogish(transform) {\n  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n  scale.constant = function(_) {\n    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n  };\n\n  return linearish(scale);\n}\n\nfunction symlog() {\n  var scale = symlogish(transformer$1());\n\n  scale.copy = function() {\n    return copy(scale, symlog()).constant(scale.constant());\n  };\n\n  return initRange.apply(scale, arguments);\n}\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nfunction powish(transform) {\n  var scale = transform(identity$6, identity$6),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity$6, identity$6)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nfunction pow$1() {\n  var scale = powish(transformer$1());\n\n  scale.copy = function() {\n    return copy(scale, pow$1()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nfunction sqrt$1() {\n  return pow$1.apply(null, arguments).exponent(0.5);\n}\n\nfunction quantile$$1() {\n  var domain = [],\n      range = [],\n      thresholds = [],\n      unknown;\n\n  function rescale() {\n    var i = 0, n = Math.max(1, range.length);\n    thresholds = new Array(n - 1);\n    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n    return scale;\n  }\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : range[bisectRight(thresholds, x)];\n  }\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN] : [\n      i > 0 ? thresholds[i - 1] : domain[0],\n      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n    ];\n  };\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return rescale();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice$5.call(_), rescale()) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.quantiles = function() {\n    return thresholds.slice();\n  };\n\n  scale.copy = function() {\n    return quantile$$1()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n\nfunction quantize$1() {\n  var x0 = 0,\n      x1 = 1,\n      n = 1,\n      domain = [0.5],\n      range = [0, 1],\n      unknown;\n\n  function scale(x) {\n    return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown;\n  }\n\n  function rescale() {\n    var i = -1;\n    domain = new Array(n);\n    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n    return scale;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (n = (range = slice$5.call(_)).length - 1, rescale()) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN]\n        : i < 1 ? [x0, domain[0]]\n        : i >= n ? [domain[n - 1], x1]\n        : [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : scale;\n  };\n\n  scale.thresholds = function() {\n    return domain.slice();\n  };\n\n  scale.copy = function() {\n    return quantize$1()\n        .domain([x0, x1])\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(linearish(scale), arguments);\n}\n\nfunction threshold$1() {\n  var domain = [0.5],\n      range = [0, 1],\n      unknown,\n      n = 1;\n\n  function scale(x) {\n    return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = slice$5.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice$5.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return threshold$1()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n\nvar t0$1 = new Date,\n    t1$1 = new Date;\n\nfunction newInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = new Date(+date)), date;\n  }\n\n  interval.floor = interval;\n\n  interval.ceil = function(date) {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = function(date) {\n    var d0 = interval(date),\n        d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = function(date, step) {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = function(start, stop, step) {\n    var range = [], previous;\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = function(test) {\n    return newInterval(function(date) {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, function(date, step) {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = function(start, end) {\n      t0$1.setTime(+start), t1$1.setTime(+end);\n      floori(t0$1), floori(t1$1);\n      return Math.floor(count(t0$1, t1$1));\n    };\n\n    interval.every = function(step) {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? function(d) { return field(d) % step === 0; }\n              : function(d) { return interval.count(0, d) % step === 0; });\n    };\n  }\n\n  return interval;\n}\n\nvar millisecond = newInterval(function() {\n  // noop\n}, function(date, step) {\n  date.setTime(+date + step);\n}, function(start, end) {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return newInterval(function(date) {\n    date.setTime(Math.floor(date / k) * k);\n  }, function(date, step) {\n    date.setTime(+date + step * k);\n  }, function(start, end) {\n    return (end - start) / k;\n  });\n};\nvar milliseconds = millisecond.range;\n\nvar durationSecond = 1e3;\nvar durationMinute = 6e4;\nvar durationHour = 36e5;\nvar durationDay = 864e5;\nvar durationWeek = 6048e5;\n\nvar second = newInterval(function(date) {\n  date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n  date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n  return (end - start) / durationSecond;\n}, function(date) {\n  return date.getUTCSeconds();\n});\nvar seconds = second.range;\n\nvar minute = newInterval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getMinutes();\n});\nvar minutes = minute.range;\n\nvar hour = newInterval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getHours();\n});\nvar hours = hour.range;\n\nvar day = newInterval(function(date) {\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setDate(date.getDate() + step);\n}, function(start, end) {\n  return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n  return date.getDate() - 1;\n});\nvar days = day.range;\n\nfunction weekday(i) {\n  return newInterval(function(date) {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step * 7);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nvar sunday = weekday(0);\nvar monday = weekday(1);\nvar tuesday = weekday(2);\nvar wednesday = weekday(3);\nvar thursday = weekday(4);\nvar friday = weekday(5);\nvar saturday = weekday(6);\n\nvar sundays = sunday.range;\nvar mondays = monday.range;\nvar tuesdays = tuesday.range;\nvar wednesdays = wednesday.range;\nvar thursdays = thursday.range;\nvar fridays = friday.range;\nvar saturdays = saturday.range;\n\nvar month = newInterval(function(date) {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n  return date.getMonth();\n});\nvar months = month.range;\n\nvar year = newInterval(function(date) {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n  return end.getFullYear() - start.getFullYear();\n}, function(date) {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\nvar years = year.range;\n\nvar utcMinute = newInterval(function(date) {\n  date.setUTCSeconds(0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getUTCMinutes();\n});\nvar utcMinutes = utcMinute.range;\n\nvar utcHour = newInterval(function(date) {\n  date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getUTCHours();\n});\nvar utcHours = utcHour.range;\n\nvar utcDay = newInterval(function(date) {\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n  return (end - start) / durationDay;\n}, function(date) {\n  return date.getUTCDate() - 1;\n});\nvar utcDays = utcDay.range;\n\nfunction utcWeekday(i) {\n  return newInterval(function(date) {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, function(start, end) {\n    return (end - start) / durationWeek;\n  });\n}\n\nvar utcSunday = utcWeekday(0);\nvar utcMonday = utcWeekday(1);\nvar utcTuesday = utcWeekday(2);\nvar utcWednesday = utcWeekday(3);\nvar utcThursday = utcWeekday(4);\nvar utcFriday = utcWeekday(5);\nvar utcSaturday = utcWeekday(6);\n\nvar utcSundays = utcSunday.range;\nvar utcMondays = utcMonday.range;\nvar utcTuesdays = utcTuesday.range;\nvar utcWednesdays = utcWednesday.range;\nvar utcThursdays = utcThursday.range;\nvar utcFridays = utcFriday.range;\nvar utcSaturdays = utcSaturday.range;\n\nvar utcMonth = newInterval(function(date) {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n  return date.getUTCMonth();\n});\nvar utcMonths = utcMonth.range;\n\nvar utcYear = newInterval(function(date) {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\nvar utcYears = utcYear.range;\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n  return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nfunction formatLocale$1(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear$1,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, newDate) {\n    return function(string) {\n      var d = newYear(1900),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day$$1;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newYear(d.y)), day$$1 = week.getUTCDay();\n          week = day$$1 > 4 || day$$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = newDate(newYear(d.y)), day$$1 = week.getDay();\n          week = day$$1 > 4 || day$$1 === 0 ? monday.ceil(week) : monday(week);\n          week = day.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day$$1 = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day$$1 + 5) % 7 : d.w + d.U * 7 - (day$$1 + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return newDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", localDate);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier, utcDate);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad$1(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  var map = {}, i = -1, n = names.length;\n  while (++i < n) map[names[i].toLowerCase()] = i;\n  return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad$1(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad$1(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad$1(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad$1(1 + day.count(year(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad$1(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad$1(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad$1(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad$1(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day$$1 = d.getDay();\n  return day$$1 === 0 ? 7 : day$$1;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad$1(sunday.count(year(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  var day$$1 = d.getDay();\n  d = (day$$1 >= 4 || day$$1 === 0) ? thursday(d) : thursday.ceil(d);\n  return pad$1(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad$1(monday.count(year(d), d), p, 2);\n}\n\nfunction formatYear$1(d, p) {\n  return pad$1(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad$1(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad$1(z / 60 | 0, \"0\", 2)\n      + pad$1(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad$1(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad$1(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad$1(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad$1(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad$1(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad$1(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad$1(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad$1(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad$1(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  var day$$1 = d.getUTCDay();\n  d = (day$$1 >= 4 || day$$1 === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad$1(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad$1(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad$1(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad$1(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n\nvar locale$1;\n\ndefaultLocale$1({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nfunction defaultLocale$1(definition) {\n  locale$1 = formatLocale$1(definition);\n  exports.timeFormat = locale$1.format;\n  exports.timeParse = locale$1.parse;\n  exports.utcFormat = locale$1.utcFormat;\n  exports.utcParse = locale$1.utcParse;\n  return locale$1;\n}\n\nvar isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n  return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n    ? formatIsoNative\n    : exports.utcFormat(isoSpecifier);\n\nfunction parseIsoNative(string) {\n  var date = new Date(string);\n  return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n    ? parseIsoNative\n    : exports.utcParse(isoSpecifier);\n\nvar durationSecond$1 = 1000,\n    durationMinute$1 = durationSecond$1 * 60,\n    durationHour$1 = durationMinute$1 * 60,\n    durationDay$1 = durationHour$1 * 24,\n    durationWeek$1 = durationDay$1 * 7,\n    durationMonth = durationDay$1 * 30,\n    durationYear = durationDay$1 * 365;\n\nfunction date$1(t) {\n  return new Date(t);\n}\n\nfunction number$3(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nfunction calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format) {\n  var scale = continuous(identity$6, identity$6),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  var tickIntervals = [\n    [second$$1,  1,      durationSecond$1],\n    [second$$1,  5,  5 * durationSecond$1],\n    [second$$1, 15, 15 * durationSecond$1],\n    [second$$1, 30, 30 * durationSecond$1],\n    [minute$$1,  1,      durationMinute$1],\n    [minute$$1,  5,  5 * durationMinute$1],\n    [minute$$1, 15, 15 * durationMinute$1],\n    [minute$$1, 30, 30 * durationMinute$1],\n    [  hour$$1,  1,      durationHour$1  ],\n    [  hour$$1,  3,  3 * durationHour$1  ],\n    [  hour$$1,  6,  6 * durationHour$1  ],\n    [  hour$$1, 12, 12 * durationHour$1  ],\n    [   day$$1,  1,      durationDay$1   ],\n    [   day$$1,  2,  2 * durationDay$1   ],\n    [  week,  1,      durationWeek$1  ],\n    [ month$$1,  1,      durationMonth ],\n    [ month$$1,  3,  3 * durationMonth ],\n    [  year$$1,  1,      durationYear  ]\n  ];\n\n  function tickFormat(date) {\n    return (second$$1(date) < date ? formatMillisecond\n        : minute$$1(date) < date ? formatSecond\n        : hour$$1(date) < date ? formatMinute\n        : day$$1(date) < date ? formatHour\n        : month$$1(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year$$1(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  function tickInterval(interval, start, stop, step) {\n    if (interval == null) interval = 10;\n\n    // If a desired tick count is specified, pick a reasonable tick interval\n    // based on the extent of the domain and a rough estimate of tick size.\n    // Otherwise, assume interval is already a time interval and use it.\n    if (typeof interval === \"number\") {\n      var target = Math.abs(stop - start) / interval,\n          i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n      if (i === tickIntervals.length) {\n        step = tickStep(start / durationYear, stop / durationYear, interval);\n        interval = year$$1;\n      } else if (i) {\n        i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n        step = i[1];\n        interval = i[0];\n      } else {\n        step = Math.max(tickStep(start, stop, interval), 1);\n        interval = millisecond$$1;\n      }\n    }\n\n    return step == null ? interval : interval.every(step);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(map$2.call(_, number$3)) : domain().map(date$1);\n  };\n\n  scale.ticks = function(interval, step) {\n    var d = domain(),\n        t0 = d[0],\n        t1 = d[d.length - 1],\n        r = t1 < t0,\n        t;\n    if (r) t = t0, t0 = t1, t1 = t;\n    t = tickInterval(interval, t0, t1, step);\n    t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n    return r ? t.reverse() : t;\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval, step) {\n    var d = domain();\n    return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n        ? domain(nice(d, interval))\n        : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format));\n  };\n\n  return scale;\n}\n\nfunction time() {\n  return initRange.apply(calendar(year, month, sunday, day, hour, minute, second, millisecond, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n\nfunction utcTime() {\n  return initRange.apply(calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n\nfunction transformer$2() {\n  var x0 = 0,\n      x1 = 1,\n      t0,\n      t1,\n      k10,\n      transform,\n      interpolator = identity$6,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n    return scale;\n  };\n}\n\nfunction copy$1(source, target) {\n  return target\n      .domain(source.domain())\n      .interpolator(source.interpolator())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nfunction sequential() {\n  var scale = linearish(transformer$2()(identity$6));\n\n  scale.copy = function() {\n    return copy$1(scale, sequential());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialLog() {\n  var scale = loggish(transformer$2()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy$1(scale, sequentialLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialSymlog() {\n  var scale = symlogish(transformer$2());\n\n  scale.copy = function() {\n    return copy$1(scale, sequentialSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialPow() {\n  var scale = powish(transformer$2());\n\n  scale.copy = function() {\n    return copy$1(scale, sequentialPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialSqrt() {\n  return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n\nfunction sequentialQuantile() {\n  var domain = [],\n      interpolator = identity$6;\n\n  function scale(x) {\n    if (!isNaN(x = +x)) return interpolator((bisectRight(domain, x) - 1) / (domain.length - 1));\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return scale;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.copy = function() {\n    return sequentialQuantile(interpolator).domain(domain);\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction transformer$3() {\n  var x0 = 0,\n      x1 = 0.5,\n      x2 = 1,\n      t0,\n      t1,\n      t2,\n      k10,\n      k21,\n      interpolator = identity$6,\n      transform,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), t2 = transform(x2 = +_[2]), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1);\n    return scale;\n  };\n}\n\nfunction diverging() {\n  var scale = linearish(transformer$3()(identity$6));\n\n  scale.copy = function() {\n    return copy$1(scale, diverging());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingLog() {\n  var scale = loggish(transformer$3()).domain([0.1, 1, 10]);\n\n  scale.copy = function() {\n    return copy$1(scale, divergingLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingSymlog() {\n  var scale = symlogish(transformer$3());\n\n  scale.copy = function() {\n    return copy$1(scale, divergingSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingPow() {\n  var scale = powish(transformer$3());\n\n  scale.copy = function() {\n    return copy$1(scale, divergingPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingSqrt() {\n  return divergingPow.apply(null, arguments).exponent(0.5);\n}\n\nfunction colors(specifier) {\n  var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n  while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n  return colors;\n}\n\nvar category10 = colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n\nvar Accent = colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n\nvar Dark2 = colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n\nvar Paired = colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n\nvar Pastel1 = colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n\nvar Pastel2 = colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n\nvar Set1 = colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n\nvar Set2 = colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n\nvar Set3 = colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n\nfunction ramp(scheme) {\n  return rgbBasis(scheme[scheme.length - 1]);\n}\n\nvar scheme = new Array(3).concat(\n  \"d8b365f5f5f55ab4ac\",\n  \"a6611adfc27d80cdc1018571\",\n  \"a6611adfc27df5f5f580cdc1018571\",\n  \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n  \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n  \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n  \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n  \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n  \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nvar BrBG = ramp(scheme);\n\nvar scheme$1 = new Array(3).concat(\n  \"af8dc3f7f7f77fbf7b\",\n  \"7b3294c2a5cfa6dba0008837\",\n  \"7b3294c2a5cff7f7f7a6dba0008837\",\n  \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n  \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n  \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n  \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n  \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n  \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nvar PRGn = ramp(scheme$1);\n\nvar scheme$2 = new Array(3).concat(\n  \"e9a3c9f7f7f7a1d76a\",\n  \"d01c8bf1b6dab8e1864dac26\",\n  \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n  \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n  \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n  \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n  \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n  \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n  \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nvar PiYG = ramp(scheme$2);\n\nvar scheme$3 = new Array(3).concat(\n  \"998ec3f7f7f7f1a340\",\n  \"5e3c99b2abd2fdb863e66101\",\n  \"5e3c99b2abd2f7f7f7fdb863e66101\",\n  \"542788998ec3d8daebfee0b6f1a340b35806\",\n  \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n  \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n  \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n  \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n  \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nvar PuOr = ramp(scheme$3);\n\nvar scheme$4 = new Array(3).concat(\n  \"ef8a62f7f7f767a9cf\",\n  \"ca0020f4a58292c5de0571b0\",\n  \"ca0020f4a582f7f7f792c5de0571b0\",\n  \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n  \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n  \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n  \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n  \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n  \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nvar RdBu = ramp(scheme$4);\n\nvar scheme$5 = new Array(3).concat(\n  \"ef8a62ffffff999999\",\n  \"ca0020f4a582bababa404040\",\n  \"ca0020f4a582ffffffbababa404040\",\n  \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n  \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n  \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n  \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n  \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n  \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nvar RdGy = ramp(scheme$5);\n\nvar scheme$6 = new Array(3).concat(\n  \"fc8d59ffffbf91bfdb\",\n  \"d7191cfdae61abd9e92c7bb6\",\n  \"d7191cfdae61ffffbfabd9e92c7bb6\",\n  \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n  \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n  \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n  \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n  \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n  \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nvar RdYlBu = ramp(scheme$6);\n\nvar scheme$7 = new Array(3).concat(\n  \"fc8d59ffffbf91cf60\",\n  \"d7191cfdae61a6d96a1a9641\",\n  \"d7191cfdae61ffffbfa6d96a1a9641\",\n  \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n  \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n  \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n  \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n  \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n  \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nvar RdYlGn = ramp(scheme$7);\n\nvar scheme$8 = new Array(3).concat(\n  \"fc8d59ffffbf99d594\",\n  \"d7191cfdae61abdda42b83ba\",\n  \"d7191cfdae61ffffbfabdda42b83ba\",\n  \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n  \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n  \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n  \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n  \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n  \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nvar Spectral = ramp(scheme$8);\n\nvar scheme$9 = new Array(3).concat(\n  \"e5f5f999d8c92ca25f\",\n  \"edf8fbb2e2e266c2a4238b45\",\n  \"edf8fbb2e2e266c2a42ca25f006d2c\",\n  \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n  \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nvar BuGn = ramp(scheme$9);\n\nvar scheme$a = new Array(3).concat(\n  \"e0ecf49ebcda8856a7\",\n  \"edf8fbb3cde38c96c688419d\",\n  \"edf8fbb3cde38c96c68856a7810f7c\",\n  \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n  \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nvar BuPu = ramp(scheme$a);\n\nvar scheme$b = new Array(3).concat(\n  \"e0f3dba8ddb543a2ca\",\n  \"f0f9e8bae4bc7bccc42b8cbe\",\n  \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n  \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n  \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nvar GnBu = ramp(scheme$b);\n\nvar scheme$c = new Array(3).concat(\n  \"fee8c8fdbb84e34a33\",\n  \"fef0d9fdcc8afc8d59d7301f\",\n  \"fef0d9fdcc8afc8d59e34a33b30000\",\n  \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n  \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nvar OrRd = ramp(scheme$c);\n\nvar scheme$d = new Array(3).concat(\n  \"ece2f0a6bddb1c9099\",\n  \"f6eff7bdc9e167a9cf02818a\",\n  \"f6eff7bdc9e167a9cf1c9099016c59\",\n  \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n  \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nvar PuBuGn = ramp(scheme$d);\n\nvar scheme$e = new Array(3).concat(\n  \"ece7f2a6bddb2b8cbe\",\n  \"f1eef6bdc9e174a9cf0570b0\",\n  \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n  \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n  \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nvar PuBu = ramp(scheme$e);\n\nvar scheme$f = new Array(3).concat(\n  \"e7e1efc994c7dd1c77\",\n  \"f1eef6d7b5d8df65b0ce1256\",\n  \"f1eef6d7b5d8df65b0dd1c77980043\",\n  \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n  \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nvar PuRd = ramp(scheme$f);\n\nvar scheme$g = new Array(3).concat(\n  \"fde0ddfa9fb5c51b8a\",\n  \"feebe2fbb4b9f768a1ae017e\",\n  \"feebe2fbb4b9f768a1c51b8a7a0177\",\n  \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n  \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nvar RdPu = ramp(scheme$g);\n\nvar scheme$h = new Array(3).concat(\n  \"edf8b17fcdbb2c7fb8\",\n  \"ffffcca1dab441b6c4225ea8\",\n  \"ffffcca1dab441b6c42c7fb8253494\",\n  \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n  \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nvar YlGnBu = ramp(scheme$h);\n\nvar scheme$i = new Array(3).concat(\n  \"f7fcb9addd8e31a354\",\n  \"ffffccc2e69978c679238443\",\n  \"ffffccc2e69978c67931a354006837\",\n  \"ffffccd9f0a3addd8e78c67931a354006837\",\n  \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nvar YlGn = ramp(scheme$i);\n\nvar scheme$j = new Array(3).concat(\n  \"fff7bcfec44fd95f0e\",\n  \"ffffd4fed98efe9929cc4c02\",\n  \"ffffd4fed98efe9929d95f0e993404\",\n  \"ffffd4fee391fec44ffe9929d95f0e993404\",\n  \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nvar YlOrBr = ramp(scheme$j);\n\nvar scheme$k = new Array(3).concat(\n  \"ffeda0feb24cf03b20\",\n  \"ffffb2fecc5cfd8d3ce31a1c\",\n  \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n  \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n  \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nvar YlOrRd = ramp(scheme$k);\n\nvar scheme$l = new Array(3).concat(\n  \"deebf79ecae13182bd\",\n  \"eff3ffbdd7e76baed62171b5\",\n  \"eff3ffbdd7e76baed63182bd08519c\",\n  \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n  \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nvar Blues = ramp(scheme$l);\n\nvar scheme$m = new Array(3).concat(\n  \"e5f5e0a1d99b31a354\",\n  \"edf8e9bae4b374c476238b45\",\n  \"edf8e9bae4b374c47631a354006d2c\",\n  \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n  \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nvar Greens = ramp(scheme$m);\n\nvar scheme$n = new Array(3).concat(\n  \"f0f0f0bdbdbd636363\",\n  \"f7f7f7cccccc969696525252\",\n  \"f7f7f7cccccc969696636363252525\",\n  \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n  \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nvar Greys = ramp(scheme$n);\n\nvar scheme$o = new Array(3).concat(\n  \"efedf5bcbddc756bb1\",\n  \"f2f0f7cbc9e29e9ac86a51a3\",\n  \"f2f0f7cbc9e29e9ac8756bb154278f\",\n  \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n  \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nvar Purples = ramp(scheme$o);\n\nvar scheme$p = new Array(3).concat(\n  \"fee0d2fc9272de2d26\",\n  \"fee5d9fcae91fb6a4acb181d\",\n  \"fee5d9fcae91fb6a4ade2d26a50f15\",\n  \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n  \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nvar Reds = ramp(scheme$p);\n\nvar scheme$q = new Array(3).concat(\n  \"fee6cefdae6be6550d\",\n  \"feeddefdbe85fd8d3cd94701\",\n  \"feeddefdbe85fd8d3ce6550da63603\",\n  \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n  \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nvar Oranges = ramp(scheme$q);\n\nvar cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n\nvar warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nfunction rainbow(t) {\n  if (t < 0 || t > 1) t -= Math.floor(t);\n  var ts = Math.abs(t - 0.5);\n  c.h = 360 * t - 100;\n  c.s = 1.5 - 1.5 * ts;\n  c.l = 0.8 - 0.9 * ts;\n  return c + \"\";\n}\n\nvar c$1 = rgb(),\n    pi_1_3 = Math.PI / 3,\n    pi_2_3 = Math.PI * 2 / 3;\n\nfunction sinebow(t) {\n  var x;\n  t = (0.5 - t) * Math.PI;\n  c$1.r = 255 * (x = Math.sin(t)) * x;\n  c$1.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n  c$1.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n  return c$1 + \"\";\n}\n\nfunction ramp$1(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n\nvar viridis = ramp$1(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nvar magma = ramp$1(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nvar inferno = ramp$1(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nvar plasma = ramp$1(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n\nfunction constant$b(x) {\n  return function constant() {\n    return x;\n  };\n}\n\nvar abs$1 = Math.abs;\nvar atan2$1 = Math.atan2;\nvar cos$2 = Math.cos;\nvar max$2 = Math.max;\nvar min$1 = Math.min;\nvar sin$2 = Math.sin;\nvar sqrt$2 = Math.sqrt;\n\nvar epsilon$3 = 1e-12;\nvar pi$4 = Math.PI;\nvar halfPi$3 = pi$4 / 2;\nvar tau$4 = 2 * pi$4;\n\nfunction acos$1(x) {\n  return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);\n}\n\nfunction asin$1(x) {\n  return x >= 1 ? halfPi$3 : x <= -1 ? -halfPi$3 : Math.asin(x);\n}\n\nfunction arcInnerRadius(d) {\n  return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n  return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n  return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n  return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n  var x10 = x1 - x0, y10 = y1 - y0,\n      x32 = x3 - x2, y32 = y3 - y2,\n      t = y32 * x10 - x32 * y10;\n  if (t * t < epsilon$3) return;\n  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n  return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n  var x01 = x0 - x1,\n      y01 = y0 - y1,\n      lo = (cw ? rc : -rc) / sqrt$2(x01 * x01 + y01 * y01),\n      ox = lo * y01,\n      oy = -lo * x01,\n      x11 = x0 + ox,\n      y11 = y0 + oy,\n      x10 = x1 + ox,\n      y10 = y1 + oy,\n      x00 = (x11 + x10) / 2,\n      y00 = (y11 + y10) / 2,\n      dx = x10 - x11,\n      dy = y10 - y11,\n      d2 = dx * dx + dy * dy,\n      r = r1 - rc,\n      D = x11 * y10 - x10 * y11,\n      d = (dy < 0 ? -1 : 1) * sqrt$2(max$2(0, r * r * d2 - D * D)),\n      cx0 = (D * dy - dx * d) / d2,\n      cy0 = (-D * dx - dy * d) / d2,\n      cx1 = (D * dy + dx * d) / d2,\n      cy1 = (-D * dx + dy * d) / d2,\n      dx0 = cx0 - x00,\n      dy0 = cy0 - y00,\n      dx1 = cx1 - x00,\n      dy1 = cy1 - y00;\n\n  // Pick the closer of the two intersection points.\n  // TODO Is there a faster way to determine which intersection to use?\n  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n  return {\n    cx: cx0,\n    cy: cy0,\n    x01: -ox,\n    y01: -oy,\n    x11: cx0 * (r1 / r - 1),\n    y11: cy0 * (r1 / r - 1)\n  };\n}\n\nfunction arc() {\n  var innerRadius = arcInnerRadius,\n      outerRadius = arcOuterRadius,\n      cornerRadius = constant$b(0),\n      padRadius = null,\n      startAngle = arcStartAngle,\n      endAngle = arcEndAngle,\n      padAngle = arcPadAngle,\n      context = null;\n\n  function arc() {\n    var buffer,\n        r,\n        r0 = +innerRadius.apply(this, arguments),\n        r1 = +outerRadius.apply(this, arguments),\n        a0 = startAngle.apply(this, arguments) - halfPi$3,\n        a1 = endAngle.apply(this, arguments) - halfPi$3,\n        da = abs$1(a1 - a0),\n        cw = a1 > a0;\n\n    if (!context) context = buffer = path();\n\n    // Ensure that the outer radius is always larger than the inner radius.\n    if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n    // Is it a point?\n    if (!(r1 > epsilon$3)) context.moveTo(0, 0);\n\n    // Or is it a circle or annulus?\n    else if (da > tau$4 - epsilon$3) {\n      context.moveTo(r1 * cos$2(a0), r1 * sin$2(a0));\n      context.arc(0, 0, r1, a0, a1, !cw);\n      if (r0 > epsilon$3) {\n        context.moveTo(r0 * cos$2(a1), r0 * sin$2(a1));\n        context.arc(0, 0, r0, a1, a0, cw);\n      }\n    }\n\n    // Or is it a circular or annular sector?\n    else {\n      var a01 = a0,\n          a11 = a1,\n          a00 = a0,\n          a10 = a1,\n          da0 = da,\n          da1 = da,\n          ap = padAngle.apply(this, arguments) / 2,\n          rp = (ap > epsilon$3) && (padRadius ? +padRadius.apply(this, arguments) : sqrt$2(r0 * r0 + r1 * r1)),\n          rc = min$1(abs$1(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n          rc0 = rc,\n          rc1 = rc,\n          t0,\n          t1;\n\n      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n      if (rp > epsilon$3) {\n        var p0 = asin$1(rp / r0 * sin$2(ap)),\n            p1 = asin$1(rp / r1 * sin$2(ap));\n        if ((da0 -= p0 * 2) > epsilon$3) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n        else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n        if ((da1 -= p1 * 2) > epsilon$3) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n        else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n      }\n\n      var x01 = r1 * cos$2(a01),\n          y01 = r1 * sin$2(a01),\n          x10 = r0 * cos$2(a10),\n          y10 = r0 * sin$2(a10);\n\n      // Apply rounded corners?\n      if (rc > epsilon$3) {\n        var x11 = r1 * cos$2(a11),\n            y11 = r1 * sin$2(a11),\n            x00 = r0 * cos$2(a00),\n            y00 = r0 * sin$2(a00),\n            oc;\n\n        // Restrict the corner radius according to the sector angle.\n        if (da < pi$4 && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n          var ax = x01 - oc[0],\n              ay = y01 - oc[1],\n              bx = x11 - oc[0],\n              by = y11 - oc[1],\n              kc = 1 / sin$2(acos$1((ax * bx + ay * by) / (sqrt$2(ax * ax + ay * ay) * sqrt$2(bx * bx + by * by))) / 2),\n              lc = sqrt$2(oc[0] * oc[0] + oc[1] * oc[1]);\n          rc0 = min$1(rc, (r0 - lc) / (kc - 1));\n          rc1 = min$1(rc, (r1 - lc) / (kc + 1));\n        }\n      }\n\n      // Is the sector collapsed to a line?\n      if (!(da1 > epsilon$3)) context.moveTo(x01, y01);\n\n      // Does the sector’s outer ring have rounded corners?\n      else if (rc1 > epsilon$3) {\n        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r1, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n          context.arc(t1.cx, t1.cy, rc1, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the outer ring just a circular arc?\n      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n      // Is there no inner ring, and it’s a circular sector?\n      // Or perhaps it’s an annular sector collapsed due to padding?\n      if (!(r0 > epsilon$3) || !(da0 > epsilon$3)) context.lineTo(x10, y10);\n\n      // Does the sector’s inner ring (or point) have rounded corners?\n      else if (rc0 > epsilon$3) {\n        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r0, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n          context.arc(t1.cx, t1.cy, rc0, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the inner ring just a circular arc?\n      else context.arc(0, 0, r0, a10, a00, cw);\n    }\n\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  arc.centroid = function() {\n    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$4 / 2;\n    return [cos$2(a) * r, sin$2(a) * r];\n  };\n\n  arc.innerRadius = function(_) {\n    return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant$b(+_), arc) : innerRadius;\n  };\n\n  arc.outerRadius = function(_) {\n    return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant$b(+_), arc) : outerRadius;\n  };\n\n  arc.cornerRadius = function(_) {\n    return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant$b(+_), arc) : cornerRadius;\n  };\n\n  arc.padRadius = function(_) {\n    return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant$b(+_), arc) : padRadius;\n  };\n\n  arc.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$b(+_), arc) : startAngle;\n  };\n\n  arc.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$b(+_), arc) : endAngle;\n  };\n\n  arc.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant$b(+_), arc) : padAngle;\n  };\n\n  arc.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n  };\n\n  return arc;\n}\n\nfunction Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nfunction curveLinear(context) {\n  return new Linear(context);\n}\n\nfunction x$3(p) {\n  return p[0];\n}\n\nfunction y$3(p) {\n  return p[1];\n}\n\nfunction line() {\n  var x$$1 = x$3,\n      y$$1 = y$3,\n      defined = constant$b(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  function line(data) {\n    var i,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x$$1(d, i, data), +y$$1(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x$$1 = typeof _ === \"function\" ? _ : constant$b(+_), line) : x$$1;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y$$1 = typeof _ === \"function\" ? _ : constant$b(+_), line) : y$$1;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant$b(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n\nfunction area$3() {\n  var x0 = x$3,\n      x1 = null,\n      y0 = constant$b(0),\n      y1 = y$3,\n      defined = constant$b(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  function area(data) {\n    var i,\n        j,\n        k,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer,\n        x0z = new Array(n),\n        y0z = new Array(n);\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) {\n          j = i;\n          output.areaStart();\n          output.lineStart();\n        } else {\n          output.lineEnd();\n          output.lineStart();\n          for (k = i - 1; k >= j; --k) {\n            output.point(x0z[k], y0z[k]);\n          }\n          output.lineEnd();\n          output.areaEnd();\n        }\n      }\n      if (defined0) {\n        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n      }\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  function arealine() {\n    return line().defined(defined).curve(curve).context(context);\n  }\n\n  area.x = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant$b(+_), x1 = null, area) : x0;\n  };\n\n  area.x0 = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant$b(+_), area) : x0;\n  };\n\n  area.x1 = function(_) {\n    return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant$b(+_), area) : x1;\n  };\n\n  area.y = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant$b(+_), y1 = null, area) : y0;\n  };\n\n  area.y0 = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant$b(+_), area) : y0;\n  };\n\n  area.y1 = function(_) {\n    return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant$b(+_), area) : y1;\n  };\n\n  area.lineX0 =\n  area.lineY0 = function() {\n    return arealine().x(x0).y(y0);\n  };\n\n  area.lineY1 = function() {\n    return arealine().x(x0).y(y1);\n  };\n\n  area.lineX1 = function() {\n    return arealine().x(x1).y(y0);\n  };\n\n  area.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant$b(!!_), area) : defined;\n  };\n\n  area.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n  };\n\n  area.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n  };\n\n  return area;\n}\n\nfunction descending$1(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n\nfunction identity$8(d) {\n  return d;\n}\n\nfunction pie() {\n  var value = identity$8,\n      sortValues = descending$1,\n      sort = null,\n      startAngle = constant$b(0),\n      endAngle = constant$b(tau$4),\n      padAngle = constant$b(0);\n\n  function pie(data) {\n    var i,\n        n = data.length,\n        j,\n        k,\n        sum = 0,\n        index = new Array(n),\n        arcs = new Array(n),\n        a0 = +startAngle.apply(this, arguments),\n        da = Math.min(tau$4, Math.max(-tau$4, endAngle.apply(this, arguments) - a0)),\n        a1,\n        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n        pa = p * (da < 0 ? -1 : 1),\n        v;\n\n    for (i = 0; i < n; ++i) {\n      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n        sum += v;\n      }\n    }\n\n    // Optionally sort the arcs by previously-computed values or by data.\n    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n    // Compute the arcs! They are stored in the original data's order.\n    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n        data: data[j],\n        index: i,\n        value: v,\n        startAngle: a0,\n        endAngle: a1,\n        padAngle: p\n      };\n    }\n\n    return arcs;\n  }\n\n  pie.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant$b(+_), pie) : value;\n  };\n\n  pie.sortValues = function(_) {\n    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n  };\n\n  pie.sort = function(_) {\n    return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n  };\n\n  pie.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$b(+_), pie) : startAngle;\n  };\n\n  pie.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$b(+_), pie) : endAngle;\n  };\n\n  pie.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant$b(+_), pie) : padAngle;\n  };\n\n  return pie;\n}\n\nvar curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n  this._curve = curve;\n}\n\nRadial.prototype = {\n  areaStart: function() {\n    this._curve.areaStart();\n  },\n  areaEnd: function() {\n    this._curve.areaEnd();\n  },\n  lineStart: function() {\n    this._curve.lineStart();\n  },\n  lineEnd: function() {\n    this._curve.lineEnd();\n  },\n  point: function(a, r) {\n    this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n  }\n};\n\nfunction curveRadial(curve) {\n\n  function radial(context) {\n    return new Radial(curve(context));\n  }\n\n  radial._curve = curve;\n\n  return radial;\n}\n\nfunction lineRadial(l) {\n  var c = l.curve;\n\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n\n  l.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return l;\n}\n\nfunction lineRadial$1() {\n  return lineRadial(line().curve(curveRadialLinear));\n}\n\nfunction areaRadial() {\n  var a = area$3().curve(curveRadialLinear),\n      c = a.curve,\n      x0 = a.lineX0,\n      x1 = a.lineX1,\n      y0 = a.lineY0,\n      y1 = a.lineY1;\n\n  a.angle = a.x, delete a.x;\n  a.startAngle = a.x0, delete a.x0;\n  a.endAngle = a.x1, delete a.x1;\n  a.radius = a.y, delete a.y;\n  a.innerRadius = a.y0, delete a.y0;\n  a.outerRadius = a.y1, delete a.y1;\n  a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n  a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n  a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n  a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n  a.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return a;\n}\n\nfunction pointRadial(x, y) {\n  return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\n}\n\nvar slice$6 = Array.prototype.slice;\n\nfunction linkSource(d) {\n  return d.source;\n}\n\nfunction linkTarget(d) {\n  return d.target;\n}\n\nfunction link$2(curve) {\n  var source = linkSource,\n      target = linkTarget,\n      x$$1 = x$3,\n      y$$1 = y$3,\n      context = null;\n\n  function link() {\n    var buffer, argv = slice$6.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n    if (!context) context = buffer = path();\n    curve(context, +x$$1.apply(this, (argv[0] = s, argv)), +y$$1.apply(this, argv), +x$$1.apply(this, (argv[0] = t, argv)), +y$$1.apply(this, argv));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  link.source = function(_) {\n    return arguments.length ? (source = _, link) : source;\n  };\n\n  link.target = function(_) {\n    return arguments.length ? (target = _, link) : target;\n  };\n\n  link.x = function(_) {\n    return arguments.length ? (x$$1 = typeof _ === \"function\" ? _ : constant$b(+_), link) : x$$1;\n  };\n\n  link.y = function(_) {\n    return arguments.length ? (y$$1 = typeof _ === \"function\" ? _ : constant$b(+_), link) : y$$1;\n  };\n\n  link.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), link) : context;\n  };\n\n  return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n  context.moveTo(x0, y0);\n  context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n  context.moveTo(x0, y0);\n  context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial$1(context, x0, y0, x1, y1) {\n  var p0 = pointRadial(x0, y0),\n      p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n      p2 = pointRadial(x1, y0),\n      p3 = pointRadial(x1, y1);\n  context.moveTo(p0[0], p0[1]);\n  context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nfunction linkHorizontal() {\n  return link$2(curveHorizontal);\n}\n\nfunction linkVertical() {\n  return link$2(curveVertical);\n}\n\nfunction linkRadial() {\n  var l = link$2(curveRadial$1);\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n  return l;\n}\n\nvar circle$2 = {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / pi$4);\n    context.moveTo(r, 0);\n    context.arc(0, 0, r, 0, tau$4);\n  }\n};\n\nvar cross$2 = {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / 5) / 2;\n    context.moveTo(-3 * r, -r);\n    context.lineTo(-r, -r);\n    context.lineTo(-r, -3 * r);\n    context.lineTo(r, -3 * r);\n    context.lineTo(r, -r);\n    context.lineTo(3 * r, -r);\n    context.lineTo(3 * r, r);\n    context.lineTo(r, r);\n    context.lineTo(r, 3 * r);\n    context.lineTo(-r, 3 * r);\n    context.lineTo(-r, r);\n    context.lineTo(-3 * r, r);\n    context.closePath();\n  }\n};\n\nvar tan30 = Math.sqrt(1 / 3),\n    tan30_2 = tan30 * 2;\n\nvar diamond = {\n  draw: function(context, size) {\n    var y = Math.sqrt(size / tan30_2),\n        x = y * tan30;\n    context.moveTo(0, -y);\n    context.lineTo(x, 0);\n    context.lineTo(0, y);\n    context.lineTo(-x, 0);\n    context.closePath();\n  }\n};\n\nvar ka = 0.89081309152928522810,\n    kr = Math.sin(pi$4 / 10) / Math.sin(7 * pi$4 / 10),\n    kx = Math.sin(tau$4 / 10) * kr,\n    ky = -Math.cos(tau$4 / 10) * kr;\n\nvar star = {\n  draw: function(context, size) {\n    var r = Math.sqrt(size * ka),\n        x = kx * r,\n        y = ky * r;\n    context.moveTo(0, -r);\n    context.lineTo(x, y);\n    for (var i = 1; i < 5; ++i) {\n      var a = tau$4 * i / 5,\n          c = Math.cos(a),\n          s = Math.sin(a);\n      context.lineTo(s * r, -c * r);\n      context.lineTo(c * x - s * y, s * x + c * y);\n    }\n    context.closePath();\n  }\n};\n\nvar square = {\n  draw: function(context, size) {\n    var w = Math.sqrt(size),\n        x = -w / 2;\n    context.rect(x, x, w, w);\n  }\n};\n\nvar sqrt3 = Math.sqrt(3);\n\nvar triangle = {\n  draw: function(context, size) {\n    var y = -Math.sqrt(size / (sqrt3 * 3));\n    context.moveTo(0, y * 2);\n    context.lineTo(-sqrt3 * y, -y);\n    context.lineTo(sqrt3 * y, -y);\n    context.closePath();\n  }\n};\n\nvar c$2 = -0.5,\n    s = Math.sqrt(3) / 2,\n    k = 1 / Math.sqrt(12),\n    a = (k / 2 + 1) * 3;\n\nvar wye = {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / a),\n        x0 = r / 2,\n        y0 = r * k,\n        x1 = x0,\n        y1 = r * k + r,\n        x2 = -x1,\n        y2 = y1;\n    context.moveTo(x0, y0);\n    context.lineTo(x1, y1);\n    context.lineTo(x2, y2);\n    context.lineTo(c$2 * x0 - s * y0, s * x0 + c$2 * y0);\n    context.lineTo(c$2 * x1 - s * y1, s * x1 + c$2 * y1);\n    context.lineTo(c$2 * x2 - s * y2, s * x2 + c$2 * y2);\n    context.lineTo(c$2 * x0 + s * y0, c$2 * y0 - s * x0);\n    context.lineTo(c$2 * x1 + s * y1, c$2 * y1 - s * x1);\n    context.lineTo(c$2 * x2 + s * y2, c$2 * y2 - s * x2);\n    context.closePath();\n  }\n};\n\nvar symbols = [\n  circle$2,\n  cross$2,\n  diamond,\n  square,\n  star,\n  triangle,\n  wye\n];\n\nfunction symbol() {\n  var type = constant$b(circle$2),\n      size = constant$b(64),\n      context = null;\n\n  function symbol() {\n    var buffer;\n    if (!context) context = buffer = path();\n    type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  symbol.type = function(_) {\n    return arguments.length ? (type = typeof _ === \"function\" ? _ : constant$b(_), symbol) : type;\n  };\n\n  symbol.size = function(_) {\n    return arguments.length ? (size = typeof _ === \"function\" ? _ : constant$b(+_), symbol) : size;\n  };\n\n  symbol.context = function(_) {\n    return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n  };\n\n  return symbol;\n}\n\nfunction noop$3() {}\n\nfunction point$2(that, x, y) {\n  that._context.bezierCurveTo(\n    (2 * that._x0 + that._x1) / 3,\n    (2 * that._y0 + that._y1) / 3,\n    (that._x0 + 2 * that._x1) / 3,\n    (that._y0 + 2 * that._y1) / 3,\n    (that._x0 + 4 * that._x1 + x) / 6,\n    (that._y0 + 4 * that._y1 + y) / 6\n  );\n}\n\nfunction Basis(context) {\n  this._context = context;\n}\n\nBasis.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 3: point$2(this, this._x1, this._y1); // proceed\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n      default: point$2(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nfunction basis$2(context) {\n  return new Basis(context);\n}\n\nfunction BasisClosed(context) {\n  this._context = context;\n}\n\nBasisClosed.prototype = {\n  areaStart: noop$3,\n  areaEnd: noop$3,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x2, this._y2);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x2, this._y2);\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n      default: point$2(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nfunction basisClosed$1(context) {\n  return new BasisClosed(context);\n}\n\nfunction BasisOpen(context) {\n  this._context = context;\n}\n\nBasisOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n      case 3: this._point = 4; // proceed\n      default: point$2(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nfunction basisOpen(context) {\n  return new BasisOpen(context);\n}\n\nfunction Bundle(context, beta) {\n  this._basis = new Basis(context);\n  this._beta = beta;\n}\n\nBundle.prototype = {\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n    this._basis.lineStart();\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        j = x.length - 1;\n\n    if (j > 0) {\n      var x0 = x[0],\n          y0 = y[0],\n          dx = x[j] - x0,\n          dy = y[j] - y0,\n          i = -1,\n          t;\n\n      while (++i <= j) {\n        t = i / j;\n        this._basis.point(\n          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n        );\n      }\n    }\n\n    this._x = this._y = null;\n    this._basis.lineEnd();\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\nvar bundle = (function custom(beta) {\n\n  function bundle(context) {\n    return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n  }\n\n  bundle.beta = function(beta) {\n    return custom(+beta);\n  };\n\n  return bundle;\n})(0.85);\n\nfunction point$3(that, x, y) {\n  that._context.bezierCurveTo(\n    that._x1 + that._k * (that._x2 - that._x0),\n    that._y1 + that._k * (that._y2 - that._y0),\n    that._x2 + that._k * (that._x1 - x),\n    that._y2 + that._k * (that._y1 - y),\n    that._x2,\n    that._y2\n  );\n}\n\nfunction Cardinal(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: point$3(this, this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n      case 2: this._point = 3; // proceed\n      default: point$3(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nvar cardinal = (function custom(tension) {\n\n  function cardinal(context) {\n    return new Cardinal(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n\nfunction CardinalClosed(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n  areaStart: noop$3,\n  areaEnd: noop$3,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point$3(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nvar cardinalClosed = (function custom(tension) {\n\n  function cardinal$$1(context) {\n    return new CardinalClosed(context, tension);\n  }\n\n  cardinal$$1.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal$$1;\n})(0);\n\nfunction CardinalOpen(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point$3(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nvar cardinalOpen = (function custom(tension) {\n\n  function cardinal$$1(context) {\n    return new CardinalOpen(context, tension);\n  }\n\n  cardinal$$1.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal$$1;\n})(0);\n\nfunction point$4(that, x, y) {\n  var x1 = that._x1,\n      y1 = that._y1,\n      x2 = that._x2,\n      y2 = that._y2;\n\n  if (that._l01_a > epsilon$3) {\n    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n        n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n  }\n\n  if (that._l23_a > epsilon$3) {\n    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n        m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n  }\n\n  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: this.point(this._x2, this._y2); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; // proceed\n      default: point$4(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nvar catmullRom = (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n\nfunction CatmullRomClosed(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n  areaStart: noop$3,\n  areaEnd: noop$3,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point$4(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nvar catmullRomClosed = (function custom(alpha) {\n\n  function catmullRom$$1(context) {\n    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n  }\n\n  catmullRom$$1.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom$$1;\n})(0.5);\n\nfunction CatmullRomOpen(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point$4(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nvar catmullRomOpen = (function custom(alpha) {\n\n  function catmullRom$$1(context) {\n    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n  }\n\n  catmullRom$$1.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom$$1;\n})(0.5);\n\nfunction LinearClosed(context) {\n  this._context = context;\n}\n\nLinearClosed.prototype = {\n  areaStart: noop$3,\n  areaEnd: noop$3,\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._point) this._context.closePath();\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    if (this._point) this._context.lineTo(x, y);\n    else this._point = 1, this._context.moveTo(x, y);\n  }\n};\n\nfunction linearClosed(context) {\n  return new LinearClosed(context);\n}\n\nfunction sign$1(x) {\n  return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n  var h0 = that._x1 - that._x0,\n      h1 = x2 - that._x1,\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\n  return (sign$1(s0) + sign$1(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n  var h = that._x1 - that._x0;\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point$5(that, t0, t1) {\n  var x0 = that._x0,\n      y0 = that._y0,\n      x1 = that._x1,\n      y1 = that._y1,\n      dx = (x1 - x0) / 3;\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n  this._context = context;\n}\n\nMonotoneX.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 =\n    this._t0 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n      case 3: point$5(this, this._t0, slope2(this, this._t0)); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    var t1 = NaN;\n\n    x = +x, y = +y;\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; point$5(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n      default: point$5(this, this._t0, t1 = slope3(this, x, y)); break;\n    }\n\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n    this._t0 = t1;\n  }\n};\n\nfunction MonotoneY(context) {\n  this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n  MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n  this._context = context;\n}\n\nReflectContext.prototype = {\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\n  closePath: function() { this._context.closePath(); },\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nfunction monotoneX(context) {\n  return new MonotoneX(context);\n}\n\nfunction monotoneY(context) {\n  return new MonotoneY(context);\n}\n\nfunction Natural(context) {\n  this._context = context;\n}\n\nNatural.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        n = x.length;\n\n    if (n) {\n      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n      if (n === 2) {\n        this._context.lineTo(x[1], y[1]);\n      } else {\n        var px = controlPoints(x),\n            py = controlPoints(y);\n        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n        }\n      }\n    }\n\n    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n    this._x = this._y = null;\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n  var i,\n      n = x.length - 1,\n      m,\n      a = new Array(n),\n      b = new Array(n),\n      r = new Array(n);\n  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n  a[n - 1] = r[n - 1] / b[n - 1];\n  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n  b[n - 1] = (x[n] + a[n - 1]) / 2;\n  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n  return [a, b];\n}\n\nfunction natural(context) {\n  return new Natural(context);\n}\n\nfunction Step(context, t) {\n  this._context = context;\n  this._t = t;\n}\n\nStep.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = this._y = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: {\n        if (this._t <= 0) {\n          this._context.lineTo(this._x, y);\n          this._context.lineTo(x, y);\n        } else {\n          var x1 = this._x * (1 - this._t) + x * this._t;\n          this._context.lineTo(x1, this._y);\n          this._context.lineTo(x1, y);\n        }\n        break;\n      }\n    }\n    this._x = x, this._y = y;\n  }\n};\n\nfunction step(context) {\n  return new Step(context, 0.5);\n}\n\nfunction stepBefore(context) {\n  return new Step(context, 0);\n}\n\nfunction stepAfter(context) {\n  return new Step(context, 1);\n}\n\nfunction none$1(series, order) {\n  if (!((n = series.length) > 1)) return;\n  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n    s0 = s1, s1 = series[order[i]];\n    for (j = 0; j < m; ++j) {\n      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n    }\n  }\n}\n\nfunction none$2(series) {\n  var n = series.length, o = new Array(n);\n  while (--n >= 0) o[n] = n;\n  return o;\n}\n\nfunction stackValue(d, key) {\n  return d[key];\n}\n\nfunction stack() {\n  var keys = constant$b([]),\n      order = none$2,\n      offset = none$1,\n      value = stackValue;\n\n  function stack(data) {\n    var kz = keys.apply(this, arguments),\n        i,\n        m = data.length,\n        n = kz.length,\n        sz = new Array(n),\n        oz;\n\n    for (i = 0; i < n; ++i) {\n      for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n        si[j] = sij = [0, +value(data[j], ki, j, data)];\n        sij.data = data[j];\n      }\n      si.key = ki;\n    }\n\n    for (i = 0, oz = order(sz); i < n; ++i) {\n      sz[oz[i]].index = i;\n    }\n\n    offset(sz, oz);\n    return sz;\n  }\n\n  stack.keys = function(_) {\n    return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant$b(slice$6.call(_)), stack) : keys;\n  };\n\n  stack.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant$b(+_), stack) : value;\n  };\n\n  stack.order = function(_) {\n    return arguments.length ? (order = _ == null ? none$2 : typeof _ === \"function\" ? _ : constant$b(slice$6.call(_)), stack) : order;\n  };\n\n  stack.offset = function(_) {\n    return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset;\n  };\n\n  return stack;\n}\n\nfunction expand(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n  }\n  none$1(series, order);\n}\n\nfunction diverging$1(series, order) {\n  if (!((n = series.length) > 1)) return;\n  for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n    for (yp = yn = 0, i = 0; i < n; ++i) {\n      if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n        d[0] = yp, d[1] = yp += dy;\n      } else if (dy < 0) {\n        d[1] = yn, d[0] = yn += dy;\n      } else {\n        d[0] = yp;\n      }\n    }\n  }\n}\n\nfunction silhouette(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n    s0[j][1] += s0[j][0] = -y / 2;\n  }\n  none$1(series, order);\n}\n\nfunction wiggle(series, order) {\n  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n      var si = series[order[i]],\n          sij0 = si[j][1] || 0,\n          sij1 = si[j - 1][1] || 0,\n          s3 = (sij0 - sij1) / 2;\n      for (var k = 0; k < i; ++k) {\n        var sk = series[order[k]],\n            skj0 = sk[j][1] || 0,\n            skj1 = sk[j - 1][1] || 0;\n        s3 += skj0 - skj1;\n      }\n      s1 += sij0, s2 += s3 * sij0;\n    }\n    s0[j - 1][1] += s0[j - 1][0] = y;\n    if (s1) y -= s2 / s1;\n  }\n  s0[j - 1][1] += s0[j - 1][0] = y;\n  none$1(series, order);\n}\n\nfunction appearance(series) {\n  var peaks = series.map(peak);\n  return none$2(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\n}\n\nfunction peak(series) {\n  var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n  while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\n  return j;\n}\n\nfunction ascending$3(series) {\n  var sums = series.map(sum$2);\n  return none$2(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nfunction sum$2(series) {\n  var s = 0, i = -1, n = series.length, v;\n  while (++i < n) if (v = +series[i][1]) s += v;\n  return s;\n}\n\nfunction descending$2(series) {\n  return ascending$3(series).reverse();\n}\n\nfunction insideOut(series) {\n  var n = series.length,\n      i,\n      j,\n      sums = series.map(sum$2),\n      order = appearance(series),\n      top = 0,\n      bottom = 0,\n      tops = [],\n      bottoms = [];\n\n  for (i = 0; i < n; ++i) {\n    j = order[i];\n    if (top < bottom) {\n      top += sums[j];\n      tops.push(j);\n    } else {\n      bottom += sums[j];\n      bottoms.push(j);\n    }\n  }\n\n  return bottoms.reverse().concat(tops);\n}\n\nfunction reverse(series) {\n  return none$2(series).reverse();\n}\n\nfunction constant$c(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction x$4(d) {\n  return d[0];\n}\n\nfunction y$4(d) {\n  return d[1];\n}\n\nfunction RedBlackTree() {\n  this._ = null; // root node\n}\n\nfunction RedBlackNode(node) {\n  node.U = // parent node\n  node.C = // color - true for red, false for black\n  node.L = // left node\n  node.R = // right node\n  node.P = // previous node\n  node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n  constructor: RedBlackTree,\n\n  insert: function(after, node) {\n    var parent, grandpa, uncle;\n\n    if (after) {\n      node.P = after;\n      node.N = after.N;\n      if (after.N) after.N.P = node;\n      after.N = node;\n      if (after.R) {\n        after = after.R;\n        while (after.L) after = after.L;\n        after.L = node;\n      } else {\n        after.R = node;\n      }\n      parent = after;\n    } else if (this._) {\n      after = RedBlackFirst(this._);\n      node.P = null;\n      node.N = after;\n      after.P = after.L = node;\n      parent = after;\n    } else {\n      node.P = node.N = null;\n      this._ = node;\n      parent = null;\n    }\n    node.L = node.R = null;\n    node.U = parent;\n    node.C = true;\n\n    after = node;\n    while (parent && parent.C) {\n      grandpa = parent.U;\n      if (parent === grandpa.L) {\n        uncle = grandpa.R;\n        if (uncle && uncle.C) {\n          parent.C = uncle.C = false;\n          grandpa.C = true;\n          after = grandpa;\n        } else {\n          if (after === parent.R) {\n            RedBlackRotateLeft(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateRight(this, grandpa);\n        }\n      } else {\n        uncle = grandpa.L;\n        if (uncle && uncle.C) {\n          parent.C = uncle.C = false;\n          grandpa.C = true;\n          after = grandpa;\n        } else {\n          if (after === parent.L) {\n            RedBlackRotateRight(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateLeft(this, grandpa);\n        }\n      }\n      parent = after.U;\n    }\n    this._.C = false;\n  },\n\n  remove: function(node) {\n    if (node.N) node.N.P = node.P;\n    if (node.P) node.P.N = node.N;\n    node.N = node.P = null;\n\n    var parent = node.U,\n        sibling,\n        left = node.L,\n        right = node.R,\n        next,\n        red;\n\n    if (!left) next = right;\n    else if (!right) next = left;\n    else next = RedBlackFirst(right);\n\n    if (parent) {\n      if (parent.L === node) parent.L = next;\n      else parent.R = next;\n    } else {\n      this._ = next;\n    }\n\n    if (left && right) {\n      red = next.C;\n      next.C = node.C;\n      next.L = left;\n      left.U = next;\n      if (next !== right) {\n        parent = next.U;\n        next.U = node.U;\n        node = next.R;\n        parent.L = node;\n        next.R = right;\n        right.U = next;\n      } else {\n        next.U = parent;\n        parent = next;\n        node = next.R;\n      }\n    } else {\n      red = node.C;\n      node = next;\n    }\n\n    if (node) node.U = parent;\n    if (red) return;\n    if (node && node.C) { node.C = false; return; }\n\n    do {\n      if (node === this._) break;\n      if (node === parent.L) {\n        sibling = parent.R;\n        if (sibling.C) {\n          sibling.C = false;\n          parent.C = true;\n          RedBlackRotateLeft(this, parent);\n          sibling = parent.R;\n        }\n        if ((sibling.L && sibling.L.C)\n            || (sibling.R && sibling.R.C)) {\n          if (!sibling.R || !sibling.R.C) {\n            sibling.L.C = false;\n            sibling.C = true;\n            RedBlackRotateRight(this, sibling);\n            sibling = parent.R;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.R.C = false;\n          RedBlackRotateLeft(this, parent);\n          node = this._;\n          break;\n        }\n      } else {\n        sibling = parent.L;\n        if (sibling.C) {\n          sibling.C = false;\n          parent.C = true;\n          RedBlackRotateRight(this, parent);\n          sibling = parent.L;\n        }\n        if ((sibling.L && sibling.L.C)\n          || (sibling.R && sibling.R.C)) {\n          if (!sibling.L || !sibling.L.C) {\n            sibling.R.C = false;\n            sibling.C = true;\n            RedBlackRotateLeft(this, sibling);\n            sibling = parent.L;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.L.C = false;\n          RedBlackRotateRight(this, parent);\n          node = this._;\n          break;\n        }\n      }\n      sibling.C = true;\n      node = parent;\n      parent = parent.U;\n    } while (!node.C);\n\n    if (node) node.C = false;\n  }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n  var p = node,\n      q = node.R,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\n\n  q.U = parent;\n  p.U = q;\n  p.R = q.L;\n  if (p.R) p.R.U = p;\n  q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n  var p = node,\n      q = node.L,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\n\n  q.U = parent;\n  p.U = q;\n  p.L = q.R;\n  if (p.L) p.L.U = p;\n  q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n  while (node.L) node = node.L;\n  return node;\n}\n\nfunction createEdge(left, right, v0, v1) {\n  var edge = [null, null],\n      index = edges.push(edge) - 1;\n  edge.left = left;\n  edge.right = right;\n  if (v0) setEdgeEnd(edge, left, right, v0);\n  if (v1) setEdgeEnd(edge, right, left, v1);\n  cells[left.index].halfedges.push(index);\n  cells[right.index].halfedges.push(index);\n  return edge;\n}\n\nfunction createBorderEdge(left, v0, v1) {\n  var edge = [v0, v1];\n  edge.left = left;\n  return edge;\n}\n\nfunction setEdgeEnd(edge, left, right, vertex) {\n  if (!edge[0] && !edge[1]) {\n    edge[0] = vertex;\n    edge.left = left;\n    edge.right = right;\n  } else if (edge.left === right) {\n    edge[1] = vertex;\n  } else {\n    edge[0] = vertex;\n  }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n  var a = edge[0],\n      b = edge[1],\n      ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n  if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n  if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n  return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n  var v1 = edge[1];\n  if (v1) return true;\n\n  var v0 = edge[0],\n      left = edge.left,\n      right = edge.right,\n      lx = left[0],\n      ly = left[1],\n      rx = right[0],\n      ry = right[1],\n      fx = (lx + rx) / 2,\n      fy = (ly + ry) / 2,\n      fm,\n      fb;\n\n  if (ry === ly) {\n    if (fx < x0 || fx >= x1) return;\n    if (lx > rx) {\n      if (!v0) v0 = [fx, y0];\n      else if (v0[1] >= y1) return;\n      v1 = [fx, y1];\n    } else {\n      if (!v0) v0 = [fx, y1];\n      else if (v0[1] < y0) return;\n      v1 = [fx, y0];\n    }\n  } else {\n    fm = (lx - rx) / (ry - ly);\n    fb = fy - fm * fx;\n    if (fm < -1 || fm > 1) {\n      if (lx > rx) {\n        if (!v0) v0 = [(y0 - fb) / fm, y0];\n        else if (v0[1] >= y1) return;\n        v1 = [(y1 - fb) / fm, y1];\n      } else {\n        if (!v0) v0 = [(y1 - fb) / fm, y1];\n        else if (v0[1] < y0) return;\n        v1 = [(y0 - fb) / fm, y0];\n      }\n    } else {\n      if (ly < ry) {\n        if (!v0) v0 = [x0, fm * x0 + fb];\n        else if (v0[0] >= x1) return;\n        v1 = [x1, fm * x1 + fb];\n      } else {\n        if (!v0) v0 = [x1, fm * x1 + fb];\n        else if (v0[0] < x0) return;\n        v1 = [x0, fm * x0 + fb];\n      }\n    }\n  }\n\n  edge[0] = v0;\n  edge[1] = v1;\n  return true;\n}\n\nfunction clipEdges(x0, y0, x1, y1) {\n  var i = edges.length,\n      edge;\n\n  while (i--) {\n    if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n        || !clipEdge(edge, x0, y0, x1, y1)\n        || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$4\n            || Math.abs(edge[0][1] - edge[1][1]) > epsilon$4)) {\n      delete edges[i];\n    }\n  }\n}\n\nfunction createCell(site) {\n  return cells[site.index] = {\n    site: site,\n    halfedges: []\n  };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n  var site = cell.site,\n      va = edge.left,\n      vb = edge.right;\n  if (site === vb) vb = va, va = site;\n  if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n  if (site === va) va = edge[1], vb = edge[0];\n  else va = edge[0], vb = edge[1];\n  return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nfunction cellHalfedgeStart(cell, edge) {\n  return edge[+(edge.left !== cell.site)];\n}\n\nfunction cellHalfedgeEnd(cell, edge) {\n  return edge[+(edge.left === cell.site)];\n}\n\nfunction sortCellHalfedges() {\n  for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n    if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n      var index = new Array(m),\n          array = new Array(m);\n      for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n      index.sort(function(i, j) { return array[j] - array[i]; });\n      for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n      for (j = 0; j < m; ++j) halfedges[j] = array[j];\n    }\n  }\n}\n\nfunction clipCells(x0, y0, x1, y1) {\n  var nCells = cells.length,\n      iCell,\n      cell,\n      site,\n      iHalfedge,\n      halfedges,\n      nHalfedges,\n      start,\n      startX,\n      startY,\n      end,\n      endX,\n      endY,\n      cover = true;\n\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      site = cell.site;\n      halfedges = cell.halfedges;\n      iHalfedge = halfedges.length;\n\n      // Remove any dangling clipped edges.\n      while (iHalfedge--) {\n        if (!edges[halfedges[iHalfedge]]) {\n          halfedges.splice(iHalfedge, 1);\n        }\n      }\n\n      // Insert any border edges as necessary.\n      iHalfedge = 0, nHalfedges = halfedges.length;\n      while (iHalfedge < nHalfedges) {\n        end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n        start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n        if (Math.abs(endX - startX) > epsilon$4 || Math.abs(endY - startY) > epsilon$4) {\n          halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n              Math.abs(endX - x0) < epsilon$4 && y1 - endY > epsilon$4 ? [x0, Math.abs(startX - x0) < epsilon$4 ? startY : y1]\n              : Math.abs(endY - y1) < epsilon$4 && x1 - endX > epsilon$4 ? [Math.abs(startY - y1) < epsilon$4 ? startX : x1, y1]\n              : Math.abs(endX - x1) < epsilon$4 && endY - y0 > epsilon$4 ? [x1, Math.abs(startX - x1) < epsilon$4 ? startY : y0]\n              : Math.abs(endY - y0) < epsilon$4 && endX - x0 > epsilon$4 ? [Math.abs(startY - y0) < epsilon$4 ? startX : x0, y0]\n              : null)) - 1);\n          ++nHalfedges;\n        }\n      }\n\n      if (nHalfedges) cover = false;\n    }\n  }\n\n  // If there weren’t any edges, have the closest site cover the extent.\n  // It doesn’t matter which corner of the extent we measure!\n  if (cover) {\n    var dx, dy, d2, dc = Infinity;\n\n    for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n      if (cell = cells[iCell]) {\n        site = cell.site;\n        dx = site[0] - x0;\n        dy = site[1] - y0;\n        d2 = dx * dx + dy * dy;\n        if (d2 < dc) dc = d2, cover = cell;\n      }\n    }\n\n    if (cover) {\n      var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n      cover.halfedges.push(\n        edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n        edges.push(createBorderEdge(site, v01, v11)) - 1,\n        edges.push(createBorderEdge(site, v11, v10)) - 1,\n        edges.push(createBorderEdge(site, v10, v00)) - 1\n      );\n    }\n  }\n\n  // Lastly delete any cells with no edges; these were entirely clipped.\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      if (!cell.halfedges.length) {\n        delete cells[iCell];\n      }\n    }\n  }\n}\n\nvar circlePool = [];\n\nvar firstCircle;\n\nfunction Circle() {\n  RedBlackNode(this);\n  this.x =\n  this.y =\n  this.arc =\n  this.site =\n  this.cy = null;\n}\n\nfunction attachCircle(arc) {\n  var lArc = arc.P,\n      rArc = arc.N;\n\n  if (!lArc || !rArc) return;\n\n  var lSite = lArc.site,\n      cSite = arc.site,\n      rSite = rArc.site;\n\n  if (lSite === rSite) return;\n\n  var bx = cSite[0],\n      by = cSite[1],\n      ax = lSite[0] - bx,\n      ay = lSite[1] - by,\n      cx = rSite[0] - bx,\n      cy = rSite[1] - by;\n\n  var d = 2 * (ax * cy - ay * cx);\n  if (d >= -epsilon2$2) return;\n\n  var ha = ax * ax + ay * ay,\n      hc = cx * cx + cy * cy,\n      x = (cy * ha - ay * hc) / d,\n      y = (ax * hc - cx * ha) / d;\n\n  var circle = circlePool.pop() || new Circle;\n  circle.arc = arc;\n  circle.site = cSite;\n  circle.x = x + bx;\n  circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n  arc.circle = circle;\n\n  var before = null,\n      node = circles._;\n\n  while (node) {\n    if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n      if (node.L) node = node.L;\n      else { before = node.P; break; }\n    } else {\n      if (node.R) node = node.R;\n      else { before = node; break; }\n    }\n  }\n\n  circles.insert(before, circle);\n  if (!before) firstCircle = circle;\n}\n\nfunction detachCircle(arc) {\n  var circle = arc.circle;\n  if (circle) {\n    if (!circle.P) firstCircle = circle.N;\n    circles.remove(circle);\n    circlePool.push(circle);\n    RedBlackNode(circle);\n    arc.circle = null;\n  }\n}\n\nvar beachPool = [];\n\nfunction Beach() {\n  RedBlackNode(this);\n  this.edge =\n  this.site =\n  this.circle = null;\n}\n\nfunction createBeach(site) {\n  var beach = beachPool.pop() || new Beach;\n  beach.site = site;\n  return beach;\n}\n\nfunction detachBeach(beach) {\n  detachCircle(beach);\n  beaches.remove(beach);\n  beachPool.push(beach);\n  RedBlackNode(beach);\n}\n\nfunction removeBeach(beach) {\n  var circle = beach.circle,\n      x = circle.x,\n      y = circle.cy,\n      vertex = [x, y],\n      previous = beach.P,\n      next = beach.N,\n      disappearing = [beach];\n\n  detachBeach(beach);\n\n  var lArc = previous;\n  while (lArc.circle\n      && Math.abs(x - lArc.circle.x) < epsilon$4\n      && Math.abs(y - lArc.circle.cy) < epsilon$4) {\n    previous = lArc.P;\n    disappearing.unshift(lArc);\n    detachBeach(lArc);\n    lArc = previous;\n  }\n\n  disappearing.unshift(lArc);\n  detachCircle(lArc);\n\n  var rArc = next;\n  while (rArc.circle\n      && Math.abs(x - rArc.circle.x) < epsilon$4\n      && Math.abs(y - rArc.circle.cy) < epsilon$4) {\n    next = rArc.N;\n    disappearing.push(rArc);\n    detachBeach(rArc);\n    rArc = next;\n  }\n\n  disappearing.push(rArc);\n  detachCircle(rArc);\n\n  var nArcs = disappearing.length,\n      iArc;\n  for (iArc = 1; iArc < nArcs; ++iArc) {\n    rArc = disappearing[iArc];\n    lArc = disappearing[iArc - 1];\n    setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n  }\n\n  lArc = disappearing[0];\n  rArc = disappearing[nArcs - 1];\n  rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nfunction addBeach(site) {\n  var x = site[0],\n      directrix = site[1],\n      lArc,\n      rArc,\n      dxl,\n      dxr,\n      node = beaches._;\n\n  while (node) {\n    dxl = leftBreakPoint(node, directrix) - x;\n    if (dxl > epsilon$4) node = node.L; else {\n      dxr = x - rightBreakPoint(node, directrix);\n      if (dxr > epsilon$4) {\n        if (!node.R) {\n          lArc = node;\n          break;\n        }\n        node = node.R;\n      } else {\n        if (dxl > -epsilon$4) {\n          lArc = node.P;\n          rArc = node;\n        } else if (dxr > -epsilon$4) {\n          lArc = node;\n          rArc = node.N;\n        } else {\n          lArc = rArc = node;\n        }\n        break;\n      }\n    }\n  }\n\n  createCell(site);\n  var newArc = createBeach(site);\n  beaches.insert(lArc, newArc);\n\n  if (!lArc && !rArc) return;\n\n  if (lArc === rArc) {\n    detachCircle(lArc);\n    rArc = createBeach(lArc.site);\n    beaches.insert(newArc, rArc);\n    newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n    attachCircle(lArc);\n    attachCircle(rArc);\n    return;\n  }\n\n  if (!rArc) { // && lArc\n    newArc.edge = createEdge(lArc.site, newArc.site);\n    return;\n  }\n\n  // else lArc !== rArc\n  detachCircle(lArc);\n  detachCircle(rArc);\n\n  var lSite = lArc.site,\n      ax = lSite[0],\n      ay = lSite[1],\n      bx = site[0] - ax,\n      by = site[1] - ay,\n      rSite = rArc.site,\n      cx = rSite[0] - ax,\n      cy = rSite[1] - ay,\n      d = 2 * (bx * cy - by * cx),\n      hb = bx * bx + by * by,\n      hc = cx * cx + cy * cy,\n      vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n  setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n  newArc.edge = createEdge(lSite, site, null, vertex);\n  rArc.edge = createEdge(site, rSite, null, vertex);\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n  var site = arc.site,\n      rfocx = site[0],\n      rfocy = site[1],\n      pby2 = rfocy - directrix;\n\n  if (!pby2) return rfocx;\n\n  var lArc = arc.P;\n  if (!lArc) return -Infinity;\n\n  site = lArc.site;\n  var lfocx = site[0],\n      lfocy = site[1],\n      plby2 = lfocy - directrix;\n\n  if (!plby2) return lfocx;\n\n  var hl = lfocx - rfocx,\n      aby2 = 1 / pby2 - 1 / plby2,\n      b = hl / plby2;\n\n  if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n  return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n  var rArc = arc.N;\n  if (rArc) return leftBreakPoint(rArc, directrix);\n  var site = arc.site;\n  return site[1] === directrix ? site[0] : Infinity;\n}\n\nvar epsilon$4 = 1e-6;\nvar epsilon2$2 = 1e-12;\nvar beaches;\nvar cells;\nvar circles;\nvar edges;\n\nfunction triangleArea(a, b, c) {\n  return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n  return b[1] - a[1]\n      || b[0] - a[0];\n}\n\nfunction Diagram(sites, extent) {\n  var site = sites.sort(lexicographic).pop(),\n      x,\n      y,\n      circle;\n\n  edges = [];\n  cells = new Array(sites.length);\n  beaches = new RedBlackTree;\n  circles = new RedBlackTree;\n\n  while (true) {\n    circle = firstCircle;\n    if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n      if (site[0] !== x || site[1] !== y) {\n        addBeach(site);\n        x = site[0], y = site[1];\n      }\n      site = sites.pop();\n    } else if (circle) {\n      removeBeach(circle.arc);\n    } else {\n      break;\n    }\n  }\n\n  sortCellHalfedges();\n\n  if (extent) {\n    var x0 = +extent[0][0],\n        y0 = +extent[0][1],\n        x1 = +extent[1][0],\n        y1 = +extent[1][1];\n    clipEdges(x0, y0, x1, y1);\n    clipCells(x0, y0, x1, y1);\n  }\n\n  this.edges = edges;\n  this.cells = cells;\n\n  beaches =\n  circles =\n  edges =\n  cells = null;\n}\n\nDiagram.prototype = {\n  constructor: Diagram,\n\n  polygons: function() {\n    var edges = this.edges;\n\n    return this.cells.map(function(cell) {\n      var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n      polygon.data = cell.site.data;\n      return polygon;\n    });\n  },\n\n  triangles: function() {\n    var triangles = [],\n        edges = this.edges;\n\n    this.cells.forEach(function(cell, i) {\n      if (!(m = (halfedges = cell.halfedges).length)) return;\n      var site = cell.site,\n          halfedges,\n          j = -1,\n          m,\n          s0,\n          e1 = edges[halfedges[m - 1]],\n          s1 = e1.left === site ? e1.right : e1.left;\n\n      while (++j < m) {\n        s0 = s1;\n        e1 = edges[halfedges[j]];\n        s1 = e1.left === site ? e1.right : e1.left;\n        if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n          triangles.push([site.data, s0.data, s1.data]);\n        }\n      }\n    });\n\n    return triangles;\n  },\n\n  links: function() {\n    return this.edges.filter(function(edge) {\n      return edge.right;\n    }).map(function(edge) {\n      return {\n        source: edge.left.data,\n        target: edge.right.data\n      };\n    });\n  },\n\n  find: function(x, y, radius) {\n    var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n    // Use the previously-found cell, or start with an arbitrary one.\n    while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n    var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n    // Traverse the half-edges to find a closer cell, if any.\n    do {\n      cell = that.cells[i0 = i1], i1 = null;\n      cell.halfedges.forEach(function(e) {\n        var edge = that.edges[e], v = edge.left;\n        if ((v === cell.site || !v) && !(v = edge.right)) return;\n        var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n        if (v2 < d2) d2 = v2, i1 = v.index;\n      });\n    } while (i1 !== null);\n\n    that._found = i0;\n\n    return radius == null || d2 <= radius * radius ? cell.site : null;\n  }\n};\n\nfunction voronoi() {\n  var x$$1 = x$4,\n      y$$1 = y$4,\n      extent = null;\n\n  function voronoi(data) {\n    return new Diagram(data.map(function(d, i) {\n      var s = [Math.round(x$$1(d, i, data) / epsilon$4) * epsilon$4, Math.round(y$$1(d, i, data) / epsilon$4) * epsilon$4];\n      s.index = i;\n      s.data = d;\n      return s;\n    }), extent);\n  }\n\n  voronoi.polygons = function(data) {\n    return voronoi(data).polygons();\n  };\n\n  voronoi.links = function(data) {\n    return voronoi(data).links();\n  };\n\n  voronoi.triangles = function(data) {\n    return voronoi(data).triangles();\n  };\n\n  voronoi.x = function(_) {\n    return arguments.length ? (x$$1 = typeof _ === \"function\" ? _ : constant$c(+_), voronoi) : x$$1;\n  };\n\n  voronoi.y = function(_) {\n    return arguments.length ? (y$$1 = typeof _ === \"function\" ? _ : constant$c(+_), voronoi) : y$$1;\n  };\n\n  voronoi.extent = function(_) {\n    return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n  };\n\n  voronoi.size = function(_) {\n    return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n  };\n\n  return voronoi;\n}\n\nfunction constant$d(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction ZoomEvent(target, type, transform) {\n  this.target = target;\n  this.type = type;\n  this.transform = transform;\n}\n\nfunction Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nvar identity$9 = new Transform(1, 0, 0);\n\ntransform$1.prototype = Transform.prototype;\n\nfunction transform$1(node) {\n  return node.__zoom || identity$9;\n}\n\nfunction nopropagation$2() {\n  exports.event.stopImmediatePropagation();\n}\n\nfunction noevent$2() {\n  exports.event.preventDefault();\n  exports.event.stopImmediatePropagation();\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter$2() {\n  return !exports.event.button;\n}\n\nfunction defaultExtent$1() {\n  var e = this, w, h;\n  if (e instanceof SVGElement) {\n    e = e.ownerSVGElement || e;\n    w = e.width.baseVal.value;\n    h = e.height.baseVal.value;\n  } else {\n    w = e.clientWidth;\n    h = e.clientHeight;\n  }\n  return [[0, 0], [w, h]];\n}\n\nfunction defaultTransform() {\n  return this.__zoom || identity$9;\n}\n\nfunction defaultWheelDelta() {\n  return -exports.event.deltaY * (exports.event.deltaMode ? 120 : 1) / 500;\n}\n\nfunction defaultTouchable$1() {\n  return \"ontouchstart\" in this;\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n  return transform.translate(\n    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n  );\n}\n\nfunction zoom() {\n  var filter = defaultFilter$2,\n      extent = defaultExtent$1,\n      constrain = defaultConstrain,\n      wheelDelta = defaultWheelDelta,\n      touchable = defaultTouchable$1,\n      scaleExtent = [0, Infinity],\n      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n      duration = 250,\n      interpolate = interpolateZoom,\n      gestures = [],\n      listeners = dispatch(\"start\", \"zoom\", \"end\"),\n      touchstarting,\n      touchending,\n      touchDelay = 500,\n      wheelDelay = 150,\n      clickDistance2 = 0;\n\n  function zoom(selection$$1) {\n    selection$$1\n        .property(\"__zoom\", defaultTransform)\n        .on(\"wheel.zoom\", wheeled)\n        .on(\"mousedown.zoom\", mousedowned)\n        .on(\"dblclick.zoom\", dblclicked)\n      .filter(touchable)\n        .on(\"touchstart.zoom\", touchstarted)\n        .on(\"touchmove.zoom\", touchmoved)\n        .on(\"touchend.zoom touchcancel.zoom\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  zoom.transform = function(collection, transform) {\n    var selection$$1 = collection.selection ? collection.selection() : collection;\n    selection$$1.property(\"__zoom\", defaultTransform);\n    if (collection !== selection$$1) {\n      schedule(collection, transform);\n    } else {\n      selection$$1.interrupt().each(function() {\n        gesture(this, arguments)\n            .start()\n            .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n            .end();\n      });\n    }\n  };\n\n  zoom.scaleBy = function(selection$$1, k) {\n    zoom.scaleTo(selection$$1, function() {\n      var k0 = this.__zoom.k,\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return k0 * k1;\n    });\n  };\n\n  zoom.scaleTo = function(selection$$1, k) {\n    zoom.transform(selection$$1, function() {\n      var e = extent.apply(this, arguments),\n          t0 = this.__zoom,\n          p0 = centroid(e),\n          p1 = t0.invert(p0),\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n    });\n  };\n\n  zoom.translateBy = function(selection$$1, x, y) {\n    zoom.transform(selection$$1, function() {\n      return constrain(this.__zoom.translate(\n        typeof x === \"function\" ? x.apply(this, arguments) : x,\n        typeof y === \"function\" ? y.apply(this, arguments) : y\n      ), extent.apply(this, arguments), translateExtent);\n    });\n  };\n\n  zoom.translateTo = function(selection$$1, x, y) {\n    zoom.transform(selection$$1, function() {\n      var e = extent.apply(this, arguments),\n          t = this.__zoom,\n          p = centroid(e);\n      return constrain(identity$9.translate(p[0], p[1]).scale(t.k).translate(\n        typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n        typeof y === \"function\" ? -y.apply(this, arguments) : -y\n      ), e, translateExtent);\n    });\n  };\n\n  function scale(transform, k) {\n    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n  }\n\n  function translate(transform, p0, p1) {\n    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n  }\n\n  function centroid(extent) {\n    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n  }\n\n  function schedule(transition$$1, transform, center) {\n    transition$$1\n        .on(\"start.zoom\", function() { gesture(this, arguments).start(); })\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).end(); })\n        .tween(\"zoom\", function() {\n          var that = this,\n              args = arguments,\n              g = gesture(that, args),\n              e = extent.apply(that, args),\n              p = center || centroid(e),\n              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n              a = that.__zoom,\n              b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n          return function(t) {\n            if (t === 1) t = b; // Avoid rounding error on end.\n            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n            g.zoom(null, t);\n          };\n        });\n  }\n\n  function gesture(that, args) {\n    for (var i = 0, n = gestures.length, g; i < n; ++i) {\n      if ((g = gestures[i]).that === that) {\n        return g;\n      }\n    }\n    return new Gesture(that, args);\n  }\n\n  function Gesture(that, args) {\n    this.that = that;\n    this.args = args;\n    this.index = -1;\n    this.active = 0;\n    this.extent = extent.apply(that, args);\n  }\n\n  Gesture.prototype = {\n    start: function() {\n      if (++this.active === 1) {\n        this.index = gestures.push(this) - 1;\n        this.emit(\"start\");\n      }\n      return this;\n    },\n    zoom: function(key, transform) {\n      if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n      if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n      if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n      this.that.__zoom = transform;\n      this.emit(\"zoom\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) {\n        gestures.splice(this.index, 1);\n        this.index = -1;\n        this.emit(\"end\");\n      }\n      return this;\n    },\n    emit: function(type) {\n      customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);\n    }\n  };\n\n  function wheeled() {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, arguments),\n        t = this.__zoom,\n        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n        p = mouse(this);\n\n    // If the mouse is in the same location as before, reuse it.\n    // If there were recent wheel events, reset the wheel idle timeout.\n    if (g.wheel) {\n      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n        g.mouse[1] = t.invert(g.mouse[0] = p);\n      }\n      clearTimeout(g.wheel);\n    }\n\n    // If this wheel event won’t trigger a transform change, ignore it.\n    else if (t.k === k) return;\n\n    // Otherwise, capture the mouse point and location at the start.\n    else {\n      g.mouse = [p, t.invert(p)];\n      interrupt(this);\n      g.start();\n    }\n\n    noevent$2();\n    g.wheel = setTimeout(wheelidled, wheelDelay);\n    g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n    function wheelidled() {\n      g.wheel = null;\n      g.end();\n    }\n  }\n\n  function mousedowned() {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var g = gesture(this, arguments),\n        v = select(exports.event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n        p = mouse(this),\n        x0 = exports.event.clientX,\n        y0 = exports.event.clientY;\n\n    dragDisable(exports.event.view);\n    nopropagation$2();\n    g.mouse = [p, this.__zoom.invert(p)];\n    interrupt(this);\n    g.start();\n\n    function mousemoved() {\n      noevent$2();\n      if (!g.moved) {\n        var dx = exports.event.clientX - x0, dy = exports.event.clientY - y0;\n        g.moved = dx * dx + dy * dy > clickDistance2;\n      }\n      g.zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent, translateExtent));\n    }\n\n    function mouseupped() {\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\n      yesdrag(exports.event.view, g.moved);\n      noevent$2();\n      g.end();\n    }\n  }\n\n  function dblclicked() {\n    if (!filter.apply(this, arguments)) return;\n    var t0 = this.__zoom,\n        p0 = mouse(this),\n        p1 = t0.invert(p0),\n        k1 = t0.k * (exports.event.shiftKey ? 0.5 : 2),\n        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent);\n\n    noevent$2();\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);\n    else select(this).call(zoom.transform, t1);\n  }\n\n  function touchstarted() {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, arguments),\n        touches$$1 = exports.event.changedTouches,\n        started,\n        n = touches$$1.length, i, t, p;\n\n    nopropagation$2();\n    for (i = 0; i < n; ++i) {\n      t = touches$$1[i], p = touch(this, touches$$1, t.identifier);\n      p = [p, this.__zoom.invert(p), t.identifier];\n      if (!g.touch0) g.touch0 = p, started = true;\n      else if (!g.touch1) g.touch1 = p;\n    }\n\n    // If this is a dbltap, reroute to the (optional) dblclick.zoom handler.\n    if (touchstarting) {\n      touchstarting = clearTimeout(touchstarting);\n      if (!g.touch1) {\n        g.end();\n        p = select(this).on(\"dblclick.zoom\");\n        if (p) p.apply(this, arguments);\n        return;\n      }\n    }\n\n    if (started) {\n      touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n      interrupt(this);\n      g.start();\n    }\n  }\n\n  function touchmoved() {\n    var g = gesture(this, arguments),\n        touches$$1 = exports.event.changedTouches,\n        n = touches$$1.length, i, t, p, l;\n\n    noevent$2();\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n    for (i = 0; i < n; ++i) {\n      t = touches$$1[i], p = touch(this, touches$$1, t.identifier);\n      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n    }\n    t = g.that.__zoom;\n    if (g.touch1) {\n      var p0 = g.touch0[0], l0 = g.touch0[1],\n          p1 = g.touch1[0], l1 = g.touch1[1],\n          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n      t = scale(t, Math.sqrt(dp / dl));\n      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n    }\n    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n    else return;\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n  }\n\n  function touchended() {\n    var g = gesture(this, arguments),\n        touches$$1 = exports.event.changedTouches,\n        n = touches$$1.length, i, t;\n\n    nopropagation$2();\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, touchDelay);\n    for (i = 0; i < n; ++i) {\n      t = touches$$1[i];\n      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n    }\n    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n    else g.end();\n  }\n\n  zoom.wheelDelta = function(_) {\n    return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant$d(+_), zoom) : wheelDelta;\n  };\n\n  zoom.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$d(!!_), zoom) : filter;\n  };\n\n  zoom.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant$d(!!_), zoom) : touchable;\n  };\n\n  zoom.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant$d([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n  };\n\n  zoom.scaleExtent = function(_) {\n    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n  };\n\n  zoom.translateExtent = function(_) {\n    return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n  };\n\n  zoom.constrain = function(_) {\n    return arguments.length ? (constrain = _, zoom) : constrain;\n  };\n\n  zoom.duration = function(_) {\n    return arguments.length ? (duration = +_, zoom) : duration;\n  };\n\n  zoom.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, zoom) : interpolate;\n  };\n\n  zoom.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? zoom : value;\n  };\n\n  zoom.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n  };\n\n  return zoom;\n}\n\nexports.version = version;\nexports.bisect = bisectRight;\nexports.bisectRight = bisectRight;\nexports.bisectLeft = bisectLeft;\nexports.ascending = ascending;\nexports.bisector = bisector;\nexports.cross = cross;\nexports.descending = descending;\nexports.deviation = deviation;\nexports.extent = extent;\nexports.histogram = histogram;\nexports.thresholdFreedmanDiaconis = freedmanDiaconis;\nexports.thresholdScott = scott;\nexports.thresholdSturges = thresholdSturges;\nexports.max = max;\nexports.mean = mean;\nexports.median = median;\nexports.merge = merge;\nexports.min = min;\nexports.pairs = pairs;\nexports.permute = permute;\nexports.quantile = threshold;\nexports.range = sequence;\nexports.scan = scan;\nexports.shuffle = shuffle;\nexports.sum = sum;\nexports.ticks = ticks;\nexports.tickIncrement = tickIncrement;\nexports.tickStep = tickStep;\nexports.transpose = transpose;\nexports.variance = variance;\nexports.zip = zip;\nexports.axisTop = axisTop;\nexports.axisRight = axisRight;\nexports.axisBottom = axisBottom;\nexports.axisLeft = axisLeft;\nexports.brush = brush;\nexports.brushX = brushX;\nexports.brushY = brushY;\nexports.brushSelection = brushSelection;\nexports.chord = chord;\nexports.ribbon = ribbon;\nexports.nest = nest;\nexports.set = set$2;\nexports.map = map$1;\nexports.keys = keys;\nexports.values = values;\nexports.entries = entries;\nexports.color = color;\nexports.rgb = rgb;\nexports.hsl = hsl;\nexports.lab = lab;\nexports.hcl = hcl;\nexports.lch = lch;\nexports.gray = gray;\nexports.cubehelix = cubehelix;\nexports.contours = contours;\nexports.contourDensity = density;\nexports.dispatch = dispatch;\nexports.drag = drag;\nexports.dragDisable = dragDisable;\nexports.dragEnable = yesdrag;\nexports.dsvFormat = dsvFormat;\nexports.csvParse = csvParse;\nexports.csvParseRows = csvParseRows;\nexports.csvFormat = csvFormat;\nexports.csvFormatBody = csvFormatBody;\nexports.csvFormatRows = csvFormatRows;\nexports.tsvParse = tsvParse;\nexports.tsvParseRows = tsvParseRows;\nexports.tsvFormat = tsvFormat;\nexports.tsvFormatBody = tsvFormatBody;\nexports.tsvFormatRows = tsvFormatRows;\nexports.autoType = autoType;\nexports.easeLinear = linear$1;\nexports.easeQuad = quadInOut;\nexports.easeQuadIn = quadIn;\nexports.easeQuadOut = quadOut;\nexports.easeQuadInOut = quadInOut;\nexports.easeCubic = cubicInOut;\nexports.easeCubicIn = cubicIn;\nexports.easeCubicOut = cubicOut;\nexports.easeCubicInOut = cubicInOut;\nexports.easePoly = polyInOut;\nexports.easePolyIn = polyIn;\nexports.easePolyOut = polyOut;\nexports.easePolyInOut = polyInOut;\nexports.easeSin = sinInOut;\nexports.easeSinIn = sinIn;\nexports.easeSinOut = sinOut;\nexports.easeSinInOut = sinInOut;\nexports.easeExp = expInOut;\nexports.easeExpIn = expIn;\nexports.easeExpOut = expOut;\nexports.easeExpInOut = expInOut;\nexports.easeCircle = circleInOut;\nexports.easeCircleIn = circleIn;\nexports.easeCircleOut = circleOut;\nexports.easeCircleInOut = circleInOut;\nexports.easeBounce = bounceOut;\nexports.easeBounceIn = bounceIn;\nexports.easeBounceOut = bounceOut;\nexports.easeBounceInOut = bounceInOut;\nexports.easeBack = backInOut;\nexports.easeBackIn = backIn;\nexports.easeBackOut = backOut;\nexports.easeBackInOut = backInOut;\nexports.easeElastic = elasticOut;\nexports.easeElasticIn = elasticIn;\nexports.easeElasticOut = elasticOut;\nexports.easeElasticInOut = elasticInOut;\nexports.blob = blob;\nexports.buffer = buffer;\nexports.dsv = dsv;\nexports.csv = csv$1;\nexports.tsv = tsv$1;\nexports.image = image;\nexports.json = json;\nexports.text = text;\nexports.xml = xml;\nexports.html = html;\nexports.svg = svg;\nexports.forceCenter = center$1;\nexports.forceCollide = collide;\nexports.forceLink = link;\nexports.forceManyBody = manyBody;\nexports.forceRadial = radial;\nexports.forceSimulation = simulation;\nexports.forceX = x$2;\nexports.forceY = y$2;\nexports.formatDefaultLocale = defaultLocale;\nexports.formatLocale = formatLocale;\nexports.formatSpecifier = formatSpecifier;\nexports.precisionFixed = precisionFixed;\nexports.precisionPrefix = precisionPrefix;\nexports.precisionRound = precisionRound;\nexports.geoArea = area$1;\nexports.geoBounds = bounds;\nexports.geoCentroid = centroid;\nexports.geoCircle = circle;\nexports.geoClipAntimeridian = clipAntimeridian;\nexports.geoClipCircle = clipCircle;\nexports.geoClipExtent = extent$1;\nexports.geoClipRectangle = clipRectangle;\nexports.geoContains = contains$1;\nexports.geoDistance = distance;\nexports.geoGraticule = graticule;\nexports.geoGraticule10 = graticule10;\nexports.geoInterpolate = interpolate$1;\nexports.geoLength = length$1;\nexports.geoPath = index$1;\nexports.geoAlbers = albers;\nexports.geoAlbersUsa = albersUsa;\nexports.geoAzimuthalEqualArea = azimuthalEqualArea;\nexports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;\nexports.geoAzimuthalEquidistant = azimuthalEquidistant;\nexports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;\nexports.geoConicConformal = conicConformal;\nexports.geoConicConformalRaw = conicConformalRaw;\nexports.geoConicEqualArea = conicEqualArea;\nexports.geoConicEqualAreaRaw = conicEqualAreaRaw;\nexports.geoConicEquidistant = conicEquidistant;\nexports.geoConicEquidistantRaw = conicEquidistantRaw;\nexports.geoEqualEarth = equalEarth;\nexports.geoEqualEarthRaw = equalEarthRaw;\nexports.geoEquirectangular = equirectangular;\nexports.geoEquirectangularRaw = equirectangularRaw;\nexports.geoGnomonic = gnomonic;\nexports.geoGnomonicRaw = gnomonicRaw;\nexports.geoIdentity = identity$5;\nexports.geoProjection = projection;\nexports.geoProjectionMutator = projectionMutator;\nexports.geoMercator = mercator;\nexports.geoMercatorRaw = mercatorRaw;\nexports.geoNaturalEarth1 = naturalEarth1;\nexports.geoNaturalEarth1Raw = naturalEarth1Raw;\nexports.geoOrthographic = orthographic;\nexports.geoOrthographicRaw = orthographicRaw;\nexports.geoStereographic = stereographic;\nexports.geoStereographicRaw = stereographicRaw;\nexports.geoTransverseMercator = transverseMercator;\nexports.geoTransverseMercatorRaw = transverseMercatorRaw;\nexports.geoRotation = rotation;\nexports.geoStream = geoStream;\nexports.geoTransform = transform;\nexports.cluster = cluster;\nexports.hierarchy = hierarchy;\nexports.pack = index$2;\nexports.packSiblings = siblings;\nexports.packEnclose = enclose;\nexports.partition = partition;\nexports.stratify = stratify;\nexports.tree = tree;\nexports.treemap = index$3;\nexports.treemapBinary = binary;\nexports.treemapDice = treemapDice;\nexports.treemapSlice = treemapSlice;\nexports.treemapSliceDice = sliceDice;\nexports.treemapSquarify = squarify;\nexports.treemapResquarify = resquarify;\nexports.interpolate = interpolateValue;\nexports.interpolateArray = array$1;\nexports.interpolateBasis = basis$1;\nexports.interpolateBasisClosed = basisClosed;\nexports.interpolateDate = date;\nexports.interpolateDiscrete = discrete;\nexports.interpolateHue = hue$1;\nexports.interpolateNumber = interpolateNumber;\nexports.interpolateObject = object;\nexports.interpolateRound = interpolateRound;\nexports.interpolateString = interpolateString;\nexports.interpolateTransformCss = interpolateTransformCss;\nexports.interpolateTransformSvg = interpolateTransformSvg;\nexports.interpolateZoom = interpolateZoom;\nexports.interpolateRgb = interpolateRgb;\nexports.interpolateRgbBasis = rgbBasis;\nexports.interpolateRgbBasisClosed = rgbBasisClosed;\nexports.interpolateHsl = hsl$2;\nexports.interpolateHslLong = hslLong;\nexports.interpolateLab = lab$1;\nexports.interpolateHcl = hcl$2;\nexports.interpolateHclLong = hclLong;\nexports.interpolateCubehelix = cubehelix$2;\nexports.interpolateCubehelixLong = cubehelixLong;\nexports.piecewise = piecewise;\nexports.quantize = quantize;\nexports.path = path;\nexports.polygonArea = area$2;\nexports.polygonCentroid = centroid$1;\nexports.polygonHull = hull;\nexports.polygonContains = contains$2;\nexports.polygonLength = length$2;\nexports.quadtree = quadtree;\nexports.randomUniform = uniform;\nexports.randomNormal = normal;\nexports.randomLogNormal = logNormal;\nexports.randomBates = bates;\nexports.randomIrwinHall = irwinHall;\nexports.randomExponential = exponential$1;\nexports.scaleBand = band;\nexports.scalePoint = point$1;\nexports.scaleIdentity = identity$7;\nexports.scaleLinear = linear$2;\nexports.scaleLog = log$1;\nexports.scaleSymlog = symlog;\nexports.scaleOrdinal = ordinal;\nexports.scaleImplicit = implicit;\nexports.scalePow = pow$1;\nexports.scaleSqrt = sqrt$1;\nexports.scaleQuantile = quantile$$1;\nexports.scaleQuantize = quantize$1;\nexports.scaleThreshold = threshold$1;\nexports.scaleTime = time;\nexports.scaleUtc = utcTime;\nexports.scaleSequential = sequential;\nexports.scaleSequentialLog = sequentialLog;\nexports.scaleSequentialPow = sequentialPow;\nexports.scaleSequentialSqrt = sequentialSqrt;\nexports.scaleSequentialSymlog = sequentialSymlog;\nexports.scaleSequentialQuantile = sequentialQuantile;\nexports.scaleDiverging = diverging;\nexports.scaleDivergingLog = divergingLog;\nexports.scaleDivergingPow = divergingPow;\nexports.scaleDivergingSqrt = divergingSqrt;\nexports.scaleDivergingSymlog = divergingSymlog;\nexports.tickFormat = tickFormat;\nexports.schemeCategory10 = category10;\nexports.schemeAccent = Accent;\nexports.schemeDark2 = Dark2;\nexports.schemePaired = Paired;\nexports.schemePastel1 = Pastel1;\nexports.schemePastel2 = Pastel2;\nexports.schemeSet1 = Set1;\nexports.schemeSet2 = Set2;\nexports.schemeSet3 = Set3;\nexports.interpolateBrBG = BrBG;\nexports.schemeBrBG = scheme;\nexports.interpolatePRGn = PRGn;\nexports.schemePRGn = scheme$1;\nexports.interpolatePiYG = PiYG;\nexports.schemePiYG = scheme$2;\nexports.interpolatePuOr = PuOr;\nexports.schemePuOr = scheme$3;\nexports.interpolateRdBu = RdBu;\nexports.schemeRdBu = scheme$4;\nexports.interpolateRdGy = RdGy;\nexports.schemeRdGy = scheme$5;\nexports.interpolateRdYlBu = RdYlBu;\nexports.schemeRdYlBu = scheme$6;\nexports.interpolateRdYlGn = RdYlGn;\nexports.schemeRdYlGn = scheme$7;\nexports.interpolateSpectral = Spectral;\nexports.schemeSpectral = scheme$8;\nexports.interpolateBuGn = BuGn;\nexports.schemeBuGn = scheme$9;\nexports.interpolateBuPu = BuPu;\nexports.schemeBuPu = scheme$a;\nexports.interpolateGnBu = GnBu;\nexports.schemeGnBu = scheme$b;\nexports.interpolateOrRd = OrRd;\nexports.schemeOrRd = scheme$c;\nexports.interpolatePuBuGn = PuBuGn;\nexports.schemePuBuGn = scheme$d;\nexports.interpolatePuBu = PuBu;\nexports.schemePuBu = scheme$e;\nexports.interpolatePuRd = PuRd;\nexports.schemePuRd = scheme$f;\nexports.interpolateRdPu = RdPu;\nexports.schemeRdPu = scheme$g;\nexports.interpolateYlGnBu = YlGnBu;\nexports.schemeYlGnBu = scheme$h;\nexports.interpolateYlGn = YlGn;\nexports.schemeYlGn = scheme$i;\nexports.interpolateYlOrBr = YlOrBr;\nexports.schemeYlOrBr = scheme$j;\nexports.interpolateYlOrRd = YlOrRd;\nexports.schemeYlOrRd = scheme$k;\nexports.interpolateBlues = Blues;\nexports.schemeBlues = scheme$l;\nexports.interpolateGreens = Greens;\nexports.schemeGreens = scheme$m;\nexports.interpolateGreys = Greys;\nexports.schemeGreys = scheme$n;\nexports.interpolatePurples = Purples;\nexports.schemePurples = scheme$o;\nexports.interpolateReds = Reds;\nexports.schemeReds = scheme$p;\nexports.interpolateOranges = Oranges;\nexports.schemeOranges = scheme$q;\nexports.interpolateCubehelixDefault = cubehelix$3;\nexports.interpolateRainbow = rainbow;\nexports.interpolateWarm = warm;\nexports.interpolateCool = cool;\nexports.interpolateSinebow = sinebow;\nexports.interpolateViridis = viridis;\nexports.interpolateMagma = magma;\nexports.interpolateInferno = inferno;\nexports.interpolatePlasma = plasma;\nexports.create = create;\nexports.creator = creator;\nexports.local = local;\nexports.matcher = matcher;\nexports.mouse = mouse;\nexports.namespace = namespace;\nexports.namespaces = namespaces;\nexports.clientPoint = point;\nexports.select = select;\nexports.selectAll = selectAll;\nexports.selection = selection;\nexports.selector = selector;\nexports.selectorAll = selectorAll;\nexports.style = styleValue;\nexports.touch = touch;\nexports.touches = touches;\nexports.window = defaultView;\nexports.customEvent = customEvent;\nexports.arc = arc;\nexports.area = area$3;\nexports.line = line;\nexports.pie = pie;\nexports.areaRadial = areaRadial;\nexports.radialArea = areaRadial;\nexports.lineRadial = lineRadial$1;\nexports.radialLine = lineRadial$1;\nexports.pointRadial = pointRadial;\nexports.linkHorizontal = linkHorizontal;\nexports.linkVertical = linkVertical;\nexports.linkRadial = linkRadial;\nexports.symbol = symbol;\nexports.symbols = symbols;\nexports.symbolCircle = circle$2;\nexports.symbolCross = cross$2;\nexports.symbolDiamond = diamond;\nexports.symbolSquare = square;\nexports.symbolStar = star;\nexports.symbolTriangle = triangle;\nexports.symbolWye = wye;\nexports.curveBasisClosed = basisClosed$1;\nexports.curveBasisOpen = basisOpen;\nexports.curveBasis = basis$2;\nexports.curveBundle = bundle;\nexports.curveCardinalClosed = cardinalClosed;\nexports.curveCardinalOpen = cardinalOpen;\nexports.curveCardinal = cardinal;\nexports.curveCatmullRomClosed = catmullRomClosed;\nexports.curveCatmullRomOpen = catmullRomOpen;\nexports.curveCatmullRom = catmullRom;\nexports.curveLinearClosed = linearClosed;\nexports.curveLinear = curveLinear;\nexports.curveMonotoneX = monotoneX;\nexports.curveMonotoneY = monotoneY;\nexports.curveNatural = natural;\nexports.curveStep = step;\nexports.curveStepAfter = stepAfter;\nexports.curveStepBefore = stepBefore;\nexports.stack = stack;\nexports.stackOffsetExpand = expand;\nexports.stackOffsetDiverging = diverging$1;\nexports.stackOffsetNone = none$1;\nexports.stackOffsetSilhouette = silhouette;\nexports.stackOffsetWiggle = wiggle;\nexports.stackOrderAppearance = appearance;\nexports.stackOrderAscending = ascending$3;\nexports.stackOrderDescending = descending$2;\nexports.stackOrderInsideOut = insideOut;\nexports.stackOrderNone = none$2;\nexports.stackOrderReverse = reverse;\nexports.timeInterval = newInterval;\nexports.timeMillisecond = millisecond;\nexports.timeMilliseconds = milliseconds;\nexports.utcMillisecond = millisecond;\nexports.utcMilliseconds = milliseconds;\nexports.timeSecond = second;\nexports.timeSeconds = seconds;\nexports.utcSecond = second;\nexports.utcSeconds = seconds;\nexports.timeMinute = minute;\nexports.timeMinutes = minutes;\nexports.timeHour = hour;\nexports.timeHours = hours;\nexports.timeDay = day;\nexports.timeDays = days;\nexports.timeWeek = sunday;\nexports.timeWeeks = sundays;\nexports.timeSunday = sunday;\nexports.timeSundays = sundays;\nexports.timeMonday = monday;\nexports.timeMondays = mondays;\nexports.timeTuesday = tuesday;\nexports.timeTuesdays = tuesdays;\nexports.timeWednesday = wednesday;\nexports.timeWednesdays = wednesdays;\nexports.timeThursday = thursday;\nexports.timeThursdays = thursdays;\nexports.timeFriday = friday;\nexports.timeFridays = fridays;\nexports.timeSaturday = saturday;\nexports.timeSaturdays = saturdays;\nexports.timeMonth = month;\nexports.timeMonths = months;\nexports.timeYear = year;\nexports.timeYears = years;\nexports.utcMinute = utcMinute;\nexports.utcMinutes = utcMinutes;\nexports.utcHour = utcHour;\nexports.utcHours = utcHours;\nexports.utcDay = utcDay;\nexports.utcDays = utcDays;\nexports.utcWeek = utcSunday;\nexports.utcWeeks = utcSundays;\nexports.utcSunday = utcSunday;\nexports.utcSundays = utcSundays;\nexports.utcMonday = utcMonday;\nexports.utcMondays = utcMondays;\nexports.utcTuesday = utcTuesday;\nexports.utcTuesdays = utcTuesdays;\nexports.utcWednesday = utcWednesday;\nexports.utcWednesdays = utcWednesdays;\nexports.utcThursday = utcThursday;\nexports.utcThursdays = utcThursdays;\nexports.utcFriday = utcFriday;\nexports.utcFridays = utcFridays;\nexports.utcSaturday = utcSaturday;\nexports.utcSaturdays = utcSaturdays;\nexports.utcMonth = utcMonth;\nexports.utcMonths = utcMonths;\nexports.utcYear = utcYear;\nexports.utcYears = utcYears;\nexports.timeFormatDefaultLocale = defaultLocale$1;\nexports.timeFormatLocale = formatLocale$1;\nexports.isoFormat = formatIso;\nexports.isoParse = parseIso;\nexports.now = now;\nexports.timer = timer;\nexports.timerFlush = timerFlush;\nexports.timeout = timeout$1;\nexports.interval = interval$1;\nexports.transition = transition;\nexports.active = active;\nexports.interrupt = interrupt;\nexports.voronoi = voronoi;\nexports.zoom = zoom;\nexports.zoomTransform = transform$1;\nexports.zoomIdentity = identity$9;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n","/* @license C3.js v0.6.12 | (c) C3 Team and other contributors | http://c3js.org/ */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define('c3',factory) :\n  (global.c3 = factory());\n}(this, (function () { 'use strict';\n\n  function _typeof(obj) {\n    if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n      _typeof = function (obj) {\n        return typeof obj;\n      };\n    } else {\n      _typeof = function (obj) {\n        return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n      };\n    }\n\n    return _typeof(obj);\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function ChartInternal(api) {\n    var $$ = this;\n    $$.d3 = window.d3 ? window.d3 : typeof require !== 'undefined' ? require(\"d3\") : undefined;\n    $$.api = api;\n    $$.config = $$.getDefaultConfig();\n    $$.data = {};\n    $$.cache = {};\n    $$.axes = {};\n  }\n\n  function Chart(config) {\n    var $$ = this.internal = new ChartInternal(this);\n    $$.loadConfig(config);\n    $$.beforeInit(config);\n    $$.init();\n    $$.afterInit(config); // bind \"this\" to nested API\n\n    (function bindThis(fn, target, argThis) {\n      Object.keys(fn).forEach(function (key) {\n        target[key] = fn[key].bind(argThis);\n\n        if (Object.keys(fn[key]).length > 0) {\n          bindThis(fn[key], target[key], argThis);\n        }\n      });\n    })(Chart.prototype, this, this);\n  }\n\n  function AxisInternal(component, params) {\n    var internal = this;\n    internal.component = component;\n    internal.params = params || {};\n    internal.d3 = component.d3;\n    internal.scale = internal.d3.scaleLinear();\n    internal.range;\n    internal.orient = \"bottom\";\n    internal.innerTickSize = 6;\n    internal.outerTickSize = this.params.withOuterTick ? 6 : 0;\n    internal.tickPadding = 3;\n    internal.tickValues = null;\n    internal.tickFormat;\n    internal.tickArguments;\n    internal.tickOffset = 0;\n    internal.tickCulling = true;\n    internal.tickCentered;\n    internal.tickTextCharSize;\n    internal.tickTextRotate = internal.params.tickTextRotate;\n    internal.tickLength;\n    internal.axis = internal.generateAxis();\n  }\n\n  AxisInternal.prototype.axisX = function (selection, x, tickOffset) {\n    selection.attr(\"transform\", function (d) {\n      return \"translate(\" + Math.ceil(x(d) + tickOffset) + \", 0)\";\n    });\n  };\n\n  AxisInternal.prototype.axisY = function (selection, y) {\n    selection.attr(\"transform\", function (d) {\n      return \"translate(0,\" + Math.ceil(y(d)) + \")\";\n    });\n  };\n\n  AxisInternal.prototype.scaleExtent = function (domain) {\n    var start = domain[0],\n        stop = domain[domain.length - 1];\n    return start < stop ? [start, stop] : [stop, start];\n  };\n\n  AxisInternal.prototype.generateTicks = function (scale) {\n    var internal = this;\n    var i,\n        domain,\n        ticks = [];\n\n    if (scale.ticks) {\n      return scale.ticks.apply(scale, internal.tickArguments);\n    }\n\n    domain = scale.domain();\n\n    for (i = Math.ceil(domain[0]); i < domain[1]; i++) {\n      ticks.push(i);\n    }\n\n    if (ticks.length > 0 && ticks[0] > 0) {\n      ticks.unshift(ticks[0] - (ticks[1] - ticks[0]));\n    }\n\n    return ticks;\n  };\n\n  AxisInternal.prototype.copyScale = function () {\n    var internal = this;\n    var newScale = internal.scale.copy(),\n        domain;\n\n    if (internal.params.isCategory) {\n      domain = internal.scale.domain();\n      newScale.domain([domain[0], domain[1] - 1]);\n    }\n\n    return newScale;\n  };\n\n  AxisInternal.prototype.textFormatted = function (v) {\n    var internal = this,\n        formatted = internal.tickFormat ? internal.tickFormat(v) : v;\n    return typeof formatted !== 'undefined' ? formatted : '';\n  };\n\n  AxisInternal.prototype.updateRange = function () {\n    var internal = this;\n    internal.range = internal.scale.rangeExtent ? internal.scale.rangeExtent() : internal.scaleExtent(internal.scale.range());\n    return internal.range;\n  };\n\n  AxisInternal.prototype.updateTickTextCharSize = function (tick) {\n    var internal = this;\n\n    if (internal.tickTextCharSize) {\n      return internal.tickTextCharSize;\n    }\n\n    var size = {\n      h: 11.5,\n      w: 5.5\n    };\n    tick.select('text').text(function (d) {\n      return internal.textFormatted(d);\n    }).each(function (d) {\n      var box = this.getBoundingClientRect(),\n          text = internal.textFormatted(d),\n          h = box.height,\n          w = text ? box.width / text.length : undefined;\n\n      if (h && w) {\n        size.h = h;\n        size.w = w;\n      }\n    }).text('');\n    internal.tickTextCharSize = size;\n    return size;\n  };\n\n  AxisInternal.prototype.isVertical = function () {\n    return this.orient === 'left' || this.orient === 'right';\n  };\n\n  AxisInternal.prototype.tspanData = function (d, i, scale) {\n    var internal = this;\n    var splitted = internal.params.tickMultiline ? internal.splitTickText(d, scale) : [].concat(internal.textFormatted(d));\n\n    if (internal.params.tickMultiline && internal.params.tickMultilineMax > 0) {\n      splitted = internal.ellipsify(splitted, internal.params.tickMultilineMax);\n    }\n\n    return splitted.map(function (s) {\n      return {\n        index: i,\n        splitted: s,\n        length: splitted.length\n      };\n    });\n  };\n\n  AxisInternal.prototype.splitTickText = function (d, scale) {\n    var internal = this,\n        tickText = internal.textFormatted(d),\n        maxWidth = internal.params.tickWidth,\n        subtext,\n        spaceIndex,\n        textWidth,\n        splitted = [];\n\n    if (Object.prototype.toString.call(tickText) === \"[object Array]\") {\n      return tickText;\n    }\n\n    if (!maxWidth || maxWidth <= 0) {\n      maxWidth = internal.isVertical() ? 95 : internal.params.isCategory ? Math.ceil(scale(1) - scale(0)) - 12 : 110;\n    }\n\n    function split(splitted, text) {\n      spaceIndex = undefined;\n\n      for (var i = 1; i < text.length; i++) {\n        if (text.charAt(i) === ' ') {\n          spaceIndex = i;\n        }\n\n        subtext = text.substr(0, i + 1);\n        textWidth = internal.tickTextCharSize.w * subtext.length; // if text width gets over tick width, split by space index or crrent index\n\n        if (maxWidth < textWidth) {\n          return split(splitted.concat(text.substr(0, spaceIndex ? spaceIndex : i)), text.slice(spaceIndex ? spaceIndex + 1 : i));\n        }\n      }\n\n      return splitted.concat(text);\n    }\n\n    return split(splitted, tickText + \"\");\n  };\n\n  AxisInternal.prototype.ellipsify = function (splitted, max) {\n    if (splitted.length <= max) {\n      return splitted;\n    }\n\n    var ellipsified = splitted.slice(0, max);\n    var remaining = 3;\n\n    for (var i = max - 1; i >= 0; i--) {\n      var available = ellipsified[i].length;\n      ellipsified[i] = ellipsified[i].substr(0, available - remaining).padEnd(available, '.');\n      remaining -= available;\n\n      if (remaining <= 0) {\n        break;\n      }\n    }\n\n    return ellipsified;\n  };\n\n  AxisInternal.prototype.updateTickLength = function () {\n    var internal = this;\n    internal.tickLength = Math.max(internal.innerTickSize, 0) + internal.tickPadding;\n  };\n\n  AxisInternal.prototype.lineY2 = function (d) {\n    var internal = this,\n        tickPosition = internal.scale(d) + (internal.tickCentered ? 0 : internal.tickOffset);\n    return internal.range[0] < tickPosition && tickPosition < internal.range[1] ? internal.innerTickSize : 0;\n  };\n\n  AxisInternal.prototype.textY = function () {\n    var internal = this,\n        rotate = internal.tickTextRotate;\n    return rotate ? 11.5 - 2.5 * (rotate / 15) * (rotate > 0 ? 1 : -1) : internal.tickLength;\n  };\n\n  AxisInternal.prototype.textTransform = function () {\n    var internal = this,\n        rotate = internal.tickTextRotate;\n    return rotate ? \"rotate(\" + rotate + \")\" : \"\";\n  };\n\n  AxisInternal.prototype.textTextAnchor = function () {\n    var internal = this,\n        rotate = internal.tickTextRotate;\n    return rotate ? rotate > 0 ? \"start\" : \"end\" : \"middle\";\n  };\n\n  AxisInternal.prototype.tspanDx = function () {\n    var internal = this,\n        rotate = internal.tickTextRotate;\n    return rotate ? 8 * Math.sin(Math.PI * (rotate / 180)) : 0;\n  };\n\n  AxisInternal.prototype.tspanDy = function (d, i) {\n    var internal = this,\n        dy = internal.tickTextCharSize.h;\n\n    if (i === 0) {\n      if (internal.isVertical()) {\n        dy = -((d.length - 1) * (internal.tickTextCharSize.h / 2) - 3);\n      } else {\n        dy = \".71em\";\n      }\n    }\n\n    return dy;\n  };\n\n  AxisInternal.prototype.generateAxis = function () {\n    var internal = this,\n        d3 = internal.d3,\n        params = internal.params;\n\n    function axis(g, transition) {\n      var self;\n      g.each(function () {\n        var g = axis.g = d3.select(this);\n        var scale0 = this.__chart__ || internal.scale,\n            scale1 = this.__chart__ = internal.copyScale();\n        var ticksValues = internal.tickValues ? internal.tickValues : internal.generateTicks(scale1),\n            ticks = g.selectAll(\".tick\").data(ticksValues, scale1),\n            tickEnter = ticks.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", 1e-6),\n            // MEMO: No exit transition. The reason is this transition affects max tick width calculation because old tick will be included in the ticks.\n        tickExit = ticks.exit().remove(),\n            tickUpdate = ticks.merge(tickEnter),\n            tickTransform,\n            tickX,\n            tickY;\n\n        if (params.isCategory) {\n          internal.tickOffset = Math.ceil((scale1(1) - scale1(0)) / 2);\n          tickX = internal.tickCentered ? 0 : internal.tickOffset;\n          tickY = internal.tickCentered ? internal.tickOffset : 0;\n        } else {\n          internal.tickOffset = tickX = 0;\n        }\n\n        internal.updateRange();\n        internal.updateTickLength();\n        internal.updateTickTextCharSize(g.select('.tick'));\n        var lineUpdate = tickUpdate.select(\"line\").merge(tickEnter.append(\"line\")),\n            textUpdate = tickUpdate.select(\"text\").merge(tickEnter.append(\"text\"));\n        var tspans = tickUpdate.selectAll('text').selectAll('tspan').data(function (d, i) {\n          return internal.tspanData(d, i, scale1);\n        }),\n            tspanEnter = tspans.enter().append('tspan'),\n            tspanUpdate = tspanEnter.merge(tspans).text(function (d) {\n          return d.splitted;\n        });\n        tspans.exit().remove();\n        var path = g.selectAll(\".domain\").data([0]),\n            pathUpdate = path.enter().append(\"path\").merge(path).attr(\"class\", \"domain\"); // TODO: each attr should be one function and change its behavior by internal.orient, probably\n\n        switch (internal.orient) {\n          case \"bottom\":\n            {\n              tickTransform = internal.axisX;\n              lineUpdate.attr(\"x1\", tickX).attr(\"x2\", tickX).attr(\"y2\", function (d, i) {\n                return internal.lineY2(d, i);\n              });\n              textUpdate.attr(\"x\", 0).attr(\"y\", function (d, i) {\n                return internal.textY(d, i);\n              }).attr(\"transform\", function (d, i) {\n                return internal.textTransform(d, i);\n              }).style(\"text-anchor\", function (d, i) {\n                return internal.textTextAnchor(d, i);\n              });\n              tspanUpdate.attr('x', 0).attr(\"dy\", function (d, i) {\n                return internal.tspanDy(d, i);\n              }).attr('dx', function (d, i) {\n                return internal.tspanDx(d, i);\n              });\n              pathUpdate.attr(\"d\", \"M\" + internal.range[0] + \",\" + internal.outerTickSize + \"V0H\" + internal.range[1] + \"V\" + internal.outerTickSize);\n              break;\n            }\n\n          case \"top\":\n            {\n              // TODO: rotated tick text\n              tickTransform = internal.axisX;\n              lineUpdate.attr(\"x1\", tickX).attr(\"x2\", tickX).attr(\"y2\", function (d, i) {\n                return -1 * internal.lineY2(d, i);\n              });\n              textUpdate.attr(\"x\", 0).attr(\"y\", function (d, i) {\n                return -1 * internal.textY(d, i) - (params.isCategory ? 2 : internal.tickLength - 2);\n              }).attr(\"transform\", function (d, i) {\n                return internal.textTransform(d, i);\n              }).style(\"text-anchor\", function (d, i) {\n                return internal.textTextAnchor(d, i);\n              });\n              tspanUpdate.attr('x', 0).attr(\"dy\", function (d, i) {\n                return internal.tspanDy(d, i);\n              }).attr('dx', function (d, i) {\n                return internal.tspanDx(d, i);\n              });\n              pathUpdate.attr(\"d\", \"M\" + internal.range[0] + \",\" + -internal.outerTickSize + \"V0H\" + internal.range[1] + \"V\" + -internal.outerTickSize);\n              break;\n            }\n\n          case \"left\":\n            {\n              tickTransform = internal.axisY;\n              lineUpdate.attr(\"x2\", -internal.innerTickSize).attr(\"y1\", tickY).attr(\"y2\", tickY);\n              textUpdate.attr(\"x\", -internal.tickLength).attr(\"y\", internal.tickOffset).style(\"text-anchor\", \"end\");\n              tspanUpdate.attr('x', -internal.tickLength).attr(\"dy\", function (d, i) {\n                return internal.tspanDy(d, i);\n              });\n              pathUpdate.attr(\"d\", \"M\" + -internal.outerTickSize + \",\" + internal.range[0] + \"H0V\" + internal.range[1] + \"H\" + -internal.outerTickSize);\n              break;\n            }\n\n          case \"right\":\n            {\n              tickTransform = internal.axisY;\n              lineUpdate.attr(\"x2\", internal.innerTickSize).attr(\"y1\", tickY).attr(\"y2\", tickY);\n              textUpdate.attr(\"x\", internal.tickLength).attr(\"y\", internal.tickOffset).style(\"text-anchor\", \"start\");\n              tspanUpdate.attr('x', internal.tickLength).attr(\"dy\", function (d, i) {\n                return internal.tspanDy(d, i);\n              });\n              pathUpdate.attr(\"d\", \"M\" + internal.outerTickSize + \",\" + internal.range[0] + \"H0V\" + internal.range[1] + \"H\" + internal.outerTickSize);\n              break;\n            }\n        }\n\n        if (scale1.rangeBand) {\n          var x = scale1,\n              dx = x.rangeBand() / 2;\n\n          scale0 = scale1 = function scale1(d) {\n            return x(d) + dx;\n          };\n        } else if (scale0.rangeBand) {\n          scale0 = scale1;\n        } else {\n          tickExit.call(tickTransform, scale1, internal.tickOffset);\n        }\n\n        tickEnter.call(tickTransform, scale0, internal.tickOffset);\n        self = (transition ? tickUpdate.transition(transition) : tickUpdate).style('opacity', 1).call(tickTransform, scale1, internal.tickOffset);\n      });\n      return self;\n    }\n\n    axis.scale = function (x) {\n      if (!arguments.length) {\n        return internal.scale;\n      }\n\n      internal.scale = x;\n      return axis;\n    };\n\n    axis.orient = function (x) {\n      if (!arguments.length) {\n        return internal.orient;\n      }\n\n      internal.orient = x in {\n        top: 1,\n        right: 1,\n        bottom: 1,\n        left: 1\n      } ? x + \"\" : \"bottom\";\n      return axis;\n    };\n\n    axis.tickFormat = function (format) {\n      if (!arguments.length) {\n        return internal.tickFormat;\n      }\n\n      internal.tickFormat = format;\n      return axis;\n    };\n\n    axis.tickCentered = function (isCentered) {\n      if (!arguments.length) {\n        return internal.tickCentered;\n      }\n\n      internal.tickCentered = isCentered;\n      return axis;\n    };\n\n    axis.tickOffset = function () {\n      return internal.tickOffset;\n    };\n\n    axis.tickInterval = function () {\n      var interval, length;\n\n      if (params.isCategory) {\n        interval = internal.tickOffset * 2;\n      } else {\n        length = axis.g.select('path.domain').node().getTotalLength() - internal.outerTickSize * 2;\n        interval = length / axis.g.selectAll('line').size();\n      }\n\n      return interval === Infinity ? 0 : interval;\n    };\n\n    axis.ticks = function () {\n      if (!arguments.length) {\n        return internal.tickArguments;\n      }\n\n      internal.tickArguments = arguments;\n      return axis;\n    };\n\n    axis.tickCulling = function (culling) {\n      if (!arguments.length) {\n        return internal.tickCulling;\n      }\n\n      internal.tickCulling = culling;\n      return axis;\n    };\n\n    axis.tickValues = function (x) {\n      if (typeof x === 'function') {\n        internal.tickValues = function () {\n          return x(internal.scale.domain());\n        };\n      } else {\n        if (!arguments.length) {\n          return internal.tickValues;\n        }\n\n        internal.tickValues = x;\n      }\n\n      return axis;\n    };\n\n    return axis;\n  };\n\n  var CLASS = {\n    target: 'c3-target',\n    chart: 'c3-chart',\n    chartLine: 'c3-chart-line',\n    chartLines: 'c3-chart-lines',\n    chartBar: 'c3-chart-bar',\n    chartBars: 'c3-chart-bars',\n    chartText: 'c3-chart-text',\n    chartTexts: 'c3-chart-texts',\n    chartArc: 'c3-chart-arc',\n    chartArcs: 'c3-chart-arcs',\n    chartArcsTitle: 'c3-chart-arcs-title',\n    chartArcsBackground: 'c3-chart-arcs-background',\n    chartArcsGaugeUnit: 'c3-chart-arcs-gauge-unit',\n    chartArcsGaugeMax: 'c3-chart-arcs-gauge-max',\n    chartArcsGaugeMin: 'c3-chart-arcs-gauge-min',\n    selectedCircle: 'c3-selected-circle',\n    selectedCircles: 'c3-selected-circles',\n    eventRect: 'c3-event-rect',\n    eventRects: 'c3-event-rects',\n    eventRectsSingle: 'c3-event-rects-single',\n    eventRectsMultiple: 'c3-event-rects-multiple',\n    zoomRect: 'c3-zoom-rect',\n    brush: 'c3-brush',\n    dragZoom: 'c3-drag-zoom',\n    focused: 'c3-focused',\n    defocused: 'c3-defocused',\n    region: 'c3-region',\n    regions: 'c3-regions',\n    title: 'c3-title',\n    tooltipContainer: 'c3-tooltip-container',\n    tooltip: 'c3-tooltip',\n    tooltipName: 'c3-tooltip-name',\n    shape: 'c3-shape',\n    shapes: 'c3-shapes',\n    line: 'c3-line',\n    lines: 'c3-lines',\n    bar: 'c3-bar',\n    bars: 'c3-bars',\n    circle: 'c3-circle',\n    circles: 'c3-circles',\n    arc: 'c3-arc',\n    arcLabelLine: 'c3-arc-label-line',\n    arcs: 'c3-arcs',\n    area: 'c3-area',\n    areas: 'c3-areas',\n    empty: 'c3-empty',\n    text: 'c3-text',\n    texts: 'c3-texts',\n    gaugeValue: 'c3-gauge-value',\n    grid: 'c3-grid',\n    gridLines: 'c3-grid-lines',\n    xgrid: 'c3-xgrid',\n    xgrids: 'c3-xgrids',\n    xgridLine: 'c3-xgrid-line',\n    xgridLines: 'c3-xgrid-lines',\n    xgridFocus: 'c3-xgrid-focus',\n    ygrid: 'c3-ygrid',\n    ygrids: 'c3-ygrids',\n    ygridLine: 'c3-ygrid-line',\n    ygridLines: 'c3-ygrid-lines',\n    axis: 'c3-axis',\n    axisX: 'c3-axis-x',\n    axisXLabel: 'c3-axis-x-label',\n    axisY: 'c3-axis-y',\n    axisYLabel: 'c3-axis-y-label',\n    axisY2: 'c3-axis-y2',\n    axisY2Label: 'c3-axis-y2-label',\n    legendBackground: 'c3-legend-background',\n    legendItem: 'c3-legend-item',\n    legendItemEvent: 'c3-legend-item-event',\n    legendItemTile: 'c3-legend-item-tile',\n    legendItemHidden: 'c3-legend-item-hidden',\n    legendItemFocused: 'c3-legend-item-focused',\n    dragarea: 'c3-dragarea',\n    EXPANDED: '_expanded_',\n    SELECTED: '_selected_',\n    INCLUDED: '_included_'\n  };\n\n  var asHalfPixel = function asHalfPixel(n) {\n    return Math.ceil(n) + 0.5;\n  };\n  var ceil10 = function ceil10(v) {\n    return Math.ceil(v / 10) * 10;\n  };\n  var diffDomain = function diffDomain(d) {\n    return d[1] - d[0];\n  };\n  var getOption = function getOption(options, key, defaultValue) {\n    return isDefined(options[key]) ? options[key] : defaultValue;\n  };\n  var getPathBox = function getPathBox(path) {\n    var box = path.getBoundingClientRect(),\n        items = [path.pathSegList.getItem(0), path.pathSegList.getItem(1)],\n        minX = items[0].x,\n        minY = Math.min(items[0].y, items[1].y);\n    return {\n      x: minX,\n      y: minY,\n      width: box.width,\n      height: box.height\n    };\n  };\n  var hasValue = function hasValue(dict, value) {\n    var found = false;\n    Object.keys(dict).forEach(function (key) {\n      if (dict[key] === value) {\n        found = true;\n      }\n    });\n    return found;\n  };\n  var isArray = function isArray(o) {\n    return Array.isArray(o);\n  };\n  var isDefined = function isDefined(v) {\n    return typeof v !== 'undefined';\n  };\n  var isEmpty = function isEmpty(o) {\n    return typeof o === 'undefined' || o === null || isString(o) && o.length === 0 || _typeof(o) === 'object' && Object.keys(o).length === 0;\n  };\n  var isFunction = function isFunction(o) {\n    return typeof o === 'function';\n  };\n  var isString = function isString(o) {\n    return typeof o === 'string';\n  };\n  var isUndefined = function isUndefined(v) {\n    return typeof v === 'undefined';\n  };\n  var isValue = function isValue(v) {\n    return v || v === 0;\n  };\n  var notEmpty = function notEmpty(o) {\n    return !isEmpty(o);\n  };\n  var sanitise = function sanitise(str) {\n    return typeof str === 'string' ? str.replace(/</g, '&lt;').replace(/>/g, '&gt;') : str;\n  };\n\n  var Axis = function Axis(owner) {\n    _classCallCheck(this, Axis);\n\n    this.owner = owner;\n    this.d3 = owner.d3;\n    this.internal = AxisInternal;\n  };\n\n  Axis.prototype.init = function init() {\n    var $$ = this.owner,\n        config = $$.config,\n        main = $$.main;\n    $$.axes.x = main.append(\"g\").attr(\"class\", CLASS.axis + ' ' + CLASS.axisX).attr(\"clip-path\", config.axis_x_inner ? \"\" : $$.clipPathForXAxis).attr(\"transform\", $$.getTranslate('x')).style(\"visibility\", config.axis_x_show ? 'visible' : 'hidden');\n    $$.axes.x.append(\"text\").attr(\"class\", CLASS.axisXLabel).attr(\"transform\", config.axis_rotated ? \"rotate(-90)\" : \"\").style(\"text-anchor\", this.textAnchorForXAxisLabel.bind(this));\n    $$.axes.y = main.append(\"g\").attr(\"class\", CLASS.axis + ' ' + CLASS.axisY).attr(\"clip-path\", config.axis_y_inner ? \"\" : $$.clipPathForYAxis).attr(\"transform\", $$.getTranslate('y')).style(\"visibility\", config.axis_y_show ? 'visible' : 'hidden');\n    $$.axes.y.append(\"text\").attr(\"class\", CLASS.axisYLabel).attr(\"transform\", config.axis_rotated ? \"\" : \"rotate(-90)\").style(\"text-anchor\", this.textAnchorForYAxisLabel.bind(this));\n    $$.axes.y2 = main.append(\"g\").attr(\"class\", CLASS.axis + ' ' + CLASS.axisY2) // clip-path?\n    .attr(\"transform\", $$.getTranslate('y2')).style(\"visibility\", config.axis_y2_show ? 'visible' : 'hidden');\n    $$.axes.y2.append(\"text\").attr(\"class\", CLASS.axisY2Label).attr(\"transform\", config.axis_rotated ? \"\" : \"rotate(-90)\").style(\"text-anchor\", this.textAnchorForY2AxisLabel.bind(this));\n  };\n\n  Axis.prototype.getXAxis = function getXAxis(scale, orient, tickFormat, tickValues, withOuterTick, withoutTransition, withoutRotateTickText) {\n    var $$ = this.owner,\n        config = $$.config,\n        axisParams = {\n      isCategory: $$.isCategorized(),\n      withOuterTick: withOuterTick,\n      tickMultiline: config.axis_x_tick_multiline,\n      tickMultilineMax: config.axis_x_tick_multiline ? Number(config.axis_x_tick_multilineMax) : 0,\n      tickWidth: config.axis_x_tick_width,\n      tickTextRotate: withoutRotateTickText ? 0 : config.axis_x_tick_rotate,\n      withoutTransition: withoutTransition\n    },\n        axis = new this.internal(this, axisParams).axis.scale(scale).orient(orient);\n\n    if ($$.isTimeSeries() && tickValues && typeof tickValues !== \"function\") {\n      tickValues = tickValues.map(function (v) {\n        return $$.parseDate(v);\n      });\n    } // Set tick\n\n\n    axis.tickFormat(tickFormat).tickValues(tickValues);\n\n    if ($$.isCategorized()) {\n      axis.tickCentered(config.axis_x_tick_centered);\n\n      if (isEmpty(config.axis_x_tick_culling)) {\n        config.axis_x_tick_culling = false;\n      }\n    }\n\n    return axis;\n  };\n\n  Axis.prototype.updateXAxisTickValues = function updateXAxisTickValues(targets, axis) {\n    var $$ = this.owner,\n        config = $$.config,\n        tickValues;\n\n    if (config.axis_x_tick_fit || config.axis_x_tick_count) {\n      tickValues = this.generateTickValues($$.mapTargetsToUniqueXs(targets), config.axis_x_tick_count, $$.isTimeSeries());\n    }\n\n    if (axis) {\n      axis.tickValues(tickValues);\n    } else {\n      $$.xAxis.tickValues(tickValues);\n      $$.subXAxis.tickValues(tickValues);\n    }\n\n    return tickValues;\n  };\n\n  Axis.prototype.getYAxis = function getYAxis(scale, orient, tickFormat, tickValues, withOuterTick, withoutTransition, withoutRotateTickText) {\n    var $$ = this.owner,\n        config = $$.config,\n        axisParams = {\n      withOuterTick: withOuterTick,\n      withoutTransition: withoutTransition,\n      tickTextRotate: withoutRotateTickText ? 0 : config.axis_y_tick_rotate\n    },\n        axis = new this.internal(this, axisParams).axis.scale(scale).orient(orient).tickFormat(tickFormat);\n\n    if ($$.isTimeSeriesY()) {\n      axis.ticks(config.axis_y_tick_time_type, config.axis_y_tick_time_interval);\n    } else {\n      axis.tickValues(tickValues);\n    }\n\n    return axis;\n  };\n\n  Axis.prototype.getId = function getId(id) {\n    var config = this.owner.config;\n    return id in config.data_axes ? config.data_axes[id] : 'y';\n  };\n\n  Axis.prototype.getXAxisTickFormat = function getXAxisTickFormat() {\n    // #2251 previously set any negative values to a whole number,\n    // however both should be truncated according to the users format specification\n    var $$ = this.owner,\n        config = $$.config;\n    var format = $$.isTimeSeries() ? $$.defaultAxisTimeFormat : $$.isCategorized() ? $$.categoryName : function (v) {\n      return v;\n    };\n\n    if (config.axis_x_tick_format) {\n      if (isFunction(config.axis_x_tick_format)) {\n        format = config.axis_x_tick_format;\n      } else if ($$.isTimeSeries()) {\n        format = function format(date) {\n          return date ? $$.axisTimeFormat(config.axis_x_tick_format)(date) : \"\";\n        };\n      }\n    }\n\n    return isFunction(format) ? function (v) {\n      return format.call($$, v);\n    } : format;\n  };\n\n  Axis.prototype.getTickValues = function getTickValues(tickValues, axis) {\n    return tickValues ? tickValues : axis ? axis.tickValues() : undefined;\n  };\n\n  Axis.prototype.getXAxisTickValues = function getXAxisTickValues() {\n    return this.getTickValues(this.owner.config.axis_x_tick_values, this.owner.xAxis);\n  };\n\n  Axis.prototype.getYAxisTickValues = function getYAxisTickValues() {\n    return this.getTickValues(this.owner.config.axis_y_tick_values, this.owner.yAxis);\n  };\n\n  Axis.prototype.getY2AxisTickValues = function getY2AxisTickValues() {\n    return this.getTickValues(this.owner.config.axis_y2_tick_values, this.owner.y2Axis);\n  };\n\n  Axis.prototype.getLabelOptionByAxisId = function getLabelOptionByAxisId(axisId) {\n    var $$ = this.owner,\n        config = $$.config,\n        option;\n\n    if (axisId === 'y') {\n      option = config.axis_y_label;\n    } else if (axisId === 'y2') {\n      option = config.axis_y2_label;\n    } else if (axisId === 'x') {\n      option = config.axis_x_label;\n    }\n\n    return option;\n  };\n\n  Axis.prototype.getLabelText = function getLabelText(axisId) {\n    var option = this.getLabelOptionByAxisId(axisId);\n    return isString(option) ? option : option ? option.text : null;\n  };\n\n  Axis.prototype.setLabelText = function setLabelText(axisId, text) {\n    var $$ = this.owner,\n        config = $$.config,\n        option = this.getLabelOptionByAxisId(axisId);\n\n    if (isString(option)) {\n      if (axisId === 'y') {\n        config.axis_y_label = text;\n      } else if (axisId === 'y2') {\n        config.axis_y2_label = text;\n      } else if (axisId === 'x') {\n        config.axis_x_label = text;\n      }\n    } else if (option) {\n      option.text = text;\n    }\n  };\n\n  Axis.prototype.getLabelPosition = function getLabelPosition(axisId, defaultPosition) {\n    var option = this.getLabelOptionByAxisId(axisId),\n        position = option && _typeof(option) === 'object' && option.position ? option.position : defaultPosition;\n    return {\n      isInner: position.indexOf('inner') >= 0,\n      isOuter: position.indexOf('outer') >= 0,\n      isLeft: position.indexOf('left') >= 0,\n      isCenter: position.indexOf('center') >= 0,\n      isRight: position.indexOf('right') >= 0,\n      isTop: position.indexOf('top') >= 0,\n      isMiddle: position.indexOf('middle') >= 0,\n      isBottom: position.indexOf('bottom') >= 0\n    };\n  };\n\n  Axis.prototype.getXAxisLabelPosition = function getXAxisLabelPosition() {\n    return this.getLabelPosition('x', this.owner.config.axis_rotated ? 'inner-top' : 'inner-right');\n  };\n\n  Axis.prototype.getYAxisLabelPosition = function getYAxisLabelPosition() {\n    return this.getLabelPosition('y', this.owner.config.axis_rotated ? 'inner-right' : 'inner-top');\n  };\n\n  Axis.prototype.getY2AxisLabelPosition = function getY2AxisLabelPosition() {\n    return this.getLabelPosition('y2', this.owner.config.axis_rotated ? 'inner-right' : 'inner-top');\n  };\n\n  Axis.prototype.getLabelPositionById = function getLabelPositionById(id) {\n    return id === 'y2' ? this.getY2AxisLabelPosition() : id === 'y' ? this.getYAxisLabelPosition() : this.getXAxisLabelPosition();\n  };\n\n  Axis.prototype.textForXAxisLabel = function textForXAxisLabel() {\n    return this.getLabelText('x');\n  };\n\n  Axis.prototype.textForYAxisLabel = function textForYAxisLabel() {\n    return this.getLabelText('y');\n  };\n\n  Axis.prototype.textForY2AxisLabel = function textForY2AxisLabel() {\n    return this.getLabelText('y2');\n  };\n\n  Axis.prototype.xForAxisLabel = function xForAxisLabel(forHorizontal, position) {\n    var $$ = this.owner;\n\n    if (forHorizontal) {\n      return position.isLeft ? 0 : position.isCenter ? $$.width / 2 : $$.width;\n    } else {\n      return position.isBottom ? -$$.height : position.isMiddle ? -$$.height / 2 : 0;\n    }\n  };\n\n  Axis.prototype.dxForAxisLabel = function dxForAxisLabel(forHorizontal, position) {\n    if (forHorizontal) {\n      return position.isLeft ? \"0.5em\" : position.isRight ? \"-0.5em\" : \"0\";\n    } else {\n      return position.isTop ? \"-0.5em\" : position.isBottom ? \"0.5em\" : \"0\";\n    }\n  };\n\n  Axis.prototype.textAnchorForAxisLabel = function textAnchorForAxisLabel(forHorizontal, position) {\n    if (forHorizontal) {\n      return position.isLeft ? 'start' : position.isCenter ? 'middle' : 'end';\n    } else {\n      return position.isBottom ? 'start' : position.isMiddle ? 'middle' : 'end';\n    }\n  };\n\n  Axis.prototype.xForXAxisLabel = function xForXAxisLabel() {\n    return this.xForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition());\n  };\n\n  Axis.prototype.xForYAxisLabel = function xForYAxisLabel() {\n    return this.xForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition());\n  };\n\n  Axis.prototype.xForY2AxisLabel = function xForY2AxisLabel() {\n    return this.xForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition());\n  };\n\n  Axis.prototype.dxForXAxisLabel = function dxForXAxisLabel() {\n    return this.dxForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition());\n  };\n\n  Axis.prototype.dxForYAxisLabel = function dxForYAxisLabel() {\n    return this.dxForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition());\n  };\n\n  Axis.prototype.dxForY2AxisLabel = function dxForY2AxisLabel() {\n    return this.dxForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition());\n  };\n\n  Axis.prototype.dyForXAxisLabel = function dyForXAxisLabel() {\n    var $$ = this.owner,\n        config = $$.config,\n        position = this.getXAxisLabelPosition();\n\n    if (config.axis_rotated) {\n      return position.isInner ? \"1.2em\" : -25 - ($$.config.axis_x_inner ? 0 : this.getMaxTickWidth('x'));\n    } else {\n      return position.isInner ? \"-0.5em\" : config.axis_x_height ? config.axis_x_height - 10 : \"3em\";\n    }\n  };\n\n  Axis.prototype.dyForYAxisLabel = function dyForYAxisLabel() {\n    var $$ = this.owner,\n        position = this.getYAxisLabelPosition();\n\n    if ($$.config.axis_rotated) {\n      return position.isInner ? \"-0.5em\" : \"3em\";\n    } else {\n      return position.isInner ? \"1.2em\" : -10 - ($$.config.axis_y_inner ? 0 : this.getMaxTickWidth('y') + 10);\n    }\n  };\n\n  Axis.prototype.dyForY2AxisLabel = function dyForY2AxisLabel() {\n    var $$ = this.owner,\n        position = this.getY2AxisLabelPosition();\n\n    if ($$.config.axis_rotated) {\n      return position.isInner ? \"1.2em\" : \"-2.2em\";\n    } else {\n      return position.isInner ? \"-0.5em\" : 15 + ($$.config.axis_y2_inner ? 0 : this.getMaxTickWidth('y2') + 15);\n    }\n  };\n\n  Axis.prototype.textAnchorForXAxisLabel = function textAnchorForXAxisLabel() {\n    var $$ = this.owner;\n    return this.textAnchorForAxisLabel(!$$.config.axis_rotated, this.getXAxisLabelPosition());\n  };\n\n  Axis.prototype.textAnchorForYAxisLabel = function textAnchorForYAxisLabel() {\n    var $$ = this.owner;\n    return this.textAnchorForAxisLabel($$.config.axis_rotated, this.getYAxisLabelPosition());\n  };\n\n  Axis.prototype.textAnchorForY2AxisLabel = function textAnchorForY2AxisLabel() {\n    var $$ = this.owner;\n    return this.textAnchorForAxisLabel($$.config.axis_rotated, this.getY2AxisLabelPosition());\n  };\n\n  Axis.prototype.getMaxTickWidth = function getMaxTickWidth(id, withoutRecompute) {\n    var $$ = this.owner,\n        config = $$.config,\n        maxWidth = 0,\n        targetsToShow,\n        scale,\n        axis,\n        dummy,\n        svg;\n\n    if (withoutRecompute && $$.currentMaxTickWidths[id]) {\n      return $$.currentMaxTickWidths[id];\n    }\n\n    if ($$.svg) {\n      targetsToShow = $$.filterTargetsToShow($$.data.targets);\n\n      if (id === 'y') {\n        scale = $$.y.copy().domain($$.getYDomain(targetsToShow, 'y'));\n        axis = this.getYAxis(scale, $$.yOrient, config.axis_y_tick_format, $$.yAxisTickValues, false, true, true);\n      } else if (id === 'y2') {\n        scale = $$.y2.copy().domain($$.getYDomain(targetsToShow, 'y2'));\n        axis = this.getYAxis(scale, $$.y2Orient, config.axis_y2_tick_format, $$.y2AxisTickValues, false, true, true);\n      } else {\n        scale = $$.x.copy().domain($$.getXDomain(targetsToShow));\n        axis = this.getXAxis(scale, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues, false, true, true);\n        this.updateXAxisTickValues(targetsToShow, axis);\n      }\n\n      dummy = $$.d3.select('body').append('div').classed('c3', true);\n      svg = dummy.append(\"svg\").style('visibility', 'hidden').style('position', 'fixed').style('top', 0).style('left', 0), svg.append('g').call(axis).each(function () {\n        $$.d3.select(this).selectAll('text').each(function () {\n          var box = this.getBoundingClientRect();\n\n          if (maxWidth < box.width) {\n            maxWidth = box.width;\n          }\n        });\n        dummy.remove();\n      });\n    }\n\n    $$.currentMaxTickWidths[id] = maxWidth <= 0 ? $$.currentMaxTickWidths[id] : maxWidth;\n    return $$.currentMaxTickWidths[id];\n  };\n\n  Axis.prototype.updateLabels = function updateLabels(withTransition) {\n    var $$ = this.owner;\n    var axisXLabel = $$.main.select('.' + CLASS.axisX + ' .' + CLASS.axisXLabel),\n        axisYLabel = $$.main.select('.' + CLASS.axisY + ' .' + CLASS.axisYLabel),\n        axisY2Label = $$.main.select('.' + CLASS.axisY2 + ' .' + CLASS.axisY2Label);\n    (withTransition ? axisXLabel.transition() : axisXLabel).attr(\"x\", this.xForXAxisLabel.bind(this)).attr(\"dx\", this.dxForXAxisLabel.bind(this)).attr(\"dy\", this.dyForXAxisLabel.bind(this)).text(this.textForXAxisLabel.bind(this));\n    (withTransition ? axisYLabel.transition() : axisYLabel).attr(\"x\", this.xForYAxisLabel.bind(this)).attr(\"dx\", this.dxForYAxisLabel.bind(this)).attr(\"dy\", this.dyForYAxisLabel.bind(this)).text(this.textForYAxisLabel.bind(this));\n    (withTransition ? axisY2Label.transition() : axisY2Label).attr(\"x\", this.xForY2AxisLabel.bind(this)).attr(\"dx\", this.dxForY2AxisLabel.bind(this)).attr(\"dy\", this.dyForY2AxisLabel.bind(this)).text(this.textForY2AxisLabel.bind(this));\n  };\n\n  Axis.prototype.getPadding = function getPadding(padding, key, defaultValue, domainLength) {\n    var p = typeof padding === 'number' ? padding : padding[key];\n\n    if (!isValue(p)) {\n      return defaultValue;\n    }\n\n    if (padding.unit === 'ratio') {\n      return padding[key] * domainLength;\n    } // assume padding is pixels if unit is not specified\n\n\n    return this.convertPixelsToAxisPadding(p, domainLength);\n  };\n\n  Axis.prototype.convertPixelsToAxisPadding = function convertPixelsToAxisPadding(pixels, domainLength) {\n    var $$ = this.owner,\n        length = $$.config.axis_rotated ? $$.width : $$.height;\n    return domainLength * (pixels / length);\n  };\n\n  Axis.prototype.generateTickValues = function generateTickValues(values, tickCount, forTimeSeries) {\n    var tickValues = values,\n        targetCount,\n        start,\n        end,\n        count,\n        interval,\n        i,\n        tickValue;\n\n    if (tickCount) {\n      targetCount = isFunction(tickCount) ? tickCount() : tickCount; // compute ticks according to tickCount\n\n      if (targetCount === 1) {\n        tickValues = [values[0]];\n      } else if (targetCount === 2) {\n        tickValues = [values[0], values[values.length - 1]];\n      } else if (targetCount > 2) {\n        count = targetCount - 2;\n        start = values[0];\n        end = values[values.length - 1];\n        interval = (end - start) / (count + 1); // re-construct unique values\n\n        tickValues = [start];\n\n        for (i = 0; i < count; i++) {\n          tickValue = +start + interval * (i + 1);\n          tickValues.push(forTimeSeries ? new Date(tickValue) : tickValue);\n        }\n\n        tickValues.push(end);\n      }\n    }\n\n    if (!forTimeSeries) {\n      tickValues = tickValues.sort(function (a, b) {\n        return a - b;\n      });\n    }\n\n    return tickValues;\n  };\n\n  Axis.prototype.generateTransitions = function generateTransitions(duration) {\n    var $$ = this.owner,\n        axes = $$.axes;\n    return {\n      axisX: duration ? axes.x.transition().duration(duration) : axes.x,\n      axisY: duration ? axes.y.transition().duration(duration) : axes.y,\n      axisY2: duration ? axes.y2.transition().duration(duration) : axes.y2,\n      axisSubX: duration ? axes.subx.transition().duration(duration) : axes.subx\n    };\n  };\n\n  Axis.prototype.redraw = function redraw(duration, isHidden) {\n    var $$ = this.owner,\n        transition = duration ? $$.d3.transition().duration(duration) : null;\n    $$.axes.x.style(\"opacity\", isHidden ? 0 : 1).call($$.xAxis, transition);\n    $$.axes.y.style(\"opacity\", isHidden ? 0 : 1).call($$.yAxis, transition);\n    $$.axes.y2.style(\"opacity\", isHidden ? 0 : 1).call($$.y2Axis, transition);\n    $$.axes.subx.style(\"opacity\", isHidden ? 0 : 1).call($$.subXAxis, transition);\n  };\n\n  var c3 = {\n    version: \"0.6.12\",\n    chart: {\n      fn: Chart.prototype,\n      internal: {\n        fn: ChartInternal.prototype,\n        axis: {\n          fn: Axis.prototype,\n          internal: {\n            fn: AxisInternal.prototype\n          }\n        }\n      }\n    },\n    generate: function generate(config) {\n      return new Chart(config);\n    }\n  };\n\n  ChartInternal.prototype.beforeInit = function () {// can do something\n  };\n\n  ChartInternal.prototype.afterInit = function () {// can do something\n  };\n\n  ChartInternal.prototype.init = function () {\n    var $$ = this,\n        config = $$.config;\n    $$.initParams();\n\n    if (config.data_url) {\n      $$.convertUrlToData(config.data_url, config.data_mimeType, config.data_headers, config.data_keys, $$.initWithData);\n    } else if (config.data_json) {\n      $$.initWithData($$.convertJsonToData(config.data_json, config.data_keys));\n    } else if (config.data_rows) {\n      $$.initWithData($$.convertRowsToData(config.data_rows));\n    } else if (config.data_columns) {\n      $$.initWithData($$.convertColumnsToData(config.data_columns));\n    } else {\n      throw Error('url or json or rows or columns is required.');\n    }\n  };\n\n  ChartInternal.prototype.initParams = function () {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config; // MEMO: clipId needs to be unique because it conflicts when multiple charts exist\n\n    $$.clipId = \"c3-\" + +new Date() + '-clip';\n    $$.clipIdForXAxis = $$.clipId + '-xaxis';\n    $$.clipIdForYAxis = $$.clipId + '-yaxis';\n    $$.clipIdForGrid = $$.clipId + '-grid';\n    $$.clipIdForSubchart = $$.clipId + '-subchart';\n    $$.clipPath = $$.getClipPath($$.clipId);\n    $$.clipPathForXAxis = $$.getClipPath($$.clipIdForXAxis);\n    $$.clipPathForYAxis = $$.getClipPath($$.clipIdForYAxis);\n    $$.clipPathForGrid = $$.getClipPath($$.clipIdForGrid);\n    $$.clipPathForSubchart = $$.getClipPath($$.clipIdForSubchart);\n    $$.dragStart = null;\n    $$.dragging = false;\n    $$.flowing = false;\n    $$.cancelClick = false;\n    $$.mouseover = false;\n    $$.transiting = false;\n    $$.color = $$.generateColor();\n    $$.levelColor = $$.generateLevelColor();\n    $$.dataTimeParse = (config.data_xLocaltime ? d3.timeParse : d3.utcParse)($$.config.data_xFormat);\n    $$.axisTimeFormat = config.axis_x_localtime ? d3.timeFormat : d3.utcFormat;\n\n    $$.defaultAxisTimeFormat = function (date) {\n      if (date.getMilliseconds()) {\n        return d3.timeFormat(\".%L\")(date);\n      }\n\n      if (date.getSeconds()) {\n        return d3.timeFormat(\":%S\")(date);\n      }\n\n      if (date.getMinutes()) {\n        return d3.timeFormat(\"%I:%M\")(date);\n      }\n\n      if (date.getHours()) {\n        return d3.timeFormat(\"%I %p\")(date);\n      }\n\n      if (date.getDay() && date.getDate() !== 1) {\n        return d3.timeFormat(\"%-m/%-d\")(date);\n      }\n\n      if (date.getDate() !== 1) {\n        return d3.timeFormat(\"%-m/%-d\")(date);\n      }\n\n      if (date.getMonth()) {\n        return d3.timeFormat(\"%-m/%-d\")(date);\n      }\n\n      return d3.timeFormat(\"%Y/%-m/%-d\")(date);\n    };\n\n    $$.hiddenTargetIds = [];\n    $$.hiddenLegendIds = [];\n    $$.focusedTargetIds = [];\n    $$.defocusedTargetIds = [];\n    $$.xOrient = config.axis_rotated ? config.axis_x_inner ? \"right\" : \"left\" : config.axis_x_inner ? \"top\" : \"bottom\";\n    $$.yOrient = config.axis_rotated ? config.axis_y_inner ? \"top\" : \"bottom\" : config.axis_y_inner ? \"right\" : \"left\";\n    $$.y2Orient = config.axis_rotated ? config.axis_y2_inner ? \"bottom\" : \"top\" : config.axis_y2_inner ? \"left\" : \"right\";\n    $$.subXOrient = config.axis_rotated ? \"left\" : \"bottom\";\n    $$.isLegendRight = config.legend_position === 'right';\n    $$.isLegendInset = config.legend_position === 'inset';\n    $$.isLegendTop = config.legend_inset_anchor === 'top-left' || config.legend_inset_anchor === 'top-right';\n    $$.isLegendLeft = config.legend_inset_anchor === 'top-left' || config.legend_inset_anchor === 'bottom-left';\n    $$.legendStep = 0;\n    $$.legendItemWidth = 0;\n    $$.legendItemHeight = 0;\n    $$.currentMaxTickWidths = {\n      x: 0,\n      y: 0,\n      y2: 0\n    };\n    $$.rotated_padding_left = 30;\n    $$.rotated_padding_right = config.axis_rotated && !config.axis_x_show ? 0 : 30;\n    $$.rotated_padding_top = 5;\n    $$.withoutFadeIn = {};\n    $$.intervalForObserveInserted = undefined;\n    $$.axes.subx = d3.selectAll([]); // needs when excluding subchart.js\n  };\n\n  ChartInternal.prototype.initChartElements = function () {\n    if (this.initBar) {\n      this.initBar();\n    }\n\n    if (this.initLine) {\n      this.initLine();\n    }\n\n    if (this.initArc) {\n      this.initArc();\n    }\n\n    if (this.initGauge) {\n      this.initGauge();\n    }\n\n    if (this.initText) {\n      this.initText();\n    }\n  };\n\n  ChartInternal.prototype.initWithData = function (data) {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config;\n    var defs,\n        main,\n        binding = true;\n    $$.axis = new Axis($$);\n\n    if (!config.bindto) {\n      $$.selectChart = d3.selectAll([]);\n    } else if (typeof config.bindto.node === 'function') {\n      $$.selectChart = config.bindto;\n    } else {\n      $$.selectChart = d3.select(config.bindto);\n    }\n\n    if ($$.selectChart.empty()) {\n      $$.selectChart = d3.select(document.createElement('div')).style('opacity', 0);\n      $$.observeInserted($$.selectChart);\n      binding = false;\n    }\n\n    $$.selectChart.html(\"\").classed(\"c3\", true); // Init data as targets\n\n    $$.data.xs = {};\n    $$.data.targets = $$.convertDataToTargets(data);\n\n    if (config.data_filter) {\n      $$.data.targets = $$.data.targets.filter(config.data_filter);\n    } // Set targets to hide if needed\n\n\n    if (config.data_hide) {\n      $$.addHiddenTargetIds(config.data_hide === true ? $$.mapToIds($$.data.targets) : config.data_hide);\n    }\n\n    if (config.legend_hide) {\n      $$.addHiddenLegendIds(config.legend_hide === true ? $$.mapToIds($$.data.targets) : config.legend_hide);\n    } // Init sizes and scales\n\n\n    $$.updateSizes();\n    $$.updateScales(); // Set domains for each scale\n\n    $$.x.domain(d3.extent($$.getXDomain($$.data.targets)));\n    $$.y.domain($$.getYDomain($$.data.targets, 'y'));\n    $$.y2.domain($$.getYDomain($$.data.targets, 'y2'));\n    $$.subX.domain($$.x.domain());\n    $$.subY.domain($$.y.domain());\n    $$.subY2.domain($$.y2.domain()); // Save original x domain for zoom update\n\n    $$.orgXDomain = $$.x.domain();\n    /*-- Basic Elements --*/\n    // Define svgs\n\n    $$.svg = $$.selectChart.append(\"svg\").style(\"overflow\", \"hidden\").on('mouseenter', function () {\n      return config.onmouseover.call($$);\n    }).on('mouseleave', function () {\n      return config.onmouseout.call($$);\n    });\n\n    if ($$.config.svg_classname) {\n      $$.svg.attr('class', $$.config.svg_classname);\n    } // Define defs\n\n\n    defs = $$.svg.append(\"defs\");\n    $$.clipChart = $$.appendClip(defs, $$.clipId);\n    $$.clipXAxis = $$.appendClip(defs, $$.clipIdForXAxis);\n    $$.clipYAxis = $$.appendClip(defs, $$.clipIdForYAxis);\n    $$.clipGrid = $$.appendClip(defs, $$.clipIdForGrid);\n    $$.clipSubchart = $$.appendClip(defs, $$.clipIdForSubchart);\n    $$.updateSvgSize(); // Define regions\n\n    main = $$.main = $$.svg.append(\"g\").attr(\"transform\", $$.getTranslate('main'));\n\n    if ($$.initPie) {\n      $$.initPie();\n    }\n\n    if ($$.initDragZoom) {\n      $$.initDragZoom();\n    }\n\n    if ($$.initSubchart) {\n      $$.initSubchart();\n    }\n\n    if ($$.initTooltip) {\n      $$.initTooltip();\n    }\n\n    if ($$.initLegend) {\n      $$.initLegend();\n    }\n\n    if ($$.initTitle) {\n      $$.initTitle();\n    }\n\n    if ($$.initZoom) {\n      $$.initZoom();\n    } // Update selection based on size and scale\n    // TODO: currently this must be called after initLegend because of update of sizes, but it should be done in initSubchart.\n\n\n    if ($$.initSubchartBrush) {\n      $$.initSubchartBrush();\n    }\n    /*-- Main Region --*/\n    // text when empty\n\n\n    main.append(\"text\").attr(\"class\", CLASS.text + ' ' + CLASS.empty).attr(\"text-anchor\", \"middle\") // horizontal centering of text at x position in all browsers.\n    .attr(\"dominant-baseline\", \"middle\"); // vertical centering of text at y position in all browsers, except IE.\n    // Regions\n\n    $$.initRegion(); // Grids\n\n    $$.initGrid(); // Define g for chart area\n\n    main.append('g').attr(\"clip-path\", $$.clipPath).attr('class', CLASS.chart); // Grid lines\n\n    if (config.grid_lines_front) {\n      $$.initGridLines();\n    } // Cover whole with rects for events\n\n\n    $$.initEventRect(); // Define g for chart\n\n    $$.initChartElements(); // Add Axis\n\n    $$.axis.init(); // Set targets\n\n    $$.updateTargets($$.data.targets); // Set default extent if defined\n\n    if (config.axis_x_selection) {\n      $$.brush.selectionAsValue($$.getDefaultSelection());\n    } // Draw with targets\n\n\n    if (binding) {\n      $$.updateDimension();\n      $$.config.oninit.call($$);\n      $$.redraw({\n        withTransition: false,\n        withTransform: true,\n        withUpdateXDomain: true,\n        withUpdateOrgXDomain: true,\n        withTransitionForAxis: false\n      });\n    } // Bind to resize event\n\n\n    $$.bindResize(); // Bind to window focus event\n\n    $$.bindWindowFocus(); // export element of the chart\n\n    $$.api.element = $$.selectChart.node();\n  };\n\n  ChartInternal.prototype.smoothLines = function (el, type) {\n    var $$ = this;\n\n    if (type === 'grid') {\n      el.each(function () {\n        var g = $$.d3.select(this),\n            x1 = g.attr('x1'),\n            x2 = g.attr('x2'),\n            y1 = g.attr('y1'),\n            y2 = g.attr('y2');\n        g.attr({\n          'x1': Math.ceil(x1),\n          'x2': Math.ceil(x2),\n          'y1': Math.ceil(y1),\n          'y2': Math.ceil(y2)\n        });\n      });\n    }\n  };\n\n  ChartInternal.prototype.updateSizes = function () {\n    var $$ = this,\n        config = $$.config;\n    var legendHeight = $$.legend ? $$.getLegendHeight() : 0,\n        legendWidth = $$.legend ? $$.getLegendWidth() : 0,\n        legendHeightForBottom = $$.isLegendRight || $$.isLegendInset ? 0 : legendHeight,\n        hasArc = $$.hasArcType(),\n        xAxisHeight = config.axis_rotated || hasArc ? 0 : $$.getHorizontalAxisHeight('x'),\n        subchartHeight = config.subchart_show && !hasArc ? config.subchart_size_height + xAxisHeight : 0;\n    $$.currentWidth = $$.getCurrentWidth();\n    $$.currentHeight = $$.getCurrentHeight(); // for main\n\n    $$.margin = config.axis_rotated ? {\n      top: $$.getHorizontalAxisHeight('y2') + $$.getCurrentPaddingTop(),\n      right: hasArc ? 0 : $$.getCurrentPaddingRight(),\n      bottom: $$.getHorizontalAxisHeight('y') + legendHeightForBottom + $$.getCurrentPaddingBottom(),\n      left: subchartHeight + (hasArc ? 0 : $$.getCurrentPaddingLeft())\n    } : {\n      top: 4 + $$.getCurrentPaddingTop(),\n      // for top tick text\n      right: hasArc ? 0 : $$.getCurrentPaddingRight(),\n      bottom: xAxisHeight + subchartHeight + legendHeightForBottom + $$.getCurrentPaddingBottom(),\n      left: hasArc ? 0 : $$.getCurrentPaddingLeft()\n    }; // for subchart\n\n    $$.margin2 = config.axis_rotated ? {\n      top: $$.margin.top,\n      right: NaN,\n      bottom: 20 + legendHeightForBottom,\n      left: $$.rotated_padding_left\n    } : {\n      top: $$.currentHeight - subchartHeight - legendHeightForBottom,\n      right: NaN,\n      bottom: xAxisHeight + legendHeightForBottom,\n      left: $$.margin.left\n    }; // for legend\n\n    $$.margin3 = {\n      top: 0,\n      right: NaN,\n      bottom: 0,\n      left: 0\n    };\n\n    if ($$.updateSizeForLegend) {\n      $$.updateSizeForLegend(legendHeight, legendWidth);\n    }\n\n    $$.width = $$.currentWidth - $$.margin.left - $$.margin.right;\n    $$.height = $$.currentHeight - $$.margin.top - $$.margin.bottom;\n\n    if ($$.width < 0) {\n      $$.width = 0;\n    }\n\n    if ($$.height < 0) {\n      $$.height = 0;\n    }\n\n    $$.width2 = config.axis_rotated ? $$.margin.left - $$.rotated_padding_left - $$.rotated_padding_right : $$.width;\n    $$.height2 = config.axis_rotated ? $$.height : $$.currentHeight - $$.margin2.top - $$.margin2.bottom;\n\n    if ($$.width2 < 0) {\n      $$.width2 = 0;\n    }\n\n    if ($$.height2 < 0) {\n      $$.height2 = 0;\n    } // for arc\n\n\n    $$.arcWidth = $$.width - ($$.isLegendRight ? legendWidth + 10 : 0);\n    $$.arcHeight = $$.height - ($$.isLegendRight ? 0 : 10);\n\n    if ($$.hasType('gauge') && !config.gauge_fullCircle) {\n      $$.arcHeight += $$.height - $$.getGaugeLabelHeight();\n    }\n\n    if ($$.updateRadius) {\n      $$.updateRadius();\n    }\n\n    if ($$.isLegendRight && hasArc) {\n      $$.margin3.left = $$.arcWidth / 2 + $$.radiusExpanded * 1.1;\n    }\n  };\n\n  ChartInternal.prototype.updateTargets = function (targets) {\n    var $$ = this;\n    /*-- Main --*/\n    //-- Text --//\n\n    $$.updateTargetsForText(targets); //-- Bar --//\n\n    $$.updateTargetsForBar(targets); //-- Line --//\n\n    $$.updateTargetsForLine(targets); //-- Arc --//\n\n    if ($$.hasArcType() && $$.updateTargetsForArc) {\n      $$.updateTargetsForArc(targets);\n    }\n    /*-- Sub --*/\n\n\n    if ($$.updateTargetsForSubchart) {\n      $$.updateTargetsForSubchart(targets);\n    } // Fade-in each chart\n\n\n    $$.showTargets();\n  };\n\n  ChartInternal.prototype.showTargets = function () {\n    var $$ = this;\n    $$.svg.selectAll('.' + CLASS.target).filter(function (d) {\n      return $$.isTargetToShow(d.id);\n    }).transition().duration($$.config.transition_duration).style(\"opacity\", 1);\n  };\n\n  ChartInternal.prototype.redraw = function (options, transitions) {\n    var $$ = this,\n        main = $$.main,\n        d3 = $$.d3,\n        config = $$.config;\n    var areaIndices = $$.getShapeIndices($$.isAreaType),\n        barIndices = $$.getShapeIndices($$.isBarType),\n        lineIndices = $$.getShapeIndices($$.isLineType);\n    var withY, withSubchart, withTransition, withTransitionForExit, withTransitionForAxis, withTransform, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain, withLegend, withEventRect, withDimension, withUpdateXAxis;\n    var hideAxis = $$.hasArcType();\n    var drawArea, drawBar, drawLine, xForText, yForText;\n    var duration, durationForExit, durationForAxis;\n    var transitionsToWait, waitForDraw, flow, transition;\n    var targetsToShow = $$.filterTargetsToShow($$.data.targets),\n        tickValues,\n        i,\n        intervalForCulling,\n        xDomainForZoom;\n    var xv = $$.xv.bind($$),\n        cx,\n        cy;\n    options = options || {};\n    withY = getOption(options, \"withY\", true);\n    withSubchart = getOption(options, \"withSubchart\", true);\n    withTransition = getOption(options, \"withTransition\", true);\n    withTransform = getOption(options, \"withTransform\", false);\n    withUpdateXDomain = getOption(options, \"withUpdateXDomain\", false);\n    withUpdateOrgXDomain = getOption(options, \"withUpdateOrgXDomain\", false);\n    withTrimXDomain = getOption(options, \"withTrimXDomain\", true);\n    withUpdateXAxis = getOption(options, \"withUpdateXAxis\", withUpdateXDomain);\n    withLegend = getOption(options, \"withLegend\", false);\n    withEventRect = getOption(options, \"withEventRect\", true);\n    withDimension = getOption(options, \"withDimension\", true);\n    withTransitionForExit = getOption(options, \"withTransitionForExit\", withTransition);\n    withTransitionForAxis = getOption(options, \"withTransitionForAxis\", withTransition);\n    duration = withTransition ? config.transition_duration : 0;\n    durationForExit = withTransitionForExit ? duration : 0;\n    durationForAxis = withTransitionForAxis ? duration : 0;\n    transitions = transitions || $$.axis.generateTransitions(durationForAxis); // update legend and transform each g\n\n    if (withLegend && config.legend_show) {\n      $$.updateLegend($$.mapToIds($$.data.targets), options, transitions);\n    } else if (withDimension) {\n      // need to update dimension (e.g. axis.y.tick.values) because y tick values should change\n      // no need to update axis in it because they will be updated in redraw()\n      $$.updateDimension(true);\n    } // MEMO: needed for grids calculation\n\n\n    if ($$.isCategorized() && targetsToShow.length === 0) {\n      $$.x.domain([0, $$.axes.x.selectAll('.tick').size()]);\n    }\n\n    if (targetsToShow.length) {\n      $$.updateXDomain(targetsToShow, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain);\n\n      if (!config.axis_x_tick_values) {\n        tickValues = $$.axis.updateXAxisTickValues(targetsToShow);\n      }\n    } else {\n      $$.xAxis.tickValues([]);\n      $$.subXAxis.tickValues([]);\n    }\n\n    if (config.zoom_rescale && !options.flow) {\n      xDomainForZoom = $$.x.orgDomain();\n    }\n\n    $$.y.domain($$.getYDomain(targetsToShow, 'y', xDomainForZoom));\n    $$.y2.domain($$.getYDomain(targetsToShow, 'y2', xDomainForZoom));\n\n    if (!config.axis_y_tick_values && config.axis_y_tick_count) {\n      $$.yAxis.tickValues($$.axis.generateTickValues($$.y.domain(), config.axis_y_tick_count));\n    }\n\n    if (!config.axis_y2_tick_values && config.axis_y2_tick_count) {\n      $$.y2Axis.tickValues($$.axis.generateTickValues($$.y2.domain(), config.axis_y2_tick_count));\n    } // axes\n\n\n    $$.axis.redraw(durationForAxis, hideAxis); // Update axis label\n\n    $$.axis.updateLabels(withTransition); // show/hide if manual culling needed\n\n    if ((withUpdateXDomain || withUpdateXAxis) && targetsToShow.length) {\n      if (config.axis_x_tick_culling && tickValues) {\n        for (i = 1; i < tickValues.length; i++) {\n          if (tickValues.length / i < config.axis_x_tick_culling_max) {\n            intervalForCulling = i;\n            break;\n          }\n        }\n\n        $$.svg.selectAll('.' + CLASS.axisX + ' .tick text').each(function (e) {\n          var index = tickValues.indexOf(e);\n\n          if (index >= 0) {\n            d3.select(this).style('display', index % intervalForCulling ? 'none' : 'block');\n          }\n        });\n      } else {\n        $$.svg.selectAll('.' + CLASS.axisX + ' .tick text').style('display', 'block');\n      }\n    } // setup drawer - MEMO: these must be called after axis updated\n\n\n    drawArea = $$.generateDrawArea ? $$.generateDrawArea(areaIndices, false) : undefined;\n    drawBar = $$.generateDrawBar ? $$.generateDrawBar(barIndices) : undefined;\n    drawLine = $$.generateDrawLine ? $$.generateDrawLine(lineIndices, false) : undefined;\n    xForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, true);\n    yForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, false); // update circleY based on updated parameters\n\n    $$.updateCircleY(); // generate circle x/y functions depending on updated params\n\n    cx = ($$.config.axis_rotated ? $$.circleY : $$.circleX).bind($$);\n    cy = ($$.config.axis_rotated ? $$.circleX : $$.circleY).bind($$); // Update sub domain\n\n    if (withY) {\n      $$.subY.domain($$.getYDomain(targetsToShow, 'y'));\n      $$.subY2.domain($$.getYDomain(targetsToShow, 'y2'));\n    } // xgrid focus\n\n\n    $$.updateXgridFocus(); // Data empty label positioning and text.\n\n    main.select(\"text.\" + CLASS.text + '.' + CLASS.empty).attr(\"x\", $$.width / 2).attr(\"y\", $$.height / 2).text(config.data_empty_label_text).transition().style('opacity', targetsToShow.length ? 0 : 1); // event rect\n\n    if (withEventRect) {\n      $$.redrawEventRect();\n    } // grid\n\n\n    $$.updateGrid(duration); // rect for regions\n\n    $$.updateRegion(duration); // bars\n\n    $$.updateBar(durationForExit); // lines, areas and cricles\n\n    $$.updateLine(durationForExit);\n    $$.updateArea(durationForExit);\n    $$.updateCircle(cx, cy); // text\n\n    if ($$.hasDataLabel()) {\n      $$.updateText(xForText, yForText, durationForExit);\n    } // title\n\n\n    if ($$.redrawTitle) {\n      $$.redrawTitle();\n    } // arc\n\n\n    if ($$.redrawArc) {\n      $$.redrawArc(duration, durationForExit, withTransform);\n    } // subchart\n\n\n    if ($$.redrawSubchart) {\n      $$.redrawSubchart(withSubchart, transitions, duration, durationForExit, areaIndices, barIndices, lineIndices);\n    } // circles for select\n\n\n    main.selectAll('.' + CLASS.selectedCircles).filter($$.isBarType.bind($$)).selectAll('circle').remove();\n\n    if (options.flow) {\n      flow = $$.generateFlow({\n        targets: targetsToShow,\n        flow: options.flow,\n        duration: options.flow.duration,\n        drawBar: drawBar,\n        drawLine: drawLine,\n        drawArea: drawArea,\n        cx: cx,\n        cy: cy,\n        xv: xv,\n        xForText: xForText,\n        yForText: yForText\n      });\n    }\n\n    if ($$.isTabVisible()) {\n      // Only use transition if tab visible. See #938.\n      if (duration) {\n        // transition should be derived from one transition\n        transition = d3.transition().duration(duration);\n        transitionsToWait = [];\n        [$$.redrawBar(drawBar, true, transition), $$.redrawLine(drawLine, true, transition), $$.redrawArea(drawArea, true, transition), $$.redrawCircle(cx, cy, true, transition), $$.redrawText(xForText, yForText, options.flow, true, transition), $$.redrawRegion(true, transition), $$.redrawGrid(true, transition)].forEach(function (transitions) {\n          transitions.forEach(function (transition) {\n            transitionsToWait.push(transition);\n          });\n        }); // Wait for end of transitions to call flow and onrendered callback\n\n        waitForDraw = $$.generateWait();\n        transitionsToWait.forEach(function (t) {\n          waitForDraw.add(t);\n        });\n        waitForDraw(function () {\n          if (flow) {\n            flow();\n          }\n\n          if (config.onrendered) {\n            config.onrendered.call($$);\n          }\n        });\n      } else {\n        $$.redrawBar(drawBar);\n        $$.redrawLine(drawLine);\n        $$.redrawArea(drawArea);\n        $$.redrawCircle(cx, cy);\n        $$.redrawText(xForText, yForText, options.flow);\n        $$.redrawRegion();\n        $$.redrawGrid();\n\n        if (flow) {\n          flow();\n        }\n\n        if (config.onrendered) {\n          config.onrendered.call($$);\n        }\n      }\n    } // update fadein condition\n\n\n    $$.mapToIds($$.data.targets).forEach(function (id) {\n      $$.withoutFadeIn[id] = true;\n    });\n  };\n\n  ChartInternal.prototype.updateAndRedraw = function (options) {\n    var $$ = this,\n        config = $$.config,\n        transitions;\n    options = options || {}; // same with redraw\n\n    options.withTransition = getOption(options, \"withTransition\", true);\n    options.withTransform = getOption(options, \"withTransform\", false);\n    options.withLegend = getOption(options, \"withLegend\", false); // NOT same with redraw\n\n    options.withUpdateXDomain = getOption(options, \"withUpdateXDomain\", true);\n    options.withUpdateOrgXDomain = getOption(options, \"withUpdateOrgXDomain\", true);\n    options.withTransitionForExit = false;\n    options.withTransitionForTransform = getOption(options, \"withTransitionForTransform\", options.withTransition); // MEMO: this needs to be called before updateLegend and it means this ALWAYS needs to be called)\n\n    $$.updateSizes(); // MEMO: called in updateLegend in redraw if withLegend\n\n    if (!(options.withLegend && config.legend_show)) {\n      transitions = $$.axis.generateTransitions(options.withTransitionForAxis ? config.transition_duration : 0); // Update scales\n\n      $$.updateScales();\n      $$.updateSvgSize(); // Update g positions\n\n      $$.transformAll(options.withTransitionForTransform, transitions);\n    } // Draw with new sizes & scales\n\n\n    $$.redraw(options, transitions);\n  };\n\n  ChartInternal.prototype.redrawWithoutRescale = function () {\n    this.redraw({\n      withY: false,\n      withSubchart: false,\n      withEventRect: false,\n      withTransitionForAxis: false\n    });\n  };\n\n  ChartInternal.prototype.isTimeSeries = function () {\n    return this.config.axis_x_type === 'timeseries';\n  };\n\n  ChartInternal.prototype.isCategorized = function () {\n    return this.config.axis_x_type.indexOf('categor') >= 0;\n  };\n\n  ChartInternal.prototype.isCustomX = function () {\n    var $$ = this,\n        config = $$.config;\n    return !$$.isTimeSeries() && (config.data_x || notEmpty(config.data_xs));\n  };\n\n  ChartInternal.prototype.isTimeSeriesY = function () {\n    return this.config.axis_y_type === 'timeseries';\n  };\n\n  ChartInternal.prototype.getTranslate = function (target) {\n    var $$ = this,\n        config = $$.config,\n        x,\n        y;\n\n    if (target === 'main') {\n      x = asHalfPixel($$.margin.left);\n      y = asHalfPixel($$.margin.top);\n    } else if (target === 'context') {\n      x = asHalfPixel($$.margin2.left);\n      y = asHalfPixel($$.margin2.top);\n    } else if (target === 'legend') {\n      x = $$.margin3.left;\n      y = $$.margin3.top;\n    } else if (target === 'x') {\n      x = 0;\n      y = config.axis_rotated ? 0 : $$.height;\n    } else if (target === 'y') {\n      x = 0;\n      y = config.axis_rotated ? $$.height : 0;\n    } else if (target === 'y2') {\n      x = config.axis_rotated ? 0 : $$.width;\n      y = config.axis_rotated ? 1 : 0;\n    } else if (target === 'subx') {\n      x = 0;\n      y = config.axis_rotated ? 0 : $$.height2;\n    } else if (target === 'arc') {\n      x = $$.arcWidth / 2;\n      y = $$.arcHeight / 2 - ($$.hasType('gauge') ? 6 : 0); // to prevent wrong display of min and max label\n    }\n\n    return \"translate(\" + x + \",\" + y + \")\";\n  };\n\n  ChartInternal.prototype.initialOpacity = function (d) {\n    return d.value !== null && this.withoutFadeIn[d.id] ? 1 : 0;\n  };\n\n  ChartInternal.prototype.initialOpacityForCircle = function (d) {\n    return d.value !== null && this.withoutFadeIn[d.id] ? this.opacityForCircle(d) : 0;\n  };\n\n  ChartInternal.prototype.opacityForCircle = function (d) {\n    var isPointShouldBeShown = isFunction(this.config.point_show) ? this.config.point_show(d) : this.config.point_show;\n    var opacity = isPointShouldBeShown ? 1 : 0;\n    return isValue(d.value) ? this.isScatterType(d) ? 0.5 : opacity : 0;\n  };\n\n  ChartInternal.prototype.opacityForText = function () {\n    return this.hasDataLabel() ? 1 : 0;\n  };\n\n  ChartInternal.prototype.xx = function (d) {\n    return d ? this.x(d.x) : null;\n  };\n\n  ChartInternal.prototype.xv = function (d) {\n    var $$ = this,\n        value = d.value;\n\n    if ($$.isTimeSeries()) {\n      value = $$.parseDate(d.value);\n    } else if ($$.isCategorized() && typeof d.value === 'string') {\n      value = $$.config.axis_x_categories.indexOf(d.value);\n    }\n\n    return Math.ceil($$.x(value));\n  };\n\n  ChartInternal.prototype.yv = function (d) {\n    var $$ = this,\n        yScale = d.axis && d.axis === 'y2' ? $$.y2 : $$.y;\n    return Math.ceil(yScale(d.value));\n  };\n\n  ChartInternal.prototype.subxx = function (d) {\n    return d ? this.subX(d.x) : null;\n  };\n\n  ChartInternal.prototype.transformMain = function (withTransition, transitions) {\n    var $$ = this,\n        xAxis,\n        yAxis,\n        y2Axis;\n\n    if (transitions && transitions.axisX) {\n      xAxis = transitions.axisX;\n    } else {\n      xAxis = $$.main.select('.' + CLASS.axisX);\n\n      if (withTransition) {\n        xAxis = xAxis.transition();\n      }\n    }\n\n    if (transitions && transitions.axisY) {\n      yAxis = transitions.axisY;\n    } else {\n      yAxis = $$.main.select('.' + CLASS.axisY);\n\n      if (withTransition) {\n        yAxis = yAxis.transition();\n      }\n    }\n\n    if (transitions && transitions.axisY2) {\n      y2Axis = transitions.axisY2;\n    } else {\n      y2Axis = $$.main.select('.' + CLASS.axisY2);\n\n      if (withTransition) {\n        y2Axis = y2Axis.transition();\n      }\n    }\n\n    (withTransition ? $$.main.transition() : $$.main).attr(\"transform\", $$.getTranslate('main'));\n    xAxis.attr(\"transform\", $$.getTranslate('x'));\n    yAxis.attr(\"transform\", $$.getTranslate('y'));\n    y2Axis.attr(\"transform\", $$.getTranslate('y2'));\n    $$.main.select('.' + CLASS.chartArcs).attr(\"transform\", $$.getTranslate('arc'));\n  };\n\n  ChartInternal.prototype.transformAll = function (withTransition, transitions) {\n    var $$ = this;\n    $$.transformMain(withTransition, transitions);\n\n    if ($$.config.subchart_show) {\n      $$.transformContext(withTransition, transitions);\n    }\n\n    if ($$.legend) {\n      $$.transformLegend(withTransition);\n    }\n  };\n\n  ChartInternal.prototype.updateSvgSize = function () {\n    var $$ = this,\n        brush = $$.svg.select(\".c3-brush .overlay\");\n    $$.svg.attr('width', $$.currentWidth).attr('height', $$.currentHeight);\n    $$.svg.selectAll(['#' + $$.clipId, '#' + $$.clipIdForGrid]).select('rect').attr('width', $$.width).attr('height', $$.height);\n    $$.svg.select('#' + $$.clipIdForXAxis).select('rect').attr('x', $$.getXAxisClipX.bind($$)).attr('y', $$.getXAxisClipY.bind($$)).attr('width', $$.getXAxisClipWidth.bind($$)).attr('height', $$.getXAxisClipHeight.bind($$));\n    $$.svg.select('#' + $$.clipIdForYAxis).select('rect').attr('x', $$.getYAxisClipX.bind($$)).attr('y', $$.getYAxisClipY.bind($$)).attr('width', $$.getYAxisClipWidth.bind($$)).attr('height', $$.getYAxisClipHeight.bind($$));\n    $$.svg.select('#' + $$.clipIdForSubchart).select('rect').attr('width', $$.width).attr('height', brush.size() ? brush.attr('height') : 0);\n  };\n\n  ChartInternal.prototype.updateDimension = function (withoutAxis) {\n    var $$ = this;\n\n    if (!withoutAxis) {\n      if ($$.config.axis_rotated) {\n        $$.axes.x.call($$.xAxis);\n        $$.axes.subx.call($$.subXAxis);\n      } else {\n        $$.axes.y.call($$.yAxis);\n        $$.axes.y2.call($$.y2Axis);\n      }\n    }\n\n    $$.updateSizes();\n    $$.updateScales();\n    $$.updateSvgSize();\n    $$.transformAll(false);\n  };\n\n  ChartInternal.prototype.observeInserted = function (selection) {\n    var $$ = this,\n        observer;\n\n    if (typeof MutationObserver === 'undefined') {\n      window.console.error(\"MutationObserver not defined.\");\n      return;\n    }\n\n    observer = new MutationObserver(function (mutations) {\n      mutations.forEach(function (mutation) {\n        if (mutation.type === 'childList' && mutation.previousSibling) {\n          observer.disconnect(); // need to wait for completion of load because size calculation requires the actual sizes determined after that completion\n\n          $$.intervalForObserveInserted = window.setInterval(function () {\n            // parentNode will NOT be null when completed\n            if (selection.node().parentNode) {\n              window.clearInterval($$.intervalForObserveInserted);\n              $$.updateDimension();\n\n              if ($$.brush) {\n                $$.brush.update();\n              }\n\n              $$.config.oninit.call($$);\n              $$.redraw({\n                withTransform: true,\n                withUpdateXDomain: true,\n                withUpdateOrgXDomain: true,\n                withTransition: false,\n                withTransitionForTransform: false,\n                withLegend: true\n              });\n              selection.transition().style('opacity', 1);\n            }\n          }, 10);\n        }\n      });\n    });\n    observer.observe(selection.node(), {\n      attributes: true,\n      childList: true,\n      characterData: true\n    });\n  };\n  /**\n   * Binds handlers to the window resize event.\n   */\n\n\n  ChartInternal.prototype.bindResize = function () {\n    var $$ = this,\n        config = $$.config;\n    $$.resizeFunction = $$.generateResize(); // need to call .remove\n\n    $$.resizeFunction.add(function () {\n      config.onresize.call($$);\n    });\n\n    if (config.resize_auto) {\n      $$.resizeFunction.add(function () {\n        if ($$.resizeTimeout !== undefined) {\n          window.clearTimeout($$.resizeTimeout);\n        }\n\n        $$.resizeTimeout = window.setTimeout(function () {\n          delete $$.resizeTimeout;\n          $$.updateAndRedraw({\n            withUpdateXDomain: false,\n            withUpdateOrgXDomain: false,\n            withTransition: false,\n            withTransitionForTransform: false,\n            withLegend: true\n          });\n\n          if ($$.brush) {\n            $$.brush.update();\n          }\n        }, 100);\n      });\n    }\n\n    $$.resizeFunction.add(function () {\n      config.onresized.call($$);\n    });\n\n    $$.resizeIfElementDisplayed = function () {\n      // if element not displayed skip it\n      if ($$.api == null || !$$.api.element.offsetParent) {\n        return;\n      }\n\n      $$.resizeFunction();\n    };\n\n    if (window.attachEvent) {\n      window.attachEvent('onresize', $$.resizeIfElementDisplayed);\n    } else if (window.addEventListener) {\n      window.addEventListener('resize', $$.resizeIfElementDisplayed, false);\n    } else {\n      // fallback to this, if this is a very old browser\n      var wrapper = window.onresize;\n\n      if (!wrapper) {\n        // create a wrapper that will call all charts\n        wrapper = $$.generateResize();\n      } else if (!wrapper.add || !wrapper.remove) {\n        // there is already a handler registered, make sure we call it too\n        wrapper = $$.generateResize();\n        wrapper.add(window.onresize);\n      } // add this graph to the wrapper, we will be removed if the user calls destroy\n\n\n      wrapper.add($$.resizeFunction);\n\n      window.onresize = function () {\n        // if element not displayed skip it\n        if (!$$.api.element.offsetParent) {\n          return;\n        }\n\n        wrapper();\n      };\n    }\n  };\n  /**\n   * Binds handlers to the window focus event.\n   */\n\n\n  ChartInternal.prototype.bindWindowFocus = function () {\n    var _this = this;\n\n    if (this.windowFocusHandler) {\n      // The handler is already set\n      return;\n    }\n\n    this.windowFocusHandler = function () {\n      _this.redraw();\n    };\n\n    window.addEventListener('focus', this.windowFocusHandler);\n  };\n  /**\n   * Unbinds from the window focus event.\n   */\n\n\n  ChartInternal.prototype.unbindWindowFocus = function () {\n    window.removeEventListener('focus', this.windowFocusHandler);\n    delete this.windowFocusHandler;\n  };\n\n  ChartInternal.prototype.generateResize = function () {\n    var resizeFunctions = [];\n\n    function callResizeFunctions() {\n      resizeFunctions.forEach(function (f) {\n        f();\n      });\n    }\n\n    callResizeFunctions.add = function (f) {\n      resizeFunctions.push(f);\n    };\n\n    callResizeFunctions.remove = function (f) {\n      for (var i = 0; i < resizeFunctions.length; i++) {\n        if (resizeFunctions[i] === f) {\n          resizeFunctions.splice(i, 1);\n          break;\n        }\n      }\n    };\n\n    return callResizeFunctions;\n  };\n\n  ChartInternal.prototype.endall = function (transition, callback) {\n    var n = 0;\n    transition.each(function () {\n      ++n;\n    }).on(\"end\", function () {\n      if (! --n) {\n        callback.apply(this, arguments);\n      }\n    });\n  };\n\n  ChartInternal.prototype.generateWait = function () {\n    var transitionsToWait = [],\n        f = function f(callback) {\n      var timer = setInterval(function () {\n        var done = 0;\n        transitionsToWait.forEach(function (t) {\n          if (t.empty()) {\n            done += 1;\n            return;\n          }\n\n          try {\n            t.transition();\n          } catch (e) {\n            done += 1;\n          }\n        });\n\n        if (done === transitionsToWait.length) {\n          clearInterval(timer);\n\n          if (callback) {\n            callback();\n          }\n        }\n      }, 50);\n    };\n\n    f.add = function (transition) {\n      transitionsToWait.push(transition);\n    };\n\n    return f;\n  };\n\n  ChartInternal.prototype.parseDate = function (date) {\n    var $$ = this,\n        parsedDate;\n\n    if (date instanceof Date) {\n      parsedDate = date;\n    } else if (typeof date === 'string') {\n      parsedDate = $$.dataTimeParse(date);\n    } else if (_typeof(date) === 'object') {\n      parsedDate = new Date(+date);\n    } else if (typeof date === 'number' && !isNaN(date)) {\n      parsedDate = new Date(+date);\n    }\n\n    if (!parsedDate || isNaN(+parsedDate)) {\n      window.console.error(\"Failed to parse x '\" + date + \"' to Date object\");\n    }\n\n    return parsedDate;\n  };\n\n  ChartInternal.prototype.isTabVisible = function () {\n    return !document.hidden;\n  };\n\n  ChartInternal.prototype.getPathBox = getPathBox;\n  ChartInternal.prototype.CLASS = CLASS;\n\n  /* jshint ignore:start */\n  // SVGPathSeg API polyfill\n  // https://github.com/progers/pathseg\n  //\n  // This is a drop-in replacement for the SVGPathSeg and SVGPathSegList APIs that were removed from\n  // SVG2 (https://lists.w3.org/Archives/Public/www-svg/2015Jun/0044.html), including the latest spec\n  // changes which were implemented in Firefox 43 and Chrome 46.\n  (function () {\n\n    if (!(\"SVGPathSeg\" in window)) {\n      // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSeg\n      window.SVGPathSeg = function (type, typeAsLetter, owningPathSegList) {\n        this.pathSegType = type;\n        this.pathSegTypeAsLetter = typeAsLetter;\n        this._owningPathSegList = owningPathSegList;\n      };\n\n      window.SVGPathSeg.prototype.classname = \"SVGPathSeg\";\n      window.SVGPathSeg.PATHSEG_UNKNOWN = 0;\n      window.SVGPathSeg.PATHSEG_CLOSEPATH = 1;\n      window.SVGPathSeg.PATHSEG_MOVETO_ABS = 2;\n      window.SVGPathSeg.PATHSEG_MOVETO_REL = 3;\n      window.SVGPathSeg.PATHSEG_LINETO_ABS = 4;\n      window.SVGPathSeg.PATHSEG_LINETO_REL = 5;\n      window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS = 6;\n      window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL = 7;\n      window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS = 8;\n      window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL = 9;\n      window.SVGPathSeg.PATHSEG_ARC_ABS = 10;\n      window.SVGPathSeg.PATHSEG_ARC_REL = 11;\n      window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS = 12;\n      window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL = 13;\n      window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS = 14;\n      window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL = 15;\n      window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;\n      window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;\n      window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;\n      window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19; // Notify owning PathSegList on any changes so they can be synchronized back to the path element.\n\n      window.SVGPathSeg.prototype._segmentChanged = function () {\n        if (this._owningPathSegList) this._owningPathSegList.segmentChanged(this);\n      };\n\n      window.SVGPathSegClosePath = function (owningPathSegList) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CLOSEPATH, \"z\", owningPathSegList);\n      };\n\n      window.SVGPathSegClosePath.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegClosePath.prototype.toString = function () {\n        return \"[object SVGPathSegClosePath]\";\n      };\n\n      window.SVGPathSegClosePath.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter;\n      };\n\n      window.SVGPathSegClosePath.prototype.clone = function () {\n        return new window.SVGPathSegClosePath(undefined);\n      };\n\n      window.SVGPathSegMovetoAbs = function (owningPathSegList, x, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_MOVETO_ABS, \"M\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n      };\n\n      window.SVGPathSegMovetoAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegMovetoAbs.prototype.toString = function () {\n        return \"[object SVGPathSegMovetoAbs]\";\n      };\n\n      window.SVGPathSegMovetoAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegMovetoAbs.prototype.clone = function () {\n        return new window.SVGPathSegMovetoAbs(undefined, this._x, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegMovetoAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegMovetoAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegMovetoRel = function (owningPathSegList, x, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_MOVETO_REL, \"m\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n      };\n\n      window.SVGPathSegMovetoRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegMovetoRel.prototype.toString = function () {\n        return \"[object SVGPathSegMovetoRel]\";\n      };\n\n      window.SVGPathSegMovetoRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegMovetoRel.prototype.clone = function () {\n        return new window.SVGPathSegMovetoRel(undefined, this._x, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegMovetoRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegMovetoRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegLinetoAbs = function (owningPathSegList, x, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_ABS, \"L\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n      };\n\n      window.SVGPathSegLinetoAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegLinetoAbs.prototype.toString = function () {\n        return \"[object SVGPathSegLinetoAbs]\";\n      };\n\n      window.SVGPathSegLinetoAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegLinetoAbs.prototype.clone = function () {\n        return new window.SVGPathSegLinetoAbs(undefined, this._x, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegLinetoAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegLinetoAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegLinetoRel = function (owningPathSegList, x, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_REL, \"l\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n      };\n\n      window.SVGPathSegLinetoRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegLinetoRel.prototype.toString = function () {\n        return \"[object SVGPathSegLinetoRel]\";\n      };\n\n      window.SVGPathSegLinetoRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegLinetoRel.prototype.clone = function () {\n        return new window.SVGPathSegLinetoRel(undefined, this._x, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegLinetoRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegLinetoRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoCubicAbs = function (owningPathSegList, x, y, x1, y1, x2, y2) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS, \"C\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._x1 = x1;\n        this._y1 = y1;\n        this._x2 = x2;\n        this._y2 = y2;\n      };\n\n      window.SVGPathSegCurvetoCubicAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoCubicAbs.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoCubicAbs]\";\n      };\n\n      window.SVGPathSegCurvetoCubicAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x1 + \" \" + this._y1 + \" \" + this._x2 + \" \" + this._y2 + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoCubicAbs.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoCubicAbs(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"x1\", {\n        get: function get() {\n          return this._x1;\n        },\n        set: function set(x1) {\n          this._x1 = x1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"y1\", {\n        get: function get() {\n          return this._y1;\n        },\n        set: function set(y1) {\n          this._y1 = y1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"x2\", {\n        get: function get() {\n          return this._x2;\n        },\n        set: function set(x2) {\n          this._x2 = x2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"y2\", {\n        get: function get() {\n          return this._y2;\n        },\n        set: function set(y2) {\n          this._y2 = y2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoCubicRel = function (owningPathSegList, x, y, x1, y1, x2, y2) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL, \"c\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._x1 = x1;\n        this._y1 = y1;\n        this._x2 = x2;\n        this._y2 = y2;\n      };\n\n      window.SVGPathSegCurvetoCubicRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoCubicRel.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoCubicRel]\";\n      };\n\n      window.SVGPathSegCurvetoCubicRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x1 + \" \" + this._y1 + \" \" + this._x2 + \" \" + this._y2 + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoCubicRel.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoCubicRel(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"x1\", {\n        get: function get() {\n          return this._x1;\n        },\n        set: function set(x1) {\n          this._x1 = x1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"y1\", {\n        get: function get() {\n          return this._y1;\n        },\n        set: function set(y1) {\n          this._y1 = y1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"x2\", {\n        get: function get() {\n          return this._x2;\n        },\n        set: function set(x2) {\n          this._x2 = x2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"y2\", {\n        get: function get() {\n          return this._y2;\n        },\n        set: function set(y2) {\n          this._y2 = y2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoQuadraticAbs = function (owningPathSegList, x, y, x1, y1) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS, \"Q\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._x1 = x1;\n        this._y1 = y1;\n      };\n\n      window.SVGPathSegCurvetoQuadraticAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoQuadraticAbs.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoQuadraticAbs]\";\n      };\n\n      window.SVGPathSegCurvetoQuadraticAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x1 + \" \" + this._y1 + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoQuadraticAbs.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoQuadraticAbs(undefined, this._x, this._y, this._x1, this._y1);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, \"x1\", {\n        get: function get() {\n          return this._x1;\n        },\n        set: function set(x1) {\n          this._x1 = x1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, \"y1\", {\n        get: function get() {\n          return this._y1;\n        },\n        set: function set(y1) {\n          this._y1 = y1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoQuadraticRel = function (owningPathSegList, x, y, x1, y1) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL, \"q\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._x1 = x1;\n        this._y1 = y1;\n      };\n\n      window.SVGPathSegCurvetoQuadraticRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoQuadraticRel.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoQuadraticRel]\";\n      };\n\n      window.SVGPathSegCurvetoQuadraticRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x1 + \" \" + this._y1 + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoQuadraticRel.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoQuadraticRel(undefined, this._x, this._y, this._x1, this._y1);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, \"x1\", {\n        get: function get() {\n          return this._x1;\n        },\n        set: function set(x1) {\n          this._x1 = x1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, \"y1\", {\n        get: function get() {\n          return this._y1;\n        },\n        set: function set(y1) {\n          this._y1 = y1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegArcAbs = function (owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_ARC_ABS, \"A\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._r1 = r1;\n        this._r2 = r2;\n        this._angle = angle;\n        this._largeArcFlag = largeArcFlag;\n        this._sweepFlag = sweepFlag;\n      };\n\n      window.SVGPathSegArcAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegArcAbs.prototype.toString = function () {\n        return \"[object SVGPathSegArcAbs]\";\n      };\n\n      window.SVGPathSegArcAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._r1 + \" \" + this._r2 + \" \" + this._angle + \" \" + (this._largeArcFlag ? \"1\" : \"0\") + \" \" + (this._sweepFlag ? \"1\" : \"0\") + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegArcAbs.prototype.clone = function () {\n        return new window.SVGPathSegArcAbs(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag);\n      };\n\n      Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"r1\", {\n        get: function get() {\n          return this._r1;\n        },\n        set: function set(r1) {\n          this._r1 = r1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"r2\", {\n        get: function get() {\n          return this._r2;\n        },\n        set: function set(r2) {\n          this._r2 = r2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"angle\", {\n        get: function get() {\n          return this._angle;\n        },\n        set: function set(angle) {\n          this._angle = angle;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"largeArcFlag\", {\n        get: function get() {\n          return this._largeArcFlag;\n        },\n        set: function set(largeArcFlag) {\n          this._largeArcFlag = largeArcFlag;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"sweepFlag\", {\n        get: function get() {\n          return this._sweepFlag;\n        },\n        set: function set(sweepFlag) {\n          this._sweepFlag = sweepFlag;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegArcRel = function (owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_ARC_REL, \"a\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._r1 = r1;\n        this._r2 = r2;\n        this._angle = angle;\n        this._largeArcFlag = largeArcFlag;\n        this._sweepFlag = sweepFlag;\n      };\n\n      window.SVGPathSegArcRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegArcRel.prototype.toString = function () {\n        return \"[object SVGPathSegArcRel]\";\n      };\n\n      window.SVGPathSegArcRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._r1 + \" \" + this._r2 + \" \" + this._angle + \" \" + (this._largeArcFlag ? \"1\" : \"0\") + \" \" + (this._sweepFlag ? \"1\" : \"0\") + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegArcRel.prototype.clone = function () {\n        return new window.SVGPathSegArcRel(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag);\n      };\n\n      Object.defineProperty(window.SVGPathSegArcRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcRel.prototype, \"r1\", {\n        get: function get() {\n          return this._r1;\n        },\n        set: function set(r1) {\n          this._r1 = r1;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcRel.prototype, \"r2\", {\n        get: function get() {\n          return this._r2;\n        },\n        set: function set(r2) {\n          this._r2 = r2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcRel.prototype, \"angle\", {\n        get: function get() {\n          return this._angle;\n        },\n        set: function set(angle) {\n          this._angle = angle;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcRel.prototype, \"largeArcFlag\", {\n        get: function get() {\n          return this._largeArcFlag;\n        },\n        set: function set(largeArcFlag) {\n          this._largeArcFlag = largeArcFlag;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegArcRel.prototype, \"sweepFlag\", {\n        get: function get() {\n          return this._sweepFlag;\n        },\n        set: function set(sweepFlag) {\n          this._sweepFlag = sweepFlag;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegLinetoHorizontalAbs = function (owningPathSegList, x) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS, \"H\", owningPathSegList);\n        this._x = x;\n      };\n\n      window.SVGPathSegLinetoHorizontalAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegLinetoHorizontalAbs.prototype.toString = function () {\n        return \"[object SVGPathSegLinetoHorizontalAbs]\";\n      };\n\n      window.SVGPathSegLinetoHorizontalAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x;\n      };\n\n      window.SVGPathSegLinetoHorizontalAbs.prototype.clone = function () {\n        return new window.SVGPathSegLinetoHorizontalAbs(undefined, this._x);\n      };\n\n      Object.defineProperty(window.SVGPathSegLinetoHorizontalAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegLinetoHorizontalRel = function (owningPathSegList, x) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL, \"h\", owningPathSegList);\n        this._x = x;\n      };\n\n      window.SVGPathSegLinetoHorizontalRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegLinetoHorizontalRel.prototype.toString = function () {\n        return \"[object SVGPathSegLinetoHorizontalRel]\";\n      };\n\n      window.SVGPathSegLinetoHorizontalRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x;\n      };\n\n      window.SVGPathSegLinetoHorizontalRel.prototype.clone = function () {\n        return new window.SVGPathSegLinetoHorizontalRel(undefined, this._x);\n      };\n\n      Object.defineProperty(window.SVGPathSegLinetoHorizontalRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegLinetoVerticalAbs = function (owningPathSegList, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS, \"V\", owningPathSegList);\n        this._y = y;\n      };\n\n      window.SVGPathSegLinetoVerticalAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegLinetoVerticalAbs.prototype.toString = function () {\n        return \"[object SVGPathSegLinetoVerticalAbs]\";\n      };\n\n      window.SVGPathSegLinetoVerticalAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._y;\n      };\n\n      window.SVGPathSegLinetoVerticalAbs.prototype.clone = function () {\n        return new window.SVGPathSegLinetoVerticalAbs(undefined, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegLinetoVerticalAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegLinetoVerticalRel = function (owningPathSegList, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL, \"v\", owningPathSegList);\n        this._y = y;\n      };\n\n      window.SVGPathSegLinetoVerticalRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegLinetoVerticalRel.prototype.toString = function () {\n        return \"[object SVGPathSegLinetoVerticalRel]\";\n      };\n\n      window.SVGPathSegLinetoVerticalRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._y;\n      };\n\n      window.SVGPathSegLinetoVerticalRel.prototype.clone = function () {\n        return new window.SVGPathSegLinetoVerticalRel(undefined, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegLinetoVerticalRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoCubicSmoothAbs = function (owningPathSegList, x, y, x2, y2) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS, \"S\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._x2 = x2;\n        this._y2 = y2;\n      };\n\n      window.SVGPathSegCurvetoCubicSmoothAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoCubicSmoothAbs.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoCubicSmoothAbs]\";\n      };\n\n      window.SVGPathSegCurvetoCubicSmoothAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x2 + \" \" + this._y2 + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoCubicSmoothAbs.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoCubicSmoothAbs(undefined, this._x, this._y, this._x2, this._y2);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, \"x2\", {\n        get: function get() {\n          return this._x2;\n        },\n        set: function set(x2) {\n          this._x2 = x2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, \"y2\", {\n        get: function get() {\n          return this._y2;\n        },\n        set: function set(y2) {\n          this._y2 = y2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoCubicSmoothRel = function (owningPathSegList, x, y, x2, y2) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL, \"s\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n        this._x2 = x2;\n        this._y2 = y2;\n      };\n\n      window.SVGPathSegCurvetoCubicSmoothRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoCubicSmoothRel.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoCubicSmoothRel]\";\n      };\n\n      window.SVGPathSegCurvetoCubicSmoothRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x2 + \" \" + this._y2 + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoCubicSmoothRel.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoCubicSmoothRel(undefined, this._x, this._y, this._x2, this._y2);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, \"x2\", {\n        get: function get() {\n          return this._x2;\n        },\n        set: function set(x2) {\n          this._x2 = x2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, \"y2\", {\n        get: function get() {\n          return this._y2;\n        },\n        set: function set(y2) {\n          this._y2 = y2;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoQuadraticSmoothAbs = function (owningPathSegList, x, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS, \"T\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n      };\n\n      window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoQuadraticSmoothAbs]\";\n      };\n\n      window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoQuadraticSmoothAbs(undefined, this._x, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n\n      window.SVGPathSegCurvetoQuadraticSmoothRel = function (owningPathSegList, x, y) {\n        window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL, \"t\", owningPathSegList);\n        this._x = x;\n        this._y = y;\n      };\n\n      window.SVGPathSegCurvetoQuadraticSmoothRel.prototype = Object.create(window.SVGPathSeg.prototype);\n\n      window.SVGPathSegCurvetoQuadraticSmoothRel.prototype.toString = function () {\n        return \"[object SVGPathSegCurvetoQuadraticSmoothRel]\";\n      };\n\n      window.SVGPathSegCurvetoQuadraticSmoothRel.prototype._asPathString = function () {\n        return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y;\n      };\n\n      window.SVGPathSegCurvetoQuadraticSmoothRel.prototype.clone = function () {\n        return new window.SVGPathSegCurvetoQuadraticSmoothRel(undefined, this._x, this._y);\n      };\n\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothRel.prototype, \"x\", {\n        get: function get() {\n          return this._x;\n        },\n        set: function set(x) {\n          this._x = x;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothRel.prototype, \"y\", {\n        get: function get() {\n          return this._y;\n        },\n        set: function set(y) {\n          this._y = y;\n\n          this._segmentChanged();\n        },\n        enumerable: true\n      }); // Add createSVGPathSeg* functions to window.SVGPathElement.\n      // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-Interfacewindow.SVGPathElement.\n\n      window.SVGPathElement.prototype.createSVGPathSegClosePath = function () {\n        return new window.SVGPathSegClosePath(undefined);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegMovetoAbs = function (x, y) {\n        return new window.SVGPathSegMovetoAbs(undefined, x, y);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegMovetoRel = function (x, y) {\n        return new window.SVGPathSegMovetoRel(undefined, x, y);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegLinetoAbs = function (x, y) {\n        return new window.SVGPathSegLinetoAbs(undefined, x, y);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegLinetoRel = function (x, y) {\n        return new window.SVGPathSegLinetoRel(undefined, x, y);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs = function (x, y, x1, y1, x2, y2) {\n        return new window.SVGPathSegCurvetoCubicAbs(undefined, x, y, x1, y1, x2, y2);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel = function (x, y, x1, y1, x2, y2) {\n        return new window.SVGPathSegCurvetoCubicRel(undefined, x, y, x1, y1, x2, y2);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs = function (x, y, x1, y1) {\n        return new window.SVGPathSegCurvetoQuadraticAbs(undefined, x, y, x1, y1);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel = function (x, y, x1, y1) {\n        return new window.SVGPathSegCurvetoQuadraticRel(undefined, x, y, x1, y1);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegArcAbs = function (x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n        return new window.SVGPathSegArcAbs(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegArcRel = function (x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n        return new window.SVGPathSegArcRel(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs = function (x) {\n        return new window.SVGPathSegLinetoHorizontalAbs(undefined, x);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel = function (x) {\n        return new window.SVGPathSegLinetoHorizontalRel(undefined, x);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs = function (y) {\n        return new window.SVGPathSegLinetoVerticalAbs(undefined, y);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel = function (y) {\n        return new window.SVGPathSegLinetoVerticalRel(undefined, y);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs = function (x, y, x2, y2) {\n        return new window.SVGPathSegCurvetoCubicSmoothAbs(undefined, x, y, x2, y2);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel = function (x, y, x2, y2) {\n        return new window.SVGPathSegCurvetoCubicSmoothRel(undefined, x, y, x2, y2);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs = function (x, y) {\n        return new window.SVGPathSegCurvetoQuadraticSmoothAbs(undefined, x, y);\n      };\n\n      window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel = function (x, y) {\n        return new window.SVGPathSegCurvetoQuadraticSmoothRel(undefined, x, y);\n      };\n\n      if (!(\"getPathSegAtLength\" in window.SVGPathElement.prototype)) {\n        // Add getPathSegAtLength to SVGPathElement.\n        // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-__svg__SVGPathElement__getPathSegAtLength\n        // This polyfill requires SVGPathElement.getTotalLength to implement the distance-along-a-path algorithm.\n        window.SVGPathElement.prototype.getPathSegAtLength = function (distance) {\n          if (distance === undefined || !isFinite(distance)) throw \"Invalid arguments.\";\n          var measurementElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n          measurementElement.setAttribute(\"d\", this.getAttribute(\"d\"));\n          var lastPathSegment = measurementElement.pathSegList.numberOfItems - 1; // If the path is empty, return 0.\n\n          if (lastPathSegment <= 0) return 0;\n\n          do {\n            measurementElement.pathSegList.removeItem(lastPathSegment);\n            if (distance > measurementElement.getTotalLength()) break;\n            lastPathSegment--;\n          } while (lastPathSegment > 0);\n\n          return lastPathSegment;\n        };\n      }\n    }\n\n    if (!(\"SVGPathSegList\" in window)) {\n      // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSegList\n      window.SVGPathSegList = function (pathElement) {\n        this._pathElement = pathElement;\n        this._list = this._parsePath(this._pathElement.getAttribute(\"d\")); // Use a MutationObserver to catch changes to the path's \"d\" attribute.\n\n        this._mutationObserverConfig = {\n          \"attributes\": true,\n          \"attributeFilter\": [\"d\"]\n        };\n        this._pathElementMutationObserver = new MutationObserver(this._updateListFromPathMutations.bind(this));\n\n        this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);\n      };\n\n      window.SVGPathSegList.prototype.classname = \"SVGPathSegList\";\n      Object.defineProperty(window.SVGPathSegList.prototype, \"numberOfItems\", {\n        get: function get() {\n          this._checkPathSynchronizedToList();\n\n          return this._list.length;\n        },\n        enumerable: true\n      }); // Add the pathSegList accessors to window.SVGPathElement.\n      // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGAnimatedPathData\n\n      Object.defineProperty(window.SVGPathElement.prototype, \"pathSegList\", {\n        get: function get() {\n          if (!this._pathSegList) this._pathSegList = new window.SVGPathSegList(this);\n          return this._pathSegList;\n        },\n        enumerable: true\n      }); // FIXME: The following are not implemented and simply return window.SVGPathElement.pathSegList.\n\n      Object.defineProperty(window.SVGPathElement.prototype, \"normalizedPathSegList\", {\n        get: function get() {\n          return this.pathSegList;\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathElement.prototype, \"animatedPathSegList\", {\n        get: function get() {\n          return this.pathSegList;\n        },\n        enumerable: true\n      });\n      Object.defineProperty(window.SVGPathElement.prototype, \"animatedNormalizedPathSegList\", {\n        get: function get() {\n          return this.pathSegList;\n        },\n        enumerable: true\n      }); // Process any pending mutations to the path element and update the list as needed.\n      // This should be the first call of all public functions and is needed because\n      // MutationObservers are not synchronous so we can have pending asynchronous mutations.\n\n      window.SVGPathSegList.prototype._checkPathSynchronizedToList = function () {\n        this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords());\n      };\n\n      window.SVGPathSegList.prototype._updateListFromPathMutations = function (mutationRecords) {\n        if (!this._pathElement) return;\n        var hasPathMutations = false;\n        mutationRecords.forEach(function (record) {\n          if (record.attributeName == \"d\") hasPathMutations = true;\n        });\n        if (hasPathMutations) this._list = this._parsePath(this._pathElement.getAttribute(\"d\"));\n      }; // Serialize the list and update the path's 'd' attribute.\n\n\n      window.SVGPathSegList.prototype._writeListToPath = function () {\n        this._pathElementMutationObserver.disconnect();\n\n        this._pathElement.setAttribute(\"d\", window.SVGPathSegList._pathSegArrayAsString(this._list));\n\n        this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);\n      }; // When a path segment changes the list needs to be synchronized back to the path element.\n\n\n      window.SVGPathSegList.prototype.segmentChanged = function (pathSeg) {\n        this._writeListToPath();\n      };\n\n      window.SVGPathSegList.prototype.clear = function () {\n        this._checkPathSynchronizedToList();\n\n        this._list.forEach(function (pathSeg) {\n          pathSeg._owningPathSegList = null;\n        });\n\n        this._list = [];\n\n        this._writeListToPath();\n      };\n\n      window.SVGPathSegList.prototype.initialize = function (newItem) {\n        this._checkPathSynchronizedToList();\n\n        this._list = [newItem];\n        newItem._owningPathSegList = this;\n\n        this._writeListToPath();\n\n        return newItem;\n      };\n\n      window.SVGPathSegList.prototype._checkValidIndex = function (index) {\n        if (isNaN(index) || index < 0 || index >= this.numberOfItems) throw \"INDEX_SIZE_ERR\";\n      };\n\n      window.SVGPathSegList.prototype.getItem = function (index) {\n        this._checkPathSynchronizedToList();\n\n        this._checkValidIndex(index);\n\n        return this._list[index];\n      };\n\n      window.SVGPathSegList.prototype.insertItemBefore = function (newItem, index) {\n        this._checkPathSynchronizedToList(); // Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.\n\n\n        if (index > this.numberOfItems) index = this.numberOfItems;\n\n        if (newItem._owningPathSegList) {\n          // SVG2 spec says to make a copy.\n          newItem = newItem.clone();\n        }\n\n        this._list.splice(index, 0, newItem);\n\n        newItem._owningPathSegList = this;\n\n        this._writeListToPath();\n\n        return newItem;\n      };\n\n      window.SVGPathSegList.prototype.replaceItem = function (newItem, index) {\n        this._checkPathSynchronizedToList();\n\n        if (newItem._owningPathSegList) {\n          // SVG2 spec says to make a copy.\n          newItem = newItem.clone();\n        }\n\n        this._checkValidIndex(index);\n\n        this._list[index] = newItem;\n        newItem._owningPathSegList = this;\n\n        this._writeListToPath();\n\n        return newItem;\n      };\n\n      window.SVGPathSegList.prototype.removeItem = function (index) {\n        this._checkPathSynchronizedToList();\n\n        this._checkValidIndex(index);\n\n        var item = this._list[index];\n\n        this._list.splice(index, 1);\n\n        this._writeListToPath();\n\n        return item;\n      };\n\n      window.SVGPathSegList.prototype.appendItem = function (newItem) {\n        this._checkPathSynchronizedToList();\n\n        if (newItem._owningPathSegList) {\n          // SVG2 spec says to make a copy.\n          newItem = newItem.clone();\n        }\n\n        this._list.push(newItem);\n\n        newItem._owningPathSegList = this; // TODO: Optimize this to just append to the existing attribute.\n\n        this._writeListToPath();\n\n        return newItem;\n      };\n\n      window.SVGPathSegList._pathSegArrayAsString = function (pathSegArray) {\n        var string = \"\";\n        var first = true;\n        pathSegArray.forEach(function (pathSeg) {\n          if (first) {\n            first = false;\n            string += pathSeg._asPathString();\n          } else {\n            string += \" \" + pathSeg._asPathString();\n          }\n        });\n        return string;\n      }; // This closely follows SVGPathParser::parsePath from Source/core/svg/SVGPathParser.cpp.\n\n\n      window.SVGPathSegList.prototype._parsePath = function (string) {\n        if (!string || string.length == 0) return [];\n        var owningPathSegList = this;\n\n        var Builder = function Builder() {\n          this.pathSegList = [];\n        };\n\n        Builder.prototype.appendSegment = function (pathSeg) {\n          this.pathSegList.push(pathSeg);\n        };\n\n        var Source = function Source(string) {\n          this._string = string;\n          this._currentIndex = 0;\n          this._endIndex = this._string.length;\n          this._previousCommand = window.SVGPathSeg.PATHSEG_UNKNOWN;\n\n          this._skipOptionalSpaces();\n        };\n\n        Source.prototype._isCurrentSpace = function () {\n          var character = this._string[this._currentIndex];\n          return character <= \" \" && (character == \" \" || character == \"\\n\" || character == \"\\t\" || character == \"\\r\" || character == \"\\f\");\n        };\n\n        Source.prototype._skipOptionalSpaces = function () {\n          while (this._currentIndex < this._endIndex && this._isCurrentSpace()) {\n            this._currentIndex++;\n          }\n\n          return this._currentIndex < this._endIndex;\n        };\n\n        Source.prototype._skipOptionalSpacesOrDelimiter = function () {\n          if (this._currentIndex < this._endIndex && !this._isCurrentSpace() && this._string.charAt(this._currentIndex) != \",\") return false;\n\n          if (this._skipOptionalSpaces()) {\n            if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == \",\") {\n              this._currentIndex++;\n\n              this._skipOptionalSpaces();\n            }\n          }\n\n          return this._currentIndex < this._endIndex;\n        };\n\n        Source.prototype.hasMoreData = function () {\n          return this._currentIndex < this._endIndex;\n        };\n\n        Source.prototype.peekSegmentType = function () {\n          var lookahead = this._string[this._currentIndex];\n          return this._pathSegTypeFromChar(lookahead);\n        };\n\n        Source.prototype._pathSegTypeFromChar = function (lookahead) {\n          switch (lookahead) {\n            case \"Z\":\n            case \"z\":\n              return window.SVGPathSeg.PATHSEG_CLOSEPATH;\n\n            case \"M\":\n              return window.SVGPathSeg.PATHSEG_MOVETO_ABS;\n\n            case \"m\":\n              return window.SVGPathSeg.PATHSEG_MOVETO_REL;\n\n            case \"L\":\n              return window.SVGPathSeg.PATHSEG_LINETO_ABS;\n\n            case \"l\":\n              return window.SVGPathSeg.PATHSEG_LINETO_REL;\n\n            case \"C\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS;\n\n            case \"c\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL;\n\n            case \"Q\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS;\n\n            case \"q\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL;\n\n            case \"A\":\n              return window.SVGPathSeg.PATHSEG_ARC_ABS;\n\n            case \"a\":\n              return window.SVGPathSeg.PATHSEG_ARC_REL;\n\n            case \"H\":\n              return window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS;\n\n            case \"h\":\n              return window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL;\n\n            case \"V\":\n              return window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS;\n\n            case \"v\":\n              return window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL;\n\n            case \"S\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS;\n\n            case \"s\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL;\n\n            case \"T\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS;\n\n            case \"t\":\n              return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL;\n\n            default:\n              return window.SVGPathSeg.PATHSEG_UNKNOWN;\n          }\n        };\n\n        Source.prototype._nextCommandHelper = function (lookahead, previousCommand) {\n          // Check for remaining coordinates in the current command.\n          if ((lookahead == \"+\" || lookahead == \"-\" || lookahead == \".\" || lookahead >= \"0\" && lookahead <= \"9\") && previousCommand != window.SVGPathSeg.PATHSEG_CLOSEPATH) {\n            if (previousCommand == window.SVGPathSeg.PATHSEG_MOVETO_ABS) return window.SVGPathSeg.PATHSEG_LINETO_ABS;\n            if (previousCommand == window.SVGPathSeg.PATHSEG_MOVETO_REL) return window.SVGPathSeg.PATHSEG_LINETO_REL;\n            return previousCommand;\n          }\n\n          return window.SVGPathSeg.PATHSEG_UNKNOWN;\n        };\n\n        Source.prototype.initialCommandIsMoveTo = function () {\n          // If the path is empty it is still valid, so return true.\n          if (!this.hasMoreData()) return true;\n          var command = this.peekSegmentType(); // Path must start with moveTo.\n\n          return command == window.SVGPathSeg.PATHSEG_MOVETO_ABS || command == window.SVGPathSeg.PATHSEG_MOVETO_REL;\n        }; // Parse a number from an SVG path. This very closely follows genericParseNumber(...) from Source/core/svg/SVGParserUtilities.cpp.\n        // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-PathDataBNF\n\n\n        Source.prototype._parseNumber = function () {\n          var exponent = 0;\n          var integer = 0;\n          var frac = 1;\n          var decimal = 0;\n          var sign = 1;\n          var expsign = 1;\n          var startIndex = this._currentIndex;\n\n          this._skipOptionalSpaces(); // Read the sign.\n\n\n          if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == \"+\") this._currentIndex++;else if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == \"-\") {\n            this._currentIndex++;\n            sign = -1;\n          }\n          if (this._currentIndex == this._endIndex || (this._string.charAt(this._currentIndex) < \"0\" || this._string.charAt(this._currentIndex) > \"9\") && this._string.charAt(this._currentIndex) != \".\") // The first character of a number must be one of [0-9+-.].\n            return undefined; // Read the integer part, build right-to-left.\n\n          var startIntPartIndex = this._currentIndex;\n\n          while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= \"0\" && this._string.charAt(this._currentIndex) <= \"9\") {\n            this._currentIndex++;\n          } // Advance to first non-digit.\n\n\n          if (this._currentIndex != startIntPartIndex) {\n            var scanIntPartIndex = this._currentIndex - 1;\n            var multiplier = 1;\n\n            while (scanIntPartIndex >= startIntPartIndex) {\n              integer += multiplier * (this._string.charAt(scanIntPartIndex--) - \"0\");\n              multiplier *= 10;\n            }\n          } // Read the decimals.\n\n\n          if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == \".\") {\n            this._currentIndex++; // There must be a least one digit following the .\n\n            if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < \"0\" || this._string.charAt(this._currentIndex) > \"9\") return undefined;\n\n            while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= \"0\" && this._string.charAt(this._currentIndex) <= \"9\") {\n              frac *= 10;\n              decimal += (this._string.charAt(this._currentIndex) - \"0\") / frac;\n              this._currentIndex += 1;\n            }\n          } // Read the exponent part.\n\n\n          if (this._currentIndex != startIndex && this._currentIndex + 1 < this._endIndex && (this._string.charAt(this._currentIndex) == \"e\" || this._string.charAt(this._currentIndex) == \"E\") && this._string.charAt(this._currentIndex + 1) != \"x\" && this._string.charAt(this._currentIndex + 1) != \"m\") {\n            this._currentIndex++; // Read the sign of the exponent.\n\n            if (this._string.charAt(this._currentIndex) == \"+\") {\n              this._currentIndex++;\n            } else if (this._string.charAt(this._currentIndex) == \"-\") {\n              this._currentIndex++;\n              expsign = -1;\n            } // There must be an exponent.\n\n\n            if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < \"0\" || this._string.charAt(this._currentIndex) > \"9\") return undefined;\n\n            while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= \"0\" && this._string.charAt(this._currentIndex) <= \"9\") {\n              exponent *= 10;\n              exponent += this._string.charAt(this._currentIndex) - \"0\";\n              this._currentIndex++;\n            }\n          }\n\n          var number = integer + decimal;\n          number *= sign;\n          if (exponent) number *= Math.pow(10, expsign * exponent);\n          if (startIndex == this._currentIndex) return undefined;\n\n          this._skipOptionalSpacesOrDelimiter();\n\n          return number;\n        };\n\n        Source.prototype._parseArcFlag = function () {\n          if (this._currentIndex >= this._endIndex) return undefined;\n          var flag = false;\n\n          var flagChar = this._string.charAt(this._currentIndex++);\n\n          if (flagChar == \"0\") flag = false;else if (flagChar == \"1\") flag = true;else return undefined;\n\n          this._skipOptionalSpacesOrDelimiter();\n\n          return flag;\n        };\n\n        Source.prototype.parseSegment = function () {\n          var lookahead = this._string[this._currentIndex];\n\n          var command = this._pathSegTypeFromChar(lookahead);\n\n          if (command == window.SVGPathSeg.PATHSEG_UNKNOWN) {\n            // Possibly an implicit command. Not allowed if this is the first command.\n            if (this._previousCommand == window.SVGPathSeg.PATHSEG_UNKNOWN) return null;\n            command = this._nextCommandHelper(lookahead, this._previousCommand);\n            if (command == window.SVGPathSeg.PATHSEG_UNKNOWN) return null;\n          } else {\n            this._currentIndex++;\n          }\n\n          this._previousCommand = command;\n\n          switch (command) {\n            case window.SVGPathSeg.PATHSEG_MOVETO_REL:\n              return new window.SVGPathSegMovetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_MOVETO_ABS:\n              return new window.SVGPathSegMovetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_LINETO_REL:\n              return new window.SVGPathSegLinetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_LINETO_ABS:\n              return new window.SVGPathSegLinetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:\n              return new window.SVGPathSegLinetoHorizontalRel(owningPathSegList, this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:\n              return new window.SVGPathSegLinetoHorizontalAbs(owningPathSegList, this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:\n              return new window.SVGPathSegLinetoVerticalRel(owningPathSegList, this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:\n              return new window.SVGPathSegLinetoVerticalAbs(owningPathSegList, this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_CLOSEPATH:\n              this._skipOptionalSpaces();\n\n              return new window.SVGPathSegClosePath(owningPathSegList);\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:\n              var points = {\n                x1: this._parseNumber(),\n                y1: this._parseNumber(),\n                x2: this._parseNumber(),\n                y2: this._parseNumber(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegCurvetoCubicRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:\n              var points = {\n                x1: this._parseNumber(),\n                y1: this._parseNumber(),\n                x2: this._parseNumber(),\n                y2: this._parseNumber(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegCurvetoCubicAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:\n              var points = {\n                x2: this._parseNumber(),\n                y2: this._parseNumber(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegCurvetoCubicSmoothRel(owningPathSegList, points.x, points.y, points.x2, points.y2);\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:\n              var points = {\n                x2: this._parseNumber(),\n                y2: this._parseNumber(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegCurvetoCubicSmoothAbs(owningPathSegList, points.x, points.y, points.x2, points.y2);\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:\n              var points = {\n                x1: this._parseNumber(),\n                y1: this._parseNumber(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegCurvetoQuadraticRel(owningPathSegList, points.x, points.y, points.x1, points.y1);\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:\n              var points = {\n                x1: this._parseNumber(),\n                y1: this._parseNumber(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegCurvetoQuadraticAbs(owningPathSegList, points.x, points.y, points.x1, points.y1);\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:\n              return new window.SVGPathSegCurvetoQuadraticSmoothRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:\n              return new window.SVGPathSegCurvetoQuadraticSmoothAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n\n            case window.SVGPathSeg.PATHSEG_ARC_REL:\n              var points = {\n                x1: this._parseNumber(),\n                y1: this._parseNumber(),\n                arcAngle: this._parseNumber(),\n                arcLarge: this._parseArcFlag(),\n                arcSweep: this._parseArcFlag(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegArcRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);\n\n            case window.SVGPathSeg.PATHSEG_ARC_ABS:\n              var points = {\n                x1: this._parseNumber(),\n                y1: this._parseNumber(),\n                arcAngle: this._parseNumber(),\n                arcLarge: this._parseArcFlag(),\n                arcSweep: this._parseArcFlag(),\n                x: this._parseNumber(),\n                y: this._parseNumber()\n              };\n              return new window.SVGPathSegArcAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);\n\n            default:\n              throw \"Unknown path seg type.\";\n          }\n        };\n\n        var builder = new Builder();\n        var source = new Source(string);\n        if (!source.initialCommandIsMoveTo()) return [];\n\n        while (source.hasMoreData()) {\n          var pathSeg = source.parseSegment();\n          if (!pathSeg) return [];\n          builder.appendSegment(pathSeg);\n        }\n\n        return builder.pathSegList;\n      };\n    }\n  })(); // String.padEnd polyfill for IE11\n  //\n  // https://github.com/uxitten/polyfill/blob/master/string.polyfill.js\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n\n\n  if (!String.prototype.padEnd) {\n    String.prototype.padEnd = function padEnd(targetLength, padString) {\n      targetLength = targetLength >> 0; //floor if number or convert non-number to 0;\n\n      padString = String(typeof padString !== 'undefined' ? padString : ' ');\n\n      if (this.length > targetLength) {\n        return String(this);\n      } else {\n        targetLength = targetLength - this.length;\n\n        if (targetLength > padString.length) {\n          padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed\n        }\n\n        return String(this) + padString.slice(0, targetLength);\n      }\n    };\n  }\n  /* jshint ignore:end */\n\n  Chart.prototype.axis = function () {};\n\n  Chart.prototype.axis.labels = function (labels) {\n    var $$ = this.internal;\n\n    if (arguments.length) {\n      Object.keys(labels).forEach(function (axisId) {\n        $$.axis.setLabelText(axisId, labels[axisId]);\n      });\n      $$.axis.updateLabels();\n    } // TODO: return some values?\n\n  };\n\n  Chart.prototype.axis.max = function (max) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (arguments.length) {\n      if (_typeof(max) === 'object') {\n        if (isValue(max.x)) {\n          config.axis_x_max = max.x;\n        }\n\n        if (isValue(max.y)) {\n          config.axis_y_max = max.y;\n        }\n\n        if (isValue(max.y2)) {\n          config.axis_y2_max = max.y2;\n        }\n      } else {\n        config.axis_y_max = config.axis_y2_max = max;\n      }\n\n      $$.redraw({\n        withUpdateOrgXDomain: true,\n        withUpdateXDomain: true\n      });\n    } else {\n      return {\n        x: config.axis_x_max,\n        y: config.axis_y_max,\n        y2: config.axis_y2_max\n      };\n    }\n  };\n\n  Chart.prototype.axis.min = function (min) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (arguments.length) {\n      if (_typeof(min) === 'object') {\n        if (isValue(min.x)) {\n          config.axis_x_min = min.x;\n        }\n\n        if (isValue(min.y)) {\n          config.axis_y_min = min.y;\n        }\n\n        if (isValue(min.y2)) {\n          config.axis_y2_min = min.y2;\n        }\n      } else {\n        config.axis_y_min = config.axis_y2_min = min;\n      }\n\n      $$.redraw({\n        withUpdateOrgXDomain: true,\n        withUpdateXDomain: true\n      });\n    } else {\n      return {\n        x: config.axis_x_min,\n        y: config.axis_y_min,\n        y2: config.axis_y2_min\n      };\n    }\n  };\n\n  Chart.prototype.axis.range = function (range) {\n    if (arguments.length) {\n      if (isDefined(range.max)) {\n        this.axis.max(range.max);\n      }\n\n      if (isDefined(range.min)) {\n        this.axis.min(range.min);\n      }\n    } else {\n      return {\n        max: this.axis.max(),\n        min: this.axis.min()\n      };\n    }\n  };\n\n  Chart.prototype.category = function (i, category) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (arguments.length > 1) {\n      config.axis_x_categories[i] = category;\n      $$.redraw();\n    }\n\n    return config.axis_x_categories[i];\n  };\n\n  Chart.prototype.categories = function (categories) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (!arguments.length) {\n      return config.axis_x_categories;\n    }\n\n    config.axis_x_categories = categories;\n    $$.redraw();\n    return config.axis_x_categories;\n  };\n\n  Chart.prototype.resize = function (size) {\n    var $$ = this.internal,\n        config = $$.config;\n    config.size_width = size ? size.width : null;\n    config.size_height = size ? size.height : null;\n    this.flush();\n  };\n\n  Chart.prototype.flush = function () {\n    var $$ = this.internal;\n    $$.updateAndRedraw({\n      withLegend: true,\n      withTransition: false,\n      withTransitionForTransform: false\n    });\n  };\n\n  Chart.prototype.destroy = function () {\n    var $$ = this.internal;\n    window.clearInterval($$.intervalForObserveInserted);\n\n    if ($$.resizeTimeout !== undefined) {\n      window.clearTimeout($$.resizeTimeout);\n    }\n\n    if (window.detachEvent) {\n      window.detachEvent('onresize', $$.resizeIfElementDisplayed);\n    } else if (window.removeEventListener) {\n      window.removeEventListener('resize', $$.resizeIfElementDisplayed);\n    } else {\n      var wrapper = window.onresize; // check if no one else removed our wrapper and remove our resizeFunction from it\n\n      if (wrapper && wrapper.add && wrapper.remove) {\n        wrapper.remove($$.resizeFunction);\n      }\n    } // Removes the inner resize functions\n\n\n    $$.resizeFunction.remove(); // Unbinds from the window focus event\n\n    $$.unbindWindowFocus();\n    $$.selectChart.classed('c3', false).html(\"\"); // MEMO: this is needed because the reference of some elements will not be released, then memory leak will happen.\n\n    Object.keys($$).forEach(function (key) {\n      $$[key] = null;\n    });\n    return null;\n  };\n\n  Chart.prototype.color = function (id) {\n    var $$ = this.internal;\n    return $$.color(id); // more patterns\n  };\n\n  Chart.prototype.data = function (targetIds) {\n    var targets = this.internal.data.targets;\n    return typeof targetIds === 'undefined' ? targets : targets.filter(function (t) {\n      return [].concat(targetIds).indexOf(t.id) >= 0;\n    });\n  };\n\n  Chart.prototype.data.shown = function (targetIds) {\n    return this.internal.filterTargetsToShow(this.data(targetIds));\n  };\n\n  Chart.prototype.data.values = function (targetId) {\n    var targets,\n        values = null;\n\n    if (targetId) {\n      targets = this.data(targetId);\n      values = targets[0] ? targets[0].values.map(function (d) {\n        return d.value;\n      }) : null;\n    }\n\n    return values;\n  };\n\n  Chart.prototype.data.names = function (names) {\n    this.internal.clearLegendItemTextBoxCache();\n    return this.internal.updateDataAttributes('names', names);\n  };\n\n  Chart.prototype.data.colors = function (colors) {\n    return this.internal.updateDataAttributes('colors', colors);\n  };\n\n  Chart.prototype.data.axes = function (axes) {\n    return this.internal.updateDataAttributes('axes', axes);\n  };\n\n  Chart.prototype.flow = function (args) {\n    var $$ = this.internal,\n        targets,\n        data,\n        notfoundIds = [],\n        orgDataCount = $$.getMaxDataCount(),\n        dataCount,\n        domain,\n        baseTarget,\n        baseValue,\n        length = 0,\n        tail = 0,\n        diff,\n        to;\n\n    if (args.json) {\n      data = $$.convertJsonToData(args.json, args.keys);\n    } else if (args.rows) {\n      data = $$.convertRowsToData(args.rows);\n    } else if (args.columns) {\n      data = $$.convertColumnsToData(args.columns);\n    } else {\n      return;\n    }\n\n    targets = $$.convertDataToTargets(data, true); // Update/Add data\n\n    $$.data.targets.forEach(function (t) {\n      var found = false,\n          i,\n          j;\n\n      for (i = 0; i < targets.length; i++) {\n        if (t.id === targets[i].id) {\n          found = true;\n\n          if (t.values[t.values.length - 1]) {\n            tail = t.values[t.values.length - 1].index + 1;\n          }\n\n          length = targets[i].values.length;\n\n          for (j = 0; j < length; j++) {\n            targets[i].values[j].index = tail + j;\n\n            if (!$$.isTimeSeries()) {\n              targets[i].values[j].x = tail + j;\n            }\n          }\n\n          t.values = t.values.concat(targets[i].values);\n          targets.splice(i, 1);\n          break;\n        }\n      }\n\n      if (!found) {\n        notfoundIds.push(t.id);\n      }\n    }); // Append null for not found targets\n\n    $$.data.targets.forEach(function (t) {\n      var i, j;\n\n      for (i = 0; i < notfoundIds.length; i++) {\n        if (t.id === notfoundIds[i]) {\n          tail = t.values[t.values.length - 1].index + 1;\n\n          for (j = 0; j < length; j++) {\n            t.values.push({\n              id: t.id,\n              index: tail + j,\n              x: $$.isTimeSeries() ? $$.getOtherTargetX(tail + j) : tail + j,\n              value: null\n            });\n          }\n        }\n      }\n    }); // Generate null values for new target\n\n    if ($$.data.targets.length) {\n      targets.forEach(function (t) {\n        var i,\n            missing = [];\n\n        for (i = $$.data.targets[0].values[0].index; i < tail; i++) {\n          missing.push({\n            id: t.id,\n            index: i,\n            x: $$.isTimeSeries() ? $$.getOtherTargetX(i) : i,\n            value: null\n          });\n        }\n\n        t.values.forEach(function (v) {\n          v.index += tail;\n\n          if (!$$.isTimeSeries()) {\n            v.x += tail;\n          }\n        });\n        t.values = missing.concat(t.values);\n      });\n    }\n\n    $$.data.targets = $$.data.targets.concat(targets); // add remained\n    // check data count because behavior needs to change when it's only one\n\n    dataCount = $$.getMaxDataCount();\n    baseTarget = $$.data.targets[0];\n    baseValue = baseTarget.values[0]; // Update length to flow if needed\n\n    if (isDefined(args.to)) {\n      length = 0;\n      to = $$.isTimeSeries() ? $$.parseDate(args.to) : args.to;\n      baseTarget.values.forEach(function (v) {\n        if (v.x < to) {\n          length++;\n        }\n      });\n    } else if (isDefined(args.length)) {\n      length = args.length;\n    } // If only one data, update the domain to flow from left edge of the chart\n\n\n    if (!orgDataCount) {\n      if ($$.isTimeSeries()) {\n        if (baseTarget.values.length > 1) {\n          diff = baseTarget.values[baseTarget.values.length - 1].x - baseValue.x;\n        } else {\n          diff = baseValue.x - $$.getXDomain($$.data.targets)[0];\n        }\n      } else {\n        diff = 1;\n      }\n\n      domain = [baseValue.x - diff, baseValue.x];\n      $$.updateXDomain(null, true, true, false, domain);\n    } else if (orgDataCount === 1) {\n      if ($$.isTimeSeries()) {\n        diff = (baseTarget.values[baseTarget.values.length - 1].x - baseValue.x) / 2;\n        domain = [new Date(+baseValue.x - diff), new Date(+baseValue.x + diff)];\n        $$.updateXDomain(null, true, true, false, domain);\n      }\n    } // Set targets\n\n\n    $$.updateTargets($$.data.targets); // Redraw with new targets\n\n    $$.redraw({\n      flow: {\n        index: baseValue.index,\n        length: length,\n        duration: isValue(args.duration) ? args.duration : $$.config.transition_duration,\n        done: args.done,\n        orgDataCount: orgDataCount\n      },\n      withLegend: true,\n      withTransition: orgDataCount > 1,\n      withTrimXDomain: false,\n      withUpdateXAxis: true\n    });\n  };\n\n  ChartInternal.prototype.generateFlow = function (args) {\n    var $$ = this,\n        config = $$.config,\n        d3 = $$.d3;\n    return function () {\n      var targets = args.targets,\n          flow = args.flow,\n          drawBar = args.drawBar,\n          drawLine = args.drawLine,\n          drawArea = args.drawArea,\n          cx = args.cx,\n          cy = args.cy,\n          xv = args.xv,\n          xForText = args.xForText,\n          yForText = args.yForText,\n          duration = args.duration;\n\n      var translateX,\n          scaleX = 1,\n          transform,\n          flowIndex = flow.index,\n          flowLength = flow.length,\n          flowStart = $$.getValueOnIndex($$.data.targets[0].values, flowIndex),\n          flowEnd = $$.getValueOnIndex($$.data.targets[0].values, flowIndex + flowLength),\n          orgDomain = $$.x.domain(),\n          domain,\n          durationForFlow = flow.duration || duration,\n          done = flow.done || function () {},\n          wait = $$.generateWait();\n\n      var xgrid, xgridLines, mainRegion, mainText, mainBar, mainLine, mainArea, mainCircle; // set flag\n\n      $$.flowing = true; // remove head data after rendered\n\n      $$.data.targets.forEach(function (d) {\n        d.values.splice(0, flowLength);\n      }); // update x domain to generate axis elements for flow\n\n      domain = $$.updateXDomain(targets, true, true); // update elements related to x scale\n\n      if ($$.updateXGrid) {\n        $$.updateXGrid(true);\n      }\n\n      xgrid = $$.xgrid || d3.selectAll([]); // xgrid needs to be obtained after updateXGrid\n\n      xgridLines = $$.xgridLines || d3.selectAll([]);\n      mainRegion = $$.mainRegion || d3.selectAll([]);\n      mainText = $$.mainText || d3.selectAll([]);\n      mainBar = $$.mainBar || d3.selectAll([]);\n      mainLine = $$.mainLine || d3.selectAll([]);\n      mainArea = $$.mainArea || d3.selectAll([]);\n      mainCircle = $$.mainCircle || d3.selectAll([]); // generate transform to flow\n\n      if (!flow.orgDataCount) {\n        // if empty\n        if ($$.data.targets[0].values.length !== 1) {\n          translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);\n        } else {\n          if ($$.isTimeSeries()) {\n            flowStart = $$.getValueOnIndex($$.data.targets[0].values, 0);\n            flowEnd = $$.getValueOnIndex($$.data.targets[0].values, $$.data.targets[0].values.length - 1);\n            translateX = $$.x(flowStart.x) - $$.x(flowEnd.x);\n          } else {\n            translateX = diffDomain(domain) / 2;\n          }\n        }\n      } else if (flow.orgDataCount === 1 || (flowStart && flowStart.x) === (flowEnd && flowEnd.x)) {\n        translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);\n      } else {\n        if ($$.isTimeSeries()) {\n          translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);\n        } else {\n          translateX = $$.x(flowStart.x) - $$.x(flowEnd.x);\n        }\n      }\n\n      scaleX = diffDomain(orgDomain) / diffDomain(domain);\n      transform = 'translate(' + translateX + ',0) scale(' + scaleX + ',1)';\n      $$.hideXGridFocus();\n      var flowTransition = d3.transition().ease(d3.easeLinear).duration(durationForFlow);\n      wait.add($$.xAxis($$.axes.x, flowTransition));\n      wait.add(mainBar.transition(flowTransition).attr('transform', transform));\n      wait.add(mainLine.transition(flowTransition).attr('transform', transform));\n      wait.add(mainArea.transition(flowTransition).attr('transform', transform));\n      wait.add(mainCircle.transition(flowTransition).attr('transform', transform));\n      wait.add(mainText.transition(flowTransition).attr('transform', transform));\n      wait.add(mainRegion.filter($$.isRegionOnX).transition(flowTransition).attr('transform', transform));\n      wait.add(xgrid.transition(flowTransition).attr('transform', transform));\n      wait.add(xgridLines.transition(flowTransition).attr('transform', transform));\n      wait(function () {\n        var i,\n            shapes = [],\n            texts = []; // remove flowed elements\n\n        if (flowLength) {\n          for (i = 0; i < flowLength; i++) {\n            shapes.push('.' + CLASS.shape + '-' + (flowIndex + i));\n            texts.push('.' + CLASS.text + '-' + (flowIndex + i));\n          }\n\n          $$.svg.selectAll('.' + CLASS.shapes).selectAll(shapes).remove();\n          $$.svg.selectAll('.' + CLASS.texts).selectAll(texts).remove();\n          $$.svg.select('.' + CLASS.xgrid).remove();\n        } // draw again for removing flowed elements and reverting attr\n\n\n        xgrid.attr('transform', null).attr('x1', $$.xgridAttr.x1).attr('x2', $$.xgridAttr.x2).attr('y1', $$.xgridAttr.y1).attr('y2', $$.xgridAttr.y2).style(\"opacity\", $$.xgridAttr.opacity);\n        xgridLines.attr('transform', null);\n        xgridLines.select('line').attr(\"x1\", config.axis_rotated ? 0 : xv).attr(\"x2\", config.axis_rotated ? $$.width : xv);\n        xgridLines.select('text').attr(\"x\", config.axis_rotated ? $$.width : 0).attr(\"y\", xv);\n        mainBar.attr('transform', null).attr(\"d\", drawBar);\n        mainLine.attr('transform', null).attr(\"d\", drawLine);\n        mainArea.attr('transform', null).attr(\"d\", drawArea);\n        mainCircle.attr('transform', null).attr(\"cx\", cx).attr(\"cy\", cy);\n        mainText.attr('transform', null).attr('x', xForText).attr('y', yForText).style('fill-opacity', $$.opacityForText.bind($$));\n        mainRegion.attr('transform', null);\n        mainRegion.filter($$.isRegionOnX).attr(\"x\", $$.regionX.bind($$)).attr(\"width\", $$.regionWidth.bind($$)); // callback for end of flow\n\n        done();\n        $$.flowing = false;\n      });\n    };\n  };\n\n  Chart.prototype.focus = function (targetIds) {\n    var $$ = this.internal,\n        candidates;\n    targetIds = $$.mapToTargetIds(targetIds);\n    candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$))), this.revert();\n    this.defocus();\n    candidates.classed(CLASS.focused, true).classed(CLASS.defocused, false);\n\n    if ($$.hasArcType()) {\n      $$.expandArc(targetIds);\n    }\n\n    $$.toggleFocusLegend(targetIds, true);\n    $$.focusedTargetIds = targetIds;\n    $$.defocusedTargetIds = $$.defocusedTargetIds.filter(function (id) {\n      return targetIds.indexOf(id) < 0;\n    });\n  };\n\n  Chart.prototype.defocus = function (targetIds) {\n    var $$ = this.internal,\n        candidates;\n    targetIds = $$.mapToTargetIds(targetIds);\n    candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$))), candidates.classed(CLASS.focused, false).classed(CLASS.defocused, true);\n\n    if ($$.hasArcType()) {\n      $$.unexpandArc(targetIds);\n    }\n\n    $$.toggleFocusLegend(targetIds, false);\n    $$.focusedTargetIds = $$.focusedTargetIds.filter(function (id) {\n      return targetIds.indexOf(id) < 0;\n    });\n    $$.defocusedTargetIds = targetIds;\n  };\n\n  Chart.prototype.revert = function (targetIds) {\n    var $$ = this.internal,\n        candidates;\n    targetIds = $$.mapToTargetIds(targetIds);\n    candidates = $$.svg.selectAll($$.selectorTargets(targetIds)); // should be for all targets\n\n    candidates.classed(CLASS.focused, false).classed(CLASS.defocused, false);\n\n    if ($$.hasArcType()) {\n      $$.unexpandArc(targetIds);\n    }\n\n    if ($$.config.legend_show) {\n      $$.showLegend(targetIds.filter($$.isLegendToShow.bind($$)));\n      $$.legend.selectAll($$.selectorLegends(targetIds)).filter(function () {\n        return $$.d3.select(this).classed(CLASS.legendItemFocused);\n      }).classed(CLASS.legendItemFocused, false);\n    }\n\n    $$.focusedTargetIds = [];\n    $$.defocusedTargetIds = [];\n  };\n\n  Chart.prototype.xgrids = function (grids) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (!grids) {\n      return config.grid_x_lines;\n    }\n\n    config.grid_x_lines = grids;\n    $$.redrawWithoutRescale();\n    return config.grid_x_lines;\n  };\n\n  Chart.prototype.xgrids.add = function (grids) {\n    var $$ = this.internal;\n    return this.xgrids($$.config.grid_x_lines.concat(grids ? grids : []));\n  };\n\n  Chart.prototype.xgrids.remove = function (params) {\n    // TODO: multiple\n    var $$ = this.internal;\n    $$.removeGridLines(params, true);\n  };\n\n  Chart.prototype.ygrids = function (grids) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (!grids) {\n      return config.grid_y_lines;\n    }\n\n    config.grid_y_lines = grids;\n    $$.redrawWithoutRescale();\n    return config.grid_y_lines;\n  };\n\n  Chart.prototype.ygrids.add = function (grids) {\n    var $$ = this.internal;\n    return this.ygrids($$.config.grid_y_lines.concat(grids ? grids : []));\n  };\n\n  Chart.prototype.ygrids.remove = function (params) {\n    // TODO: multiple\n    var $$ = this.internal;\n    $$.removeGridLines(params, false);\n  };\n\n  Chart.prototype.groups = function (groups) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (isUndefined(groups)) {\n      return config.data_groups;\n    }\n\n    config.data_groups = groups;\n    $$.redraw();\n    return config.data_groups;\n  };\n\n  Chart.prototype.legend = function () {};\n\n  Chart.prototype.legend.show = function (targetIds) {\n    var $$ = this.internal;\n    $$.showLegend($$.mapToTargetIds(targetIds));\n    $$.updateAndRedraw({\n      withLegend: true\n    });\n  };\n\n  Chart.prototype.legend.hide = function (targetIds) {\n    var $$ = this.internal;\n    $$.hideLegend($$.mapToTargetIds(targetIds));\n    $$.updateAndRedraw({\n      withLegend: false\n    });\n  };\n\n  Chart.prototype.load = function (args) {\n    var $$ = this.internal,\n        config = $$.config; // update xs if specified\n\n    if (args.xs) {\n      $$.addXs(args.xs);\n    } // update names if exists\n\n\n    if ('names' in args) {\n      Chart.prototype.data.names.bind(this)(args.names);\n    } // update classes if exists\n\n\n    if ('classes' in args) {\n      Object.keys(args.classes).forEach(function (id) {\n        config.data_classes[id] = args.classes[id];\n      });\n    } // update categories if exists\n\n\n    if ('categories' in args && $$.isCategorized()) {\n      config.axis_x_categories = args.categories;\n    } // update axes if exists\n\n\n    if ('axes' in args) {\n      Object.keys(args.axes).forEach(function (id) {\n        config.data_axes[id] = args.axes[id];\n      });\n    } // update colors if exists\n\n\n    if ('colors' in args) {\n      Object.keys(args.colors).forEach(function (id) {\n        config.data_colors[id] = args.colors[id];\n      });\n    } // use cache if exists\n\n\n    if ('cacheIds' in args && $$.hasCaches(args.cacheIds)) {\n      $$.load($$.getCaches(args.cacheIds), args.done);\n      return;\n    } // unload if needed\n\n\n    if ('unload' in args) {\n      // TODO: do not unload if target will load (included in url/rows/columns)\n      $$.unload($$.mapToTargetIds(typeof args.unload === 'boolean' && args.unload ? null : args.unload), function () {\n        $$.loadFromArgs(args);\n      });\n    } else {\n      $$.loadFromArgs(args);\n    }\n  };\n\n  Chart.prototype.unload = function (args) {\n    var $$ = this.internal;\n    args = args || {};\n\n    if (args instanceof Array) {\n      args = {\n        ids: args\n      };\n    } else if (typeof args === 'string') {\n      args = {\n        ids: [args]\n      };\n    }\n\n    $$.unload($$.mapToTargetIds(args.ids), function () {\n      $$.redraw({\n        withUpdateOrgXDomain: true,\n        withUpdateXDomain: true,\n        withLegend: true\n      });\n\n      if (args.done) {\n        args.done();\n      }\n    });\n  };\n\n  Chart.prototype.regions = function (regions) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (!regions) {\n      return config.regions;\n    }\n\n    config.regions = regions;\n    $$.redrawWithoutRescale();\n    return config.regions;\n  };\n\n  Chart.prototype.regions.add = function (regions) {\n    var $$ = this.internal,\n        config = $$.config;\n\n    if (!regions) {\n      return config.regions;\n    }\n\n    config.regions = config.regions.concat(regions);\n    $$.redrawWithoutRescale();\n    return config.regions;\n  };\n\n  Chart.prototype.regions.remove = function (options) {\n    var $$ = this.internal,\n        config = $$.config,\n        duration,\n        classes,\n        regions;\n    options = options || {};\n    duration = getOption(options, \"duration\", config.transition_duration);\n    classes = getOption(options, \"classes\", [CLASS.region]);\n    regions = $$.main.select('.' + CLASS.regions).selectAll(classes.map(function (c) {\n      return '.' + c;\n    }));\n    (duration ? regions.transition().duration(duration) : regions).style('opacity', 0).remove();\n    config.regions = config.regions.filter(function (region) {\n      var found = false;\n\n      if (!region['class']) {\n        return true;\n      }\n\n      region['class'].split(' ').forEach(function (c) {\n        if (classes.indexOf(c) >= 0) {\n          found = true;\n        }\n      });\n      return !found;\n    });\n    return config.regions;\n  };\n\n  Chart.prototype.selected = function (targetId) {\n    var $$ = this.internal,\n        d3 = $$.d3;\n    return d3.merge($$.main.selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(targetId)).selectAll('.' + CLASS.shape).filter(function () {\n      return d3.select(this).classed(CLASS.SELECTED);\n    }).map(function (d) {\n      return d.map(function (d) {\n        var data = d.__data__;\n        return data.data ? data.data : data;\n      });\n    }));\n  };\n\n  Chart.prototype.select = function (ids, indices, resetOther) {\n    var $$ = this.internal,\n        d3 = $$.d3,\n        config = $$.config;\n\n    if (!config.data_selection_enabled) {\n      return;\n    }\n\n    $$.main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape).each(function (d, i) {\n      var shape = d3.select(this),\n          id = d.data ? d.data.id : d.id,\n          toggle = $$.getToggle(this, d).bind($$),\n          isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0,\n          isTargetIndex = !indices || indices.indexOf(i) >= 0,\n          isSelected = shape.classed(CLASS.SELECTED); // line/area selection not supported yet\n\n      if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) {\n        return;\n      }\n\n      if (isTargetId && isTargetIndex) {\n        if (config.data_selection_isselectable(d) && !isSelected) {\n          toggle(true, shape.classed(CLASS.SELECTED, true), d, i);\n        }\n      } else if (isDefined(resetOther) && resetOther) {\n        if (isSelected) {\n          toggle(false, shape.classed(CLASS.SELECTED, false), d, i);\n        }\n      }\n    });\n  };\n\n  Chart.prototype.unselect = function (ids, indices) {\n    var $$ = this.internal,\n        d3 = $$.d3,\n        config = $$.config;\n\n    if (!config.data_selection_enabled) {\n      return;\n    }\n\n    $$.main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape).each(function (d, i) {\n      var shape = d3.select(this),\n          id = d.data ? d.data.id : d.id,\n          toggle = $$.getToggle(this, d).bind($$),\n          isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0,\n          isTargetIndex = !indices || indices.indexOf(i) >= 0,\n          isSelected = shape.classed(CLASS.SELECTED); // line/area selection not supported yet\n\n      if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) {\n        return;\n      }\n\n      if (isTargetId && isTargetIndex) {\n        if (config.data_selection_isselectable(d)) {\n          if (isSelected) {\n            toggle(false, shape.classed(CLASS.SELECTED, false), d, i);\n          }\n        }\n      }\n    });\n  };\n\n  Chart.prototype.show = function (targetIds, options) {\n    var $$ = this.internal,\n        targets;\n    targetIds = $$.mapToTargetIds(targetIds);\n    options = options || {};\n    $$.removeHiddenTargetIds(targetIds);\n    targets = $$.svg.selectAll($$.selectorTargets(targetIds));\n    targets.transition().style('display', 'initial', 'important').style('opacity', 1, 'important').call($$.endall, function () {\n      targets.style('opacity', null).style('opacity', 1);\n    });\n\n    if (options.withLegend) {\n      $$.showLegend(targetIds);\n    }\n\n    $$.redraw({\n      withUpdateOrgXDomain: true,\n      withUpdateXDomain: true,\n      withLegend: true\n    });\n  };\n\n  Chart.prototype.hide = function (targetIds, options) {\n    var $$ = this.internal,\n        targets;\n    targetIds = $$.mapToTargetIds(targetIds);\n    options = options || {};\n    $$.addHiddenTargetIds(targetIds);\n    targets = $$.svg.selectAll($$.selectorTargets(targetIds));\n    targets.transition().style('opacity', 0, 'important').call($$.endall, function () {\n      targets.style('opacity', null).style('opacity', 0);\n      targets.style('display', 'none');\n    });\n\n    if (options.withLegend) {\n      $$.hideLegend(targetIds);\n    }\n\n    $$.redraw({\n      withUpdateOrgXDomain: true,\n      withUpdateXDomain: true,\n      withLegend: true\n    });\n  };\n\n  Chart.prototype.toggle = function (targetIds, options) {\n    var that = this,\n        $$ = this.internal;\n    $$.mapToTargetIds(targetIds).forEach(function (targetId) {\n      $$.isTargetToShow(targetId) ? that.hide(targetId, options) : that.show(targetId, options);\n    });\n  };\n\n  Chart.prototype.tooltip = function () {};\n\n  Chart.prototype.tooltip.show = function (args) {\n    var $$ = this.internal,\n        targets,\n        data,\n        mouse = {}; // determine mouse position on the chart\n\n    if (args.mouse) {\n      mouse = args.mouse;\n    } else {\n      // determine focus data\n      if (args.data) {\n        data = args.data;\n      } else if (typeof args.x !== 'undefined') {\n        if (args.id) {\n          targets = $$.data.targets.filter(function (t) {\n            return t.id === args.id;\n          });\n        } else {\n          targets = $$.data.targets;\n        }\n\n        data = $$.filterByX(targets, args.x).slice(0, 1)[0];\n      }\n\n      mouse = data ? $$.getMousePosition(data) : null;\n    } // emulate mouse events to show\n\n\n    $$.dispatchEvent('mousemove', mouse);\n    $$.config.tooltip_onshow.call($$, data);\n  };\n\n  Chart.prototype.tooltip.hide = function () {\n    // TODO: get target data by checking the state of focus\n    this.internal.dispatchEvent('mouseout', 0);\n    this.internal.config.tooltip_onhide.call(this);\n  };\n\n  Chart.prototype.transform = function (type, targetIds) {\n    var $$ = this.internal,\n        options = ['pie', 'donut'].indexOf(type) >= 0 ? {\n      withTransform: true\n    } : null;\n    $$.transformTo(targetIds, type, options);\n  };\n\n  ChartInternal.prototype.transformTo = function (targetIds, type, optionsForRedraw) {\n    var $$ = this,\n        withTransitionForAxis = !$$.hasArcType(),\n        options = optionsForRedraw || {\n      withTransitionForAxis: withTransitionForAxis\n    };\n    options.withTransitionForTransform = false;\n    $$.transiting = false;\n    $$.setTargetType(targetIds, type);\n    $$.updateTargets($$.data.targets); // this is needed when transforming to arc\n\n    $$.updateAndRedraw(options);\n  };\n\n  Chart.prototype.x = function (x) {\n    var $$ = this.internal;\n\n    if (arguments.length) {\n      $$.updateTargetX($$.data.targets, x);\n      $$.redraw({\n        withUpdateOrgXDomain: true,\n        withUpdateXDomain: true\n      });\n    }\n\n    return $$.data.xs;\n  };\n\n  Chart.prototype.xs = function (xs) {\n    var $$ = this.internal;\n\n    if (arguments.length) {\n      $$.updateTargetXs($$.data.targets, xs);\n      $$.redraw({\n        withUpdateOrgXDomain: true,\n        withUpdateXDomain: true\n      });\n    }\n\n    return $$.data.xs;\n  };\n\n  Chart.prototype.zoom = function (domain) {\n    var $$ = this.internal;\n\n    if (domain) {\n      if ($$.isTimeSeries()) {\n        domain = domain.map(function (x) {\n          return $$.parseDate(x);\n        });\n      }\n\n      if ($$.config.subchart_show) {\n        $$.brush.selectionAsValue(domain, true);\n      } else {\n        $$.updateXDomain(null, true, false, false, domain);\n        $$.redraw({\n          withY: $$.config.zoom_rescale,\n          withSubchart: false\n        });\n      }\n\n      $$.config.zoom_onzoom.call(this, $$.x.orgDomain());\n      return domain;\n    } else {\n      return $$.x.domain();\n    }\n  };\n\n  Chart.prototype.zoom.enable = function (enabled) {\n    var $$ = this.internal;\n    $$.config.zoom_enabled = enabled;\n    $$.updateAndRedraw();\n  };\n\n  Chart.prototype.unzoom = function () {\n    var $$ = this.internal;\n\n    if ($$.config.subchart_show) {\n      $$.brush.clear();\n    } else {\n      $$.updateXDomain(null, true, false, false, $$.subX.domain());\n      $$.redraw({\n        withY: $$.config.zoom_rescale,\n        withSubchart: false\n      });\n    }\n  };\n\n  Chart.prototype.zoom.max = function (max) {\n    var $$ = this.internal,\n        config = $$.config,\n        d3 = $$.d3;\n\n    if (max === 0 || max) {\n      config.zoom_x_max = d3.max([$$.orgXDomain[1], max]);\n    } else {\n      return config.zoom_x_max;\n    }\n  };\n\n  Chart.prototype.zoom.min = function (min) {\n    var $$ = this.internal,\n        config = $$.config,\n        d3 = $$.d3;\n\n    if (min === 0 || min) {\n      config.zoom_x_min = d3.min([$$.orgXDomain[0], min]);\n    } else {\n      return config.zoom_x_min;\n    }\n  };\n\n  Chart.prototype.zoom.range = function (range) {\n    if (arguments.length) {\n      if (isDefined(range.max)) {\n        this.domain.max(range.max);\n      }\n\n      if (isDefined(range.min)) {\n        this.domain.min(range.min);\n      }\n    } else {\n      return {\n        max: this.domain.max(),\n        min: this.domain.min()\n      };\n    }\n  };\n\n  ChartInternal.prototype.initPie = function () {\n    var $$ = this,\n        d3 = $$.d3;\n    $$.pie = d3.pie().value(function (d) {\n      return d.values.reduce(function (a, b) {\n        return a + b.value;\n      }, 0);\n    });\n    var orderFct = $$.getOrderFunction(); // we need to reverse the returned order if asc or desc to have the slice in expected order.\n\n    if (orderFct && ($$.isOrderAsc() || $$.isOrderDesc())) {\n      var defaultSort = orderFct;\n\n      orderFct = function orderFct(t1, t2) {\n        return defaultSort(t1, t2) * -1;\n      };\n    }\n\n    $$.pie.sort(orderFct || null);\n  };\n\n  ChartInternal.prototype.updateRadius = function () {\n    var $$ = this,\n        config = $$.config,\n        w = config.gauge_width || config.donut_width,\n        gaugeArcWidth = $$.filterTargetsToShow($$.data.targets).length * $$.config.gauge_arcs_minWidth;\n    $$.radiusExpanded = Math.min($$.arcWidth, $$.arcHeight) / 2 * ($$.hasType('gauge') ? 0.85 : 1);\n    $$.radius = $$.radiusExpanded * 0.95;\n    $$.innerRadiusRatio = w ? ($$.radius - w) / $$.radius : 0.6;\n    $$.innerRadius = $$.hasType('donut') || $$.hasType('gauge') ? $$.radius * $$.innerRadiusRatio : 0;\n    $$.gaugeArcWidth = w ? w : gaugeArcWidth <= $$.radius - $$.innerRadius ? $$.radius - $$.innerRadius : gaugeArcWidth <= $$.radius ? gaugeArcWidth : $$.radius;\n  };\n\n  ChartInternal.prototype.updateArc = function () {\n    var $$ = this;\n    $$.svgArc = $$.getSvgArc();\n    $$.svgArcExpanded = $$.getSvgArcExpanded();\n    $$.svgArcExpandedSub = $$.getSvgArcExpanded(0.98);\n  };\n\n  ChartInternal.prototype.updateAngle = function (d) {\n    var $$ = this,\n        config = $$.config,\n        found = false,\n        index = 0,\n        gMin,\n        gMax,\n        gTic,\n        gValue;\n\n    if (!config) {\n      return null;\n    }\n\n    $$.pie($$.filterTargetsToShow($$.data.targets)).forEach(function (t) {\n      if (!found && t.data.id === d.data.id) {\n        found = true;\n        d = t;\n        d.index = index;\n      }\n\n      index++;\n    });\n\n    if (isNaN(d.startAngle)) {\n      d.startAngle = 0;\n    }\n\n    if (isNaN(d.endAngle)) {\n      d.endAngle = d.startAngle;\n    }\n\n    if ($$.isGaugeType(d.data)) {\n      gMin = config.gauge_min;\n      gMax = config.gauge_max;\n      gTic = Math.PI * (config.gauge_fullCircle ? 2 : 1) / (gMax - gMin);\n      gValue = d.value < gMin ? 0 : d.value < gMax ? d.value - gMin : gMax - gMin;\n      d.startAngle = config.gauge_startingAngle;\n      d.endAngle = d.startAngle + gTic * gValue;\n    }\n\n    return found ? d : null;\n  };\n\n  ChartInternal.prototype.getSvgArc = function () {\n    var $$ = this,\n        hasGaugeType = $$.hasType('gauge'),\n        singleArcWidth = $$.gaugeArcWidth / $$.filterTargetsToShow($$.data.targets).length,\n        arc = $$.d3.arc().outerRadius(function (d) {\n      return hasGaugeType ? $$.radius - singleArcWidth * d.index : $$.radius;\n    }).innerRadius(function (d) {\n      return hasGaugeType ? $$.radius - singleArcWidth * (d.index + 1) : $$.innerRadius;\n    }),\n        newArc = function newArc(d, withoutUpdate) {\n      var updated;\n\n      if (withoutUpdate) {\n        return arc(d);\n      } // for interpolate\n\n\n      updated = $$.updateAngle(d);\n      return updated ? arc(updated) : \"M 0 0\";\n    }; // TODO: extends all function\n\n\n    newArc.centroid = arc.centroid;\n    return newArc;\n  };\n\n  ChartInternal.prototype.getSvgArcExpanded = function (rate) {\n    rate = rate || 1;\n    var $$ = this,\n        hasGaugeType = $$.hasType('gauge'),\n        singleArcWidth = $$.gaugeArcWidth / $$.filterTargetsToShow($$.data.targets).length,\n        expandWidth = Math.min($$.radiusExpanded * rate - $$.radius, singleArcWidth * 0.8 - (1 - rate) * 100),\n        arc = $$.d3.arc().outerRadius(function (d) {\n      return hasGaugeType ? $$.radius - singleArcWidth * d.index + expandWidth : $$.radiusExpanded * rate;\n    }).innerRadius(function (d) {\n      return hasGaugeType ? $$.radius - singleArcWidth * (d.index + 1) : $$.innerRadius;\n    });\n    return function (d) {\n      var updated = $$.updateAngle(d);\n      return updated ? arc(updated) : \"M 0 0\";\n    };\n  };\n\n  ChartInternal.prototype.getArc = function (d, withoutUpdate, force) {\n    return force || this.isArcType(d.data) ? this.svgArc(d, withoutUpdate) : \"M 0 0\";\n  };\n\n  ChartInternal.prototype.transformForArcLabel = function (d) {\n    var $$ = this,\n        config = $$.config,\n        updated = $$.updateAngle(d),\n        c,\n        x,\n        y,\n        h,\n        ratio,\n        translate = \"\",\n        hasGauge = $$.hasType('gauge');\n\n    if (updated && !hasGauge) {\n      c = this.svgArc.centroid(updated);\n      x = isNaN(c[0]) ? 0 : c[0];\n      y = isNaN(c[1]) ? 0 : c[1];\n      h = Math.sqrt(x * x + y * y);\n\n      if ($$.hasType('donut') && config.donut_label_ratio) {\n        ratio = isFunction(config.donut_label_ratio) ? config.donut_label_ratio(d, $$.radius, h) : config.donut_label_ratio;\n      } else if ($$.hasType('pie') && config.pie_label_ratio) {\n        ratio = isFunction(config.pie_label_ratio) ? config.pie_label_ratio(d, $$.radius, h) : config.pie_label_ratio;\n      } else {\n        ratio = $$.radius && h ? (36 / $$.radius > 0.375 ? 1.175 - 36 / $$.radius : 0.8) * $$.radius / h : 0;\n      }\n\n      translate = \"translate(\" + x * ratio + ',' + y * ratio + \")\";\n    } else if (updated && hasGauge && $$.filterTargetsToShow($$.data.targets).length > 1) {\n      var y1 = Math.sin(updated.endAngle - Math.PI / 2);\n      x = Math.cos(updated.endAngle - Math.PI / 2) * ($$.radiusExpanded + 25);\n      y = y1 * ($$.radiusExpanded + 15 - Math.abs(y1 * 10)) + 3;\n      translate = \"translate(\" + x + ',' + y + \")\";\n    }\n\n    return translate;\n  };\n\n  ChartInternal.prototype.getArcRatio = function (d) {\n    var $$ = this,\n        config = $$.config,\n        whole = Math.PI * ($$.hasType('gauge') && !config.gauge_fullCircle ? 1 : 2);\n    return d ? (d.endAngle - d.startAngle) / whole : null;\n  };\n\n  ChartInternal.prototype.convertToArcData = function (d) {\n    return this.addName({\n      id: d.data.id,\n      value: d.value,\n      ratio: this.getArcRatio(d),\n      index: d.index\n    });\n  };\n\n  ChartInternal.prototype.textForArcLabel = function (d) {\n    var $$ = this,\n        updated,\n        value,\n        ratio,\n        id,\n        format;\n\n    if (!$$.shouldShowArcLabel()) {\n      return \"\";\n    }\n\n    updated = $$.updateAngle(d);\n    value = updated ? updated.value : null;\n    ratio = $$.getArcRatio(updated);\n    id = d.data.id;\n\n    if (!$$.hasType('gauge') && !$$.meetsArcLabelThreshold(ratio)) {\n      return \"\";\n    }\n\n    format = $$.getArcLabelFormat();\n    return format ? format(value, ratio, id) : $$.defaultArcValueFormat(value, ratio);\n  };\n\n  ChartInternal.prototype.textForGaugeMinMax = function (value, isMax) {\n    var $$ = this,\n        format = $$.getGaugeLabelExtents();\n    return format ? format(value, isMax) : value;\n  };\n\n  ChartInternal.prototype.expandArc = function (targetIds) {\n    var $$ = this,\n        interval; // MEMO: avoid to cancel transition\n\n    if ($$.transiting) {\n      interval = window.setInterval(function () {\n        if (!$$.transiting) {\n          window.clearInterval(interval);\n\n          if ($$.legend.selectAll('.c3-legend-item-focused').size() > 0) {\n            $$.expandArc(targetIds);\n          }\n        }\n      }, 10);\n      return;\n    }\n\n    targetIds = $$.mapToTargetIds(targetIds);\n    $$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)).each(function (d) {\n      if (!$$.shouldExpand(d.data.id)) {\n        return;\n      }\n\n      $$.d3.select(this).selectAll('path').transition().duration($$.expandDuration(d.data.id)).attr(\"d\", $$.svgArcExpanded).transition().duration($$.expandDuration(d.data.id) * 2).attr(\"d\", $$.svgArcExpandedSub).each(function (d) {\n        if ($$.isDonutType(d.data)) ;\n      });\n    });\n  };\n\n  ChartInternal.prototype.unexpandArc = function (targetIds) {\n    var $$ = this;\n\n    if ($$.transiting) {\n      return;\n    }\n\n    targetIds = $$.mapToTargetIds(targetIds);\n    $$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)).selectAll('path').transition().duration(function (d) {\n      return $$.expandDuration(d.data.id);\n    }).attr(\"d\", $$.svgArc);\n    $$.svg.selectAll('.' + CLASS.arc);\n  };\n\n  ChartInternal.prototype.expandDuration = function (id) {\n    var $$ = this,\n        config = $$.config;\n\n    if ($$.isDonutType(id)) {\n      return config.donut_expand_duration;\n    } else if ($$.isGaugeType(id)) {\n      return config.gauge_expand_duration;\n    } else if ($$.isPieType(id)) {\n      return config.pie_expand_duration;\n    } else {\n      return 50;\n    }\n  };\n\n  ChartInternal.prototype.shouldExpand = function (id) {\n    var $$ = this,\n        config = $$.config;\n    return $$.isDonutType(id) && config.donut_expand || $$.isGaugeType(id) && config.gauge_expand || $$.isPieType(id) && config.pie_expand;\n  };\n\n  ChartInternal.prototype.shouldShowArcLabel = function () {\n    var $$ = this,\n        config = $$.config,\n        shouldShow = true;\n\n    if ($$.hasType('donut')) {\n      shouldShow = config.donut_label_show;\n    } else if ($$.hasType('pie')) {\n      shouldShow = config.pie_label_show;\n    } // when gauge, always true\n\n\n    return shouldShow;\n  };\n\n  ChartInternal.prototype.meetsArcLabelThreshold = function (ratio) {\n    var $$ = this,\n        config = $$.config,\n        threshold = $$.hasType('donut') ? config.donut_label_threshold : config.pie_label_threshold;\n    return ratio >= threshold;\n  };\n\n  ChartInternal.prototype.getArcLabelFormat = function () {\n    var $$ = this,\n        config = $$.config,\n        format = config.pie_label_format;\n\n    if ($$.hasType('gauge')) {\n      format = config.gauge_label_format;\n    } else if ($$.hasType('donut')) {\n      format = config.donut_label_format;\n    }\n\n    return format;\n  };\n\n  ChartInternal.prototype.getGaugeLabelExtents = function () {\n    var $$ = this,\n        config = $$.config;\n    return config.gauge_label_extents;\n  };\n\n  ChartInternal.prototype.getArcTitle = function () {\n    var $$ = this;\n    return $$.hasType('donut') ? $$.config.donut_title : \"\";\n  };\n\n  ChartInternal.prototype.updateTargetsForArc = function (targets) {\n    var $$ = this,\n        main = $$.main,\n        mainPies,\n        mainPieEnter,\n        classChartArc = $$.classChartArc.bind($$),\n        classArcs = $$.classArcs.bind($$),\n        classFocus = $$.classFocus.bind($$);\n    mainPies = main.select('.' + CLASS.chartArcs).selectAll('.' + CLASS.chartArc).data($$.pie(targets)).attr(\"class\", function (d) {\n      return classChartArc(d) + classFocus(d.data);\n    });\n    mainPieEnter = mainPies.enter().append(\"g\").attr(\"class\", classChartArc);\n    mainPieEnter.append('g').attr('class', classArcs);\n    mainPieEnter.append(\"text\").attr(\"dy\", $$.hasType('gauge') ? \"-.1em\" : \".35em\").style(\"opacity\", 0).style(\"text-anchor\", \"middle\").style(\"pointer-events\", \"none\"); // MEMO: can not keep same color..., but not bad to update color in redraw\n    //mainPieUpdate.exit().remove();\n  };\n\n  ChartInternal.prototype.initArc = function () {\n    var $$ = this;\n    $$.arcs = $$.main.select('.' + CLASS.chart).append(\"g\").attr(\"class\", CLASS.chartArcs).attr(\"transform\", $$.getTranslate('arc'));\n    $$.arcs.append('text').attr('class', CLASS.chartArcsTitle).style(\"text-anchor\", \"middle\").text($$.getArcTitle());\n  };\n\n  ChartInternal.prototype.redrawArc = function (duration, durationForExit, withTransform) {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config,\n        main = $$.main,\n        arcs,\n        mainArc,\n        arcLabelLines,\n        mainArcLabelLine,\n        hasGaugeType = $$.hasType('gauge');\n    arcs = main.selectAll('.' + CLASS.arcs).selectAll('.' + CLASS.arc).data($$.arcData.bind($$));\n    mainArc = arcs.enter().append('path').attr(\"class\", $$.classArc.bind($$)).style(\"fill\", function (d) {\n      return $$.color(d.data);\n    }).style(\"cursor\", function (d) {\n      return config.interaction_enabled && config.data_selection_isselectable(d) ? \"pointer\" : null;\n    }).each(function (d) {\n      if ($$.isGaugeType(d.data)) {\n        d.startAngle = d.endAngle = config.gauge_startingAngle;\n      }\n\n      this._current = d;\n    }).merge(arcs);\n\n    if (hasGaugeType) {\n      arcLabelLines = main.selectAll('.' + CLASS.arcs).selectAll('.' + CLASS.arcLabelLine).data($$.arcData.bind($$));\n      mainArcLabelLine = arcLabelLines.enter().append('rect').attr(\"class\", function (d) {\n        return CLASS.arcLabelLine + ' ' + CLASS.target + ' ' + CLASS.target + '-' + d.data.id;\n      }).merge(arcLabelLines);\n\n      if ($$.filterTargetsToShow($$.data.targets).length === 1) {\n        mainArcLabelLine.style(\"display\", \"none\");\n      } else {\n        mainArcLabelLine.style(\"fill\", function (d) {\n          return $$.levelColor ? $$.levelColor(d.data.values[0].value) : $$.color(d.data);\n        }).style(\"display\", config.gauge_labelLine_show ? \"\" : \"none\").each(function (d) {\n          var lineLength = 0,\n              lineThickness = 2,\n              x = 0,\n              y = 0,\n              transform = \"\";\n\n          if ($$.hiddenTargetIds.indexOf(d.data.id) < 0) {\n            var updated = $$.updateAngle(d),\n                innerLineLength = $$.gaugeArcWidth / $$.filterTargetsToShow($$.data.targets).length * (updated.index + 1),\n                lineAngle = updated.endAngle - Math.PI / 2,\n                arcInnerRadius = $$.radius - innerLineLength,\n                linePositioningAngle = lineAngle - (arcInnerRadius === 0 ? 0 : 1 / arcInnerRadius);\n            lineLength = $$.radiusExpanded - $$.radius + innerLineLength;\n            x = Math.cos(linePositioningAngle) * arcInnerRadius;\n            y = Math.sin(linePositioningAngle) * arcInnerRadius;\n            transform = \"rotate(\" + lineAngle * 180 / Math.PI + \", \" + x + \", \" + y + \")\";\n          }\n\n          d3.select(this).attr('x', x).attr('y', y).attr('width', lineLength).attr('height', lineThickness).attr('transform', transform).style(\"stroke-dasharray\", \"0, \" + (lineLength + lineThickness) + \", 0\");\n        });\n      }\n    }\n\n    mainArc.attr(\"transform\", function (d) {\n      return !$$.isGaugeType(d.data) && withTransform ? \"scale(0)\" : \"\";\n    }).on('mouseover', config.interaction_enabled ? function (d) {\n      var updated, arcData;\n\n      if ($$.transiting) {\n        // skip while transiting\n        return;\n      }\n\n      updated = $$.updateAngle(d);\n\n      if (updated) {\n        arcData = $$.convertToArcData(updated); // transitions\n\n        $$.expandArc(updated.data.id);\n        $$.api.focus(updated.data.id);\n        $$.toggleFocusLegend(updated.data.id, true);\n        $$.config.data_onmouseover(arcData, this);\n      }\n    } : null).on('mousemove', config.interaction_enabled ? function (d) {\n      var updated = $$.updateAngle(d),\n          arcData,\n          selectedData;\n\n      if (updated) {\n        arcData = $$.convertToArcData(updated), selectedData = [arcData];\n        $$.showTooltip(selectedData, this);\n      }\n    } : null).on('mouseout', config.interaction_enabled ? function (d) {\n      var updated, arcData;\n\n      if ($$.transiting) {\n        // skip while transiting\n        return;\n      }\n\n      updated = $$.updateAngle(d);\n\n      if (updated) {\n        arcData = $$.convertToArcData(updated); // transitions\n\n        $$.unexpandArc(updated.data.id);\n        $$.api.revert();\n        $$.revertLegend();\n        $$.hideTooltip();\n        $$.config.data_onmouseout(arcData, this);\n      }\n    } : null).on('click', config.interaction_enabled ? function (d, i) {\n      var updated = $$.updateAngle(d),\n          arcData;\n\n      if (updated) {\n        arcData = $$.convertToArcData(updated);\n\n        if ($$.toggleShape) {\n          $$.toggleShape(this, arcData, i);\n        }\n\n        $$.config.data_onclick.call($$.api, arcData, this);\n      }\n    } : null).each(function () {\n      $$.transiting = true;\n    }).transition().duration(duration).attrTween(\"d\", function (d) {\n      var updated = $$.updateAngle(d),\n          interpolate;\n\n      if (!updated) {\n        return function () {\n          return \"M 0 0\";\n        };\n      } //                if (this._current === d) {\n      //                    this._current = {\n      //                        startAngle: Math.PI*2,\n      //                        endAngle: Math.PI*2,\n      //                    };\n      //                }\n\n\n      if (isNaN(this._current.startAngle)) {\n        this._current.startAngle = 0;\n      }\n\n      if (isNaN(this._current.endAngle)) {\n        this._current.endAngle = this._current.startAngle;\n      }\n\n      interpolate = d3.interpolate(this._current, updated);\n      this._current = interpolate(0);\n      return function (t) {\n        var interpolated = interpolate(t);\n        interpolated.data = d.data; // data.id will be updated by interporator\n\n        return $$.getArc(interpolated, true);\n      };\n    }).attr(\"transform\", withTransform ? \"scale(1)\" : \"\").style(\"fill\", function (d) {\n      return $$.levelColor ? $$.levelColor(d.data.values[0].value) : $$.color(d.data.id);\n    }) // Where gauge reading color would receive customization.\n    .call($$.endall, function () {\n      $$.transiting = false;\n    });\n    arcs.exit().transition().duration(durationForExit).style('opacity', 0).remove();\n    main.selectAll('.' + CLASS.chartArc).select('text').style(\"opacity\", 0).attr('class', function (d) {\n      return $$.isGaugeType(d.data) ? CLASS.gaugeValue : '';\n    }).text($$.textForArcLabel.bind($$)).attr(\"transform\", $$.transformForArcLabel.bind($$)).style('font-size', function (d) {\n      return $$.isGaugeType(d.data) && $$.filterTargetsToShow($$.data.targets).length === 1 ? Math.round($$.radius / 5) + 'px' : '';\n    }).transition().duration(duration).style(\"opacity\", function (d) {\n      return $$.isTargetToShow(d.data.id) && $$.isArcType(d.data) ? 1 : 0;\n    });\n    main.select('.' + CLASS.chartArcsTitle).style(\"opacity\", $$.hasType('donut') || hasGaugeType ? 1 : 0);\n\n    if (hasGaugeType) {\n      var index = 0;\n      var backgroundArc = $$.arcs.select('g.' + CLASS.chartArcsBackground).selectAll('path.' + CLASS.chartArcsBackground).data($$.data.targets);\n      backgroundArc.enter().append(\"path\").attr(\"class\", function (d, i) {\n        return CLASS.chartArcsBackground + ' ' + CLASS.chartArcsBackground + '-' + i;\n      }).merge(backgroundArc).attr(\"d\", function (d1) {\n        if ($$.hiddenTargetIds.indexOf(d1.id) >= 0) {\n          return \"M 0 0\";\n        }\n\n        var d = {\n          data: [{\n            value: config.gauge_max\n          }],\n          startAngle: config.gauge_startingAngle,\n          endAngle: -1 * config.gauge_startingAngle * (config.gauge_fullCircle ? Math.PI : 1),\n          index: index++\n        };\n        return $$.getArc(d, true, true);\n      });\n      backgroundArc.exit().remove();\n      $$.arcs.select('.' + CLASS.chartArcsGaugeUnit).attr(\"dy\", \".75em\").text(config.gauge_label_show ? config.gauge_units : '');\n      $$.arcs.select('.' + CLASS.chartArcsGaugeMin).attr(\"dx\", -1 * ($$.innerRadius + ($$.radius - $$.innerRadius) / (config.gauge_fullCircle ? 1 : 2)) + \"px\").attr(\"dy\", \"1.2em\").text(config.gauge_label_show ? $$.textForGaugeMinMax(config.gauge_min, false) : '');\n      $$.arcs.select('.' + CLASS.chartArcsGaugeMax).attr(\"dx\", $$.innerRadius + ($$.radius - $$.innerRadius) / (config.gauge_fullCircle ? 1 : 2) + \"px\").attr(\"dy\", \"1.2em\").text(config.gauge_label_show ? $$.textForGaugeMinMax(config.gauge_max, true) : '');\n    }\n  };\n\n  ChartInternal.prototype.initGauge = function () {\n    var arcs = this.arcs;\n\n    if (this.hasType('gauge')) {\n      arcs.append('g').attr(\"class\", CLASS.chartArcsBackground);\n      arcs.append(\"text\").attr(\"class\", CLASS.chartArcsGaugeUnit).style(\"text-anchor\", \"middle\").style(\"pointer-events\", \"none\");\n      arcs.append(\"text\").attr(\"class\", CLASS.chartArcsGaugeMin).style(\"text-anchor\", \"middle\").style(\"pointer-events\", \"none\");\n      arcs.append(\"text\").attr(\"class\", CLASS.chartArcsGaugeMax).style(\"text-anchor\", \"middle\").style(\"pointer-events\", \"none\");\n    }\n  };\n\n  ChartInternal.prototype.getGaugeLabelHeight = function () {\n    return this.config.gauge_label_show ? 20 : 0;\n  };\n\n  ChartInternal.prototype.hasCaches = function (ids) {\n    for (var i = 0; i < ids.length; i++) {\n      if (!(ids[i] in this.cache)) {\n        return false;\n      }\n    }\n\n    return true;\n  };\n\n  ChartInternal.prototype.addCache = function (id, target) {\n    this.cache[id] = this.cloneTarget(target);\n  };\n\n  ChartInternal.prototype.getCaches = function (ids) {\n    var targets = [],\n        i;\n\n    for (i = 0; i < ids.length; i++) {\n      if (ids[i] in this.cache) {\n        targets.push(this.cloneTarget(this.cache[ids[i]]));\n      }\n    }\n\n    return targets;\n  };\n\n  ChartInternal.prototype.categoryName = function (i) {\n    var config = this.config;\n    return i < config.axis_x_categories.length ? config.axis_x_categories[i] : i;\n  };\n\n  ChartInternal.prototype.generateTargetClass = function (targetId) {\n    return targetId || targetId === 0 ? ('-' + targetId).replace(/\\s/g, '-') : '';\n  };\n\n  ChartInternal.prototype.generateClass = function (prefix, targetId) {\n    return \" \" + prefix + \" \" + prefix + this.generateTargetClass(targetId);\n  };\n\n  ChartInternal.prototype.classText = function (d) {\n    return this.generateClass(CLASS.text, d.index);\n  };\n\n  ChartInternal.prototype.classTexts = function (d) {\n    return this.generateClass(CLASS.texts, d.id);\n  };\n\n  ChartInternal.prototype.classShape = function (d) {\n    return this.generateClass(CLASS.shape, d.index);\n  };\n\n  ChartInternal.prototype.classShapes = function (d) {\n    return this.generateClass(CLASS.shapes, d.id);\n  };\n\n  ChartInternal.prototype.classLine = function (d) {\n    return this.classShape(d) + this.generateClass(CLASS.line, d.id);\n  };\n\n  ChartInternal.prototype.classLines = function (d) {\n    return this.classShapes(d) + this.generateClass(CLASS.lines, d.id);\n  };\n\n  ChartInternal.prototype.classCircle = function (d) {\n    return this.classShape(d) + this.generateClass(CLASS.circle, d.index);\n  };\n\n  ChartInternal.prototype.classCircles = function (d) {\n    return this.classShapes(d) + this.generateClass(CLASS.circles, d.id);\n  };\n\n  ChartInternal.prototype.classBar = function (d) {\n    return this.classShape(d) + this.generateClass(CLASS.bar, d.index);\n  };\n\n  ChartInternal.prototype.classBars = function (d) {\n    return this.classShapes(d) + this.generateClass(CLASS.bars, d.id);\n  };\n\n  ChartInternal.prototype.classArc = function (d) {\n    return this.classShape(d.data) + this.generateClass(CLASS.arc, d.data.id);\n  };\n\n  ChartInternal.prototype.classArcs = function (d) {\n    return this.classShapes(d.data) + this.generateClass(CLASS.arcs, d.data.id);\n  };\n\n  ChartInternal.prototype.classArea = function (d) {\n    return this.classShape(d) + this.generateClass(CLASS.area, d.id);\n  };\n\n  ChartInternal.prototype.classAreas = function (d) {\n    return this.classShapes(d) + this.generateClass(CLASS.areas, d.id);\n  };\n\n  ChartInternal.prototype.classRegion = function (d, i) {\n    return this.generateClass(CLASS.region, i) + ' ' + ('class' in d ? d['class'] : '');\n  };\n\n  ChartInternal.prototype.classEvent = function (d) {\n    return this.generateClass(CLASS.eventRect, d.index);\n  };\n\n  ChartInternal.prototype.classTarget = function (id) {\n    var $$ = this;\n    var additionalClassSuffix = $$.config.data_classes[id],\n        additionalClass = '';\n\n    if (additionalClassSuffix) {\n      additionalClass = ' ' + CLASS.target + '-' + additionalClassSuffix;\n    }\n\n    return $$.generateClass(CLASS.target, id) + additionalClass;\n  };\n\n  ChartInternal.prototype.classFocus = function (d) {\n    return this.classFocused(d) + this.classDefocused(d);\n  };\n\n  ChartInternal.prototype.classFocused = function (d) {\n    return ' ' + (this.focusedTargetIds.indexOf(d.id) >= 0 ? CLASS.focused : '');\n  };\n\n  ChartInternal.prototype.classDefocused = function (d) {\n    return ' ' + (this.defocusedTargetIds.indexOf(d.id) >= 0 ? CLASS.defocused : '');\n  };\n\n  ChartInternal.prototype.classChartText = function (d) {\n    return CLASS.chartText + this.classTarget(d.id);\n  };\n\n  ChartInternal.prototype.classChartLine = function (d) {\n    return CLASS.chartLine + this.classTarget(d.id);\n  };\n\n  ChartInternal.prototype.classChartBar = function (d) {\n    return CLASS.chartBar + this.classTarget(d.id);\n  };\n\n  ChartInternal.prototype.classChartArc = function (d) {\n    return CLASS.chartArc + this.classTarget(d.data.id);\n  };\n\n  ChartInternal.prototype.getTargetSelectorSuffix = function (targetId) {\n    return this.generateTargetClass(targetId).replace(/([?!@#$%^&*()_=+,.<>'\":;\\[\\]\\/|~`{}\\\\])/g, '\\\\$1');\n  };\n\n  ChartInternal.prototype.selectorTarget = function (id, prefix) {\n    return (prefix || '') + '.' + CLASS.target + this.getTargetSelectorSuffix(id);\n  };\n\n  ChartInternal.prototype.selectorTargets = function (ids, prefix) {\n    var $$ = this;\n    ids = ids || [];\n    return ids.length ? ids.map(function (id) {\n      return $$.selectorTarget(id, prefix);\n    }) : null;\n  };\n\n  ChartInternal.prototype.selectorLegend = function (id) {\n    return '.' + CLASS.legendItem + this.getTargetSelectorSuffix(id);\n  };\n\n  ChartInternal.prototype.selectorLegends = function (ids) {\n    var $$ = this;\n    return ids && ids.length ? ids.map(function (id) {\n      return $$.selectorLegend(id);\n    }) : null;\n  };\n\n  ChartInternal.prototype.getClipPath = function (id) {\n    var isIE9 = window.navigator.appVersion.toLowerCase().indexOf(\"msie 9.\") >= 0;\n    return \"url(\" + (isIE9 ? \"\" : document.URL.split('#')[0]) + \"#\" + id + \")\";\n  };\n\n  ChartInternal.prototype.appendClip = function (parent, id) {\n    return parent.append(\"clipPath\").attr(\"id\", id).append(\"rect\");\n  };\n\n  ChartInternal.prototype.getAxisClipX = function (forHorizontal) {\n    // axis line width + padding for left\n    var left = Math.max(30, this.margin.left);\n    return forHorizontal ? -(1 + left) : -(left - 1);\n  };\n\n  ChartInternal.prototype.getAxisClipY = function (forHorizontal) {\n    return forHorizontal ? -20 : -this.margin.top;\n  };\n\n  ChartInternal.prototype.getXAxisClipX = function () {\n    var $$ = this;\n    return $$.getAxisClipX(!$$.config.axis_rotated);\n  };\n\n  ChartInternal.prototype.getXAxisClipY = function () {\n    var $$ = this;\n    return $$.getAxisClipY(!$$.config.axis_rotated);\n  };\n\n  ChartInternal.prototype.getYAxisClipX = function () {\n    var $$ = this;\n    return $$.config.axis_y_inner ? -1 : $$.getAxisClipX($$.config.axis_rotated);\n  };\n\n  ChartInternal.prototype.getYAxisClipY = function () {\n    var $$ = this;\n    return $$.getAxisClipY($$.config.axis_rotated);\n  };\n\n  ChartInternal.prototype.getAxisClipWidth = function (forHorizontal) {\n    var $$ = this,\n        left = Math.max(30, $$.margin.left),\n        right = Math.max(30, $$.margin.right); // width + axis line width + padding for left/right\n\n    return forHorizontal ? $$.width + 2 + left + right : $$.margin.left + 20;\n  };\n\n  ChartInternal.prototype.getAxisClipHeight = function (forHorizontal) {\n    // less than 20 is not enough to show the axis label 'outer' without legend\n    return (forHorizontal ? this.margin.bottom : this.margin.top + this.height) + 20;\n  };\n\n  ChartInternal.prototype.getXAxisClipWidth = function () {\n    var $$ = this;\n    return $$.getAxisClipWidth(!$$.config.axis_rotated);\n  };\n\n  ChartInternal.prototype.getXAxisClipHeight = function () {\n    var $$ = this;\n    return $$.getAxisClipHeight(!$$.config.axis_rotated);\n  };\n\n  ChartInternal.prototype.getYAxisClipWidth = function () {\n    var $$ = this;\n    return $$.getAxisClipWidth($$.config.axis_rotated) + ($$.config.axis_y_inner ? 20 : 0);\n  };\n\n  ChartInternal.prototype.getYAxisClipHeight = function () {\n    var $$ = this;\n    return $$.getAxisClipHeight($$.config.axis_rotated);\n  };\n\n  ChartInternal.prototype.generateColor = function () {\n    var $$ = this,\n        config = $$.config,\n        d3 = $$.d3,\n        colors = config.data_colors,\n        pattern = notEmpty(config.color_pattern) ? config.color_pattern : d3.schemeCategory10,\n        callback = config.data_color,\n        ids = [];\n    return function (d) {\n      var id = d.id || d.data && d.data.id || d,\n          color; // if callback function is provided\n\n      if (colors[id] instanceof Function) {\n        color = colors[id](d);\n      } // if specified, choose that color\n      else if (colors[id]) {\n          color = colors[id];\n        } // if not specified, choose from pattern\n        else {\n            if (ids.indexOf(id) < 0) {\n              ids.push(id);\n            }\n\n            color = pattern[ids.indexOf(id) % pattern.length];\n            colors[id] = color;\n          }\n\n      return callback instanceof Function ? callback(color, d) : color;\n    };\n  };\n\n  ChartInternal.prototype.generateLevelColor = function () {\n    var $$ = this,\n        config = $$.config,\n        colors = config.color_pattern,\n        threshold = config.color_threshold,\n        asValue = threshold.unit === 'value',\n        values = threshold.values && threshold.values.length ? threshold.values : [],\n        max = threshold.max || 100;\n    return notEmpty(threshold) && notEmpty(colors) ? function (value) {\n      var i,\n          v,\n          color = colors[colors.length - 1];\n\n      for (i = 0; i < values.length; i++) {\n        v = asValue ? value : value * 100 / max;\n\n        if (v < values[i]) {\n          color = colors[i];\n          break;\n        }\n      }\n\n      return color;\n    } : null;\n  };\n\n  ChartInternal.prototype.getDefaultConfig = function () {\n    var config = {\n      bindto: '#chart',\n      svg_classname: undefined,\n      size_width: undefined,\n      size_height: undefined,\n      padding_left: undefined,\n      padding_right: undefined,\n      padding_top: undefined,\n      padding_bottom: undefined,\n      resize_auto: true,\n      zoom_enabled: false,\n      zoom_initialRange: undefined,\n      zoom_type: 'scroll',\n      zoom_disableDefaultBehavior: false,\n      zoom_privileged: false,\n      zoom_rescale: false,\n      zoom_onzoom: function zoom_onzoom() {},\n      zoom_onzoomstart: function zoom_onzoomstart() {},\n      zoom_onzoomend: function zoom_onzoomend() {},\n      zoom_x_min: undefined,\n      zoom_x_max: undefined,\n      interaction_brighten: true,\n      interaction_enabled: true,\n      onmouseover: function onmouseover() {},\n      onmouseout: function onmouseout() {},\n      onresize: function onresize() {},\n      onresized: function onresized() {},\n      oninit: function oninit() {},\n      onrendered: function onrendered() {},\n      transition_duration: 350,\n      data_x: undefined,\n      data_xs: {},\n      data_xFormat: '%Y-%m-%d',\n      data_xLocaltime: true,\n      data_xSort: true,\n      data_idConverter: function data_idConverter(id) {\n        return id;\n      },\n      data_names: {},\n      data_classes: {},\n      data_groups: [],\n      data_axes: {},\n      data_type: undefined,\n      data_types: {},\n      data_labels: {},\n      data_order: 'desc',\n      data_regions: {},\n      data_color: undefined,\n      data_colors: {},\n      data_hide: false,\n      data_filter: undefined,\n      data_selection_enabled: false,\n      data_selection_grouped: false,\n      data_selection_isselectable: function data_selection_isselectable() {\n        return true;\n      },\n      data_selection_multiple: true,\n      data_selection_draggable: false,\n      data_onclick: function data_onclick() {},\n      data_onmouseover: function data_onmouseover() {},\n      data_onmouseout: function data_onmouseout() {},\n      data_onselected: function data_onselected() {},\n      data_onunselected: function data_onunselected() {},\n      data_url: undefined,\n      data_headers: undefined,\n      data_json: undefined,\n      data_rows: undefined,\n      data_columns: undefined,\n      data_mimeType: undefined,\n      data_keys: undefined,\n      // configuration for no plot-able data supplied.\n      data_empty_label_text: \"\",\n      // subchart\n      subchart_show: false,\n      subchart_size_height: 60,\n      subchart_axis_x_show: true,\n      subchart_onbrush: function subchart_onbrush() {},\n      // color\n      color_pattern: [],\n      color_threshold: {},\n      // legend\n      legend_show: true,\n      legend_hide: false,\n      legend_position: 'bottom',\n      legend_inset_anchor: 'top-left',\n      legend_inset_x: 10,\n      legend_inset_y: 0,\n      legend_inset_step: undefined,\n      legend_item_onclick: undefined,\n      legend_item_onmouseover: undefined,\n      legend_item_onmouseout: undefined,\n      legend_equally: false,\n      legend_padding: 0,\n      legend_item_tile_width: 10,\n      legend_item_tile_height: 10,\n      // axis\n      axis_rotated: false,\n      axis_x_show: true,\n      axis_x_type: 'indexed',\n      axis_x_localtime: true,\n      axis_x_categories: [],\n      axis_x_tick_centered: false,\n      axis_x_tick_format: undefined,\n      axis_x_tick_culling: {},\n      axis_x_tick_culling_max: 10,\n      axis_x_tick_count: undefined,\n      axis_x_tick_fit: true,\n      axis_x_tick_values: null,\n      axis_x_tick_rotate: 0,\n      axis_x_tick_outer: true,\n      axis_x_tick_multiline: true,\n      axis_x_tick_multilineMax: 0,\n      axis_x_tick_width: null,\n      axis_x_max: undefined,\n      axis_x_min: undefined,\n      axis_x_padding: {},\n      axis_x_height: undefined,\n      axis_x_selection: undefined,\n      axis_x_label: {},\n      axis_x_inner: undefined,\n      axis_y_show: true,\n      axis_y_type: undefined,\n      axis_y_max: undefined,\n      axis_y_min: undefined,\n      axis_y_inverted: false,\n      axis_y_center: undefined,\n      axis_y_inner: undefined,\n      axis_y_label: {},\n      axis_y_tick_format: undefined,\n      axis_y_tick_outer: true,\n      axis_y_tick_values: null,\n      axis_y_tick_rotate: 0,\n      axis_y_tick_count: undefined,\n      axis_y_tick_time_type: undefined,\n      axis_y_tick_time_interval: undefined,\n      axis_y_padding: {},\n      axis_y_default: undefined,\n      axis_y2_show: false,\n      axis_y2_max: undefined,\n      axis_y2_min: undefined,\n      axis_y2_inverted: false,\n      axis_y2_center: undefined,\n      axis_y2_inner: undefined,\n      axis_y2_label: {},\n      axis_y2_tick_format: undefined,\n      axis_y2_tick_outer: true,\n      axis_y2_tick_values: null,\n      axis_y2_tick_count: undefined,\n      axis_y2_padding: {},\n      axis_y2_default: undefined,\n      // grid\n      grid_x_show: false,\n      grid_x_type: 'tick',\n      grid_x_lines: [],\n      grid_y_show: false,\n      // not used\n      // grid_y_type: 'tick',\n      grid_y_lines: [],\n      grid_y_ticks: 10,\n      grid_focus_show: true,\n      grid_lines_front: true,\n      // point - point of each data\n      point_show: true,\n      point_r: 2.5,\n      point_sensitivity: 10,\n      point_focus_expand_enabled: true,\n      point_focus_expand_r: undefined,\n      point_select_r: undefined,\n      // line\n      line_connectNull: false,\n      line_step_type: 'step',\n      // bar\n      bar_width: undefined,\n      bar_width_ratio: 0.6,\n      bar_width_max: undefined,\n      bar_zerobased: true,\n      bar_space: 0,\n      // area\n      area_zerobased: true,\n      area_above: false,\n      // pie\n      pie_label_show: true,\n      pie_label_format: undefined,\n      pie_label_threshold: 0.05,\n      pie_label_ratio: undefined,\n      pie_expand: {},\n      pie_expand_duration: 50,\n      // gauge\n      gauge_fullCircle: false,\n      gauge_label_show: true,\n      gauge_labelLine_show: true,\n      gauge_label_format: undefined,\n      gauge_min: 0,\n      gauge_max: 100,\n      gauge_startingAngle: -1 * Math.PI / 2,\n      gauge_label_extents: undefined,\n      gauge_units: undefined,\n      gauge_width: undefined,\n      gauge_arcs_minWidth: 5,\n      gauge_expand: {},\n      gauge_expand_duration: 50,\n      // donut\n      donut_label_show: true,\n      donut_label_format: undefined,\n      donut_label_threshold: 0.05,\n      donut_label_ratio: undefined,\n      donut_width: undefined,\n      donut_title: \"\",\n      donut_expand: {},\n      donut_expand_duration: 50,\n      // spline\n      spline_interpolation_type: 'cardinal',\n      // region - region to change style\n      regions: [],\n      // tooltip - show when mouseover on each data\n      tooltip_show: true,\n      tooltip_grouped: true,\n      tooltip_order: undefined,\n      tooltip_format_title: undefined,\n      tooltip_format_name: undefined,\n      tooltip_format_value: undefined,\n      tooltip_position: undefined,\n      tooltip_contents: function tooltip_contents(d, defaultTitleFormat, defaultValueFormat, color) {\n        return this.getTooltipContent ? this.getTooltipContent(d, defaultTitleFormat, defaultValueFormat, color) : '';\n      },\n      tooltip_init_show: false,\n      tooltip_init_x: 0,\n      tooltip_init_position: {\n        top: '0px',\n        left: '50px'\n      },\n      tooltip_onshow: function tooltip_onshow() {},\n      tooltip_onhide: function tooltip_onhide() {},\n      // title\n      title_text: undefined,\n      title_padding: {\n        top: 0,\n        right: 0,\n        bottom: 0,\n        left: 0\n      },\n      title_position: 'top-center'\n    };\n    Object.keys(this.additionalConfig).forEach(function (key) {\n      config[key] = this.additionalConfig[key];\n    }, this);\n    return config;\n  };\n\n  ChartInternal.prototype.additionalConfig = {};\n\n  ChartInternal.prototype.loadConfig = function (config) {\n    var this_config = this.config,\n        target,\n        keys,\n        read;\n\n    function find() {\n      var key = keys.shift(); //        console.log(\"key =>\", key, \", target =>\", target);\n\n      if (key && target && _typeof(target) === 'object' && key in target) {\n        target = target[key];\n        return find();\n      } else if (!key) {\n        return target;\n      } else {\n        return undefined;\n      }\n    }\n\n    Object.keys(this_config).forEach(function (key) {\n      target = config;\n      keys = key.split('_');\n      read = find(); //        console.log(\"CONFIG : \", key, read);\n\n      if (isDefined(read)) {\n        this_config[key] = read;\n      }\n    });\n  };\n\n  ChartInternal.prototype.convertUrlToData = function (url, mimeType, headers, keys, done) {\n    var $$ = this,\n        type = mimeType ? mimeType : 'csv',\n        f,\n        converter;\n\n    if (type === 'json') {\n      f = $$.d3.json;\n      converter = $$.convertJsonToData;\n    } else if (type === 'tsv') {\n      f = $$.d3.tsv;\n      converter = $$.convertXsvToData;\n    } else {\n      f = $$.d3.csv;\n      converter = $$.convertXsvToData;\n    }\n\n    f(url, headers).then(function (data) {\n      done.call($$, converter.call($$, data, keys));\n    }).catch(function (error) {\n      throw error;\n    });\n  };\n\n  ChartInternal.prototype.convertXsvToData = function (xsv) {\n    var keys = xsv.columns,\n        rows = xsv;\n\n    if (rows.length === 0) {\n      return {\n        keys: keys,\n        rows: [keys.reduce(function (row, key) {\n          return Object.assign(row, _defineProperty({}, key, null));\n        }, {})]\n      };\n    } else {\n      // [].concat() is to convert result into a plain array otherwise\n      // test is not happy because rows have properties.\n      return {\n        keys: keys,\n        rows: [].concat(xsv)\n      };\n    }\n  };\n\n  ChartInternal.prototype.convertJsonToData = function (json, keys) {\n    var $$ = this,\n        new_rows = [],\n        targetKeys,\n        data;\n\n    if (keys) {\n      // when keys specified, json would be an array that includes objects\n      if (keys.x) {\n        targetKeys = keys.value.concat(keys.x);\n        $$.config.data_x = keys.x;\n      } else {\n        targetKeys = keys.value;\n      }\n\n      new_rows.push(targetKeys);\n      json.forEach(function (o) {\n        var new_row = [];\n        targetKeys.forEach(function (key) {\n          // convert undefined to null because undefined data will be removed in convertDataToTargets()\n          var v = $$.findValueInJson(o, key);\n\n          if (isUndefined(v)) {\n            v = null;\n          }\n\n          new_row.push(v);\n        });\n        new_rows.push(new_row);\n      });\n      data = $$.convertRowsToData(new_rows);\n    } else {\n      Object.keys(json).forEach(function (key) {\n        new_rows.push([key].concat(json[key]));\n      });\n      data = $$.convertColumnsToData(new_rows);\n    }\n\n    return data;\n  };\n\n  ChartInternal.prototype.findValueInJson = function (object, path) {\n    path = path.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties (replace [] with .)\n\n    path = path.replace(/^\\./, ''); // strip a leading dot\n\n    var pathArray = path.split('.');\n\n    for (var i = 0; i < pathArray.length; ++i) {\n      var k = pathArray[i];\n\n      if (k in object) {\n        object = object[k];\n      } else {\n        return;\n      }\n    }\n\n    return object;\n  };\n  /**\n   * Converts the rows to normalized data.\n   * @param {any[][]} rows The row data\n   * @return {Object}\n   */\n\n\n  ChartInternal.prototype.convertRowsToData = function (rows) {\n    var newRows = [];\n    var keys = rows[0];\n\n    for (var i = 1; i < rows.length; i++) {\n      var newRow = {};\n\n      for (var j = 0; j < rows[i].length; j++) {\n        if (isUndefined(rows[i][j])) {\n          throw new Error(\"Source data is missing a component at (\" + i + \",\" + j + \")!\");\n        }\n\n        newRow[keys[j]] = rows[i][j];\n      }\n\n      newRows.push(newRow);\n    }\n\n    return {\n      keys: keys,\n      rows: newRows\n    };\n  };\n  /**\n   * Converts the columns to normalized data.\n   * @param {any[][]} columns The column data\n   * @return {Object}\n   */\n\n\n  ChartInternal.prototype.convertColumnsToData = function (columns) {\n    var newRows = [];\n    var keys = [];\n\n    for (var i = 0; i < columns.length; i++) {\n      var key = columns[i][0];\n\n      for (var j = 1; j < columns[i].length; j++) {\n        if (isUndefined(newRows[j - 1])) {\n          newRows[j - 1] = {};\n        }\n\n        if (isUndefined(columns[i][j])) {\n          throw new Error(\"Source data is missing a component at (\" + i + \",\" + j + \")!\");\n        }\n\n        newRows[j - 1][key] = columns[i][j];\n      }\n\n      keys.push(key);\n    }\n\n    return {\n      keys: keys,\n      rows: newRows\n    };\n  };\n  /**\n   * Converts the data format into the target format.\n   * @param {!Object} data\n   * @param {!Array} data.keys Ordered list of target IDs.\n   * @param {!Array} data.rows Rows of data to convert.\n   * @param {boolean} appendXs True to append to $$.data.xs, False to replace.\n   * @return {!Array}\n   */\n\n\n  ChartInternal.prototype.convertDataToTargets = function (data, appendXs) {\n    var $$ = this,\n        config = $$.config,\n        targets,\n        ids,\n        xs,\n        keys; // handles format where keys are not orderly provided\n\n    if (isArray(data)) {\n      keys = Object.keys(data[0]);\n    } else {\n      keys = data.keys;\n      data = data.rows;\n    }\n\n    ids = keys.filter($$.isNotX, $$);\n    xs = keys.filter($$.isX, $$); // save x for update data by load when custom x and c3.x API\n\n    ids.forEach(function (id) {\n      var xKey = $$.getXKey(id);\n\n      if ($$.isCustomX() || $$.isTimeSeries()) {\n        // if included in input data\n        if (xs.indexOf(xKey) >= 0) {\n          $$.data.xs[id] = (appendXs && $$.data.xs[id] ? $$.data.xs[id] : []).concat(data.map(function (d) {\n            return d[xKey];\n          }).filter(isValue).map(function (rawX, i) {\n            return $$.generateTargetX(rawX, id, i);\n          }));\n        } // if not included in input data, find from preloaded data of other id's x\n        else if (config.data_x) {\n            $$.data.xs[id] = $$.getOtherTargetXs();\n          } // if not included in input data, find from preloaded data\n          else if (notEmpty(config.data_xs)) {\n              $$.data.xs[id] = $$.getXValuesOfXKey(xKey, $$.data.targets);\n            } // MEMO: if no x included, use same x of current will be used\n\n      } else {\n        $$.data.xs[id] = data.map(function (d, i) {\n          return i;\n        });\n      }\n    }); // check x is defined\n\n    ids.forEach(function (id) {\n      if (!$$.data.xs[id]) {\n        throw new Error('x is not defined for id = \"' + id + '\".');\n      }\n    }); // convert to target\n\n    targets = ids.map(function (id, index) {\n      var convertedId = config.data_idConverter(id);\n      return {\n        id: convertedId,\n        id_org: id,\n        values: data.map(function (d, i) {\n          var xKey = $$.getXKey(id),\n              rawX = d[xKey],\n              value = d[id] !== null && !isNaN(d[id]) ? +d[id] : null,\n              x; // use x as categories if custom x and categorized\n\n          if ($$.isCustomX() && $$.isCategorized() && !isUndefined(rawX)) {\n            if (index === 0 && i === 0) {\n              config.axis_x_categories = [];\n            }\n\n            x = config.axis_x_categories.indexOf(rawX);\n\n            if (x === -1) {\n              x = config.axis_x_categories.length;\n              config.axis_x_categories.push(rawX);\n            }\n          } else {\n            x = $$.generateTargetX(rawX, id, i);\n          } // mark as x = undefined if value is undefined and filter to remove after mapped\n\n\n          if (isUndefined(d[id]) || $$.data.xs[id].length <= i) {\n            x = undefined;\n          }\n\n          return {\n            x: x,\n            value: value,\n            id: convertedId\n          };\n        }).filter(function (v) {\n          return isDefined(v.x);\n        })\n      };\n    }); // finish targets\n\n    targets.forEach(function (t) {\n      var i; // sort values by its x\n\n      if (config.data_xSort) {\n        t.values = t.values.sort(function (v1, v2) {\n          var x1 = v1.x || v1.x === 0 ? v1.x : Infinity,\n              x2 = v2.x || v2.x === 0 ? v2.x : Infinity;\n          return x1 - x2;\n        });\n      } // indexing each value\n\n\n      i = 0;\n      t.values.forEach(function (v) {\n        v.index = i++;\n      }); // this needs to be sorted because its index and value.index is identical\n\n      $$.data.xs[t.id].sort(function (v1, v2) {\n        return v1 - v2;\n      });\n    }); // cache information about values\n\n    $$.hasNegativeValue = $$.hasNegativeValueInTargets(targets);\n    $$.hasPositiveValue = $$.hasPositiveValueInTargets(targets); // set target types\n\n    if (config.data_type) {\n      $$.setTargetType($$.mapToIds(targets).filter(function (id) {\n        return !(id in config.data_types);\n      }), config.data_type);\n    } // cache as original id keyed\n\n\n    targets.forEach(function (d) {\n      $$.addCache(d.id_org, d);\n    });\n    return targets;\n  };\n\n  ChartInternal.prototype.isX = function (key) {\n    var $$ = this,\n        config = $$.config;\n    return config.data_x && key === config.data_x || notEmpty(config.data_xs) && hasValue(config.data_xs, key);\n  };\n\n  ChartInternal.prototype.isNotX = function (key) {\n    return !this.isX(key);\n  };\n\n  ChartInternal.prototype.getXKey = function (id) {\n    var $$ = this,\n        config = $$.config;\n    return config.data_x ? config.data_x : notEmpty(config.data_xs) ? config.data_xs[id] : null;\n  };\n\n  ChartInternal.prototype.getXValuesOfXKey = function (key, targets) {\n    var $$ = this,\n        xValues,\n        ids = targets && notEmpty(targets) ? $$.mapToIds(targets) : [];\n    ids.forEach(function (id) {\n      if ($$.getXKey(id) === key) {\n        xValues = $$.data.xs[id];\n      }\n    });\n    return xValues;\n  };\n\n  ChartInternal.prototype.getXValue = function (id, i) {\n    var $$ = this;\n    return id in $$.data.xs && $$.data.xs[id] && isValue($$.data.xs[id][i]) ? $$.data.xs[id][i] : i;\n  };\n\n  ChartInternal.prototype.getOtherTargetXs = function () {\n    var $$ = this,\n        idsForX = Object.keys($$.data.xs);\n    return idsForX.length ? $$.data.xs[idsForX[0]] : null;\n  };\n\n  ChartInternal.prototype.getOtherTargetX = function (index) {\n    var xs = this.getOtherTargetXs();\n    return xs && index < xs.length ? xs[index] : null;\n  };\n\n  ChartInternal.prototype.addXs = function (xs) {\n    var $$ = this;\n    Object.keys(xs).forEach(function (id) {\n      $$.config.data_xs[id] = xs[id];\n    });\n  };\n\n  ChartInternal.prototype.addName = function (data) {\n    var $$ = this,\n        name;\n\n    if (data) {\n      name = $$.config.data_names[data.id];\n      data.name = name !== undefined ? name : data.id;\n    }\n\n    return data;\n  };\n\n  ChartInternal.prototype.getValueOnIndex = function (values, index) {\n    var valueOnIndex = values.filter(function (v) {\n      return v.index === index;\n    });\n    return valueOnIndex.length ? valueOnIndex[0] : null;\n  };\n\n  ChartInternal.prototype.updateTargetX = function (targets, x) {\n    var $$ = this;\n    targets.forEach(function (t) {\n      t.values.forEach(function (v, i) {\n        v.x = $$.generateTargetX(x[i], t.id, i);\n      });\n      $$.data.xs[t.id] = x;\n    });\n  };\n\n  ChartInternal.prototype.updateTargetXs = function (targets, xs) {\n    var $$ = this;\n    targets.forEach(function (t) {\n      if (xs[t.id]) {\n        $$.updateTargetX([t], xs[t.id]);\n      }\n    });\n  };\n\n  ChartInternal.prototype.generateTargetX = function (rawX, id, index) {\n    var $$ = this,\n        x;\n\n    if ($$.isTimeSeries()) {\n      x = rawX ? $$.parseDate(rawX) : $$.parseDate($$.getXValue(id, index));\n    } else if ($$.isCustomX() && !$$.isCategorized()) {\n      x = isValue(rawX) ? +rawX : $$.getXValue(id, index);\n    } else {\n      x = index;\n    }\n\n    return x;\n  };\n\n  ChartInternal.prototype.cloneTarget = function (target) {\n    return {\n      id: target.id,\n      id_org: target.id_org,\n      values: target.values.map(function (d) {\n        return {\n          x: d.x,\n          value: d.value,\n          id: d.id\n        };\n      })\n    };\n  };\n\n  ChartInternal.prototype.getMaxDataCount = function () {\n    var $$ = this;\n    return $$.d3.max($$.data.targets, function (t) {\n      return t.values.length;\n    });\n  };\n\n  ChartInternal.prototype.mapToIds = function (targets) {\n    return targets.map(function (d) {\n      return d.id;\n    });\n  };\n\n  ChartInternal.prototype.mapToTargetIds = function (ids) {\n    var $$ = this;\n    return ids ? [].concat(ids) : $$.mapToIds($$.data.targets);\n  };\n\n  ChartInternal.prototype.hasTarget = function (targets, id) {\n    var ids = this.mapToIds(targets),\n        i;\n\n    for (i = 0; i < ids.length; i++) {\n      if (ids[i] === id) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  ChartInternal.prototype.isTargetToShow = function (targetId) {\n    return this.hiddenTargetIds.indexOf(targetId) < 0;\n  };\n\n  ChartInternal.prototype.isLegendToShow = function (targetId) {\n    return this.hiddenLegendIds.indexOf(targetId) < 0;\n  };\n\n  ChartInternal.prototype.filterTargetsToShow = function (targets) {\n    var $$ = this;\n    return targets.filter(function (t) {\n      return $$.isTargetToShow(t.id);\n    });\n  };\n\n  ChartInternal.prototype.mapTargetsToUniqueXs = function (targets) {\n    var $$ = this;\n    var xs = $$.d3.set($$.d3.merge(targets.map(function (t) {\n      return t.values.map(function (v) {\n        return +v.x;\n      });\n    }))).values();\n    xs = $$.isTimeSeries() ? xs.map(function (x) {\n      return new Date(+x);\n    }) : xs.map(function (x) {\n      return +x;\n    });\n    return xs.sort(function (a, b) {\n      return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n    });\n  };\n\n  ChartInternal.prototype.addHiddenTargetIds = function (targetIds) {\n    targetIds = targetIds instanceof Array ? targetIds : new Array(targetIds);\n\n    for (var i = 0; i < targetIds.length; i++) {\n      if (this.hiddenTargetIds.indexOf(targetIds[i]) < 0) {\n        this.hiddenTargetIds = this.hiddenTargetIds.concat(targetIds[i]);\n      }\n    }\n  };\n\n  ChartInternal.prototype.removeHiddenTargetIds = function (targetIds) {\n    this.hiddenTargetIds = this.hiddenTargetIds.filter(function (id) {\n      return targetIds.indexOf(id) < 0;\n    });\n  };\n\n  ChartInternal.prototype.addHiddenLegendIds = function (targetIds) {\n    targetIds = targetIds instanceof Array ? targetIds : new Array(targetIds);\n\n    for (var i = 0; i < targetIds.length; i++) {\n      if (this.hiddenLegendIds.indexOf(targetIds[i]) < 0) {\n        this.hiddenLegendIds = this.hiddenLegendIds.concat(targetIds[i]);\n      }\n    }\n  };\n\n  ChartInternal.prototype.removeHiddenLegendIds = function (targetIds) {\n    this.hiddenLegendIds = this.hiddenLegendIds.filter(function (id) {\n      return targetIds.indexOf(id) < 0;\n    });\n  };\n\n  ChartInternal.prototype.getValuesAsIdKeyed = function (targets) {\n    var ys = {};\n    targets.forEach(function (t) {\n      ys[t.id] = [];\n      t.values.forEach(function (v) {\n        ys[t.id].push(v.value);\n      });\n    });\n    return ys;\n  };\n\n  ChartInternal.prototype.checkValueInTargets = function (targets, checker) {\n    var ids = Object.keys(targets),\n        i,\n        j,\n        values;\n\n    for (i = 0; i < ids.length; i++) {\n      values = targets[ids[i]].values;\n\n      for (j = 0; j < values.length; j++) {\n        if (checker(values[j].value)) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  };\n\n  ChartInternal.prototype.hasNegativeValueInTargets = function (targets) {\n    return this.checkValueInTargets(targets, function (v) {\n      return v < 0;\n    });\n  };\n\n  ChartInternal.prototype.hasPositiveValueInTargets = function (targets) {\n    return this.checkValueInTargets(targets, function (v) {\n      return v > 0;\n    });\n  };\n\n  ChartInternal.prototype.isOrderDesc = function () {\n    var config = this.config;\n    return typeof config.data_order === 'string' && config.data_order.toLowerCase() === 'desc';\n  };\n\n  ChartInternal.prototype.isOrderAsc = function () {\n    var config = this.config;\n    return typeof config.data_order === 'string' && config.data_order.toLowerCase() === 'asc';\n  };\n\n  ChartInternal.prototype.getOrderFunction = function () {\n    var $$ = this,\n        config = $$.config,\n        orderAsc = $$.isOrderAsc(),\n        orderDesc = $$.isOrderDesc();\n\n    if (orderAsc || orderDesc) {\n      var reducer = function reducer(p, c) {\n        return p + Math.abs(c.value);\n      };\n\n      return function (t1, t2) {\n        var t1Sum = t1.values.reduce(reducer, 0),\n            t2Sum = t2.values.reduce(reducer, 0);\n        return orderAsc ? t2Sum - t1Sum : t1Sum - t2Sum;\n      };\n    } else if (isFunction(config.data_order)) {\n      return config.data_order;\n    } else if (isArray(config.data_order)) {\n      var order = config.data_order;\n      return function (t1, t2) {\n        return order.indexOf(t1.id) - order.indexOf(t2.id);\n      };\n    }\n  };\n\n  ChartInternal.prototype.orderTargets = function (targets) {\n    var fct = this.getOrderFunction();\n\n    if (fct) {\n      targets.sort(fct);\n    }\n\n    return targets;\n  };\n\n  ChartInternal.prototype.filterByX = function (targets, x) {\n    return this.d3.merge(targets.map(function (t) {\n      return t.values;\n    })).filter(function (v) {\n      return v.x - x === 0;\n    });\n  };\n\n  ChartInternal.prototype.filterRemoveNull = function (data) {\n    return data.filter(function (d) {\n      return isValue(d.value);\n    });\n  };\n\n  ChartInternal.prototype.filterByXDomain = function (targets, xDomain) {\n    return targets.map(function (t) {\n      return {\n        id: t.id,\n        id_org: t.id_org,\n        values: t.values.filter(function (v) {\n          return xDomain[0] <= v.x && v.x <= xDomain[1];\n        })\n      };\n    });\n  };\n\n  ChartInternal.prototype.hasDataLabel = function () {\n    var config = this.config;\n\n    if (typeof config.data_labels === 'boolean' && config.data_labels) {\n      return true;\n    } else if (_typeof(config.data_labels) === 'object' && notEmpty(config.data_labels)) {\n      return true;\n    }\n\n    return false;\n  };\n\n  ChartInternal.prototype.getDataLabelLength = function (min, max, key) {\n    var $$ = this,\n        lengths = [0, 0],\n        paddingCoef = 1.3;\n    $$.selectChart.select('svg').selectAll('.dummy').data([min, max]).enter().append('text').text(function (d) {\n      return $$.dataLabelFormat(d.id)(d);\n    }).each(function (d, i) {\n      lengths[i] = this.getBoundingClientRect()[key] * paddingCoef;\n    }).remove();\n    return lengths;\n  };\n  /**\n   * Returns true if the given data point is not arc type, otherwise false.\n   * @param {Object} d The data point\n   * @return {boolean}\n   */\n\n\n  ChartInternal.prototype.isNoneArc = function (d) {\n    return this.hasTarget(this.data.targets, d.id);\n  };\n  /**\n   * Returns true if the given data point is arc type, otherwise false.\n   * @param {Object} d The data point\n   * @return {boolean}\n   */\n\n\n  ChartInternal.prototype.isArc = function (d) {\n    return 'data' in d && this.hasTarget(this.data.targets, d.data.id);\n  };\n\n  ChartInternal.prototype.findClosestFromTargets = function (targets, pos) {\n    var $$ = this,\n        candidates; // map to array of closest points of each target\n\n    candidates = targets.map(function (target) {\n      return $$.findClosest(target.values, pos);\n    }); // decide closest point and return\n\n    return $$.findClosest(candidates, pos);\n  };\n\n  ChartInternal.prototype.findClosest = function (values, pos) {\n    var $$ = this,\n        minDist = $$.config.point_sensitivity,\n        closest; // find mouseovering bar\n\n    values.filter(function (v) {\n      return v && $$.isBarType(v.id);\n    }).forEach(function (v) {\n      var shape = $$.main.select('.' + CLASS.bars + $$.getTargetSelectorSuffix(v.id) + ' .' + CLASS.bar + '-' + v.index).node();\n\n      if (!closest && $$.isWithinBar($$.d3.mouse(shape), shape)) {\n        closest = v;\n      }\n    }); // find closest point from non-bar\n\n    values.filter(function (v) {\n      return v && !$$.isBarType(v.id);\n    }).forEach(function (v) {\n      var d = $$.dist(v, pos);\n\n      if (d < minDist) {\n        minDist = d;\n        closest = v;\n      }\n    });\n    return closest;\n  };\n\n  ChartInternal.prototype.dist = function (data, pos) {\n    var $$ = this,\n        config = $$.config,\n        xIndex = config.axis_rotated ? 1 : 0,\n        yIndex = config.axis_rotated ? 0 : 1,\n        y = $$.circleY(data, data.index),\n        x = $$.x(data.x);\n    return Math.sqrt(Math.pow(x - pos[xIndex], 2) + Math.pow(y - pos[yIndex], 2));\n  };\n\n  ChartInternal.prototype.convertValuesToStep = function (values) {\n    var converted = [].concat(values),\n        i;\n\n    if (!this.isCategorized()) {\n      return values;\n    }\n\n    for (i = values.length + 1; 0 < i; i--) {\n      converted[i] = converted[i - 1];\n    }\n\n    converted[0] = {\n      x: converted[0].x - 1,\n      value: converted[0].value,\n      id: converted[0].id\n    };\n    converted[values.length + 1] = {\n      x: converted[values.length].x + 1,\n      value: converted[values.length].value,\n      id: converted[values.length].id\n    };\n    return converted;\n  };\n\n  ChartInternal.prototype.updateDataAttributes = function (name, attrs) {\n    var $$ = this,\n        config = $$.config,\n        current = config['data_' + name];\n\n    if (typeof attrs === 'undefined') {\n      return current;\n    }\n\n    Object.keys(attrs).forEach(function (id) {\n      current[id] = attrs[id];\n    });\n    $$.redraw({\n      withLegend: true\n    });\n    return current;\n  };\n\n  ChartInternal.prototype.load = function (targets, args) {\n    var $$ = this;\n\n    if (targets) {\n      // filter loading targets if needed\n      if (args.filter) {\n        targets = targets.filter(args.filter);\n      } // set type if args.types || args.type specified\n\n\n      if (args.type || args.types) {\n        targets.forEach(function (t) {\n          var type = args.types && args.types[t.id] ? args.types[t.id] : args.type;\n          $$.setTargetType(t.id, type);\n        });\n      } // Update/Add data\n\n\n      $$.data.targets.forEach(function (d) {\n        for (var i = 0; i < targets.length; i++) {\n          if (d.id === targets[i].id) {\n            d.values = targets[i].values;\n            targets.splice(i, 1);\n            break;\n          }\n        }\n      });\n      $$.data.targets = $$.data.targets.concat(targets); // add remained\n    } // Set targets\n\n\n    $$.updateTargets($$.data.targets); // Redraw with new targets\n\n    $$.redraw({\n      withUpdateOrgXDomain: true,\n      withUpdateXDomain: true,\n      withLegend: true\n    });\n\n    if (args.done) {\n      args.done();\n    }\n  };\n\n  ChartInternal.prototype.loadFromArgs = function (args) {\n    var $$ = this;\n\n    if (args.data) {\n      $$.load($$.convertDataToTargets(args.data), args);\n    } else if (args.url) {\n      $$.convertUrlToData(args.url, args.mimeType, args.headers, args.keys, function (data) {\n        $$.load($$.convertDataToTargets(data), args);\n      });\n    } else if (args.json) {\n      $$.load($$.convertDataToTargets($$.convertJsonToData(args.json, args.keys)), args);\n    } else if (args.rows) {\n      $$.load($$.convertDataToTargets($$.convertRowsToData(args.rows)), args);\n    } else if (args.columns) {\n      $$.load($$.convertDataToTargets($$.convertColumnsToData(args.columns)), args);\n    } else {\n      $$.load(null, args);\n    }\n  };\n\n  ChartInternal.prototype.unload = function (targetIds, done) {\n    var $$ = this;\n\n    if (!done) {\n      done = function done() {};\n    } // filter existing target\n\n\n    targetIds = targetIds.filter(function (id) {\n      return $$.hasTarget($$.data.targets, id);\n    }); // If no target, call done and return\n\n    if (!targetIds || targetIds.length === 0) {\n      done();\n      return;\n    }\n\n    $$.svg.selectAll(targetIds.map(function (id) {\n      return $$.selectorTarget(id);\n    })).transition().style('opacity', 0).remove().call($$.endall, done);\n    targetIds.forEach(function (id) {\n      // Reset fadein for future load\n      $$.withoutFadeIn[id] = false; // Remove target's elements\n\n      if ($$.legend) {\n        $$.legend.selectAll('.' + CLASS.legendItem + $$.getTargetSelectorSuffix(id)).remove();\n      } // Remove target\n\n\n      $$.data.targets = $$.data.targets.filter(function (t) {\n        return t.id !== id;\n      });\n    });\n  };\n\n  ChartInternal.prototype.getYDomainMin = function (targets) {\n    var $$ = this,\n        config = $$.config,\n        ids = $$.mapToIds(targets),\n        ys = $$.getValuesAsIdKeyed(targets),\n        j,\n        k,\n        baseId,\n        idsInGroup,\n        id,\n        hasNegativeValue;\n\n    if (config.data_groups.length > 0) {\n      hasNegativeValue = $$.hasNegativeValueInTargets(targets);\n\n      for (j = 0; j < config.data_groups.length; j++) {\n        // Determine baseId\n        idsInGroup = config.data_groups[j].filter(function (id) {\n          return ids.indexOf(id) >= 0;\n        });\n\n        if (idsInGroup.length === 0) {\n          continue;\n        }\n\n        baseId = idsInGroup[0]; // Consider negative values\n\n        if (hasNegativeValue && ys[baseId]) {\n          ys[baseId].forEach(function (v, i) {\n            ys[baseId][i] = v < 0 ? v : 0;\n          });\n        } // Compute min\n\n\n        for (k = 1; k < idsInGroup.length; k++) {\n          id = idsInGroup[k];\n\n          if (!ys[id]) {\n            continue;\n          }\n\n          ys[id].forEach(function (v, i) {\n            if ($$.axis.getId(id) === $$.axis.getId(baseId) && ys[baseId] && !(hasNegativeValue && +v > 0)) {\n              ys[baseId][i] += +v;\n            }\n          });\n        }\n      }\n    }\n\n    return $$.d3.min(Object.keys(ys).map(function (key) {\n      return $$.d3.min(ys[key]);\n    }));\n  };\n\n  ChartInternal.prototype.getYDomainMax = function (targets) {\n    var $$ = this,\n        config = $$.config,\n        ids = $$.mapToIds(targets),\n        ys = $$.getValuesAsIdKeyed(targets),\n        j,\n        k,\n        baseId,\n        idsInGroup,\n        id,\n        hasPositiveValue;\n\n    if (config.data_groups.length > 0) {\n      hasPositiveValue = $$.hasPositiveValueInTargets(targets);\n\n      for (j = 0; j < config.data_groups.length; j++) {\n        // Determine baseId\n        idsInGroup = config.data_groups[j].filter(function (id) {\n          return ids.indexOf(id) >= 0;\n        });\n\n        if (idsInGroup.length === 0) {\n          continue;\n        }\n\n        baseId = idsInGroup[0]; // Consider positive values\n\n        if (hasPositiveValue && ys[baseId]) {\n          ys[baseId].forEach(function (v, i) {\n            ys[baseId][i] = v > 0 ? v : 0;\n          });\n        } // Compute max\n\n\n        for (k = 1; k < idsInGroup.length; k++) {\n          id = idsInGroup[k];\n\n          if (!ys[id]) {\n            continue;\n          }\n\n          ys[id].forEach(function (v, i) {\n            if ($$.axis.getId(id) === $$.axis.getId(baseId) && ys[baseId] && !(hasPositiveValue && +v < 0)) {\n              ys[baseId][i] += +v;\n            }\n          });\n        }\n      }\n    }\n\n    return $$.d3.max(Object.keys(ys).map(function (key) {\n      return $$.d3.max(ys[key]);\n    }));\n  };\n\n  ChartInternal.prototype.getYDomain = function (targets, axisId, xDomain) {\n    var $$ = this,\n        config = $$.config,\n        targetsByAxisId = targets.filter(function (t) {\n      return $$.axis.getId(t.id) === axisId;\n    }),\n        yTargets = xDomain ? $$.filterByXDomain(targetsByAxisId, xDomain) : targetsByAxisId,\n        yMin = axisId === 'y2' ? config.axis_y2_min : config.axis_y_min,\n        yMax = axisId === 'y2' ? config.axis_y2_max : config.axis_y_max,\n        yDomainMin = $$.getYDomainMin(yTargets),\n        yDomainMax = $$.getYDomainMax(yTargets),\n        domain,\n        domainLength,\n        padding,\n        padding_top,\n        padding_bottom,\n        center = axisId === 'y2' ? config.axis_y2_center : config.axis_y_center,\n        yDomainAbs,\n        lengths,\n        diff,\n        ratio,\n        isAllPositive,\n        isAllNegative,\n        isZeroBased = $$.hasType('bar', yTargets) && config.bar_zerobased || $$.hasType('area', yTargets) && config.area_zerobased,\n        isInverted = axisId === 'y2' ? config.axis_y2_inverted : config.axis_y_inverted,\n        showHorizontalDataLabel = $$.hasDataLabel() && config.axis_rotated,\n        showVerticalDataLabel = $$.hasDataLabel() && !config.axis_rotated; // MEMO: avoid inverting domain unexpectedly\n\n    yDomainMin = isValue(yMin) ? yMin : isValue(yMax) ? yDomainMin < yMax ? yDomainMin : yMax - 10 : yDomainMin;\n    yDomainMax = isValue(yMax) ? yMax : isValue(yMin) ? yMin < yDomainMax ? yDomainMax : yMin + 10 : yDomainMax;\n\n    if (yTargets.length === 0) {\n      // use current domain if target of axisId is none\n      return axisId === 'y2' ? $$.y2.domain() : $$.y.domain();\n    }\n\n    if (isNaN(yDomainMin)) {\n      // set minimum to zero when not number\n      yDomainMin = 0;\n    }\n\n    if (isNaN(yDomainMax)) {\n      // set maximum to have same value as yDomainMin\n      yDomainMax = yDomainMin;\n    }\n\n    if (yDomainMin === yDomainMax) {\n      yDomainMin < 0 ? yDomainMax = 0 : yDomainMin = 0;\n    }\n\n    isAllPositive = yDomainMin >= 0 && yDomainMax >= 0;\n    isAllNegative = yDomainMin <= 0 && yDomainMax <= 0; // Cancel zerobased if axis_*_min / axis_*_max specified\n\n    if (isValue(yMin) && isAllPositive || isValue(yMax) && isAllNegative) {\n      isZeroBased = false;\n    } // Bar/Area chart should be 0-based if all positive|negative\n\n\n    if (isZeroBased) {\n      if (isAllPositive) {\n        yDomainMin = 0;\n      }\n\n      if (isAllNegative) {\n        yDomainMax = 0;\n      }\n    }\n\n    domainLength = Math.abs(yDomainMax - yDomainMin);\n    padding = padding_top = padding_bottom = domainLength * 0.1;\n\n    if (typeof center !== 'undefined') {\n      yDomainAbs = Math.max(Math.abs(yDomainMin), Math.abs(yDomainMax));\n      yDomainMax = center + yDomainAbs;\n      yDomainMin = center - yDomainAbs;\n    } // add padding for data label\n\n\n    if (showHorizontalDataLabel) {\n      lengths = $$.getDataLabelLength(yDomainMin, yDomainMax, 'width');\n      diff = diffDomain($$.y.range());\n      ratio = [lengths[0] / diff, lengths[1] / diff];\n      padding_top += domainLength * (ratio[1] / (1 - ratio[0] - ratio[1]));\n      padding_bottom += domainLength * (ratio[0] / (1 - ratio[0] - ratio[1]));\n    } else if (showVerticalDataLabel) {\n      lengths = $$.getDataLabelLength(yDomainMin, yDomainMax, 'height');\n      padding_top += $$.axis.convertPixelsToAxisPadding(lengths[1], domainLength);\n      padding_bottom += $$.axis.convertPixelsToAxisPadding(lengths[0], domainLength);\n    }\n\n    if (axisId === 'y' && notEmpty(config.axis_y_padding)) {\n      padding_top = $$.axis.getPadding(config.axis_y_padding, 'top', padding_top, domainLength);\n      padding_bottom = $$.axis.getPadding(config.axis_y_padding, 'bottom', padding_bottom, domainLength);\n    }\n\n    if (axisId === 'y2' && notEmpty(config.axis_y2_padding)) {\n      padding_top = $$.axis.getPadding(config.axis_y2_padding, 'top', padding_top, domainLength);\n      padding_bottom = $$.axis.getPadding(config.axis_y2_padding, 'bottom', padding_bottom, domainLength);\n    } // Bar/Area chart should be 0-based if all positive|negative\n\n\n    if (isZeroBased) {\n      if (isAllPositive) {\n        padding_bottom = yDomainMin;\n      }\n\n      if (isAllNegative) {\n        padding_top = -yDomainMax;\n      }\n    }\n\n    domain = [yDomainMin - padding_bottom, yDomainMax + padding_top];\n    return isInverted ? domain.reverse() : domain;\n  };\n\n  ChartInternal.prototype.getXDomainMin = function (targets) {\n    var $$ = this,\n        config = $$.config;\n    return isDefined(config.axis_x_min) ? $$.isTimeSeries() ? this.parseDate(config.axis_x_min) : config.axis_x_min : $$.d3.min(targets, function (t) {\n      return $$.d3.min(t.values, function (v) {\n        return v.x;\n      });\n    });\n  };\n\n  ChartInternal.prototype.getXDomainMax = function (targets) {\n    var $$ = this,\n        config = $$.config;\n    return isDefined(config.axis_x_max) ? $$.isTimeSeries() ? this.parseDate(config.axis_x_max) : config.axis_x_max : $$.d3.max(targets, function (t) {\n      return $$.d3.max(t.values, function (v) {\n        return v.x;\n      });\n    });\n  };\n\n  ChartInternal.prototype.getXDomainPadding = function (domain) {\n    var $$ = this,\n        config = $$.config,\n        diff = domain[1] - domain[0],\n        maxDataCount,\n        padding,\n        paddingLeft,\n        paddingRight;\n\n    if ($$.isCategorized()) {\n      padding = 0;\n    } else if ($$.hasType('bar')) {\n      maxDataCount = $$.getMaxDataCount();\n      padding = maxDataCount > 1 ? diff / (maxDataCount - 1) / 2 : 0.5;\n    } else {\n      padding = diff * 0.01;\n    }\n\n    if (_typeof(config.axis_x_padding) === 'object' && notEmpty(config.axis_x_padding)) {\n      paddingLeft = isValue(config.axis_x_padding.left) ? config.axis_x_padding.left : padding;\n      paddingRight = isValue(config.axis_x_padding.right) ? config.axis_x_padding.right : padding;\n    } else if (typeof config.axis_x_padding === 'number') {\n      paddingLeft = paddingRight = config.axis_x_padding;\n    } else {\n      paddingLeft = paddingRight = padding;\n    }\n\n    return {\n      left: paddingLeft,\n      right: paddingRight\n    };\n  };\n\n  ChartInternal.prototype.getXDomain = function (targets) {\n    var $$ = this,\n        xDomain = [$$.getXDomainMin(targets), $$.getXDomainMax(targets)],\n        firstX = xDomain[0],\n        lastX = xDomain[1],\n        padding = $$.getXDomainPadding(xDomain),\n        min = 0,\n        max = 0; // show center of x domain if min and max are the same\n\n    if (firstX - lastX === 0 && !$$.isCategorized()) {\n      if ($$.isTimeSeries()) {\n        firstX = new Date(firstX.getTime() * 0.5);\n        lastX = new Date(lastX.getTime() * 1.5);\n      } else {\n        firstX = firstX === 0 ? 1 : firstX * 0.5;\n        lastX = lastX === 0 ? -1 : lastX * 1.5;\n      }\n    }\n\n    if (firstX || firstX === 0) {\n      min = $$.isTimeSeries() ? new Date(firstX.getTime() - padding.left) : firstX - padding.left;\n    }\n\n    if (lastX || lastX === 0) {\n      max = $$.isTimeSeries() ? new Date(lastX.getTime() + padding.right) : lastX + padding.right;\n    }\n\n    return [min, max];\n  };\n\n  ChartInternal.prototype.updateXDomain = function (targets, withUpdateXDomain, withUpdateOrgXDomain, withTrim, domain) {\n    var $$ = this,\n        config = $$.config;\n\n    if (withUpdateOrgXDomain) {\n      $$.x.domain(domain ? domain : $$.d3.extent($$.getXDomain(targets)));\n      $$.orgXDomain = $$.x.domain();\n\n      if (config.zoom_enabled) {\n        $$.zoom.update();\n      }\n\n      $$.subX.domain($$.x.domain());\n\n      if ($$.brush) {\n        $$.brush.updateScale($$.subX);\n      }\n    }\n\n    if (withUpdateXDomain) {\n      $$.x.domain(domain ? domain : !$$.brush || $$.brush.empty() ? $$.orgXDomain : $$.brush.selectionAsValue());\n    } // Trim domain when too big by zoom mousemove event\n\n\n    if (withTrim) {\n      $$.x.domain($$.trimXDomain($$.x.orgDomain()));\n    }\n\n    return $$.x.domain();\n  };\n\n  ChartInternal.prototype.trimXDomain = function (domain) {\n    var zoomDomain = this.getZoomDomain(),\n        min = zoomDomain[0],\n        max = zoomDomain[1];\n\n    if (domain[0] <= min) {\n      domain[1] = +domain[1] + (min - domain[0]);\n      domain[0] = min;\n    }\n\n    if (max <= domain[1]) {\n      domain[0] = +domain[0] - (domain[1] - max);\n      domain[1] = max;\n    }\n\n    return domain;\n  };\n\n  ChartInternal.prototype.drag = function (mouse) {\n    var $$ = this,\n        config = $$.config,\n        main = $$.main,\n        d3 = $$.d3;\n    var sx, sy, mx, my, minX, maxX, minY, maxY;\n\n    if ($$.hasArcType()) {\n      return;\n    }\n\n    if (!config.data_selection_enabled) {\n      return;\n    } // do nothing if not selectable\n\n\n    if (!config.data_selection_multiple) {\n      return;\n    } // skip when single selection because drag is used for multiple selection\n\n\n    sx = $$.dragStart[0];\n    sy = $$.dragStart[1];\n    mx = mouse[0];\n    my = mouse[1];\n    minX = Math.min(sx, mx);\n    maxX = Math.max(sx, mx);\n    minY = config.data_selection_grouped ? $$.margin.top : Math.min(sy, my);\n    maxY = config.data_selection_grouped ? $$.height : Math.max(sy, my);\n    main.select('.' + CLASS.dragarea).attr('x', minX).attr('y', minY).attr('width', maxX - minX).attr('height', maxY - minY); // TODO: binary search when multiple xs\n\n    main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape).filter(function (d) {\n      return config.data_selection_isselectable(d);\n    }).each(function (d, i) {\n      var shape = d3.select(this),\n          isSelected = shape.classed(CLASS.SELECTED),\n          isIncluded = shape.classed(CLASS.INCLUDED),\n          _x,\n          _y,\n          _w,\n          _h,\n          toggle,\n          isWithin = false,\n          box;\n\n      if (shape.classed(CLASS.circle)) {\n        _x = shape.attr(\"cx\") * 1;\n        _y = shape.attr(\"cy\") * 1;\n        toggle = $$.togglePoint;\n        isWithin = minX < _x && _x < maxX && minY < _y && _y < maxY;\n      } else if (shape.classed(CLASS.bar)) {\n        box = getPathBox(this);\n        _x = box.x;\n        _y = box.y;\n        _w = box.width;\n        _h = box.height;\n        toggle = $$.togglePath;\n        isWithin = !(maxX < _x || _x + _w < minX) && !(maxY < _y || _y + _h < minY);\n      } else {\n        // line/area selection not supported yet\n        return;\n      }\n\n      if (isWithin ^ isIncluded) {\n        shape.classed(CLASS.INCLUDED, !isIncluded); // TODO: included/unincluded callback here\n\n        shape.classed(CLASS.SELECTED, !isSelected);\n        toggle.call($$, !isSelected, shape, d, i);\n      }\n    });\n  };\n\n  ChartInternal.prototype.dragstart = function (mouse) {\n    var $$ = this,\n        config = $$.config;\n\n    if ($$.hasArcType()) {\n      return;\n    }\n\n    if (!config.data_selection_enabled) {\n      return;\n    } // do nothing if not selectable\n\n\n    $$.dragStart = mouse;\n    $$.main.select('.' + CLASS.chart).append('rect').attr('class', CLASS.dragarea).style('opacity', 0.1);\n    $$.dragging = true;\n  };\n\n  ChartInternal.prototype.dragend = function () {\n    var $$ = this,\n        config = $$.config;\n\n    if ($$.hasArcType()) {\n      return;\n    }\n\n    if (!config.data_selection_enabled) {\n      return;\n    } // do nothing if not selectable\n\n\n    $$.main.select('.' + CLASS.dragarea).transition().duration(100).style('opacity', 0).remove();\n    $$.main.selectAll('.' + CLASS.shape).classed(CLASS.INCLUDED, false);\n    $$.dragging = false;\n  };\n\n  ChartInternal.prototype.getYFormat = function (forArc) {\n    var $$ = this,\n        formatForY = forArc && !$$.hasType('gauge') ? $$.defaultArcValueFormat : $$.yFormat,\n        formatForY2 = forArc && !$$.hasType('gauge') ? $$.defaultArcValueFormat : $$.y2Format;\n    return function (v, ratio, id) {\n      var format = $$.axis.getId(id) === 'y2' ? formatForY2 : formatForY;\n      return format.call($$, v, ratio);\n    };\n  };\n\n  ChartInternal.prototype.yFormat = function (v) {\n    var $$ = this,\n        config = $$.config,\n        format = config.axis_y_tick_format ? config.axis_y_tick_format : $$.defaultValueFormat;\n    return format(v);\n  };\n\n  ChartInternal.prototype.y2Format = function (v) {\n    var $$ = this,\n        config = $$.config,\n        format = config.axis_y2_tick_format ? config.axis_y2_tick_format : $$.defaultValueFormat;\n    return format(v);\n  };\n\n  ChartInternal.prototype.defaultValueFormat = function (v) {\n    return isValue(v) ? +v : \"\";\n  };\n\n  ChartInternal.prototype.defaultArcValueFormat = function (v, ratio) {\n    return (ratio * 100).toFixed(1) + '%';\n  };\n\n  ChartInternal.prototype.dataLabelFormat = function (targetId) {\n    var $$ = this,\n        data_labels = $$.config.data_labels,\n        format,\n        defaultFormat = function defaultFormat(v) {\n      return isValue(v) ? +v : \"\";\n    }; // find format according to axis id\n\n\n    if (typeof data_labels.format === 'function') {\n      format = data_labels.format;\n    } else if (_typeof(data_labels.format) === 'object') {\n      if (data_labels.format[targetId]) {\n        format = data_labels.format[targetId] === true ? defaultFormat : data_labels.format[targetId];\n      } else {\n        format = function format() {\n          return '';\n        };\n      }\n    } else {\n      format = defaultFormat;\n    }\n\n    return format;\n  };\n\n  ChartInternal.prototype.initGrid = function () {\n    var $$ = this,\n        config = $$.config,\n        d3 = $$.d3;\n    $$.grid = $$.main.append('g').attr(\"clip-path\", $$.clipPathForGrid).attr('class', CLASS.grid);\n\n    if (config.grid_x_show) {\n      $$.grid.append(\"g\").attr(\"class\", CLASS.xgrids);\n    }\n\n    if (config.grid_y_show) {\n      $$.grid.append('g').attr('class', CLASS.ygrids);\n    }\n\n    if (config.grid_focus_show) {\n      $$.grid.append('g').attr(\"class\", CLASS.xgridFocus).append('line').attr('class', CLASS.xgridFocus);\n    }\n\n    $$.xgrid = d3.selectAll([]);\n\n    if (!config.grid_lines_front) {\n      $$.initGridLines();\n    }\n  };\n\n  ChartInternal.prototype.initGridLines = function () {\n    var $$ = this,\n        d3 = $$.d3;\n    $$.gridLines = $$.main.append('g').attr(\"clip-path\", $$.clipPathForGrid).attr('class', CLASS.grid + ' ' + CLASS.gridLines);\n    $$.gridLines.append('g').attr(\"class\", CLASS.xgridLines);\n    $$.gridLines.append('g').attr('class', CLASS.ygridLines);\n    $$.xgridLines = d3.selectAll([]);\n  };\n\n  ChartInternal.prototype.updateXGrid = function (withoutUpdate) {\n    var $$ = this,\n        config = $$.config,\n        d3 = $$.d3,\n        xgridData = $$.generateGridData(config.grid_x_type, $$.x),\n        tickOffset = $$.isCategorized() ? $$.xAxis.tickOffset() : 0;\n    $$.xgridAttr = config.axis_rotated ? {\n      'x1': 0,\n      'x2': $$.width,\n      'y1': function y1(d) {\n        return $$.x(d) - tickOffset;\n      },\n      'y2': function y2(d) {\n        return $$.x(d) - tickOffset;\n      }\n    } : {\n      'x1': function x1(d) {\n        return $$.x(d) + tickOffset;\n      },\n      'x2': function x2(d) {\n        return $$.x(d) + tickOffset;\n      },\n      'y1': 0,\n      'y2': $$.height\n    };\n\n    $$.xgridAttr.opacity = function () {\n      var pos = +d3.select(this).attr(config.axis_rotated ? 'y1' : 'x1');\n      return pos === (config.axis_rotated ? $$.height : 0) ? 0 : 1;\n    };\n\n    var xgrid = $$.main.select('.' + CLASS.xgrids).selectAll('.' + CLASS.xgrid).data(xgridData);\n    var xgridEnter = xgrid.enter().append('line').attr(\"class\", CLASS.xgrid).attr('x1', $$.xgridAttr.x1).attr('x2', $$.xgridAttr.x2).attr('y1', $$.xgridAttr.y1).attr('y2', $$.xgridAttr.y2).style(\"opacity\", 0);\n    $$.xgrid = xgridEnter.merge(xgrid);\n\n    if (!withoutUpdate) {\n      $$.xgrid.attr('x1', $$.xgridAttr.x1).attr('x2', $$.xgridAttr.x2).attr('y1', $$.xgridAttr.y1).attr('y2', $$.xgridAttr.y2).style(\"opacity\", $$.xgridAttr.opacity);\n    }\n\n    xgrid.exit().remove();\n  };\n\n  ChartInternal.prototype.updateYGrid = function () {\n    var $$ = this,\n        config = $$.config,\n        gridValues = $$.yAxis.tickValues() || $$.y.ticks(config.grid_y_ticks);\n    var ygrid = $$.main.select('.' + CLASS.ygrids).selectAll('.' + CLASS.ygrid).data(gridValues);\n    var ygridEnter = ygrid.enter().append('line') // TODO: x1, x2, y1, y2, opacity need to be set here maybe\n    .attr('class', CLASS.ygrid);\n    $$.ygrid = ygridEnter.merge(ygrid);\n    $$.ygrid.attr(\"x1\", config.axis_rotated ? $$.y : 0).attr(\"x2\", config.axis_rotated ? $$.y : $$.width).attr(\"y1\", config.axis_rotated ? 0 : $$.y).attr(\"y2\", config.axis_rotated ? $$.height : $$.y);\n    ygrid.exit().remove();\n    $$.smoothLines($$.ygrid, 'grid');\n  };\n\n  ChartInternal.prototype.gridTextAnchor = function (d) {\n    return d.position ? d.position : \"end\";\n  };\n\n  ChartInternal.prototype.gridTextDx = function (d) {\n    return d.position === 'start' ? 4 : d.position === 'middle' ? 0 : -4;\n  };\n\n  ChartInternal.prototype.xGridTextX = function (d) {\n    return d.position === 'start' ? -this.height : d.position === 'middle' ? -this.height / 2 : 0;\n  };\n\n  ChartInternal.prototype.yGridTextX = function (d) {\n    return d.position === 'start' ? 0 : d.position === 'middle' ? this.width / 2 : this.width;\n  };\n\n  ChartInternal.prototype.updateGrid = function (duration) {\n    var $$ = this,\n        main = $$.main,\n        config = $$.config,\n        xgridLine,\n        xgridLineEnter,\n        ygridLine,\n        ygridLineEnter,\n        xv = $$.xv.bind($$),\n        yv = $$.yv.bind($$),\n        xGridTextX = $$.xGridTextX.bind($$),\n        yGridTextX = $$.yGridTextX.bind($$); // hide if arc type\n\n    $$.grid.style('visibility', $$.hasArcType() ? 'hidden' : 'visible');\n    main.select('line.' + CLASS.xgridFocus).style(\"visibility\", \"hidden\");\n\n    if (config.grid_x_show) {\n      $$.updateXGrid();\n    }\n\n    xgridLine = main.select('.' + CLASS.xgridLines).selectAll('.' + CLASS.xgridLine).data(config.grid_x_lines); // enter\n\n    xgridLineEnter = xgridLine.enter().append('g').attr(\"class\", function (d) {\n      return CLASS.xgridLine + (d['class'] ? ' ' + d['class'] : '');\n    });\n    xgridLineEnter.append('line').attr(\"x1\", config.axis_rotated ? 0 : xv).attr(\"x2\", config.axis_rotated ? $$.width : xv).attr(\"y1\", config.axis_rotated ? xv : 0).attr(\"y2\", config.axis_rotated ? xv : $$.height).style(\"opacity\", 0);\n    xgridLineEnter.append('text').attr(\"text-anchor\", $$.gridTextAnchor).attr(\"transform\", config.axis_rotated ? \"\" : \"rotate(-90)\").attr(\"x\", config.axis_rotated ? yGridTextX : xGridTextX).attr(\"y\", xv).attr('dx', $$.gridTextDx).attr('dy', -5).style(\"opacity\", 0); // udpate\n\n    $$.xgridLines = xgridLineEnter.merge(xgridLine); // done in d3.transition() of the end of this function\n    // exit\n\n    xgridLine.exit().transition().duration(duration).style(\"opacity\", 0).remove(); // Y-Grid\n\n    if (config.grid_y_show) {\n      $$.updateYGrid();\n    }\n\n    ygridLine = main.select('.' + CLASS.ygridLines).selectAll('.' + CLASS.ygridLine).data(config.grid_y_lines); // enter\n\n    ygridLineEnter = ygridLine.enter().append('g').attr(\"class\", function (d) {\n      return CLASS.ygridLine + (d['class'] ? ' ' + d['class'] : '');\n    });\n    ygridLineEnter.append('line').attr(\"x1\", config.axis_rotated ? yv : 0).attr(\"x2\", config.axis_rotated ? yv : $$.width).attr(\"y1\", config.axis_rotated ? 0 : yv).attr(\"y2\", config.axis_rotated ? $$.height : yv).style(\"opacity\", 0);\n    ygridLineEnter.append('text').attr(\"text-anchor\", $$.gridTextAnchor).attr(\"transform\", config.axis_rotated ? \"rotate(-90)\" : \"\").attr(\"x\", config.axis_rotated ? xGridTextX : yGridTextX).attr(\"y\", yv).attr('dx', $$.gridTextDx).attr('dy', -5).style(\"opacity\", 0); // update\n\n    $$.ygridLines = ygridLineEnter.merge(ygridLine);\n    $$.ygridLines.select('line').transition().duration(duration).attr(\"x1\", config.axis_rotated ? yv : 0).attr(\"x2\", config.axis_rotated ? yv : $$.width).attr(\"y1\", config.axis_rotated ? 0 : yv).attr(\"y2\", config.axis_rotated ? $$.height : yv).style(\"opacity\", 1);\n    $$.ygridLines.select('text').transition().duration(duration).attr(\"x\", config.axis_rotated ? $$.xGridTextX.bind($$) : $$.yGridTextX.bind($$)).attr(\"y\", yv).text(function (d) {\n      return d.text;\n    }).style(\"opacity\", 1); // exit\n\n    ygridLine.exit().transition().duration(duration).style(\"opacity\", 0).remove();\n  };\n\n  ChartInternal.prototype.redrawGrid = function (withTransition, transition) {\n    var $$ = this,\n        config = $$.config,\n        xv = $$.xv.bind($$),\n        lines = $$.xgridLines.select('line'),\n        texts = $$.xgridLines.select('text');\n    return [(withTransition ? lines.transition(transition) : lines).attr(\"x1\", config.axis_rotated ? 0 : xv).attr(\"x2\", config.axis_rotated ? $$.width : xv).attr(\"y1\", config.axis_rotated ? xv : 0).attr(\"y2\", config.axis_rotated ? xv : $$.height).style(\"opacity\", 1), (withTransition ? texts.transition(transition) : texts).attr(\"x\", config.axis_rotated ? $$.yGridTextX.bind($$) : $$.xGridTextX.bind($$)).attr(\"y\", xv).text(function (d) {\n      return d.text;\n    }).style(\"opacity\", 1)];\n  };\n\n  ChartInternal.prototype.showXGridFocus = function (selectedData) {\n    var $$ = this,\n        config = $$.config,\n        dataToShow = selectedData.filter(function (d) {\n      return d && isValue(d.value);\n    }),\n        focusEl = $$.main.selectAll('line.' + CLASS.xgridFocus),\n        xx = $$.xx.bind($$);\n\n    if (!config.tooltip_show) {\n      return;\n    } // Hide when scatter plot exists\n\n\n    if ($$.hasType('scatter') || $$.hasArcType()) {\n      return;\n    }\n\n    focusEl.style(\"visibility\", \"visible\").data([dataToShow[0]]).attr(config.axis_rotated ? 'y1' : 'x1', xx).attr(config.axis_rotated ? 'y2' : 'x2', xx);\n    $$.smoothLines(focusEl, 'grid');\n  };\n\n  ChartInternal.prototype.hideXGridFocus = function () {\n    this.main.select('line.' + CLASS.xgridFocus).style(\"visibility\", \"hidden\");\n  };\n\n  ChartInternal.prototype.updateXgridFocus = function () {\n    var $$ = this,\n        config = $$.config;\n    $$.main.select('line.' + CLASS.xgridFocus).attr(\"x1\", config.axis_rotated ? 0 : -10).attr(\"x2\", config.axis_rotated ? $$.width : -10).attr(\"y1\", config.axis_rotated ? -10 : 0).attr(\"y2\", config.axis_rotated ? -10 : $$.height);\n  };\n\n  ChartInternal.prototype.generateGridData = function (type, scale) {\n    var $$ = this,\n        gridData = [],\n        xDomain,\n        firstYear,\n        lastYear,\n        i,\n        tickNum = $$.main.select(\".\" + CLASS.axisX).selectAll('.tick').size();\n\n    if (type === 'year') {\n      xDomain = $$.getXDomain();\n      firstYear = xDomain[0].getFullYear();\n      lastYear = xDomain[1].getFullYear();\n\n      for (i = firstYear; i <= lastYear; i++) {\n        gridData.push(new Date(i + '-01-01 00:00:00'));\n      }\n    } else {\n      gridData = scale.ticks(10);\n\n      if (gridData.length > tickNum) {\n        // use only int\n        gridData = gridData.filter(function (d) {\n          return (\"\" + d).indexOf('.') < 0;\n        });\n      }\n    }\n\n    return gridData;\n  };\n\n  ChartInternal.prototype.getGridFilterToRemove = function (params) {\n    return params ? function (line) {\n      var found = false;\n      [].concat(params).forEach(function (param) {\n        if ('value' in param && line.value === param.value || 'class' in param && line['class'] === param['class']) {\n          found = true;\n        }\n      });\n      return found;\n    } : function () {\n      return true;\n    };\n  };\n\n  ChartInternal.prototype.removeGridLines = function (params, forX) {\n    var $$ = this,\n        config = $$.config,\n        toRemove = $$.getGridFilterToRemove(params),\n        toShow = function toShow(line) {\n      return !toRemove(line);\n    },\n        classLines = forX ? CLASS.xgridLines : CLASS.ygridLines,\n        classLine = forX ? CLASS.xgridLine : CLASS.ygridLine;\n\n    $$.main.select('.' + classLines).selectAll('.' + classLine).filter(toRemove).transition().duration(config.transition_duration).style('opacity', 0).remove();\n\n    if (forX) {\n      config.grid_x_lines = config.grid_x_lines.filter(toShow);\n    } else {\n      config.grid_y_lines = config.grid_y_lines.filter(toShow);\n    }\n  };\n\n  ChartInternal.prototype.initEventRect = function () {\n    var $$ = this,\n        config = $$.config;\n    $$.main.select('.' + CLASS.chart).append(\"g\").attr(\"class\", CLASS.eventRects).style('fill-opacity', 0);\n    $$.eventRect = $$.main.select('.' + CLASS.eventRects).append('rect').attr('class', CLASS.eventRect); // event rect handle zoom event as well\n\n    if (config.zoom_enabled && $$.zoom) {\n      $$.eventRect.call($$.zoom).on(\"dblclick.zoom\", null);\n\n      if (config.zoom_initialRange) {\n        // WORKAROUND: Add transition to apply transform immediately when no subchart\n        $$.eventRect.transition().duration(0).call($$.zoom.transform, $$.zoomTransform(config.zoom_initialRange));\n      }\n    }\n  };\n\n  ChartInternal.prototype.redrawEventRect = function () {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config,\n        x,\n        y,\n        w,\n        h; // TODO: rotated not supported yet\n\n    x = 0;\n    y = 0;\n    w = $$.width;\n    h = $$.height;\n\n    function mouseout() {\n      $$.svg.select('.' + CLASS.eventRect).style('cursor', null);\n      $$.hideXGridFocus();\n      $$.hideTooltip();\n      $$.unexpandCircles();\n      $$.unexpandBars();\n    } // rects for mouseover\n\n\n    $$.main.select('.' + CLASS.eventRects).style('cursor', config.zoom_enabled ? config.axis_rotated ? 'ns-resize' : 'ew-resize' : null);\n    $$.eventRect.attr('x', x).attr('y', y).attr('width', w).attr('height', h).on('mouseout', config.interaction_enabled ? function () {\n      if (!config) {\n        return;\n      } // chart is destroyed\n\n\n      if ($$.hasArcType()) {\n        return;\n      }\n\n      mouseout();\n    } : null).on('mousemove', config.interaction_enabled ? function () {\n      var targetsToShow, mouse, closest, sameXData, selectedData;\n\n      if ($$.dragging) {\n        return;\n      } // do nothing when dragging\n\n\n      if ($$.hasArcType(targetsToShow)) {\n        return;\n      }\n\n      targetsToShow = $$.filterTargetsToShow($$.data.targets);\n      mouse = d3.mouse(this);\n      closest = $$.findClosestFromTargets(targetsToShow, mouse);\n\n      if ($$.mouseover && (!closest || closest.id !== $$.mouseover.id)) {\n        config.data_onmouseout.call($$.api, $$.mouseover);\n        $$.mouseover = undefined;\n      }\n\n      if (!closest) {\n        mouseout();\n        return;\n      }\n\n      if ($$.isScatterType(closest) || !config.tooltip_grouped) {\n        sameXData = [closest];\n      } else {\n        sameXData = $$.filterByX(targetsToShow, closest.x);\n      } // show tooltip when cursor is close to some point\n\n\n      selectedData = sameXData.map(function (d) {\n        return $$.addName(d);\n      });\n      $$.showTooltip(selectedData, this); // expand points\n\n      if (config.point_focus_expand_enabled) {\n        $$.unexpandCircles();\n        selectedData.forEach(function (d) {\n          $$.expandCircles(d.index, d.id, false);\n        });\n      }\n\n      $$.expandBars(closest.index, closest.id, true); // Show xgrid focus line\n\n      $$.showXGridFocus(selectedData); // Show cursor as pointer if point is close to mouse position\n\n      if ($$.isBarType(closest.id) || $$.dist(closest, mouse) < config.point_sensitivity) {\n        $$.svg.select('.' + CLASS.eventRect).style('cursor', 'pointer');\n\n        if (!$$.mouseover) {\n          config.data_onmouseover.call($$.api, closest);\n          $$.mouseover = closest;\n        }\n      }\n    } : null).on('click', config.interaction_enabled ? function () {\n      var targetsToShow, mouse, closest, sameXData;\n\n      if ($$.hasArcType(targetsToShow)) {\n        return;\n      }\n\n      targetsToShow = $$.filterTargetsToShow($$.data.targets);\n      mouse = d3.mouse(this);\n      closest = $$.findClosestFromTargets(targetsToShow, mouse);\n\n      if (!closest) {\n        return;\n      } // select if selection enabled\n\n\n      if ($$.isBarType(closest.id) || $$.dist(closest, mouse) < config.point_sensitivity) {\n        if ($$.isScatterType(closest) || !config.data_selection_grouped) {\n          sameXData = [closest];\n        } else {\n          sameXData = $$.filterByX(targetsToShow, closest.x);\n        }\n\n        sameXData.forEach(function (d) {\n          $$.main.selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(d.id)).selectAll('.' + CLASS.shape + '-' + d.index).each(function () {\n            if (config.data_selection_grouped || $$.isWithinShape(this, d)) {\n              $$.toggleShape(this, d, d.index);\n              config.data_onclick.call($$.api, d, this);\n            }\n          });\n        });\n      }\n    } : null).call(config.interaction_enabled && config.data_selection_draggable && $$.drag ? d3.drag().on('drag', function () {\n      $$.drag(d3.mouse(this));\n    }).on('start', function () {\n      $$.dragstart(d3.mouse(this));\n    }).on('end', function () {\n      $$.dragend();\n    }) : function () {});\n  };\n\n  ChartInternal.prototype.getMousePosition = function (data) {\n    var $$ = this;\n    return [$$.x(data.x), $$.getYScale(data.id)(data.value)];\n  };\n\n  ChartInternal.prototype.dispatchEvent = function (type, mouse) {\n    var $$ = this,\n        selector = '.' + CLASS.eventRect,\n        eventRect = $$.main.select(selector).node(),\n        box = eventRect.getBoundingClientRect(),\n        x = box.left + (mouse ? mouse[0] : 0),\n        y = box.top + (mouse ? mouse[1] : 0),\n        event = document.createEvent(\"MouseEvents\");\n    event.initMouseEvent(type, true, true, window, 0, x, y, x, y, false, false, false, false, 0, null);\n    eventRect.dispatchEvent(event);\n  };\n\n  ChartInternal.prototype.initLegend = function () {\n    var $$ = this;\n    $$.legendItemTextBox = {};\n    $$.legendHasRendered = false;\n    $$.legend = $$.svg.append(\"g\").attr(\"transform\", $$.getTranslate('legend'));\n\n    if (!$$.config.legend_show) {\n      $$.legend.style('visibility', 'hidden');\n      $$.hiddenLegendIds = $$.mapToIds($$.data.targets);\n      return;\n    } // MEMO: call here to update legend box and tranlate for all\n    // MEMO: translate will be upated by this, so transform not needed in updateLegend()\n\n\n    $$.updateLegendWithDefaults();\n  };\n\n  ChartInternal.prototype.updateLegendWithDefaults = function () {\n    var $$ = this;\n    $$.updateLegend($$.mapToIds($$.data.targets), {\n      withTransform: false,\n      withTransitionForTransform: false,\n      withTransition: false\n    });\n  };\n\n  ChartInternal.prototype.updateSizeForLegend = function (legendHeight, legendWidth) {\n    var $$ = this,\n        config = $$.config,\n        insetLegendPosition = {\n      top: $$.isLegendTop ? $$.getCurrentPaddingTop() + config.legend_inset_y + 5.5 : $$.currentHeight - legendHeight - $$.getCurrentPaddingBottom() - config.legend_inset_y,\n      left: $$.isLegendLeft ? $$.getCurrentPaddingLeft() + config.legend_inset_x + 0.5 : $$.currentWidth - legendWidth - $$.getCurrentPaddingRight() - config.legend_inset_x + 0.5\n    };\n    $$.margin3 = {\n      top: $$.isLegendRight ? 0 : $$.isLegendInset ? insetLegendPosition.top : $$.currentHeight - legendHeight,\n      right: NaN,\n      bottom: 0,\n      left: $$.isLegendRight ? $$.currentWidth - legendWidth : $$.isLegendInset ? insetLegendPosition.left : 0\n    };\n  };\n\n  ChartInternal.prototype.transformLegend = function (withTransition) {\n    var $$ = this;\n    (withTransition ? $$.legend.transition() : $$.legend).attr(\"transform\", $$.getTranslate('legend'));\n  };\n\n  ChartInternal.prototype.updateLegendStep = function (step) {\n    this.legendStep = step;\n  };\n\n  ChartInternal.prototype.updateLegendItemWidth = function (w) {\n    this.legendItemWidth = w;\n  };\n\n  ChartInternal.prototype.updateLegendItemHeight = function (h) {\n    this.legendItemHeight = h;\n  };\n\n  ChartInternal.prototype.getLegendWidth = function () {\n    var $$ = this;\n    return $$.config.legend_show ? $$.isLegendRight || $$.isLegendInset ? $$.legendItemWidth * ($$.legendStep + 1) : $$.currentWidth : 0;\n  };\n\n  ChartInternal.prototype.getLegendHeight = function () {\n    var $$ = this,\n        h = 0;\n\n    if ($$.config.legend_show) {\n      if ($$.isLegendRight) {\n        h = $$.currentHeight;\n      } else {\n        h = Math.max(20, $$.legendItemHeight) * ($$.legendStep + 1);\n      }\n    }\n\n    return h;\n  };\n\n  ChartInternal.prototype.opacityForLegend = function (legendItem) {\n    return legendItem.classed(CLASS.legendItemHidden) ? null : 1;\n  };\n\n  ChartInternal.prototype.opacityForUnfocusedLegend = function (legendItem) {\n    return legendItem.classed(CLASS.legendItemHidden) ? null : 0.3;\n  };\n\n  ChartInternal.prototype.toggleFocusLegend = function (targetIds, focus) {\n    var $$ = this;\n    targetIds = $$.mapToTargetIds(targetIds);\n    $$.legend.selectAll('.' + CLASS.legendItem).filter(function (id) {\n      return targetIds.indexOf(id) >= 0;\n    }).classed(CLASS.legendItemFocused, focus).transition().duration(100).style('opacity', function () {\n      var opacity = focus ? $$.opacityForLegend : $$.opacityForUnfocusedLegend;\n      return opacity.call($$, $$.d3.select(this));\n    });\n  };\n\n  ChartInternal.prototype.revertLegend = function () {\n    var $$ = this,\n        d3 = $$.d3;\n    $$.legend.selectAll('.' + CLASS.legendItem).classed(CLASS.legendItemFocused, false).transition().duration(100).style('opacity', function () {\n      return $$.opacityForLegend(d3.select(this));\n    });\n  };\n\n  ChartInternal.prototype.showLegend = function (targetIds) {\n    var $$ = this,\n        config = $$.config;\n\n    if (!config.legend_show) {\n      config.legend_show = true;\n      $$.legend.style('visibility', 'visible');\n\n      if (!$$.legendHasRendered) {\n        $$.updateLegendWithDefaults();\n      }\n    }\n\n    $$.removeHiddenLegendIds(targetIds);\n    $$.legend.selectAll($$.selectorLegends(targetIds)).style('visibility', 'visible').transition().style('opacity', function () {\n      return $$.opacityForLegend($$.d3.select(this));\n    });\n  };\n\n  ChartInternal.prototype.hideLegend = function (targetIds) {\n    var $$ = this,\n        config = $$.config;\n\n    if (config.legend_show && isEmpty(targetIds)) {\n      config.legend_show = false;\n      $$.legend.style('visibility', 'hidden');\n    }\n\n    $$.addHiddenLegendIds(targetIds);\n    $$.legend.selectAll($$.selectorLegends(targetIds)).style('opacity', 0).style('visibility', 'hidden');\n  };\n\n  ChartInternal.prototype.clearLegendItemTextBoxCache = function () {\n    this.legendItemTextBox = {};\n  };\n\n  ChartInternal.prototype.updateLegend = function (targetIds, options, transitions) {\n    var $$ = this,\n        config = $$.config;\n    var xForLegend, xForLegendText, xForLegendRect, yForLegend, yForLegendText, yForLegendRect, x1ForLegendTile, x2ForLegendTile, yForLegendTile;\n    var paddingTop = 4,\n        paddingRight = 10,\n        maxWidth = 0,\n        maxHeight = 0,\n        posMin = 10,\n        tileWidth = config.legend_item_tile_width + 5;\n    var l,\n        totalLength = 0,\n        offsets = {},\n        widths = {},\n        heights = {},\n        margins = [0],\n        steps = {},\n        step = 0;\n    var withTransition, withTransitionForTransform;\n    var texts, rects, tiles, background; // Skip elements when their name is set to null\n\n    targetIds = targetIds.filter(function (id) {\n      return !isDefined(config.data_names[id]) || config.data_names[id] !== null;\n    });\n    options = options || {};\n    withTransition = getOption(options, \"withTransition\", true);\n    withTransitionForTransform = getOption(options, \"withTransitionForTransform\", true);\n\n    function getTextBox(textElement, id) {\n      if (!$$.legendItemTextBox[id]) {\n        $$.legendItemTextBox[id] = $$.getTextRect(textElement.textContent, CLASS.legendItem, textElement);\n      }\n\n      return $$.legendItemTextBox[id];\n    }\n\n    function updatePositions(textElement, id, index) {\n      var reset = index === 0,\n          isLast = index === targetIds.length - 1,\n          box = getTextBox(textElement, id),\n          itemWidth = box.width + tileWidth + (isLast && !($$.isLegendRight || $$.isLegendInset) ? 0 : paddingRight) + config.legend_padding,\n          itemHeight = box.height + paddingTop,\n          itemLength = $$.isLegendRight || $$.isLegendInset ? itemHeight : itemWidth,\n          areaLength = $$.isLegendRight || $$.isLegendInset ? $$.getLegendHeight() : $$.getLegendWidth(),\n          margin,\n          maxLength; // MEMO: care about condifion of step, totalLength\n\n      function updateValues(id, withoutStep) {\n        if (!withoutStep) {\n          margin = (areaLength - totalLength - itemLength) / 2;\n\n          if (margin < posMin) {\n            margin = (areaLength - itemLength) / 2;\n            totalLength = 0;\n            step++;\n          }\n        }\n\n        steps[id] = step;\n        margins[step] = $$.isLegendInset ? 10 : margin;\n        offsets[id] = totalLength;\n        totalLength += itemLength;\n      }\n\n      if (reset) {\n        totalLength = 0;\n        step = 0;\n        maxWidth = 0;\n        maxHeight = 0;\n      }\n\n      if (config.legend_show && !$$.isLegendToShow(id)) {\n        widths[id] = heights[id] = steps[id] = offsets[id] = 0;\n        return;\n      }\n\n      widths[id] = itemWidth;\n      heights[id] = itemHeight;\n\n      if (!maxWidth || itemWidth >= maxWidth) {\n        maxWidth = itemWidth;\n      }\n\n      if (!maxHeight || itemHeight >= maxHeight) {\n        maxHeight = itemHeight;\n      }\n\n      maxLength = $$.isLegendRight || $$.isLegendInset ? maxHeight : maxWidth;\n\n      if (config.legend_equally) {\n        Object.keys(widths).forEach(function (id) {\n          widths[id] = maxWidth;\n        });\n        Object.keys(heights).forEach(function (id) {\n          heights[id] = maxHeight;\n        });\n        margin = (areaLength - maxLength * targetIds.length) / 2;\n\n        if (margin < posMin) {\n          totalLength = 0;\n          step = 0;\n          targetIds.forEach(function (id) {\n            updateValues(id);\n          });\n        } else {\n          updateValues(id, true);\n        }\n      } else {\n        updateValues(id);\n      }\n    }\n\n    if ($$.isLegendInset) {\n      step = config.legend_inset_step ? config.legend_inset_step : targetIds.length;\n      $$.updateLegendStep(step);\n    }\n\n    if ($$.isLegendRight) {\n      xForLegend = function xForLegend(id) {\n        return maxWidth * steps[id];\n      };\n\n      yForLegend = function yForLegend(id) {\n        return margins[steps[id]] + offsets[id];\n      };\n    } else if ($$.isLegendInset) {\n      xForLegend = function xForLegend(id) {\n        return maxWidth * steps[id] + 10;\n      };\n\n      yForLegend = function yForLegend(id) {\n        return margins[steps[id]] + offsets[id];\n      };\n    } else {\n      xForLegend = function xForLegend(id) {\n        return margins[steps[id]] + offsets[id];\n      };\n\n      yForLegend = function yForLegend(id) {\n        return maxHeight * steps[id];\n      };\n    }\n\n    xForLegendText = function xForLegendText(id, i) {\n      return xForLegend(id, i) + 4 + config.legend_item_tile_width;\n    };\n\n    yForLegendText = function yForLegendText(id, i) {\n      return yForLegend(id, i) + 9;\n    };\n\n    xForLegendRect = function xForLegendRect(id, i) {\n      return xForLegend(id, i);\n    };\n\n    yForLegendRect = function yForLegendRect(id, i) {\n      return yForLegend(id, i) - 5;\n    };\n\n    x1ForLegendTile = function x1ForLegendTile(id, i) {\n      return xForLegend(id, i) - 2;\n    };\n\n    x2ForLegendTile = function x2ForLegendTile(id, i) {\n      return xForLegend(id, i) - 2 + config.legend_item_tile_width;\n    };\n\n    yForLegendTile = function yForLegendTile(id, i) {\n      return yForLegend(id, i) + 4;\n    }; // Define g for legend area\n\n\n    l = $$.legend.selectAll('.' + CLASS.legendItem).data(targetIds).enter().append('g').attr('class', function (id) {\n      return $$.generateClass(CLASS.legendItem, id);\n    }).style('visibility', function (id) {\n      return $$.isLegendToShow(id) ? 'visible' : 'hidden';\n    }).style('cursor', 'pointer').on('click', function (id) {\n      if (config.legend_item_onclick) {\n        config.legend_item_onclick.call($$, id);\n      } else {\n        if ($$.d3.event.altKey) {\n          $$.api.hide();\n          $$.api.show(id);\n        } else {\n          $$.api.toggle(id);\n          $$.isTargetToShow(id) ? $$.api.focus(id) : $$.api.revert();\n        }\n      }\n    }).on('mouseover', function (id) {\n      if (config.legend_item_onmouseover) {\n        config.legend_item_onmouseover.call($$, id);\n      } else {\n        $$.d3.select(this).classed(CLASS.legendItemFocused, true);\n\n        if (!$$.transiting && $$.isTargetToShow(id)) {\n          $$.api.focus(id);\n        }\n      }\n    }).on('mouseout', function (id) {\n      if (config.legend_item_onmouseout) {\n        config.legend_item_onmouseout.call($$, id);\n      } else {\n        $$.d3.select(this).classed(CLASS.legendItemFocused, false);\n        $$.api.revert();\n      }\n    });\n    l.append('text').text(function (id) {\n      return isDefined(config.data_names[id]) ? config.data_names[id] : id;\n    }).each(function (id, i) {\n      updatePositions(this, id, i);\n    }).style(\"pointer-events\", \"none\").attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendText : -200).attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendText);\n    l.append('rect').attr(\"class\", CLASS.legendItemEvent).style('fill-opacity', 0).attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendRect : -200).attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendRect);\n    l.append('line').attr('class', CLASS.legendItemTile).style('stroke', $$.color).style(\"pointer-events\", \"none\").attr('x1', $$.isLegendRight || $$.isLegendInset ? x1ForLegendTile : -200).attr('y1', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendTile).attr('x2', $$.isLegendRight || $$.isLegendInset ? x2ForLegendTile : -200).attr('y2', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendTile).attr('stroke-width', config.legend_item_tile_height); // Set background for inset legend\n\n    background = $$.legend.select('.' + CLASS.legendBackground + ' rect');\n\n    if ($$.isLegendInset && maxWidth > 0 && background.size() === 0) {\n      background = $$.legend.insert('g', '.' + CLASS.legendItem).attr(\"class\", CLASS.legendBackground).append('rect');\n    }\n\n    texts = $$.legend.selectAll('text').data(targetIds).text(function (id) {\n      return isDefined(config.data_names[id]) ? config.data_names[id] : id;\n    }) // MEMO: needed for update\n    .each(function (id, i) {\n      updatePositions(this, id, i);\n    });\n    (withTransition ? texts.transition() : texts).attr('x', xForLegendText).attr('y', yForLegendText);\n    rects = $$.legend.selectAll('rect.' + CLASS.legendItemEvent).data(targetIds);\n    (withTransition ? rects.transition() : rects).attr('width', function (id) {\n      return widths[id];\n    }).attr('height', function (id) {\n      return heights[id];\n    }).attr('x', xForLegendRect).attr('y', yForLegendRect);\n    tiles = $$.legend.selectAll('line.' + CLASS.legendItemTile).data(targetIds);\n    (withTransition ? tiles.transition() : tiles).style('stroke', $$.levelColor ? function (id) {\n      return $$.levelColor($$.cache[id].values[0].value);\n    } : $$.color).attr('x1', x1ForLegendTile).attr('y1', yForLegendTile).attr('x2', x2ForLegendTile).attr('y2', yForLegendTile);\n\n    if (background) {\n      (withTransition ? background.transition() : background).attr('height', $$.getLegendHeight() - 12).attr('width', maxWidth * (step + 1) + 10);\n    } // toggle legend state\n\n\n    $$.legend.selectAll('.' + CLASS.legendItem).classed(CLASS.legendItemHidden, function (id) {\n      return !$$.isTargetToShow(id);\n    }); // Update all to reflect change of legend\n\n    $$.updateLegendItemWidth(maxWidth);\n    $$.updateLegendItemHeight(maxHeight);\n    $$.updateLegendStep(step); // Update size and scale\n\n    $$.updateSizes();\n    $$.updateScales();\n    $$.updateSvgSize(); // Update g positions\n\n    $$.transformAll(withTransitionForTransform, transitions);\n    $$.legendHasRendered = true;\n  };\n\n  ChartInternal.prototype.initRegion = function () {\n    var $$ = this;\n    $$.region = $$.main.append('g').attr(\"clip-path\", $$.clipPath).attr(\"class\", CLASS.regions);\n  };\n\n  ChartInternal.prototype.updateRegion = function (duration) {\n    var $$ = this,\n        config = $$.config; // hide if arc type\n\n    $$.region.style('visibility', $$.hasArcType() ? 'hidden' : 'visible');\n    var mainRegion = $$.main.select('.' + CLASS.regions).selectAll('.' + CLASS.region).data(config.regions);\n    var mainRegionEnter = mainRegion.enter().append('rect').attr(\"x\", $$.regionX.bind($$)).attr(\"y\", $$.regionY.bind($$)).attr(\"width\", $$.regionWidth.bind($$)).attr(\"height\", $$.regionHeight.bind($$)).style(\"fill-opacity\", 0);\n    $$.mainRegion = mainRegionEnter.merge(mainRegion).attr('class', $$.classRegion.bind($$));\n    mainRegion.exit().transition().duration(duration).style(\"opacity\", 0).remove();\n  };\n\n  ChartInternal.prototype.redrawRegion = function (withTransition, transition) {\n    var $$ = this,\n        regions = $$.mainRegion;\n    return [(withTransition ? regions.transition(transition) : regions).attr(\"x\", $$.regionX.bind($$)).attr(\"y\", $$.regionY.bind($$)).attr(\"width\", $$.regionWidth.bind($$)).attr(\"height\", $$.regionHeight.bind($$)).style(\"fill-opacity\", function (d) {\n      return isValue(d.opacity) ? d.opacity : 0.1;\n    })];\n  };\n\n  ChartInternal.prototype.regionX = function (d) {\n    var $$ = this,\n        config = $$.config,\n        xPos,\n        yScale = d.axis === 'y' ? $$.y : $$.y2;\n\n    if (d.axis === 'y' || d.axis === 'y2') {\n      xPos = config.axis_rotated ? 'start' in d ? yScale(d.start) : 0 : 0;\n    } else {\n      xPos = config.axis_rotated ? 0 : 'start' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start) : 0;\n    }\n\n    return xPos;\n  };\n\n  ChartInternal.prototype.regionY = function (d) {\n    var $$ = this,\n        config = $$.config,\n        yPos,\n        yScale = d.axis === 'y' ? $$.y : $$.y2;\n\n    if (d.axis === 'y' || d.axis === 'y2') {\n      yPos = config.axis_rotated ? 0 : 'end' in d ? yScale(d.end) : 0;\n    } else {\n      yPos = config.axis_rotated ? 'start' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start) : 0 : 0;\n    }\n\n    return yPos;\n  };\n\n  ChartInternal.prototype.regionWidth = function (d) {\n    var $$ = this,\n        config = $$.config,\n        start = $$.regionX(d),\n        end,\n        yScale = d.axis === 'y' ? $$.y : $$.y2;\n\n    if (d.axis === 'y' || d.axis === 'y2') {\n      end = config.axis_rotated ? 'end' in d ? yScale(d.end) : $$.width : $$.width;\n    } else {\n      end = config.axis_rotated ? $$.width : 'end' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end) : $$.width;\n    }\n\n    return end < start ? 0 : end - start;\n  };\n\n  ChartInternal.prototype.regionHeight = function (d) {\n    var $$ = this,\n        config = $$.config,\n        start = this.regionY(d),\n        end,\n        yScale = d.axis === 'y' ? $$.y : $$.y2;\n\n    if (d.axis === 'y' || d.axis === 'y2') {\n      end = config.axis_rotated ? $$.height : 'start' in d ? yScale(d.start) : $$.height;\n    } else {\n      end = config.axis_rotated ? 'end' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end) : $$.height : $$.height;\n    }\n\n    return end < start ? 0 : end - start;\n  };\n\n  ChartInternal.prototype.isRegionOnX = function (d) {\n    return !d.axis || d.axis === 'x';\n  };\n\n  ChartInternal.prototype.getScale = function (min, max, forTimeseries) {\n    return (forTimeseries ? this.d3.scaleTime() : this.d3.scaleLinear()).range([min, max]);\n  };\n\n  ChartInternal.prototype.getX = function (min, max, domain, offset) {\n    var $$ = this,\n        scale = $$.getScale(min, max, $$.isTimeSeries()),\n        _scale = domain ? scale.domain(domain) : scale,\n        key; // Define customized scale if categorized axis\n\n\n    if ($$.isCategorized()) {\n      offset = offset || function () {\n        return 0;\n      };\n\n      scale = function scale(d, raw) {\n        var v = _scale(d) + offset(d);\n        return raw ? v : Math.ceil(v);\n      };\n    } else {\n      scale = function scale(d, raw) {\n        var v = _scale(d);\n\n        return raw ? v : Math.ceil(v);\n      };\n    } // define functions\n\n\n    for (key in _scale) {\n      scale[key] = _scale[key];\n    }\n\n    scale.orgDomain = function () {\n      return _scale.domain();\n    }; // define custom domain() for categorized axis\n\n\n    if ($$.isCategorized()) {\n      scale.domain = function (domain) {\n        if (!arguments.length) {\n          domain = this.orgDomain();\n          return [domain[0], domain[1] + 1];\n        }\n\n        _scale.domain(domain);\n\n        return scale;\n      };\n    }\n\n    return scale;\n  };\n\n  ChartInternal.prototype.getY = function (min, max, domain) {\n    var scale = this.getScale(min, max, this.isTimeSeriesY());\n\n    if (domain) {\n      scale.domain(domain);\n    }\n\n    return scale;\n  };\n\n  ChartInternal.prototype.getYScale = function (id) {\n    return this.axis.getId(id) === 'y2' ? this.y2 : this.y;\n  };\n\n  ChartInternal.prototype.getSubYScale = function (id) {\n    return this.axis.getId(id) === 'y2' ? this.subY2 : this.subY;\n  };\n\n  ChartInternal.prototype.updateScales = function () {\n    var $$ = this,\n        config = $$.config,\n        forInit = !$$.x; // update edges\n\n    $$.xMin = config.axis_rotated ? 1 : 0;\n    $$.xMax = config.axis_rotated ? $$.height : $$.width;\n    $$.yMin = config.axis_rotated ? 0 : $$.height;\n    $$.yMax = config.axis_rotated ? $$.width : 1;\n    $$.subXMin = $$.xMin;\n    $$.subXMax = $$.xMax;\n    $$.subYMin = config.axis_rotated ? 0 : $$.height2;\n    $$.subYMax = config.axis_rotated ? $$.width2 : 1; // update scales\n\n    $$.x = $$.getX($$.xMin, $$.xMax, forInit ? undefined : $$.x.orgDomain(), function () {\n      return $$.xAxis.tickOffset();\n    });\n    $$.y = $$.getY($$.yMin, $$.yMax, forInit ? config.axis_y_default : $$.y.domain());\n    $$.y2 = $$.getY($$.yMin, $$.yMax, forInit ? config.axis_y2_default : $$.y2.domain());\n    $$.subX = $$.getX($$.xMin, $$.xMax, $$.orgXDomain, function (d) {\n      return d % 1 ? 0 : $$.subXAxis.tickOffset();\n    });\n    $$.subY = $$.getY($$.subYMin, $$.subYMax, forInit ? config.axis_y_default : $$.subY.domain());\n    $$.subY2 = $$.getY($$.subYMin, $$.subYMax, forInit ? config.axis_y2_default : $$.subY2.domain()); // update axes\n\n    $$.xAxisTickFormat = $$.axis.getXAxisTickFormat();\n    $$.xAxisTickValues = $$.axis.getXAxisTickValues();\n    $$.yAxisTickValues = $$.axis.getYAxisTickValues();\n    $$.y2AxisTickValues = $$.axis.getY2AxisTickValues();\n    $$.xAxis = $$.axis.getXAxis($$.x, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues, config.axis_x_tick_outer);\n    $$.subXAxis = $$.axis.getXAxis($$.subX, $$.subXOrient, $$.xAxisTickFormat, $$.xAxisTickValues, config.axis_x_tick_outer);\n    $$.yAxis = $$.axis.getYAxis($$.y, $$.yOrient, config.axis_y_tick_format, $$.yAxisTickValues, config.axis_y_tick_outer);\n    $$.y2Axis = $$.axis.getYAxis($$.y2, $$.y2Orient, config.axis_y2_tick_format, $$.y2AxisTickValues, config.axis_y2_tick_outer); // Set initialized scales to brush and zoom\n\n    if (!forInit) {\n      if ($$.brush) {\n        $$.brush.updateScale($$.subX);\n      }\n    } // update for arc\n\n\n    if ($$.updateArc) {\n      $$.updateArc();\n    }\n  };\n\n  ChartInternal.prototype.selectPoint = function (target, d, i) {\n    var $$ = this,\n        config = $$.config,\n        cx = (config.axis_rotated ? $$.circleY : $$.circleX).bind($$),\n        cy = (config.axis_rotated ? $$.circleX : $$.circleY).bind($$),\n        r = $$.pointSelectR.bind($$);\n    config.data_onselected.call($$.api, d, target.node()); // add selected-circle on low layer g\n\n    $$.main.select('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(d.id)).selectAll('.' + CLASS.selectedCircle + '-' + i).data([d]).enter().append('circle').attr(\"class\", function () {\n      return $$.generateClass(CLASS.selectedCircle, i);\n    }).attr(\"cx\", cx).attr(\"cy\", cy).attr(\"stroke\", function () {\n      return $$.color(d);\n    }).attr(\"r\", function (d) {\n      return $$.pointSelectR(d) * 1.4;\n    }).transition().duration(100).attr(\"r\", r);\n  };\n\n  ChartInternal.prototype.unselectPoint = function (target, d, i) {\n    var $$ = this;\n    $$.config.data_onunselected.call($$.api, d, target.node()); // remove selected-circle from low layer g\n\n    $$.main.select('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(d.id)).selectAll('.' + CLASS.selectedCircle + '-' + i).transition().duration(100).attr('r', 0).remove();\n  };\n\n  ChartInternal.prototype.togglePoint = function (selected, target, d, i) {\n    selected ? this.selectPoint(target, d, i) : this.unselectPoint(target, d, i);\n  };\n\n  ChartInternal.prototype.selectPath = function (target, d) {\n    var $$ = this;\n    $$.config.data_onselected.call($$, d, target.node());\n\n    if ($$.config.interaction_brighten) {\n      target.transition().duration(100).style(\"fill\", function () {\n        return $$.d3.rgb($$.color(d)).brighter(0.75);\n      });\n    }\n  };\n\n  ChartInternal.prototype.unselectPath = function (target, d) {\n    var $$ = this;\n    $$.config.data_onunselected.call($$, d, target.node());\n\n    if ($$.config.interaction_brighten) {\n      target.transition().duration(100).style(\"fill\", function () {\n        return $$.color(d);\n      });\n    }\n  };\n\n  ChartInternal.prototype.togglePath = function (selected, target, d, i) {\n    selected ? this.selectPath(target, d, i) : this.unselectPath(target, d, i);\n  };\n\n  ChartInternal.prototype.getToggle = function (that, d) {\n    var $$ = this,\n        toggle;\n\n    if (that.nodeName === 'circle') {\n      if ($$.isStepType(d)) {\n        // circle is hidden in step chart, so treat as within the click area\n        toggle = function toggle() {}; // TODO: how to select step chart?\n\n      } else {\n        toggle = $$.togglePoint;\n      }\n    } else if (that.nodeName === 'path') {\n      toggle = $$.togglePath;\n    }\n\n    return toggle;\n  };\n\n  ChartInternal.prototype.toggleShape = function (that, d, i) {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config,\n        shape = d3.select(that),\n        isSelected = shape.classed(CLASS.SELECTED),\n        toggle = $$.getToggle(that, d).bind($$);\n\n    if (config.data_selection_enabled && config.data_selection_isselectable(d)) {\n      if (!config.data_selection_multiple) {\n        $$.main.selectAll('.' + CLASS.shapes + (config.data_selection_grouped ? $$.getTargetSelectorSuffix(d.id) : \"\")).selectAll('.' + CLASS.shape).each(function (d, i) {\n          var shape = d3.select(this);\n\n          if (shape.classed(CLASS.SELECTED)) {\n            toggle(false, shape.classed(CLASS.SELECTED, false), d, i);\n          }\n        });\n      }\n\n      shape.classed(CLASS.SELECTED, !isSelected);\n      toggle(!isSelected, shape, d, i);\n    }\n  };\n\n  ChartInternal.prototype.initBar = function () {\n    var $$ = this;\n    $$.main.select('.' + CLASS.chart).append(\"g\").attr(\"class\", CLASS.chartBars);\n  };\n\n  ChartInternal.prototype.updateTargetsForBar = function (targets) {\n    var $$ = this,\n        config = $$.config,\n        mainBars,\n        mainBarEnter,\n        classChartBar = $$.classChartBar.bind($$),\n        classBars = $$.classBars.bind($$),\n        classFocus = $$.classFocus.bind($$);\n    mainBars = $$.main.select('.' + CLASS.chartBars).selectAll('.' + CLASS.chartBar).data(targets).attr('class', function (d) {\n      return classChartBar(d) + classFocus(d);\n    });\n    mainBarEnter = mainBars.enter().append('g').attr('class', classChartBar).style(\"pointer-events\", \"none\"); // Bars for each data\n\n    mainBarEnter.append('g').attr(\"class\", classBars).style(\"cursor\", function (d) {\n      return config.data_selection_isselectable(d) ? \"pointer\" : null;\n    });\n  };\n\n  ChartInternal.prototype.updateBar = function (durationForExit) {\n    var $$ = this,\n        barData = $$.barData.bind($$),\n        classBar = $$.classBar.bind($$),\n        initialOpacity = $$.initialOpacity.bind($$),\n        color = function color(d) {\n      return $$.color(d.id);\n    };\n\n    var mainBar = $$.main.selectAll('.' + CLASS.bars).selectAll('.' + CLASS.bar).data(barData);\n    var mainBarEnter = mainBar.enter().append('path').attr(\"class\", classBar).style(\"stroke\", color).style(\"fill\", color);\n    $$.mainBar = mainBarEnter.merge(mainBar).style(\"opacity\", initialOpacity);\n    mainBar.exit().transition().duration(durationForExit).style(\"opacity\", 0);\n  };\n\n  ChartInternal.prototype.redrawBar = function (drawBar, withTransition, transition) {\n    return [(withTransition ? this.mainBar.transition(transition) : this.mainBar).attr('d', drawBar).style(\"stroke\", this.color).style(\"fill\", this.color).style(\"opacity\", 1)];\n  };\n\n  ChartInternal.prototype.getBarW = function (axis, barTargetsNum) {\n    var $$ = this,\n        config = $$.config,\n        w = typeof config.bar_width === 'number' ? config.bar_width : barTargetsNum ? axis.tickInterval() * config.bar_width_ratio / barTargetsNum : 0;\n    return config.bar_width_max && w > config.bar_width_max ? config.bar_width_max : w;\n  };\n\n  ChartInternal.prototype.getBars = function (i, id) {\n    var $$ = this;\n    return (id ? $$.main.selectAll('.' + CLASS.bars + $$.getTargetSelectorSuffix(id)) : $$.main).selectAll('.' + CLASS.bar + (isValue(i) ? '-' + i : ''));\n  };\n\n  ChartInternal.prototype.expandBars = function (i, id, reset) {\n    var $$ = this;\n\n    if (reset) {\n      $$.unexpandBars();\n    }\n\n    $$.getBars(i, id).classed(CLASS.EXPANDED, true);\n  };\n\n  ChartInternal.prototype.unexpandBars = function (i) {\n    var $$ = this;\n    $$.getBars(i).classed(CLASS.EXPANDED, false);\n  };\n\n  ChartInternal.prototype.generateDrawBar = function (barIndices, isSub) {\n    var $$ = this,\n        config = $$.config,\n        getPoints = $$.generateGetBarPoints(barIndices, isSub);\n    return function (d, i) {\n      // 4 points that make a bar\n      var points = getPoints(d, i); // switch points if axis is rotated, not applicable for sub chart\n\n      var indexX = config.axis_rotated ? 1 : 0;\n      var indexY = config.axis_rotated ? 0 : 1;\n      var path = 'M ' + points[0][indexX] + ',' + points[0][indexY] + ' ' + 'L' + points[1][indexX] + ',' + points[1][indexY] + ' ' + 'L' + points[2][indexX] + ',' + points[2][indexY] + ' ' + 'L' + points[3][indexX] + ',' + points[3][indexY] + ' ' + 'z';\n      return path;\n    };\n  };\n\n  ChartInternal.prototype.generateGetBarPoints = function (barIndices, isSub) {\n    var $$ = this,\n        axis = isSub ? $$.subXAxis : $$.xAxis,\n        barTargetsNum = barIndices.__max__ + 1,\n        barW = $$.getBarW(axis, barTargetsNum),\n        barX = $$.getShapeX(barW, barTargetsNum, barIndices, !!isSub),\n        barY = $$.getShapeY(!!isSub),\n        barOffset = $$.getShapeOffset($$.isBarType, barIndices, !!isSub),\n        barSpaceOffset = barW * ($$.config.bar_space / 2),\n        yScale = isSub ? $$.getSubYScale : $$.getYScale;\n    return function (d, i) {\n      var y0 = yScale.call($$, d.id)(0),\n          offset = barOffset(d, i) || y0,\n          // offset is for stacked bar chart\n      posX = barX(d),\n          posY = barY(d); // fix posY not to overflow opposite quadrant\n\n      if ($$.config.axis_rotated) {\n        if (0 < d.value && posY < y0 || d.value < 0 && y0 < posY) {\n          posY = y0;\n        }\n      } // 4 points that make a bar\n\n\n      return [[posX + barSpaceOffset, offset], [posX + barSpaceOffset, posY - (y0 - offset)], [posX + barW - barSpaceOffset, posY - (y0 - offset)], [posX + barW - barSpaceOffset, offset]];\n    };\n  };\n\n  ChartInternal.prototype.isWithinBar = function (mouse, that) {\n    var box = that.getBoundingClientRect(),\n        seg0 = that.pathSegList.getItem(0),\n        seg1 = that.pathSegList.getItem(1),\n        x = Math.min(seg0.x, seg1.x),\n        y = Math.min(seg0.y, seg1.y),\n        w = box.width,\n        h = box.height,\n        offset = 2,\n        sx = x - offset,\n        ex = x + w + offset,\n        sy = y + h + offset,\n        ey = y - offset;\n    return sx < mouse[0] && mouse[0] < ex && ey < mouse[1] && mouse[1] < sy;\n  };\n\n  ChartInternal.prototype.getShapeIndices = function (typeFilter) {\n    var $$ = this,\n        config = $$.config,\n        indices = {},\n        i = 0,\n        j,\n        k;\n    $$.filterTargetsToShow($$.data.targets.filter(typeFilter, $$)).forEach(function (d) {\n      for (j = 0; j < config.data_groups.length; j++) {\n        if (config.data_groups[j].indexOf(d.id) < 0) {\n          continue;\n        }\n\n        for (k = 0; k < config.data_groups[j].length; k++) {\n          if (config.data_groups[j][k] in indices) {\n            indices[d.id] = indices[config.data_groups[j][k]];\n            break;\n          }\n        }\n      }\n\n      if (isUndefined(indices[d.id])) {\n        indices[d.id] = i++;\n      }\n    });\n    indices.__max__ = i - 1;\n    return indices;\n  };\n\n  ChartInternal.prototype.getShapeX = function (offset, targetsNum, indices, isSub) {\n    var $$ = this,\n        scale = isSub ? $$.subX : $$.x;\n    return function (d) {\n      var index = d.id in indices ? indices[d.id] : 0;\n      return d.x || d.x === 0 ? scale(d.x) - offset * (targetsNum / 2 - index) : 0;\n    };\n  };\n\n  ChartInternal.prototype.getShapeY = function (isSub) {\n    var $$ = this;\n    return function (d) {\n      var scale = isSub ? $$.getSubYScale(d.id) : $$.getYScale(d.id);\n      return scale(d.value);\n    };\n  };\n\n  ChartInternal.prototype.getShapeOffset = function (typeFilter, indices, isSub) {\n    var $$ = this,\n        targets = $$.orderTargets($$.filterTargetsToShow($$.data.targets.filter(typeFilter, $$))),\n        targetIds = targets.map(function (t) {\n      return t.id;\n    });\n    return function (d, i) {\n      var scale = isSub ? $$.getSubYScale(d.id) : $$.getYScale(d.id),\n          y0 = scale(0),\n          offset = y0;\n      targets.forEach(function (t) {\n        var values = $$.isStepType(d) ? $$.convertValuesToStep(t.values) : t.values;\n\n        if (t.id === d.id || indices[t.id] !== indices[d.id]) {\n          return;\n        }\n\n        if (targetIds.indexOf(t.id) < targetIds.indexOf(d.id)) {\n          // check if the x values line up\n          if (typeof values[i] === 'undefined' || +values[i].x !== +d.x) {\n            // \"+\" for timeseries\n            // if not, try to find the value that does line up\n            i = -1;\n            values.forEach(function (v, j) {\n              if (v.x === d.x) {\n                i = j;\n              }\n            });\n          }\n\n          if (i in values && values[i].value * d.value >= 0) {\n            offset += scale(values[i].value) - y0;\n          }\n        }\n      });\n      return offset;\n    };\n  };\n\n  ChartInternal.prototype.isWithinShape = function (that, d) {\n    var $$ = this,\n        shape = $$.d3.select(that),\n        isWithin;\n\n    if (!$$.isTargetToShow(d.id)) {\n      isWithin = false;\n    } else if (that.nodeName === 'circle') {\n      isWithin = $$.isStepType(d) ? $$.isWithinStep(that, $$.getYScale(d.id)(d.value)) : $$.isWithinCircle(that, $$.pointSelectR(d) * 1.5);\n    } else if (that.nodeName === 'path') {\n      isWithin = shape.classed(CLASS.bar) ? $$.isWithinBar($$.d3.mouse(that), that) : true;\n    }\n\n    return isWithin;\n  };\n\n  ChartInternal.prototype.getInterpolate = function (d) {\n    var $$ = this,\n        d3 = $$.d3,\n        types = {\n      'linear': d3.curveLinear,\n      'linear-closed': d3.curveLinearClosed,\n      'basis': d3.curveBasis,\n      'basis-open': d3.curveBasisOpen,\n      'basis-closed': d3.curveBasisClosed,\n      'bundle': d3.curveBundle,\n      'cardinal': d3.curveCardinal,\n      'cardinal-open': d3.curveCardinalOpen,\n      'cardinal-closed': d3.curveCardinalClosed,\n      'monotone': d3.curveMonotoneX,\n      'step': d3.curveStep,\n      'step-before': d3.curveStepBefore,\n      'step-after': d3.curveStepAfter\n    },\n        type;\n\n    if ($$.isSplineType(d)) {\n      type = types[$$.config.spline_interpolation_type] || types.cardinal;\n    } else if ($$.isStepType(d)) {\n      type = types[$$.config.line_step_type];\n    } else {\n      type = types.linear;\n    }\n\n    return type;\n  };\n\n  ChartInternal.prototype.initLine = function () {\n    var $$ = this;\n    $$.main.select('.' + CLASS.chart).append(\"g\").attr(\"class\", CLASS.chartLines);\n  };\n\n  ChartInternal.prototype.updateTargetsForLine = function (targets) {\n    var $$ = this,\n        config = $$.config,\n        mainLines,\n        mainLineEnter,\n        classChartLine = $$.classChartLine.bind($$),\n        classLines = $$.classLines.bind($$),\n        classAreas = $$.classAreas.bind($$),\n        classCircles = $$.classCircles.bind($$),\n        classFocus = $$.classFocus.bind($$);\n    mainLines = $$.main.select('.' + CLASS.chartLines).selectAll('.' + CLASS.chartLine).data(targets).attr('class', function (d) {\n      return classChartLine(d) + classFocus(d);\n    });\n    mainLineEnter = mainLines.enter().append('g').attr('class', classChartLine).style('opacity', 0).style(\"pointer-events\", \"none\"); // Lines for each data\n\n    mainLineEnter.append('g').attr(\"class\", classLines); // Areas\n\n    mainLineEnter.append('g').attr('class', classAreas); // Circles for each data point on lines\n\n    mainLineEnter.append('g').attr(\"class\", function (d) {\n      return $$.generateClass(CLASS.selectedCircles, d.id);\n    });\n    mainLineEnter.append('g').attr(\"class\", classCircles).style(\"cursor\", function (d) {\n      return config.data_selection_isselectable(d) ? \"pointer\" : null;\n    }); // Update date for selected circles\n\n    targets.forEach(function (t) {\n      $$.main.selectAll('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(t.id)).selectAll('.' + CLASS.selectedCircle).each(function (d) {\n        d.value = t.values[d.index].value;\n      });\n    }); // MEMO: can not keep same color...\n    //mainLineUpdate.exit().remove();\n  };\n\n  ChartInternal.prototype.updateLine = function (durationForExit) {\n    var $$ = this;\n    var mainLine = $$.main.selectAll('.' + CLASS.lines).selectAll('.' + CLASS.line).data($$.lineData.bind($$));\n    var mainLineEnter = mainLine.enter().append('path').attr('class', $$.classLine.bind($$)).style(\"stroke\", $$.color);\n    $$.mainLine = mainLineEnter.merge(mainLine).style(\"opacity\", $$.initialOpacity.bind($$)).style('shape-rendering', function (d) {\n      return $$.isStepType(d) ? 'crispEdges' : '';\n    }).attr('transform', null);\n    mainLine.exit().transition().duration(durationForExit).style('opacity', 0);\n  };\n\n  ChartInternal.prototype.redrawLine = function (drawLine, withTransition, transition) {\n    return [(withTransition ? this.mainLine.transition(transition) : this.mainLine).attr(\"d\", drawLine).style(\"stroke\", this.color).style(\"opacity\", 1)];\n  };\n\n  ChartInternal.prototype.generateDrawLine = function (lineIndices, isSub) {\n    var $$ = this,\n        config = $$.config,\n        line = $$.d3.line(),\n        getPoints = $$.generateGetLinePoints(lineIndices, isSub),\n        yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale,\n        xValue = function xValue(d) {\n      return (isSub ? $$.subxx : $$.xx).call($$, d);\n    },\n        yValue = function yValue(d, i) {\n      return config.data_groups.length > 0 ? getPoints(d, i)[0][1] : yScaleGetter.call($$, d.id)(d.value);\n    };\n\n    line = config.axis_rotated ? line.x(yValue).y(xValue) : line.x(xValue).y(yValue);\n\n    if (!config.line_connectNull) {\n      line = line.defined(function (d) {\n        return d.value != null;\n      });\n    }\n\n    return function (d) {\n      var values = config.line_connectNull ? $$.filterRemoveNull(d.values) : d.values,\n          x = isSub ? $$.subX : $$.x,\n          y = yScaleGetter.call($$, d.id),\n          x0 = 0,\n          y0 = 0,\n          path;\n\n      if ($$.isLineType(d)) {\n        if (config.data_regions[d.id]) {\n          path = $$.lineWithRegions(values, x, y, config.data_regions[d.id]);\n        } else {\n          if ($$.isStepType(d)) {\n            values = $$.convertValuesToStep(values);\n          }\n\n          path = line.curve($$.getInterpolate(d))(values);\n        }\n      } else {\n        if (values[0]) {\n          x0 = x(values[0].x);\n          y0 = y(values[0].value);\n        }\n\n        path = config.axis_rotated ? \"M \" + y0 + \" \" + x0 : \"M \" + x0 + \" \" + y0;\n      }\n\n      return path ? path : \"M 0 0\";\n    };\n  };\n\n  ChartInternal.prototype.generateGetLinePoints = function (lineIndices, isSub) {\n    // partial duplication of generateGetBarPoints\n    var $$ = this,\n        config = $$.config,\n        lineTargetsNum = lineIndices.__max__ + 1,\n        x = $$.getShapeX(0, lineTargetsNum, lineIndices, !!isSub),\n        y = $$.getShapeY(!!isSub),\n        lineOffset = $$.getShapeOffset($$.isLineType, lineIndices, !!isSub),\n        yScale = isSub ? $$.getSubYScale : $$.getYScale;\n    return function (d, i) {\n      var y0 = yScale.call($$, d.id)(0),\n          offset = lineOffset(d, i) || y0,\n          // offset is for stacked area chart\n      posX = x(d),\n          posY = y(d); // fix posY not to overflow opposite quadrant\n\n      if (config.axis_rotated) {\n        if (0 < d.value && posY < y0 || d.value < 0 && y0 < posY) {\n          posY = y0;\n        }\n      } // 1 point that marks the line position\n\n\n      return [[posX, posY - (y0 - offset)], [posX, posY - (y0 - offset)], // needed for compatibility\n      [posX, posY - (y0 - offset)], // needed for compatibility\n      [posX, posY - (y0 - offset)] // needed for compatibility\n      ];\n    };\n  };\n\n  ChartInternal.prototype.lineWithRegions = function (d, x, y, _regions) {\n    var $$ = this,\n        config = $$.config,\n        prev = -1,\n        i,\n        j,\n        s = \"M\",\n        sWithRegion,\n        xp,\n        yp,\n        dx,\n        dy,\n        dd,\n        diff,\n        diffx2,\n        xOffset = $$.isCategorized() ? 0.5 : 0,\n        xValue,\n        yValue,\n        regions = [];\n\n    function isWithinRegions(x, regions) {\n      var i;\n\n      for (i = 0; i < regions.length; i++) {\n        if (regions[i].start < x && x <= regions[i].end) {\n          return true;\n        }\n      }\n\n      return false;\n    } // Check start/end of regions\n\n\n    if (isDefined(_regions)) {\n      for (i = 0; i < _regions.length; i++) {\n        regions[i] = {};\n\n        if (isUndefined(_regions[i].start)) {\n          regions[i].start = d[0].x;\n        } else {\n          regions[i].start = $$.isTimeSeries() ? $$.parseDate(_regions[i].start) : _regions[i].start;\n        }\n\n        if (isUndefined(_regions[i].end)) {\n          regions[i].end = d[d.length - 1].x;\n        } else {\n          regions[i].end = $$.isTimeSeries() ? $$.parseDate(_regions[i].end) : _regions[i].end;\n        }\n      }\n    } // Set scales\n\n\n    xValue = config.axis_rotated ? function (d) {\n      return y(d.value);\n    } : function (d) {\n      return x(d.x);\n    };\n    yValue = config.axis_rotated ? function (d) {\n      return x(d.x);\n    } : function (d) {\n      return y(d.value);\n    }; // Define svg generator function for region\n\n    function generateM(points) {\n      return 'M' + points[0][0] + ' ' + points[0][1] + ' ' + points[1][0] + ' ' + points[1][1];\n    }\n\n    if ($$.isTimeSeries()) {\n      sWithRegion = function sWithRegion(d0, d1, j, diff) {\n        var x0 = d0.x.getTime(),\n            x_diff = d1.x - d0.x,\n            xv0 = new Date(x0 + x_diff * j),\n            xv1 = new Date(x0 + x_diff * (j + diff)),\n            points;\n\n        if (config.axis_rotated) {\n          points = [[y(yp(j)), x(xv0)], [y(yp(j + diff)), x(xv1)]];\n        } else {\n          points = [[x(xv0), y(yp(j))], [x(xv1), y(yp(j + diff))]];\n        }\n\n        return generateM(points);\n      };\n    } else {\n      sWithRegion = function sWithRegion(d0, d1, j, diff) {\n        var points;\n\n        if (config.axis_rotated) {\n          points = [[y(yp(j), true), x(xp(j))], [y(yp(j + diff), true), x(xp(j + diff))]];\n        } else {\n          points = [[x(xp(j), true), y(yp(j))], [x(xp(j + diff), true), y(yp(j + diff))]];\n        }\n\n        return generateM(points);\n      };\n    } // Generate\n\n\n    for (i = 0; i < d.length; i++) {\n      // Draw as normal\n      if (isUndefined(regions) || !isWithinRegions(d[i].x, regions)) {\n        s += \" \" + xValue(d[i]) + \" \" + yValue(d[i]);\n      } // Draw with region // TODO: Fix for horizotal charts\n      else {\n          xp = $$.getScale(d[i - 1].x + xOffset, d[i].x + xOffset, $$.isTimeSeries());\n          yp = $$.getScale(d[i - 1].value, d[i].value);\n          dx = x(d[i].x) - x(d[i - 1].x);\n          dy = y(d[i].value) - y(d[i - 1].value);\n          dd = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n          diff = 2 / dd;\n          diffx2 = diff * 2;\n\n          for (j = diff; j <= 1; j += diffx2) {\n            s += sWithRegion(d[i - 1], d[i], j, diff);\n          }\n        }\n\n      prev = d[i].x;\n    }\n\n    return s;\n  };\n\n  ChartInternal.prototype.updateArea = function (durationForExit) {\n    var $$ = this,\n        d3 = $$.d3;\n    var mainArea = $$.main.selectAll('.' + CLASS.areas).selectAll('.' + CLASS.area).data($$.lineData.bind($$));\n    var mainAreaEnter = mainArea.enter().append('path').attr(\"class\", $$.classArea.bind($$)).style(\"fill\", $$.color).style(\"opacity\", function () {\n      $$.orgAreaOpacity = +d3.select(this).style('opacity');\n      return 0;\n    });\n    $$.mainArea = mainAreaEnter.merge(mainArea).style(\"opacity\", $$.orgAreaOpacity);\n    mainArea.exit().transition().duration(durationForExit).style('opacity', 0);\n  };\n\n  ChartInternal.prototype.redrawArea = function (drawArea, withTransition, transition) {\n    return [(withTransition ? this.mainArea.transition(transition) : this.mainArea).attr(\"d\", drawArea).style(\"fill\", this.color).style(\"opacity\", this.orgAreaOpacity)];\n  };\n\n  ChartInternal.prototype.generateDrawArea = function (areaIndices, isSub) {\n    var $$ = this,\n        config = $$.config,\n        area = $$.d3.area(),\n        getPoints = $$.generateGetAreaPoints(areaIndices, isSub),\n        yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale,\n        xValue = function xValue(d) {\n      return (isSub ? $$.subxx : $$.xx).call($$, d);\n    },\n        value0 = function value0(d, i) {\n      return config.data_groups.length > 0 ? getPoints(d, i)[0][1] : yScaleGetter.call($$, d.id)($$.getAreaBaseValue(d.id));\n    },\n        value1 = function value1(d, i) {\n      return config.data_groups.length > 0 ? getPoints(d, i)[1][1] : yScaleGetter.call($$, d.id)(d.value);\n    };\n\n    area = config.axis_rotated ? area.x0(value0).x1(value1).y(xValue) : area.x(xValue).y0(config.area_above ? 0 : value0).y1(value1);\n\n    if (!config.line_connectNull) {\n      area = area.defined(function (d) {\n        return d.value !== null;\n      });\n    }\n\n    return function (d) {\n      var values = config.line_connectNull ? $$.filterRemoveNull(d.values) : d.values,\n          x0 = 0,\n          y0 = 0,\n          path;\n\n      if ($$.isAreaType(d)) {\n        if ($$.isStepType(d)) {\n          values = $$.convertValuesToStep(values);\n        }\n\n        path = area.curve($$.getInterpolate(d))(values);\n      } else {\n        if (values[0]) {\n          x0 = $$.x(values[0].x);\n          y0 = $$.getYScale(d.id)(values[0].value);\n        }\n\n        path = config.axis_rotated ? \"M \" + y0 + \" \" + x0 : \"M \" + x0 + \" \" + y0;\n      }\n\n      return path ? path : \"M 0 0\";\n    };\n  };\n\n  ChartInternal.prototype.getAreaBaseValue = function () {\n    return 0;\n  };\n\n  ChartInternal.prototype.generateGetAreaPoints = function (areaIndices, isSub) {\n    // partial duplication of generateGetBarPoints\n    var $$ = this,\n        config = $$.config,\n        areaTargetsNum = areaIndices.__max__ + 1,\n        x = $$.getShapeX(0, areaTargetsNum, areaIndices, !!isSub),\n        y = $$.getShapeY(!!isSub),\n        areaOffset = $$.getShapeOffset($$.isAreaType, areaIndices, !!isSub),\n        yScale = isSub ? $$.getSubYScale : $$.getYScale;\n    return function (d, i) {\n      var y0 = yScale.call($$, d.id)(0),\n          offset = areaOffset(d, i) || y0,\n          // offset is for stacked area chart\n      posX = x(d),\n          posY = y(d); // fix posY not to overflow opposite quadrant\n\n      if (config.axis_rotated) {\n        if (0 < d.value && posY < y0 || d.value < 0 && y0 < posY) {\n          posY = y0;\n        }\n      } // 1 point that marks the area position\n\n\n      return [[posX, offset], [posX, posY - (y0 - offset)], [posX, posY - (y0 - offset)], // needed for compatibility\n      [posX, offset] // needed for compatibility\n      ];\n    };\n  };\n\n  ChartInternal.prototype.updateCircle = function (cx, cy) {\n    var $$ = this;\n    var mainCircle = $$.main.selectAll('.' + CLASS.circles).selectAll('.' + CLASS.circle).data($$.lineOrScatterData.bind($$));\n    var mainCircleEnter = mainCircle.enter().append(\"circle\").attr(\"class\", $$.classCircle.bind($$)).attr(\"cx\", cx).attr(\"cy\", cy).attr(\"r\", $$.pointR.bind($$)).style(\"fill\", $$.color);\n    $$.mainCircle = mainCircleEnter.merge(mainCircle).style(\"opacity\", $$.initialOpacityForCircle.bind($$));\n    mainCircle.exit().style(\"opacity\", 0);\n  };\n\n  ChartInternal.prototype.redrawCircle = function (cx, cy, withTransition, transition) {\n    var $$ = this,\n        selectedCircles = $$.main.selectAll('.' + CLASS.selectedCircle);\n    return [(withTransition ? $$.mainCircle.transition(transition) : $$.mainCircle).style('opacity', this.opacityForCircle.bind($$)).style(\"fill\", $$.color).attr(\"cx\", cx).attr(\"cy\", cy), (withTransition ? selectedCircles.transition(transition) : selectedCircles).attr(\"cx\", cx).attr(\"cy\", cy)];\n  };\n\n  ChartInternal.prototype.circleX = function (d) {\n    return d.x || d.x === 0 ? this.x(d.x) : null;\n  };\n\n  ChartInternal.prototype.updateCircleY = function () {\n    var $$ = this,\n        lineIndices,\n        getPoints;\n\n    if ($$.config.data_groups.length > 0) {\n      lineIndices = $$.getShapeIndices($$.isLineType), getPoints = $$.generateGetLinePoints(lineIndices);\n\n      $$.circleY = function (d, i) {\n        return getPoints(d, i)[0][1];\n      };\n    } else {\n      $$.circleY = function (d) {\n        return $$.getYScale(d.id)(d.value);\n      };\n    }\n  };\n\n  ChartInternal.prototype.getCircles = function (i, id) {\n    var $$ = this;\n    return (id ? $$.main.selectAll('.' + CLASS.circles + $$.getTargetSelectorSuffix(id)) : $$.main).selectAll('.' + CLASS.circle + (isValue(i) ? '-' + i : ''));\n  };\n\n  ChartInternal.prototype.expandCircles = function (i, id, reset) {\n    var $$ = this,\n        r = $$.pointExpandedR.bind($$);\n\n    if (reset) {\n      $$.unexpandCircles();\n    }\n\n    $$.getCircles(i, id).classed(CLASS.EXPANDED, true).attr('r', r);\n  };\n\n  ChartInternal.prototype.unexpandCircles = function (i) {\n    var $$ = this,\n        r = $$.pointR.bind($$);\n    $$.getCircles(i).filter(function () {\n      return $$.d3.select(this).classed(CLASS.EXPANDED);\n    }).classed(CLASS.EXPANDED, false).attr('r', r);\n  };\n\n  ChartInternal.prototype.pointR = function (d) {\n    var $$ = this,\n        config = $$.config;\n    return $$.isStepType(d) ? 0 : isFunction(config.point_r) ? config.point_r(d) : config.point_r;\n  };\n\n  ChartInternal.prototype.pointExpandedR = function (d) {\n    var $$ = this,\n        config = $$.config;\n\n    if (config.point_focus_expand_enabled) {\n      return isFunction(config.point_focus_expand_r) ? config.point_focus_expand_r(d) : config.point_focus_expand_r ? config.point_focus_expand_r : $$.pointR(d) * 1.75;\n    } else {\n      return $$.pointR(d);\n    }\n  };\n\n  ChartInternal.prototype.pointSelectR = function (d) {\n    var $$ = this,\n        config = $$.config;\n    return isFunction(config.point_select_r) ? config.point_select_r(d) : config.point_select_r ? config.point_select_r : $$.pointR(d) * 4;\n  };\n\n  ChartInternal.prototype.isWithinCircle = function (that, r) {\n    var d3 = this.d3,\n        mouse = d3.mouse(that),\n        d3_this = d3.select(that),\n        cx = +d3_this.attr(\"cx\"),\n        cy = +d3_this.attr(\"cy\");\n    return Math.sqrt(Math.pow(cx - mouse[0], 2) + Math.pow(cy - mouse[1], 2)) < r;\n  };\n\n  ChartInternal.prototype.isWithinStep = function (that, y) {\n    return Math.abs(y - this.d3.mouse(that)[1]) < 30;\n  };\n\n  ChartInternal.prototype.getCurrentWidth = function () {\n    var $$ = this,\n        config = $$.config;\n    return config.size_width ? config.size_width : $$.getParentWidth();\n  };\n\n  ChartInternal.prototype.getCurrentHeight = function () {\n    var $$ = this,\n        config = $$.config,\n        h = config.size_height ? config.size_height : $$.getParentHeight();\n    return h > 0 ? h : 320 / ($$.hasType('gauge') && !config.gauge_fullCircle ? 2 : 1);\n  };\n\n  ChartInternal.prototype.getCurrentPaddingTop = function () {\n    var $$ = this,\n        config = $$.config,\n        padding = isValue(config.padding_top) ? config.padding_top : 0;\n\n    if ($$.title && $$.title.node()) {\n      padding += $$.getTitlePadding();\n    }\n\n    return padding;\n  };\n\n  ChartInternal.prototype.getCurrentPaddingBottom = function () {\n    var config = this.config;\n    return isValue(config.padding_bottom) ? config.padding_bottom : 0;\n  };\n\n  ChartInternal.prototype.getCurrentPaddingLeft = function (withoutRecompute) {\n    var $$ = this,\n        config = $$.config;\n\n    if (isValue(config.padding_left)) {\n      return config.padding_left;\n    } else if (config.axis_rotated) {\n      return !config.axis_x_show || config.axis_x_inner ? 1 : Math.max(ceil10($$.getAxisWidthByAxisId('x', withoutRecompute)), 40);\n    } else if (!config.axis_y_show || config.axis_y_inner) {\n      // && !config.axis_rotated\n      return $$.axis.getYAxisLabelPosition().isOuter ? 30 : 1;\n    } else {\n      return ceil10($$.getAxisWidthByAxisId('y', withoutRecompute));\n    }\n  };\n\n  ChartInternal.prototype.getCurrentPaddingRight = function () {\n    var $$ = this,\n        config = $$.config,\n        defaultPadding = 10,\n        legendWidthOnRight = $$.isLegendRight ? $$.getLegendWidth() + 20 : 0;\n\n    if (isValue(config.padding_right)) {\n      return config.padding_right + 1; // 1 is needed not to hide tick line\n    } else if (config.axis_rotated) {\n      return defaultPadding + legendWidthOnRight;\n    } else if (!config.axis_y2_show || config.axis_y2_inner) {\n      // && !config.axis_rotated\n      return 2 + legendWidthOnRight + ($$.axis.getY2AxisLabelPosition().isOuter ? 20 : 0);\n    } else {\n      return ceil10($$.getAxisWidthByAxisId('y2')) + legendWidthOnRight;\n    }\n  };\n\n  ChartInternal.prototype.getParentRectValue = function (key) {\n    var parent = this.selectChart.node(),\n        v;\n\n    while (parent && parent.tagName !== 'BODY') {\n      try {\n        v = parent.getBoundingClientRect()[key];\n      } catch (e) {\n        if (key === 'width') {\n          // In IE in certain cases getBoundingClientRect\n          // will cause an \"unspecified error\"\n          v = parent.offsetWidth;\n        }\n      }\n\n      if (v) {\n        break;\n      }\n\n      parent = parent.parentNode;\n    }\n\n    return v;\n  };\n\n  ChartInternal.prototype.getParentWidth = function () {\n    return this.getParentRectValue('width');\n  };\n\n  ChartInternal.prototype.getParentHeight = function () {\n    return this.getParentRectValue('height');\n  };\n\n  ChartInternal.prototype.getSvgLeft = function (withoutRecompute) {\n    var $$ = this,\n        config = $$.config,\n        hasLeftAxisRect = config.axis_rotated || !config.axis_rotated && !config.axis_y_inner,\n        leftAxisClass = config.axis_rotated ? CLASS.axisX : CLASS.axisY,\n        leftAxis = $$.main.select('.' + leftAxisClass).node(),\n        svgRect = leftAxis && hasLeftAxisRect ? leftAxis.getBoundingClientRect() : {\n      right: 0\n    },\n        chartRect = $$.selectChart.node().getBoundingClientRect(),\n        hasArc = $$.hasArcType(),\n        svgLeft = svgRect.right - chartRect.left - (hasArc ? 0 : $$.getCurrentPaddingLeft(withoutRecompute));\n    return svgLeft > 0 ? svgLeft : 0;\n  };\n\n  ChartInternal.prototype.getAxisWidthByAxisId = function (id, withoutRecompute) {\n    var $$ = this,\n        position = $$.axis.getLabelPositionById(id);\n    return $$.axis.getMaxTickWidth(id, withoutRecompute) + (position.isInner ? 20 : 40);\n  };\n\n  ChartInternal.prototype.getHorizontalAxisHeight = function (axisId) {\n    var $$ = this,\n        config = $$.config,\n        h = 30;\n\n    if (axisId === 'x' && !config.axis_x_show) {\n      return 8;\n    }\n\n    if (axisId === 'x' && config.axis_x_height) {\n      return config.axis_x_height;\n    }\n\n    if (axisId === 'y' && !config.axis_y_show) {\n      return config.legend_show && !$$.isLegendRight && !$$.isLegendInset ? 10 : 1;\n    }\n\n    if (axisId === 'y2' && !config.axis_y2_show) {\n      return $$.rotated_padding_top;\n    } // Calculate x axis height when tick rotated\n\n\n    if (axisId === 'x' && !config.axis_rotated && config.axis_x_tick_rotate) {\n      h = 30 + $$.axis.getMaxTickWidth(axisId) * Math.cos(Math.PI * (90 - Math.abs(config.axis_x_tick_rotate)) / 180);\n    } // Calculate y axis height when tick rotated\n\n\n    if (axisId === 'y' && config.axis_rotated && config.axis_y_tick_rotate) {\n      h = 30 + $$.axis.getMaxTickWidth(axisId) * Math.cos(Math.PI * (90 - Math.abs(config.axis_y_tick_rotate)) / 180);\n    }\n\n    return h + ($$.axis.getLabelPositionById(axisId).isInner ? 0 : 10) + (axisId === 'y2' ? -10 : 0);\n  };\n\n  ChartInternal.prototype.initBrush = function (scale) {\n    var $$ = this,\n        d3 = $$.d3; // TODO: dynamically change brushY/brushX according to axis_rotated.\n\n    $$.brush = ($$.config.axis_rotated ? d3.brushY() : d3.brushX()).on(\"brush\", function () {\n      var event = d3.event.sourceEvent;\n\n      if (event && event.type === \"zoom\") {\n        return;\n      }\n\n      $$.redrawForBrush();\n    }).on(\"end\", function () {\n      var event = d3.event.sourceEvent;\n\n      if (event && event.type === \"zoom\") {\n        return;\n      }\n\n      if ($$.brush.empty() && event && event.type !== 'end') {\n        $$.brush.clear();\n      }\n    });\n\n    $$.brush.updateExtent = function () {\n      var range = this.scale.range(),\n          extent;\n\n      if ($$.config.axis_rotated) {\n        extent = [[0, range[0]], [$$.width2, range[1]]];\n      } else {\n        extent = [[range[0], 0], [range[1], $$.height2]];\n      }\n\n      this.extent(extent);\n      return this;\n    };\n\n    $$.brush.updateScale = function (scale) {\n      this.scale = scale;\n      return this;\n    };\n\n    $$.brush.update = function (scale) {\n      this.updateScale(scale || $$.subX).updateExtent();\n      $$.context.select('.' + CLASS.brush).call(this);\n    };\n\n    $$.brush.clear = function () {\n      $$.context.select('.' + CLASS.brush).call($$.brush.move, null);\n    };\n\n    $$.brush.selection = function () {\n      return d3.brushSelection($$.context.select('.' + CLASS.brush).node());\n    };\n\n    $$.brush.selectionAsValue = function (selectionAsValue, withTransition) {\n      var selection, brush;\n\n      if (selectionAsValue) {\n        if ($$.context) {\n          selection = [this.scale(selectionAsValue[0]), this.scale(selectionAsValue[1])];\n          brush = $$.context.select('.' + CLASS.brush);\n\n          if (withTransition) {\n            brush = brush.transition();\n          }\n\n          $$.brush.move(brush, selection);\n        }\n\n        return [];\n      }\n\n      selection = $$.brush.selection() || [0, 0];\n      return [this.scale.invert(selection[0]), this.scale.invert(selection[1])];\n    };\n\n    $$.brush.empty = function () {\n      var selection = $$.brush.selection();\n      return !selection || selection[0] === selection[1];\n    };\n\n    return $$.brush.updateScale(scale);\n  };\n\n  ChartInternal.prototype.initSubchart = function () {\n    var $$ = this,\n        config = $$.config,\n        context = $$.context = $$.svg.append(\"g\").attr(\"transform\", $$.getTranslate('context')),\n        visibility = config.subchart_show ? 'visible' : 'hidden'; // set style\n\n    context.style('visibility', visibility); // Define g for chart area\n\n    context.append('g').attr(\"clip-path\", $$.clipPathForSubchart).attr('class', CLASS.chart); // Define g for bar chart area\n\n    context.select('.' + CLASS.chart).append(\"g\").attr(\"class\", CLASS.chartBars); // Define g for line chart area\n\n    context.select('.' + CLASS.chart).append(\"g\").attr(\"class\", CLASS.chartLines); // Add extent rect for Brush\n\n    context.append(\"g\").attr(\"clip-path\", $$.clipPath).attr(\"class\", CLASS.brush); // ATTENTION: This must be called AFTER chart added\n    // Add Axis\n\n    $$.axes.subx = context.append(\"g\").attr(\"class\", CLASS.axisX).attr(\"transform\", $$.getTranslate('subx')).attr(\"clip-path\", config.axis_rotated ? \"\" : $$.clipPathForXAxis);\n  };\n\n  ChartInternal.prototype.initSubchartBrush = function () {\n    var $$ = this; // Add extent rect for Brush\n\n    $$.initBrush($$.subX).updateExtent();\n    $$.context.select('.' + CLASS.brush).call($$.brush);\n  };\n\n  ChartInternal.prototype.updateTargetsForSubchart = function (targets) {\n    var $$ = this,\n        context = $$.context,\n        config = $$.config,\n        contextLineEnter,\n        contextLine,\n        contextBarEnter,\n        contextBar,\n        classChartBar = $$.classChartBar.bind($$),\n        classBars = $$.classBars.bind($$),\n        classChartLine = $$.classChartLine.bind($$),\n        classLines = $$.classLines.bind($$),\n        classAreas = $$.classAreas.bind($$);\n\n    if (config.subchart_show) {\n      //-- Bar --//\n      contextBar = context.select('.' + CLASS.chartBars).selectAll('.' + CLASS.chartBar).data(targets);\n      contextBarEnter = contextBar.enter().append('g').style('opacity', 0);\n      contextBarEnter.merge(contextBar).attr('class', classChartBar); // Bars for each data\n\n      contextBarEnter.append('g').attr(\"class\", classBars); //-- Line --//\n\n      contextLine = context.select('.' + CLASS.chartLines).selectAll('.' + CLASS.chartLine).data(targets);\n      contextLineEnter = contextLine.enter().append('g').style('opacity', 0);\n      contextLineEnter.merge(contextLine).attr('class', classChartLine); // Lines for each data\n\n      contextLineEnter.append(\"g\").attr(\"class\", classLines); // Area\n\n      contextLineEnter.append(\"g\").attr(\"class\", classAreas); //-- Brush --//\n\n      context.selectAll('.' + CLASS.brush + ' rect').attr(config.axis_rotated ? \"width\" : \"height\", config.axis_rotated ? $$.width2 : $$.height2);\n    }\n  };\n\n  ChartInternal.prototype.updateBarForSubchart = function (durationForExit) {\n    var $$ = this;\n    var contextBar = $$.context.selectAll('.' + CLASS.bars).selectAll('.' + CLASS.bar).data($$.barData.bind($$));\n    var contextBarEnter = contextBar.enter().append('path').attr(\"class\", $$.classBar.bind($$)).style(\"stroke\", 'none').style(\"fill\", $$.color);\n    contextBar.exit().transition().duration(durationForExit).style('opacity', 0).remove();\n    $$.contextBar = contextBarEnter.merge(contextBar).style(\"opacity\", $$.initialOpacity.bind($$));\n  };\n\n  ChartInternal.prototype.redrawBarForSubchart = function (drawBarOnSub, withTransition, duration) {\n    (withTransition ? this.contextBar.transition(Math.random().toString()).duration(duration) : this.contextBar).attr('d', drawBarOnSub).style('opacity', 1);\n  };\n\n  ChartInternal.prototype.updateLineForSubchart = function (durationForExit) {\n    var $$ = this;\n    var contextLine = $$.context.selectAll('.' + CLASS.lines).selectAll('.' + CLASS.line).data($$.lineData.bind($$));\n    var contextLineEnter = contextLine.enter().append('path').attr('class', $$.classLine.bind($$)).style('stroke', $$.color);\n    contextLine.exit().transition().duration(durationForExit).style('opacity', 0).remove();\n    $$.contextLine = contextLineEnter.merge(contextLine).style(\"opacity\", $$.initialOpacity.bind($$));\n  };\n\n  ChartInternal.prototype.redrawLineForSubchart = function (drawLineOnSub, withTransition, duration) {\n    (withTransition ? this.contextLine.transition(Math.random().toString()).duration(duration) : this.contextLine).attr(\"d\", drawLineOnSub).style('opacity', 1);\n  };\n\n  ChartInternal.prototype.updateAreaForSubchart = function (durationForExit) {\n    var $$ = this,\n        d3 = $$.d3;\n    var contextArea = $$.context.selectAll('.' + CLASS.areas).selectAll('.' + CLASS.area).data($$.lineData.bind($$));\n    var contextAreaEnter = contextArea.enter().append('path').attr(\"class\", $$.classArea.bind($$)).style(\"fill\", $$.color).style(\"opacity\", function () {\n      $$.orgAreaOpacity = +d3.select(this).style('opacity');\n      return 0;\n    });\n    contextArea.exit().transition().duration(durationForExit).style('opacity', 0).remove();\n    $$.contextArea = contextAreaEnter.merge(contextArea).style(\"opacity\", 0);\n  };\n\n  ChartInternal.prototype.redrawAreaForSubchart = function (drawAreaOnSub, withTransition, duration) {\n    (withTransition ? this.contextArea.transition(Math.random().toString()).duration(duration) : this.contextArea).attr(\"d\", drawAreaOnSub).style(\"fill\", this.color).style(\"opacity\", this.orgAreaOpacity);\n  };\n\n  ChartInternal.prototype.redrawSubchart = function (withSubchart, transitions, duration, durationForExit, areaIndices, barIndices, lineIndices) {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config,\n        drawAreaOnSub,\n        drawBarOnSub,\n        drawLineOnSub;\n    $$.context.style('visibility', config.subchart_show ? 'visible' : 'hidden'); // subchart\n\n    if (config.subchart_show) {\n      // reflect main chart to extent on subchart if zoomed\n      if (d3.event && d3.event.type === 'zoom') {\n        $$.brush.selectionAsValue($$.x.orgDomain());\n      } // update subchart elements if needed\n\n\n      if (withSubchart) {\n        // extent rect\n        if (!$$.brush.empty()) {\n          $$.brush.selectionAsValue($$.x.orgDomain());\n        } // setup drawer - MEMO: this must be called after axis updated\n\n\n        drawAreaOnSub = $$.generateDrawArea(areaIndices, true);\n        drawBarOnSub = $$.generateDrawBar(barIndices, true);\n        drawLineOnSub = $$.generateDrawLine(lineIndices, true);\n        $$.updateBarForSubchart(duration);\n        $$.updateLineForSubchart(duration);\n        $$.updateAreaForSubchart(duration);\n        $$.redrawBarForSubchart(drawBarOnSub, duration, duration);\n        $$.redrawLineForSubchart(drawLineOnSub, duration, duration);\n        $$.redrawAreaForSubchart(drawAreaOnSub, duration, duration);\n      }\n    }\n  };\n\n  ChartInternal.prototype.redrawForBrush = function () {\n    var $$ = this,\n        x = $$.x,\n        d3 = $$.d3,\n        s;\n    $$.redraw({\n      withTransition: false,\n      withY: $$.config.zoom_rescale,\n      withSubchart: false,\n      withUpdateXDomain: true,\n      withEventRect: false,\n      withDimension: false\n    }); // update zoom transation binded to event rect\n\n    s = d3.event.selection || $$.brush.scale.range();\n    $$.main.select('.' + CLASS.eventRect).call($$.zoom.transform, d3.zoomIdentity.scale($$.width / (s[1] - s[0])).translate(-s[0], 0));\n    $$.config.subchart_onbrush.call($$.api, x.orgDomain());\n  };\n\n  ChartInternal.prototype.transformContext = function (withTransition, transitions) {\n    var $$ = this,\n        subXAxis;\n\n    if (transitions && transitions.axisSubX) {\n      subXAxis = transitions.axisSubX;\n    } else {\n      subXAxis = $$.context.select('.' + CLASS.axisX);\n\n      if (withTransition) {\n        subXAxis = subXAxis.transition();\n      }\n    }\n\n    $$.context.attr(\"transform\", $$.getTranslate('context'));\n    subXAxis.attr(\"transform\", $$.getTranslate('subx'));\n  };\n\n  ChartInternal.prototype.getDefaultSelection = function () {\n    var $$ = this,\n        config = $$.config,\n        selection = isFunction(config.axis_x_selection) ? config.axis_x_selection($$.getXDomain($$.data.targets)) : config.axis_x_selection;\n\n    if ($$.isTimeSeries()) {\n      selection = [$$.parseDate(selection[0]), $$.parseDate(selection[1])];\n    }\n\n    return selection;\n  };\n\n  ChartInternal.prototype.initText = function () {\n    var $$ = this;\n    $$.main.select('.' + CLASS.chart).append(\"g\").attr(\"class\", CLASS.chartTexts);\n    $$.mainText = $$.d3.selectAll([]);\n  };\n\n  ChartInternal.prototype.updateTargetsForText = function (targets) {\n    var $$ = this,\n        classChartText = $$.classChartText.bind($$),\n        classTexts = $$.classTexts.bind($$),\n        classFocus = $$.classFocus.bind($$);\n    var mainText = $$.main.select('.' + CLASS.chartTexts).selectAll('.' + CLASS.chartText).data(targets);\n    var mainTextEnter = mainText.enter().append('g').attr('class', classChartText).style('opacity', 0).style(\"pointer-events\", \"none\");\n    mainTextEnter.append('g').attr('class', classTexts);\n    mainTextEnter.merge(mainText).attr('class', function (d) {\n      return classChartText(d) + classFocus(d);\n    });\n  };\n\n  ChartInternal.prototype.updateText = function (xForText, yForText, durationForExit) {\n    var $$ = this,\n        config = $$.config,\n        barOrLineData = $$.barOrLineData.bind($$),\n        classText = $$.classText.bind($$);\n    var mainText = $$.main.selectAll('.' + CLASS.texts).selectAll('.' + CLASS.text).data(barOrLineData);\n    var mainTextEnter = mainText.enter().append('text').attr(\"class\", classText).attr('text-anchor', function (d) {\n      return config.axis_rotated ? d.value < 0 ? 'end' : 'start' : 'middle';\n    }).style(\"stroke\", 'none').attr('x', xForText).attr('y', yForText).style(\"fill\", function (d) {\n      return $$.color(d);\n    }).style(\"fill-opacity\", 0);\n    $$.mainText = mainTextEnter.merge(mainText).text(function (d, i, j) {\n      return $$.dataLabelFormat(d.id)(d.value, d.id, i, j);\n    });\n    mainText.exit().transition().duration(durationForExit).style('fill-opacity', 0).remove();\n  };\n\n  ChartInternal.prototype.redrawText = function (xForText, yForText, forFlow, withTransition, transition) {\n    return [(withTransition ? this.mainText.transition(transition) : this.mainText).attr('x', xForText).attr('y', yForText).style(\"fill\", this.color).style(\"fill-opacity\", forFlow ? 0 : this.opacityForText.bind(this))];\n  };\n\n  ChartInternal.prototype.getTextRect = function (text, cls, element) {\n    var dummy = this.d3.select('body').append('div').classed('c3', true),\n        svg = dummy.append(\"svg\").style('visibility', 'hidden').style('position', 'fixed').style('top', 0).style('left', 0),\n        font = this.d3.select(element).style('font'),\n        rect;\n    svg.selectAll('.dummy').data([text]).enter().append('text').classed(cls ? cls : \"\", true).style('font', font).text(text).each(function () {\n      rect = this.getBoundingClientRect();\n    });\n    dummy.remove();\n    return rect;\n  };\n\n  ChartInternal.prototype.generateXYForText = function (areaIndices, barIndices, lineIndices, forX) {\n    var $$ = this,\n        getAreaPoints = $$.generateGetAreaPoints(areaIndices, false),\n        getBarPoints = $$.generateGetBarPoints(barIndices, false),\n        getLinePoints = $$.generateGetLinePoints(lineIndices, false),\n        getter = forX ? $$.getXForText : $$.getYForText;\n    return function (d, i) {\n      var getPoints = $$.isAreaType(d) ? getAreaPoints : $$.isBarType(d) ? getBarPoints : getLinePoints;\n      return getter.call($$, getPoints(d, i), d, this);\n    };\n  };\n\n  ChartInternal.prototype.getXForText = function (points, d, textElement) {\n    var $$ = this,\n        box = textElement.getBoundingClientRect(),\n        xPos,\n        padding;\n\n    if ($$.config.axis_rotated) {\n      padding = $$.isBarType(d) ? 4 : 6;\n      xPos = points[2][1] + padding * (d.value < 0 ? -1 : 1);\n    } else {\n      xPos = $$.hasType('bar') ? (points[2][0] + points[0][0]) / 2 : points[0][0];\n    } // show labels regardless of the domain if value is null\n\n\n    if (d.value === null) {\n      if (xPos > $$.width) {\n        xPos = $$.width - box.width;\n      } else if (xPos < 0) {\n        xPos = 4;\n      }\n    }\n\n    return xPos;\n  };\n\n  ChartInternal.prototype.getYForText = function (points, d, textElement) {\n    var $$ = this,\n        box = textElement.getBoundingClientRect(),\n        yPos;\n\n    if ($$.config.axis_rotated) {\n      yPos = (points[0][0] + points[2][0] + box.height * 0.6) / 2;\n    } else {\n      yPos = points[2][1];\n\n      if (d.value < 0 || d.value === 0 && !$$.hasPositiveValue) {\n        yPos += box.height;\n\n        if ($$.isBarType(d) && $$.isSafari()) {\n          yPos -= 3;\n        } else if (!$$.isBarType(d) && $$.isChrome()) {\n          yPos += 3;\n        }\n      } else {\n        yPos += $$.isBarType(d) ? -3 : -6;\n      }\n    } // show labels regardless of the domain if value is null\n\n\n    if (d.value === null && !$$.config.axis_rotated) {\n      if (yPos < box.height) {\n        yPos = box.height;\n      } else if (yPos > this.height) {\n        yPos = this.height - 4;\n      }\n    }\n\n    return yPos;\n  };\n\n  ChartInternal.prototype.initTitle = function () {\n    var $$ = this;\n    $$.title = $$.svg.append(\"text\").text($$.config.title_text).attr(\"class\", $$.CLASS.title);\n  };\n\n  ChartInternal.prototype.redrawTitle = function () {\n    var $$ = this;\n    $$.title.attr(\"x\", $$.xForTitle.bind($$)).attr(\"y\", $$.yForTitle.bind($$));\n  };\n\n  ChartInternal.prototype.xForTitle = function () {\n    var $$ = this,\n        config = $$.config,\n        position = config.title_position || 'left',\n        x;\n\n    if (position.indexOf('right') >= 0) {\n      x = $$.currentWidth - $$.getTextRect($$.title.node().textContent, $$.CLASS.title, $$.title.node()).width - config.title_padding.right;\n    } else if (position.indexOf('center') >= 0) {\n      x = ($$.currentWidth - $$.getTextRect($$.title.node().textContent, $$.CLASS.title, $$.title.node()).width) / 2;\n    } else {\n      // left\n      x = config.title_padding.left;\n    }\n\n    return x;\n  };\n\n  ChartInternal.prototype.yForTitle = function () {\n    var $$ = this;\n    return $$.config.title_padding.top + $$.getTextRect($$.title.node().textContent, $$.CLASS.title, $$.title.node()).height;\n  };\n\n  ChartInternal.prototype.getTitlePadding = function () {\n    var $$ = this;\n    return $$.yForTitle() + $$.config.title_padding.bottom;\n  };\n\n  ChartInternal.prototype.initTooltip = function () {\n    var $$ = this,\n        config = $$.config,\n        i;\n    $$.tooltip = $$.selectChart.style(\"position\", \"relative\").append(\"div\").attr('class', CLASS.tooltipContainer).style(\"position\", \"absolute\").style(\"pointer-events\", \"none\").style(\"display\", \"none\"); // Show tooltip if needed\n\n    if (config.tooltip_init_show) {\n      if ($$.isTimeSeries() && isString(config.tooltip_init_x)) {\n        config.tooltip_init_x = $$.parseDate(config.tooltip_init_x);\n\n        for (i = 0; i < $$.data.targets[0].values.length; i++) {\n          if ($$.data.targets[0].values[i].x - config.tooltip_init_x === 0) {\n            break;\n          }\n        }\n\n        config.tooltip_init_x = i;\n      }\n\n      $$.tooltip.html(config.tooltip_contents.call($$, $$.data.targets.map(function (d) {\n        return $$.addName(d.values[config.tooltip_init_x]);\n      }), $$.axis.getXAxisTickFormat(), $$.getYFormat($$.hasArcType()), $$.color));\n      $$.tooltip.style(\"top\", config.tooltip_init_position.top).style(\"left\", config.tooltip_init_position.left).style(\"display\", \"block\");\n    }\n  };\n\n  ChartInternal.prototype.getTooltipSortFunction = function () {\n    var $$ = this,\n        config = $$.config;\n\n    if (config.data_groups.length === 0 || config.tooltip_order !== undefined) {\n      // if data are not grouped or if an order is specified\n      // for the tooltip values we sort them by their values\n      var order = config.tooltip_order;\n\n      if (order === undefined) {\n        order = config.data_order;\n      }\n\n      var valueOf = function valueOf(obj) {\n        return obj ? obj.value : null;\n      }; // if data are not grouped, we sort them by their value\n\n\n      if (isString(order) && order.toLowerCase() === 'asc') {\n        return function (a, b) {\n          return valueOf(a) - valueOf(b);\n        };\n      } else if (isString(order) && order.toLowerCase() === 'desc') {\n        return function (a, b) {\n          return valueOf(b) - valueOf(a);\n        };\n      } else if (isFunction(order)) {\n        // if the function is from data_order we need\n        // to wrap the returned function in order to format\n        // the sorted value to the expected format\n        var sortFunction = order;\n\n        if (config.tooltip_order === undefined) {\n          sortFunction = function sortFunction(a, b) {\n            return order(a ? {\n              id: a.id,\n              values: [a]\n            } : null, b ? {\n              id: b.id,\n              values: [b]\n            } : null);\n          };\n        }\n\n        return sortFunction;\n      } else if (isArray(order)) {\n        return function (a, b) {\n          return order.indexOf(a.id) - order.indexOf(b.id);\n        };\n      }\n    } else {\n      // if data are grouped, we follow the order of grouped targets\n      var ids = $$.orderTargets($$.data.targets).map(function (i) {\n        return i.id;\n      }); // if it was either asc or desc we need to invert the order\n      // returned by orderTargets\n\n      if ($$.isOrderAsc() || $$.isOrderDesc()) {\n        ids = ids.reverse();\n      }\n\n      return function (a, b) {\n        return ids.indexOf(a.id) - ids.indexOf(b.id);\n      };\n    }\n  };\n\n  ChartInternal.prototype.getTooltipContent = function (d, defaultTitleFormat, defaultValueFormat, color) {\n    var $$ = this,\n        config = $$.config,\n        titleFormat = config.tooltip_format_title || defaultTitleFormat,\n        nameFormat = config.tooltip_format_name || function (name) {\n      return name;\n    },\n        valueFormat = config.tooltip_format_value || defaultValueFormat,\n        text,\n        i,\n        title,\n        value,\n        name,\n        bgcolor;\n\n    var tooltipSortFunction = this.getTooltipSortFunction();\n\n    if (tooltipSortFunction) {\n      d.sort(tooltipSortFunction);\n    }\n\n    for (i = 0; i < d.length; i++) {\n      if (!(d[i] && (d[i].value || d[i].value === 0))) {\n        continue;\n      }\n\n      if (!text) {\n        title = sanitise(titleFormat ? titleFormat(d[i].x, d[i].index) : d[i].x);\n        text = \"<table class='\" + $$.CLASS.tooltip + \"'>\" + (title || title === 0 ? \"<tr><th colspan='2'>\" + title + \"</th></tr>\" : \"\");\n      }\n\n      value = sanitise(valueFormat(d[i].value, d[i].ratio, d[i].id, d[i].index, d));\n\n      if (value !== undefined) {\n        // Skip elements when their name is set to null\n        if (d[i].name === null) {\n          continue;\n        }\n\n        name = sanitise(nameFormat(d[i].name, d[i].ratio, d[i].id, d[i].index));\n        bgcolor = $$.levelColor ? $$.levelColor(d[i].value) : color(d[i].id);\n        text += \"<tr class='\" + $$.CLASS.tooltipName + \"-\" + $$.getTargetSelectorSuffix(d[i].id) + \"'>\";\n        text += \"<td class='name'><span style='background-color:\" + bgcolor + \"'></span>\" + name + \"</td>\";\n        text += \"<td class='value'>\" + value + \"</td>\";\n        text += \"</tr>\";\n      }\n    }\n\n    return text + \"</table>\";\n  };\n\n  ChartInternal.prototype.tooltipPosition = function (dataToShow, tWidth, tHeight, element) {\n    var $$ = this,\n        config = $$.config,\n        d3 = $$.d3;\n    var svgLeft, tooltipLeft, tooltipRight, tooltipTop, chartRight;\n    var forArc = $$.hasArcType(),\n        mouse = d3.mouse(element); // Determin tooltip position\n\n    if (forArc) {\n      tooltipLeft = ($$.width - ($$.isLegendRight ? $$.getLegendWidth() : 0)) / 2 + mouse[0];\n      tooltipTop = ($$.hasType('gauge') ? $$.height : $$.height / 2) + mouse[1] + 20;\n    } else {\n      svgLeft = $$.getSvgLeft(true);\n\n      if (config.axis_rotated) {\n        tooltipLeft = svgLeft + mouse[0] + 100;\n        tooltipRight = tooltipLeft + tWidth;\n        chartRight = $$.currentWidth - $$.getCurrentPaddingRight();\n        tooltipTop = $$.x(dataToShow[0].x) + 20;\n      } else {\n        tooltipLeft = svgLeft + $$.getCurrentPaddingLeft(true) + $$.x(dataToShow[0].x) + 20;\n        tooltipRight = tooltipLeft + tWidth;\n        chartRight = svgLeft + $$.currentWidth - $$.getCurrentPaddingRight();\n        tooltipTop = mouse[1] + 15;\n      }\n\n      if (tooltipRight > chartRight) {\n        // 20 is needed for Firefox to keep tooltip width\n        tooltipLeft -= tooltipRight - chartRight + 20;\n      }\n\n      if (tooltipTop + tHeight > $$.currentHeight) {\n        tooltipTop -= tHeight + 30;\n      }\n    }\n\n    if (tooltipTop < 0) {\n      tooltipTop = 0;\n    }\n\n    return {\n      top: tooltipTop,\n      left: tooltipLeft\n    };\n  };\n\n  ChartInternal.prototype.showTooltip = function (selectedData, element) {\n    var $$ = this,\n        config = $$.config;\n    var tWidth, tHeight, position;\n    var forArc = $$.hasArcType(),\n        dataToShow = selectedData.filter(function (d) {\n      return d && isValue(d.value);\n    }),\n        positionFunction = config.tooltip_position || ChartInternal.prototype.tooltipPosition;\n\n    if (dataToShow.length === 0 || !config.tooltip_show) {\n      return;\n    }\n\n    $$.tooltip.html(config.tooltip_contents.call($$, selectedData, $$.axis.getXAxisTickFormat(), $$.getYFormat(forArc), $$.color)).style(\"display\", \"block\"); // Get tooltip dimensions\n\n    tWidth = $$.tooltip.property('offsetWidth');\n    tHeight = $$.tooltip.property('offsetHeight');\n    position = positionFunction.call(this, dataToShow, tWidth, tHeight, element); // Set tooltip\n\n    $$.tooltip.style(\"top\", position.top + \"px\").style(\"left\", position.left + 'px');\n  };\n\n  ChartInternal.prototype.hideTooltip = function () {\n    this.tooltip.style(\"display\", \"none\");\n  };\n\n  ChartInternal.prototype.setTargetType = function (targetIds, type) {\n    var $$ = this,\n        config = $$.config;\n    $$.mapToTargetIds(targetIds).forEach(function (id) {\n      $$.withoutFadeIn[id] = type === config.data_types[id];\n      config.data_types[id] = type;\n    });\n\n    if (!targetIds) {\n      config.data_type = type;\n    }\n  };\n\n  ChartInternal.prototype.hasType = function (type, targets) {\n    var $$ = this,\n        types = $$.config.data_types,\n        has = false;\n    targets = targets || $$.data.targets;\n\n    if (targets && targets.length) {\n      targets.forEach(function (target) {\n        var t = types[target.id];\n\n        if (t && t.indexOf(type) >= 0 || !t && type === 'line') {\n          has = true;\n        }\n      });\n    } else if (Object.keys(types).length) {\n      Object.keys(types).forEach(function (id) {\n        if (types[id] === type) {\n          has = true;\n        }\n      });\n    } else {\n      has = $$.config.data_type === type;\n    }\n\n    return has;\n  };\n\n  ChartInternal.prototype.hasArcType = function (targets) {\n    return this.hasType('pie', targets) || this.hasType('donut', targets) || this.hasType('gauge', targets);\n  };\n\n  ChartInternal.prototype.isLineType = function (d) {\n    var config = this.config,\n        id = isString(d) ? d : d.id;\n    return !config.data_types[id] || ['line', 'spline', 'area', 'area-spline', 'step', 'area-step'].indexOf(config.data_types[id]) >= 0;\n  };\n\n  ChartInternal.prototype.isStepType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return ['step', 'area-step'].indexOf(this.config.data_types[id]) >= 0;\n  };\n\n  ChartInternal.prototype.isSplineType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return ['spline', 'area-spline'].indexOf(this.config.data_types[id]) >= 0;\n  };\n\n  ChartInternal.prototype.isAreaType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return ['area', 'area-spline', 'area-step'].indexOf(this.config.data_types[id]) >= 0;\n  };\n\n  ChartInternal.prototype.isBarType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return this.config.data_types[id] === 'bar';\n  };\n\n  ChartInternal.prototype.isScatterType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return this.config.data_types[id] === 'scatter';\n  };\n\n  ChartInternal.prototype.isPieType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return this.config.data_types[id] === 'pie';\n  };\n\n  ChartInternal.prototype.isGaugeType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return this.config.data_types[id] === 'gauge';\n  };\n\n  ChartInternal.prototype.isDonutType = function (d) {\n    var id = isString(d) ? d : d.id;\n    return this.config.data_types[id] === 'donut';\n  };\n\n  ChartInternal.prototype.isArcType = function (d) {\n    return this.isPieType(d) || this.isDonutType(d) || this.isGaugeType(d);\n  };\n\n  ChartInternal.prototype.lineData = function (d) {\n    return this.isLineType(d) ? [d] : [];\n  };\n\n  ChartInternal.prototype.arcData = function (d) {\n    return this.isArcType(d.data) ? [d] : [];\n  };\n  /* not used\n   function scatterData(d) {\n   return isScatterType(d) ? d.values : [];\n   }\n   */\n\n\n  ChartInternal.prototype.barData = function (d) {\n    return this.isBarType(d) ? d.values : [];\n  };\n\n  ChartInternal.prototype.lineOrScatterData = function (d) {\n    return this.isLineType(d) || this.isScatterType(d) ? d.values : [];\n  };\n\n  ChartInternal.prototype.barOrLineData = function (d) {\n    return this.isBarType(d) || this.isLineType(d) ? d.values : [];\n  };\n\n  ChartInternal.prototype.isSafari = function () {\n    var ua = window.navigator.userAgent;\n    return ua.indexOf('Safari') >= 0 && ua.indexOf('Chrome') < 0;\n  };\n\n  ChartInternal.prototype.isChrome = function () {\n    var ua = window.navigator.userAgent;\n    return ua.indexOf('Chrome') >= 0;\n  };\n\n  ChartInternal.prototype.initZoom = function () {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config,\n        startEvent;\n    $$.zoom = d3.zoom().on(\"start\", function () {\n      if (config.zoom_type !== 'scroll') {\n        return;\n      }\n\n      var e = d3.event.sourceEvent;\n\n      if (e && e.type === \"brush\") {\n        return;\n      }\n\n      startEvent = e;\n      config.zoom_onzoomstart.call($$.api, e);\n    }).on(\"zoom\", function () {\n      if (config.zoom_type !== 'scroll') {\n        return;\n      }\n\n      var e = d3.event.sourceEvent;\n\n      if (e && e.type === \"brush\") {\n        return;\n      }\n\n      $$.redrawForZoom();\n      config.zoom_onzoom.call($$.api, $$.x.orgDomain());\n    }).on('end', function () {\n      if (config.zoom_type !== 'scroll') {\n        return;\n      }\n\n      var e = d3.event.sourceEvent;\n\n      if (e && e.type === \"brush\") {\n        return;\n      } // if click, do nothing. otherwise, click interaction will be canceled.\n\n\n      if (e && startEvent.clientX === e.clientX && startEvent.clientY === e.clientY) {\n        return;\n      }\n\n      config.zoom_onzoomend.call($$.api, $$.x.orgDomain());\n    });\n\n    $$.zoom.updateDomain = function () {\n      if (d3.event && d3.event.transform) {\n        $$.x.domain(d3.event.transform.rescaleX($$.subX).domain());\n      }\n\n      return this;\n    };\n\n    $$.zoom.updateExtent = function () {\n      this.scaleExtent([1, Infinity]).translateExtent([[0, 0], [$$.width, $$.height]]).extent([[0, 0], [$$.width, $$.height]]);\n      return this;\n    };\n\n    $$.zoom.update = function () {\n      return this.updateExtent().updateDomain();\n    };\n\n    return $$.zoom.updateExtent();\n  };\n\n  ChartInternal.prototype.zoomTransform = function (range) {\n    var $$ = this,\n        s = [$$.x(range[0]), $$.x(range[1])];\n    return $$.d3.zoomIdentity.scale($$.width / (s[1] - s[0])).translate(-s[0], 0);\n  };\n\n  ChartInternal.prototype.initDragZoom = function () {\n    var $$ = this;\n    var d3 = $$.d3;\n    var config = $$.config;\n    var context = $$.context = $$.svg;\n    var brushXPos = $$.margin.left + 20.5;\n    var brushYPos = $$.margin.top + 0.5;\n\n    if (!(config.zoom_type === 'drag' && config.zoom_enabled)) {\n      return;\n    }\n\n    var getZoomedDomain = function getZoomedDomain(selection) {\n      return selection && selection.map(function (x) {\n        return $$.x.invert(x);\n      });\n    };\n\n    var brush = $$.dragZoomBrush = d3.brushX().on(\"start\", function () {\n      $$.api.unzoom();\n      $$.svg.select(\".\" + CLASS.dragZoom).classed(\"disabled\", false);\n      config.zoom_onzoomstart.call($$.api, d3.event.sourceEvent);\n    }).on(\"brush\", function () {\n      config.zoom_onzoom.call($$.api, getZoomedDomain(d3.event.selection));\n    }).on(\"end\", function () {\n      if (d3.event.selection == null) {\n        return;\n      }\n\n      var zoomedDomain = getZoomedDomain(d3.event.selection);\n\n      if (!config.zoom_disableDefaultBehavior) {\n        $$.api.zoom(zoomedDomain);\n      }\n\n      $$.svg.select(\".\" + CLASS.dragZoom).classed(\"disabled\", true);\n      config.zoom_onzoomend.call($$.api, zoomedDomain);\n    });\n    context.append(\"g\").classed(CLASS.dragZoom, true).attr(\"clip-path\", $$.clipPath).attr(\"transform\", \"translate(\" + brushXPos + \",\" + brushYPos + \")\").call(brush);\n  };\n\n  ChartInternal.prototype.getZoomDomain = function () {\n    var $$ = this,\n        config = $$.config,\n        d3 = $$.d3,\n        min = d3.min([$$.orgXDomain[0], config.zoom_x_min]),\n        max = d3.max([$$.orgXDomain[1], config.zoom_x_max]);\n    return [min, max];\n  };\n\n  ChartInternal.prototype.redrawForZoom = function () {\n    var $$ = this,\n        d3 = $$.d3,\n        config = $$.config,\n        zoom = $$.zoom,\n        x = $$.x;\n\n    if (!config.zoom_enabled) {\n      return;\n    }\n\n    if ($$.filterTargetsToShow($$.data.targets).length === 0) {\n      return;\n    }\n\n    zoom.update();\n\n    if (config.zoom_disableDefaultBehavior) {\n      return;\n    }\n\n    if ($$.isCategorized() && x.orgDomain()[0] === $$.orgXDomain[0]) {\n      x.domain([$$.orgXDomain[0] - 1e-10, x.orgDomain()[1]]);\n    }\n\n    $$.redraw({\n      withTransition: false,\n      withY: config.zoom_rescale,\n      withSubchart: false,\n      withEventRect: false,\n      withDimension: false\n    });\n\n    if (d3.event.sourceEvent && d3.event.sourceEvent.type === 'mousemove') {\n      $$.cancelClick = true;\n    }\n  };\n\n  return c3;\n\n})));\n\n","// svg-pan-zoom v3.6.0\n// https://github.com/ariutta/svg-pan-zoom\n!function t(e,o,n){function i(r,a){if(!o[r]){if(!e[r]){var l=\"function\"==typeof require&&require;if(!a&&l)return l(r,!0);if(s)return s(r,!0);var u=new Error(\"Cannot find module '\"+r+\"'\");throw u.code=\"MODULE_NOT_FOUND\",u}var h=o[r]={exports:{}};e[r][0].call(h.exports,function(t){var o=e[r][1][t];return i(o?o:t)},h,h.exports,t,e,o,n)}return o[r].exports}for(var s=\"function\"==typeof require&&require,r=0;r<n.length;r++)i(n[r]);return i}({1:[function(t,e,o){var n=t(\"./svg-pan-zoom.js\");!function(t,o){\"function\"==typeof define&&define.amd?define(\"svg-pan-zoom\",[],function(){return n}):\"undefined\"!=typeof e&&e.exports&&(e.exports=n,t.svgPanZoom=n)}(window,document)},{\"./svg-pan-zoom.js\":4}],2:[function(t,e,o){var n=t(\"./svg-utilities\");e.exports={enable:function(t){var e=t.svg.querySelector(\"defs\");e||(e=document.createElementNS(n.svgNS,\"defs\"),t.svg.appendChild(e));var o=e.querySelector(\"style#svg-pan-zoom-controls-styles\");if(!o){var i=document.createElementNS(n.svgNS,\"style\");i.setAttribute(\"id\",\"svg-pan-zoom-controls-styles\"),i.setAttribute(\"type\",\"text/css\"),i.textContent=\".svg-pan-zoom-control { cursor: pointer; fill: black; fill-opacity: 0.333; } .svg-pan-zoom-control:hover { fill-opacity: 0.8; } .svg-pan-zoom-control-background { fill: white; fill-opacity: 0.5; } .svg-pan-zoom-control-background { fill-opacity: 0.8; }\",e.appendChild(i)}var s=document.createElementNS(n.svgNS,\"g\");s.setAttribute(\"id\",\"svg-pan-zoom-controls\"),s.setAttribute(\"transform\",\"translate(\"+(t.width-70)+\" \"+(t.height-76)+\") scale(0.75)\"),s.setAttribute(\"class\",\"svg-pan-zoom-control\"),s.appendChild(this._createZoomIn(t)),s.appendChild(this._createZoomReset(t)),s.appendChild(this._createZoomOut(t)),t.svg.appendChild(s),t.controlIcons=s},_createZoomIn:function(t){var e=document.createElementNS(n.svgNS,\"g\");e.setAttribute(\"id\",\"svg-pan-zoom-zoom-in\"),e.setAttribute(\"transform\",\"translate(30.5 5) scale(0.015)\"),e.setAttribute(\"class\",\"svg-pan-zoom-control\"),e.addEventListener(\"click\",function(){t.getPublicInstance().zoomIn()},!1),e.addEventListener(\"touchstart\",function(){t.getPublicInstance().zoomIn()},!1);var o=document.createElementNS(n.svgNS,\"rect\");o.setAttribute(\"x\",\"0\"),o.setAttribute(\"y\",\"0\"),o.setAttribute(\"width\",\"1500\"),o.setAttribute(\"height\",\"1400\"),o.setAttribute(\"class\",\"svg-pan-zoom-control-background\"),e.appendChild(o);var i=document.createElementNS(n.svgNS,\"path\");return i.setAttribute(\"d\",\"M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\"),i.setAttribute(\"class\",\"svg-pan-zoom-control-element\"),e.appendChild(i),e},_createZoomReset:function(t){var e=document.createElementNS(n.svgNS,\"g\");e.setAttribute(\"id\",\"svg-pan-zoom-reset-pan-zoom\"),e.setAttribute(\"transform\",\"translate(5 35) scale(0.4)\"),e.setAttribute(\"class\",\"svg-pan-zoom-control\"),e.addEventListener(\"click\",function(){t.getPublicInstance().reset()},!1),e.addEventListener(\"touchstart\",function(){t.getPublicInstance().reset()},!1);var o=document.createElementNS(n.svgNS,\"rect\");o.setAttribute(\"x\",\"2\"),o.setAttribute(\"y\",\"2\"),o.setAttribute(\"width\",\"182\"),o.setAttribute(\"height\",\"58\"),o.setAttribute(\"class\",\"svg-pan-zoom-control-background\"),e.appendChild(o);var i=document.createElementNS(n.svgNS,\"path\");i.setAttribute(\"d\",\"M33.051,20.632c-0.742-0.406-1.854-0.609-3.338-0.609h-7.969v9.281h7.769c1.543,0,2.701-0.188,3.473-0.562c1.365-0.656,2.048-1.953,2.048-3.891C35.032,22.757,34.372,21.351,33.051,20.632z\"),i.setAttribute(\"class\",\"svg-pan-zoom-control-element\"),e.appendChild(i);var s=document.createElementNS(n.svgNS,\"path\");return s.setAttribute(\"d\",\"M170.231,0.5H15.847C7.102,0.5,0.5,5.708,0.5,11.84v38.861C0.5,56.833,7.102,61.5,15.847,61.5h154.384c8.745,0,15.269-4.667,15.269-10.798V11.84C185.5,5.708,178.976,0.5,170.231,0.5z M42.837,48.569h-7.969c-0.219-0.766-0.375-1.383-0.469-1.852c-0.188-0.969-0.289-1.961-0.305-2.977l-0.047-3.211c-0.03-2.203-0.41-3.672-1.142-4.406c-0.732-0.734-2.103-1.102-4.113-1.102h-7.05v13.547h-7.055V14.022h16.524c2.361,0.047,4.178,0.344,5.45,0.891c1.272,0.547,2.351,1.352,3.234,2.414c0.731,0.875,1.31,1.844,1.737,2.906s0.64,2.273,0.64,3.633c0,1.641-0.414,3.254-1.242,4.84s-2.195,2.707-4.102,3.363c1.594,0.641,2.723,1.551,3.387,2.73s0.996,2.98,0.996,5.402v2.32c0,1.578,0.063,2.648,0.19,3.211c0.19,0.891,0.635,1.547,1.333,1.969V48.569z M75.579,48.569h-26.18V14.022h25.336v6.117H56.454v7.336h16.781v6H56.454v8.883h19.125V48.569z M104.497,46.331c-2.44,2.086-5.887,3.129-10.34,3.129c-4.548,0-8.125-1.027-10.731-3.082s-3.909-4.879-3.909-8.473h6.891c0.224,1.578,0.662,2.758,1.316,3.539c1.196,1.422,3.246,2.133,6.15,2.133c1.739,0,3.151-0.188,4.236-0.562c2.058-0.719,3.087-2.055,3.087-4.008c0-1.141-0.504-2.023-1.512-2.648c-1.008-0.609-2.607-1.148-4.796-1.617l-3.74-0.82c-3.676-0.812-6.201-1.695-7.576-2.648c-2.328-1.594-3.492-4.086-3.492-7.477c0-3.094,1.139-5.664,3.417-7.711s5.623-3.07,10.036-3.07c3.685,0,6.829,0.965,9.431,2.895c2.602,1.93,3.966,4.73,4.093,8.402h-6.938c-0.128-2.078-1.057-3.555-2.787-4.43c-1.154-0.578-2.587-0.867-4.301-0.867c-1.907,0-3.428,0.375-4.565,1.125c-1.138,0.75-1.706,1.797-1.706,3.141c0,1.234,0.561,2.156,1.682,2.766c0.721,0.406,2.25,0.883,4.589,1.43l6.063,1.43c2.657,0.625,4.648,1.461,5.975,2.508c2.059,1.625,3.089,3.977,3.089,7.055C108.157,41.624,106.937,44.245,104.497,46.331z M139.61,48.569h-26.18V14.022h25.336v6.117h-18.281v7.336h16.781v6h-16.781v8.883h19.125V48.569z M170.337,20.14h-10.336v28.43h-7.266V20.14h-10.383v-6.117h27.984V20.14z\"),s.setAttribute(\"class\",\"svg-pan-zoom-control-element\"),e.appendChild(s),e},_createZoomOut:function(t){var e=document.createElementNS(n.svgNS,\"g\");e.setAttribute(\"id\",\"svg-pan-zoom-zoom-out\"),e.setAttribute(\"transform\",\"translate(30.5 70) scale(0.015)\"),e.setAttribute(\"class\",\"svg-pan-zoom-control\"),e.addEventListener(\"click\",function(){t.getPublicInstance().zoomOut()},!1),e.addEventListener(\"touchstart\",function(){t.getPublicInstance().zoomOut()},!1);var o=document.createElementNS(n.svgNS,\"rect\");o.setAttribute(\"x\",\"0\"),o.setAttribute(\"y\",\"0\"),o.setAttribute(\"width\",\"1500\"),o.setAttribute(\"height\",\"1400\"),o.setAttribute(\"class\",\"svg-pan-zoom-control-background\"),e.appendChild(o);var i=document.createElementNS(n.svgNS,\"path\");return i.setAttribute(\"d\",\"M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z\"),i.setAttribute(\"class\",\"svg-pan-zoom-control-element\"),e.appendChild(i),e},disable:function(t){t.controlIcons&&(t.controlIcons.parentNode.removeChild(t.controlIcons),t.controlIcons=null)}}},{\"./svg-utilities\":5}],3:[function(t,e,o){var n=t(\"./svg-utilities\"),i=t(\"./utilities\"),s=function(t,e){this.init(t,e)};s.prototype.init=function(t,e){this.viewport=t,this.options=e,this.originalState={zoom:1,x:0,y:0},this.activeState={zoom:1,x:0,y:0},this.updateCTMCached=i.proxy(this.updateCTM,this),this.requestAnimationFrame=i.createRequestAnimationFrame(this.options.refreshRate),this.viewBox={x:0,y:0,width:0,height:0},this.cacheViewBox();var o=this.processCTM();this.setCTM(o),this.updateCTM()},s.prototype.cacheViewBox=function(){var t=this.options.svg.getAttribute(\"viewBox\");if(t){var e=t.split(/[\\s\\,]/).filter(function(t){return t}).map(parseFloat);this.viewBox.x=e[0],this.viewBox.y=e[1],this.viewBox.width=e[2],this.viewBox.height=e[3];var o=Math.min(this.options.width/this.viewBox.width,this.options.height/this.viewBox.height);this.activeState.zoom=o,this.activeState.x=(this.options.width-this.viewBox.width*o)/2,this.activeState.y=(this.options.height-this.viewBox.height*o)/2,this.updateCTMOnNextFrame(),this.options.svg.removeAttribute(\"viewBox\")}else this.simpleViewBoxCache()},s.prototype.simpleViewBoxCache=function(){var t=this.viewport.getBBox();this.viewBox.x=t.x,this.viewBox.y=t.y,this.viewBox.width=t.width,this.viewBox.height=t.height},s.prototype.getViewBox=function(){return i.extend({},this.viewBox)},s.prototype.processCTM=function(){var t=this.getCTM();if(this.options.fit||this.options.contain){var e;e=this.options.fit?Math.min(this.options.width/this.viewBox.width,this.options.height/this.viewBox.height):Math.max(this.options.width/this.viewBox.width,this.options.height/this.viewBox.height),t.a=e,t.d=e,t.e=-this.viewBox.x*e,t.f=-this.viewBox.y*e}if(this.options.center){var o=.5*(this.options.width-(this.viewBox.width+2*this.viewBox.x)*t.a),n=.5*(this.options.height-(this.viewBox.height+2*this.viewBox.y)*t.a);t.e=o,t.f=n}return this.originalState.zoom=t.a,this.originalState.x=t.e,this.originalState.y=t.f,t},s.prototype.getOriginalState=function(){return i.extend({},this.originalState)},s.prototype.getState=function(){return i.extend({},this.activeState)},s.prototype.getZoom=function(){return this.activeState.zoom},s.prototype.getRelativeZoom=function(){return this.activeState.zoom/this.originalState.zoom},s.prototype.computeRelativeZoom=function(t){return t/this.originalState.zoom},s.prototype.getPan=function(){return{x:this.activeState.x,y:this.activeState.y}},s.prototype.getCTM=function(){var t=this.options.svg.createSVGMatrix();return t.a=this.activeState.zoom,t.b=0,t.c=0,t.d=this.activeState.zoom,t.e=this.activeState.x,t.f=this.activeState.y,t},s.prototype.setCTM=function(t){var e=this.isZoomDifferent(t),o=this.isPanDifferent(t);if(e||o){if(e&&(this.options.beforeZoom(this.getRelativeZoom(),this.computeRelativeZoom(t.a))===!1?(t.a=t.d=this.activeState.zoom,e=!1):(this.updateCache(t),this.options.onZoom(this.getRelativeZoom()))),o){var n=this.options.beforePan(this.getPan(),{x:t.e,y:t.f}),s=!1,r=!1;n===!1?(t.e=this.getPan().x,t.f=this.getPan().y,s=r=!0):i.isObject(n)&&(n.x===!1?(t.e=this.getPan().x,s=!0):i.isNumber(n.x)&&(t.e=n.x),n.y===!1?(t.f=this.getPan().y,r=!0):i.isNumber(n.y)&&(t.f=n.y)),s&&r||!this.isPanDifferent(t)?o=!1:(this.updateCache(t),this.options.onPan(this.getPan()))}(e||o)&&this.updateCTMOnNextFrame()}},s.prototype.isZoomDifferent=function(t){return this.activeState.zoom!==t.a},s.prototype.isPanDifferent=function(t){return this.activeState.x!==t.e||this.activeState.y!==t.f},s.prototype.updateCache=function(t){this.activeState.zoom=t.a,this.activeState.x=t.e,this.activeState.y=t.f},s.prototype.pendingUpdate=!1,s.prototype.updateCTMOnNextFrame=function(){this.pendingUpdate||(this.pendingUpdate=!0,this.requestAnimationFrame.call(window,this.updateCTMCached))},s.prototype.updateCTM=function(){var t=this.getCTM();n.setCTM(this.viewport,t,this.defs),this.pendingUpdate=!1,this.options.onUpdatedCTM&&this.options.onUpdatedCTM(t)},e.exports=function(t,e){return new s(t,e)}},{\"./svg-utilities\":5,\"./utilities\":7}],4:[function(t,e,o){var n=t(\"./uniwheel\"),i=t(\"./control-icons\"),s=t(\"./utilities\"),r=t(\"./svg-utilities\"),a=t(\"./shadow-viewport\"),l=function(t,e){this.init(t,e)},u={viewportSelector:\".svg-pan-zoom_viewport\",panEnabled:!0,controlIconsEnabled:!1,zoomEnabled:!0,dblClickZoomEnabled:!0,mouseWheelZoomEnabled:!0,preventMouseEventsDefault:!0,zoomScaleSensitivity:.1,minZoom:.5,maxZoom:10,fit:!0,contain:!1,center:!0,refreshRate:\"auto\",beforeZoom:null,onZoom:null,beforePan:null,onPan:null,customEventsHandler:null,eventsListenerElement:null,onUpdatedCTM:null},h={passive:!0};l.prototype.init=function(t,e){var o=this;this.svg=t,this.defs=t.querySelector(\"defs\"),r.setupSvgAttributes(this.svg),this.options=s.extend(s.extend({},u),e),this.state=\"none\";var n=r.getBoundingClientRectNormalized(t);this.width=n.width,this.height=n.height,this.viewport=a(r.getOrCreateViewport(this.svg,this.options.viewportSelector),{svg:this.svg,width:this.width,height:this.height,fit:this.options.fit,contain:this.options.contain,center:this.options.center,refreshRate:this.options.refreshRate,beforeZoom:function(t,e){if(o.viewport&&o.options.beforeZoom)return o.options.beforeZoom(t,e)},onZoom:function(t){if(o.viewport&&o.options.onZoom)return o.options.onZoom(t)},beforePan:function(t,e){if(o.viewport&&o.options.beforePan)return o.options.beforePan(t,e)},onPan:function(t){if(o.viewport&&o.options.onPan)return o.options.onPan(t)},onUpdatedCTM:function(t){if(o.viewport&&o.options.onUpdatedCTM)return o.options.onUpdatedCTM(t)}});var l=this.getPublicInstance();l.setBeforeZoom(this.options.beforeZoom),l.setOnZoom(this.options.onZoom),l.setBeforePan(this.options.beforePan),l.setOnPan(this.options.onPan),l.setOnUpdatedCTM(this.options.onUpdatedCTM),this.options.controlIconsEnabled&&i.enable(this),this.lastMouseWheelEventTime=Date.now(),this.setupHandlers()},l.prototype.setupHandlers=function(){var t=this,e=null;if(this.eventListeners={mousedown:function(o){var n=t.handleMouseDown(o,e);return e=o,n},touchstart:function(o){var n=t.handleMouseDown(o,e);return e=o,n},mouseup:function(e){return t.handleMouseUp(e)},touchend:function(e){return t.handleMouseUp(e)},mousemove:function(e){return t.handleMouseMove(e)},touchmove:function(e){return t.handleMouseMove(e)},mouseleave:function(e){return t.handleMouseUp(e)},touchleave:function(e){return t.handleMouseUp(e)},touchcancel:function(e){return t.handleMouseUp(e)}},null!=this.options.customEventsHandler){this.options.customEventsHandler.init({svgElement:this.svg,eventsListenerElement:this.options.eventsListenerElement,instance:this.getPublicInstance()});var o=this.options.customEventsHandler.haltEventListeners;if(o&&o.length)for(var n=o.length-1;n>=0;n--)this.eventListeners.hasOwnProperty(o[n])&&delete this.eventListeners[o[n]]}for(var i in this.eventListeners)(this.options.eventsListenerElement||this.svg).addEventListener(i,this.eventListeners[i],!this.options.preventMouseEventsDefault&&h);this.options.mouseWheelZoomEnabled&&(this.options.mouseWheelZoomEnabled=!1,this.enableMouseWheelZoom())},l.prototype.enableMouseWheelZoom=function(){if(!this.options.mouseWheelZoomEnabled){var t=this;this.wheelListener=function(e){return t.handleMouseWheel(e)};var e=!this.options.preventMouseEventsDefault;n.on(this.options.eventsListenerElement||this.svg,this.wheelListener,e),this.options.mouseWheelZoomEnabled=!0}},l.prototype.disableMouseWheelZoom=function(){if(this.options.mouseWheelZoomEnabled){var t=!this.options.preventMouseEventsDefault;n.off(this.options.eventsListenerElement||this.svg,this.wheelListener,t),this.options.mouseWheelZoomEnabled=!1}},l.prototype.handleMouseWheel=function(t){if(this.options.zoomEnabled&&\"none\"===this.state){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1);var e=t.deltaY||1,o=Date.now()-this.lastMouseWheelEventTime,n=3+Math.max(0,30-o);this.lastMouseWheelEventTime=Date.now(),\"deltaMode\"in t&&0===t.deltaMode&&t.wheelDelta&&(e=0===t.deltaY?0:Math.abs(t.wheelDelta)/t.deltaY),e=-.3<e&&e<.3?e:(e>0?1:-1)*Math.log(Math.abs(e)+10)/n;var i=this.svg.getScreenCTM().inverse(),s=r.getEventPoint(t,this.svg).matrixTransform(i),a=Math.pow(1+this.options.zoomScaleSensitivity,-1*e);this.zoomAtPoint(a,s)}},l.prototype.zoomAtPoint=function(t,e,o){var n=this.viewport.getOriginalState();o?(t=Math.max(this.options.minZoom*n.zoom,Math.min(this.options.maxZoom*n.zoom,t)),t/=this.getZoom()):this.getZoom()*t<this.options.minZoom*n.zoom?t=this.options.minZoom*n.zoom/this.getZoom():this.getZoom()*t>this.options.maxZoom*n.zoom&&(t=this.options.maxZoom*n.zoom/this.getZoom());var i=this.viewport.getCTM(),s=e.matrixTransform(i.inverse()),r=this.svg.createSVGMatrix().translate(s.x,s.y).scale(t).translate(-s.x,-s.y),a=i.multiply(r);a.a!==i.a&&this.viewport.setCTM(a)},l.prototype.zoom=function(t,e){this.zoomAtPoint(t,r.getSvgCenterPoint(this.svg,this.width,this.height),e)},l.prototype.publicZoom=function(t,e){e&&(t=this.computeFromRelativeZoom(t)),this.zoom(t,e)},l.prototype.publicZoomAtPoint=function(t,e,o){if(o&&(t=this.computeFromRelativeZoom(t)),\"SVGPoint\"!==s.getType(e)){if(!(\"x\"in e&&\"y\"in e))throw new Error(\"Given point is invalid\");e=r.createSVGPoint(this.svg,e.x,e.y)}this.zoomAtPoint(t,e,o)},l.prototype.getZoom=function(){return this.viewport.getZoom()},l.prototype.getRelativeZoom=function(){return this.viewport.getRelativeZoom()},l.prototype.computeFromRelativeZoom=function(t){return t*this.viewport.getOriginalState().zoom},l.prototype.resetZoom=function(){var t=this.viewport.getOriginalState();this.zoom(t.zoom,!0)},l.prototype.resetPan=function(){this.pan(this.viewport.getOriginalState())},l.prototype.reset=function(){this.resetZoom(),this.resetPan()},l.prototype.handleDblClick=function(t){if(this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),this.options.controlIconsEnabled){var e=t.target.getAttribute(\"class\")||\"\";if(e.indexOf(\"svg-pan-zoom-control\")>-1)return!1}var o;o=t.shiftKey?1/(2*(1+this.options.zoomScaleSensitivity)):2*(1+this.options.zoomScaleSensitivity);var n=r.getEventPoint(t,this.svg).matrixTransform(this.svg.getScreenCTM().inverse());this.zoomAtPoint(o,n)},l.prototype.handleMouseDown=function(t,e){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),s.mouseAndTouchNormalize(t,this.svg),this.options.dblClickZoomEnabled&&s.isDblClick(t,e)?this.handleDblClick(t):(this.state=\"pan\",this.firstEventCTM=this.viewport.getCTM(),this.stateOrigin=r.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()))},l.prototype.handleMouseMove=function(t){if(this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),\"pan\"===this.state&&this.options.panEnabled){var e=r.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()),o=this.firstEventCTM.translate(e.x-this.stateOrigin.x,e.y-this.stateOrigin.y);this.viewport.setCTM(o)}},l.prototype.handleMouseUp=function(t){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),\"pan\"===this.state&&(this.state=\"none\")},l.prototype.fit=function(){var t=this.viewport.getViewBox(),e=Math.min(this.width/t.width,this.height/t.height);this.zoom(e,!0)},l.prototype.contain=function(){var t=this.viewport.getViewBox(),e=Math.max(this.width/t.width,this.height/t.height);this.zoom(e,!0)},l.prototype.center=function(){var t=this.viewport.getViewBox(),e=.5*(this.width-(t.width+2*t.x)*this.getZoom()),o=.5*(this.height-(t.height+2*t.y)*this.getZoom());this.getPublicInstance().pan({x:e,y:o})},l.prototype.updateBBox=function(){this.viewport.simpleViewBoxCache()},l.prototype.pan=function(t){var e=this.viewport.getCTM();e.e=t.x,e.f=t.y,this.viewport.setCTM(e)},l.prototype.panBy=function(t){var e=this.viewport.getCTM();e.e+=t.x,e.f+=t.y,this.viewport.setCTM(e)},l.prototype.getPan=function(){var t=this.viewport.getState();return{x:t.x,y:t.y}},l.prototype.resize=function(){var t=r.getBoundingClientRectNormalized(this.svg);this.width=t.width,this.height=t.height;var e=this.viewport;e.options.width=this.width,e.options.height=this.height,e.processCTM(),this.options.controlIconsEnabled&&(this.getPublicInstance().disableControlIcons(),this.getPublicInstance().enableControlIcons())},l.prototype.destroy=function(){var t=this;this.beforeZoom=null,this.onZoom=null,this.beforePan=null,this.onPan=null,this.onUpdatedCTM=null,null!=this.options.customEventsHandler&&this.options.customEventsHandler.destroy({svgElement:this.svg,eventsListenerElement:this.options.eventsListenerElement,instance:this.getPublicInstance()});for(var e in this.eventListeners)(this.options.eventsListenerElement||this.svg).removeEventListener(e,this.eventListeners[e],!this.options.preventMouseEventsDefault&&h);this.disableMouseWheelZoom(),this.getPublicInstance().disableControlIcons(),this.reset(),c=c.filter(function(e){return e.svg!==t.svg}),delete this.options,delete this.viewport,delete this.publicInstance,delete this.pi,this.getPublicInstance=function(){return null}},l.prototype.getPublicInstance=function(){var t=this;return this.publicInstance||(this.publicInstance=this.pi={enablePan:function(){return t.options.panEnabled=!0,t.pi},disablePan:function(){return t.options.panEnabled=!1,t.pi},isPanEnabled:function(){return!!t.options.panEnabled},pan:function(e){return t.pan(e),t.pi},panBy:function(e){return t.panBy(e),t.pi},getPan:function(){return t.getPan()},setBeforePan:function(e){return t.options.beforePan=null===e?null:s.proxy(e,t.publicInstance),t.pi},setOnPan:function(e){return t.options.onPan=null===e?null:s.proxy(e,t.publicInstance),t.pi},enableZoom:function(){return t.options.zoomEnabled=!0,t.pi},disableZoom:function(){return t.options.zoomEnabled=!1,t.pi},isZoomEnabled:function(){return!!t.options.zoomEnabled},enableControlIcons:function(){return t.options.controlIconsEnabled||(t.options.controlIconsEnabled=!0,i.enable(t)),t.pi},disableControlIcons:function(){return t.options.controlIconsEnabled&&(t.options.controlIconsEnabled=!1,i.disable(t)),t.pi},isControlIconsEnabled:function(){return!!t.options.controlIconsEnabled},enableDblClickZoom:function(){return t.options.dblClickZoomEnabled=!0,t.pi},disableDblClickZoom:function(){return t.options.dblClickZoomEnabled=!1,t.pi},isDblClickZoomEnabled:function(){return!!t.options.dblClickZoomEnabled},enableMouseWheelZoom:function(){return t.enableMouseWheelZoom(),t.pi},disableMouseWheelZoom:function(){return t.disableMouseWheelZoom(),t.pi},isMouseWheelZoomEnabled:function(){return!!t.options.mouseWheelZoomEnabled},setZoomScaleSensitivity:function(e){return t.options.zoomScaleSensitivity=e,t.pi},setMinZoom:function(e){return t.options.minZoom=e,t.pi},setMaxZoom:function(e){return t.options.maxZoom=e,t.pi},setBeforeZoom:function(e){return t.options.beforeZoom=null===e?null:s.proxy(e,t.publicInstance),t.pi},setOnZoom:function(e){return t.options.onZoom=null===e?null:s.proxy(e,t.publicInstance),t.pi},zoom:function(e){return t.publicZoom(e,!0),t.pi},zoomBy:function(e){return t.publicZoom(e,!1),t.pi},zoomAtPoint:function(e,o){return t.publicZoomAtPoint(e,o,!0),t.pi},zoomAtPointBy:function(e,o){return t.publicZoomAtPoint(e,o,!1),t.pi},zoomIn:function(){return this.zoomBy(1+t.options.zoomScaleSensitivity),t.pi},zoomOut:function(){return this.zoomBy(1/(1+t.options.zoomScaleSensitivity)),t.pi},getZoom:function(){return t.getRelativeZoom()},setOnUpdatedCTM:function(e){return t.options.onUpdatedCTM=null===e?null:s.proxy(e,t.publicInstance),t.pi},resetZoom:function(){return t.resetZoom(),t.pi},resetPan:function(){return t.resetPan(),t.pi},reset:function(){return t.reset(),t.pi},fit:function(){return t.fit(),t.pi},contain:function(){return t.contain(),t.pi},center:function(){return t.center(),t.pi},updateBBox:function(){return t.updateBBox(),t.pi},resize:function(){return t.resize(),t.pi},getSizes:function(){return{width:t.width,height:t.height,realZoom:t.getZoom(),viewBox:t.viewport.getViewBox()}},destroy:function(){return t.destroy(),t.pi}}),this.publicInstance};var c=[],p=function(t,e){var o=s.getSvg(t);if(null===o)return null;for(var n=c.length-1;n>=0;n--)if(c[n].svg===o)return c[n].instance.getPublicInstance();return c.push({svg:o,instance:new l(o,e)}),c[c.length-1].instance.getPublicInstance()};e.exports=p},{\"./control-icons\":2,\"./shadow-viewport\":3,\"./svg-utilities\":5,\"./uniwheel\":6,\"./utilities\":7}],5:[function(t,e,o){var n=t(\"./utilities\"),i=\"unknown\";document.documentMode&&(i=\"ie\"),e.exports={svgNS:\"http://www.w3.org/2000/svg\",xmlNS:\"http://www.w3.org/XML/1998/namespace\",xmlnsNS:\"http://www.w3.org/2000/xmlns/\",xlinkNS:\"http://www.w3.org/1999/xlink\",evNS:\"http://www.w3.org/2001/xml-events\",getBoundingClientRectNormalized:function(t){if(t.clientWidth&&t.clientHeight)return{width:t.clientWidth,height:t.clientHeight};if(t.getBoundingClientRect())return t.getBoundingClientRect();throw new Error(\"Cannot get BoundingClientRect for SVG.\")},getOrCreateViewport:function(t,e){var o=null;if(o=n.isElement(e)?e:t.querySelector(e),!o){var i=Array.prototype.slice.call(t.childNodes||t.children).filter(function(t){return\"defs\"!==t.nodeName&&\"#text\"!==t.nodeName});1===i.length&&\"g\"===i[0].nodeName&&null===i[0].getAttribute(\"transform\")&&(o=i[0])}if(!o){var s=\"viewport-\"+(new Date).toISOString().replace(/\\D/g,\"\");o=document.createElementNS(this.svgNS,\"g\"),o.setAttribute(\"id\",s);var r=t.childNodes||t.children;if(r&&r.length>0)for(var a=r.length;a>0;a--)\"defs\"!==r[r.length-a].nodeName&&o.appendChild(r[r.length-a]);t.appendChild(o)}var l=[];return o.getAttribute(\"class\")&&(l=o.getAttribute(\"class\").split(\" \")),~l.indexOf(\"svg-pan-zoom_viewport\")||(l.push(\"svg-pan-zoom_viewport\"),o.setAttribute(\"class\",l.join(\" \"))),o},setupSvgAttributes:function(t){if(t.setAttribute(\"xmlns\",this.svgNS),t.setAttributeNS(this.xmlnsNS,\"xmlns:xlink\",this.xlinkNS),t.setAttributeNS(this.xmlnsNS,\"xmlns:ev\",this.evNS),null!==t.parentNode){var e=t.getAttribute(\"style\")||\"\";e.toLowerCase().indexOf(\"overflow\")===-1&&t.setAttribute(\"style\",\"overflow: hidden; \"+e)}},internetExplorerRedisplayInterval:300,refreshDefsGlobal:n.throttle(function(){for(var t=document.querySelectorAll(\"defs\"),e=t.length,o=0;o<e;o++){var n=t[o];n.parentNode.insertBefore(n,n)}},this?this.internetExplorerRedisplayInterval:null),setCTM:function(t,e,o){var n=this,s=\"matrix(\"+e.a+\",\"+e.b+\",\"+e.c+\",\"+e.d+\",\"+e.e+\",\"+e.f+\")\";t.setAttributeNS(null,\"transform\",s),\"transform\"in t.style?t.style.transform=s:\"-ms-transform\"in t.style?t.style[\"-ms-transform\"]=s:\"-webkit-transform\"in t.style&&(t.style[\"-webkit-transform\"]=s),\"ie\"===i&&o&&(o.parentNode.insertBefore(o,o),window.setTimeout(function(){n.refreshDefsGlobal()},n.internetExplorerRedisplayInterval))},getEventPoint:function(t,e){var o=e.createSVGPoint();return n.mouseAndTouchNormalize(t,e),o.x=t.clientX,o.y=t.clientY,o},getSvgCenterPoint:function(t,e,o){return this.createSVGPoint(t,e/2,o/2)},createSVGPoint:function(t,e,o){var n=t.createSVGPoint();return n.x=e,n.y=o,n}}},{\"./utilities\":7}],6:[function(t,e,o){e.exports=function(){function t(t,e){var o=function(t){!t&&(t=window.event);var o={originalEvent:t,target:t.target||t.srcElement,type:\"wheel\",deltaMode:\"MozMousePixelScroll\"==t.type?0:1,deltaX:0,delatZ:0,preventDefault:function(){t.preventDefault?t.preventDefault():t.returnValue=!1}};return\"mousewheel\"==u?(o.deltaY=-.025*t.wheelDelta,t.wheelDeltaX&&(o.deltaX=-.025*t.wheelDeltaX)):o.deltaY=t.detail,e(o)};return c.push({element:t,fn:o}),o}function e(t){for(var e=0;e<c.length;e++)if(c[e].element===t)return c[e].fn;return function(){}}function o(t){for(var e=0;e<c.length;e++)if(c[e].element===t)return c.splice(e,1)}function n(e,o,n,i){var s;s=\"wheel\"===u?n:t(e,n),e[a](h+o,s,!!i&&p)}function i(t,n,i,s){var r;r=\"wheel\"===u?i:e(t),t[l](h+n,r,!!s&&p),o(t)}function s(t,e,o){n(t,u,e,o),\"DOMMouseScroll\"==u&&n(t,\"MozMousePixelScroll\",e,o)}function r(t,e,o){i(t,u,e,o),\"DOMMouseScroll\"==u&&i(t,\"MozMousePixelScroll\",e,o)}var a,l,u,h=\"\",c=[],p={passive:!0};return window.addEventListener?(a=\"addEventListener\",l=\"removeEventListener\"):(a=\"attachEvent\",l=\"detachEvent\",h=\"on\"),u=\"onwheel\"in document.createElement(\"div\")?\"wheel\":void 0!==document.onmousewheel?\"mousewheel\":\"DOMMouseScroll\",{on:s,off:r}}()},{}],7:[function(t,e,o){function n(t){return function(e){window.setTimeout(e,t)}}e.exports={extend:function(t,e){t=t||{};for(var o in e)this.isObject(e[o])?t[o]=this.extend(t[o],e[o]):t[o]=e[o];return t},isElement:function(t){return t instanceof HTMLElement||t instanceof SVGElement||t instanceof SVGSVGElement||t&&\"object\"==typeof t&&null!==t&&1===t.nodeType&&\"string\"==typeof t.nodeName},isObject:function(t){return\"[object Object]\"===Object.prototype.toString.call(t)},isNumber:function(t){return!isNaN(parseFloat(t))&&isFinite(t)},getSvg:function(t){var e,o;if(this.isElement(t))e=t;else{if(!(\"string\"==typeof t||t instanceof String))throw new Error(\"Provided selector is not an HTML object nor String\");if(e=document.querySelector(t),!e)throw new Error(\"Provided selector did not find any elements. Selector: \"+t)}if(\"svg\"===e.tagName.toLowerCase())o=e;else if(\"object\"===e.tagName.toLowerCase())o=e.contentDocument.documentElement;else{if(\"embed\"!==e.tagName.toLowerCase())throw\"img\"===e.tagName.toLowerCase()?new Error('Cannot script an SVG in an \"img\" element. Please use an \"object\" element or an in-line SVG.'):new Error(\"Cannot get SVG.\");o=e.getSVGDocument().documentElement}return o},proxy:function(t,e){return function(){return t.apply(e,arguments)}},getType:function(t){return Object.prototype.toString.apply(t).replace(/^\\[object\\s/,\"\").replace(/\\]$/,\"\")},mouseAndTouchNormalize:function(t,e){if(void 0===t.clientX||null===t.clientX)if(t.clientX=0,t.clientY=0,void 0!==t.touches&&t.touches.length){if(void 0!==t.touches[0].clientX)t.clientX=t.touches[0].clientX,t.clientY=t.touches[0].clientY;else if(void 0!==t.touches[0].pageX){var o=e.getBoundingClientRect();t.clientX=t.touches[0].pageX-o.left,t.clientY=t.touches[0].pageY-o.top}}else void 0!==t.originalEvent&&void 0!==t.originalEvent.clientX&&(t.clientX=t.originalEvent.clientX,t.clientY=t.originalEvent.clientY)},isDblClick:function(t,e){if(2===t.detail)return!0;if(void 0!==e&&null!==e){var o=t.timeStamp-e.timeStamp,n=Math.sqrt(Math.pow(t.clientX-e.clientX,2)+Math.pow(t.clientY-e.clientY,2));return o<250&&n<10}return!1},now:Date.now||function(){return(new Date).getTime()},throttle:function(t,e,o){var n,i,s,r=this,a=null,l=0;o||(o={});var u=function(){l=o.leading===!1?0:r.now(),a=null,s=t.apply(n,i),a||(n=i=null)};return function(){var h=r.now();l||o.leading!==!1||(l=h);var c=e-(h-l);return n=this,i=arguments,c<=0||c>e?(clearTimeout(a),a=null,l=h,s=t.apply(n,i),a||(n=i=null)):a||o.trailing===!1||(a=setTimeout(u,c)),s}},createRequestAnimationFrame:function(t){var e=null;return\"auto\"!==t&&t<60&&t>1&&(e=Math.floor(1e3/t)),null===e?window.requestAnimationFrame||n(33):n(e)}}},{}]},{},[1]);\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2018, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Combine the SWISH components.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\ndefine('jswish',[ \"jquery\",\n\t \"config\",\n\t \"preferences\",\n\t \"history\",\n\t \"modal\",\n\t \"chat\",\n\t \"splitter\",\n\t \"bootstrap\",\n\t \"pane\",\n\t \"tabbed\",\n\t \"notebook\",\n\t \"navbar\",\n\t \"search\",\n\t \"editor\",\n\t \"query\",\n\t \"runner\",\n\t \"term\",\n\t \"laconic\",\n\t \"login\",\n\t \"chatroom\",\n\t \"version\",\n\t \"d3\",\n\t \"c3\",\n\t \"svg-pan-zoom\"\n       ], function($, config, preferences, history, modal) {\n\npreferences.setDefault(\"semantic-highlighting\", true);\npreferences.setDefault(\"emacs-keybinding\", false);\npreferences.setDefault(\"new-tab\", true);\npreferences.setDefault(\"preserve-state\", true);\npreferences.setInform(\"preserve-state\", \".unloadable\");\n\n(function($) {\n  var pluginName = 'swish';\n\n  function glyph(name, func) {\n    func.glyph = name;\n    return func;\n  }\n\n  function icon(name, func) {\n    func.typeIcon = name;\n    return func;\n  }\n\n  var defaults = {\n    menu: {\n      \"File\":\n      { \"Save ...\": glyph(\"cloud-upload\", function() {\n\t  menuBroadcast(\"save\", \"as\");\n\t}),\n\t\"Info & history ...\": glyph(\"info-sign\", function() {\n\t  menuBroadcast(\"fileInfo\");\n\t}),\n\t\"Reload\": glyph(\"refresh\", function() {\n\t  menuBroadcast(\"reload\");\n\t}),\n\t\"Open recent\": {\n\t  type: \"submenu\",\n\t  glyph: \"paperclip\",\n\t  action: function(ev) {\n\t    history.openRecent(ev, $(this).data('document'));\n\t  },\n\t  update: history.updateRecentUL\n\t},\n\t\"Share\": \"--\",\n\t\"Follow ...\": config.http.locations.follow_file_options ?\n\t\t      glyph(\"eye-open\", function() {\n\t  menuBroadcast(\"follow-file\");\n\t}) : undefined,\n\t\"Start TogetherJS ...\": icon(\"togetherjs\", function() {\n\t  $(\"body\").swish('collaborate');\n\t}),\n\t\"Export\": \"--\",\n\t\"Download\": glyph(\"floppy-save\", function() {\n\t  menuBroadcast(\"download\");\n\t}),\n\t\"Print ...\": glyph(\"print\", function() {\n\t  menuBroadcast(\"print\");\n\t})\n      },\n      \"Edit\":\n      { \"Clear messages\": function() {\n\t  menuBroadcast(\"clearMessages\");\n\t},\n\t\"Changes\": \"--\",\n\t\"View changes\": function() {\n\t  menuBroadcast(\"diff\");\n\t},\n\t\"Edit\": \"--\",\n\t\"Find (Ctrl-F)\": function() {\n\t  menuBroadcast(\"edit-command\", \"find\");\n\t},\n\t\"Find and replace (Shift-Ctrl-F)\": function() {\n\t  menuBroadcast(\"edit-command\", \"replace\");\n\t},\n\t\"Jump to line (Alt-G)\": function() {\n\t  menuBroadcast(\"edit-command\", \"jumpToLine\");\n\t},\n\t\"Options\": \"--\",\n\t\"Semantic highlighting\": {\n\t  preference: \"semantic-highlighting\",\n\t  type: \"checkbox\"\n\t},\n\t\"Emacs Keybinding\": {\n\t  preference: \"emacs-keybinding\",\n\t  type: \"checkbox\",\n\t  value: \"false\"\n\t},\n\t\"Open document in new tab\": {\n\t  preference: \"new-tab\",\n\t  type: \"checkbox\",\n\t  value: \"true\"\n\t},\n\t\"Preserve state in browser\": {\n\t  preference: \"preserve-state\",\n\t  type: \"checkbox\",\n\t  value: \"true\"\n\t}\n      },\n      \"Examples\": function(navbar, dropdown) {\n\t$(\"body\").swish('populateExamples', navbar, dropdown);\n      },\n      \"Help\": function(navbar, dropdown) {\n\t$(\"body\").swish('populateHelp', navbar, dropdown);\n      }\n    }\n  }; // defaults;\n\n\n  /** @lends $.fn.swish */\n  var methods = {\n    /**\n     * Initialise SWISH on the page. At this moment, a page can only\n     * contain one SWISH application and swish is normally initialised\n     * on the body.  This might change.\n     * @example $(\"body\").swish();\n     * {Object} options\n     * {Boolean} options.show_beware If `true`, show a dialogue box\n     * telling this is a limited version.\n     */\n    _init: function(options) {\n      swishLogo();\n      setupModal();\n      setupPanes();\n      setupResize();\n      setupUnload();\n      $(\"#search\").search();\n\n      options = options||{};\n      this.addClass(\"swish\");\n\n      return this.each(function() {\n\tvar elem = $(this);\n\tvar data = {};\t\t\t/* private data */\n\n\t$(\"#navbar\").navbar(defaults.menu);\n\t$(\"#login\").login();\n\n\tvar  editor = $(\".prolog-editor\").prologEditor({save:true});\n\tdata.runner = $(\".prolog-runners\").prologRunners();\n\tdata.query  = $(\".prolog-query\").queryEditor(\n          { source:   function() {\n\t      return elem.swish('prologSource');\n\t    },\n\t    sourceID: function() {\n\t      return editor.prologEditor('getSourceID');\n\t    },\n\t    examples: elem.swish('examples'),\n\t    runner:   data.runner,\n\t    editor:   editor[0]\n\t  });\n\telem.data(pluginName, data);\t/* store with element */\n\tdata.restoring = true;\n\n\t$(\".notebook\").notebook();\n\n\tif ( options.show_beware &&\n\t     !(swish.option && swish.option.show_beware == false) )\n\t  menuBroadcast(\"help\", {file:\"beware.html\", notagain:\"beware\"});\n\n\tif ( window.location.href.indexOf(\"&togetherjs=\") > 0 )\n\t  elem.swish('collaborate');\n\n\t$(\"#chat\").chat('');\n\t$(\"#broadcast-bell\")\n\t\t.chatbell({\n\t\t  empty_title: \"Click to open chat\"\n\t\t});\n\t$(\"#chat-menu\").on(\"click\", \"a\", function(ev) {\n\t  var a = $(ev.target).closest(\"a\");\n\t  switch ( a.data('action') ) {\n\t  case 'chat-shared':\n\t    $(\"body\").swish('playFile', {\n\t      file: config.swish.hangout,\n\t      chat: 'large'\n\t    });\n\t    break;\n\t  case 'chat-about-file':\n\t    menuBroadcast(\"chat-about-file\");\n\t  }\n\t});\n\n\tsetInterval(function(){\n\t  $(\".each-minute\").trigger(\"minute\");\n\t}, 60000);\n\n\tif ( elem[pluginName]('preserve_state') )\n\t{ $(\".unloadable\").trigger(\"restore\");\n\t}\n\n\tdelete data.restoring;\n\telem[pluginName]('runDelayedRestore');\n\t$().version('checkForUpdates');\n      });\n    },\n\n    /**\n     * @return {Boolean} `true` when we should save and restore\n     * the state to the browser local store.\n     */\n    preserve_state: function() {\n      if ( swish.option.preserve_state == false )\n\treturn false;\n      if ( preferences.getVal(\"preserve-state\") == false )\n\treturn false;\n\n      function getQueryVariable(variable) {\n\tvar query = window.location.search.substring(1);\n\tvar vars = query.split('&');\n\tfor (var i = 0; i < vars.length; i++) {\n\t  var pair = vars[i].split('=');\n\t  if (decodeURIComponent(pair[0]) == variable) {\n\t    return decodeURIComponent(pair[1]);\n\t  }\n\t}\n      }\n\n      if ( getQueryVariable(\"restore\") == \"false\" )\n\treturn false;\n\n      return true;\n    },\n\n    afterRestore: function(f) {\n      var data = this.data(\"swish\");\n\n      if ( data.after_restore )\n\tdata.after_restore.push(f);\n      else\n\tdata.after_restore = [f];\n\n      return this;\n    },\n\n    runDelayedRestore: function() {\n      var swish = this;\n      var data = this.data(\"swish\");\n\n      if ( data.after_restore ) {\n\tvar f;\n\twhile( (f = data.after_restore.pop()) )\n\t  f.call(swish);\n      }\n\n      return this;\n    },\n\n\n    /**\n     * Trigger a global event in SWISH.  Currently defined events are:\n     *\n     *   - `help`        -- show a modal help window\n     *   - `source`      -- load a new source\n     *   - `saveProgram` -- save the current program\n     *\n     * This method triggers all elements of class\n     * `swish-event-receiver`.\n     *\n     * @param {String} name is the name of the trigger.\n     * @param {Object|null} data provides additional data for the event.\n     */\n    trigger: function(name, data) {\n      menuBroadcast(name, data);\n      return this;\n    },\n\n    /**\n     * Play a file from the webstore, loading it through ajax\n     * @param {String|Object} options If a string, the name\n     * of the file in the web storage\n     * @param {String} options.file is the name of the file in the web\n     * storage\n     * @param {Number} [options.line] is the initial line number\n     * @param {RegEx} [options.regex] search to highlight\n     * @param {Boolean} [options.showAllMatches] Show other matches on\n     * page.\n     * @param {Boolean} [options.newTab] if `true`, open the file in\n     * a new tab.\n     * @param {Boolean} [options.noHistory] if `true`, do not push the\n     * new document to the history.\n     * @param {Object} [options.prompt] provided for trace events.  Must\n     * be used to highlight the Prolog port at the indicated location.\n     */\n    playFile: function(options) {\n      var elem = this;\n      if ( typeof(options) == \"string\" )\n\toptions = {file:options};\n\n      var existing = this.find(\".storage\").storage('match', options);\n      if ( existing && existing.storage('expose', \"Already open\") )\n\treturn this;\t\t\t\t/* FIXME: go to line */\n\n      var url = config.http.locations.web_storage + options.file;\n      $.ajax({ url: url,\n\t       type: \"GET\",\n\t       data: {format: \"json\"},\n\t       success: function(reply) {\n\t\t reply.url = url;\n\t\t reply.st_type = \"gitty\";\n\n\t\t function copyAttrs(names) {\n\t\t   for(var i=0; i<names.length; i++) {\n\t\t     var name = names[i];\n\t\t     if ( options[name] )\n\t\t       reply[name] = options[name];\n\t\t   }\n\t\t }\n\n\t\t copyAttrs([ \"line\",\n\t\t\t     \"regex\", \"showAllMatches\",\n\t\t\t     \"newTab\", \"noHistory\",\n\t\t\t     \"prompt\", \"chat\"\n\t\t\t   ]);\n\n\t\t elem.swish('setSource', reply);\n\t       },\n\t       error: function(jqXHR) {\n\t\t modal.ajaxError(jqXHR);\n\t       }\n\t     });\n\n      return this;\n    },\n\n    /**\n     * Load file from a URL.  This fetches the data from the URL and\n     * broadcasts a `\"source\"` event that is normally picked up by\n     * the tabbed pane.\n     * @param {Object}   options\n     * @param {String}   options.url     URL to load.\n     * @param {Integer} [options.line]   Line to go to.\n     * @param {Regex}   [options.search] Text searched for.\n     */\n    playURL: function(options) {\n      var elem = this;\n      var existing = this.find(\".storage\").storage('match', options);\n\n      if ( existing && existing.storage('expose', \"Already open\") )\n\treturn this;\t\t\t\t/* FIXME: go to line */\n\n      $.ajax({ url: options.url,\n\t       type: \"GET\",\n\t       data: {format: \"json\"},\n\t       success: function(source) {\n\t\t var msg;\n\n\t\t if ( typeof(source) == \"string\" ) {\n\t\t   msg = { data: source };\n\t\t   msg.st_type = \"external\";\n\t\t } else if ( typeof(source) == \"object\" &&\n\t\t\t     typeof(source.data) == \"string\" ) {\n\t\t   msg = source;\n\t\t   msg.st_type = \"filesys\";\n\t\t } else {\n\t\t   alert(\"Invalid data\");\n\t\t   return;\n\t\t }\n\n\t\t msg.url  = options.url;\n\n\t\t function copyAttrs(names) {\n\t\t   for(var i=0; i<names.length; i++) {\n\t\t     var name = names[i];\n\t\t     if ( options[name] )\n\t\t       msg[name] = options[name];\n\t\t   }\n\t\t }\n\n\t\t copyAttrs([ \"line\",\n\t\t\t     \"regex\", \"showAllMatches\",\n\t\t\t     \"newTab\", \"noHistory\",\n\t\t\t     \"prompt\"\n\t\t\t   ]);\n\n\t\t elem.swish('setSource', msg);\n\t       },\n\t       error: function(jqXHR) {\n\t\t modal.ajaxError(jqXHR);\n\t       }\n      });\n    },\n\n    /**\n     * Open a source.  If we are in fullscreen mode and the current\n     * object cannot be opened by the current fullscreen node, we\n     * leave fullscreen mode.  Called by playFile and playURL.\n     */\n    setSource: function(src) {\n      var st = this.swish('isFullscreen');\n\n      if ( !(st && st.storage('setSource', src)) ) {\n\tif ( st )\n\t  this.swish('exitFullscreen');\n\tthis.find(\".tabbed\").tabbed('tabFromSource', src);\n      }\n\n      return this;\n    },\n\n\n    /**\n     * @param {Object} ex\n     * @param {String} ex.title is the title of the example\n     * @param {String} ex.file is the (file) name of the example\n     * @param {String} ex.href is the URL from which to download the\n     * program.\n     * @returns {Function|String} function that loads an example\n     */\n    openExampleFunction: function(ex) {\n      var swish = this;\n\n      if ( ex.type == \"divider\" ) {\n\treturn \"--\";\n      } else if ( ex.type == \"store\" ) {\n\treturn function() {\n\t  methods.playFile.call(swish, ex.file);\n\t};\n      } else {\n\treturn function() {\n\t  methods.playURL.call(swish, {url:ex.href});\n\t};\n      }\n    },\n\n    /**\n     * Populate the examples dropdown of the navigation bar. This\n     * method is used by the navigation bar initialization.\n     * @param {Object} navbar is the navigation bar\n     * @param {Object} dropdown is the examples dropdown\n     */\n    populateExamples: function(navbar, dropdown) {\n      var that = this;\n\n      that.off(\"examples-changed\")\n\t  .on(\"examples-changed\", function() {\n\t     $(\"#navbar\").navbar('clearDropdown', dropdown);\n\t     that.swish('populateExamples', navbar, dropdown);\n\t   });\n      $.ajax(config.http.locations.swish_examples,\n\t     { dataType: \"json\",\n\t       success: function(data) {\n\t\t for(var i=0; i<data.length; i++) {\n\t\t   var ex = data[i];\n\t\t   var title;\n\t\t   var options;\n\n\t\t   if ( ex == \"--\" || ex.type == \"divider\" ) {\n\t\t     title = \"--\";\n\t\t     options = \"--\";\n\t\t   } else {\n\t\t     var name = ex.file || ex.href;\n\t\t     title = ex.title;\n\t\t     options = that.swish('openExampleFunction', ex);\n\t\t     if ( name )\n\t\t       options.typeIcon = name.split('.').pop();\n\t\t   }\n\n\t\t   $(\"#navbar\").navbar('extendDropdown', dropdown,\n\t\t\t\t       title, options);\n\t\t }\n\t       },\n\t       error: function(jqXHR) {\n\t\t modal.ajaxError(jqXHR);\n\t       }\n\t     });\n      return this;\n    },\n\n    /**\n     * Populate the help dropdown of the navigation bar. This\n     * method is used by the navigation bar initialization.\n     * @param {Object} navbar is the navigation bar\n     * @param {Object} dropdown is the examples dropdown\n     */\n    populateHelp: function(navbar, dropdown) {\n      var that = this;\n\n      function openHelpFunction(help) {\n\treturn function() {\n\t  menuBroadcast(\"help\", {file:help.file});\n\t};\n      }\n\n      $.ajax(config.http.locations.swish_help_index,\n\t     { dataType: \"json\",\n\t       success: function(data) {\n\t\t for(var i=0; i<data.length; i++) {\n\t\t   var help = data[i];\n\t\t   var title;\n\t\t   var options;\n\n\t\t   if ( help == \"--\" || help.type == \"divider\" ) {\n\t\t     title = \"--\";\n\t\t     options = \"--\";\n\t\t   } else {\n\t\t     var name = help.file;\n\t\t     title = help.title;\n\t\t     options = openHelpFunction(help);\n\t\t   }\n\n\t\t   $(\"#navbar\").navbar('extendDropdown', dropdown,\n\t\t\t\t       title, options);\n\t\t }\n\t       },\n\t       error: function(jqXHR) {\n\t\t modal.ajaxError(jqXHR);\n\t       }\n\t     });\n      return this;\n    },\n\n\n    /**\n     * pick up all Prolog sources, preparing to execute a query. Currently\n     * picks up:\n     *\n     *   - The `.text()` from all elements that match\n     *   `\".background.prolog.source\"`\n     *   - The source of the Prolog editor.  We need some notion of a\n     *   _current_ Prolog editor.\n     */\n    prologSource: function() {\n      var list = [];\n      var src;\n\n      if ( (src=$(\".prolog-editor\").prologEditor('getSource', \"source\")) )\n\tlist.push(src);\n      if ( (src=$(\".background.prolog.source\").text()) )\n\tlist.push(src);\n\n      return list.join(\"\\n\\n\");\n    },\n\n    /**\n     * Pick up all breakpoints.  Currently assumes a single source.\n     * @param {String} pengineID is the pengine for which to set\n     * the breakpoints.\n     */\n    breakpoints: function(pengineID) {\n      return this.find(\".prolog-editor\")\n                 .prologEditor('getBreakpoints', pengineID)||[];\n    },\n\n    /**\n     * @param {Object} [options]\n     * @param {Boolean} [options.active=false] If `true`, only return\n     * info on the active tab\n     */\n    tabData: function(options) {\n      options = options||{};\n      if ( options.active ) {\n\treturn this.find(\".tab-pane.active .storage\").storage('getData', options);\n      } else {\n\treturn this.find(\".storage\").storage('getData', options);\n      }\n    },\n\n    /**\n     * Extract examples from `$(\".examples.prolog\").text()`.  If this\n     * does not exist, it returns a function that extracts the examples\n     * from the current Prolog source editor.\n     * @param {Boolean} [onlyglobal] if `true`, only extract globally\n     * listed examples.\n     * @returns {Array.String|null|Function}\n     */\n    examples: function(onlyglobal) {\n      var text = $(\".examples.prolog\").text();\n\n      if ( text ) {\n\treturn $().prologEditor('getExamples', text, false);\n      } else if ( onlyglobal != true ) {\n\treturn function() {\n\t  return $(\".prolog-editor\").prologEditor('getExamples');\n\t};\n      }\n    },\n\n    /**\n     * Make DOM element fullscreen\n     * @param {jQuery} node is the element to turn into fullscreen.\n     * Currently this only works for a notebook.\n     * @param {jQuery} main is the node getting the `fullscreen\n     * hamburger` class.\n     * @param {Boolean} [hide_navbar] if `true`, also hide\n     * the navigation bar.\n     */\n    fullscreen: function(node, main, hide_navbar) {\n      var swish = this;\n      var content = this.find(\".container.tile-top\");\n      var swishdata = this.data(\"swish\");\n\n      if ( swishdata.restoring ) {\n\tthis[pluginName]('afterRestore', function() {\n\t  swish.swish('fullscreen', node, main, hide_navbar);\n\t});\n\treturn this;\n      }\n\n      if ( !content.hasClass(\"fullscreen\") ) {\n\tif ( hide_navbar == true ||\n\t     ( config.swish.fullscreen &&\n\t       config.swish.fullscreen.hide_navbar == true ) )\n\t  this[pluginName]('showNavbar', false);\n\n\tvar data = this.data(\"fullscreen\");\n\tif ( !data ) {\n\t  data = {};\n\t  this.data(\"fullscreen\", data);\n\t}\n\tcontent.addClass(\"fullscreen\");\n\tmain = main||node;\n\tmain.addClass(\"fullscreen hamburger\");\n\tdata.fullscreen_origin = node.parent()[0];\n\tdata.fullscreen_main = main[0];\n\t$(content.children()[0]).hide();\n\tcontent.append(node);\n\tmain.trigger('fullscreen', true);\n      }\n\n      return this;\n    },\n\n    /**\n     * If some element is in fullscreen mode, revert\n     * back to tabbed mode.\n     * @return {Boolean} `true` if successful.\n     */\n    exitFullscreen: function() {\n      var content = this.find(\".container.tile-top\");\n\n      if ( content.hasClass(\"fullscreen\") ) {\n\tvar data = this.data(\"fullscreen\");\n\tvar node = $(content.children()[1]);\n\tvar main = data.fullscreen_main;\n\n\tthis[pluginName]('showNavbar', true);\n\n\tcontent.removeClass(\"fullscreen\");\n\t$(data.fullscreen_main).removeClass(\"fullscreen hamburger\");\n\t$(data.fullscreen_origin).append(node);\n\tdata.fullscreen_origin = null;\n\tdata.fullscreen_main = null;\n\t$(content.children()[0]).show();\n\t$(main).trigger('fullscreen', false);\n\n\treturn true;\n      }\n\n      return false;\n    },\n\n    /**\n     * Detect fullscreen mode\n     * @return {jQuery} storage object that is running in fullscreen\n     * mode.\n     */\n    isFullscreen: function() {\n      var content = this.find(\".container.tile-top\");\n\n      if ( content.hasClass(\"fullscreen\") ) {\n\tvar st = content.find(\".storage\");\n\tif ( st.length != 0 )\n\t  return st;\n      }\n    },\n\n    /**\n     * Control visibility of the navbar\n     * @param {Boolean} show controls whether or not the navbar\n     * is visible.\n     */\n    showNavbar: function(show) {\n      if ( show ) {\n\t$(\"nav.navbar\").attr(\"style\", \"display:block !important\")\n      } else {\n\t$(\"nav.navbar\").attr(\"style\", \"display:none !important\")\n      }\n    },\n\n    /**\n     * Open TogetherJS after lazy loading.\n     */\n    collaborate: function() {\n      var elem = this;\n      $(this).attr(\"data-end-togetherjs-html\", \"End collaboration\");\n      require([ \"https://togetherjs.com/togetherjs-min.js\"\n\t      ],\n\t      function() {\n\t\tTogetherJS(elem);\n\t      });\n      return this;\n    },\n\n    /**\n     * Show showUpdates\n     */\n    showUpdates: function(options) {\n      modal.show({\n        title: options.title || \"Recent SWISH updates\",\n\tbody: function() {\n\t  this.version(options);\n\t}\n      });\n    }\n  }; // methods\n\n  /**\n   * General actions on SWISH are sent as triggers.  Any part of\n   * the interface that is interested in events should add the class\n   * `swish-event-receiver` and listen to the events in which it is\n   * interested.\n   */\n  function menuBroadcast(event, data) {\n    $(\".swish-event-receiver\").trigger(event, data);\n  }\n\n  /**\n   * Turn elements with class `swish-logo` into the SWISH logo.\n   */\n  function swishLogo() {\n    $(\".swish-logo\")\n      .append($.el.b($.el.span({style:\"color:darkblue\"}, \"SWI\"),\n\t\t     $.el.span({style:\"color:maroon\"}, \"SH\")))\n      .css(\"margin-left\", \"30px\")\n      .css(\"font-size\", \"24px\")\n      .addClass(\"navbar-brand\");\n  }\n\n  /**\n   * Setup modal actions.  Subsequently, modal dialogue windows\n   * are opened by using the trigger `help`.\n   * @example $(\"body\").swish('action', 'help', {file:\"about.html\"});\n   */\n  function setupModal() {\n    if ( $(\"#modal\").length == 0 ) {\n      $(\"body\").append($.el.div({id:\"modal\"}));\n      $(\"#modal\").swishModal();\n    }\n  }\n\n  /**\n   * Setup the panes and allow for resizing them\n   */\n  function setupPanes() {\n    $(\".tile\").tile();\n    $(window).resize(function() { $(\".tile\").tile('resize'); });\n    $(\".tabbed\").tabbed();\n  }\n\n  function setupResize() {\n    $(window).resize(function() {\n      $(\".reactive-size\").trigger('reactive-resize');\n    });\n  }\n\n  function setupUnload() {\n    $(window).bind(\"beforeunload\", function(ev) {\n      var rc;\n\n      $(\".unloadable\").each(function() {\n\tvar r = {};\n\t$(this).trigger(\"unload\", r);\n\trc = rc||r.rc;\n      });\n\n      return rc;\n    });\n  }\n\n  /**\n   * <Class description>\n   *\n   * @class swish\n   * @tutorial jquery-doc\n   * @memberOf $.fn\n   * @param {String|Object} [method] Either a method name or the jQuery\n   * plugin initialization object.\n   * @param [...] Zero or more arguments passed to the jQuery `method`\n   */\n\n  $.fn.swish = function(method) {\n    if ( methods[method] ) {\n      return methods[method]\n\t.apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ( typeof method === 'object' || !method ) {\n      return methods._init.apply(this, arguments);\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.' + pluginName);\n    }\n  };\n}(jQuery));\n\n}); // define()\n;\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2018, VU University Amsterdam\n\t\t\t CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n *\n * RequireJS module to load additional web plugins. Such plugins notably\n * may deal with extending HTML cells in notebooks.\n */\n\ndefine('plugin',[ \"jquery\", \"config\", \"utils\" ],\n       function($, config, utils) {\n\nfunction to_array(x) {\n  if ( x !== undefined ) {\n    return $.isArray(x) ? x : [x];\n  } else {\n    return [];\n  }\n}\n\nfunction load_plugin(plugin) {\n  to_array(plugin.css).forEach(utils.loadCSS);\n\n  return to_array(plugin.js);\n}\n\nvar plugin = {\n  /**\n   * @return array of required JavaScript dependencies\n   */\n  load: function() {\n    var jsdeps = [];\n    if ( $.isArray(config.plugins) ) {\n      for(var i=0; i<config.plugins.length; i++) {\n\t$.merge(jsdeps, load_plugin(config.plugins[i]));\n      }\n    }\n\n    return jsdeps;\n  }\n};\n\nreturn plugin;\n});\n\n","/*  Part of SWISH\n\n    Author:        Jan Wielemaker\n    E-mail:        J.Wielemaker@cs.vu.nl\n    WWW:           http://www.swi-prolog.org\n    Copyright (C): 2014-2016, VU University Amsterdam\n\t\t\t      CWI Amsterdam\n    All rights reserved.\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n    1. Redistributions of source code must retain the above copyright\n       notice, this list of conditions and the following disclaimer.\n\n    2. Redistributions in binary form must reproduce the above copyright\n       notice, this list of conditions and the following disclaimer in\n       the documentation and/or other materials provided with the\n       distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n    \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n    COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n    POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @fileOverview\n * Load SWISH. Just provides the RequireJS config, requires jswish.js\n * and initialises this on the body.\n *\n * @version 0.2.0\n * @author Jan Wielemaker, J.Wielemaker@vu.nl\n * @requires jquery\n */\n\nrequire.config({\n  urlArgs: \"ts=\"+new Date().getTime(),\t/* prevent caching during development */\n  waitSeconds: 60,\t\t\t/* swish-min.js is big */\n  paths:\n  { jquery:      \"../bower_components/jquery/dist/jquery.min\",\n    \"jquery-ui\": \"../bower_components/jquery-ui/jquery-ui.min\",\n    laconic:     \"../bower_components/laconic/laconic\",\n    bootstrap:   \"../bower_components/bootstrap/dist/js/bootstrap.min\",\n    bloodhound:  \"../bower_components/typeahead.js/dist/bloodhound\",\n    typeahead:   \"../bower_components/typeahead.js/dist/typeahead.jquery\",\n    splitter:    \"../bower_components/jquery.splitter/js/jquery.splitter-0.15.0\",\n    tagmanager:  \"../bower_components/tagmanager/tagmanager\",\n    sha1:        \"../bower_components/js-sha1/src/sha1\",\n    c3:          \"../bower_components/c3/c3\",\n    d3:          \"../bower_components/d3/d3\",\n    \"svg-pan-zoom\": \"../bower_components/svg-pan-zoom/dist/svg-pan-zoom.min\",\n    sparkline:\t \"../bower_components/sparkline/dist/jquery.sparkline\",\n\n\t\t\t\t\t/* CodeMirror extensions */\n    \"cm/mode/prolog\": \"codemirror/mode/prolog\",\n    \"cm/addon/hover/prolog-hover\": \"codemirror/addon/hover/prolog-hover\",\n    \"cm/addon/hover/text-hover\": \"codemirror/addon/hover/text-hover\",\n    \"cm/addon/hint/templates-hint\": \"codemirror/addon/hint/templates-hint\",\n    \"cm/addon/hint/show-context-info\": \"codemirror/addon/hint/show-context-info\",\n\n\t\t\t\t\t/* Standard CodeMirror */\n    \"cm\" : \"../bower_components/codemirror\"\n  },\n  shim:\n  { bootstrap:\n    { deps:[\"jquery\"]\n    },\n    typeahead: /* HACK: See https://github.com/twitter/typeahead.js/issues/1211 */\n    { deps:[\"jquery\"],\n      init: function ($) {\n\treturn require.s.contexts._.registry['typeahead.js'].factory($);\n      }\n    },\n    bloodhound:\n    { deps:[\"jquery\"]\n    },\n    splitter:\n    { deps:[\"jquery\"]\n    },\n    laconic:\n    { deps:[\"jquery\"]\n    },\n    tagmanager:\n    { deps:[\"jquery\"]\n    },\n  }\n}); //require.config\n\n/*\n * Create the SWISH application.  Note that we need two levels of\n * require because the first gives us the location of the pengine\n * API, while the second fetches the pengines and starts the\n * application.\n */\nrequire([\"jquery\", \"config\", \"jswish\", \"plugin\"],\n\tfunction($, config, swish, plugin) {\n  var deps = plugin.load();\n\n  deps.push(config.http.locations.pengines+\"/pengines.js\");\n\n  require(deps, function() {\n    $(function() {\n      $(\"body\").swish(config.swish||{});\n    });\n  });\n});\n\n\ndefine(\"swish\", function(){});\n\n"]}
\ No newline at end of file